From 0817c55e19c075c4a8f580d37ae742e3a404670f Mon Sep 17 00:00:00 2001 From: ogaruba Date: Mon, 29 Dec 2025 14:05:40 -0800 Subject: [PATCH 1/9] mycmip6plusmod1 --- conda-env/ci.yml | 2 +- conda-env/dev.yml | 2 +- e3sm_to_cmip/argparser.py | 11 + e3sm_to_cmip/cmor_handlers/handler.py | 8 +- e3sm_to_cmip/cmor_handlers/handlers.yaml | 352 +++++------------- .../cmor_handlers/mpas_vars/areacello.py | 5 +- .../cmor_handlers/mpas_vars/fsitherm.py | 5 +- e3sm_to_cmip/cmor_handlers/mpas_vars/hfds.py | 5 +- .../cmor_handlers/mpas_vars/hfsifrazil.py | 5 +- .../cmor_handlers/mpas_vars/masscello.py | 5 +- e3sm_to_cmip/cmor_handlers/mpas_vars/masso.py | 5 +- .../cmor_handlers/mpas_vars/mlotst.py | 5 +- .../cmor_handlers/mpas_vars/msftmz.py | 5 +- e3sm_to_cmip/cmor_handlers/mpas_vars/pbo.py | 5 +- e3sm_to_cmip/cmor_handlers/mpas_vars/pso.py | 5 +- e3sm_to_cmip/cmor_handlers/mpas_vars/sfdsi.py | 5 +- .../cmor_handlers/mpas_vars/siconc.py | 5 +- .../cmor_handlers/mpas_vars/simass.py | 5 +- .../cmor_handlers/mpas_vars/sisnmass.py | 5 +- .../cmor_handlers/mpas_vars/sisnthick.py | 5 +- .../cmor_handlers/mpas_vars/sitemptop.py | 5 +- .../cmor_handlers/mpas_vars/sithick.py | 5 +- .../cmor_handlers/mpas_vars/sitimefrac.py | 5 +- e3sm_to_cmip/cmor_handlers/mpas_vars/siu.py | 5 +- e3sm_to_cmip/cmor_handlers/mpas_vars/siv.py | 5 +- e3sm_to_cmip/cmor_handlers/mpas_vars/so.py | 5 +- e3sm_to_cmip/cmor_handlers/mpas_vars/sob.py | 5 +- e3sm_to_cmip/cmor_handlers/mpas_vars/soga.py | 5 +- e3sm_to_cmip/cmor_handlers/mpas_vars/sos.py | 5 +- e3sm_to_cmip/cmor_handlers/mpas_vars/sosga.py | 5 +- e3sm_to_cmip/cmor_handlers/mpas_vars/tauuo.py | 5 +- e3sm_to_cmip/cmor_handlers/mpas_vars/tauvo.py | 5 +- .../cmor_handlers/mpas_vars/thetao.py | 5 +- .../cmor_handlers/mpas_vars/thetaoga.py | 5 +- .../cmor_handlers/mpas_vars/thkcello.py | 5 +- e3sm_to_cmip/cmor_handlers/mpas_vars/tob.py | 5 +- e3sm_to_cmip/cmor_handlers/mpas_vars/tos.py | 5 +- e3sm_to_cmip/cmor_handlers/mpas_vars/tosga.py | 5 +- e3sm_to_cmip/cmor_handlers/mpas_vars/uo.py | 5 +- e3sm_to_cmip/cmor_handlers/mpas_vars/vo.py | 5 +- .../cmor_handlers/mpas_vars/volcello.py | 5 +- e3sm_to_cmip/cmor_handlers/mpas_vars/volo.py | 5 +- e3sm_to_cmip/cmor_handlers/mpas_vars/wfo.py | 5 +- e3sm_to_cmip/cmor_handlers/mpas_vars/wo.py | 5 +- .../cmor_handlers/mpas_vars/zhalfo.py | 5 +- e3sm_to_cmip/cmor_handlers/mpas_vars/zos.py | 5 +- e3sm_to_cmip/cmor_handlers/utils.py | 41 +- e3sm_to_cmip/main.py | 1 - e3sm_to_cmip/runner.py | 12 +- e3sm_to_cmip/util.py | 131 ++++++- 50 files changed, 397 insertions(+), 368 deletions(-) diff --git a/conda-env/ci.yml b/conda-env/ci.yml index c93ac69c..a71235fd 100644 --- a/conda-env/ci.yml +++ b/conda-env/ci.yml @@ -7,7 +7,7 @@ dependencies: # ==================== - python >=3.11,<3.14 - setuptools - - cmor >=3.7.0 + - cmor =3.9.0 - dask - nco >=5.1.4 - netcdf4 diff --git a/conda-env/dev.yml b/conda-env/dev.yml index 9e2a8fec..45344a70 100644 --- a/conda-env/dev.yml +++ b/conda-env/dev.yml @@ -8,7 +8,7 @@ dependencies: # ==================== - python >=3.11,<3.14 - setuptools - - cmor >=3.7.0 + - cmor =3.9.0 - dask - nco >=5.1.4 - netcdf4 diff --git a/e3sm_to_cmip/argparser.py b/e3sm_to_cmip/argparser.py index db5a9503..2db5152f 100644 --- a/e3sm_to_cmip/argparser.py +++ b/e3sm_to_cmip/argparser.py @@ -121,6 +121,17 @@ def setup_argparser() -> argparse.ArgumentParser: default="mon", ) + optional_run.add_argument( + "-M", + "--mip_era", + type=str, + help=( + "The cmip_era (default is 'cmip6'). Accepted " + "values are 'cmip6', 'cmip6plus', 'cmip7'." + ), + default="cmip6", + ) + # ====================================================================== # Paths references. # ====================================================================== diff --git a/e3sm_to_cmip/cmor_handlers/handler.py b/e3sm_to_cmip/cmor_handlers/handler.py index f947d348..31892c23 100644 --- a/e3sm_to_cmip/cmor_handlers/handler.py +++ b/e3sm_to_cmip/cmor_handlers/handler.py @@ -218,6 +218,8 @@ def cmorize( # ---------------------------------------------------------------------- self._setup_cmor_module(self.name, tables_path, metadata_path, cmor_log_dir) + print(metadata_path) + # Get parameters for running CMOR operations # ---------------------------------------------------------------------- # Check if the output CMIP variable has a time dimension, which determines @@ -339,7 +341,11 @@ def _get_var_time_dim(self, table_path: str) -> str | None: with open(table_path, "r") as inputstream: table_info = json.load(inputstream) - axis_info = table_info["variable_entry"][self.name]["dimensions"].split(" ") + try: + axis_info = table_info["variable_entry"][self.name]["dimensions"].split(" ") + + except AttributeError: + axis_info = table_info["variable_entry"][self.name]["dimensions"][:] for dim in TIME_DIMS: if dim in axis_info: diff --git a/e3sm_to_cmip/cmor_handlers/handlers.yaml b/e3sm_to_cmip/cmor_handlers/handlers.yaml index beeb67c2..9bbab75a 100644 --- a/e3sm_to_cmip/cmor_handlers/handlers.yaml +++ b/e3sm_to_cmip/cmor_handlers/handlers.yaml @@ -26,7 +26,7 @@ - name: abs550aer units: "1" raw_variables: [AODABS] - table: CMIP6_AERmon.json + table: [CMIP6_AERmon.json, MIP_AEmon.json] unit_conversion: null formula: null positive: null @@ -34,7 +34,7 @@ - name: albisccp units: "1" raw_variables: [MEANCLDALB_ISCCP] - table: CMIP6_CFmon.json + table: [CMIP6_CFmon.json, MIP_APmon.json] unit_conversion: null formula: null positive: null @@ -42,7 +42,7 @@ - name: cLitter units: kg m-2 raw_variables: [TOTLITC, CWDC] - table: CMIP6_Lmon.json + table: [CMIP6_Lmon.json, MIP_LPmon.json] unit_conversion: null formula: (TOTLITC + CWDC)/1000.0 positive: null @@ -50,7 +50,7 @@ - name: cProduct units: kg m-2 raw_variables: [TOTPRODC] - table: CMIP6_Lmon.json + table: [CMIP6_Lmon.json, MIP_LPmon.json] unit_conversion: g-to-kg formula: null positive: null @@ -58,7 +58,7 @@ - name: cSoilFast units: kg m-2 raw_variables: [SOIL1C] - table: CMIP6_Lmon.json + table: [CMIP6_Lmon.json, MIP_LPmon.json] unit_conversion: g-to-kg formula: null positive: null @@ -66,7 +66,7 @@ - name: cSoilMedium units: kg m-2 raw_variables: [SOIL2C] - table: CMIP6_Lmon.json + table: [CMIP6_Lmon.json, MIP_LPmon.json] unit_conversion: g-to-kg formula: null positive: null @@ -74,7 +74,7 @@ - name: cSoilSlow units: kg m-2 raw_variables: [SOIL3C] - table: CMIP6_Lmon.json + table: [CMIP6_Lmon.json, MIP_LPmon.json] unit_conversion: g-to-kg formula: null positive: null @@ -82,7 +82,7 @@ - name: cVeg units: kg m-2 raw_variables: [TOTVEGC] - table: CMIP6_Lmon.json + table: [CMIP6_Lmon.json, MIP_LPmon.json] unit_conversion: g-to-kg formula: null positive: null @@ -104,7 +104,7 @@ - name: clcalipso units: "%" raw_variables: [CLD_CAL] - table: CMIP6_CFmon.json + table: [CMIP6_CFmon.json, MIP_APmon.json] unit_conversion: null formula: null positive: null @@ -118,7 +118,7 @@ - name: clhcalipso units: "%" raw_variables: [CLDHGH_CAL] - table: CMIP6_CFmon.json + table: [CMIP6_CFmon.json, MIP_APmon.json] unit_conversion: null formula: null positive: null @@ -148,7 +148,7 @@ - name: cllcalipso units: "%" raw_variables: [CLDLOW_CAL] - table: CMIP6_CFmon.json + table: MIP_APmon.json unit_conversion: null formula: null positive: null @@ -156,7 +156,7 @@ - name: clmcalipso units: "%" raw_variables: [CLDMED_CAL] - table: CMIP6_CFmon.json + table: MIP_APmon.json unit_conversion: null formula: null positive: null @@ -164,7 +164,7 @@ - name: clt units: "%" raw_variables: [CLDTOT] - table: CMIP6_Amon.json + table: MIP_APmon.json unit_conversion: 1-to-% formula: null positive: null @@ -172,7 +172,7 @@ - name: cltcalipso units: "%" raw_variables: [CLDTOT_CAL] - table: CMIP6_CFmon.json + table: MIP_APmon.json unit_conversion: null formula: null positive: null @@ -180,7 +180,7 @@ - name: cltisccp units: "%" raw_variables: [CLDTOT_ISCCP] - table: CMIP6_CFmon.json + table: MIP_APmon.json unit_conversion: null formula: null positive: null @@ -202,7 +202,7 @@ - name: clwvi units: kg m-2 raw_variables: [TGCLDCWP] - table: CMIP6_Amon.json + table: MIP_APmon.json unit_conversion: null formula: null positive: null @@ -210,7 +210,7 @@ - name: emibc units: kg m-2 s-1 raw_variables: [SFbc_a4, bc_a4_CLXF] - table: CMIP6_AERmon.json + table: MIP_AEmon.json unit_conversion: null formula: SFbc_a4 + bc_a4_CLXF * 12.011 / 6.02214e+22 positive: null @@ -218,7 +218,7 @@ - name: emiso2 units: kg m-2 s-1 raw_variables: [SFSO2, SO2_CLXF] - table: CMIP6_AERmon.json + table: MIP_AEmon.json unit_conversion: null formula: SFSO2 + SO2_CLXF * 64.064800 / 6.02214e+22 positive: null @@ -226,64 +226,16 @@ - name: emiso4 units: kg m-2 s-1 raw_variables: [SFso4_a1, SFso4_a2, so4_a1_CLXF, so4_a2_CLXF] - table: CMIP6_AERmon.json + table: MIP_AEmon.json unit_conversion: null formula: SFso4_a1 + SFso4_a2 + (so4_a1_CLXF + so4_a2_CLXF) * 115.107340 / 6.02214e+22 positive: null levels: null -- name: od550bc - units: "1" - raw_variables: [AODBC] - table: CMIP6_AERmon.json - unit_conversion: null - formula: null - positive: null - levels: null -- name: od550dust - units: "1" - raw_variables: [AODDUST] - table: CMIP6_AERmon.json - unit_conversion: null - formula: null - positive: null - levels: null -- name: od550so4 - units: "1" - raw_variables: [AODSO4] - table: CMIP6_AERmon.json - unit_conversion: null - formula: null - positive: null - levels: null -- name: od550soa - units: "1" - raw_variables: [AODSOA] - table: CMIP6_AERmon.json - unit_conversion: null - formula: null - positive: null - levels: null -- name: od550ss - units: "1" - raw_variables: [AODSS] - table: CMIP6_AERmon.json - unit_conversion: null - formula: null - positive: null - levels: null -- name: ptp - units: Pa - raw_variables: [TROP_P] - table: CMIP6_AERmon.json - unit_conversion: null - formula: null - positive: null - levels: null - name: evspsbl units: kg m-2 s-1 raw_variables: [QFLX] - table: CMIP6_Amon.json + table: MIP_APmon.json unit_conversion: null formula: null positive: null @@ -291,7 +243,7 @@ - name: evspsblsoi units: kg m-2 s-1 raw_variables: [QSOIL] - table: CMIP6_Lmon.json + table: MIP_LPmon.json unit_conversion: null formula: null positive: up @@ -299,7 +251,7 @@ - name: evspsblveg units: kg m-2 s-1 raw_variables: [QVEGE] - table: CMIP6_Lmon.json + table: MIP_LPmon.json unit_conversion: null formula: null positive: up @@ -307,7 +259,7 @@ - name: fFire units: kg m-2 s-1 raw_variables: [COL_FIRE_CLOSS] - table: CMIP6_Lmon.json + table: MIP_LPmon.json unit_conversion: g-to-kg formula: null positive: up @@ -315,7 +267,7 @@ - name: fHarvest units: kg m-2 s-1 raw_variables: [WOOD_HARVESTC] - table: CMIP6_Lmon.json + table: MIP_LPmon.json unit_conversion: g-to-kg formula: null positive: up @@ -323,7 +275,7 @@ - name: gpp units: kg m-2 s-1 raw_variables: [GPP] - table: CMIP6_Lmon.json + table: MIP_LPmon.json unit_conversion: g-to-kg formula: null positive: down @@ -331,7 +283,7 @@ - name: hfls units: W m-2 raw_variables: [LHFLX] - table: CMIP6_Amon.json + table: MIP_APmon.json unit_conversion: null formula: null positive: up @@ -339,7 +291,7 @@ - name: hfss units: W m-2 raw_variables: [SHFLX] - table: CMIP6_Amon.json + table: MIP_APmon.json unit_conversion: null formula: null positive: up @@ -347,15 +299,7 @@ - name: hur units: "%" raw_variables: [RELHUM] - table: CMIP6_Amon.json - unit_conversion: null - formula: null - positive: null - levels: { name: plev19, units: Pa, e3sm_axis_name: plev } -- name: hus - units: "1" - raw_variables: [Q] - table: CMIP6_Amon.json + table: MIP_APmon.json unit_conversion: null formula: null positive: null @@ -363,7 +307,7 @@ - name: huss units: "1" raw_variables: [QREFHT] - table: CMIP6_Amon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: null positive: null @@ -371,7 +315,7 @@ - name: huss units: "1" raw_variables: [QREFHT] - table: CMIP6_day.json + table: [CMIP6_day.json, MIP_APday.json] unit_conversion: null formula: null positive: null @@ -379,17 +323,17 @@ - name: lai units: "1" raw_variables: [LAISHA, LAISUN] - table: CMIP6_Lmon.json + table: MIP_LPmon.json unit_conversion: null formula: LAISHA + LAISUN positive: null levels: null - name: mmrbc units: kg kg-1 - raw_variables: [bc_a1, bc_a3, bc_a4, bc_c1, bc_c3, bc_c4] + raw_variables: [bc_a1, bc_a4, bc_c1, bc_c4] table: CMIP6_AERmon.json unit_conversion: null - formula: bc_a1+bc_a3+bc_a4+bc_c1+bc_c3+bc_c4 + formula: bc_a1+bc_a4+bc_c1+bc_c4 positive: null levels: { @@ -403,119 +347,7 @@ raw_variables: [Mass_bc] table: CMIP6_AERmon.json unit_conversion: null - formula: Mass_bc - positive: null - levels: - { - name: standard_hybrid_sigma, - units: "1", - e3sm_axis_name: lev, - e3sm_axis_bnds: ilev, - } -- name: mmrdust - units: kg kg-1 - raw_variables: [Mass_dst] - table: CMIP6_AERmon.json - unit_conversion: null - formula: Mass_dst - positive: null - levels: - { - name: standard_hybrid_sigma, - units: "1", - e3sm_axis_name: lev, - e3sm_axis_bnds: ilev, - } -- name: mmrdust - units: kg kg-1 - raw_variables: [dst_a1, dst_c1, dst_a3, dst_c3] - table: CMIP6_AERmon.json - unit_conversion: null - formula: dst_a1+dst_c1+dst_a3+dst_c3 - positive: null - levels: - { - name: standard_hybrid_sigma, - units: "1", - e3sm_axis_name: lev, - e3sm_axis_bnds: ilev, - } -- name: mmroa - units: kg kg-1 - raw_variables: [Mass_pom, Mass_soa] - table: CMIP6_AERmon.json - unit_conversion: null - formula: Mass_pom + Mass_soa - positive: null - levels: - { - name: standard_hybrid_sigma, - units: "1", - e3sm_axis_name: lev, - e3sm_axis_bnds: ilev, - } -- name: mmroa - units: kg kg-1 - raw_variables: [pom_a1, pom_c1, pom_a3, pom_c3, pom_a4, pom_c4, soa_a1, soa_c1, soa_a2, soa_c2, soa_a3, soa_c3] - table: CMIP6_AERmon.json - unit_conversion: null - formula: pom_a1+pom_c1+pom_a3+pom_c3+pom_a4+pom_c4+soa_a1+soa_c1+soa_a2+soa_c2+soa_a3+soa_c3 - positive: null - levels: - { - name: standard_hybrid_sigma, - units: "1", - e3sm_axis_name: lev, - e3sm_axis_bnds: ilev, - } -- name: mmrsoa - units: kg kg-1 - raw_variables: [Mass_soa] - table: CMIP6_AERmon.json - unit_conversion: null - formula: Mass_soa - positive: null - levels: - { - name: standard_hybrid_sigma, - units: "1", - e3sm_axis_name: lev, - e3sm_axis_bnds: ilev, - } -- name: mmrsoa - units: kg kg-1 - raw_variables: [soa_a1, soa_c1, soa_a2, soa_c2, soa_a3, soa_c3] - table: CMIP6_AERmon.json - unit_conversion: null - formula: soa_a1+soa_c1+soa_a2+soa_c2+soa_a3+soa_c3 - positive: null - levels: - { - name: standard_hybrid_sigma, - units: "1", - e3sm_axis_name: lev, - e3sm_axis_bnds: ilev, - } -- name: mmrss - units: kg kg-1 - raw_variables: [Mass_ncl] - table: CMIP6_AERmon.json - unit_conversion: null - formula: Mass_ncl - positive: null - levels: - { - name: standard_hybrid_sigma, - units: "1", - e3sm_axis_name: lev, - e3sm_axis_bnds: ilev, - } -- name: mmrss - units: kg kg-1 - raw_variables: [ncl_a1, ncl_c1, ncl_a2, ncl_c2, ncl_a3, ncl_c3] - table: CMIP6_AERmon.json - unit_conversion: null - formula: ncl_a1+ncl_c1+ncl_a2+ncl_c2+ncl_a3+ncl_c3 + formula: bc_a1+bc_a4+bc_c1+bc_c4 positive: null levels: { @@ -529,21 +361,7 @@ raw_variables: [Mass_so4] table: CMIP6_AERmon.json unit_conversion: null - formula: Mass_so4 * 96.0636 / 115.10734 - positive: null - levels: - { - name: standard_hybrid_sigma, - units: "1", - e3sm_axis_name: lev, - e3sm_axis_bnds: ilev, - } -- name: mmrso4 - units: kg kg-1 - raw_variables: [so4_a1, so4_c1, so4_a2, so4_c2, so4_a3, so4_c3, so4_a5, so4_c5] - table: CMIP6_AERmon.json - unit_conversion: null - formula: (so4_a1+so4_c1+so4_a2+so4_c2+so4_a3+so4_c3+so4_a5+so4_c5) * 96.0636 / 115.10734 + formula: so4_a1+so4_c1+so4_a2+so4_c2+so4_a3+so4_c3 positive: null levels: { @@ -557,7 +375,7 @@ raw_variables: [so4_a1, so4_c1, so4_a2, so4_c2, so4_a3, so4_c3] table: CMIP6_AERmon.json unit_conversion: null - formula: (so4_a1+so4_c1+so4_a2+so4_c2+so4_a3+so4_c3)* 96.0636 / 115.10734 + formula: so4_a1+so4_c1+so4_a2+so4_c2+so4_a3+so4_c3 positive: null levels: { @@ -569,7 +387,7 @@ - name: mrfso units: kg m-2 raw_variables: [SOILICE] - table: CMIP6_Lmon.json + table: MIP_LPmon.json unit_conversion: null formula: verticalSum(SOILICE, capped_at=5000) positive: null @@ -577,7 +395,7 @@ - name: mrro units: kg m-2 s-1 raw_variables: [QRUNOFF] - table: CMIP6_Lmon.json + table: MIP_LPmon.json unit_conversion: null formula: null positive: null @@ -585,7 +403,7 @@ - name: mrros units: kg m-2 s-1 raw_variables: [QOVER] - table: CMIP6_Lmon.json + table: MIP_LPmon.json unit_conversion: null formula: null positive: null @@ -593,7 +411,7 @@ - name: mrso units: kg m-2 raw_variables: [SOILICE, SOILLIQ] - table: CMIP6_Lmon.json + table: MIP_LPmon.json unit_conversion: null formula: verticalSum(SOILICE + SOILLIQ, capped_at=5000) positive: null @@ -601,7 +419,7 @@ - name: mrsos units: kg m-2 raw_variables: [SOILWATER_10CM] - table: CMIP6_Lmon.json + table: MIP_LPmon.json unit_conversion: null formula: null positive: null @@ -609,7 +427,7 @@ - name: nbp units: kg m-2 s-1 raw_variables: [NBP] - table: CMIP6_Lmon.json + table: MIP_LPmon.json unit_conversion: g-to-kg formula: null positive: down @@ -671,7 +489,7 @@ - name: pr units: kg m-2 s-1 raw_variables: [PRECT] - table: CMIP6_day.json + table: [CMIP6_day.json, MIP_APday.json] unit_conversion: null formula: PRECT * 1000.0 positive: null @@ -679,7 +497,7 @@ - name: pr units: kg m-2 s-1 raw_variables: [PRECC, PRECL] - table: CMIP6_Amon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: (PRECC + PRECL) * 1000.0 positive: null @@ -687,7 +505,7 @@ - name: prc units: kg m-2 s-1 raw_variables: [PRECC] - table: CMIP6_Amon.json + table: MIP_APmon.json unit_conversion: m/s-to-kg/ms formula: null positive: null @@ -695,7 +513,7 @@ - name: prsn units: kg m-2 s-1 raw_variables: [PRECSC, PRECSL] - table: CMIP6_Amon.json + table: MIP_APmon.json unit_conversion: null formula: (PRECSC + PRECSL) * 1000.0 positive: null @@ -703,7 +521,7 @@ - name: prveg units: kg m-2 s-1 raw_variables: [QINTR] - table: CMIP6_Lmon.json + table: MIP_LPmon.json unit_conversion: null formula: null positive: null @@ -711,7 +529,7 @@ - name: prw units: kg m-2 raw_variables: [TMQ] - table: CMIP6_Amon.json + table: MIP_APmon.json unit_conversion: null formula: null positive: null @@ -719,7 +537,7 @@ - name: ps units: Pa raw_variables: [PS] - table: CMIP6_Amon.json + table: MIP_APmon.json unit_conversion: null formula: null positive: null @@ -727,7 +545,7 @@ - name: psl units: Pa raw_variables: [PSL] - table: CMIP6_Amon.json + table: MIP_APmon.json unit_conversion: null formula: null positive: null @@ -735,7 +553,7 @@ - name: ra units: kg m-2 s-1 raw_variables: [AR] - table: CMIP6_Lmon.json + table: MIP_LPmon.json unit_conversion: g-to-kg formula: null positive: up @@ -743,7 +561,7 @@ - name: rh units: kg m-2 s-1 raw_variables: [HR] - table: CMIP6_Lmon.json + table: MIP_LPmon.json unit_conversion: g-to-kg formula: null positive: up @@ -751,7 +569,7 @@ - name: rlds units: W m-2 raw_variables: [FLDS] - table: CMIP6_Amon.json + table: MIP_APmon.json unit_conversion: null formula: null positive: down @@ -759,7 +577,7 @@ - name: rldscs units: W m-2 raw_variables: [FLDS, FLNS, FLNSC] - table: CMIP6_Amon.json + table: MIP_APmon.json unit_conversion: null formula: FLDS + FLNS - FLNSC positive: down @@ -767,7 +585,7 @@ - name: rlus units: W m-2 raw_variables: [FLDS, FLNS] - table: CMIP6_Amon.json + table: MIP_APmon.json unit_conversion: null formula: FLDS + FLNS positive: up @@ -775,7 +593,7 @@ - name: rlut units: W m-2 raw_variables: [FLUT] - table: CMIP6_day.json + table: MIP_APday.json unit_conversion: null formula: FSNTOA - FSNT + FLNT positive: up @@ -783,7 +601,7 @@ - name: rlut units: W m-2 raw_variables: [FSNTOA, FSNT, FLNT] - table: CMIP6_Amon.json + table: MIP_APmon.json unit_conversion: null formula: FSNTOA - FSNT + FLNT positive: up @@ -791,7 +609,7 @@ - name: rlutcs units: W m-2 raw_variables: [FLUTC] - table: CMIP6_Amon.json + table: MIP_APmon.json unit_conversion: null formula: null positive: up @@ -799,7 +617,7 @@ - name: rsds units: W m-2 raw_variables: [FSDS] - table: CMIP6_Amon.json + table: MIP_APmon.json unit_conversion: null formula: null positive: down @@ -807,7 +625,7 @@ - name: rsdscs units: W m-2 raw_variables: [FSDSC] - table: CMIP6_Amon.json + table: MIP_APmon.json unit_conversion: null formula: null positive: down @@ -815,7 +633,7 @@ - name: rsdt units: W m-2 raw_variables: [SOLIN] - table: CMIP6_Amon.json + table: MIP_APmon.json unit_conversion: null formula: null positive: down @@ -823,7 +641,7 @@ - name: rsus units: W m-2 raw_variables: [FSNS, FSDS] - table: CMIP6_Amon.json + table: MIP_APmon.json unit_conversion: null formula: FSDS - FSNS positive: up @@ -831,7 +649,7 @@ - name: rsuscs units: W m-2 raw_variables: [FSDSC, FSNSC] - table: CMIP6_Amon.json + table: MIP_APmon.json unit_conversion: null formula: FSDSC - FSNSC positive: up @@ -839,7 +657,7 @@ - name: rsut units: W m-2 raw_variables: [SOLIN, FSNTOA] - table: CMIP6_Amon.json + table: MIP_APmon.json unit_conversion: null formula: SOLIN - FSNTOA positive: up @@ -847,7 +665,7 @@ - name: rsut units: W m-2 raw_variables: [FSUTOA] - table: CMIP6_Amon.json + table: MIP_APmon.json unit_conversion: null formula: null positive: up @@ -855,7 +673,7 @@ - name: rsutcs units: W m-2 raw_variables: [SOLIN, FSNTOAC] - table: CMIP6_Amon.json + table: MIP_APmon.json unit_conversion: null formula: SOLIN - FSNTOAC positive: up @@ -863,7 +681,7 @@ - name: rsutcs units: W m-2 raw_variables: [FSUTOAC] - table: CMIP6_Amon.json + table: MIP_APmon.json unit_conversion: null formula: null positive: up @@ -871,7 +689,7 @@ - name: rtmt units: W m-2 raw_variables: [FSNT, FLNT] - table: CMIP6_Amon.json + table: MIP_APmon.json unit_conversion: null formula: FSNT - FLNT positive: down @@ -879,7 +697,7 @@ - name: sfcWind units: m s-1 raw_variables: [U10] - table: CMIP6_Amon.json + table: MIP_APmon.json unit_conversion: null formula: null positive: null @@ -909,7 +727,7 @@ - name: ta units: K raw_variables: [T] - table: CMIP6_Amon.json + table: [MIP_APmon.json] unit_conversion: null formula: null positive: null @@ -917,7 +735,7 @@ - name: tas units: K raw_variables: [TREFHT] - table: CMIP6_Amon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: null positive: null @@ -925,7 +743,7 @@ - name: tas units: K raw_variables: [TREFHT] - table: CMIP6_day.json + table: [CMIP6_day.json, MIP_APday.json] unit_conversion: null formula: null positive: null @@ -933,7 +751,7 @@ - name: tasmax units: K raw_variables: [TREFHTMX] - table: CMIP6_day.json + table: MIP_APday.json unit_conversion: null formula: null positive: null @@ -941,7 +759,7 @@ - name: tasmax units: K raw_variables: [TREFMXAV] - table: CMIP6_Amon.json + table: MIP_APmon.json unit_conversion: null formula: null positive: null @@ -949,7 +767,7 @@ - name: tasmin units: K raw_variables: [TREFHTMN] - table: CMIP6_day.json + table: MIP_APday.json unit_conversion: null formula: null positive: null @@ -957,7 +775,7 @@ - name: tasmin units: K raw_variables: [TREFMNAV] - table: CMIP6_Amon.json + table: MIP_APmon.json unit_conversion: null formula: null positive: null @@ -965,7 +783,7 @@ - name: tauu units: Pa raw_variables: [TAUX] - table: CMIP6_Amon.json + table: MIP_APmon.json unit_conversion: "-1" formula: null positive: down @@ -973,7 +791,7 @@ - name: tauv units: Pa raw_variables: [TAUY] - table: CMIP6_Amon.json + table: MIP_APmon.json unit_conversion: "-1" formula: null positive: down @@ -981,7 +799,7 @@ - name: tran units: kg m-2 s-1 raw_variables: [QVEGT, QSOIL] - table: CMIP6_Lmon.json + table: MIP_LPmon.json unit_conversion: null formula: QSOIL + QVEGT positive: up @@ -989,7 +807,7 @@ - name: ts units: K raw_variables: [TS] - table: CMIP6_Amon.json + table: MIP_APmon.json unit_conversion: null formula: null positive: null @@ -997,7 +815,7 @@ - name: tsl units: K raw_variables: [TSOI] - table: CMIP6_Lmon.json + table: MIP_LPmon.json unit_conversion: null formula: null positive: null @@ -1011,7 +829,7 @@ - name: ua units: m s-1 raw_variables: [U] - table: CMIP6_Amon.json + table: MIP_APmon.json unit_conversion: null formula: null positive: null @@ -1019,7 +837,7 @@ - name: va units: m s-1 raw_variables: [V] - table: CMIP6_Amon.json + table: MIP_APmon.json unit_conversion: null formula: null positive: null @@ -1027,7 +845,7 @@ - name: wap units: Pa s-1 raw_variables: [OMEGA] - table: CMIP6_Amon.json + table: MIP_APmon.json unit_conversion: null formula: null positive: null @@ -1035,7 +853,7 @@ - name: zg units: m raw_variables: [Z3] - table: CMIP6_Amon.json + table: MIP_APmon.json unit_conversion: null formula: null positive: null diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/areacello.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/areacello.py index 047019ca..fd67482d 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/areacello.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/areacello.py @@ -14,13 +14,13 @@ # output variable name VAR_NAME = "areacello" VAR_UNITS = "m2" -TABLE = "CMIP6_Ofx.json" +TABLE =["CMIP6_Ofx.json", "MIP_OPfx.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASO cellArea into CMIP.areacello Parameters @@ -75,6 +75,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/fsitherm.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/fsitherm.py index a8d7fed7..e20df3f7 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/fsitherm.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/fsitherm.py @@ -14,13 +14,13 @@ # output variable name VAR_NAME = "fsitherm" VAR_UNITS = "kg m-2 s-1" -TABLE = "CMIP6_Omon.json" +TABLE = ["CMIP6_Omon.json", "MIP_OPmon.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASO timeMonthly_avg_seaIceFreshWaterFlux into CMIP.fsitherm @@ -70,6 +70,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/hfds.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/hfds.py index 7cfc861f..a3ccf892 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/hfds.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/hfds.py @@ -14,13 +14,13 @@ # output variable name VAR_NAME = "hfds" VAR_UNITS = "W m-2" -TABLE = "CMIP6_Omon.json" +TABLE = ["CMIP6_Omon.json", "MIP_OPmon.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASO timeMonthly_avg_seaIceHeatFlux, timeMonthly_avg_latentHeatFlux ,timeMonthly_avg_sensibleHeatFlux, @@ -85,6 +85,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/hfsifrazil.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/hfsifrazil.py index 5950a23e..448fa8c0 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/hfsifrazil.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/hfsifrazil.py @@ -14,13 +14,13 @@ # output variable name VAR_NAME = "hfsifrazil" VAR_UNITS = "W m-2" -TABLE = "CMIP6_Omon.json" +TABLE = ["CMIP6_Omon.json", "MIP_OPmon.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASO timeMonthly_avg_frazilLayerThicknessTendency into CMIP.hfsifrazil @@ -88,6 +88,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/masscello.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/masscello.py index 23d71ec7..ed33b416 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/masscello.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/masscello.py @@ -15,13 +15,13 @@ # output variable name VAR_NAME = "masscello" VAR_UNITS = "kg m-2" -TABLE = "CMIP6_Omon.json" +TABLE = ["CMIP6_Omon.json", "MIP_OPmonLev.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASO timeMonthly_avg_layerThickness into CMIP.masscello @@ -90,6 +90,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/masso.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/masso.py index 7d9d1893..f7452315 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/masso.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/masso.py @@ -14,13 +14,13 @@ # output variable name VAR_NAME = "masso" VAR_UNITS = "kg" -TABLE = "CMIP6_Omon.json" +TABLE = ["CMIP6_Omon.json", "MIP_OPmon.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASO timeMonthly_avg_layerThickness into CMIP.masso @@ -80,6 +80,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/mlotst.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/mlotst.py index 930852e9..7a4cdc90 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/mlotst.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/mlotst.py @@ -14,13 +14,13 @@ # output variable name VAR_NAME = "mlotst" VAR_UNITS = "m" -TABLE = "CMIP6_Omon.json" +TABLE = ["CMIP6_Omon.json", "MIP_OPmon.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASO timeMonthly_avg_dThreshMLD into CMIP.mlotst @@ -77,6 +77,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/msftmz.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/msftmz.py index 7408b816..fbb6e1c1 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/msftmz.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/msftmz.py @@ -14,13 +14,13 @@ # output variable name VAR_NAME = "msftmz" VAR_UNITS = "kg s-1" -TABLE = "CMIP6_Omon.json" +TABLE = ["CMIP6_Omon.json", "MIP_OPmonZ.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASO timeMonthly_avg_normalVelocity, timeMonthly_avg_normalGMBolusVelocity, timeMonthly_avg_vertVelocityTop, @@ -88,6 +88,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) region = ["global_ocean", "atlantic_arctic_ocean"] diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/pbo.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/pbo.py index ff50830f..3e7e46fe 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/pbo.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/pbo.py @@ -14,13 +14,13 @@ # output variable name VAR_NAME = "pbo" VAR_UNITS = "Pa" -TABLE = "CMIP6_Omon.json" +TABLE = ["CMIP6_Omon.json", "MIP_OPmon.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASO timeMonthly_avg_pressureAdjustedSSH, timeMonthly_avg_ssh, timeMonthly_avg_density, timeMonthly_avg_layerThickness, and EAM PSL into @@ -102,6 +102,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/pso.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/pso.py index 7a7ee5ac..48775da0 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/pso.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/pso.py @@ -14,13 +14,13 @@ # output variable name VAR_NAME = "pso" VAR_UNITS = "Pa" -TABLE = "CMIP6_Omon.json" +TABLE = ["CMIP6_Omon.json", "MIP_OPmon.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASO timeMonthly_avg_pressureAdjustedSSH and timeMonthly_avg_ssh, and EAM PSL into CMIP.pso @@ -99,6 +99,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/sfdsi.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/sfdsi.py index 24968e79..f6e3deb5 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/sfdsi.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/sfdsi.py @@ -14,13 +14,13 @@ # output variable name VAR_NAME = "sfdsi" VAR_UNITS = "kg m-2 s-1" -TABLE = "CMIP6_Omon.json" +TABLE = ["CMIP6_Omon.json", "MIP_OPmon.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASO timeMonthly_avg_seaIceSalinityFlux into CMIP.sfdsi @@ -72,6 +72,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/siconc.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/siconc.py index 8320f486..c92c75a4 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/siconc.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/siconc.py @@ -14,13 +14,13 @@ # output variable name VAR_NAME = "siconc" VAR_UNITS = "%" -TABLE = "CMIP6_SImon.json" +TABLE = ["CMIP6_SImon.json", "MIP_SImon.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASSI timeMonthly_avg_iceAreaCell into CMIP.siconc @@ -72,6 +72,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/simass.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/simass.py index 6d9b9f84..2261d830 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/simass.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/simass.py @@ -13,13 +13,13 @@ # output variable name VAR_NAME = "simass" VAR_UNITS = "kg m-2" -TABLE = "CMIP6_SImon.json" +TABLE = ["CMIP6_SImon.json", "MIP_SImon.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASSI timeMonthly_avg_iceAreaCell and timeMonthly_avg_iceVolumeCell into CMIP.simass @@ -70,6 +70,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/sisnmass.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/sisnmass.py index 6d3c9cdf..f4582eb7 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/sisnmass.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/sisnmass.py @@ -14,13 +14,13 @@ # output variable name VAR_NAME = "sisnmass" VAR_UNITS = "kg m-2" -TABLE = "CMIP6_SImon.json" +TABLE = ["CMIP6_SImon.json", "MIP_SImon.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASSI timeMonthly_avg_iceAreaCell and timeMonthly_avg_snowVolumeCell into CMIP.sisnmass @@ -76,6 +76,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/sisnthick.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/sisnthick.py index 5b73a393..dcd7824b 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/sisnthick.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/sisnthick.py @@ -14,13 +14,13 @@ # output variable name VAR_NAME = "sisnthick" VAR_UNITS = "m" -TABLE = "CMIP6_SImon.json" +TABLE = ["CMIP6_SImon.json", "MIP_SImon.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASSI timeMonthly_avg_iceAreaCell and timeMonthly_avg_snowVolumeCell into CMIP.sisnthick @@ -76,6 +76,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/sitemptop.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/sitemptop.py index c56b4830..8862bc0c 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/sitemptop.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/sitemptop.py @@ -14,13 +14,13 @@ # output variable name VAR_NAME = "sitemptop" VAR_UNITS = "K" -TABLE = "CMIP6_SImon.json" +TABLE = ["CMIP6_SImon.json", "MIP_SImonPt.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASSI timeMonthly_avg_iceAreaCell and timeMonthly_avg_surfaceTemperatureCell into CMIP.sitemptop @@ -74,6 +74,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/sithick.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/sithick.py index 0a3b17ff..828d56b8 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/sithick.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/sithick.py @@ -14,13 +14,13 @@ # output variable name VAR_NAME = "sithick" VAR_UNITS = "m" -TABLE = "CMIP6_SImon.json" +TABLE = ["CMIP6_SImon.json", "MIP_SImon.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASSI timeMonthly_avg_iceAreaCell and timeMonthly_avg_iceVolumeCell into CMIP.sithick @@ -74,6 +74,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/sitimefrac.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/sitimefrac.py index b75a360d..b220777e 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/sitimefrac.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/sitimefrac.py @@ -14,13 +14,13 @@ # output variable name VAR_NAME = "sitimefrac" VAR_UNITS = "1" -TABLE = "CMIP6_SImon.json" +TABLE = ["CMIP6_SImon.json", "MIP_SImon.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASSI timeMonthly_avg_icePresent into CMIP.sitimefrac @@ -75,6 +75,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/siu.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/siu.py index ef3cb783..994629e9 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/siu.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/siu.py @@ -14,13 +14,13 @@ # output variable name VAR_NAME = "siu" VAR_UNITS = "m s-1" -TABLE = "CMIP6_SImon.json" +TABLE = ["CMIP6_SImon.json", "MIP_SImon.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASSI timeMonthly_avg_uVelocityGeo into CMIP.siu @@ -79,6 +79,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/siv.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/siv.py index 1ed74103..a7d4e578 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/siv.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/siv.py @@ -14,13 +14,13 @@ # output variable name VAR_NAME = "siv" VAR_UNITS = "m s-1" -TABLE = "CMIP6_SImon.json" +TABLE = ["CMIP6_SImon.json", "MIP_SImon.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASSI timeMonthly_avg_vVelocityGeo into CMIP.siv @@ -81,6 +81,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/so.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/so.py index 90f3fd21..fd01c661 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/so.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/so.py @@ -14,13 +14,13 @@ # output variable name VAR_NAME = "so" VAR_UNITS = "0.001" -TABLE = "CMIP6_Omon.json" +TABLE = ["CMIP6_Omon.json", "MIP_OPmon.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASO timeMonthly_avg_activeTracers_salinity into CMIP.so @@ -78,6 +78,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/sob.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/sob.py index a5eccf3a..c7d7d018 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/sob.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/sob.py @@ -13,13 +13,13 @@ # output variable name VAR_NAME = "sob" VAR_UNITS = "0.001" -TABLE = "CMIP6_Omon.json" +TABLE = ["CMIP6_Omon.json", "MIP_OPmon.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASO timeMonthly_avg_activeTracers_salinity into CMIP.sob @@ -77,6 +77,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/soga.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/soga.py index 16b87888..c1c9ca2e 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/soga.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/soga.py @@ -14,13 +14,13 @@ # output variable name VAR_NAME = "soga" VAR_UNITS = "0.001" -TABLE = "CMIP6_Omon.json" +TABLE = ["CMIP6_Omon.json", "MIP_OPmon.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASO timeMonthly_avg_layerThickness and timeMonthly_avg_activeTracers_salinity into CMIP.soga @@ -79,6 +79,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/sos.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/sos.py index f2224bb8..e663958f 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/sos.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/sos.py @@ -14,13 +14,13 @@ # output variable name VAR_NAME = "sos" VAR_UNITS = "0.001" -TABLE = "CMIP6_Omon.json" +TABLE = ["CMIP6_Omon.json", "MIP_OPmon.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASO timeMonthly_avg_activeTracers_salinity into CMIP.sos @@ -78,6 +78,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/sosga.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/sosga.py index 9fd77f4d..ebeda937 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/sosga.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/sosga.py @@ -14,13 +14,13 @@ # output variable name VAR_NAME = "sosga" VAR_UNITS = "0.001" -TABLE = "CMIP6_Omon.json" +TABLE = ["CMIP6_Omon.json", "MIP_OPmon.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASO timeMonthly_avg_activeTracers_salinity into CMIP.sosga @@ -76,6 +76,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/tauuo.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/tauuo.py index 075a86cf..5fe16f7f 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/tauuo.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/tauuo.py @@ -14,13 +14,13 @@ # output variable name VAR_NAME = "tauuo" VAR_UNITS = "N m-2" -TABLE = "CMIP6_Omon.json" +TABLE = ["CMIP6_Omon.json", "MIP_OPmon.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASO timeMonthly_avg_windStressZonal into CMIP.tauuo @@ -72,6 +72,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/tauvo.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/tauvo.py index af645538..983b6216 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/tauvo.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/tauvo.py @@ -14,13 +14,13 @@ # output variable name VAR_NAME = "tauvo" VAR_UNITS = "N m-2" -TABLE = "CMIP6_Omon.json" +TABLE = ["CMIP6_Omon.json", "MIP_OPmon.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASO timeMonthly_avg_windStressMeridional into CMIP.tauvo @@ -72,6 +72,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/thetao.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/thetao.py index d2e93e36..6083803e 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/thetao.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/thetao.py @@ -14,13 +14,13 @@ # output variable name VAR_NAME = "thetao" VAR_UNITS = "degC" -TABLE = "CMIP6_Omon.json" +TABLE = ["CMIP6_Omon.json", "MIP_OPmon.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASO timeMonthly_avg_activeTracers_temperature into CMIP.thetao @@ -78,6 +78,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/thetaoga.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/thetaoga.py index 87a14eb5..47a47ca9 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/thetaoga.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/thetaoga.py @@ -14,13 +14,13 @@ # output variable name VAR_NAME = "thetaoga" VAR_UNITS = "degC" -TABLE = "CMIP6_Omon.json" +TABLE = ["CMIP6_Omon.json", "MIP_OPmon.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASO timeMonthly_avg_layerThickness and timeMonthly_avg_activeTracers_temperature into CMIP.thetaoga @@ -79,6 +79,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/thkcello.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/thkcello.py index 239ae3e2..a9a53ff8 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/thkcello.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/thkcello.py @@ -15,13 +15,13 @@ # output variable name VAR_NAME = "thkcello" VAR_UNITS = "m" -TABLE = "CMIP6_Omon.json" +TABLE = ["CMIP6_Omon.json", "MIP_OPmonLev.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASO timeMonthly_avg_layerThickness into CMIP.thkcello @@ -84,6 +84,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/tob.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/tob.py index 7f2ad254..f8318235 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/tob.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/tob.py @@ -14,13 +14,13 @@ # output variable name VAR_NAME = "tob" VAR_UNITS = "degC" -TABLE = "CMIP6_Omon.json" +TABLE = ["CMIP6_Omon.json", "MIP_OPmon.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASO timeMonthly_avg_activeTracers_temperature into CMIP.tob @@ -78,6 +78,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/tos.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/tos.py index bd362ca5..be9c3940 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/tos.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/tos.py @@ -14,13 +14,13 @@ # output variable name VAR_NAME = "tos" VAR_UNITS = "degC" -TABLE = "CMIP6_Omon.json" +TABLE = ["CMIP6_Omon.json", "MIP_OPmon.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASO timeMonthly_avg_activeTracers_temperature into CMIP.tos @@ -78,6 +78,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/tosga.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/tosga.py index ef96c626..75133dcd 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/tosga.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/tosga.py @@ -14,13 +14,13 @@ # output variable name VAR_NAME = "tosga" VAR_UNITS = "degC" -TABLE = "CMIP6_Omon.json" +TABLE = ["CMIP6_Omon.json", "MIP_OPmon.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASO timeMonthly_avg_activeTracers_temperature into CMIP.tosga @@ -76,6 +76,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/uo.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/uo.py index 36e0ff6d..18073e54 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/uo.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/uo.py @@ -14,13 +14,13 @@ # output variable name VAR_NAME = "uo" VAR_UNITS = "m s-1" -TABLE = "CMIP6_Omon.json" +TABLE = ["CMIP6_Omon.json", "MIP_OPmon.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASO timeMonthly_avg_velocityZonal into CMIP.uo @@ -78,6 +78,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/vo.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/vo.py index 2ab09176..5f09d90d 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/vo.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/vo.py @@ -14,13 +14,13 @@ # output variable name VAR_NAME = "vo" VAR_UNITS = "m s-1" -TABLE = "CMIP6_Omon.json" +TABLE = ["CMIP6_Omon.json", "MIP_OPmon.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASO timeMonthly_avg_velocityMeridional into CMIP.vo @@ -78,6 +78,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/volcello.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/volcello.py index c9a02ea9..1f2cf798 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/volcello.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/volcello.py @@ -15,13 +15,13 @@ # output variable name VAR_NAME = "volcello" VAR_UNITS = "m3" -TABLE = "CMIP6_Omon.json" +TABLE = ["CMIP6_Omon.json", "MIP_OPmonLev.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASO timeMonthly_avg_layerThickness into CMIP.thkcello @@ -99,6 +99,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/volo.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/volo.py index c2f8a6fa..28079af5 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/volo.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/volo.py @@ -14,13 +14,13 @@ # output variable name VAR_NAME = "volo" VAR_UNITS = "m3" -TABLE = "CMIP6_Omon.json" +TABLE = ["CMIP6_Omon.json", "MIP_OPmon.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASO timeMonthly_avg_layerThickness into CMIP.volo @@ -77,6 +77,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/wfo.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/wfo.py index a3ddb52a..0c5618f2 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/wfo.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/wfo.py @@ -14,13 +14,13 @@ # output variable name VAR_NAME = "wfo" VAR_UNITS = "kg m-2 s-1" -TABLE = "CMIP6_Omon.json" +TABLE = ["CMIP6_Omon.json", "MIP_OPmon.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASO timeMonthly_avg_seaIceFreshWaterFlux, timeMonthly_avg_riverRunoffFlux, timeMonthly_avg_iceRunoffFlux, @@ -84,6 +84,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/wo.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/wo.py index 9c41c76b..eaad208d 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/wo.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/wo.py @@ -14,13 +14,13 @@ # output variable name VAR_NAME = "wo" VAR_UNITS = "m s-1" -TABLE = "CMIP6_Omon.json" +TABLE = ["CMIP6_Omon.json", "MIP_OPmon.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASO timeMonthly_avg_vertVelocityTop into CMIP.wo @@ -80,6 +80,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/zhalfo.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/zhalfo.py index 1f9fd0ff..f47c0da9 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/zhalfo.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/zhalfo.py @@ -15,13 +15,13 @@ # output variable name VAR_NAME = "zhalfo" VAR_UNITS = "m" -TABLE = "CMIP6_Omon.json" +TABLE = ["CMIP6_Omon.json", "MIP_OPmonLev.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASO timeMonthly_avg_layerThickness into CMIP.zhalfo @@ -102,6 +102,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/mpas_vars/zos.py b/e3sm_to_cmip/cmor_handlers/mpas_vars/zos.py index 80388355..3464e01e 100644 --- a/e3sm_to_cmip/cmor_handlers/mpas_vars/zos.py +++ b/e3sm_to_cmip/cmor_handlers/mpas_vars/zos.py @@ -14,13 +14,13 @@ # output variable name VAR_NAME = "zos" VAR_UNITS = "m" -TABLE = "CMIP6_Omon.json" +TABLE = ["CMIP6_Omon.json", "MIP_OPmon.json"] logger = _setup_child_logger(__name__) -def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): +def handle(infiles, tables, user_input_path, cmor_log_dir, mip_era, **kwargs): """ Transform MPASO timeMonthly_avg_pressureAdjustedSSH into CMIP.zos @@ -79,6 +79,7 @@ def handle(infiles, tables, user_input_path, cmor_log_dir, **kwargs): table_name=TABLE, user_input_path=user_input_path, cmor_log_dir=cmor_log_dir, + mip_era=mip_era, ) # create axes diff --git a/e3sm_to_cmip/cmor_handlers/utils.py b/e3sm_to_cmip/cmor_handlers/utils.py index 4f1f73f6..8289e3dc 100644 --- a/e3sm_to_cmip/cmor_handlers/utils.py +++ b/e3sm_to_cmip/cmor_handlers/utils.py @@ -32,7 +32,7 @@ def load_all_handlers( - realm: Realm | MPASRealm, cmip_vars: list[str] + realm: Realm | MPASRealm, cmip_vars: list[str], mip_era: str, ) -> list[dict[str, Any]]: """Loads variable handlers based on a list of variable names. @@ -45,7 +45,8 @@ def load_all_handlers( The realm. cmip_vars : list[str] The list of CMIP6 variables to CMORize. - + mip_era : str + CMIP era (cmip6 or cmip6plus) Returns ------- list[dict[str, Any]]: @@ -70,7 +71,15 @@ def load_all_handlers( missing_handlers.append(var) continue - handlers = handlers + var_handler + for var_handlers in var_handler: + if type(var_handlers["table"]) is list: + if mip_era == "cmip6" and len(var_handlers["table"]) > 1: + var_handlers["table"] = str(var_handlers["table"][0]) + + elif mip_era == "cmip6plus" and len(var_handlers["table"]) > 1: + var_handlers["table"] = str(var_handlers["table"][1]) + + handlers = handlers + var_handler if len(missing_handlers) > 0: logger.warning( @@ -79,12 +88,13 @@ def load_all_handlers( f"variables in `{HANDLER_DEFINITIONS_PATH}`." ) else: - handlers = _get_mpas_handlers(cmip_vars) + handlers = _get_mpas_handlers(cmip_vars, mip_era) + return handlers -def _get_mpas_handlers(cmip_vars: list[str]): +def _get_mpas_handlers(cmip_vars: list[str], mip_era: str): """Get MPAS variable handlers using the list of CMIP variables. All current MPAS variable handlers are defined as modules and there is only @@ -111,7 +121,13 @@ def _get_mpas_handlers(cmip_vars: list[str]): if var_handler is None: missing_handlers.append(var) continue + for var_handlers in var_handler: + if type(var_handlers["table"]) is list: + if mip_era == "cmip6" and len(var_handlers["table"]) > 1: + var_handlers["table"] = str(var_handlers["table"][0]) + elif mip_era == "cmip6plus" and len(var_handlers["table"]) > 1: + var_handlers["table"] = str(var_handlers["table"][1]) derived_handlers.append(var_handler[0]) if len(missing_handlers) > 0: @@ -130,6 +146,7 @@ def derive_handlers( e3sm_vars: list[str], freq: Frequency, realm: Realm | MPASRealm, + mip_era: str, ) -> list[dict[str, Any]]: """Derives the appropriate handler for each CMIP variable. @@ -159,6 +176,8 @@ def derive_handlers( variable handler. realm : str The realm. + mip_era : str + CMIP era Returns ------- @@ -193,6 +212,18 @@ def derive_handlers( missing_handlers.append(var) continue + for var_handler in var_handlers: + if type(var_handler["table"]) is list: + if mip_era == "cmip6" and len(var_handler["table"]) > 1: + var_handler["table"]= str(var_handler["table"][0]) + + elif mip_era == "cmip6plus" and len(var_handler["table"]) > 1: + var_handler["table"] = str(var_handler["table"][1]) + # If more than one handler table corresponding to different mip_era is + # defined for a variable, the coresponding handler table for the mip_era is selected. + # Handler table is assumed to be list type and cmip6 is first item and cmip6plus + # else if only one mip era table is defined for a variable nothing is done + derived_handler = _derive_handler( var_handlers, freq, realm, cmip_tables_path, e3sm_vars ) diff --git a/e3sm_to_cmip/main.py b/e3sm_to_cmip/main.py index dfeaacae..b2e5f9b1 100644 --- a/e3sm_to_cmip/main.py +++ b/e3sm_to_cmip/main.py @@ -9,7 +9,6 @@ from e3sm_to_cmip.argparser import parse_args - def main(args: list[str] | None = None): parsed_args = parse_args(args) diff --git a/e3sm_to_cmip/runner.py b/e3sm_to_cmip/runner.py index 9c370a05..f63f212a 100755 --- a/e3sm_to_cmip/runner.py +++ b/e3sm_to_cmip/runner.py @@ -77,6 +77,7 @@ class CLIArguments: var_list: list[str] realm: Realm | MPASRealm freq: Frequency + mip_era: str # Path references. input_path: str | None @@ -124,6 +125,7 @@ def __init__(self, args: argparse.Namespace | list[str] | None = None): self.var_list: list[str] = self._get_var_list(parsed_args.var_list) self.realm: Realm | MPASRealm = parsed_args.realm self.freq: Frequency = parsed_args.freq + self.mip_era: str | None = parsed_args.mip_era # ====================================================================== # Paths references. @@ -175,6 +177,7 @@ def __init__(self, args: argparse.Namespace | list[str] | None = None): "Temp Path for Processing MPAS Files": self.temp_path, "Frequency": self.freq, "Realm": self.realm, + "MIP Era": self.mip_era } for key, value in config_details.items(): @@ -252,7 +255,7 @@ def run(self): def _get_handlers(self): if self.info_mode: - handlers = load_all_handlers(self.realm, self.var_list) + handlers = load_all_handlers(self.realm, self.var_list, self.mip_era) elif not self.info_mode and self.input_path is not None: e3sm_vars = self._get_e3sm_vars(self.input_path) logger.debug(f"Input dataset variables: {e3sm_vars}") @@ -264,6 +267,7 @@ def _get_handlers(self): e3sm_vars=e3sm_vars, freq=self.freq, realm=self.realm, + mip_era=self.mip_era ) cmip_to_e3sm_vars = { @@ -277,7 +281,7 @@ def _get_handlers(self): logger.info(f" * '{k}' -> {v}") elif self.realm in MPAS_REALMS: - handlers = _get_mpas_handlers(self.var_list) + handlers = _get_mpas_handlers(self.var_list, self.mip_era) if len(handlers) == 0: logger.error( @@ -660,6 +664,7 @@ def _run_serial(self) -> bool: self.tables_path, self.new_metadata_path, self.cmor_log_dir, + self.mip_era, ) else: is_cmor_successful = handler_method( @@ -732,7 +737,7 @@ def _run_parallel(self) -> Literal[True]: handler_variables = handler["raw_variables"] handler_table = handler["table"] vars_to_filepaths = self._get_handler_input_files(handler_variables) - + print(self.tables_path, self.new_metadata_path) try: if self.realm in MPAS_REALMS: future = pool.submit( @@ -741,6 +746,7 @@ def _run_parallel(self) -> Literal[True]: self.tables_path, self.new_metadata_path, self.cmor_log_dir, + self.mip_era, ) else: future = pool.submit( diff --git a/e3sm_to_cmip/util.py b/e3sm_to_cmip/util.py index 32f2a977..4f8217c3 100644 --- a/e3sm_to_cmip/util.py +++ b/e3sm_to_cmip/util.py @@ -15,8 +15,43 @@ logger = _setup_child_logger(__name__) -FREQUENCIES = ["mon", "day", "6hrLev", "6hrPlev", "6hrPlevPt", "3hr", "1hr"] +FREQUENCIES = ["yr", "mon", "day", "6hrLev", "6hrPlev", "6hrPlevPt", "6hrPtZ", "3hr", "3hrPt", "3hrPtLev", "1hr", "1hrPt", "subhr"] ATMOS_TABLES = [ + "MIP_ACmon.json", + "MIP_ACmonZ.json", + "MIP_AE1hr.json", + "MIP_AE3hrPt.json", + "MIP_AE3hrPtLev.json", + "MIP_AE6hr.json", + "MIP_AE6hrPt.json", + "MIP_AE6hrPtLev.json", + "MIP_AEday.json", + "MIP_AEmon.json", + "MIP_AEmonLev.json", + "MIP_AEmonZ.json", + "MIP_AEsubhrPt.json", + "MIP_AEsubhrPtSite.json", + "MIP_AP1hr.json", + "MIP_AP1hrPt.json", + "MIP_AP3hr.json", + "MIP_AP3hrPt.json", + "MIP_AP3hrPtLev.json" + "MIP_AP6hr.json", + "MIP_AP6hrPt.json", + "MIP_AP6hrPtLev.json", + "MIP_AP6hrPtZ.json", + "MIP_APday.json", + "MIP_APdayLev.json", + "MIP_APdayZ.json", + "MIP_APfx.json", + "MIP_APmonClim.json", + "MIP_APmonClimLev.json", + "MIP_APmonDiurnal.json", + "MIP_APmon.json", + "MIP_APmonLev.json", + "MIP_APmonZ.json", + "MIP_APsubhrPt.json", + "MIP_APsubhrPtLev.json", "CMIP6_Amon.json", "CMIP6_day.json", "CMIP6_3hr.json", @@ -32,16 +67,53 @@ "CMIP6_fx.json", ] -LAND_TABLES = ["CMIP6_Lmon.json", "CMIP6_LImon.json"] -OCEAN_TABLES = ["CMIP6_Omon.json", "CMIP6_Ofx.json"] -SEAICE_TABLES = ["CMIP6_SImon.json"] +LAND_TABLES = ["MIP_LI3hrPt.json", "MIP_LI6hrPt.json", "MIP_LIday.json", "MIP_LIfx.json", "MIP_LImon.json", "MIP_LIsubhrPtSite.json", "MIP_LP3hr.json", "MIP_LP3hrPt.json", "MIP_LP6hrPt.json", "MIP_LPday.json", "MIP_LPfx.json", "MIP_LPmon.json", "MIP_LPyr.json", "MIP_LPyrPt.json", "CMIP6_Lmon.json", "CMIP6_LImon.json"] +OCEAN_TABLES = ["MIP_OBday.json", "MIP_OBmon.json", "MIP_OBmonLev.json", "MIP_OByr.json", "MIP_OByrLev.json", "MIP_OP3hrPt.json", "MIP_OPday.json", "MIP_OPdec.json", "MIP_OPdecLev.json", "MIP_OPdecZ.json", "MIP_OPfx.json", "MIP_OPmonClim.json", "MIP_OPmonClimLev.json", "MIP_OPmon.json", "MIP_OPmonLev.json", "MIP_OPmonZ.json", "MIP_OPyr.json", "MIP_OPyrLev.json", "CMIP6_Omon.json", "CMIP6_Ofx.json"] +SEAICE_TABLES = ["MIP_SIday.json", "MIP_SImon.json", "MIP_SImonPt.json", "CMIP6_SImon.json"] # Mapping from CMIP6 table names to their associated frequency. # This dictionary helps determine the frequency category (e.g., "mon", "day", etc.) # for a given CMIP6 table name when deriving or validating variable handlers. # Keys are CMIP6 table filenames, values are their frequency strings. FREQUENCY_TO_CMIP_TABLES = { + "yr": [ + "MIP_LPyr.json", + "MIP_LPyrPt.json", + "MIP_OByr.json", + "MIP_OByrLev.json", + "MIP_OPyr.json", + "MIP_OPyrLev.json", + ], "mon": [ + "MIP_ACmon.json", + "MIP_ACmonZ.json", + "MIP_AEmon.json", + "MIP_AEmonLev.json", + "MIP_AEmonZ.json", + "MIP_APmonClim.json", + "MIP_APmonClimLev.json", + "MIP_APmonDiurnal.json", + "MIP_APmon.json", + "MIP_APmonLev.json", + "MIP_APmonZ.json", + "MIP_APfx.json", + "MIP_LPmon.json", + "MIP_LPfx.json", + "MIP_LImon.json", + "MIP_LIfx.json", + "MIP_OBmon.json", + "MIP_OBmonLev.json", + "MIP_OPmonClim.json", + "MIP_OPdec.json", + "MIP_OPdecLev.json", + "MIP_OPdecZ.json", + "MIP_OPmonClimLev.json", + "MIP_OPmon.json", + "MIP_OPmonLev.json", + "MIP_OPmonZ.json", + "MIP_OPfx.json", + "MIP_SImon.json", + "MIP_SImonPt.json", "CMIP6_Amon.json", "CMIP6_Lmon.json", "CMIP6_LImon.json", @@ -53,26 +125,64 @@ "CMIP6_SImon.json", ], "day": [ + "MIP_AEday.json", + "MIP_APday.json", + "MIP_APdayLev.json", + "MIP_APdayZ.json", + "MIP_LPday.json", + "MIP_LIday.json", + "MIP_OBday.json", + "MIP_OPday.json", + "MIP_SIday.json", "CMIP6_day.json", "CMIP6_CFday.json", "CMIP6_AERday.json", ], "3hr": [ + "MIP_AE1hr.json", + "MIP_AE3hrPt.json", + "MIP_AE3hrPtLev.json", + "MIP_AP3hr.json", + "MIP_AP3hrPt.json", + "MIP_AP3hrPtLev.json", + "MIP_LP3hr.json", + "MIP_LP3hrPt.json", + "MIP_LI3hrPt.json", + "MIP_OP3hrPt.json", "CMIP6_3hr.json", "CMIP6_CF3hr.json", ], "6hrLev": [ + "MIP_AE6hr.json", + "MIP_AP6hr.json", "CMIP6_6hrLev.json", ], "6hrPlev": [ + "MIP_AE6hrPt.json", + "MIP_AP6hrPt.json", + "MIP_LP6hrPt.json", + "MIP_LI6hrPt.json", "CMIP6_6hrPlev.json", ], "6hrPlevPt": [ + "MIP_AE6hrPtLev.json", + "MIP_AP6hrPtLev.json", + "MIP_AP6hrPtZ.json", "CMIP6_6hrPlevPt.json", ], "1hr": [ + "MIP_AE1hr.json", + "MIP_AP1hr.json", + "MIP_AP1hrPt.json", "CMIP6_AERhr.json", ], + "subhr": [ + "MIP_AEsubhrPt.json", + "MIP_AEsubhrPtSite.json", + "MIP_APsubhrPt.json", + "MIP_APsubhrPtLev.json", + "MIP_LIsubhrPtSite.json", + ] } @@ -136,7 +246,7 @@ def print_message(message, status="error"): # ------------------------------------------------------------------ -def setup_cmor(var_name, table_path, table_name, user_input_path, cmor_log_dir): +def setup_cmor(var_name, table_path, table_name, user_input_path, cmor_log_dir, mip_era): """ Sets up cmor and logging for a single handler. @@ -144,6 +254,13 @@ def setup_cmor(var_name, table_path, table_name, user_input_path, cmor_log_dir): under ``e3sm_to_cmip/cmor_handlers/mpas_vars`` and legacy handlers defined under ``e3sm_to_cmip/cmor_handlers/vars``. """ + if type(table_name) is list: + if mip_era == "cmip6" and len(table_name) > 1: + table_name = str(table_name[0]) + + elif mip_era == "cmip6plus" and len(table_name) > 1: + table_name = str(table_name[1]) + logfile = os.path.join(cmor_log_dir, var_name + ".log") cmor.setup(inpath=table_path, netcdf_file_action=cmor.CMOR_REPLACE, logfile=logfile) @@ -324,10 +441,10 @@ def _get_table_for_freq(base_table: str, freq: str) -> str | None: The optional table for the frequency. """ # Replace the base table (monthly) with the frequency. - if base_table == "CMIP6_Amon.json": + if base_table == ["MIP_ACmon.json", "MIP_AEmon.json", "MIP_APmon.json", "CMIP6_Amon.json"]: return f"CMIP6_{freq}.json" # Tables not supported for frequencies other than month. - elif base_table in ["CMIP6_Lmon.json", "CMIP6_LImon.json"] and freq != "mon": + elif base_table in ["MIP_LPmon.json", "MIP_LImon.json", "CMIP6_Lmon.json", "CMIP6_LImon.json"] and freq != "mon": return None # "fx" tables not supported for frequencies other than month. elif "fx" in base_table and freq != "mon": From dabaf772a207d554f8d0687b13daa740be0f0a3c Mon Sep 17 00:00:00 2001 From: Oluwayemi Garuba <83234970+ogaruba@users.noreply.github.com> Date: Wed, 7 Jan 2026 13:23:39 -0500 Subject: [PATCH 2/9] Update handlers.yaml updated mapping of cmip6 to cmip6plus for all variables --- e3sm_to_cmip/cmor_handlers/handlers.yaml | 354 +++++++++++++++++------ 1 file changed, 267 insertions(+), 87 deletions(-) diff --git a/e3sm_to_cmip/cmor_handlers/handlers.yaml b/e3sm_to_cmip/cmor_handlers/handlers.yaml index 9bbab75a..812100cd 100644 --- a/e3sm_to_cmip/cmor_handlers/handlers.yaml +++ b/e3sm_to_cmip/cmor_handlers/handlers.yaml @@ -90,7 +90,7 @@ - name: cl units: "%" raw_variables: [CLOUD] - table: CMIP6_Amon.json + table: [CMIP6_Amon.json, MIP_APmonLev.json] unit_conversion: null formula: CLOUD * 100.0 positive: null @@ -126,7 +126,7 @@ - name: cli units: kg kg-1 raw_variables: [CLDICE] - table: CMIP6_Amon.json + table: [CMIP6_Amon.json, MIP_APmonLev.json] unit_conversion: null formula: null positive: null @@ -140,7 +140,7 @@ - name: clivi units: kg m-2 raw_variables: [TGCLDIWP] - table: CMIP6_Amon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: null positive: null @@ -148,7 +148,7 @@ - name: cllcalipso units: "%" raw_variables: [CLDLOW_CAL] - table: MIP_APmon.json + table: [CMIP6_CFmon.json, MIP_APmon.json] unit_conversion: null formula: null positive: null @@ -156,7 +156,7 @@ - name: clmcalipso units: "%" raw_variables: [CLDMED_CAL] - table: MIP_APmon.json + table: [CMIP6_CFmon.json, MIP_APmon.json] unit_conversion: null formula: null positive: null @@ -164,7 +164,7 @@ - name: clt units: "%" raw_variables: [CLDTOT] - table: MIP_APmon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: 1-to-% formula: null positive: null @@ -172,7 +172,7 @@ - name: cltcalipso units: "%" raw_variables: [CLDTOT_CAL] - table: MIP_APmon.json + table: [CMIP6_CFmon.json, MIP_APmon.json] unit_conversion: null formula: null positive: null @@ -180,7 +180,7 @@ - name: cltisccp units: "%" raw_variables: [CLDTOT_ISCCP] - table: MIP_APmon.json + table: [CMIP6_CFmon.json, MIP_APmon.json] unit_conversion: null formula: null positive: null @@ -188,7 +188,7 @@ - name: clw units: kg kg-1 raw_variables: [CLDLIQ] - table: CMIP6_Amon.json + table: [CMIP6_Amon.json, MIP_APmonLev.json] unit_conversion: null formula: null positive: null @@ -202,7 +202,7 @@ - name: clwvi units: kg m-2 raw_variables: [TGCLDCWP] - table: MIP_APmon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: null positive: null @@ -210,7 +210,7 @@ - name: emibc units: kg m-2 s-1 raw_variables: [SFbc_a4, bc_a4_CLXF] - table: MIP_AEmon.json + table: [CMIP6_AERmon.json, MIP_AEmon.json] unit_conversion: null formula: SFbc_a4 + bc_a4_CLXF * 12.011 / 6.02214e+22 positive: null @@ -218,7 +218,7 @@ - name: emiso2 units: kg m-2 s-1 raw_variables: [SFSO2, SO2_CLXF] - table: MIP_AEmon.json + table: [CMIP6_AERmon.json, MIP_AEmon.json] unit_conversion: null formula: SFSO2 + SO2_CLXF * 64.064800 / 6.02214e+22 positive: null @@ -226,16 +226,64 @@ - name: emiso4 units: kg m-2 s-1 raw_variables: [SFso4_a1, SFso4_a2, so4_a1_CLXF, so4_a2_CLXF] - table: MIP_AEmon.json + table: [CMIP6_AERmon.json, MIP_AEmon.json] unit_conversion: null formula: SFso4_a1 + SFso4_a2 + (so4_a1_CLXF + so4_a2_CLXF) * 115.107340 / 6.02214e+22 positive: null levels: null +- name: od550bc + units: "1" + raw_variables: [AODBC] + table: [CMIP6_AERmon.json, MIP_AEmon.json] + unit_conversion: null + formula: null + positive: null + levels: null +- name: od550dust + units: "1" + raw_variables: [AODDUST] + table: [CMIP6_AERmon.json, MIP_AEmon.json] + unit_conversion: null + formula: null + positive: null + levels: null +- name: od550so4 + units: "1" + raw_variables: [AODSO4] + table: [CMIP6_AERmon.json, MIP_AEmon.json] + unit_conversion: null + formula: null + positive: null + levels: null +- name: od550soa + units: "1" + raw_variables: [AODSOA] + table: [CMIP6_AERmon.json, MIP_AEmon.json] + unit_conversion: null + formula: null + positive: null + levels: null +- name: od550ss + units: "1" + raw_variables: [AODSS] + table: [CMIP6_AERmon.json, MIP_AEmon.json] + unit_conversion: null + formula: null + positive: null + levels: null +- name: ptp + units: Pa + raw_variables: [TROP_P] + table: [CMIP6_AERmon.json, MIP_AEmon.json] + unit_conversion: null + formula: null + positive: null + levels: null - name: evspsbl units: kg m-2 s-1 raw_variables: [QFLX] - table: MIP_APmon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: null positive: null @@ -243,7 +291,7 @@ - name: evspsblsoi units: kg m-2 s-1 raw_variables: [QSOIL] - table: MIP_LPmon.json + table: [CMIP6_Lmon.json, MIP_LPmon.json] unit_conversion: null formula: null positive: up @@ -251,7 +299,7 @@ - name: evspsblveg units: kg m-2 s-1 raw_variables: [QVEGE] - table: MIP_LPmon.json + table: [CMIP6_Lmon.json, MIP_LPmon.json] unit_conversion: null formula: null positive: up @@ -259,7 +307,7 @@ - name: fFire units: kg m-2 s-1 raw_variables: [COL_FIRE_CLOSS] - table: MIP_LPmon.json + table: [CMIP6_Lmon.json, MIP_LPmon.json] unit_conversion: g-to-kg formula: null positive: up @@ -267,7 +315,7 @@ - name: fHarvest units: kg m-2 s-1 raw_variables: [WOOD_HARVESTC] - table: MIP_LPmon.json + table: [CMIP6_Lmon.json, MIP_LPmon.json] unit_conversion: g-to-kg formula: null positive: up @@ -275,7 +323,7 @@ - name: gpp units: kg m-2 s-1 raw_variables: [GPP] - table: MIP_LPmon.json + table: [CMIP6_Lmon.json, MIP_LPmon.json] unit_conversion: g-to-kg formula: null positive: down @@ -283,7 +331,7 @@ - name: hfls units: W m-2 raw_variables: [LHFLX] - table: MIP_APmon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: null positive: up @@ -291,7 +339,7 @@ - name: hfss units: W m-2 raw_variables: [SHFLX] - table: MIP_APmon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: null positive: up @@ -299,7 +347,15 @@ - name: hur units: "%" raw_variables: [RELHUM] - table: MIP_APmon.json + table: [CMIP6_Amon.json, MIP_APmon.json] + unit_conversion: null + formula: null + positive: null + levels: { name: plev19, units: Pa, e3sm_axis_name: plev } +- name: hus + units: "1" + raw_variables: [Q] + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: null positive: null @@ -323,17 +379,17 @@ - name: lai units: "1" raw_variables: [LAISHA, LAISUN] - table: MIP_LPmon.json + table: [CMIP6_Lmon.json, MIP_LPmon.json] unit_conversion: null formula: LAISHA + LAISUN positive: null levels: null -- name: mmrbc +name: mmrbc units: kg kg-1 - raw_variables: [bc_a1, bc_a4, bc_c1, bc_c4] - table: CMIP6_AERmon.json + raw_variables: [bc_a1, bc_a3, bc_a4, bc_c1, bc_c3, bc_c4] + table: [CMIP6_AERmon.json, MIP_AEmonLev.json] unit_conversion: null - formula: bc_a1+bc_a4+bc_c1+bc_c4 + formula: bc_a1+bc_a3+bc_a4+bc_c1+bc_c3+bc_c4 positive: null levels: { @@ -345,9 +401,121 @@ - name: mmrbc units: kg kg-1 raw_variables: [Mass_bc] - table: CMIP6_AERmon.json + table: [CMIP6_AERmon.json, MIP_AEmonLev.json] + unit_conversion: null + formula: Mass_bc + positive: null + levels: + { + name: standard_hybrid_sigma, + units: "1", + e3sm_axis_name: lev, + e3sm_axis_bnds: ilev, + } +- name: mmrdust + units: kg kg-1 + raw_variables: [Mass_dst] + table: [CMIP6_AERmon.json, MIP_AEmonLev.json] + unit_conversion: null + formula: Mass_dst + positive: null + levels: + { + name: standard_hybrid_sigma, + units: "1", + e3sm_axis_name: lev, + e3sm_axis_bnds: ilev, + } +- name: mmrdust + units: kg kg-1 + raw_variables: [dst_a1, dst_c1, dst_a3, dst_c3] + table: [CMIP6_AERmon.json, MIP_AEmonLev.json] + unit_conversion: null + formula: dst_a1+dst_c1+dst_a3+dst_c3 + positive: null + levels: + { + name: standard_hybrid_sigma, + units: "1", + e3sm_axis_name: lev, + e3sm_axis_bnds: ilev, + } +- name: mmroa + units: kg kg-1 + raw_variables: [Mass_pom, Mass_soa] + table: [CMIP6_AERmon.json, MIP_AEmonLev.json] + unit_conversion: null + formula: Mass_pom + Mass_soa + positive: null + levels: + { + name: standard_hybrid_sigma, + units: "1", + e3sm_axis_name: lev, + e3sm_axis_bnds: ilev, + } +- name: mmroa + units: kg kg-1 + raw_variables: [pom_a1, pom_c1, pom_a3, pom_c3, pom_a4, pom_c4, soa_a1, soa_c1, soa_a2, soa_c2, soa_a3, soa_c3] + table: [CMIP6_AERmon.json, MIP_AEmonLev.json] + unit_conversion: null + formula: pom_a1+pom_c1+pom_a3+pom_c3+pom_a4+pom_c4+soa_a1+soa_c1+soa_a2+soa_c2+soa_a3+soa_c3 + positive: null + levels: + { + name: standard_hybrid_sigma, + units: "1", + e3sm_axis_name: lev, + e3sm_axis_bnds: ilev, + } +- name: mmrsoa + units: kg kg-1 + raw_variables: [Mass_soa] + table: [CMIP6_AERmon.json, MIP_AEmonLev.json] + unit_conversion: null + formula: Mass_soa + positive: null + levels: + { + name: standard_hybrid_sigma, + units: "1", + e3sm_axis_name: lev, + e3sm_axis_bnds: ilev, + } +- name: mmrsoa + units: kg kg-1 + raw_variables: [soa_a1, soa_c1, soa_a2, soa_c2, soa_a3, soa_c3] + table: [CMIP6_AERmon.json, MIP_AEmonLev.json] unit_conversion: null - formula: bc_a1+bc_a4+bc_c1+bc_c4 + formula: soa_a1+soa_c1+soa_a2+soa_c2+soa_a3+soa_c3 + positive: null + levels: + { + name: standard_hybrid_sigma, + units: "1", + e3sm_axis_name: lev, + e3sm_axis_bnds: ilev, + } +- name: mmrss + units: kg kg-1 + raw_variables: [Mass_ncl] + table: [CMIP6_AERmon.json, MIP_AEmonLev.json] + unit_conversion: null + formula: Mass_ncl + positive: null + levels: + { + name: standard_hybrid_sigma, + units: "1", + e3sm_axis_name: lev, + e3sm_axis_bnds: ilev, + } +- name: mmrss + units: kg kg-1 + raw_variables: [ncl_a1, ncl_c1, ncl_a2, ncl_c2, ncl_a3, ncl_c3] + table: [CMIP6_AERmon.json, MIP_AEmonLev.json] + unit_conversion: null + formula: ncl_a1+ncl_c1+ncl_a2+ncl_c2+ncl_a3+ncl_c3 positive: null levels: { @@ -359,9 +527,9 @@ - name: mmrso4 units: kg kg-1 raw_variables: [Mass_so4] - table: CMIP6_AERmon.json + table: [CMIP6_AERmon.json, MIP_AEmonLev.json] unit_conversion: null - formula: so4_a1+so4_c1+so4_a2+so4_c2+so4_a3+so4_c3 + formula: Mass_so4 * 96.0636 / 115.10734 positive: null levels: { @@ -372,10 +540,10 @@ } - name: mmrso4 units: kg kg-1 - raw_variables: [so4_a1, so4_c1, so4_a2, so4_c2, so4_a3, so4_c3] - table: CMIP6_AERmon.json + raw_variables: [so4_a1, so4_c1, so4_a2, so4_c2, so4_a3, so4_c3, so4_a5, so4_c5] + table: [CMIP6_AERmon.json, MIP_AEmonLev.json] unit_conversion: null - formula: so4_a1+so4_c1+so4_a2+so4_c2+so4_a3+so4_c3 + formula: (so4_a1+so4_c1+so4_a2+so4_c2+so4_a3+so4_c3+so4_a5+so4_c5) * 96.0636 / 115.10734 positive: null levels: { @@ -384,10 +552,23 @@ e3sm_axis_name: lev, e3sm_axis_bnds: ilev, } +- name: mmrso4 + units: kg kg-1 + raw_variables: [so4_a1, so4_c1, so4_a2, so4_c2, so4_a3, so4_c3] + table: [CMIP6_AERmon.json, MIP_AEmonLev.json] + unit_conversion: null + formula: (so4_a1+so4_c1+so4_a2+so4_c2+so4_a3+so4_c3)* 96.0636 / 115.10734 + positive: null + levels: + { + name: standard_hybrid_sigma, + units: "1", + e3sm_axis_name: lev, + e3sm_axis_bnds: ilev, - name: mrfso units: kg m-2 raw_variables: [SOILICE] - table: MIP_LPmon.json + table: [CMIP6_Lmon.json, MIP_LPmon.json] unit_conversion: null formula: verticalSum(SOILICE, capped_at=5000) positive: null @@ -395,7 +576,7 @@ - name: mrro units: kg m-2 s-1 raw_variables: [QRUNOFF] - table: MIP_LPmon.json + table: [CMIP6_Lmon.json, MIP_LPmon.json] unit_conversion: null formula: null positive: null @@ -403,15 +584,14 @@ - name: mrros units: kg m-2 s-1 raw_variables: [QOVER] - table: MIP_LPmon.json - unit_conversion: null + table: [CMIP6_Lmon.json, MIP_LPmon.json] formula: null positive: null levels: null - name: mrso units: kg m-2 raw_variables: [SOILICE, SOILLIQ] - table: MIP_LPmon.json + table: [CMIP6_Lmon.json, MIP_LPmon.json] unit_conversion: null formula: verticalSum(SOILICE + SOILLIQ, capped_at=5000) positive: null @@ -419,7 +599,7 @@ - name: mrsos units: kg m-2 raw_variables: [SOILWATER_10CM] - table: MIP_LPmon.json + table: [CMIP6_Lmon.json, MIP_LPmon.json] unit_conversion: null formula: null positive: null @@ -427,7 +607,7 @@ - name: nbp units: kg m-2 s-1 raw_variables: [NBP] - table: MIP_LPmon.json + table: [CMIP6_Lmon.json, MIP_LPmon.json] unit_conversion: g-to-kg formula: null positive: down @@ -435,7 +615,7 @@ - name: o3 units: mol mol-1 raw_variables: [O3] - table: CMIP6_Amon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: null positive: null @@ -443,7 +623,7 @@ - name: od550aer units: "1" raw_variables: [AODVIS] - table: CMIP6_AERmon.json + table: [CMIP6_AERmon.json, MIP_AEmon.json] unit_conversion: null formula: null positive: null @@ -451,7 +631,7 @@ - name: pctisccp units: Pa raw_variables: [MEANPTOP_ISCCP] - table: CMIP6_CFmon.json + table: [CMIP6_CFmon.json, MIP_APmon.json] unit_conversion: null formula: null positive: null @@ -459,7 +639,7 @@ - name: pfull units: Pa raw_variables: ["hyai", "hybi", "hyam", "hybm", "PS"] - table: CMIP6_Amon.json + table: [CMIP6_Amon.json, MIP_APmonClimLev.json] unit_conversion: null formula: "hyam * p0 + hybm * ps" positive: null @@ -474,7 +654,7 @@ - name: phalf units: Pa raw_variables: ["hyai", "hybi", "hyam", "hybm", "PS"] - table: CMIP6_Amon.json + table: [CMIP6_Amon.json, MIP_APmonClimLev.json] unit_conversion: null formula: "hyai * p0 + hybi * ps" positive: null @@ -505,7 +685,7 @@ - name: prc units: kg m-2 s-1 raw_variables: [PRECC] - table: MIP_APmon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: m/s-to-kg/ms formula: null positive: null @@ -513,7 +693,7 @@ - name: prsn units: kg m-2 s-1 raw_variables: [PRECSC, PRECSL] - table: MIP_APmon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: (PRECSC + PRECSL) * 1000.0 positive: null @@ -521,7 +701,7 @@ - name: prveg units: kg m-2 s-1 raw_variables: [QINTR] - table: MIP_LPmon.json + table: [CMIP6_Lmon.json, MIP_LPmon.json] unit_conversion: null formula: null positive: null @@ -529,7 +709,7 @@ - name: prw units: kg m-2 raw_variables: [TMQ] - table: MIP_APmon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: null positive: null @@ -537,7 +717,7 @@ - name: ps units: Pa raw_variables: [PS] - table: MIP_APmon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: null positive: null @@ -545,7 +725,7 @@ - name: psl units: Pa raw_variables: [PSL] - table: MIP_APmon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: null positive: null @@ -553,7 +733,7 @@ - name: ra units: kg m-2 s-1 raw_variables: [AR] - table: MIP_LPmon.json + table: [CMIP6_Lmon.json, MIP_LPmon.json] unit_conversion: g-to-kg formula: null positive: up @@ -561,7 +741,7 @@ - name: rh units: kg m-2 s-1 raw_variables: [HR] - table: MIP_LPmon.json + table: [CMIP6_Lmon.json, MIP_LPmon.json] unit_conversion: g-to-kg formula: null positive: up @@ -569,7 +749,7 @@ - name: rlds units: W m-2 raw_variables: [FLDS] - table: MIP_APmon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: null positive: down @@ -577,7 +757,7 @@ - name: rldscs units: W m-2 raw_variables: [FLDS, FLNS, FLNSC] - table: MIP_APmon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: FLDS + FLNS - FLNSC positive: down @@ -585,7 +765,7 @@ - name: rlus units: W m-2 raw_variables: [FLDS, FLNS] - table: MIP_APmon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: FLDS + FLNS positive: up @@ -593,7 +773,7 @@ - name: rlut units: W m-2 raw_variables: [FLUT] - table: MIP_APday.json + table: [CMIP6_day.json, MIP_APday.json] unit_conversion: null formula: FSNTOA - FSNT + FLNT positive: up @@ -601,7 +781,7 @@ - name: rlut units: W m-2 raw_variables: [FSNTOA, FSNT, FLNT] - table: MIP_APmon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: FSNTOA - FSNT + FLNT positive: up @@ -609,7 +789,7 @@ - name: rlutcs units: W m-2 raw_variables: [FLUTC] - table: MIP_APmon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: null positive: up @@ -617,7 +797,7 @@ - name: rsds units: W m-2 raw_variables: [FSDS] - table: MIP_APmon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: null positive: down @@ -625,7 +805,7 @@ - name: rsdscs units: W m-2 raw_variables: [FSDSC] - table: MIP_APmon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: null positive: down @@ -633,7 +813,7 @@ - name: rsdt units: W m-2 raw_variables: [SOLIN] - table: MIP_APmon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: null positive: down @@ -641,7 +821,7 @@ - name: rsus units: W m-2 raw_variables: [FSNS, FSDS] - table: MIP_APmon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: FSDS - FSNS positive: up @@ -649,7 +829,7 @@ - name: rsuscs units: W m-2 raw_variables: [FSDSC, FSNSC] - table: MIP_APmon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: FSDSC - FSNSC positive: up @@ -657,7 +837,7 @@ - name: rsut units: W m-2 raw_variables: [SOLIN, FSNTOA] - table: MIP_APmon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: SOLIN - FSNTOA positive: up @@ -665,7 +845,7 @@ - name: rsut units: W m-2 raw_variables: [FSUTOA] - table: MIP_APmon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: null positive: up @@ -673,7 +853,7 @@ - name: rsutcs units: W m-2 raw_variables: [SOLIN, FSNTOAC] - table: MIP_APmon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: SOLIN - FSNTOAC positive: up @@ -681,7 +861,7 @@ - name: rsutcs units: W m-2 raw_variables: [FSUTOAC] - table: MIP_APmon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: null positive: up @@ -689,7 +869,7 @@ - name: rtmt units: W m-2 raw_variables: [FSNT, FLNT] - table: MIP_APmon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: FSNT - FLNT positive: down @@ -697,7 +877,7 @@ - name: sfcWind units: m s-1 raw_variables: [U10] - table: MIP_APmon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: null positive: null @@ -705,7 +885,7 @@ - name: snw units: kg m-2 raw_variables: [H2OSNO] - table: CMIP6_LImon.json + table: [CMIP6_LImon.json, MIP_LImon.json] unit_conversion: null formula: null positive: null @@ -713,7 +893,7 @@ - name: so2 units: mol mol-1 raw_variables: [SO2] - table: CMIP6_AERmon.json + table: [CMIP6_AERmon.json, MIP_AEmonLev.json] unit_conversion: null formula: null positive: null @@ -727,7 +907,7 @@ - name: ta units: K raw_variables: [T] - table: [MIP_APmon.json] + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: null positive: null @@ -751,7 +931,7 @@ - name: tasmax units: K raw_variables: [TREFHTMX] - table: MIP_APday.json + table: [CMIP6_day.json, MIP_APday.json] unit_conversion: null formula: null positive: null @@ -759,7 +939,7 @@ - name: tasmax units: K raw_variables: [TREFMXAV] - table: MIP_APmon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: null positive: null @@ -767,7 +947,7 @@ - name: tasmin units: K raw_variables: [TREFHTMN] - table: MIP_APday.json + table: [CMIP6_day.json, MIP_APday.json] unit_conversion: null formula: null positive: null @@ -775,7 +955,7 @@ - name: tasmin units: K raw_variables: [TREFMNAV] - table: MIP_APmon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: null positive: null @@ -783,7 +963,7 @@ - name: tauu units: Pa raw_variables: [TAUX] - table: MIP_APmon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: "-1" formula: null positive: down @@ -791,7 +971,7 @@ - name: tauv units: Pa raw_variables: [TAUY] - table: MIP_APmon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: "-1" formula: null positive: down @@ -799,7 +979,7 @@ - name: tran units: kg m-2 s-1 raw_variables: [QVEGT, QSOIL] - table: MIP_LPmon.json + table: [CMIP6_Lmon.json, MIP_LPmon.json] unit_conversion: null formula: QSOIL + QVEGT positive: up @@ -807,7 +987,7 @@ - name: ts units: K raw_variables: [TS] - table: MIP_APmon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: null positive: null @@ -815,7 +995,7 @@ - name: tsl units: K raw_variables: [TSOI] - table: MIP_LPmon.json + table: [CMIP6_Lmon.json, MIP_LPmon.json] unit_conversion: null formula: null positive: null @@ -829,7 +1009,7 @@ - name: ua units: m s-1 raw_variables: [U] - table: MIP_APmon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: null positive: null @@ -837,7 +1017,7 @@ - name: va units: m s-1 raw_variables: [V] - table: MIP_APmon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: null positive: null @@ -845,7 +1025,7 @@ - name: wap units: Pa s-1 raw_variables: [OMEGA] - table: MIP_APmon.json + table:[CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: null positive: null @@ -853,7 +1033,7 @@ - name: zg units: m raw_variables: [Z3] - table: MIP_APmon.json + table: [CMIP6_Amon.json, MIP_APmon.json] unit_conversion: null formula: null positive: null From 0a845bb2c8731e9e96b37e611711054f940adfaf Mon Sep 17 00:00:00 2001 From: Oluwayemi Garuba <83234970+ogaruba@users.noreply.github.com> Date: Wed, 7 Jan 2026 13:25:30 -0500 Subject: [PATCH 3/9] Update handlers.yaml --- e3sm_to_cmip/cmor_handlers/handlers.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e3sm_to_cmip/cmor_handlers/handlers.yaml b/e3sm_to_cmip/cmor_handlers/handlers.yaml index 812100cd..74651db3 100644 --- a/e3sm_to_cmip/cmor_handlers/handlers.yaml +++ b/e3sm_to_cmip/cmor_handlers/handlers.yaml @@ -384,7 +384,7 @@ formula: LAISHA + LAISUN positive: null levels: null -name: mmrbc +- name: mmrbc units: kg kg-1 raw_variables: [bc_a1, bc_a3, bc_a4, bc_c1, bc_c3, bc_c4] table: [CMIP6_AERmon.json, MIP_AEmonLev.json] From 5d500a295d56952a9649a857c07d26c64e225d39 Mon Sep 17 00:00:00 2001 From: Oluwayemi Garuba <83234970+ogaruba@users.noreply.github.com> Date: Wed, 7 Jan 2026 13:35:07 -0500 Subject: [PATCH 4/9] Update handlers.yaml --- e3sm_to_cmip/cmor_handlers/handlers.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/e3sm_to_cmip/cmor_handlers/handlers.yaml b/e3sm_to_cmip/cmor_handlers/handlers.yaml index 74651db3..ba382249 100644 --- a/e3sm_to_cmip/cmor_handlers/handlers.yaml +++ b/e3sm_to_cmip/cmor_handlers/handlers.yaml @@ -565,6 +565,7 @@ units: "1", e3sm_axis_name: lev, e3sm_axis_bnds: ilev, + } - name: mrfso units: kg m-2 raw_variables: [SOILICE] @@ -585,6 +586,7 @@ units: kg m-2 s-1 raw_variables: [QOVER] table: [CMIP6_Lmon.json, MIP_LPmon.json] + unit_conversion: null formula: null positive: null levels: null From 69b50a0b862c14e5b8c944aed62e7c742ae3c80e Mon Sep 17 00:00:00 2001 From: Oluwayemi Garuba <83234970+ogaruba@users.noreply.github.com> Date: Wed, 14 Jan 2026 12:38:01 -0500 Subject: [PATCH 5/9] Update conda-env/ci.yml Co-authored-by: Tom Vo --- conda-env/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conda-env/ci.yml b/conda-env/ci.yml index a71235fd..ba95495b 100644 --- a/conda-env/ci.yml +++ b/conda-env/ci.yml @@ -7,7 +7,7 @@ dependencies: # ==================== - python >=3.11,<3.14 - setuptools - - cmor =3.9.0 + - cmor >=3.9.0 - dask - nco >=5.1.4 - netcdf4 From 8fcb363bf5150230cf4403a7d9df54f0ac84ef28 Mon Sep 17 00:00:00 2001 From: Oluwayemi Garuba <83234970+ogaruba@users.noreply.github.com> Date: Wed, 14 Jan 2026 12:38:11 -0500 Subject: [PATCH 6/9] Update conda-env/dev.yml Co-authored-by: Tom Vo --- conda-env/dev.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conda-env/dev.yml b/conda-env/dev.yml index 45344a70..e964361f 100644 --- a/conda-env/dev.yml +++ b/conda-env/dev.yml @@ -8,7 +8,7 @@ dependencies: # ==================== - python >=3.11,<3.14 - setuptools - - cmor =3.9.0 + - cmor >=3.9.0 - dask - nco >=5.1.4 - netcdf4 From df910460ddd3657eeacd0756db34bd1785c6c7d7 Mon Sep 17 00:00:00 2001 From: Oluwayemi Garuba <83234970+ogaruba@users.noreply.github.com> Date: Wed, 14 Jan 2026 12:38:43 -0500 Subject: [PATCH 7/9] Update e3sm_to_cmip/cmor_handlers/utils.py Co-authored-by: Tom Vo --- e3sm_to_cmip/cmor_handlers/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e3sm_to_cmip/cmor_handlers/utils.py b/e3sm_to_cmip/cmor_handlers/utils.py index 8289e3dc..4930b8d2 100644 --- a/e3sm_to_cmip/cmor_handlers/utils.py +++ b/e3sm_to_cmip/cmor_handlers/utils.py @@ -72,7 +72,7 @@ def load_all_handlers( continue for var_handlers in var_handler: - if type(var_handlers["table"]) is list: + if isinstance(var_handlers["table"], list): if mip_era == "cmip6" and len(var_handlers["table"]) > 1: var_handlers["table"] = str(var_handlers["table"][0]) From 4543bd231c8b140b277fd0dab7c8e9d368d653fd Mon Sep 17 00:00:00 2001 From: Oluwayemi Garuba <83234970+ogaruba@users.noreply.github.com> Date: Wed, 14 Jan 2026 12:39:33 -0500 Subject: [PATCH 8/9] Update e3sm_to_cmip/cmor_handlers/handler.py Co-authored-by: Tom Vo --- e3sm_to_cmip/cmor_handlers/handler.py | 1 - 1 file changed, 1 deletion(-) diff --git a/e3sm_to_cmip/cmor_handlers/handler.py b/e3sm_to_cmip/cmor_handlers/handler.py index 31892c23..f7af6fac 100644 --- a/e3sm_to_cmip/cmor_handlers/handler.py +++ b/e3sm_to_cmip/cmor_handlers/handler.py @@ -343,7 +343,6 @@ def _get_var_time_dim(self, table_path: str) -> str | None: try: axis_info = table_info["variable_entry"][self.name]["dimensions"].split(" ") - except AttributeError: axis_info = table_info["variable_entry"][self.name]["dimensions"][:] From 3bd22e412d8ab6151503cdb28210d17df1928a27 Mon Sep 17 00:00:00 2001 From: Oluwayemi Garuba <83234970+ogaruba@users.noreply.github.com> Date: Wed, 14 Jan 2026 12:41:03 -0500 Subject: [PATCH 9/9] Update e3sm_to_cmip/cmor_handlers/utils.py Co-authored-by: Tom Vo --- e3sm_to_cmip/cmor_handlers/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e3sm_to_cmip/cmor_handlers/utils.py b/e3sm_to_cmip/cmor_handlers/utils.py index 4930b8d2..677b36d4 100644 --- a/e3sm_to_cmip/cmor_handlers/utils.py +++ b/e3sm_to_cmip/cmor_handlers/utils.py @@ -177,7 +177,7 @@ def derive_handlers( realm : str The realm. mip_era : str - CMIP era + The CMIP era (cmip6 or cmip6plus). Returns -------