Skip to content
Open
35 changes: 35 additions & 0 deletions doc/reference/facets.rst
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,41 @@ CMIP6
| ``short_name`` | ``variable_id`` |
+----------------------+---------------------------+

CMIP6Plus
---------

`Official CMIP6Plus information <https://wcrp-cmip.org/cmip-phases/cmip6plus/>`__.

The facet mapping is the same as for CMIP6. Note that CMIP6Plus uses updated
MIP table names (e.g. ``APmon`` instead of ``Amon``); see
`mip-cmor-tables <https://github.com/PCMDI/mip-cmor-tables>`__.

+----------------------+---------------------------+
| ESMValCore facet | ESGF facet |
+======================+===========================+
| ``activity`` | ``activity_id`` |
+----------------------+---------------------------+
| ``dataset`` | ``source_id`` |
+----------------------+---------------------------+
| ``ensemble`` | ``member_id`` |
+----------------------+---------------------------+
| ``exp`` | ``experiment_id`` |
+----------------------+---------------------------+
| ``frequency`` | ``frequency`` |
+----------------------+---------------------------+
| ``grid`` | ``grid_label`` |
+----------------------+---------------------------+
| ``institute`` | ``institution_id`` |
+----------------------+---------------------------+
| ``mip`` | ``table_id`` |
+----------------------+---------------------------+
| ``realm`` | ``realm`` |
+----------------------+---------------------------+
| ``project`` | ``project`` / ``mip_era`` |
+----------------------+---------------------------+
| ``short_name`` | ``variable_id`` |
+----------------------+---------------------------+

CMIP5
-----

Expand Down
15 changes: 10 additions & 5 deletions esmvalcore/cmor/table.py
Original file line number Diff line number Diff line change
Expand Up @@ -778,7 +778,10 @@ def _load_table(self, json_file):
self.tables[table_name] = table
table = self.tables[table_name]

generic_levels = header.get("generic_levels", "").split()
generic_levels = header.get("generic_levels", "")
if isinstance(generic_levels, str):
generic_levels = generic_levels.split()

self.var_to_freq[table.name] = {}

for var_name, var_data in raw_data["variable_entry"].items():
Expand All @@ -795,7 +798,11 @@ def _load_table(self, json_file):

def _assign_dimensions(self, var, generic_levels):
for dimension in var.dimensions:
if dimension in generic_levels:
is_generic = dimension in generic_levels or any(
self.coords[name].generic_lev_name == dimension
for name in self.coords
)
if is_generic:
coord = CoordinateInfo(dimension)
coord.generic_level = True
for name in self.coords:
Expand Down Expand Up @@ -1094,9 +1101,7 @@ def read_json(self, json_data: dict, default_freq: str) -> None:
self.valid_min = self._read_json_variable("valid_min")
self.valid_max = self._read_json_variable("valid_max")
self.positive = self._read_json_variable("positive")
self.modeling_realm = self._read_json_variable(
"modeling_realm",
).split()
self.modeling_realm = self._read_json_list_variable("modeling_realm")
self.frequency = self._read_json_variable("frequency", default_freq)

# "dimensions" is a list of str in CMIP7 and a space separated str in CMIP6 CMOR tables.
Expand Down
Loading