Skip to main content

🌍 ClimEval: Climate Model vs. Observation Verification Tool

📌 OVERVIEW

ClimEval is a Python package designed for climate model comparisons against observation datasets. It enables researchers and analysts to:

  • Efficiently compare climate model output vs. observational data.
  • Compute a range of evaluation metrics (continuous, event-based, probabilistic, and distribution-based).
  • Perform gridwise per-pixel analysis to assess spatial biases and detection capabilities.
  • Use Dask for parallel computing and GPU acceleration (optional).
  • Generate cartopy-based visualizations of climate fields and statistical maps

🔧 Installation

🛠 Install via PyPI:

pip install climeval

🐍 Install from Source (Development Version):

git clone https://github.com/shiv3679/ClimEval.git
cd ClimEval
pip install .

🖥 Dependencies:

ClimEval requires Python 3.7+ and the following dependencies:

  • numpy, xarray, dask, scipy
  • matplotlib, cartopy, pytest
  • Optional for GPU: cupy (requires CUDA)

To install dependencies separately:

pip install numpy xarray dask scipy matplotlib cartopy pytest

For GPU acceleration (optional, requires CUDA):

pip install cupy

Usage Guide

ClimEval can be used via CLI (Command-Line Interface) or Python API.

CLI Usage

climeval --help

Example Command:

climeval india_model_output_005deg_irregular_storm.nc india_obs_output_005deg_irregular_storm.nc --variable lightning_density --threshold 1.0 --visualize

CLI Options:

Usage: climeval [OPTIONS] MODEL_PATH OBS_PATH

Options:
  --variable TEXT       Variable to evaluate (e.g., 'temperature')
  --chunks TEXT         Dask chunking format (default: {'time': 10, 'lat': 200, 'lon': 200})
  --threshold FLOAT     Threshold for event-based metrics (default: 1.0)
  --visualize           Generate visualizations
  -h, --help           Show this message and exit.

Python API Usage

You can use ClimEval directly in Python scripts:

Example Usage

import xarray as xr
from climeval.core import compute_continuous_metrics, compute_event_metrics
from climeval.visualization import visualize_map, visualize_metric_map

# Load Datasets
model_ds = xr.open_dataset("model.nc")
obs_ds = xr.open_dataset("obs.nc")

# Select Variable
variable = "lightning_density"
model_da = model_ds[variable]
obs_da = obs_ds[variable]

# Compute Metrics
cont_metrics = compute_continuous_metrics(model_da, obs_da)
event_metrics = compute_event_metrics(model_da, obs_da, threshold=1.0)

print("Continuous Metrics:", cont_metrics)
print("Event-Based Metrics:", event_metrics)

# Visualization
visualize_map(model_da, obs_da, time_index=0)

📊 Metrics Computed

ClimEval calculates multiple climate verification metrics, categorized as:

  1. Continuous Metrics (Domain-wide)

    • MSE (Mean Squared Error)
    • MAE (Mean Absolute Error)
    • Bias (Mean Difference)
    • Correlation Coefficient (Corr)
  2. Event-Based Metrics

    • POD (Probability of Detection)
    • FAR (False Alarm Ratio)
    • CSI (Critical Success Index)
    • ETS (Equitable Threat Score)
    • FSS (Fractions Skill Score)
  3. Probabilistic Metrics

    • Brier Score (BS)
    • Brier Skill Score (BSS)
    • Ranked Probability Skill Score (RPSS)
  4. Distribution-Based Metrics

    • Wasserstein Distance
    • Jensen-Shannon Divergence
  5. Per-Pixel (Gridwise) Metrics

    • Bias Map
    • MAE Map
    • MSE Map
    • Correlation Map
    • POD, FAR, CSI, and ETS maps

🗺 Visualizations

ClimEval provides cartopy-based visualizations for model-observation comparison.

Example side-by-side model vs. observation plot:

from climeval.visualization import visualize_map
visualize_map(model_da, obs_da, time_index=0)

Example BIAS Map Visualization

from climeval.visualization import visualize_metric_map
bias_map = model_da.mean(dim="time") - obs_da.mean(dim="time")
visualize_metric_map(bias_map, title_str="Bias Map", cmap="RdBu", center=0)

⚠️ Common Issues & Fixes

NaN in Event-Based Metrics?

  • Try reducing --threshold (e.g., --threshold 0.5).
  • Ensure the dataset contains meaningful events above the threshold.

Wayland Warning on GNOME?

  • Fix by running:
export QT_QPA_PLATFORM=wayland
  • Alternative:
export QT_QPA_PLATFORM=xcb

Dask Errors?

  • Ensure no other Dask clusters are running (port 8787 conflicts).
  • Run:
pkill -f dask

to close any existing Dask processes.

GPU Not Recognized?

  • Ensure cupy is installed and CUDA drivers are configured.
  • Run:
import cupy as cp
print(cp.cuda.Device(0))

to check GPU availability.

🏗 Future Enhancements

  • ✔️ Better GPU Integration with optimized Dask-CuPy workflows.
  • ✔️ Integration with AI-Based Climate Predictions.
  • ✔️ More Advanced Regridding Methods (xesmf support).
  • ✔️ Interactive Web Interface for Metrics Visualization.

📜 License

ClimEval is open-source under the MIT License.

Feel free to contribute, improve, or modify it.

Contributions are welcome!

👨‍💻 Author

Release files for climeval 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for climeval 0.1.1
File Size Uploaded
climeval-0.1.1.tar.gz 19.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for climeval 0.1.1
File Interpreter ABI Platform
climeval-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 45.2 kB

Release files / climeval-0.1.1.tar.gz

Download URL climeval-0.1.1.tar.gz
Size 19.6 kB
Tags Source
SHA-256 checksum
How to use checksums
115d93d786c111af10727b2bcd40674ae7a880937defa223d67e6e259a5fe516
BLAKE2b-256 checksum
How to use checksums
0ac02f8c1361d766e827d5e2159fae84bdc6b38229249f5d3e8484e77eb69175
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.9.21

Release files / climeval-0.1.1-py3-none-any.whl

Download URL climeval-0.1.1-py3-none-any.whl
Size 25.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4c1feeea2d2365020836ca9b36df066d658fee6abcfc49dcb7db9a795c4ef6cb
BLAKE2b-256 checksum
How to use checksums
616789410255ee6720314d57a19fce70821893defb09e40c28b3d4ce8159f8ea
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.9.21

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page