cdo cmor
Blue beam: Explanation slides
Red beam: Contains instructions and executable code
EXAMPLE VALUES, NOT REPRESENTATIVE!
cdo cmor
Introduction
CMIP6
Recent era of Coupled Model Inter-comparison Project
Convention about climate data accepted in CMIP
Collection of operators to process climate data
Definitions and motivation
"Systematic analysis across models only easy to do if model output is written in
- a common format
- with files structured similary
- and with sufficient metadata uniformly stored"
Detailled requirements for coordinates, output variables and metadata can be found in the document
CMIP6_output_metadata_requirements_5Jan2018 from Taylor et. al (2018).
More information about global attributes, controlled vocabulary and filenames can be found in the document
CMIP6_global_attributes_filenames_CVs from Taylor et. al (2017)
# Get the strucutre of header of a example raw model output:
ncdump -h example_interface.nc
# results:
netcdf example_interface {
dimensions:
time = UNLIMITED ; // (12 currently)
lon = 384 ;
lat = 192 ;
height_2 = 1 ;
height = 1 ;
variables:
double time(time) ;
time:standard_name = "time" ;
time:units = "day as %Y%m%d.%f" ;
time:calendar = "proleptic_gregorian" ;
time:axis = "T" ;
float lon(lon) ;
lon:standard_name = "longitude" ;
lon:long_name = "longitude" ;
lon:units = "degrees_east" ;
lon:axis = "X" ;
float lat(lat) ;
lat:standard_name = "latitude" ;
lat:long_name = "latitude" ;
lat:units = "degrees_north" ;
lat:axis = "Y" ;
double height_2(height_2) ;
height_2:standard_name = "height" ;
height_2:long_name = "height" ;
height_2:units = "m" ;
height_2:positive = "up" ;
height_2:axis = "Z" ;
double height(height) ;
height:standard_name = "height" ;
height:long_name = "height" ;
height:units = "m" ;
height:positive = "up" ;
height:axis = "Z" ;
float uas(time, height_2, lat, lon) ;
uas:units = "m s-1" ;
uas:code = 1 ;
uas:table = 255 ;
float tas(time, height, lat, lon) ;
tas:units = "K" ;
tas:code = 1 ;
tas:table = 255 ;
// global attributes:
:CDI = "Climate Data Interface version 1.9.0 (http://mpimet.mpg.de/cdi)" ;
:Conventions = "CF-1.6" ;
:history = "Tue Sep 12 10:30:24 2017: cdo_recent_cmor2 merge testuas.nc testtas.nc test.nc\n",
"Tue Sep 12 10:30:01 2017: cdo_recent_cmor2 -setunit,m s-1 -selname,uas example_interface.nc testuas.nc\n",
"Tue Sep 12 10:03:02 2017: cdo_recent_cmor2 merge test.nc test2.nc test3.nc\n",
"Tue Sep 12 10:02:45 2017: cdo_recent_cmor2 -f nc setname,tas test.grb test.nc" ;
:institution = "Max-Planck-Institute for Meteorology" ;
:CDO = "Climate Data Operators version 1.9.1rc1 (http://mpimet.mpg.de/cdo)" ;
}
# Get the strucutre of a header of a CMIP6 compliant file:
ncdump -h .//CMIP6/CMIP/MPI-M/MPI-ESM-1-2-HR/historical/r1i1p1f1/Amon/tas/gn/v20180109/tas_Amon_MPI-ESM-1-2-HR_historical_r1i1p1f1_gn_185001-185012.nc
# results:
netcdf tas_Amon_MPI-ESM-1-2-HR_historical_r1i1p1f1_gn_185001-185012 {
dimensions:
time = UNLIMITED ; // (12 currently)
lat = 192 ;
lon = 384 ;
bnds = 2 ;
variables:
double time(time) ;
time:bounds = "time_bnds" ;
time:units = "days since 1850-1-1 00:00:00" ;
time:calendar = "proleptic_gregorian" ;
time:axis = "T" ;
time:long_name = "time" ;
time:standard_name = "time" ;
double time_bnds(time, bnds) ;
double lat(lat) ;
lat:bounds = "lat_bnds" ;
lat:units = "degrees_north" ;
lat:axis = "Y" ;
lat:long_name = "latitude" ;
lat:standard_name = "latitude" ;
double lat_bnds(lat, bnds) ;
double lon(lon) ;
lon:bounds = "lon_bnds" ;
lon:units = "degrees_east" ;
lon:axis = "X" ;
lon:long_name = "longitude" ;
lon:standard_name = "longitude" ;
double lon_bnds(lon, bnds) ;
double height ;
height:units = "m" ;
height:axis = "Z" ;
height:positive = "up" ;
height:long_name = "height" ;
height:standard_name = "height" ;
float tas(time, lat, lon) ;
tas:standard_name = "air_temperature" ;
tas:long_name = "Near-Surface Air Temperature" ;
tas:comment = "near-surface (usually, 2 meter) air temperature" ;
tas:units = "K" ;
tas:cell_methods = "area: time: mean" ;
tas:cell_measures = "area: areacella" ;
tas:history = "2018-01-09T13:40:08Z altered by CMOR: Treated scalar dimension: \'height\'. 2018-01-09T13:40:08Z altered by CMOR: replaced missing value flag (-9e+33) with standard missing value (1e+20)." ;
tas:coordinates = "height" ;
tas:missing_value = 1.e+20f ;
tas:_FillValue = 1.e+20f ;
// global attributes:
:Conventions = "CF-1.7 CMIP-6.2" ;
:activity_id = "CMIP" ;
:branch_method = "standard" ;
:branch_time_in_child = 365. ;
:branch_time_in_parent = 365. ;
:contact = "cmip6-mpi-esm@dkrz.de" ;
:creation_date = "2018-01-09T13:40:08Z" ;
:data_specs_version = "01.00.16" ;
:experiment = "all-forcing simulation of the recent past" ;
:experiment_id = "historical" ;
:external_variables = "areacella" ;
:forcing = "GHG Oz SD Sl Vl LU" ;
:forcing_index = 1 ;
:frequency = "mon" ;
:further_info_url = "https://furtherinfo.es-doc.org/coolness" ;
:grid = "gn" ;
:grid_label = "gn" ;
:history = "2018-01-09T13:40:08Z ; CMOR rewrote data to be consistent with CMIP6, CF-1.7 CMIP-6.2 and CF standards.;\n",
"Model raw output postprocessed with modelling environment (IMDI) at DKRZ: URL: :https://svn.dkrz.de/mad/Model/IMDI/trunk" ;
:initialization_index = 1 ;
:institute_id = "MPI-M" ;
:institution = "Max Planck Institute for Meteorology, Hamburg 20146, Germany" ;
:institution_id = "MPI-M" ;
:mip_era = "CMIP6" ;
:model_id = "MPI-ESM-1-2-HR" ;
:nominal_resolution = "100 km" ;
:parent_activity_id = "CMIP" ;
:parent_experiment_id = "piControl" ;
:parent_experiment_rip = "N/A" ;
:parent_mip_era = "CMIP6" ;
:parent_source_id = "MPI-ESM-1-2-HR" ;
:parent_time_units = "days since 1850-1-1 00:00:00" ;
:parent_variant_label = "r1i1p1f1" ;
:physics_index = 1 ;
:product = "output" ;
:project_id = "CMIP6" ;
:realization_index = 1 ;
:realm = "atmos" ;
:references = "ECHAM6: Stevens, B., et al. (2013), Atmospheric component of the MPI-M Earth system model: ECHAM6, J. Adv. Model. Earth Syst., 5, 146–172, doi:10.1002/jame.20015. JSBACH: Reick, C. H., T. Raddatz, V. Brovkin, and V. Gayler (2013), The representation of natural and anthropogenic land cover change in MPIESM, J. Adv. Model. Earth Syst., 5, 1–24, doi:10.1002/jame.20022" ;
:source = "MPI-ESM1.2-HR (2017): \n",
"aerosol: none, prescribed MACv2-SP\n",
"atmos: ECHAM6.3 (spectral T127; 384 x 192 longitude/latitude; 95 levels; top level 0.01 hPa)\n",
"atmosChem: none\n",
"land: JSBACH3.20\n",
"landIce: none/prescribed\n",
"ocean: MPIOM1.63 (tripolar TP04, approximately 0.4deg; 802 x 404 longitude/latitude; 40 levels; top grid cell 0-12 m)\n",
"ocnBgchem: HAMOCC\n",
"seaIce: unnamed (thermodynamic (Semtner zero-layer) dynamic (Hibler 79) sea ice model)" ;
:source_id = "MPI-ESM-1-2-HR" ;
:source_type = "AOGCM" ;
:sub_experiment = "none" ;
:sub_experiment_id = "none" ;
:table_id = "Amon" ;
:table_info = "Creation Date:(08 November 2017) MD5:0e73e044458fa79166d97d5cf546d0be" ;
:title = "MPI-ESM-1-2-HR output prepared for CMIP6" ;
:variable_id = "tas" ;
:variant_label = "r1i1p1f1" ;
:license = "CMIP6 model data produced by DKRZ is licensed under a Creative Commons Attribution ShareAlike 4.0 International License (https://creativecommons.org/licenses). Consult https://pcmdi.llnl.gov/CMIP6/TermsOfUse for terms of use governing CMIP6 output, including citation requirements and proper acknowledgment. Further information about this data, including some limitations, can be found via the further_info_url (recorded as a global attribute in this file) and. The data producers and data providers make no warranty, either express or implied, including, but not limited to, warranties of merchantability and fitness for a particular purpose. All liabilities arising from the supply of the information (including any liability arising in negligence) are excluded to the fullest extent permitted by law." ;
:cmor_version = "3.2.8" ;
:tracking_id = "hdl:21.14100/3b2ffff9-68d2-47e8-8c2c-c05711cde5da" ;
}
CMIP6 standard violations in example raw model output:
- File (and path) name
- Contains more than one variable
- No bounds for lats and lons
- No attributes for coordinate variables and target variables
- No required global attributes
- Scalar dimensions
Differences between CMIP5 and CMIP6:
-
Filenames and directory structures templates have been modified (see next slides)
-
A few CMIP5 global attributes have been renamed.
-
A number of additional global attributes are now required.
-
The controlled vocabularies have been modified.
#CMIP5
institute_id="MPI-M"
institution="Max Planck Institute for Meteorology"
#member=r1i1p1
#CMIP6
institution_id="MPI-M"
institution="Max Planck Institute for Meteorology, Hamburg 20146, Germany"
variant_label=r1i1p1f1
?
- CMOR ensures that ouput is CMIP compliant.
- Different CMIP standards can be produced
- Use synergies, avoid repeating wrok
- Why use CMOR to create CMIP standard?
- Why integrate CDO with CMOR?
No user side preparation of CMIP format description
- CDO is a well known tool with an active support
- The CDO's interface allows
- Different infile formats
- enables access to all infile information no matter how structured
Use the power of CDOs...
?
- Why use CMOR to create CMIP standard?
- Why integrate CDO with CMOR?
... to simplify CMOR usage:
?
- Why use CMOR to create CMIP standard?
- Why integrate CDO with CMOR?
cmor_setup();
cmor_dataset_json();
cmor_load_table();
cmor_set_table();
cmor_axis();
cmor_grid();
cmor_set_grid_mapping();
cmor_time_varying_grid_coordinate();
cmor_zfactor();
cmor_variable();
cmor_set_deflate();
cmor_set_variable_attribute();
cmor_create_output_path();
cmor_write();
cmor_close();
are included by one cdo cmor operator
cdo cmor,Amon,\
i=info_table.txt,\
gi=grid_info.nc,\
mt=mapping_table.txt\
infile
"variable_entry":{
"ccb": {
"frequency": "mon",
"modeling_realm":"atmos"
}
}
CMIP6_Amon.json
grid_
info.nc
mapping_
table.txt
ncdump -h mrsofc_fx_MPIESM-1-2-HR_historical_r1i1p1f1_gn.nc
#stdout:
netcdf test {
dimensions:
lat = 192 ;
lon = 384 ;
bnds = 2 ;
variables:
double lat(lat);
double lat_bnds(lat,bnds);
double lon(lon);
double lon_bnds(lon,bnds);
¶meter cmor_name=tasmax code=201 units="K" cell_methods="m" project_mip_table=Amon /
¶meter cmor_name=tasmax code=201 units="K" cell_methods="m" project_mip_table=day /
¶meter cmor_name=tasmin code=202 units="K" cell_methods="m" project_mip_table=day /
¶meter cmor_name=tasmin code=202 units="K" cell_methods="m" project_mip_table=Amon /
¶meter cmor_name=rsds units="W m-2" cell_methods="m" positive="d" /
¶meter cmor_name=rlds units="W m-2" cell_methods="m" positive="d" /
info_
table.txt
activity_id="CMIP"
experiment="AMIP"
experiment_id="amip"
forcing_index="1"
grid="All grid attributes are set for the native grid and based on information from attribute source."
grid_label="gn"
initialization_index="1"
institution="Max Planck Institute for Meteorology, Hamburg 20146, Germany"
institution_id="MPI-M"
license="CMIP6 model data produced by REQUIRED is licensed under a Creative Commons Attribution ShareAlike 4.0 International License (https://creativecommons.org/licenses). Consult https://pcmdi.llnl.gov/CMIP6/TermsOfUse for terms of use governing CMIP6 output, including citation requirements and proper acknowledgment. Further information about this data, including some limitations, can be found via the further_info_url (recorded as a global attribute in this file) and. The data producers and data providers make no warranty, either express or implied, including, but not limited to, warranties of merchantability and fitness for a particular purpose. All liabilities arising from the supply of the information (including any liability arising in negligence) are excluded to the fullest extent permitted by law."
mip_era="CMIP6"
nominal_resolution="100 km"
physics_index="1"
realization_index="1"
source="MPIESM1.2-HR (2017): \naerosol: none, prescribed MACv2-SP\natmos: ECHAM6.3 (spectral T127; 384 x 192 longitude/latitude; 95 levels; top level 0.01 hPa)\natmosChem: none\nland: JSBACH3.2\nlandIce: none/prescribed\nocean: MPIOM1.63 (tripolar TP04, approximately 0.4deg; 900 x 450 longitude/latitude; 40 levels; top grid cell 0-12 m)\nocnBgchem: HAMOCC\nseaIce: unnamed (thermodynamic (Semtner zero-layer) dynamic (Hibler 79) sea ice model)"
source_id="MPIESM-1-2-HR"
source_type="AGCM"
sub_experiment="none"
sub_experiment_id="none"
parent_activity_id="no parent"
parent_experiment_id="no parent"
calendar="proleptic_gregorian"
required_time_units="days since REQUIRED"
cdo cmor
Installation
- Debian CDO ( ) is installed without CMOR. Therefore, an individual installation (static) is required if 'cdo cmor' shall be used on a local computer.
- From CDO version 1.9.5 the user will be able to install CDO with the recent CMOR version with conda.
- CDO version 1.9.8 is able to standardize all MPI-ESM1-2 output for DECK, scenarios and historical experiments
- We recommend to work on DKRZ system mistral where various CDO versions are available that are installed with different CMOR versions.
ls -1 /work/bm0021/cdo_incl_cmor/
..
cdo_2018-08-03_cmor2_gcc
cdo_2019-09-01_cmor3_gcc
cdo_recent_cmor2 -> cdo_2018-08-03_cmor2_gcc/src/cdo
cdo_recent_cmor3 -> /work/bm0021/cdo_incl_cmor/cdo_2019-09-01_cmor3_gcc/src/cdo
sudo apt-get install cdo
Installation of CDO with CMOR
- From CDO version 1.9.5 CDO can be installed locally with CMOR (see script on next slide)
- The version of the integrated CMOR package is essential and determines the data standard the user can achieve
- Therefore, the user needs to know before the installation which standard shall be generated and which CMOR version shall be integrated accordingly.
CMOR2
creates standard of CMIP5 and CORDEX
CMOR3
creates standard of CMIP6 and CORDEX2
Installation of CDO with CMOR
CMOR3
creates standard of CMIP6 and CORDEX2
Installation of CDO with CMOR
CMOR2
creates standard of CMIP5 and CORDEX
- Uses JSON files internally
- Has predefined function cmor_dataset to pass input meta data
Technical implementation leads to up- and downward incompatibility of CMOR input data.
The interface of cdo cmor and the format of user input does not change with the installed CMOR versions. Scripts and files used for one project can be the starting point for the next project.
CMOR3
which is able to create standard of CMIP6 and CORDEX2
Installation of CDO with CMOR
#update conda
conda update conda
#name the environment for cdo with cmor
cdoenv=cdocmor
#install develop-cdo which contains CMOR "conda-forge/label/dev::cdo"
#use conda-forge channel with "-c conda-forge"
#set $cdoenv as environment with --name
conda create --name ${cdoenv} conda-forge/label/dev::cdo -c conda-forge
#then activate it
source activate ${cdoenv}
#update cdo cmor:
conda install --name ${cdoenv} conda-forge/label/dev::cdo -c conda-forge
Using conda and install CDO with
#!/bin/sh
# INSTALL SCRIPT FOR CDO WITH SUPPORT FOR NETCDF, GRIB2, HDF5 AND CMOR on a LINUX platform
# based on the instructions by Mithil Shah (http://www.studytrails.com/blog/install-climate-data-operator-cdo-with-netcdf-grib2-and-hdf5-support/)
# Author: Fabian Wachsmann
#
#You might need to install a fortran compiler, C compiler and a macro environment:
#sudo apt-get install gfortran
#sudo apt-get install gcc
#sudo apt-get install m4
#
cd ../libs/
INSTALLDIR=$(pwd)
#Install CDO with support:
#ZLIB, HDF5, EXPAT, UDUNITS, UUID, NETCDF, JASPER, GRIB_API, CMOR
zlib=N
szlib=N
hdf5=N
expat=N
udunits=N
uuid=N
netcdf=N
jasper=N
gribapi=N
eccodes=N
unixuuid=Y
jsonc=Y
cmor=N
cdo=N
#ZLIB 1.2.8:
#for unzip and zipping:
zlib_link="http://www.zlib.net/fossils/zlib-1.2.8.tar.gz"
#szlib 0.3.4:
szlib_link="https://gitlab.dkrz.de/k202009/libaec/uploads/e3a951204308ba1f623b529cf9e5f574/libaec-0.3.4.tar.gz"
#HDF5 1.8.12
#data model used by netCDF allowing infinity file sizes
hdf5_link="https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.8/hdf5-1.8.13/src/hdf5-1.8.13.tar.gz"
#EXPAT 2.2.2
#xml parser (used by cmor2)
expat_link="https://github.com/libexpat/libexpat/releases/download/R_2_2_2/expat-2.2.2.tar.bz2"
#UDUNITS 2.2.25
#changes units of variables
udunits_link="ftp://ftp.unidata.ucar.edu/pub/udunits/udunits-2.2.25.tar.gz"
#UUID 1.6.2
#creates universal unique identifier
uuid_link="https://launchpad.net/ubuntu/+archive/primary/+files/ossp-uuid_1.6.2.orig.tar.gz"
#NETCDF 4.4.1
#data format of climate data
netcdf_link="https://github.com/Unidata/netcdf-c/archive/v4.4.1.tar.gz"
#JASPER 1.9.1
#jpeg compressor
jasper_link="http://www.ece.uvic.ca/~mdadams/jasper/software/jasper-1.900.1.zip"
#GRIB_API 1.14.4
#data format of climate data
gribapi_link="https://software.ecmwf.int/wiki/download/attachments/3473437/grib_api-1.14.4-Source.tar.gz?api=v2"
#ECCODES 2.3.0
#recent version of GRIB_API
eccodes_link="https://confluence.ecmwf.int/download/attachments/45757960/eccodes-2.3.0-Source.tar.gz?api=v2"
#JSON-C 0.13.1
jsonc_link="https://github.com/json-c/json-c/archive/json-c-0.13.1-20180305.tar.gz"
if [ "$zlib" = "Y" ]; then
#ZLIB 1.2.8
#wget ${zlib_link} &&
tar xf zlib* || exit 1
cd zlib* || exit 1
./configure --prefix=${INSTALLDIR} || exit 1
make && make check && make install || exit 1
cd ..
fi
if [ "$szlib" = "Y" ]; then
#SZLIB 0.3.4
wget ${szlib_link} &&
tar -xzf libaec-0.3.4.tar.gz || exit 1
cd libaec* || exit 1
./configure --prefix=${INSTALLDIR} || exit 1
make && make check && make install || exit 1
cd ..
fi
if [ "$hdf5" = "Y" ]; then
#HDF5 1.8.12
#wget --no-check-certificate ${hdf5_link} &&
tar xf hdf5* || exit 1
cd hdf5* || exit 1
./configure --with-zlib=${INSTALLDIR} --prefix=${INSTALLDIR} --enable-hl CFLAGS=-fPIC || exit 1
make && make check || exit 1
make install || exit 1
cd ..
fi
if [ "$expat" = "Y" ]; then
#EXPAT 2.2.2
#wget --no-check-certificate ${expat_link} &&
tar xf expat* || exit 1
cd expat* || exit 1
./configure --prefix=${INSTALLDIR} CFLAGS=-fPIC || exit 1
make && make check && make install || exit 1
cd ..
fi
if [ "$udunits" = "Y" ]; then
#UDUNITS 2.2.25
#wget ${udunits_link} &&
tar xf udunits* || exit 1
cd udunits* || exit 1
CPPFLAGS=-I${INSTALLDIR}/include LDFLAGS=-L${INSTALLDIR}/lib ./configure --prefix=${INSTALLDIR} CFLAGS=-fPIC || exit 1
make && make check && make install || exit 1
cd ..
fi
if [ "$uuid" = "Y" ]; then
#UUID 1.6.2
#wget --no-check-certificate ${uuid_link} &&
tar xf ossp-uuid* || exit 1
cd uuid*
./configure --prefix=${INSTALLDIR} CFLAGS=-fPIC || exit 1
make && make check && make install || exit 1
cd ..
fi
if [ "$netcdf" = "Y" ]; then
#NETCDF 4.4.1
#wget --no-check-certificate ${netcdf_link} &&
tar xf v4* || exit 1
cd net*
CPPFLAGS=-I${INSTALLDIR}/include LDFLAGS=-L${INSTALLDIR}/lib ./configure --prefix=${INSTALLDIR} --enable-netcdf-4 CFLAGS=-fPIC || exit 1
make && make check && make install || exit 1
cd ..
fi
if [ "$jasper" = "Y" ]; then
#JASPER 1.9.1
#wget ${jasper_link} &&
unzip jasper* || exit 1
cd jasper*
./configure --prefix=${INSTALLDIR} CFLAGS=-fPIC || exit 1
make && make check && make install || exit 1
cd ..
fi
if [ "$gribapi" = "Y" ]; then
#GRIB_API 1.14.4
#wget --no-check-certificate ${gribapi_link} &&
tar xf grib* || exit 1
cd grib*
./configure --prefix=${INSTALLDIR} CFLAGS=-fPIC --with-netcdf=${INSTALLDIR} --with-jasper=${INSTALLDIR} || exit 1
make && make install || exit 1
cd ..
fi
if [ "$eccodes" = "Y" ]; then
#ECCODES 2.3.0
#wget --no-check-certificate ${eccodes_link} &&
tar -xzf eccodes-2.3.0-Source.tar.gz* || exit 1
mkdir eccodes-2.3.0-build
cd eccodes-2.3.0-build
cmake -DCMAKE_INSTALL_PREFIX=${INSTALLDIR} ../eccodes-2.3.0-Source
make
ctest
make install || exit 1
cd ..
fi
if [ "$unixuuid" = "Y" ]; then
#sudo apt-get install uuid-dev
mkdir -p ${INSTALLDIR}/libs4cmor/include/
cp /usr/include/uuid/uuid.h ${INSTALLDIR}/libs4cmor/include/ || exit 1
fi
if [ "$jsonc" = "Y" ]; then
#JSON-C 0.13.1
#wget ${jsonc_link} &&
#tar -xzf json-c-0.13.1*.tar.gz || exit 1
cd json-c-json-c*
./configure --prefix=${INSTALLDIR}/libs4cmor/ || exit 1
make && make install || exit 1
cd ..
fi
#if [ "$cmor" = "Y" ]; then
#CMOR 3.3.1.
#cd cmor3_v331/ || exit 1
#CFLAGS=-fPIC CPPFLAGS=-I${INSTALLDIR}/include LDFLAGS=-L${INSTALLDIR}/lib ./configure --prefix=${INSTALLDIR} --with-udunits2=${INSTALLDIR} --with-uuid=${INSTALLDIR} --with-netcdf=${INSTALLDIR} || exit 1
#make && make install || exit 1
#cd ${INSTALLDIR}/../cdo/
#fi
if [ "$cmor" = "Y" ]; then
#CMOR 2.9.2
cd cmor2-lib/cmor2_v292/ || exit 1
F77=gcc CC=gcc CFLAGS=-fPIC CPPFLAGS=-I${INSTALLDIR}/include LDFLAGS=-L${INSTALLDIR}/lib ./configure --prefix=${INSTALLDIR} --with-uuid=${INSTALLDIR} --with-udunits2=${INSTALLDIR} --with-netcdf=${INSTALLDIR}
make install
cd ../../
fi
if [ "$cdo" = "Y" ]; then
cd ../cdo
cmor_support/branches/cdo_incl_cmor/cdo_2019-08-15/
echo "CDO 1.9.5rc1";
#CDO 1.9.5rc1
tar xf cdo-1.9.5rc1.tar.gz || exit 1
cd cdo-1.9.5rc1|| exit 1
make distclean
CPPFLAGS="-I${INSTALLDIR}/include -I${INSTALLDIR}/local/include -I${INSTALLDIR}/local/include/json-c -I${INSTALLDIR}/local/include/cdTime" OPENMP=0 ./configure --prefix=$(pwd)/ --with-cmor=${INSTALLDIR} --with-hdf5=${INSTALLDIR} --with-netcdf=${INSTALLDIR} --with-udunits2=${INSTALLDIR} --with-grib_api=${INSTALLDIR} --with-ossp-uuid=${INSTALLDIR} || exit 1
make -j8 && make install
cd ..
fi
You can install a local cdo version on a unix platform with full support for different libraries using this script with a CDO version greater equal 1.9.4
cdo cmor
- HandsOn preparation
- Usage
- First steps
1. Option:
Start a jupyter server, copy /work/bm0021/cdo_incl_cmor/examples/cdocmor-handson-cmip6.ipynb to your working directory and run it.
on mistral
Preparation
#connect to mistral
ssh -X <usernr>@mistral.dkrz.de
#create workdir
mkdir cdocmor_handson
cd cdocmor_handson
#copy examples directory
cdoDir=/work/bm0021/cdo_incl_cmor/
cp -r ${cdoDir}examples ./
cd examples
#link cdo cmor installation
alias cdo=${cdoDir}cdo_recent_cmor3
Preparation
#get examples directory from cloud
wget -r -H -N --cut-dirs=2 --content-disposition -I "/v1/" "https://swiftbrowser.dkrz.de/tcl_objects/2019-10-22T11:30:05Z/r_a86d66aead1ab64da2897925934f7b0aac981e74/w_/dkrz_5c667751-d212-48fd-96a1-6c02f7c7a919/examples/0/?show_all"
mv swift.dkrz.de/examples ./
cd examples
#Use the local installation for cdo:
alias cdo=${PathToLocalCdoCmor}
on mistral
local
2. Option:
#**General usage:
#cdo cmor,MIP-table[,keyvaluelist] infile
#**The keyvaluelist is of format
#key=value[,value]
#**Some keywords only allow exactly one value.
#**Others allow a comma separated list (CSL) of values.
#**If the input file is of netCDF format and contains all required meta data,
#**it can be sufficient to call:
#cdo cmor,MIP-table infile
#**example:
cdo cmor,cmip6_tables/MIP_tables/Tables/CMIP6_Amon.json example_interface.nc
#**Parameter one MUST be the MIP table
#**It can be specified with a relative or absoulte path
Usage
#example:
cdo cmor,cmip6_tables/MIP_tables/Tables/CMIP6_Amon.json example_interface.nc
Usage
The outfile is generated by CMOR and its name must not be specified.
Name and path of the outfile are generated according to templates defined by the corresponding project:
Filename | Filepath | |
---|---|---|
CMOR2 |
|
|
CMOR3 |
|
<variable_id>_<table_id>_
<source_id>_<experiment_id>_
<variant_label>_<grid_label>
<variable_id>_<table_id>_
<model_id>_<experiment_id>_
<member>
<activity_id>/<product>/<institute_id>/
<model_id>/<experiment_id>/<frequency>/
<realm>/<variable_id>/<member>
<mip_er>/<activity_id>/<institution_id>/<source_id>/
<experiment_id>/<variant_label>/<table_id>/
<variable_id>/<grid_label>/<version>
First steps
#example:
#select tas from infile
cdo cmor,cmip6_tables/MIP_tables/Tables/CMIP6_Amon.json,\
cn=tas example_interface.nc
#select tas and uas from infile
cdo cmor,cmip6_tables/MIP_tables/Tables/CMIP6_Amon.json,\
cn=tas,uas example_interface.nc
- Parameter one must be the MIP-table
- The outfile is generated by CMOR and its name must not be specified
-
Keyword cmor_name selects a subset of variables to be processed
- All keys have short forms, e.g. cn for cmor_name
#example:
cdo cmor,cmip6_tables/MIP_tables/Tables/CMIP6_Amon.json example_interface.nc
#example:
cdo cmor,cmip6_tables/MIP_tables/Tables/CMIP6_Amon.json example_interface.nc
First steps
~/cdo-git/src/cdo cmor,Amon example_interface.nc
cdo cmor: MIP table file = 'cmip6_tables/MIP_tables/Tables/CMIP6_Amon.json'.
cdo cmor: Attribute 'time_units' = 'days since 1850-1-1 00:00:00'
cdo cmor: Since you set attribute 'parent_experiment_id'='piControl', further attributes are checked.
cdo cmor: Function 'all axes registration':
You have not requested a particular variable via 'cmor_name'.
There are several in infile and all will be processed.
Notice that attributes specified in the cmdline will be used for all infile variables.
cdo cmor: Vertical axis is either default and scalar or not available.
cdo cmor: Vertical axis is either default and scalar or not available.
cdo cmor: Output mode: (R)eplace.
cdo cmor: Output mode: (R)eplace.
cdo cmor: File stored in: './/CMIP6/CMIP/MPI-M/MPI-ESM1-2-HR/historical/r1i1p1f1/Amon/uas/gn/v20191008/uas_Amon_MPI-ESM1-2-HR_historical_r1i1p1f1_gn_185001-185012.nc' with cmor!
cdo cmor: File stored in: './/CMIP6/CMIP/MPI-M/MPI-ESM1-2-HR/historical/r1i1p1f1/Amon/tas/gn/v20191008/tas_Amon_MPI-ESM1-2-HR_historical_r1i1p1f1_gn_185001-185012.nc' with cmor!
cdo cmor: Processed 10 variables over 12 timesteps [4.65s 452MB].
#The usual CDO options are valid for this operator as well:
#cdo cmor can be called in silent (-s) or verbose (-v) mode.
#The verbose mode is recommended if the processing is unclear:
cdo -v cmor,cmip6_tables/MIP_tables/Tables/CMIP6_Amon.json \
example_interface.nc
cdo -s cmor,cmip6_tables/MIP_tables/Tables/CMIP6_Amon.json \
example_interface.nc
#In many cases, operator chaining can be helpful:
cdo -cmor,cmip6_tables/MIP_tables/Tables/CMIP6_Amon.json \
-addc,10 example_interface.nc
First steps
cdo cmor
Configuration and data streams
Infile
CDO
CMOR
Outfile
replace
append
variables (attributes)
coordinates (attributes)
global
(attributes)
mapping
table
grid info
file
info
table
MIP-
table
CV
predefinitons
user setting
data stream
cdo
cmor
mapping
table
grid info
file
info
table
MIP-
table
infile
md
data
new file
md
data
old file
md
data
command
replace
append
line
metadata stream
data stream
cdo cmor
Project standard
variables (attributes)
coordinates (attributes)
global
(attributes)
MIP-
table
CV
predefinitons
user setting
data stream
MIP-
table
- A MIP-table is CMOR-readable and contains the
- This standard is expressed by header, variable and dimension information
cdo cmor,cmip6_tables/MIP_tables/Tables/CMIP6_Amon.json example_interface.nc
CMIP6_3hr.json
CMIP6_6hrLev.json
CMIP6_6hrPlev.json
CMIP6_6hrPlevPt.json
CMIP6_AERday.json
CMIP6_AERhr.json
CMIP6_AERmon.json
CMIP6_AERmonZ.json
CMIP6_Amon.json
CMIP6_CF3hr.json
CMIP6_CFday.json
CMIP6_CFmon.json
CMIP6_CFsubhr.json
CMIP6_coordinate.json
CMIP6_CV.json
CMIP6_CV_test.json
CMIP6_day.json
CMIP6_E1hrClimMon.json
CMIP6_E1hr.json
CMIP6_E3hr.json
CMIP6_E3hrPt.json
CMIP6_E6hrZ.json
CMIP6_Eday.json
CMIP6_EdayZ.json
CMIP6_Efx.json
CMIP6_Emon.json
CMIP6_EmonZ.json
CMIP6_Esubhr.json
CMIP6_Eyr.json
CMIP6_formula_terms.json
CMIP6_fx.json
CMIP6_grids.json
CMIP6_IfxAnt.json
CMIP6_IfxGre.json
CMIP6_ImonAnt.json
CMIP6_ImonGre.json
CMIP6_IyrAnt.json
CMIP6_IyrGre.json
CMIP6_LImon.json
CMIP6_Lmon.json
CMIP6_Oclim.json
CMIP6_Oday.json
CMIP6_Odec.json
CMIP6_Ofx.json
CMIP6_Omon.json
CMIP6_Oyr.json
CMIP6_SIday.json
CMIP6_SImon.json
{
"Header": {
"data_specs_version": "01.00.13",
"table_id": "Table Amon",
"realm": "atmos atmosChem",
"cmor_version": "3.2",
"table_date": "12 July 2017",
"missing_value": "1e20",
"product": "model-output",
"approx_interval": "30.00000",
"generic_levels": "alevel alevhalf",
"mip_era": "CMIP6",
"Conventions": "CF-1.7 CMIP-6.0"
},
"variable_entry": {
"ccb": {
"frequency": "mon",
"modeling_realm": "atmos",
"standard_name": "air_pressure_at_convective_cloud_base",
"units": "Pa",
"cell_methods": "area: time: mean",
"cell_measures": "area: areacella",
"long_name": "Air Pressure at Convective Cloud Base",
"comment": "Where convective cloud is present in the grid cell, the instantaneous cloud base altitude should be that of the bottom of the lowest level containing convective cloud. Missing data should be reported in the absence of convective cloud. The time mean should be calculated from these quantities averaging over occasions when convective cloud is present only, and should contain missing data for occasions when no convective cloud is present during the meaning period.",
"dimensions": "longitude latitude time",
"out_name": "ccb",
"type": "real",
"positive": "",
"valid_min": "",
"valid_max": "",
"ok_min_mean_abs": "",
"ok_max_mean_abs": ""
},
"cct": {
"frequency": "mon",
"modeling_realm": "atmos",
"standard_name": "air_pressure_at_convective_cloud_top",
"units": "Pa",
"cell_methods": "area: time: mean",
"cell_measures": "area: areacella",
"long_name": "Air Pressure at Convective Cloud Top",
"comment": "Where convective cloud is present in the grid cell, the instantaneous cloud top altitude should be that of the top of the highest level containing convective cloud. Missing data should be reported in the absence of convective cloud. The time mean should be calculated from these quantities averaging over occasions when convective cloud is present only, and should contain missing data for occasions when no convective cloud is present during the meaning period.",
"dimensions": "longitude latitude time",
"out_name": "cct",
"type": "real",
"positive": "",
"valid_min": "",
"valid_max": "",
"ok_min_mean_abs": "",
"ok_max_mean_abs": ""
},
"cfc113global": {
"frequency": "mon",
"modeling_realm": "atmos atmosChem",
"standard_name": "mole_fraction_of_cfc113_in_air",
"units": "1e-12",
"cell_methods": "area: time: mean",
"cell_measures": "",
"long_name": "Global Mean Mole Fraction of CFC113",
"comment": "",
"dimensions": "time",
"out_name": "cfc113global",
"type": "real",
"positive": "",
"valid_min": "",
"valid_max": "",
"ok_min_mean_abs": "",
"ok_max_mean_abs": ""
},
"cfc11global": {
"frequency": "mon",
"modeling_realm": "atmos atmosChem",
"standard_name": "mole_fraction_of_cfc11_in_air",
"units": "1e-12",
"cell_methods": "area: time: mean",
"cell_measures": "",
"long_name": "Global Mean Mole Fraction of CFC11",
"comment": "",
"dimensions": "time",
"out_name": "cfc11global",
"type": "real",
"positive": "",
"valid_min": "",
"valid_max": "",
"ok_min_mean_abs": "",
"ok_max_mean_abs": ""
}
}
}
- MIP-tables are subdivided by realm, frequencies, grid and vertical axis types as well as time cell method.
- The MIP-Table nomenclauture is explained in detail on the offical web site
Prefix | Frequency | Suffix | Qualifier |
---|---|---|---|
A, AER, CF, E, I, O, L, LI | fx, hr, 1hr, 3hr, 6hr, day, mon, yr, clim | Lev, Plev, Ant, Gre | Pt, Z, Off |
e.g.: 6hrPlevPt
Note that
- Not all of these four parts need to be included in MIP-table name
- Not all of the possible combinations build a MIP-table
MIP-
table
cdo cmor,cmip6_tables/MIP_tables/Tables/CMIP6_Amon.json example_interface.nc
MIP-
table
{
"Header": {
"data_specs_version": "01.00.13",
The CMIP6 infrastructure components depend on each other (Taylor and Balaji). Therefore, it is important to make sure to use compatible versions of components. For cdo cmor, the workflow is:
Data request (dreq)
MIP-tables and CV
CMOR
CDO
If the dreq is updated, new MIP-tables are created. The MIP-table processing in CMOR is adapted to the most recent MIP-tables. Subsequently, CDO is adapted to CMOR.
The data request version the MIP-table is based on
MIP-
table
{
"Header": {
"data_specs_version": "01.00.13",
Data request (dreq)
MIP-tables and CV
CMOR
CDO
There are incompatabilities:
- MIP-Tables based on older dreq version 01.00.06 cannot be processed with recent CMOR version 3.2.5 or recent.
- Recent CMOR >3.2.8 can only be linked to most recent CDO versions >=1.9.2
--> Which versions of CDO and CMOR one has to use depends on the dreq version the user used to configure the model simulation
The data request version the MIP-table is based on
A CMOR-variable is the unique combination of the cmor_name and the corresponding MIP-table which includes the cmor_name
- The request for monthly air temperature (CMIP6_Amon.json) can be different compared to daily air temperature (CMIP6_day.json)
- The outfile variable name does not need to be the cmor_name: E.g. o3clim has the output variable name o3
MIP-
table
cdo cmor,cmip6_tables/MIP_tables/Tables/CMIP6_Amon.json,cn=tas example_interface.nc
Exercise: Examine the MIP-tables, especially CMIP6_Amon.json
- What is the cmor_name of variable with long_name "Air Temperature" and what is the name of its vertical axis?
- Your atmosphere model produces a variable "NotInRequest" in monthly frequency which is surprisingly not in any MIP-table. You would like to convert it into a form similar to CMIP standard as well. What do you do?
- Which table contains variable with cmor_name "opottemppmdiff" and what reveals the comment?
- ta and plev19
- Copy a variable entry in CMIP6_Amon.json and change all attributes according to your will
- CMIP6_Oyr and from comment: "Tendency of heat content for a grid cell from parameterized mesoscale eddy diffusion. Reported only for models that use potential temperature as prognostic field."
MIP-
table
cdo cmor,cmip6_tables/MIP_tables/Tables/CMIP6_Amon.json example_interface.nc
cdo cmor
info table and global attributes
Infile
CDO
CMOR
Outfile
replace
append
global
(attributes)
info
table
CV
CV
The Controlled Vocabulary (CV) is available as a MIP-table and defines
- required and optional CMIP attributes
- allowed values for attributes
- restrictions resulting from a setting of attributes (e.g. min. simulation years of an experiment)
- whether additional attributes must be specified (e.g. parent attributes)
{
"CV":{
"required_global_attributes":[
"Conventions",
"activity_id",
"creation_date",
"data_specs_version",
"experiment",
"experiment_id",
"forcing_index",
"frequency",
"further_info_url",
"grid",
"grid_label",
"initialization_index",
"institution",
"institution_id",
"license",
"mip_era",
"nominal_resolution",
"physics_index",
"product",
"realization_index",
"realm",
"source",
"source_id",
"source_type",
"sub_experiment",
"sub_experiment_id",
"table_id",
"tracking_id",
"variable_id",
"variant_label"
],
"version_metadata":{
"author":"Paul J. Durack <durack1@llnl.gov>",
"creation_date":"Wed Jul 5 10:30:00 2017 -0700",
"institution_id":"PCMDI",
"latest_tag_point":"3.2.4 (56; gcc9356e)",
"note":"Revise source_id CNRM-CM6-1",
"previous_commit":"f042b9339fd1cb3f5ee39bb2b5ccf958812bbd21"
},
"activity_id":[
"AerChemMIP",
"C4MIP",
"CFMIP",
"CMIP",
"CORDEX",
"DAMIP",
"DCPP",
"DynVarMIP",
"FAFMIP",
"GMMIP",
"GeoMIP",
"HighResMIP",
"ISMIP6",
"LS3MIP",
"LUMIP",
"OMIP",
"PMIP",
"RFMIP",
"SIMIP",
"ScenarioMIP",
"VIACSAB",
"VolMIP"
],
"institution_id":{
"AWI":"Alfred Wegener Institute, Helmholtz Centre for Polar and Marine Research, Am Handelshafen 12, 27570 Bremerhaven, Germany",
"BNU":"Beijing Normal University, Beijing 100875, China",
"CAMS":"Chinese Academy of Meteorological Sciences, Beijing 100081, China",
"CCCR-IITM":"Centre for Climate Change Research, Indian Institute of Tropical Meteorology Pune, Maharashtra 411 008, India",
"CCCma":"Canadian Centre for Climate Modelling and Analysis, Victoria, BC V8P 5C2, Canada",
"CMCC":"Fondazione Centro Euro-Mediterraneo sui Cambiamenti Climatici, Lecce 73100, Italy",
"CNRM-CERFACS":"CNRM (Centre National de Recherches Meteorologiques, Toulouse 31057, France), CERFACS (Centre Europeen de Recherche et de Formation Avancee en Calcul Scientifique, Toulouse 31057, France)",
"CSIR-CSIRO":"CSIR (Council for Scientific and Industrial Research - Natural Resources and the Environment, Pretoria, 0001, South Africa), CSIRO (Commonwealth Scientific and Industrial Research Organisation and Bureau of Meteorology, Melbourne, Victoria 3208, Australia)",
"CSIRO-BOM":"Commonwealth Scientific and Industrial Research Organisation and Bureau of Meteorology, Melbourne, Victoria 3208, Australia",
"EC-Earth-Consortium":"KNMI, The Netherlands; SMHI, Sweden; DMI, Denmark; AEMET, Spain; Met Eireann, Ireland; CNR-ISAC, Italy; Instituto de Meteorologia, Portugal; FMI, Finland; BSC, Spain; Centro de Geofisica, University of Lisbon, Portugal; ENEA, Italy; Geomar, Germany; Geophysical Institute, University of Bergen, Norway; ICHEC, Ireland; ICTP, Italy; IMAU, The Netherlands; IRV, Sweden; Lund University, Sweden; Meteorologiska Institutionen, Stockholms University, Sweden; Niels Bohr Institute, University of Copenhagen, Denmark; NTNU, Norway; SARA, The Netherlands; Unite ASTR, Belgium; Universiteit Utrecht, The Netherlands; Universiteit Wageningen, The Netherlands; University College Dublin, Ireland; Vrije Universiteit Amsterdam, the Netherlands; University of Helsinki, Finland; KIT, Karlsruhe, Germany; USC, University of Santiago de Compostela, Spain; Uppsala Universitet, Sweden; NLeSC, Netherlands eScience Center, The Netherlands",
"FIO-RONM":"FIO (First Institute of Oceanography, State Oceanic Administration, Qingdao 266061, China), RONM (Laboratory for Regional Oceanography and Numerical Modeling, Qingdao National Laboratory for Marine Science and Technology, Qingdao 266237, China)",
"INM":"Institute for Numerical Mathematics, Russian Academy of Science, Moscow 119991, Russia",
"INPE":"National Institute for Space Research, Cachoeira Paulista, SP 12630-000, Brazil",
"IPSL":"Institut Pierre Simon Laplace, Paris 75252, France",
"MESSy-Consortium":"The Modular Earth Submodel System (MESSy) Consortium, represented by the Institute for Physics of the Atmosphere, Deutsches Zentrum fur Luft- und Raumfahrt (DLR), Wessling, Bavaria 82234, Germany",
"MIROC":"JAMSTEC (Japan Agency for Marine-Earth Science and Technology, Kanagawa 236-0001, Japan), AORI (Atmosphere and Ocean Research Institute, The University of Tokyo, Chiba 277-8564, Japan), NIES (National Institute for Environmental Studies, Ibaraki 305-8506, Japan), and AICS (RIKEN Advanced Institute for Computational Science, Hyogo 650-0047, Japan)",
"MOHC":"Met Office Hadley Centre, Fitzroy Road, Exeter, Devon, EX1 3PB, UK",
"MPI-M":"Max Planck Institute for Meteorology, Hamburg 20146, Germany",
"MRI":"Meteorological Research Institute, Tsukuba, Ibaraki 305-0052, Japan",
"NASA-GISS":"Goddard Institute for Space Studies, New York, NY 10025, USA",
"NCAR":"National Center for Atmospheric Research, Boulder, CO 80301, USA",
"NCC":"NorESM Climate modeling Consortium consisting of CICERO (Center for International Climate and Environmental Research, Oslo 0349), MET-Norway (Norwegian Meteorological Institute, Oslo 0313), NERSC (Nansen Environmental and Remote Sensing Center, Bergen 5006), NILU (Norwegian Institute for Air Research, Kjeller 2027), UiB (University of Bergen, Bergen 5007), UiO (University of Oslo, Oslo 0313) and UNI (Uni Research, Bergen 5008), Norway",
"NERC":"Natural Environment Research Council, STFC-RAL, Harwell, Oxford, OX11 0QX, UK",
"NIMS-KMA":"National Institute of Meteorological Sciences/Korea Meteorological Administration, Climate Research Division, Seoho-bukro 33, Seogwipo-si, Jejudo 63568, Republic of Korea",
"NOAA-GFDL":"National Oceanic and Atmospheric Administration, Geophysical Fluid Dynamics Laboratory, Princeton, NJ 08540, USA",
"NUIST":"Nanjing University of Information Science and Technology, Nanjing, 210044, China",
"PCMDI":"Program for Climate Model Diagnosis and Intercomparison, Lawrence Livermore National Laboratory, Livermore, CA 94550, USA",
"THU":"Department of Earth System Science, Tsinghua University, Beijing 100084, China"
},
"source_id":{
"ACCESS-1-0":{
"activity_participation":[
"CMIP"
],
"cohort":[
"CMIP5"
],
"institution_id":[
"CSIRO-BOM"
],
"source_id":"ACCESS-1-0",
"source":"ACCESS 1.0 (2011): \naerosol: CLASSIC (v1.0)\natmos: HadGAM2 (r1.1; N96, 192 x 145 longitude/latitude; 38 levels; top level 39255 m)\natmosChem: none\nland: MOSES2.2\nlandIce: none\nocean: ACCESS-OM (MOM4p1; tripolar primarily 1deg, 360 x 300 longitude/latitude; 50 levels; top grid cell 0-10 m)\nocnBgchem: none\nseaIce: CICE4.1"
},
"AWI-CM-1-0-HR":{
"activity_participation":[
"CORDEX",
"HighResMIP",
"OMIP",
"SIMIP",
"VIACSAB"
],
"cohort":[
"Registered"
],
"institution_id":[
"AWI"
],
"source_id":"AWI-CM-1-0-HR",
"source":"AWI-CM 1.0 HR (2017): \naerosol: none\natmos: ECHAM6.3.02p4 (T127L95 native atmosphere T127 gaussian grid; 384 x 192 longitude/latitude; 95 levels; top level 80 km)\natmosChem: none\nland: JSBACH 3.10\nlandIce: none\nocean: FESOM 1.4 (unstructured grid in the horizontal with 1306775 wet nodes; 46 levels; top grid cell 0-5 m)\nocnBgchem: none\nseaIce: FESOM 1.4"
},
"AWI-CM-1-0-LR":{
"activity_participation":[
"CMIP",
"CORDEX",
"HighResMIP",
"OMIP",
"PMIP",
"SIMIP",
"ScenarioMIP",
"VIACSAB"
],
"cohort":[
"Registered"
],
"institution_id":[
"AWI"
],
"source_id":"AWI-CM-1-0-LR",
"source":"AWI-CM 1.0 LR (2017): \naerosol: none\natmos: ECHAM6.3.02p4 (T63L47 native atmosphere T63 gaussian grid; 192 x 96 longitude/latitude; 47 levels; top level 80 km)\natmosChem: none\nland: JSBACH 3.10\nlandIce: none\nocean: FESOM 1.4 (unstructured grid in the horizontal with 126859 wet nodes; 46 levels; top grid cell 0-5 m)\nocnBgchem: none\nseaIce: FESOM 1.4"
},
global
(attributes)
Info table format convention:
- One keyvalue per line
- key=value is of format word=string
info_table.txt
#control keywords:
mip_table_dir="cmip6_mip_tables/"
#required global attributes:activity_id="CMIP"
experiment="AMIP"
experiment_id="amip"
forcing_index="1"
grid="All grid attributes are set for the native grid and based on information from attribute source."
grid_label="gn"
initialization_index="1"
institution="Max Planck Institute for Meteorology, Hamburg 20146, Germany"
institution_id="MPI-M"
license="CMIP6 model data produced by REQUIRED is licensed under a Creative Commons Attribution ShareAlike 4.0 International License (https://creativecommons.org/licenses). Consult https://pcmdi.llnl.gov/CMIP6/TermsOfUse for terms of use governing CMIP6 output, including citation requirements and proper acknowledgment. Further information about this data, including some limitations, can be found via the further_info_url (recorded as a global attribute in this file) and. The data producers and data providers make no warranty, either express or implied, including, but not limited to, warranties of merchantability and fitness for a particular purpose. All liabilities arising from the supply of the information (including any liability arising in negligence) are excluded to the fullest extent permitted by law."
mip_era="CMIP6"
nominal_resolution="100 km"
physics_index="1"
realization_index="1"
source="MPIESM1.2-HR (2017): \naerosol: none, prescribed MACv2-SP\natmos: ECHAM6.3 (spectral T127; 384 x 192 longitude/latitude; 95 levels; top level 0.01 hPa)\natmosChem: none\nland: JSBACH3.2\nlandIce: none/prescribed\nocean: MPIOM1.63 (tripolar TP04, approximately 0.4deg; 900 x 450 longitude/latitude; 40 levels; top grid cell 0-12 m)\nocnBgchem: HAMOCC\nseaIce: unnamed (thermodynamic (Semtner zero-layer) dynamic (Hibler 79) sea ice model)"
source_id="MPIESM-1-2-HR"
source_type="AGCM"
sub_experiment="none"
sub_experiment_id="none"
parent_activity_id="no parent"
parent_experiment_id="no parent"
calendar="proleptic_gregorian"
required_time_units="days since REQUIRED"
info
table
Info tables
- contain keyvalue pairs for required global attributes and control keywords
- have to be passed to the operator via keyword info
global
(attributes)
info
table
Most important attributes: | project_id | experiment_id | source_id | institution_id |
---|---|---|---|---|
Example values: | CMIP6, CMIP5, CORDEX | historical, piControl, amip | MPI-ESM1-2-HR, MPI-ESM1-2-LR | MPI-M, AWI |
Connected required attributes: | experiment, member, required_time_ units |
source, calendar, grid |
It is recommended to combine required attributes which are linked by a higher level topic in one info table
E.g., by using info tables source.txt and experiment.txt, one can easily detect all required attributes which have to be changed when performing another experiment or using another source.
global
(attributes)
Attributes\experiment_id | 1pctCO2 | amip | ssp585 |
---|---|---|---|
activity_id | CMIP | CMIP | ScenarioMIP |
experiment | 1 percent per year increase in CO2 | AMIP | update of RCP8.5 based on SSP5 |
sub_experiment_id | none | none | none |
parent_activity_id | CMIP | no parent | CMIP |
parent_experiment_id | piControl | no parent | historical |
Experiments are registered in the CV with attached predefined attributes:
Attribute\project | CMIP6 | CMIP5 |
---|---|---|
MIP: | activity_id | project_id |
Model: | source_id | model_id |
Institute: | institution_id | institute_id |
Ensemble member: | variant_label | member |
Grid resolution: | nominal_resolution |
Project dependence of attribute nomenclature:
info
table
Ifile=example_interface.nc
Mtable=cmip6_tables/MIP_tables/Tables/CMIP6_Amon.json
#since a default file ".cdocmorinfo" exist,
#it is sufficient to call
cdo cmor,${Mtable} ${Ifile}
# which is equivalent to:
cdo cmor,${Mtable},info=.cdocmorinfo ${Ifile}
global
(attributes)
The default info table is
- hidden and named „.cdocmorinfo“.
- taken from the current working directory (cwd).
# The operator can create the path to the MIP-table
# with the help of keywords mip_table_dir and project_id
# so that it is sufficient to call:
cdo cmor,Amon ${Ifile}
# which is equivalent to:
cdo cmor,cmip6_tables/MIP_tables/Tables/CMIP6_Amon.json ${Ifile}
We can specify "control" keywords like mip_table_dir in info tables to simplify cdo cmor calls.
info
table
global
(attributes)
A tool to create an info table is provided at
info
table
global
(attributes)
#Exercises:
#1. Create your own cdocmorinfo on
# c6dreq.dkrz.de/cdocmorinfo
#2. Copy that file to CWD/.cdocmorinfo
#3. Repeat
cdo cmor,Amon example_interface.nc
#4. Adapt the infofile so that it finally works
info
table
Infile
CDO
CMOR
Outfile
replace
append
variables (attributes)
predefinitons
user setting
data stream
cdo cmor
variable mapping
mapping
table
Infile
CDO
CMOR
Outfile
replace
append
temp2
(x,y,z,t)
tas
(time,lat,lon)
cdo cmor
variable mapping
?
Note: cdo cmor cannot do diagnostics except for 2 special cases.
Use 'cdo expr' for diagnostics.
Infile
CDO
CMOR
Outfile
replace
append
cdo cmor
variable mapping
- Know the CMOR variable
- Link to the matching infile variable
- Provide attributes
temp2
(x,y,z,t)
tas
(time,lat,lon)
Infile
variables (attributes)
mapping
table
Flexible configuration:
Variable attributes can be provided via
- the infile
- a mapping table which is specified with the mapping_table keyword
- the command line as comma separated values
Variable attributes specifications can be combined. The priority order is:
- Command line
- Mapping table
- Infile
(A command line attribute specification overwrites all prior specifications)
Renaming within the command line is only allowed for one variable per operator call. The mapping table can include mapping for all target variables.
Infile
variables (attributes)
cmor_name, name and code are infile variable selectors.
- If you specify name or code, you must specify cmor_name
- If the infile is of netCDF format, use name; if the infile is a GRIB-file, use code.
mapping
table
Keyword | Short name | Value format |
---|---|---|
cmor_name | cn | CMOR variable name |
name | n | Model variable name |
code | c | GRIB code (Integer from {0,255}) |
cmor_name
name
code
cmor_name
Infile
variables (attributes)
# ways to configure the
# infile variable selector (ivs)
# and mapping table line selector (mtls)
#
# 1. ivs=cmor_name
cdo cmor,${MIP-table},cmor_name=${cn} ${infile}
# 2. ivs=name
cdo cmor,${MIP-table},cmor_name=${cn},name=${name} ${infile}
#
# with mapping table:
# 3. mtls=cmor_name, ivs=what is in corresponding mtl
cdo cmor,${MIP-table},mapping_table=${mt},cmor_name=${cn} ${infile}
# 4. mtls=cmor_name, ivs=name (overwrites mtl name)
cdo cmor,${MIP-table},mapping_table=${mt},cmor_name=${cn},name=${name} ${infile}
# 5. mtls=name/code ivs=ALL
cdo cmor,${MIP-table},mapping_table=${mt} ${infile}
mapping
table
Keyword | Short name | Value format |
---|---|---|
cmor_name | cn | CMOR variable name |
name | n | Model variable name |
code | c | GRIB code (Integer from {0,255}) |
Infile
variables (attributes)
Keyword | Short name | Value format | Default |
---|---|---|---|
cmor_name | cn | Variable name included in MIP-table | |
name | n | Input variable name | |
code | c | Three digits integer. GRIB code. | |
units | u | String. Must be readable by udunits. | |
cell_methods | cm | Character (see below) | m |
positive | p | u=upward, d=downward | |
variable_comment | vc | String |
Five valid time cell methods can be specified. It is used to choose the correct time axis.
- m = mean. Averaged over time.
- p = point. Used for measurements and sums.
- d = diurnal cycle. Used for means within days (1hr means, e.g. 0:00-1:00 ) over days (1.-31.1.).
- c = climate. Used for means within years (january) over years (30 years).
- n = none. Used for fixed fields like topography.
mapping
table
Infile
variables (attributes)
Keyword | Short name | Value format | Default |
---|---|---|---|
cmor_name | cn | Variable name included in MIP-table | |
name | n | Input variable name | |
code | c | Three digits integer. GRIB code. | |
units | u | String. Must be readable by udunits. | |
cell_methods | cm | Character | m |
positive | p | u=upward, d=downward | |
variable_comment | vc | String |
A positive flux direction must be specified if the request demands it. This is the case for fluxes, e.g. radiation variables. Otherwise, cmor aborts.
mapping
table
Infile
variables (attributes)
mapping_
table.txt
¶meter cmor_name="expcalc" project_mip_table="Emon" units="mol m-2 s-1" cell_methods="m" positive="d" z_axis="olevel" /
¶meter cmor_name="expsi" project_mip_table="Emon" units="mol m-2 s-1" cell_methods="m" positive="d" z_axis="olevel" /
¶meter cmor_name="ppdiaz" name="phosy_cya" project_mip_table="Emon" units="mol m-3 s-1" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="ppmisc" name="phosy" project_mip_table="Emon" units="mol m-3 s-1" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="bsi" project_mip_table="Omon" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="bsios" project_mip_table="Omon" units="mol m-3" cell_methods="m" /
¶meter cmor_name="calc" project_mip_table="Omon" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="chl" project_mip_table="Omon" units="kg m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="chldiaz" project_mip_table="Omon" units="kg m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="chlos" project_mip_table="Omon" units="kg m-3" cell_methods="m" /
¶meter cmor_name="co3" project_mip_table="Omon" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="co3satcalc" project_mip_table="Omon" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="detoc" project_mip_table="Omon" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="dfe" project_mip_table="Omon" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="dfeos" project_mip_table="Omon" units="mol m-3" cell_methods="m" /
¶meter cmor_name="dissic" project_mip_table="Omon" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="dissicnat" project_mip_table="Omon" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="dissoc" project_mip_table="Omon" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="dmso" project_mip_table="Omon" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="dmsos" name="surf_dms" project_mip_table="Omon" units="mol m-3" cell_methods="m" /
¶meter cmor_name="dpco2" project_mip_table="Omon" units="Pa" cell_methods="m" z_axis="depth0m" /
¶meter cmor_name="dpo2" project_mip_table="Omon" units="Pa" cell_methods="m" z_axis="depth0m" /
¶meter cmor_name="epc100" project_mip_table="Omon" units="mol m-2 s-1" cell_methods="m" z_axis="depth100m" /
¶meter cmor_name="epcalc100" project_mip_table="Omon" units="mol m-2 s-1" cell_methods="m" z_axis="depth100m" /
¶meter cmor_name="epsi100" project_mip_table="Omon" units="mol m-2 s-1" cell_methods="m" z_axis="depth100m" /
¶meter cmor_name="expc" project_mip_table="Omon" units="mol m-2 s-1" cell_methods="m" positive="d" z_axis="olevel" /
¶meter cmor_name="fbddtalk" project_mip_table="Omon" units="mol m-2 s-1" cell_methods="m" z_axis="olayer100m" /
¶meter cmor_name="fbddtdic" project_mip_table="Omon" units="mol m-2 s-1" cell_methods="m" z_axis="olayer100m" /
¶meter cmor_name="fbddtdife" project_mip_table="Omon" units="mol m-2 s-1" cell_methods="m" z_axis="olayer100m" /
¶meter cmor_name="fbddtdin" project_mip_table="Omon" units="mol m-2 s-1" cell_methods="m" z_axis="olayer100m" /
¶meter cmor_name="fbddtdip" project_mip_table="Omon" units="mol m-2 s-1" cell_methods="m" z_axis="olayer100m" /
¶meter cmor_name="fbddtdisi" project_mip_table="Omon" units="mol m-2 s-1" cell_methods="m" z_axis="olayer100m" /
¶meter cmor_name="fddtalk" project_mip_table="Omon" units="mol m-2 s-1" cell_methods="m" z_axis="olayer100m" /
¶meter cmor_name="fddtdic" project_mip_table="Omon" units="mol m-2 s-1" cell_methods="m" z_axis="olayer100m" /
¶meter cmor_name="fddtdife" project_mip_table="Omon" units="mol m-2 s-1" cell_methods="m" z_axis="olayer100m" /
¶meter cmor_name="fddtdin" project_mip_table="Omon" units="mol m-2 s-1" cell_methods="m" z_axis="olayer100m" /
¶meter cmor_name="fddtdip" project_mip_table="Omon" units="mol m-2 s-1" cell_methods="m" z_axis="olayer100m" /
¶meter cmor_name="fddtdisi" project_mip_table="Omon" units="mol m-2 s-1" cell_methods="m" z_axis="olayer100m" /
¶meter cmor_name="fgco2" project_mip_table="Omon" units="kg m-2 s-1" cell_methods="m" positive="d" z_axis="depth0m" /
¶meter cmor_name="fgco2nat" project_mip_table="Omon" units="kg m-2 s-1" cell_methods="m" positive="d" z_axis="depth0m" /
¶meter cmor_name="fgdms" project_mip_table="Omon" units="mol m-2 s-1" cell_methods="m" positive="u" z_axis="depth0m" /
¶meter cmor_name="fgo2" project_mip_table="Omon" units="mol m-2 s-1" cell_methods="m" positive="d" z_axis="depth0m" /
¶meter cmor_name="fric" project_mip_table="Omon" units="mol m-2 s-1" cell_methods="m" /
¶meter cmor_name="frn" project_mip_table="Omon" units="mol m-2 s-1" cell_methods="m" /
¶meter cmor_name="froc" project_mip_table="Omon" units="mol m-2 s-1" cell_methods="m" /
¶meter cmor_name="fsfe" project_mip_table="Omon" units="mol m-2 s-1" cell_methods="m" z_axis="depth0m" /
¶meter cmor_name="graz" project_mip_table="Omon" units="mol m-3 s-1" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="icfriver" project_mip_table="Omon" units="mol m-2 s-1" cell_methods="m" z_axis="depth0m" /
¶meter cmor_name="intdic" project_mip_table="Omon" units="kg m-2" cell_methods="m" /
¶meter cmor_name="intdoc" project_mip_table="Omon" units="kg m-2" cell_methods="m" /
¶meter cmor_name="intpbfe" project_mip_table="Omon" units="mol m-2 s-1" cell_methods="m" /
¶meter cmor_name="intpbn" project_mip_table="Omon" units="mol m-2 s-1" cell_methods="m" /
¶meter cmor_name="intpbp" project_mip_table="Omon" units="mol m-2 s-1" cell_methods="m" /
¶meter cmor_name="intpbsi" project_mip_table="Omon" units="mol m-2 s-1" cell_methods="m" /
¶meter cmor_name="intpcalcite" project_mip_table="Omon" units="mol m-2 s-1" cell_methods="m" /
¶meter cmor_name="intpn2" project_mip_table="Omon" units="mol m-2 s-1" cell_methods="m" /
¶meter cmor_name="intpoc" project_mip_table="Omon" units="kg m-2" cell_methods="m" /
¶meter cmor_name="intpp" project_mip_table="Omon" units="mol m-2 s-1" cell_methods="m" /
¶meter cmor_name="intppdiaz" name="intpdiaz" project_mip_table="Omon" units="mol m-2 s-1" cell_methods="m" /
¶meter cmor_name="no3" project_mip_table="Omon" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="no3os" project_mip_table="Omon" units="mol m-3" cell_methods="m" /
¶meter cmor_name="o2" project_mip_table="Omon" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="o2min" project_mip_table="Omon" units="mol m-3" cell_methods="m" /
¶meter cmor_name="o2os" project_mip_table="Omon" units="mol m-3" cell_methods="m" /
¶meter cmor_name="o2sat" project_mip_table="Omon" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="o2satos" project_mip_table="Omon" units="mol m-3" cell_methods="m" /
¶meter cmor_name="ocfriver" project_mip_table="Omon" units="mol m-2 s-1" cell_methods="m" z_axis="depth0m" /
¶meter cmor_name="ph" project_mip_table="Omon" units="1.0" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="phyc" project_mip_table="Omon" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="phycos" project_mip_table="Omon" units="mol m-3" cell_methods="m" /
¶meter cmor_name="phydiaz" project_mip_table="Omon" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="phyfe" project_mip_table="Omon" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="phymisc" project_mip_table="Omon" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="phyn" project_mip_table="Omon" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="phyp" project_mip_table="Omon" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="po4" project_mip_table="Omon" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="pon" project_mip_table="Omon" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="pop" project_mip_table="Omon" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="pp" project_mip_table="Omon" units="mol m-3 s-1" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="si" project_mip_table="Omon" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="spco2" project_mip_table="Omon" units="Pa" cell_methods="m" z_axis="depth0m" /
¶meter cmor_name="talk" project_mip_table="Omon" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="zo2min" project_mip_table="Omon" units="m" cell_methods="m" /
¶meter cmor_name="zooc" project_mip_table="Omon" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="zsatcalc" project_mip_table="Omon" units="m" cell_methods="m" /
¶meter cmor_name="bddtalk" project_mip_table="Oyr" units="mol m-3 s-1" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="bddtdic" project_mip_table="Oyr" units="mol m-3 s-1" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="bddtdife" project_mip_table="Oyr" units="mol m-3 s-1" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="bddtdin" project_mip_table="Oyr" units="mol m-3 s-1" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="bddtdip" project_mip_table="Oyr" units="mol m-3 s-1" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="bddtdisi" project_mip_table="Oyr" units="mol m-3 s-1" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="bsi" project_mip_table="Oyr" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="chl" project_mip_table="Oyr" units="kg m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="chldiaz" project_mip_table="Oyr" units="kg m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="dcalc" project_mip_table="Oyr" units="mol m-3 s-1" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="dfe" project_mip_table="Oyr" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="dissicnat" project_mip_table="Oyr" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="dmso" project_mip_table="Oyr" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="expc" project_mip_table="Oyr" units="mol m-2 s-1" cell_methods="m" positive="d" z_axis="olevel" /
¶meter cmor_name="expcalc" project_mip_table="Oyr" units="mol m-2 s-1" cell_methods="m" positive="d" z_axis="olevel" /
¶meter cmor_name="expsi" project_mip_table="Oyr" units="mol m-2 s-1" cell_methods="m" positive="d" z_axis="olevel" /
¶meter cmor_name="fgco2" project_mip_table="Oyr" units="kg m-2 s-1" cell_methods="m" positive="d" /
¶meter cmor_name="fgco2nat" project_mip_table="Oyr" units="kg m-2 s-1" cell_methods="m" positive="d" /
¶meter cmor_name="graz" project_mip_table="Oyr" units="mol m-3 s-1" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="no3" project_mip_table="Oyr" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="o2" project_mip_table="Oyr" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="o2sat" project_mip_table="Oyr" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="pbfe" project_mip_table="Oyr" units="mol m-3 s-1" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="pbsi" project_mip_table="Oyr" units="mol m-3 s-1" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="pcalc" project_mip_table="Oyr" units="mol m-3 s-1" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="phyc" project_mip_table="Oyr" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="phyfe" project_mip_table="Oyr" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="phyn" project_mip_table="Oyr" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="phyp" project_mip_table="Oyr" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="pon" project_mip_table="Oyr" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="pop" project_mip_table="Oyr" units="mol m-3" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="pp" project_mip_table="Oyr" units="mol m-3 s-1" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="ppdiaz" name="phosy_cya" project_mip_table="Oyr" units="mol m-3 s-1" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="ppmisc" name="phosy" project_mip_table="Oyr" units="mol m-3 s-1" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="remoc" project_mip_table="Oyr" units="mol m-3 s-1" cell_methods="m" z_axis="olevel" /
¶meter cmor_name="si" project_mip_table="Oyr" units="mol m-3" cell_methods="m" z_axis="olevel"
A Mapping table
- begins with '¶meter'
- ends with /
Each line should contain
- cn and pmt to identify a cmor variable
- an infile variable selector
mapping
table
Keyword | Short name | Value format | Default |
---|---|---|---|
project_mip_table | pmt | Substring of MIP-table name following the underscore '_' |
infile=example_mapping.grb
#1. Commandline mapping:
cdo cmor,Amon,cn=tas,c=167,u=K,cm=m ${infile}
# Variable with code=167 from ${infile}.
# is used. Its model units is Kelvin (u=K)
# and its time cell method is mean (cm=m).
#2. Mapping table application:
# create mapping table:
echo '¶meter cn=tas c=167 u=K cm=M' >>mt.txt
# apply cdo cmor with mapping table:
cdo cmor,Amon,mapping_table=mt.txt ${infile}
# Without additional information,
# all variables from ${infile}
# are taken and converted
cdo cmor,Amon,cmor_name=tas,mt=mt.txt ${infile}
# If a cmor_name is provided, it is used
# as a mapping table line selector.
# The variable selector is taken
# from the corresponding mapping table line.
Infile
variables (attributes)
mapping
table
Exercises:
-
Convert the variable included in example_T_2M.nc to CMIP standard. Use mt.txt from the last slide and overwrite the infile variable selector.
-
Convert the variable included in example_celsius.nc to CMIP standard. Use mt.txt from the last slideand adapt the correct model variable unit.
#1.:
cdo cmor,Amon,cn=tas,n=T_2M,mt=mt.txt example_T_2M.nc
#2.:
cdo cmor,Amon,cn=tas,n=T_2M,mt=mt.txt,u=„degC“ example_celsius.nc
#Convert many variables at once with a
#complete mapping table mtPERFECT.txt:
cdo cmor,Amon,mt=mtPERFECT.txt example_collect.grb
Infile
variables (attributes)
mapping
table
A tool to create an mappping table is provided at
Infile
CDO
CMOR
Outfile
replace
append
coordinates (attributes)
cdo cmor
coordinates and grid info file
grid info
file
coordinates (attributes)
grid info
file
- Coordinates are also defined in the CMIP standard with CMOR variables (in CMIP6_coordinates.json)
- Target variables can be requested on no specific coordinate variable. E.g. Dimension "alev" refers to atmospheric model level so that various coordinate variables are valid. In this case, the user may have to provide the coordinate variable name depending on the axis type.
"latitude": {
"standard_name": "latitude",
"units": "degrees_north",
"axis": "Y",
"long_name": "latitude",
"climatology": "",
"formula": "",
"must_have_bounds": "yes",
"out_name": "lat",
"positive": "",
"requested": "",
"requested_bounds": "",
"stored_direction": "increasing",
"tolerance": "",
"type": "double",
"valid_max": "90.0",
"valid_min": "-90.0",
"value": "",
"z_bounds_factors": "",
"z_factors": "",
"bounds_values": ""
}
"tas": {
"frequency": "mon",
"modeling_realm": "atmos",
"standard_name": "air_temperature",
"units": "K",
"cell_methods": "area: time: mean",
"cell_measures": "area: areacella",
"long_name": "Near-Surface Air Temperature",
"comment": "near-surface (usually, 2 meter) air temperature",
"dimensions": "longitude latitude time height2m",
"out_name": "tas",
"type": "real",
"positive": "",
"valid_min": "",
"valid_max": "",
"ok_min_mean_abs": "",
"ok_max_mean_abs": ""
}
coordinates (attributes)
grid info
file
- The interface of CDO is able to distinguish axis types by exploiting infile information: Attributes 'standard_name' and 'units' of coordinate variables are evaluated according to the CF-conventions and some key values for attributes are predefined (GRIB tables). Gained information is used to pass the correct axis names to CMOR.
- Sometimes, the retrieved information from infile is insufficient. For that case, the operator provides the option to substitute the infile coordinates by specifying a grid info file. For specific axis types, less extensive configuration is possible.
bool is_lat_axis(const char *units, const char *stdname)
{
bool status = false;
char lc_units[16];
memcpy(lc_units, units, 15);
lc_units[15] = 0;
str_tolower(lc_units);
if ( (str_is_equal(lc_units, "degree") || str_is_equal(lc_units, "radian")) &&
(str_is_equal(stdname, "grid_latitude") || str_is_equal(stdname, "latitude")) )
{
status = true;
}
else if ( str_is_equal(lc_units, "degree")
&& !str_is_equal(stdname, "grid_longitude")
&& !str_is_equal(stdname, "longitude") )
{
int ioff = 6;
if ( lc_units[ioff] == 's' ) ioff++;
if ( lc_units[ioff] == '_' ) ioff++;
if ( lc_units[ioff] == 'n' || lc_units[ioff] == 's' ) status = true;
}
return status;
}
coordinates (attributes)
grid info
file
grid_
info.nc
ncdump -h example_gridinfo_CCLM4-8-17.nc
netcdf example_gridinfo_CCLM4-8-17 {
dimensions:
rlon = 424 ;
rlat = 412 ;
vertices = 4 ;
time = UNLIMITED ; // (1 currently)
bnds = 2 ;
variables:
double lon(rlat, rlon) ;
lon:standard_name = "longitude" ;
lon:long_name = "longitude" ;
lon:units = "degrees_east" ;
lon:_CoordinateAxisType = "Lon" ;
lon:bounds = "lon_bnds" ;
double lon_bnds(rlat, rlon, vertices) ;
double lat(rlat, rlon) ;
lat:standard_name = "latitude" ;
lat:long_name = "latitude" ;
lat:units = "degrees_north" ;
lat:_CoordinateAxisType = "Lat" ;
lat:bounds = "lat_bnds" ;
double lat_bnds(rlat, rlon, vertices) ;
double rlon(rlon) ;
rlon:standard_name = "grid_longitude" ;
rlon:long_name = "longitude in rotated pole grid" ;
rlon:units = "degrees" ;
rlon:axis = "X" ;
double rlat(rlat) ;
rlat:standard_name = "grid_latitude" ;
rlat:long_name = "latitude in rotated pole grid" ;
rlat:units = "degrees" ;
rlat:axis = "Y" ;
int rotated_pole ;
rotated_pole:grid_north_pole_latitude = 39.25 ;
rotated_pole:grid_north_pole_longitude = -162. ;
rotated_pole:grid_mapping_name = "rotated_latitude_longitude" ;
double height ;
height:standard_name = "height" ;
height:long_name = "height" ;
height:units = "m" ;
height:positive = "up" ;
height:axis = "Z" ;
double time(time) ;
time:standard_name = "time" ;
time:long_name = "time" ;
time:bounds = "time_bnds" ;
time:units = "days since 1949-12-01 00:00:00" ;
time:calendar = "365_day" ;
time:axis = "T" ;
double time_bnds(time, bnds) ;
float tas(time, rlat, rlon) ;
tas:standard_name = "air_temperature" ;
tas:long_name = "Near-Surface Air Temperature" ;
tas:units = "K" ;
tas:grid_mapping = "rotated_pole" ;
tas:coordinates = "height lat lon" ;
tas:_FillValue = 1.e+20f ;
tas:missing_value = 1.e+20f ;
tas:cell_methods = "time: mean" ;
}
- A grid info netCDF file which can contain
- CF conform grid description including bounds and grid mapping parameter
- CF conform vertical axis (e.g. level)
- substitutes per default all coordinate information (but time) gained from infile. They are retrieved from a 'dummy' variable wich fits to the target variable in dimension sizes.
coordinates (attributes)
grid info
file
time axis
time values
time bounds
- The CMIP6 standard requires a relative axis and time bounds. Relatives means, time values and time bounds are the temporal distance to a reference time.
- This reference time needs to be provided, either via a relative axis in the infile or via keyword 'required_time_units' in the format "days since <year><month><date> <hour>:<minute><second>". Each experiment usually predefines a reference time.
- The operator can pass correct time values to CMOR based on an absolute time axis in infile as well with the help of the 'required_time_units'
1970-01-02
1970-01-03
1970-01-04
1970-01-05
1970-01-06
1
2
3
4
5
Absolute:
Relative:
days since 1970-01-01 00:00:00
coordinates (attributes)
grid info
file
# MIP-Table request:
"cell_methods": "time: mean"
"dimensions": "time"
# Mapping attribute:
cm=m
# MIP-Table request:
"cell_methods": "time: point"
"dimensions": "time1"
# Mapping attribute:
cm=p
# MIP-Table request:
# Climate:
"cell_methods": "time: mean within years time: mean over years"
"dimensions": "time2"
# Mapping attribute:
cm=c
# Diurnal:
"cell_methods": "time: mean within days time: mean over days"
"dimensions": "time3"
# Mapping attribute:
cm=d
- The cell_methods attribute of a CMOR variable indicates the requirements on the time axis and time bounds.
- CMOR distinguishes five time axes (one of them is 'none' for fixed fields) which can be identified via the name specified in the dimensions of CMOR variables.
- Each of these can be built with the operator based on time values
time values
time bounds
time axis
coordinates (attributes)
grid info
file
# MIP-Table request:
"cell_methods": "time: mean"
"dimensions": "time"
# Mapping attribute:
cm=m
Based on the time values, time bounds are created frequency dependent. For subdaily frequencies, the time bounds are adjusted to the CMIP requested ones. The following time bounds are generated:
"2018-01-01 00:00:00"
"2018-02-01 00:00:00"
"2018-01-01 00:00:00"
"2018-01-01 06:00:00"
Time bounds are provided
time values
time bounds
time axis
time_axis=cmip ||
!taxisHasBounds(taxisID) ||
cell_methods=c ||
frequency=decadal
For monthly frequency:
For 6-hourly frequency:
If the time value is in between the interval:
"2018-01-01 00:00:00"
"2018-01-31 23:59:59"
If the time value is in between the interval:
"2018-01-01 00:00:00"
"2018-01-01 05:59:59"
coordinates (attributes)
grid info
file
# MIP-Table request:
"cell_methods": "time: point"
"dimensions": "time1"
# Mapping attribute:
cm=p
Exact time values are provided.
time values
time bounds
time axis
if ( ta == "cmip" )
In both cases, time bounds are irrelevant and not available in the output
For subdaily frequencies, the time bounds are adjusted to the CMIP requested ones
coordinates (attributes)
grid info
file
# MIP-Table request:
# Climate:
"cell_methods": "time: mean within years time: mean over years"
"dimensions": "time2"
# Mapping attribute:
cm=c
# Diurnal:
"cell_methods": "time: mean within days time: mean over days"
"dimensions": "time3"
# Mapping attribute:
cm=d
time values
time bounds
The time bounds requested for 'climate' and 'diurnal cycle' axes differ from 'mean' axis requests because of double averaging. The bounds generation is exemplified for both axis types:
"1971-01-01 00:00:00"
"2000-02-01 00:00:00"
- Climate:
A januarly mean averaged for 30 years period 1971-2000 has the following bounds:
"1971-01-01 00:00:00"
"1971-02-01 01:00:00"
- Diurnal cycle:
The mean of 00:00:00-01:00:00 averaged for all januar days of 1971 has the following bounds:
time axis
coordinates (attributes)
grid info
file
# MIP-Table request:
# Climate:
"cell_methods": "time: mean within years time: mean over years"
"dimensions": "time2"
# Mapping attribute:
cm=c
# Diurnal:
"cell_methods": "time: mean within days time: mean over days"
"dimensions": "time3"
# Mapping attribute:
cm=d
time values
time bounds
The bounds variable for a 'climate' axis is named "climatology_bnds" in outfile. For both axis types, these bounds can be provided as time_bnds variable similar to the procedure for 'mean' types. If not applicable, you can do this:
- Climate:
Time values must match the corresponding month (see 'mean' type). Specify the start and end year of the averaging interval as comma separated integers for keyword climatology_interval
- Diurnal cycle:
Time values must be within the firtst average interval (correct hour) and within the correct month.
time axis
coordinates (attributes)
grid info
file
time values
time bounds
time axis
Name | Short name | Format | Default |
---|---|---|---|
required_ time_units |
rtu | ’<Frequency> since <Year>-<Month>-<Day> <Hours>:<Minutes>:<Seconds>’, example: ’days since 1979-1-1 00:00:00’. |
No default |
calendar | Value is one of ’standard’ (’gre- gorian’), ’proleptic gregorian’, ’360 day’, ’noleap’ and ’all leap’. The calendar depends on the model configuration |
A calendar is usually available in infile |
|
climatology _interval |
Two comma separated years as integers. E.g.: 2001,2010 |
No default | |
t_axis | ’cmip’ for creating time values and bounds as requested by CMIP. | 'n' |
coordinates (attributes)
grid info
file
scalar axes
character axes
# Get the strucutre of header of a example raw model output:
ncdump -h example_interface.nc
# results:
netcdf example_interface {
dimensions:
time = UNLIMITED ; // (12 currently)
lon = 384 ;
lat = 192 ;
height = 1 ;
A dimension with size 1 is named 'scalar'. The CMIP standard provides that this type should not occur as a dimension in the header. Only a one valued coordinate variable (without a dimension) associated with attribute 'coordinates' of the requested variable is used to represent this axis:
variables:
double height ;
height:units = "m" ;
height:axis = "Z" ;
height:positive = "up" ;
height:long_name = "height" ;
height:standard_name = "height" ;
float tas(time, lat, lon) ;
tas:coordinates = "height" ;
coordinates (attributes)
grid info
file
scalar axes
character axes
- The operator automatically generates the scalar coordinate variable with the value requested by CMIP if not otherwise indicated.
- The name of the coordinate indicates the requested level, e.g. the requested value of height2m is 2m.
- However, an interval for valid values for this variable is defined by CMIP and spanned by valid_min and valid_max values.
"height2m": {
"valid_max": "10.0",
"valid_min": "1.0",
"value": "2.",
If the model level deviates from the requested level,
- the name of the scalar axis needs to be associated with the requested variable during mapping via z_axis (since all scalar axes are vertical). See below for an example.
- <z_axis_name>=<value> needs to be specified in a grid info table file. E.g. height2m=1.5
mapping table
¶meter cn=tas c=201 u=K cm=m pmt=Amon z_axis=height2m /
coordinates (attributes)
grid info
file
scalar axes
character axes
"basin": {
"standard_name": "region",
"requested": [
"atlantic_arctic_ocean",
"indian_pacific_ocean",
"global_ocean"
],
"type": "character",
mapping table
¶meter cn=hfbasinpadv c=004 pmt=Omon character_axis=basin /
"hfbasinpadv": {
"dimensions": "latitude basin time",
- Some variables are requested on character axes (recognizable by the dimension names) representing regions or areas (see above).
- The corresponding coordinate variable is of type "character".
- It can contain "requested" values. If specified, these are the minimum values which needs to be provided.
If only an index dimension is available in infile, the procedure similar to the scalar axes method can be an option:
- Specify a value for keyword character_axis within the target variable mapping
- Specify <character_axis_name>=<comma_separated_values> in a grid info table file. The sequence of strings must match the index sequence of the dimension.
coordinates (attributes)
grid info
file
vertical parametric axis
- The CMIP standard defines different vertical parametric axes which can be used if a variable is requested on ’alev’s.
- These axes are built on the basis of a formula which contains constant parameters. E.g., the hybrid sigma pressure coordinate named ’alternate hybrid sigma’ is built by the formula:
Right now, only this ’alternate hybrid sigma’ axis is enabled and test data for other axes built by a formula is required to guarantee a correct processing
- The operator is able to process this type when passed in an already CF-conform (Appendix D) format
ps must also be available in infile or in a substitution grid info netCDF file. The operator identifies the ps via variable name ’ps’. If a mapping table is specified, the name which is in the line with cmor name=ps is used to find the correct infile variable.
coordinates (attributes)
grid info
file
vertical parametric axis
Right now, only this ’alternate hybrid sigma’ axis is enabled and test data for other axes built by a formula is required to guarantee a correct processing
- For a grib formatted infile :
- If the key ’indicatorOfTypeOfLevel’ (octet 10) has either the value 109 or 110.
- The corresponding parameter ap and b should be saved for gribapi key ”pv”.
- For a netCDF formatted infile:
- if variables named ’hyai’ and ’hybi’ are available, they will be associated with ap and b.
- ps must also be available in the infile.
coordinates (attributes)
grid info
file
vertical axis
Type | Default units |
---|---|
ZAXIS_PRESSURE | "Pa" |
ZAXIS_HYBRID | "Pa" for all parameters |
ZAXIS_DEPTH_BELOW_SEA | "m" |
ZAXIS_DEPTH_BELOW_LAND | "cm" |
name="rho" | "kg m^-3" |
Scalar | "m" |
If no z-axis units are provided in infile via the units attribute of the coordinate variable, the operator uses the following default values
cdo cmor
special configuration keywords
global
(attributes)
info
table
- Simplifications for global attribute set configuration
- Neglect ESGF restrictions
global
(attributes)
info
table
Keyword | Associated global attributes in CMIP6 | Associated global attributes in CMIP5 | Format |
---|---|---|---|
branch_dates | branch_time_in_parent, branch_time_in_child | branch_time | Two comma separated integers: <parentBranchDate>*,<childBranchDate> * |
member | realization_index, initialization_index, physics_index, forcing_index | realization, initialization_method, physcis_version | r%di%dp%df%d (CMIP6) or r%di%dp%d (CMIP5) where %d is an integer for the respective index |
keep_all_ attributes |
All infile attributes | All infile attributes | y or n (default) |
*<date> has the format <year><month><day>, e.g.: 18500101
The operator offers keywords to specifiy several attributes at once. Specify them in the info table as well.
- Simplifications for global attribute set configuration
Keyword | Usage | Format |
---|---|---|
drs | Defines whether the output_path_template should be built | y (default) or n |
drs_root | Defines where the output file should be saved | Default: "./" |
output_path_template | Hard codes the entire DRS for the output path in CMIP6 | String. Default: CMIP CV |
output_file_template | Hard codes the entire DRS for the output file name in CMIP6 | String. Default: CMIP CV |
2. Neglect the ESGF restrictions
- It is possible to hack the configuration in a way that not all ESGF requests will be fulfilled
- A configuration still has to comprise all required attributes defined in the CMIP6_CV.json which is in the MIP-table directory
Keyword | Usage | Format |
---|---|---|
tracking_prefix | Defines whether a tracking prefix should be set for the tracking_id attribute | y (default) or n |
version_date | Hard codes the <version> directory in the DRS in CMIP6 | *dataContructionDate |
*<date> has the format <year><month><day>, e.g.: 18500101
2. Neglect the ESGF restrictions
The default of <version> is the date when CMOR is called and it is constructed by CMOR. In operational mode, more than one version directories may be created when simulations last for several days.
The tracking_id attribute in CMIP6 is a PID (persistent identifier). PIDs become active when they are registered in the ESGF. For test simulations, it is recommended to avoid building PIDs by setting the tracking_prefix to n.
Infile
CDO
CMOR
Outfile
replace
append
predefinitons
user setting
data stream
cdo cmor
output control
1851
1852
1850
CMOR
1850_post
1851_post
1852_post
tas_
185001_185012.nc
tas_
185001_185112.nc
tas_
185001_185212.nc
model simulation year |
Postprocessing skript |
CMIP6 compliant example variable |
Workflow
Name | Short name | Format | Default |
---|---|---|---|
output_mode | om | Character | a |
last_chunk | lc | Strings | Read from chunk description file |
max_size | ms | Integer | 2 |
- The output mode can be switched from default append mode to replace mode by specifying output_mode=r.
- In append mode, the last_chunk keyword specifies a corresponding chunk file to which data is appended.
- max_size defines the upper limit size of a chunk_file in [gb] before switching to replace mode.
CMOR
Outfile
replace
append
Name | Short name | Format | Default |
---|---|---|---|
output_mode | om | Character | a |
last_chunk | lc | Strings | Read from chunk description file |
max_size | ms | Integer | 2 |
- If you set max_size=0 , the appending test for a maximal size is switched off.
- If you are using the append mode with chunks read from description files, make sure that you do not parallelize over one simulation time since there will only be one chunk description file per variable but you will have more than one process per variable.
CMOR
Outfile
replace
append
Name | Short name | Format | Default |
---|---|---|---|
deflate_level | dl | Integer | 1 |
save_chunk | sc | Character | n |
- The compression of the output file can be set via the deflate_level. Note that higher levels than one can lead to lower performance.
- The chunk which will be appended can be saved before using it in the append mode. This enables to revert the last time step of the post processing.
CMOR
Outfile
replace
append
CMOR
Outfile
replace
append
#From earlier examples, you should have created a tas-file
#for year 2001. Now you want to append year 2002:
#
#Save the last chunk in a variable:
creationDate=v20171010
DRS=CMIP6/CMIP/MPI-M/MPIESM-1-2-HR/historical/ri1ip1f1/Amon/tas/gn/${creationDate}/
lc=${DRS}tas_Amon_MPIESM-1-2-HR_historical_r1i1p1f1_gn_200101-200112.nc
cdo cmor,Amon,mt=mapping_table.txt,last_chunk=${lc} example_append2002.grb
#The outfile path and filename is saved in
#„CHUNK_FILE_tas_Amon_MPI-ESM_amip_r1i1p1.txt“.
#This is the description for the default chunk in append mode.
#Now you can append the next year without defining lc:
cdo cmor,Amon,mt=mapping_table.txt example_append2003.grb
Name | Function | Short name | command line | mapping table | grid info | config tables | "E:Experiment | |||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
M:Model | ||||||||||||
U:User V:Variable" | MIP era | additional CORDEX attributes | "Man(datory), | |||||||||
If req(uired ), | ||||||||||||
Def(ault), Opt(ional)" | "CV: Controlled Vocabulary | |||||||||||
CV restricted: Format of value is restricted by Controlled Vocabulary" | Default | |||||||||||
cmor_name | Variable selector keyword | cn | y | y | man | CSV. Value must be in MIP-table. | ||||||
code | Variable selector keyword | c | y | y | opt | Three digits Intege. GRIB-cod. | ||||||
name | Variable selector keyword | n | y | y | opt | Word | ||||||
drs | Output control keyword | d | y | y | def | y' for building a DRS and 'n' for not building a DRS | y | |||||
drs_root | Output control keyword | dr | y | y | def | Filepath to where DRS will be built | ./ | |||||
last_chunk | Output control keyword | lc | y | y | opt | CSV of filenames | ||||||
max_size | Output control keyword | ms | y | y | def | Unit: Gb | 2 | |||||
output_mode | Output control keyword | om | y | y | def | r for replace or a for append | a | |||||
project_mip_table | MIP table of CMOR variable | pmt | y | y | 5,6 | man | CV: day, Omon, 6hrLev, ... | |||||
cell_methods | Mapping keyword | cm | y | y | def | CV: 'm', 'p', 'c', 'n' | m | |||||
character_axis | Mapping keyword | ca | y | y | ifReq | Cmor axis label | ||||||
positive | Mapping keyword | p | y | y | ifReq | d for downward, u for upward or blank for undirected | ||||||
units | Mapping keyword | u | y | y | man | String, must be readable by udunits | ||||||
variable_comment | Mapping keyword | vc | y | y | opt | String | ||||||
z_axis | Mapping keyword | za | y | y | ifReq | Cmor axis label | ||||||
activity_id | Global attribute | y | E | 6 | man | CV | ||||||
branch_method | Global attribute | y | E | 6 | ifReq | |||||||
branch_time | Global attribute | y | E | 5 | def | Double | 0.0 in CMIP5 | |||||
branch_time_in_child | Global attribute | y | E | 6 | ifReq | CV restricted | ||||||
branch_time_in_parent | Global attribute | y | E | 6 | ifReq | CV restricted | ||||||
calendar | Global attribute | y | y | M | def | CV: standard, proleptic, ... | standard | |||||
comment | Global attribute | y | E | opt | ||||||||
contact | Global attribute | y | U | 5,6 | opt | |||||||
cordex_domain | Global attribute | y | E | y | man | CV | ||||||
driving_experiment_name | Global attribute | y | E | y | man | CV | ||||||
driving_model_id | Global attribute | y | E | y | man | CV | ||||||
experiment_id | Global attribute | y | E | 5,6 | man | CV | ||||||
forcing | Global attribute | y | E | 5 | man | |||||||
forcing_index | Global attribute | y | E | 6 | man | CV restricted | ||||||
grid | Global attribute | y | E | 5,6 | man | |||||||
grid_label | Global attribute | y | E | 6 | man | CV | ||||||
history | Global attribute | y | E | opt | ||||||||
initialization | Global attribute | y | E | 5 | man | CV | ||||||
initialization_index | Global attribute | y | E | 6 | man | CV restricted | ||||||
institute_id | Global attribute | y | U | 5 | man | CV | ||||||
institution | Global attribute | y | U | 5,6 | man | CV | ||||||
institution_id | Global attribute | y | U | 6 | man | CV | ||||||
license | Global attribute | y | E | 6 | man | CSV restricted | ||||||
mip_era | Global attribute | y | U | 6 | man | CV | ||||||
model_id | Global attribute | y | M | 5 | man | CV | ||||||
nominal_resolution | Global attribute | y | M | 6 | man | CV | ||||||
parent_activity_id | Global attribute | y | E | 6 | ifReq | CV | ||||||
parent_experiment_id | Global attribute | y | E | 5,6 | ifReq | CV | ||||||
parent_experiment_rip | Global attribute | y | E | 5 | ifReq | CV restricted | ||||||
parent_source_id | Global attribute | y | E | 6 | ifReq | CV | ||||||
parent_time_units | Global attribute | y | E | 6 | ifReq | CV restricted | ||||||
parent_variant_label | Global attribute | y | E | 6 | ifReq | CV restricted | ||||||
physics_index | Global attribute | y | E | 6 | man | CV restricted | ||||||
physics_version | Global attribute | y | E | 5 | man | CV restricted | ||||||
product | Global attribute | y | E | 5,6 | man | CV | ||||||
project_id | Global attribute | y | E | 5 | man | CV | ||||||
rcm_version_id | Global attribute | y | E | y | man | CV restricted | ||||||
realization | Global attribute | y | E | 5 | man | CV restricted | ||||||
realization_index | Global attribute | y | E | 6 | man | CV restricted | ||||||
references | Global attribute | y | M | def | No references available for $model_id | |||||||
source | Global attribute | y | M | 5,6 | man | CV | ||||||
source_id | Global attribute | y | M | 6 | man | CV | ||||||
source_type | Global attribute | y | M | 6 | ifReq | CV restricted | ||||||
sub_experiment | Global attribute | y | E | 6 | ifReq | CV | ||||||
sub_experiment_id | Global attribute | y | E | 6 | ifReq | CV | ||||||
variant_info | Global attribute | y | E | opt | ||||||||
keep_all_atts | Global attribute specifier | y | E | 5,6 | def | Either y for keeping all attributes from infile or n for not | n | |||||
member | Global attribute specifier | y | E | 5,6 | man | "r%di%dp%d(f%d)" where %d is an integer | ||||||
parent_dates | Global attribute specifier | y | E | 5,6 | ifReq | |||||||
tracking_prefix | Global attribute specifier | y | U | 5,6 | def | Either "y" for use the project dependend tracking prefix or n for not | y | |||||
grid_info | Filename keyword | gi | y | y | M | opt | Filename. Grid of a netCDF file must fit to infile variable dimensions | |||||
grid_info_dir | Filename keyword | y | M | opt | Filepath | |||||||
info | Filename keyword | i | y | def | CSV of filenames. | ".cdocmorinfo" in the current working directory | ||||||
mapping_table | Filename keyword | mt | y | y | M | opt | Filename | |||||
mapping_table_dir | Filename keyword | y | M | opt | Filepath | |||||||
mip_table_dir | Filename keyword | y | U | opt | Filepath | |||||||
output_file_template | Filename keyword | y | U | 6 | def | CV | CV | |||||
output_path_template | Filename keyword | y | U | 6 | def | CV | CV | |||||
version_date | Filename keyword | vd | y | y | U | 6 | def | Date $year$month$day | Current date (<version>) | |||
climatology_interval | Coordinate keyword | y | y | E | ifReq | |||||||
leap_month | Coordinate keyword | y | y | M | ifReq | |||||||
leap_year | Coordinate keyword | y | y | M | ifReq | |||||||
req_time_units | Coordinate keyword | y | y | E | man | "$units since $year-$month-$day $hours:$minutes:$seconds" | ||||||
switch_z | Coordinate keyword | y | y | M | def | Either y for substitute the z-axis with the grid info zaxis or n for not | y | |||||
time_bounds | Coordinate keyword | y | y | M | def | Either „y“ for create or „n" for infile | n |