How to

Cite this tool

If you use CMPITool in your research, please cite:

Streffing, J. (2022). CMPITool: A Python framework for Climate Model Performance Indexing.
https://github.com/JanStreffing/cmpitool
https://doi.org/10.5281/zenodo.xxxxxxx

And the original methodology paper:

Reichler, T., & Kim, J. (2008). How Well Do Coupled Models Simulate Today's Climate?
Bulletin of the American Meteorological Society, 89(3), 303-312.
https://doi.org/10.1175/BAMS-89-3-303

Preprocess data for cmpitool

As a first time user, for non-CMORized model output, preparing the raw output for use in cmpitool will likely be the largest up-front time cost. Cmpitool is deliberatly kept simple with regards to its ability to load model and observational data. It does not possess a smart data loader that can deal with a large varity in input formats. Your input data thus has to adhere to a strict but easy to understand rule set:

  • Data is provided in one file netcdf file per variable, model, timeperiod, level/depth, and season.

  • The file name format is: ${variable}_${modelname}_${timeperiod}_${level}_${season}.nc. Example: pr_EC-Earth3_198912-201411_surface_DJF.nc

  • Variable names and units have to follow the CMOR standard.

  • Masked regions must use a recognized NAN value.

  • The format as output by cdo griddes is:

gridtype  = lonlat
gridsize  = 16380
xsize     = 180
ysize     = 91
xname     = lon
xlongname = "longitude"
xunits    = "degrees_east"
yname     = lat
ylongname = "latitude"
yunits    = "degrees_north"
xfirst    = 0
xinc      = 2
yfirst    = -90
yinc      = 2

It is up to the tool user to generate a script which turns the raw model output into the input for cmpitool. You can find a number of example script for CMORized and a handful for non-CMORized raw output in the subfolder preprocessing_examples.

Evaluate against your own experiment(s)

To evaluate your experiment(s) against your own set of eval_models, rather than the default cmpi6 set, follow these steps:

  1. For the experiment(s) that you want to evaluate against, run the analysis the the additional argument use_for_eval=True, e.g. cmpitool(model_path, models, use_for_eval=True)

  2. Set the models from step 1. as eval_models and define a new models dictionary for the experiments that you want to evaluate.

  3. Run the tool again with cmpitool(model_path, models, eval_models).