From 04d27096df0630c74690714e2b0c307d00e934d5 Mon Sep 17 00:00:00 2001 From: Jared Lewis Date: Sun, 27 Jul 2025 21:40:09 +1000 Subject: [PATCH 1/4] feat: Lazy load additional information --- .../src/climate_ref/data_catalog.py | 51 +++++++++++++++++++ .../src/climate_ref/datasets/base.py | 1 - .../src/climate_ref/datasets/cmip6.py | 43 +++++++++++++++- .../src/climate_ref/datasets/mixins.py | 46 +++++++++++++++++ .../climate-ref/src/climate_ref/solver.py | 44 ++++++++++++---- .../climate-ref/tests/unit/test_solver.py | 4 +- 6 files changed, 174 insertions(+), 15 deletions(-) create mode 100644 packages/climate-ref/src/climate_ref/data_catalog.py create mode 100644 packages/climate-ref/src/climate_ref/datasets/mixins.py diff --git a/packages/climate-ref/src/climate_ref/data_catalog.py b/packages/climate-ref/src/climate_ref/data_catalog.py new file mode 100644 index 000000000..8f0b7498b --- /dev/null +++ b/packages/climate-ref/src/climate_ref/data_catalog.py @@ -0,0 +1,51 @@ +import pandas as pd +from attrs import define +from loguru import logger + +from climate_ref.database import Database +from climate_ref.datasets.base import DatasetAdapter +from climate_ref.datasets.mixins import FinaliseableDatasetAdapterMixin + + +@define +class DataCatalog: + """ + Data catalog for managing datasets in the database. + + This class provides an abstraction layer for interacting with a database-backed data catalog. + """ + + database: Database + adapter: DatasetAdapter + _df: pd.DataFrame | None = None + + def finalise(self, subset: pd.DataFrame) -> pd.DataFrame: + """ + Finalise the datasets in the provided subset. + + This is a no-op if the adapter does not support finalisation. + """ + if not isinstance(self.adapter, FinaliseableDatasetAdapterMixin): + return subset + + if "finalised" in subset.columns and not subset["finalised"].all(): + subset_to_finalise = subset[~subset["finalised"]].copy() + logger.info(f"Finalising {len(subset_to_finalise)} datasets") + finalised_datasets = self.adapter.finalise_datasets(subset_to_finalise) + subset.update(finalised_datasets) + + # Update the database with the finalised datasets + self.adapter.update_catalog(self.database, finalised_datasets) + + # if self._df: + # self._df = pd.concat([subset]) + return subset + + def to_frame(self) -> pd.DataFrame: + """ + Load the data catalog into a DataFrame. + """ + if self._df is None: + logger.info("Loading data catalog from database") + self._df = self.adapter.load_catalog(self.database) + return self._df diff --git a/packages/climate-ref/src/climate_ref/datasets/base.py b/packages/climate-ref/src/climate_ref/datasets/base.py index cb206563b..3f18a49b9 100644 --- a/packages/climate-ref/src/climate_ref/datasets/base.py +++ b/packages/climate-ref/src/climate_ref/datasets/base.py @@ -237,7 +237,6 @@ def _get_dataset_files(self, db: Database, limit: int | None = None) -> pd.DataF { **{k: getattr(file, k) for k in self.file_specific_metadata}, **{k: getattr(file.dataset, k) for k in self.dataset_specific_metadata}, - "finalised": file.dataset.finalised, } for file in result ], diff --git a/packages/climate-ref/src/climate_ref/datasets/cmip6.py b/packages/climate-ref/src/climate_ref/datasets/cmip6.py index 84b5f485a..fcf9362b1 100644 --- a/packages/climate-ref/src/climate_ref/datasets/cmip6.py +++ b/packages/climate-ref/src/climate_ref/datasets/cmip6.py @@ -12,6 +12,7 @@ from climate_ref.config import Config from climate_ref.datasets.base import DatasetAdapter, DatasetParsingFunction from climate_ref.datasets.cmip6_parsers import parse_cmip6_complete, parse_cmip6_drs +from climate_ref.datasets.mixins import FinaliseableDatasetAdapterMixin from climate_ref.models.dataset import CMIP6Dataset @@ -71,7 +72,7 @@ def _clean_branch_time(branch_time: pd.Series[str]) -> pd.Series[float]: return pd.to_numeric(branch_time.astype(str).str.replace("D", ""), errors="coerce") -class CMIP6DatasetAdapter(DatasetAdapter): +class CMIP6DatasetAdapter(FinaliseableDatasetAdapterMixin, DatasetAdapter): """ Adapter for CMIP6 datasets """ @@ -213,3 +214,43 @@ def find_local_datasets(self, file_or_directory: Path) -> pd.DataFrame: datasets = _apply_fixes(datasets) return datasets + + def finalise_datasets(self, datasets: pd.DataFrame) -> pd.DataFrame: + """ + Finalise a subset of datasets by applying the complete parser + + This is used to lazily parse the datasets after they have been filtered. + + Parameters + ---------- + datasets + DataFrame of datasets to finalise + + Returns + ------- + : + DataFrame of finalised datasets + """ + if "path" not in datasets.columns: + raise ValueError("The 'path' column is required to finalise the datasets") + + finalised_rows = [] + for _, row in datasets.iterrows(): + finalised_rows.append(parse_cmip6_complete(row["path"])) + + finalised_df = pd.DataFrame(finalised_rows) + + # We need to preserve the original index to be able to update the original dataframe + finalised_df.index = datasets.index + + # Convert the start_time and end_time columns to datetime objects + finalised_df["start_time"] = _parse_datetime(finalised_df["start_time"]) + finalised_df["end_time"] = _parse_datetime(finalised_df["end_time"]) + + # Apply the same fixes as in find_local_datasets + finalised_df = _apply_fixes(finalised_df) + + # Update the original dataframe with the new metadata + datasets.update(finalised_df) + + return datasets diff --git a/packages/climate-ref/src/climate_ref/datasets/mixins.py b/packages/climate-ref/src/climate_ref/datasets/mixins.py new file mode 100644 index 000000000..930bbd7f8 --- /dev/null +++ b/packages/climate-ref/src/climate_ref/datasets/mixins.py @@ -0,0 +1,46 @@ +import pandas as pd + +from climate_ref.database import Database +from climate_ref.models.dataset import Dataset, DatasetFile + + +class FinaliseableDatasetAdapterMixin: + """ + Mixin for dataset adapters that support lazy finalisation. + """ + + dataset_cls: type[Dataset] + slug_column: str + + def finalise_datasets(self, datasets: pd.DataFrame) -> pd.DataFrame: + """ + Finalise a subset of datasets by applying the complete parser. + """ + raise NotImplementedError + + def update_catalog(self, db: Database, datasets: pd.DataFrame) -> None: + """ + Update the data catalog in the database. + """ + with db.session.begin(): + Dataset = self.dataset_cls + + # Update dataset-specific metadata + unique_slugs = datasets[self.slug_column].unique() + model_columns = Dataset.__table__.columns.keys() + for slug in unique_slugs: + first_row = datasets[datasets[self.slug_column] == slug].iloc[0] + update_data = first_row.to_dict() + update_data_filtered = { + k: v for k, v in update_data.items() if k in model_columns and pd.notna(v) + } + db.session.query(Dataset).filter(Dataset.slug == slug).update(update_data_filtered) + + # Update file-specific metadata + for _, row in datasets.iterrows(): + path = row["path"] + update_data = { + "start_time": row["start_time"], + "end_time": row["end_time"], + } + db.session.query(DatasetFile).filter(DatasetFile.path == path).update(update_data) diff --git a/packages/climate-ref/src/climate_ref/solver.py b/packages/climate-ref/src/climate_ref/solver.py index 9f5f50b44..cbcae0947 100644 --- a/packages/climate-ref/src/climate_ref/solver.py +++ b/packages/climate-ref/src/climate_ref/solver.py @@ -14,6 +14,7 @@ from loguru import logger from climate_ref.config import Config +from climate_ref.data_catalog import DataCatalog from climate_ref.database import Database from climate_ref.datasets import get_dataset_adapter from climate_ref.datasets.cmip6 import CMIP6DatasetAdapter @@ -111,16 +112,26 @@ def build_execution_definition(self, output_root: pathlib.Path) -> ExecutionDefi def extract_covered_datasets( - data_catalog: pd.DataFrame, requirement: DataRequirement + data_catalog: pd.DataFrame | DataCatalog, requirement: DataRequirement ) -> dict[Selector, pd.DataFrame]: """ Determine the different diagnostic executions that should be performed with the current data catalog """ - if len(data_catalog) == 0: + if isinstance(data_catalog, DataCatalog): + data_catalog_ds = data_catalog.to_frame() + else: + data_catalog_ds = data_catalog + + if len(data_catalog_ds) == 0: logger.error(f"No datasets found in the data catalog: {requirement.source_type.value}") return {} - subset = requirement.apply_filters(data_catalog) + # Apply the filters directly to the DataFrame + subset = requirement.apply_filters(data_catalog_ds) + + if isinstance(data_catalog, DataCatalog): + # If we have a DataCatalog, we need to finalise the datasets + subset = data_catalog.finalise(subset) if len(subset) == 0: logger.debug(f"No datasets found for requirement {requirement}") @@ -140,7 +151,7 @@ def extract_covered_datasets( group_keys: Selector = () else: group_keys = tuple(zip(requirement.group_by, name)) - constrained_group = _process_group_constraints(data_catalog, group, requirement) + constrained_group = _process_group_constraints(data_catalog_ds, group, requirement) if constrained_group is not None: results[group_keys] = constrained_group @@ -161,7 +172,9 @@ def _process_group_constraints( def solve_executions( - data_catalog: dict[SourceDatasetType, pd.DataFrame], diagnostic: Diagnostic, provider: DiagnosticProvider + data_catalog: dict[SourceDatasetType, pd.DataFrame | DataCatalog], + diagnostic: Diagnostic, + provider: DiagnosticProvider, ) -> typing.Generator["DiagnosticExecution", None, None]: """ Calculate the diagnostic executions that need to be performed for a given diagnostic @@ -200,14 +213,17 @@ def solve_executions( if not isinstance(requirement_collection, Sequence): raise TypeError(f"Expected a sequence of DataRequirement, got {type(requirement_collection)}") yield from _solve_from_data_requirements( - data_catalog, diagnostic, requirement_collection, provider + data_catalog, + diagnostic, + requirement_collection, + provider, ) else: raise TypeError(f"Expected a DataRequirement, got {type(first_item)}") def _solve_from_data_requirements( - data_catalog: dict[SourceDatasetType, pd.DataFrame], + data_catalog: dict[SourceDatasetType, pd.DataFrame | DataCatalog], diagnostic: Diagnostic, data_requirements: Sequence[DataRequirement], provider: DiagnosticProvider, @@ -303,7 +319,7 @@ class ExecutionSolver: """ provider_registry: ProviderRegistry - data_catalog: dict[SourceDatasetType, pd.DataFrame] + data_catalog: dict[SourceDatasetType, pd.DataFrame | DataCatalog] @staticmethod def build_from_db(config: Config, db: Database) -> "ExecutionSolver": @@ -312,6 +328,8 @@ def build_from_db(config: Config, db: Database) -> "ExecutionSolver": Parameters ---------- + config + Configuration to use for the solver, if None, the default configuration is used db Database instance @@ -320,12 +338,16 @@ def build_from_db(config: Config, db: Database) -> "ExecutionSolver": : A new ExecutionSolver instance """ + dataset_adapters = { + SourceDatasetType.CMIP6: CMIP6DatasetAdapter(config=config), + SourceDatasetType.obs4MIPs: Obs4MIPsDatasetAdapter(), + SourceDatasetType.PMPClimatology: PMPClimatologyDatasetAdapter(), + } return ExecutionSolver( provider_registry=ProviderRegistry.build_from_config(config, db), data_catalog={ - SourceDatasetType.CMIP6: CMIP6DatasetAdapter().load_catalog(db), - SourceDatasetType.obs4MIPs: Obs4MIPsDatasetAdapter().load_catalog(db), - SourceDatasetType.PMPClimatology: PMPClimatologyDatasetAdapter().load_catalog(db), + source_type: DataCatalog(database=db, adapter=adapter) + for source_type, adapter in dataset_adapters.items() }, ) diff --git a/packages/climate-ref/tests/unit/test_solver.py b/packages/climate-ref/tests/unit/test_solver.py index 6551f83dd..611549118 100644 --- a/packages/climate-ref/tests/unit/test_solver.py +++ b/packages/climate-ref/tests/unit/test_solver.py @@ -7,6 +7,7 @@ from climate_ref_example import provider as example_provider from climate_ref.config import ExecutorConfig +from climate_ref.data_catalog import DataCatalog from climate_ref.models import Execution from climate_ref.provider_registry import ProviderRegistry, _register_provider from climate_ref.solver import ( @@ -75,8 +76,7 @@ def test_solver_build_from_db(self, solver): assert isinstance(solver, ExecutionSolver) assert isinstance(solver.provider_registry, ProviderRegistry) assert SourceDatasetType.CMIP6 in solver.data_catalog - assert isinstance(solver.data_catalog[SourceDatasetType.CMIP6], pd.DataFrame) - assert len(solver.data_catalog[SourceDatasetType.CMIP6]) + assert isinstance(solver.data_catalog[SourceDatasetType.CMIP6], DataCatalog) @pytest.mark.parametrize( From bbf0bc860f46929ffc2a4ea8c9002971c7bdd243 Mon Sep 17 00:00:00 2001 From: Jared Lewis Date: Mon, 28 Jul 2025 16:16:23 +1000 Subject: [PATCH 2/4] chore: reuse register dataset --- conftest.py | 9 ++ packages/climate-ref/conftest.py | 4 +- .../src/climate_ref/cli/datasets.py | 2 +- .../src/climate_ref/data_catalog.py | 21 ++++- .../climate-ref/src/climate_ref/database.py | 37 ++++++++ .../src/climate_ref/datasets/base.py | 37 ++++---- .../src/climate_ref/datasets/cmip6.py | 84 +++++++++---------- .../src/climate_ref/datasets/mixins.py | 30 +------ .../src/climate_ref/models/dataset.py | 1 + .../src/climate_ref/provider_registry.py | 8 +- .../climate_ref/tests/test_data_catalog.py | 41 +++++++++ .../tests/unit/datasets/test_cmip6.py | 6 +- tests/integration/test_postgres.py | 2 +- 13 files changed, 176 insertions(+), 106 deletions(-) create mode 100644 packages/climate-ref/src/climate_ref/tests/test_data_catalog.py diff --git a/conftest.py b/conftest.py index 5bedd685b..bf9bbc0b7 100644 --- a/conftest.py +++ b/conftest.py @@ -118,6 +118,15 @@ def cmip6_data_catalog(sample_data_dir) -> pd.DataFrame: return adapter.find_local_datasets(sample_data_dir / "CMIP6") +@pytest.fixture(scope="session") +def cmip6_data_catalog_drs(sample_data_dir) -> pd.DataFrame: + config = Config.default() + config.cmip6_parser = "drs" + + adapter = CMIP6DatasetAdapter(config=config) + return adapter.find_local_datasets(sample_data_dir / "CMIP6") + + @pytest.fixture(scope="session") def obs4mips_data_catalog(sample_data_dir) -> pd.DataFrame: adapter = Obs4MIPsDatasetAdapter() diff --git a/packages/climate-ref/conftest.py b/packages/climate-ref/conftest.py index 4e5b8fa03..cc8df8079 100644 --- a/packages/climate-ref/conftest.py +++ b/packages/climate-ref/conftest.py @@ -66,13 +66,13 @@ def db_seeded_template(tmp_path_session, cmip6_data_catalog, obs4mips_data_catal adapter = CMIP6DatasetAdapter() with database.session.begin(): for instance_id, data_catalog_dataset in cmip6_data_catalog.groupby(adapter.slug_column): - adapter.register_dataset(config, database, data_catalog_dataset) + adapter.register_dataset(database, data_catalog_dataset) # Seed the obs4MIPs sample datasets adapter_obs = Obs4MIPsDatasetAdapter() with database.session.begin(): for instance_id, data_catalog_dataset in obs4mips_data_catalog.groupby(adapter_obs.slug_column): - adapter_obs.register_dataset(config, database, data_catalog_dataset) + adapter_obs.register_dataset(database, data_catalog_dataset) with database.session.begin(): _register_provider(database, example_provider) diff --git a/packages/climate-ref/src/climate_ref/cli/datasets.py b/packages/climate-ref/src/climate_ref/cli/datasets.py index 99116ad31..918a83022 100644 --- a/packages/climate-ref/src/climate_ref/cli/datasets.py +++ b/packages/climate-ref/src/climate_ref/cli/datasets.py @@ -156,7 +156,7 @@ def ingest( # noqa: PLR0913 logger.info(f"Would save dataset {instance_id} to the database") continue else: - adapter.register_dataset(config, db, data_catalog_dataset) + adapter.register_dataset(db, data_catalog_dataset) if solve: solve_required_executions( diff --git a/packages/climate-ref/src/climate_ref/data_catalog.py b/packages/climate-ref/src/climate_ref/data_catalog.py index 8f0b7498b..df9281dc0 100644 --- a/packages/climate-ref/src/climate_ref/data_catalog.py +++ b/packages/climate-ref/src/climate_ref/data_catalog.py @@ -32,13 +32,26 @@ def finalise(self, subset: pd.DataFrame) -> pd.DataFrame: subset_to_finalise = subset[~subset["finalised"]].copy() logger.info(f"Finalising {len(subset_to_finalise)} datasets") finalised_datasets = self.adapter.finalise_datasets(subset_to_finalise) - subset.update(finalised_datasets) + + if len(finalised_datasets) < len(subset_to_finalise): + logger.warning( + f"Finalised {len(finalised_datasets)} datasets, but expected {len(subset_to_finalise)}. " + "Some datasets may not have been finalised." + ) + + # Merge the finalised datasets back into the original subset/data catalog + subset.update(finalised_datasets, overwrite=True) + subset = subset.infer_objects() # Update the database with the finalised datasets - self.adapter.update_catalog(self.database, finalised_datasets) + for instance_id, data_catalog_dataset in finalised_datasets.groupby(self.adapter.slug_column): + logger.debug(f"Processing dataset {instance_id}") + with self.database.session.begin(): + self.adapter.register_dataset(self.database, data_catalog_dataset) + if self._df is not None: + self._df.update(subset_to_finalise, overwrite=True) + self._df = self._df.infer_objects() - # if self._df: - # self._df = pd.concat([subset]) return subset def to_frame(self) -> pd.DataFrame: diff --git a/packages/climate-ref/src/climate_ref/database.py b/packages/climate-ref/src/climate_ref/database.py index f1b567e9c..f6ee46874 100644 --- a/packages/climate-ref/src/climate_ref/database.py +++ b/packages/climate-ref/src/climate_ref/database.py @@ -268,3 +268,40 @@ def get_or_create( instance = model(**params) self.session.add(instance) return instance, True + + def create_or_update( + self, model: type[Table], values: dict[str, Any] | None = None, **kwargs: Any + ) -> tuple[Table, bool]: + """ + Create or update an instance of a model + + This doesn't commit the transaction, + so you will need to call `session.commit()` after this method + or use a transaction context manager. + + Parameters + ---------- + model + The model to create or update + values + Value to set on the instance when creating or updating it + kwargs + The filter parameters to use when querying for an instance + + Returns + ------- + : + A tuple containing the instance and a boolean indicating if the instance was created + """ + instance = self.session.query(model).filter_by(**kwargs).first() + if instance and values: + for key, value in values.items(): + setattr(instance, key, value) + created = False + else: + params = {**kwargs, **(values or {})} + instance = model(**params) + self.session.add(instance) + created = True + + return instance, created diff --git a/packages/climate-ref/src/climate_ref/datasets/base.py b/packages/climate-ref/src/climate_ref/datasets/base.py index 3f18a49b9..bb5a42405 100644 --- a/packages/climate-ref/src/climate_ref/datasets/base.py +++ b/packages/climate-ref/src/climate_ref/datasets/base.py @@ -1,11 +1,10 @@ from pathlib import Path -from typing import Any, Protocol, cast +from typing import Any, Protocol, cast, runtime_checkable import pandas as pd from loguru import logger from sqlalchemy.orm import joinedload -from climate_ref.config import Config from climate_ref.database import Database from climate_ref.datasets.utils import validate_path from climate_ref.models.dataset import Dataset, DatasetFile @@ -60,6 +59,7 @@ def __call__(self, file: str, **kwargs: Any) -> dict[str, Any]: ... +@runtime_checkable class DatasetAdapter(Protocol): """ An adapter to provide a common interface for different dataset types @@ -169,16 +169,15 @@ def validate_data_catalog(self, data_catalog: pd.DataFrame, skip_invalid: bool = return data_catalog - def register_dataset( - self, config: Config, db: Database, data_catalog_dataset: pd.DataFrame - ) -> Dataset | None: + def register_dataset(self, db: Database, data_catalog_dataset: pd.DataFrame) -> Dataset | None: """ Register a dataset in the database using the data catalog + If an existing dataset with the same slug already exists in the database, + this will update the dataset with the new metadata and files. + Parameters ---------- - config - Configuration object db Database instance data_catalog_dataset @@ -198,21 +197,23 @@ def register_dataset( slug = unique_slugs[0] dataset_metadata = data_catalog_dataset[list(self.dataset_specific_metadata)].iloc[0].to_dict() - dataset, created = db.get_or_create(DatasetModel, defaults=dataset_metadata, slug=slug) - if not created: - logger.warning(f"{dataset} already exists in the database. Skipping") - return None + dataset, created = db.create_or_update(DatasetModel, values=dataset_metadata, slug=slug) db.session.flush() + + if not created: + # If the dataset already exists, then we are updating it + # We need to check if the dataset type matches + logger.info(f"Updating existing dataset {slug}") for dataset_file in data_catalog_dataset.to_dict(orient="records"): path = validate_path(dataset_file.pop("path")) - db.session.add( - DatasetFile( - path=str(path), - dataset_id=dataset.id, - start_time=dataset_file.pop("start_time"), - end_time=dataset_file.pop("end_time"), - ) + db.create_or_update( + DatasetFile, + values={ + "dataset_id": dataset.id, + **{k: dataset_file[k] for k in self.file_specific_metadata if k in dataset_file}, + }, + path=str(path), ) return dataset diff --git a/packages/climate-ref/src/climate_ref/datasets/cmip6.py b/packages/climate-ref/src/climate_ref/datasets/cmip6.py index fcf9362b1..4268a77bc 100644 --- a/packages/climate-ref/src/climate_ref/datasets/cmip6.py +++ b/packages/climate-ref/src/climate_ref/datasets/cmip6.py @@ -63,6 +63,10 @@ def _fix_parent_variant_label(group: pd.DataFrame) -> pd.DataFrame: if "branch_time_in_parent" in data_catalog: data_catalog["branch_time_in_parent"] = _clean_branch_time(data_catalog["branch_time_in_parent"]) + if "init_year" in data_catalog: + # Convert init_year to numeric, coercing errors to NaN + data_catalog["init_year"] = pd.to_numeric(data_catalog["init_year"], errors="coerce") + return data_catalog @@ -156,6 +160,32 @@ def get_parsing_function(self) -> DatasetParsingFunction: logger.info(f"Using DRS CMIP6 parser (config value: {parser_type})") return parse_cmip6_drs + def _clean_dataframe(self, datasets: pd.DataFrame) -> pd.DataFrame: + # Convert the start_time and end_time columns to datetime objects + # We don't know the calendar used in the dataset (TODO: Check what ecgtools does) + datasets["start_time"] = _parse_datetime(datasets["start_time"]) + datasets["end_time"] = _parse_datetime(datasets["end_time"]) + + drs_items = [ + *self.dataset_id_metadata, + self.version_metadata, + ] + datasets["instance_id"] = datasets.apply( + lambda row: "CMIP6." + ".".join([row[item] for item in drs_items]), axis=1 + ) + + # Add in any missing metadata columns + missing_columns = set(self.dataset_specific_metadata + self.file_specific_metadata) - set( + datasets.columns + ) + if missing_columns: + for column in missing_columns: + datasets[column] = pd.NA + + # Temporary fix for some datasets + # TODO: Replace with a standalone package that contains metadata fixes for CMIP6 datasets + return _apply_fixes(datasets) + def find_local_datasets(self, file_or_directory: Path) -> pd.DataFrame: """ Generate a data catalog from the specified file or directory @@ -186,34 +216,7 @@ def find_local_datasets(self, file_or_directory: Path) -> pd.DataFrame: joblib_parallel_kwargs={"n_jobs": self.n_jobs}, ).build(parsing_func=parsing_function) - datasets: pd.DataFrame = builder.df.drop(["init_year"], axis=1) - - # Convert the start_time and end_time columns to datetime objects - # We don't know the calendar used in the dataset (TODO: Check what ecgtools does) - datasets["start_time"] = _parse_datetime(datasets["start_time"]) - datasets["end_time"] = _parse_datetime(datasets["end_time"]) - - drs_items = [ - *self.dataset_id_metadata, - self.version_metadata, - ] - datasets["instance_id"] = datasets.apply( - lambda row: "CMIP6." + ".".join([row[item] for item in drs_items]), axis=1 - ) - - # Add in any missing metadata columns - missing_columns = set(self.dataset_specific_metadata + self.file_specific_metadata) - set( - datasets.columns - ) - if missing_columns: - for column in missing_columns: - datasets[column] = pd.NA - - # Temporary fix for some datasets - # TODO: Replace with a standalone package that contains metadata fixes for CMIP6 datasets - datasets = _apply_fixes(datasets) - - return datasets + return self._clean_dataframe(builder.df) def finalise_datasets(self, datasets: pd.DataFrame) -> pd.DataFrame: """ @@ -235,22 +238,15 @@ def finalise_datasets(self, datasets: pd.DataFrame) -> pd.DataFrame: raise ValueError("The 'path' column is required to finalise the datasets") finalised_rows = [] - for _, row in datasets.iterrows(): - finalised_rows.append(parse_cmip6_complete(row["path"])) - - finalised_df = pd.DataFrame(finalised_rows) + for index, row in datasets.iterrows(): + parsed_row = parse_cmip6_complete(row["path"]) + if "INVALID_ASSET" in parsed_row: + logger.warning(f"Failed to finalise dataset at {row['path']}: {parsed_row['INVALID_ASSET']}") + continue + finalised_rows.append({"index": index, **parsed_row}) # We need to preserve the original index to be able to update the original dataframe - finalised_df.index = datasets.index - - # Convert the start_time and end_time columns to datetime objects - finalised_df["start_time"] = _parse_datetime(finalised_df["start_time"]) - finalised_df["end_time"] = _parse_datetime(finalised_df["end_time"]) - - # Apply the same fixes as in find_local_datasets - finalised_df = _apply_fixes(finalised_df) - - # Update the original dataframe with the new metadata - datasets.update(finalised_df) + finalised_df = pd.DataFrame(finalised_rows).set_index("index") + finalised_df.index.name = None - return datasets + return self._clean_dataframe(finalised_df) diff --git a/packages/climate-ref/src/climate_ref/datasets/mixins.py b/packages/climate-ref/src/climate_ref/datasets/mixins.py index 930bbd7f8..bd99cce4d 100644 --- a/packages/climate-ref/src/climate_ref/datasets/mixins.py +++ b/packages/climate-ref/src/climate_ref/datasets/mixins.py @@ -1,7 +1,6 @@ import pandas as pd -from climate_ref.database import Database -from climate_ref.models.dataset import Dataset, DatasetFile +from climate_ref.models.dataset import Dataset class FinaliseableDatasetAdapterMixin: @@ -17,30 +16,3 @@ def finalise_datasets(self, datasets: pd.DataFrame) -> pd.DataFrame: Finalise a subset of datasets by applying the complete parser. """ raise NotImplementedError - - def update_catalog(self, db: Database, datasets: pd.DataFrame) -> None: - """ - Update the data catalog in the database. - """ - with db.session.begin(): - Dataset = self.dataset_cls - - # Update dataset-specific metadata - unique_slugs = datasets[self.slug_column].unique() - model_columns = Dataset.__table__.columns.keys() - for slug in unique_slugs: - first_row = datasets[datasets[self.slug_column] == slug].iloc[0] - update_data = first_row.to_dict() - update_data_filtered = { - k: v for k, v in update_data.items() if k in model_columns and pd.notna(v) - } - db.session.query(Dataset).filter(Dataset.slug == slug).update(update_data_filtered) - - # Update file-specific metadata - for _, row in datasets.iterrows(): - path = row["path"] - update_data = { - "start_time": row["start_time"], - "end_time": row["end_time"], - } - db.session.query(DatasetFile).filter(DatasetFile.path == path).update(update_data) diff --git a/packages/climate-ref/src/climate_ref/models/dataset.py b/packages/climate-ref/src/climate_ref/models/dataset.py index 76703452f..105902933 100644 --- a/packages/climate-ref/src/climate_ref/models/dataset.py +++ b/packages/climate-ref/src/climate_ref/models/dataset.py @@ -105,6 +105,7 @@ class CMIP6Dataset(Dataset): frequency: Mapped[str] = mapped_column(nullable=True) grid: Mapped[str] = mapped_column(nullable=True) grid_label: Mapped[str] = mapped_column() + init_year: Mapped[int] = mapped_column(nullable=True) institution_id: Mapped[str] = mapped_column() long_name: Mapped[str] = mapped_column(nullable=True) member_id: Mapped[str] = mapped_column() diff --git a/packages/climate-ref/src/climate_ref/provider_registry.py b/packages/climate-ref/src/climate_ref/provider_registry.py index 7e59cb4ad..2060286ef 100644 --- a/packages/climate-ref/src/climate_ref/provider_registry.py +++ b/packages/climate-ref/src/climate_ref/provider_registry.py @@ -31,10 +31,10 @@ def _register_provider(db: Database, provider: DiagnosticProvider) -> None: """ from climate_ref.models import Diagnostic, Provider - provider_model, created = db.get_or_create( + provider_model, created = db.create_or_update( Provider, slug=provider.slug, - defaults={ + values={ "name": provider.name, # TODO: Handle if this changes "version": provider.version, @@ -45,11 +45,11 @@ def _register_provider(db: Database, provider: DiagnosticProvider) -> None: db.session.flush() for diagnostic in provider.diagnostics(): - diagnostic_model, created = db.get_or_create( + diagnostic_model, created = db.create_or_update( Diagnostic, slug=diagnostic.slug, provider_id=provider_model.id, - defaults={ + values={ "name": diagnostic.name, }, ) diff --git a/packages/climate-ref/src/climate_ref/tests/test_data_catalog.py b/packages/climate-ref/src/climate_ref/tests/test_data_catalog.py new file mode 100644 index 000000000..59ce4cf48 --- /dev/null +++ b/packages/climate-ref/src/climate_ref/tests/test_data_catalog.py @@ -0,0 +1,41 @@ +import pandas as pd +import pytest + +from climate_ref.data_catalog import DataCatalog +from climate_ref.datasets.cmip6 import CMIP6DatasetAdapter + + +def test_data_catalog_finalise(cmip6_data_catalog, cmip6_data_catalog_drs, db): + data_catalog = DataCatalog(database=db, adapter=CMIP6DatasetAdapter()) + + assert (~cmip6_data_catalog_drs["finalised"]).all() + finalised_df = data_catalog.finalise(cmip6_data_catalog_drs) + assert finalised_df["finalised"].all() + + pd.testing.assert_frame_equal(cmip6_data_catalog, finalised_df[cmip6_data_catalog.columns]) + pd.testing.assert_frame_equal(cmip6_data_catalog, data_catalog.to_frame()) + + +def test_data_catalog_to_frame(mocker): + mock_db = mocker.Mock() + data_catalog = DataCatalog(database=mock_db, adapter=CMIP6DatasetAdapter()) + # Mock the adapter's load_catalog method + data_catalog.adapter.load_catalog = lambda db: pd.DataFrame([{"test": "test"}]) + df = data_catalog.to_frame() + + assert not df.empty + assert "test" in df.columns + + +def test_data_catalog_df_caching(mocker): + mock_db = mocker.Mock() + data_catalog = DataCatalog(database=mock_db, adapter=CMIP6DatasetAdapter()) + data_catalog.adapter.load_catalog = lambda db: pd.DataFrame([{"test": "test"}]) + + # The first call should load the dataframe + assert data_catalog.to_frame() is not None + assert data_catalog._df is not None + + # We can check that the load_catalog method is not called again + data_catalog.adapter.load_catalog = lambda db: pytest.fail("load_catalog should not be called again") + assert data_catalog.to_frame() is not None diff --git a/packages/climate-ref/tests/unit/datasets/test_cmip6.py b/packages/climate-ref/tests/unit/datasets/test_cmip6.py index c91f91652..84e4ea086 100644 --- a/packages/climate-ref/tests/unit/datasets/test_cmip6.py +++ b/packages/climate-ref/tests/unit/datasets/test_cmip6.py @@ -70,7 +70,7 @@ def test_load_catalog_multiple_versions(self, config, db_seeded, catalog_regress target_metadata.version = "v20000101" target_metadata.instance_id = target_ds.replace("v20191115", "v20000101") with db_seeded.session.begin(): - adapter.register_dataset(config, db_seeded, target_metadata) + adapter.register_dataset(db_seeded, target_metadata) # An older version should not be in the catalog pd.testing.assert_frame_equal( @@ -83,7 +83,7 @@ def test_load_catalog_multiple_versions(self, config, db_seeded, catalog_regress new_instance_id = target_ds.replace("v20191115", "v20230101") target_metadata.instance_id = new_instance_id with db_seeded.session.begin(): - adapter.register_dataset(config, db_seeded, target_metadata) + adapter.register_dataset(db_seeded, target_metadata) # The new version should be in the catalog latest_data_catalog = adapter.load_catalog(db_seeded) @@ -102,7 +102,7 @@ def test_round_trip(self, cmip6_parser, config, sample_data_dir): adapter = CMIP6DatasetAdapter() with database.session.begin(): for instance_id, data_catalog_dataset in catalog.groupby(adapter.slug_column): - adapter.register_dataset(config, database, data_catalog_dataset) + adapter.register_dataset(database, data_catalog_dataset) local_data_catalog = ( catalog.drop(columns=["time_range"]) diff --git a/tests/integration/test_postgres.py b/tests/integration/test_postgres.py index 03117c230..be2b83652 100644 --- a/tests/integration/test_postgres.py +++ b/tests/integration/test_postgres.py @@ -84,7 +84,7 @@ def test_connect_and_migrations(config, cmip6_data_catalog): with database.session.begin(): for instance_id, data_catalog_dataset in cmip6_data_catalog.groupby(adapter.slug_column): - adapter.register_dataset(config, database, data_catalog_dataset) + adapter.register_dataset(database, data_catalog_dataset) def test_check_up_to_date(config): From af8d5d0340637ca7ab7a6cf2f3c28071ad2804c1 Mon Sep 17 00:00:00 2001 From: Jared Lewis Date: Mon, 28 Jul 2025 16:16:54 +1000 Subject: [PATCH 3/4] chore: Add missing database migration --- ...07-28T1419_83d8366f2706_cmip6_init_year.py | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 packages/climate-ref/src/climate_ref/migrations/versions/2025-07-28T1419_83d8366f2706_cmip6_init_year.py diff --git a/packages/climate-ref/src/climate_ref/migrations/versions/2025-07-28T1419_83d8366f2706_cmip6_init_year.py b/packages/climate-ref/src/climate_ref/migrations/versions/2025-07-28T1419_83d8366f2706_cmip6_init_year.py new file mode 100644 index 000000000..5ff337592 --- /dev/null +++ b/packages/climate-ref/src/climate_ref/migrations/versions/2025-07-28T1419_83d8366f2706_cmip6_init_year.py @@ -0,0 +1,35 @@ +"""cmip6-init-year + +Revision ID: 83d8366f2706 +Revises: 94beace57a9c +Create Date: 2025-07-28 14:19:19.774823 + +""" + +from collections.abc import Sequence +from typing import Union + +import sqlalchemy as sa +from alembic import op + +# revision identifiers, used by Alembic. +revision: str = "83d8366f2706" +down_revision: Union[str, None] = "94beace57a9c" +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + with op.batch_alter_table("cmip6_dataset", schema=None) as batch_op: + batch_op.add_column(sa.Column("init_year", sa.Integer(), nullable=True)) + + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + with op.batch_alter_table("cmip6_dataset", schema=None) as batch_op: + batch_op.drop_column("init_year") + + # ### end Alembic commands ### From 6569802b1fa3f7b801af14b7999856d989ddf120 Mon Sep 17 00:00:00 2001 From: Jared Lewis Date: Mon, 28 Jul 2025 20:07:00 +1000 Subject: [PATCH 4/4] chore: cleanup --- .../src/climate_ref/datasets/base.py | 3 - .../src/climate_ref/datasets/cmip6.py | 3 +- .../src/climate_ref/datasets/cmip6_parsers.py | 6 +- .../src/climate_ref/datasets/obs4mips.py | 4 - .../climate_ref/tests/test_data_catalog.py | 7 +- .../tests/unit/datasets/test_cmip6.py | 28 ++-- .../test_cmip6/cmip6_catalog_db_complete.yml | 71 +++++++++ .../test_cmip6/cmip6_catalog_db_drs.yml | 71 +++++++++ .../cmip6_catalog_local_complete.yml | 142 +++++++++--------- .../test_cmip6/cmip6_catalog_local_drs.yml | 142 +++++++++--------- .../tests/unit/datasets/test_obs4mips.py | 11 +- .../unit/datasets/test_pmp_climatology.py | 3 +- 12 files changed, 313 insertions(+), 178 deletions(-) diff --git a/packages/climate-ref/src/climate_ref/datasets/base.py b/packages/climate-ref/src/climate_ref/datasets/base.py index bb5a42405..3bfbb2adc 100644 --- a/packages/climate-ref/src/climate_ref/datasets/base.py +++ b/packages/climate-ref/src/climate_ref/datasets/base.py @@ -24,9 +24,6 @@ def _log_duplicate_metadata( invalid_dataset_nunique = invalid_datasets.loc[instance_id] invalid_dataset_columns = invalid_dataset_nunique[invalid_dataset_nunique.gt(1)].index.tolist() - # Include time_range in the list of invalid columns to make debugging easier - invalid_dataset_columns.append("time_range") - data_catalog_subset = data_catalog[data_catalog[slug_column] == instance_id] logger.error( diff --git a/packages/climate-ref/src/climate_ref/datasets/cmip6.py b/packages/climate-ref/src/climate_ref/datasets/cmip6.py index 4268a77bc..26437e9ec 100644 --- a/packages/climate-ref/src/climate_ref/datasets/cmip6.py +++ b/packages/climate-ref/src/climate_ref/datasets/cmip6.py @@ -65,7 +65,7 @@ def _fix_parent_variant_label(group: pd.DataFrame) -> pd.DataFrame: if "init_year" in data_catalog: # Convert init_year to numeric, coercing errors to NaN - data_catalog["init_year"] = pd.to_numeric(data_catalog["init_year"], errors="coerce") + data_catalog["init_year"] = pd.to_numeric(data_catalog["init_year"]) return data_catalog @@ -94,6 +94,7 @@ class CMIP6DatasetAdapter(FinaliseableDatasetAdapterMixin, DatasetAdapter): "frequency", "grid", "grid_label", + "init_year", "institution_id", "nominal_resolution", "parent_activity_id", diff --git a/packages/climate-ref/src/climate_ref/datasets/cmip6_parsers.py b/packages/climate-ref/src/climate_ref/datasets/cmip6_parsers.py index 080fab555..d8e996ea2 100644 --- a/packages/climate-ref/src/climate_ref/datasets/cmip6_parsers.py +++ b/packages/climate-ref/src/climate_ref/datasets/cmip6_parsers.py @@ -127,10 +127,6 @@ def parse_cmip6_complete(file: str, **kwargs: Any) -> dict[str, Any]: info["init_year"] = init_year info["start_time"] = start_time info["end_time"] = end_time - if not (start_time and end_time): - info["time_range"] = None - else: - info["time_range"] = f"{start_time}-{end_time}" info["path"] = str(file) info["version"] = extract_attr_with_regex(str(file), regex=r"v\d{4}\d{2}\d{2}|v\d{1}") or "v0" @@ -180,7 +176,7 @@ def parse_cmip6_drs(file: str, **kwargs: Any) -> dict[str, Any]: if info.get("time_range"): # Parse the time range if it exists - start_time, end_time = _parse_daterange(info["time_range"]) + start_time, end_time = _parse_daterange(info.pop("time_range")) info["start_time"] = start_time info["end_time"] = end_time diff --git a/packages/climate-ref/src/climate_ref/datasets/obs4mips.py b/packages/climate-ref/src/climate_ref/datasets/obs4mips.py index 36b482fce..433f04fa0 100644 --- a/packages/climate-ref/src/climate_ref/datasets/obs4mips.py +++ b/packages/climate-ref/src/climate_ref/datasets/obs4mips.py @@ -81,10 +81,6 @@ def parse_obs4mips(file: str, **kwargs: Any) -> dict[str, Any]: info["vertical_levels"] = vertical_levels info["start_time"] = start_time info["end_time"] = end_time - if not (start_time and end_time): - info["time_range"] = None - else: - info["time_range"] = f"{start_time}-{end_time}" info["path"] = str(file) info["source_version_number"] = ( extract_attr_with_regex( diff --git a/packages/climate-ref/src/climate_ref/tests/test_data_catalog.py b/packages/climate-ref/src/climate_ref/tests/test_data_catalog.py index 59ce4cf48..7e7b175b0 100644 --- a/packages/climate-ref/src/climate_ref/tests/test_data_catalog.py +++ b/packages/climate-ref/src/climate_ref/tests/test_data_catalog.py @@ -13,7 +13,12 @@ def test_data_catalog_finalise(cmip6_data_catalog, cmip6_data_catalog_drs, db): assert finalised_df["finalised"].all() pd.testing.assert_frame_equal(cmip6_data_catalog, finalised_df[cmip6_data_catalog.columns]) - pd.testing.assert_frame_equal(cmip6_data_catalog, data_catalog.to_frame()) + + # Rework the index to match the database + db_frame = data_catalog.to_frame() + db_frame["init_year"] = pd.to_numeric(db_frame["init_year"]) + cmip6_data_catalog.index = db_frame.index + pd.testing.assert_frame_equal(cmip6_data_catalog, db_frame[cmip6_data_catalog.columns]) def test_data_catalog_to_frame(mocker): diff --git a/packages/climate-ref/tests/unit/datasets/test_cmip6.py b/packages/climate-ref/tests/unit/datasets/test_cmip6.py index 84e4ea086..3525a58ec 100644 --- a/packages/climate-ref/tests/unit/datasets/test_cmip6.py +++ b/packages/climate-ref/tests/unit/datasets/test_cmip6.py @@ -60,15 +60,23 @@ def test_load_catalog(self, cmip6_parser, db_seeded, catalog_regression, sample_ df.sort_values(["instance_id", "start_time"]), basename=f"cmip6_catalog_db_{cmip6_parser}" ) - def test_load_catalog_multiple_versions(self, config, db_seeded, catalog_regression, sample_data_dir): + def test_load_catalog_multiple_versions( + self, config, db_seeded, catalog_regression, sample_data_dir, mocker + ): + # Don't check if the path is valid + mocker.patch("climate_ref.datasets.base.validate_path", side_effect=lambda x: x) + adapter = CMIP6DatasetAdapter() data_catalog = adapter.load_catalog(db_seeded) target_ds = "CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.tas.gn.v20191115" + default_version = "v20191115" target_metadata = data_catalog[data_catalog["instance_id"] == target_ds] # Make an old version - target_metadata.version = "v20000101" - target_metadata.instance_id = target_ds.replace("v20191115", "v20000101") + old_version = "v20000101" + target_metadata.version = old_version + target_metadata.instance_id = target_ds.replace(default_version, old_version) + target_metadata.path = target_metadata.path.str.replace(default_version, old_version) with db_seeded.session.begin(): adapter.register_dataset(db_seeded, target_metadata) @@ -79,9 +87,11 @@ def test_load_catalog_multiple_versions(self, config, db_seeded, catalog_regress ) # Make a new version - target_metadata.version = "v20230101" - new_instance_id = target_ds.replace("v20191115", "v20230101") + new_version = "v20230101" + target_metadata.version = new_version + new_instance_id = target_ds.replace(default_version, new_version) target_metadata.instance_id = new_instance_id + target_metadata.path = target_metadata.path.str.replace(default_version, new_version) with db_seeded.session.begin(): adapter.register_dataset(db_seeded, target_metadata) @@ -104,11 +114,7 @@ def test_round_trip(self, cmip6_parser, config, sample_data_dir): for instance_id, data_catalog_dataset in catalog.groupby(adapter.slug_column): adapter.register_dataset(database, data_catalog_dataset) - local_data_catalog = ( - catalog.drop(columns=["time_range"]) - .sort_values(["instance_id", "start_time"]) - .reset_index(drop=True) - ) + local_data_catalog = catalog.sort_values(["instance_id", "start_time"]).reset_index(drop=True) db_data_catalog = ( adapter.load_catalog(database).sort_values(["instance_id", "start_time"]).reset_index(drop=True) @@ -136,7 +142,7 @@ def test_load_local_datasets(self, config, cmip6_parser, sample_data_dir, catalo # TODO: add time_range to the db? assert sorted(data_catalog.columns.tolist()) == sorted( - [*adapter.dataset_specific_metadata, *adapter.file_specific_metadata, "time_range"] + [*adapter.dataset_specific_metadata, *adapter.file_specific_metadata] ) catalog_regression( diff --git a/packages/climate-ref/tests/unit/datasets/test_cmip6/cmip6_catalog_db_complete.yml b/packages/climate-ref/tests/unit/datasets/test_cmip6/cmip6_catalog_db_complete.yml index 491280199..5d30ab3ed 100644 --- a/packages/climate-ref/tests/unit/datasets/test_cmip6/cmip6_catalog_db_complete.yml +++ b/packages/climate-ref/tests/unit/datasets/test_cmip6/cmip6_catalog_db_complete.yml @@ -10,6 +10,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.C4MIP CDRMIP.CSIRO.ACCESS-ESM1-5.esm-1pct-brch-1000PgC.r1i1p1f1.Amon.tas.gn.v20191206 institution_id: CSIRO long_name: Near-Surface Air Temperature @@ -47,6 +48,7 @@ frequency: fx grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.C4MIP CDRMIP.CSIRO.ACCESS-ESM1-5.esm-1pct-brch-1000PgC.r1i1p1f1.fx.areacella.gn.v20191206 institution_id: CSIRO long_name: Grid-Cell Area for Atmospheric Grid Variables @@ -83,6 +85,7 @@ frequency: mon grid: gn grid_label: gn + init_year: null instance_id: CMIP6.C4MIP CDRMIP.MPI-M.MPI-ESM1-2-LR.esm-1pctCO2.r1i1p1f1.Amon.fco2antt.gn.v20190815 institution_id: MPI-M long_name: Carbon Mass Flux into Atmosphere Due to All Anthropogenic Emissions of @@ -120,6 +123,7 @@ frequency: mon grid: gn grid_label: gn + init_year: null instance_id: CMIP6.C4MIP CDRMIP.MPI-M.MPI-ESM1-2-LR.esm-1pctCO2.r1i1p1f1.Amon.fco2antt.gn.v20190815 institution_id: MPI-M long_name: Carbon Mass Flux into Atmosphere Due to All Anthropogenic Emissions of @@ -157,6 +161,7 @@ frequency: mon grid: gn grid_label: gn + init_year: null instance_id: CMIP6.C4MIP CDRMIP.MPI-M.MPI-ESM1-2-LR.esm-1pctCO2.r1i1p1f1.Amon.fco2antt.gn.v20190815 institution_id: MPI-M long_name: Carbon Mass Flux into Atmosphere Due to All Anthropogenic Emissions of @@ -194,6 +199,7 @@ frequency: mon grid: gn grid_label: gn + init_year: null instance_id: CMIP6.C4MIP CDRMIP.MPI-M.MPI-ESM1-2-LR.esm-1pctCO2.r1i1p1f1.Amon.fco2antt.gn.v20190815 institution_id: MPI-M long_name: Carbon Mass Flux into Atmosphere Due to All Anthropogenic Emissions of @@ -231,6 +237,7 @@ frequency: mon grid: gn grid_label: gn + init_year: null instance_id: CMIP6.C4MIP CDRMIP.MPI-M.MPI-ESM1-2-LR.esm-1pctCO2.r1i1p1f1.Amon.tas.gn.v20190815 institution_id: MPI-M long_name: Near-Surface Air Temperature @@ -267,6 +274,7 @@ frequency: mon grid: gn grid_label: gn + init_year: null instance_id: CMIP6.C4MIP CDRMIP.MPI-M.MPI-ESM1-2-LR.esm-1pctCO2.r1i1p1f1.Amon.tas.gn.v20190815 institution_id: MPI-M long_name: Near-Surface Air Temperature @@ -303,6 +311,7 @@ frequency: mon grid: gn grid_label: gn + init_year: null instance_id: CMIP6.C4MIP CDRMIP.MPI-M.MPI-ESM1-2-LR.esm-1pctCO2.r1i1p1f1.Amon.tas.gn.v20190815 institution_id: MPI-M long_name: Near-Surface Air Temperature @@ -339,6 +348,7 @@ frequency: mon grid: gn grid_label: gn + init_year: null instance_id: CMIP6.C4MIP CDRMIP.MPI-M.MPI-ESM1-2-LR.esm-1pctCO2.r1i1p1f1.Amon.tas.gn.v20190815 institution_id: MPI-M long_name: Near-Surface Air Temperature @@ -375,6 +385,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.1pctCO2.r1i1p1f1.Amon.tas.gn.v20191115 institution_id: CSIRO long_name: Near-Surface Air Temperature @@ -411,6 +422,7 @@ frequency: fx grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.1pctCO2.r1i1p1f1.fx.areacella.gn.v20191115 institution_id: CSIRO long_name: Grid-Cell Area for Atmospheric Grid Variables @@ -447,6 +459,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.abrupt-4xCO2.r1i1p1f1.Amon.rlut.gn.v20191115 institution_id: CSIRO long_name: TOA Outgoing Longwave Radiation @@ -483,6 +496,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.abrupt-4xCO2.r1i1p1f1.Amon.rsdt.gn.v20191115 institution_id: CSIRO long_name: TOA Incident Shortwave Radiation @@ -519,6 +533,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.abrupt-4xCO2.r1i1p1f1.Amon.rsut.gn.v20191115 institution_id: CSIRO long_name: TOA Outgoing Shortwave Radiation @@ -555,6 +570,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.abrupt-4xCO2.r1i1p1f1.Amon.tas.gn.v20191115 institution_id: CSIRO long_name: Near-Surface Air Temperature @@ -591,6 +607,7 @@ frequency: fx grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.abrupt-4xCO2.r1i1p1f1.fx.areacella.gn.v20191115 institution_id: CSIRO long_name: Grid-Cell Area for Atmospheric Grid Variables @@ -627,6 +644,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.pr.gn.v20191115 institution_id: CSIRO long_name: Precipitation @@ -663,6 +681,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.psl.gn.v20191115 institution_id: CSIRO long_name: Sea Level Pressure @@ -699,6 +718,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.rlut.gn.v20191115 institution_id: CSIRO long_name: TOA Outgoing Longwave Radiation @@ -735,6 +755,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.rlutcs.gn.v20191115 institution_id: CSIRO long_name: TOA Outgoing Clear-Sky Longwave Radiation @@ -771,6 +792,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.rsdt.gn.v20191115 institution_id: CSIRO long_name: TOA Incident Shortwave Radiation @@ -807,6 +829,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.rsut.gn.v20191115 institution_id: CSIRO long_name: TOA Outgoing Shortwave Radiation @@ -843,6 +866,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.rsutcs.gn.v20191115 institution_id: CSIRO long_name: TOA Outgoing Clear-Sky Shortwave Radiation @@ -879,6 +903,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.tas.gn.v20191115 institution_id: CSIRO long_name: Near-Surface Air Temperature @@ -915,6 +940,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.tauu.gn.v20191115 institution_id: CSIRO long_name: Surface Downward Eastward Wind Stress @@ -951,6 +977,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.ts.gn.v20191115 institution_id: CSIRO long_name: Surface Temperature @@ -987,6 +1014,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Emon.cSoil.gn.v20191115 institution_id: CSIRO long_name: Carbon Mass in Model Soil Pool @@ -1023,6 +1051,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Lmon.gpp.gn.v20191115 institution_id: CSIRO long_name: Carbon Mass Flux out of Atmosphere Due to Gross Primary Production on @@ -1060,6 +1089,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Lmon.lai.gn.v20191115 institution_id: CSIRO long_name: Leaf Area Index @@ -1096,6 +1126,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Lmon.mrro.gn.v20191115 institution_id: CSIRO long_name: Total Runoff @@ -1132,6 +1163,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Lmon.mrsos.gn.v20191115 institution_id: CSIRO long_name: Moisture in Upper Portion of Soil Column @@ -1168,6 +1200,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Lmon.nbp.gn.v20191115 institution_id: CSIRO long_name: Carbon Mass Flux out of Atmosphere Due to Net Biospheric Production on @@ -1205,6 +1238,7 @@ frequency: fx grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Ofx.areacello.gn.v20191115 institution_id: CSIRO long_name: Grid-Cell Area for Ocean Variables @@ -1241,6 +1275,7 @@ frequency: fx grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Ofx.sftof.gn.v20191115 institution_id: CSIRO long_name: Sea Area Percentage @@ -1277,6 +1312,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Omon.msftmz.gn.v20191115 institution_id: CSIRO long_name: Ocean Meridional Overturning Mass Streamfunction @@ -1313,6 +1349,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Omon.msftmz.gn.v20191115 institution_id: CSIRO long_name: Ocean Meridional Overturning Mass Streamfunction @@ -1349,6 +1386,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Omon.sos.gn.v20191115 institution_id: CSIRO long_name: Sea Surface Salinity @@ -1385,6 +1423,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Omon.tos.gn.v20191115 institution_id: CSIRO long_name: Sea Surface Temperature @@ -1421,6 +1460,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.SImon.siconc.gn.v20200817 institution_id: CSIRO long_name: Sea-Ice Area Percentage (Ocean Grid) @@ -1457,6 +1497,7 @@ frequency: fx grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.fx.areacella.gn.v20191115 institution_id: CSIRO long_name: Grid-Cell Area for Atmospheric Grid Variables @@ -1493,6 +1534,7 @@ frequency: fx grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.fx.sftlf.gn.v20191115 institution_id: CSIRO long_name: Percentage of the grid cell occupied by land (including lakes) @@ -1529,6 +1571,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r2i1p1f1.Amon.psl.gn.v20191128 institution_id: CSIRO long_name: Sea Level Pressure @@ -1565,6 +1608,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r2i1p1f1.Amon.ts.gn.v20191128 institution_id: CSIRO long_name: Surface Temperature @@ -1601,6 +1645,7 @@ frequency: fx grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r2i1p1f1.fx.areacella.gn.v20191128 institution_id: CSIRO long_name: Grid-Cell Area for Atmospheric Grid Variables @@ -1637,6 +1682,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.piControl.r1i1p1f1.Amon.rlut.gn.v20210316 institution_id: CSIRO long_name: TOA Outgoing Longwave Radiation @@ -1673,6 +1719,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.piControl.r1i1p1f1.Amon.rsdt.gn.v20210316 institution_id: CSIRO long_name: TOA Incident Shortwave Radiation @@ -1709,6 +1756,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.piControl.r1i1p1f1.Amon.rsut.gn.v20210316 institution_id: CSIRO long_name: TOA Outgoing Shortwave Radiation @@ -1745,6 +1793,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.piControl.r1i1p1f1.Amon.tas.gn.v20210316 institution_id: CSIRO long_name: Near-Surface Air Temperature @@ -1781,6 +1830,7 @@ frequency: fx grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.piControl.r1i1p1f1.fx.areacella.gn.v20210316 institution_id: CSIRO long_name: Grid-Cell Area for Atmospheric Grid Variables @@ -1817,6 +1867,7 @@ frequency: mon grid: gn grid_label: gn + init_year: null instance_id: CMIP6.CMIP.MPI-M.MPI-ESM1-2-LR.esm-piControl.r1i1p1f1.Amon.tas.gn.v20190815 institution_id: MPI-M long_name: Near-Surface Air Temperature @@ -1853,6 +1904,7 @@ frequency: mon grid: gn grid_label: gn + init_year: null instance_id: CMIP6.CMIP.MPI-M.MPI-ESM1-2-LR.esm-piControl.r1i1p1f1.Amon.tas.gn.v20190815 institution_id: MPI-M long_name: Near-Surface Air Temperature @@ -1889,6 +1941,7 @@ frequency: mon grid: gn grid_label: gn + init_year: null instance_id: CMIP6.CMIP.MPI-M.MPI-ESM1-2-LR.esm-piControl.r1i1p1f1.Amon.tas.gn.v20190815 institution_id: MPI-M long_name: Near-Surface Air Temperature @@ -1925,6 +1978,7 @@ frequency: mon grid: gn grid_label: gn + init_year: null instance_id: CMIP6.CMIP.MPI-M.MPI-ESM1-2-LR.esm-piControl.r1i1p1f1.Amon.tas.gn.v20190815 institution_id: MPI-M long_name: Near-Surface Air Temperature @@ -1961,6 +2015,7 @@ frequency: fx grid: gn grid_label: gn + init_year: null instance_id: CMIP6.CMIP.MPI-M.MPI-ESM1-2-LR.esm-piControl.r1i1p1f1.fx.areacella.gn.v20190815 institution_id: MPI-M long_name: Grid-Cell Area for Atmospheric Grid Variables @@ -1997,6 +2052,7 @@ frequency: mon grid: native 0.9x1.25 finite volume grid (192x288 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.NCAR.CESM2.historical.r1i1p1f1.ImonAnt.snc.gn.v20190308 institution_id: NCAR long_name: Snow Area Percentage @@ -2033,6 +2089,7 @@ frequency: mon grid: native 0.9x1.25 finite volume grid (192x288 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.NCAR.CESM2.historical.r1i1p1f1.ImonGre.snc.gn.v20190308 institution_id: NCAR long_name: Snow Area Percentage @@ -2069,6 +2126,7 @@ frequency: mon grid: native 0.9x1.25 finite volume grid (192x288 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.NCAR.CESM2.historical.r1i1p1f1.LImon.snc.gn.v20190308 institution_id: NCAR long_name: Snow Area Percentage @@ -2105,6 +2163,7 @@ frequency: mon grid: native 0.9x1.25 finite volume grid (192x288 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.NCAR.CESM2.historical.r1i1p1f1.Lmon.burntFractionAll.gn.v20190308 institution_id: NCAR long_name: Percentage of Entire Grid cell that is Covered by Burnt Vegetation (All @@ -2142,6 +2201,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.DAMIP.CSIRO.ACCESS-ESM1-5.hist-GHG.r1i1p1f1.Amon.psl.gn.v20200615 institution_id: CSIRO long_name: Sea Level Pressure @@ -2178,6 +2238,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.DAMIP.CSIRO.ACCESS-ESM1-5.hist-GHG.r1i1p1f1.Amon.ts.gn.v20200615 institution_id: CSIRO long_name: Surface Temperature @@ -2214,6 +2275,7 @@ frequency: fx grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.DAMIP.CSIRO.ACCESS-ESM1-5.hist-GHG.r1i1p1f1.fx.areacella.gn.v20200615 institution_id: CSIRO long_name: Grid-Cell Area for Atmospheric Grid Variables @@ -2250,6 +2312,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.DAMIP.CSIRO.ACCESS-ESM1-5.hist-GHG.r2i1p1f1.Amon.psl.gn.v20200615 institution_id: CSIRO long_name: Sea Level Pressure @@ -2286,6 +2349,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.DAMIP.CSIRO.ACCESS-ESM1-5.hist-GHG.r2i1p1f1.Amon.ts.gn.v20200615 institution_id: CSIRO long_name: Surface Temperature @@ -2322,6 +2386,7 @@ frequency: fx grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.DAMIP.CSIRO.ACCESS-ESM1-5.hist-GHG.r2i1p1f1.fx.areacella.gn.v20200615 institution_id: CSIRO long_name: Grid-Cell Area for Atmospheric Grid Variables @@ -2358,6 +2423,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.ScenarioMIP.CSIRO.ACCESS-ESM1-5.ssp126.r1i1p1f1.Amon.pr.gn.v20210318 institution_id: CSIRO long_name: Precipitation @@ -2394,6 +2460,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.ScenarioMIP.CSIRO.ACCESS-ESM1-5.ssp126.r1i1p1f1.Amon.rsdt.gn.v20210318 institution_id: CSIRO long_name: TOA Incident Shortwave Radiation @@ -2430,6 +2497,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.ScenarioMIP.CSIRO.ACCESS-ESM1-5.ssp126.r1i1p1f1.Amon.rsut.gn.v20210318 institution_id: CSIRO long_name: TOA Outgoing Shortwave Radiation @@ -2466,6 +2534,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.ScenarioMIP.CSIRO.ACCESS-ESM1-5.ssp126.r1i1p1f1.Amon.tas.gn.v20210318 institution_id: CSIRO long_name: Near-Surface Air Temperature @@ -2502,6 +2571,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.ScenarioMIP.CSIRO.ACCESS-ESM1-5.ssp126.r1i1p1f1.Omon.tos.gn.v20210318 institution_id: CSIRO long_name: Sea Surface Temperature @@ -2538,6 +2608,7 @@ frequency: fx grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.ScenarioMIP.CSIRO.ACCESS-ESM1-5.ssp126.r1i1p1f1.fx.areacella.gn.v20210318 institution_id: CSIRO long_name: Grid-Cell Area for Atmospheric Grid Variables diff --git a/packages/climate-ref/tests/unit/datasets/test_cmip6/cmip6_catalog_db_drs.yml b/packages/climate-ref/tests/unit/datasets/test_cmip6/cmip6_catalog_db_drs.yml index 491280199..5d30ab3ed 100644 --- a/packages/climate-ref/tests/unit/datasets/test_cmip6/cmip6_catalog_db_drs.yml +++ b/packages/climate-ref/tests/unit/datasets/test_cmip6/cmip6_catalog_db_drs.yml @@ -10,6 +10,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.C4MIP CDRMIP.CSIRO.ACCESS-ESM1-5.esm-1pct-brch-1000PgC.r1i1p1f1.Amon.tas.gn.v20191206 institution_id: CSIRO long_name: Near-Surface Air Temperature @@ -47,6 +48,7 @@ frequency: fx grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.C4MIP CDRMIP.CSIRO.ACCESS-ESM1-5.esm-1pct-brch-1000PgC.r1i1p1f1.fx.areacella.gn.v20191206 institution_id: CSIRO long_name: Grid-Cell Area for Atmospheric Grid Variables @@ -83,6 +85,7 @@ frequency: mon grid: gn grid_label: gn + init_year: null instance_id: CMIP6.C4MIP CDRMIP.MPI-M.MPI-ESM1-2-LR.esm-1pctCO2.r1i1p1f1.Amon.fco2antt.gn.v20190815 institution_id: MPI-M long_name: Carbon Mass Flux into Atmosphere Due to All Anthropogenic Emissions of @@ -120,6 +123,7 @@ frequency: mon grid: gn grid_label: gn + init_year: null instance_id: CMIP6.C4MIP CDRMIP.MPI-M.MPI-ESM1-2-LR.esm-1pctCO2.r1i1p1f1.Amon.fco2antt.gn.v20190815 institution_id: MPI-M long_name: Carbon Mass Flux into Atmosphere Due to All Anthropogenic Emissions of @@ -157,6 +161,7 @@ frequency: mon grid: gn grid_label: gn + init_year: null instance_id: CMIP6.C4MIP CDRMIP.MPI-M.MPI-ESM1-2-LR.esm-1pctCO2.r1i1p1f1.Amon.fco2antt.gn.v20190815 institution_id: MPI-M long_name: Carbon Mass Flux into Atmosphere Due to All Anthropogenic Emissions of @@ -194,6 +199,7 @@ frequency: mon grid: gn grid_label: gn + init_year: null instance_id: CMIP6.C4MIP CDRMIP.MPI-M.MPI-ESM1-2-LR.esm-1pctCO2.r1i1p1f1.Amon.fco2antt.gn.v20190815 institution_id: MPI-M long_name: Carbon Mass Flux into Atmosphere Due to All Anthropogenic Emissions of @@ -231,6 +237,7 @@ frequency: mon grid: gn grid_label: gn + init_year: null instance_id: CMIP6.C4MIP CDRMIP.MPI-M.MPI-ESM1-2-LR.esm-1pctCO2.r1i1p1f1.Amon.tas.gn.v20190815 institution_id: MPI-M long_name: Near-Surface Air Temperature @@ -267,6 +274,7 @@ frequency: mon grid: gn grid_label: gn + init_year: null instance_id: CMIP6.C4MIP CDRMIP.MPI-M.MPI-ESM1-2-LR.esm-1pctCO2.r1i1p1f1.Amon.tas.gn.v20190815 institution_id: MPI-M long_name: Near-Surface Air Temperature @@ -303,6 +311,7 @@ frequency: mon grid: gn grid_label: gn + init_year: null instance_id: CMIP6.C4MIP CDRMIP.MPI-M.MPI-ESM1-2-LR.esm-1pctCO2.r1i1p1f1.Amon.tas.gn.v20190815 institution_id: MPI-M long_name: Near-Surface Air Temperature @@ -339,6 +348,7 @@ frequency: mon grid: gn grid_label: gn + init_year: null instance_id: CMIP6.C4MIP CDRMIP.MPI-M.MPI-ESM1-2-LR.esm-1pctCO2.r1i1p1f1.Amon.tas.gn.v20190815 institution_id: MPI-M long_name: Near-Surface Air Temperature @@ -375,6 +385,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.1pctCO2.r1i1p1f1.Amon.tas.gn.v20191115 institution_id: CSIRO long_name: Near-Surface Air Temperature @@ -411,6 +422,7 @@ frequency: fx grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.1pctCO2.r1i1p1f1.fx.areacella.gn.v20191115 institution_id: CSIRO long_name: Grid-Cell Area for Atmospheric Grid Variables @@ -447,6 +459,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.abrupt-4xCO2.r1i1p1f1.Amon.rlut.gn.v20191115 institution_id: CSIRO long_name: TOA Outgoing Longwave Radiation @@ -483,6 +496,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.abrupt-4xCO2.r1i1p1f1.Amon.rsdt.gn.v20191115 institution_id: CSIRO long_name: TOA Incident Shortwave Radiation @@ -519,6 +533,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.abrupt-4xCO2.r1i1p1f1.Amon.rsut.gn.v20191115 institution_id: CSIRO long_name: TOA Outgoing Shortwave Radiation @@ -555,6 +570,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.abrupt-4xCO2.r1i1p1f1.Amon.tas.gn.v20191115 institution_id: CSIRO long_name: Near-Surface Air Temperature @@ -591,6 +607,7 @@ frequency: fx grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.abrupt-4xCO2.r1i1p1f1.fx.areacella.gn.v20191115 institution_id: CSIRO long_name: Grid-Cell Area for Atmospheric Grid Variables @@ -627,6 +644,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.pr.gn.v20191115 institution_id: CSIRO long_name: Precipitation @@ -663,6 +681,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.psl.gn.v20191115 institution_id: CSIRO long_name: Sea Level Pressure @@ -699,6 +718,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.rlut.gn.v20191115 institution_id: CSIRO long_name: TOA Outgoing Longwave Radiation @@ -735,6 +755,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.rlutcs.gn.v20191115 institution_id: CSIRO long_name: TOA Outgoing Clear-Sky Longwave Radiation @@ -771,6 +792,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.rsdt.gn.v20191115 institution_id: CSIRO long_name: TOA Incident Shortwave Radiation @@ -807,6 +829,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.rsut.gn.v20191115 institution_id: CSIRO long_name: TOA Outgoing Shortwave Radiation @@ -843,6 +866,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.rsutcs.gn.v20191115 institution_id: CSIRO long_name: TOA Outgoing Clear-Sky Shortwave Radiation @@ -879,6 +903,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.tas.gn.v20191115 institution_id: CSIRO long_name: Near-Surface Air Temperature @@ -915,6 +940,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.tauu.gn.v20191115 institution_id: CSIRO long_name: Surface Downward Eastward Wind Stress @@ -951,6 +977,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.ts.gn.v20191115 institution_id: CSIRO long_name: Surface Temperature @@ -987,6 +1014,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Emon.cSoil.gn.v20191115 institution_id: CSIRO long_name: Carbon Mass in Model Soil Pool @@ -1023,6 +1051,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Lmon.gpp.gn.v20191115 institution_id: CSIRO long_name: Carbon Mass Flux out of Atmosphere Due to Gross Primary Production on @@ -1060,6 +1089,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Lmon.lai.gn.v20191115 institution_id: CSIRO long_name: Leaf Area Index @@ -1096,6 +1126,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Lmon.mrro.gn.v20191115 institution_id: CSIRO long_name: Total Runoff @@ -1132,6 +1163,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Lmon.mrsos.gn.v20191115 institution_id: CSIRO long_name: Moisture in Upper Portion of Soil Column @@ -1168,6 +1200,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Lmon.nbp.gn.v20191115 institution_id: CSIRO long_name: Carbon Mass Flux out of Atmosphere Due to Net Biospheric Production on @@ -1205,6 +1238,7 @@ frequency: fx grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Ofx.areacello.gn.v20191115 institution_id: CSIRO long_name: Grid-Cell Area for Ocean Variables @@ -1241,6 +1275,7 @@ frequency: fx grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Ofx.sftof.gn.v20191115 institution_id: CSIRO long_name: Sea Area Percentage @@ -1277,6 +1312,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Omon.msftmz.gn.v20191115 institution_id: CSIRO long_name: Ocean Meridional Overturning Mass Streamfunction @@ -1313,6 +1349,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Omon.msftmz.gn.v20191115 institution_id: CSIRO long_name: Ocean Meridional Overturning Mass Streamfunction @@ -1349,6 +1386,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Omon.sos.gn.v20191115 institution_id: CSIRO long_name: Sea Surface Salinity @@ -1385,6 +1423,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Omon.tos.gn.v20191115 institution_id: CSIRO long_name: Sea Surface Temperature @@ -1421,6 +1460,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.SImon.siconc.gn.v20200817 institution_id: CSIRO long_name: Sea-Ice Area Percentage (Ocean Grid) @@ -1457,6 +1497,7 @@ frequency: fx grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.fx.areacella.gn.v20191115 institution_id: CSIRO long_name: Grid-Cell Area for Atmospheric Grid Variables @@ -1493,6 +1534,7 @@ frequency: fx grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.fx.sftlf.gn.v20191115 institution_id: CSIRO long_name: Percentage of the grid cell occupied by land (including lakes) @@ -1529,6 +1571,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r2i1p1f1.Amon.psl.gn.v20191128 institution_id: CSIRO long_name: Sea Level Pressure @@ -1565,6 +1608,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r2i1p1f1.Amon.ts.gn.v20191128 institution_id: CSIRO long_name: Surface Temperature @@ -1601,6 +1645,7 @@ frequency: fx grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r2i1p1f1.fx.areacella.gn.v20191128 institution_id: CSIRO long_name: Grid-Cell Area for Atmospheric Grid Variables @@ -1637,6 +1682,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.piControl.r1i1p1f1.Amon.rlut.gn.v20210316 institution_id: CSIRO long_name: TOA Outgoing Longwave Radiation @@ -1673,6 +1719,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.piControl.r1i1p1f1.Amon.rsdt.gn.v20210316 institution_id: CSIRO long_name: TOA Incident Shortwave Radiation @@ -1709,6 +1756,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.piControl.r1i1p1f1.Amon.rsut.gn.v20210316 institution_id: CSIRO long_name: TOA Outgoing Shortwave Radiation @@ -1745,6 +1793,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.piControl.r1i1p1f1.Amon.tas.gn.v20210316 institution_id: CSIRO long_name: Near-Surface Air Temperature @@ -1781,6 +1830,7 @@ frequency: fx grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.piControl.r1i1p1f1.fx.areacella.gn.v20210316 institution_id: CSIRO long_name: Grid-Cell Area for Atmospheric Grid Variables @@ -1817,6 +1867,7 @@ frequency: mon grid: gn grid_label: gn + init_year: null instance_id: CMIP6.CMIP.MPI-M.MPI-ESM1-2-LR.esm-piControl.r1i1p1f1.Amon.tas.gn.v20190815 institution_id: MPI-M long_name: Near-Surface Air Temperature @@ -1853,6 +1904,7 @@ frequency: mon grid: gn grid_label: gn + init_year: null instance_id: CMIP6.CMIP.MPI-M.MPI-ESM1-2-LR.esm-piControl.r1i1p1f1.Amon.tas.gn.v20190815 institution_id: MPI-M long_name: Near-Surface Air Temperature @@ -1889,6 +1941,7 @@ frequency: mon grid: gn grid_label: gn + init_year: null instance_id: CMIP6.CMIP.MPI-M.MPI-ESM1-2-LR.esm-piControl.r1i1p1f1.Amon.tas.gn.v20190815 institution_id: MPI-M long_name: Near-Surface Air Temperature @@ -1925,6 +1978,7 @@ frequency: mon grid: gn grid_label: gn + init_year: null instance_id: CMIP6.CMIP.MPI-M.MPI-ESM1-2-LR.esm-piControl.r1i1p1f1.Amon.tas.gn.v20190815 institution_id: MPI-M long_name: Near-Surface Air Temperature @@ -1961,6 +2015,7 @@ frequency: fx grid: gn grid_label: gn + init_year: null instance_id: CMIP6.CMIP.MPI-M.MPI-ESM1-2-LR.esm-piControl.r1i1p1f1.fx.areacella.gn.v20190815 institution_id: MPI-M long_name: Grid-Cell Area for Atmospheric Grid Variables @@ -1997,6 +2052,7 @@ frequency: mon grid: native 0.9x1.25 finite volume grid (192x288 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.NCAR.CESM2.historical.r1i1p1f1.ImonAnt.snc.gn.v20190308 institution_id: NCAR long_name: Snow Area Percentage @@ -2033,6 +2089,7 @@ frequency: mon grid: native 0.9x1.25 finite volume grid (192x288 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.NCAR.CESM2.historical.r1i1p1f1.ImonGre.snc.gn.v20190308 institution_id: NCAR long_name: Snow Area Percentage @@ -2069,6 +2126,7 @@ frequency: mon grid: native 0.9x1.25 finite volume grid (192x288 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.NCAR.CESM2.historical.r1i1p1f1.LImon.snc.gn.v20190308 institution_id: NCAR long_name: Snow Area Percentage @@ -2105,6 +2163,7 @@ frequency: mon grid: native 0.9x1.25 finite volume grid (192x288 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.CMIP.NCAR.CESM2.historical.r1i1p1f1.Lmon.burntFractionAll.gn.v20190308 institution_id: NCAR long_name: Percentage of Entire Grid cell that is Covered by Burnt Vegetation (All @@ -2142,6 +2201,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.DAMIP.CSIRO.ACCESS-ESM1-5.hist-GHG.r1i1p1f1.Amon.psl.gn.v20200615 institution_id: CSIRO long_name: Sea Level Pressure @@ -2178,6 +2238,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.DAMIP.CSIRO.ACCESS-ESM1-5.hist-GHG.r1i1p1f1.Amon.ts.gn.v20200615 institution_id: CSIRO long_name: Surface Temperature @@ -2214,6 +2275,7 @@ frequency: fx grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.DAMIP.CSIRO.ACCESS-ESM1-5.hist-GHG.r1i1p1f1.fx.areacella.gn.v20200615 institution_id: CSIRO long_name: Grid-Cell Area for Atmospheric Grid Variables @@ -2250,6 +2312,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.DAMIP.CSIRO.ACCESS-ESM1-5.hist-GHG.r2i1p1f1.Amon.psl.gn.v20200615 institution_id: CSIRO long_name: Sea Level Pressure @@ -2286,6 +2349,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.DAMIP.CSIRO.ACCESS-ESM1-5.hist-GHG.r2i1p1f1.Amon.ts.gn.v20200615 institution_id: CSIRO long_name: Surface Temperature @@ -2322,6 +2386,7 @@ frequency: fx grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.DAMIP.CSIRO.ACCESS-ESM1-5.hist-GHG.r2i1p1f1.fx.areacella.gn.v20200615 institution_id: CSIRO long_name: Grid-Cell Area for Atmospheric Grid Variables @@ -2358,6 +2423,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.ScenarioMIP.CSIRO.ACCESS-ESM1-5.ssp126.r1i1p1f1.Amon.pr.gn.v20210318 institution_id: CSIRO long_name: Precipitation @@ -2394,6 +2460,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.ScenarioMIP.CSIRO.ACCESS-ESM1-5.ssp126.r1i1p1f1.Amon.rsdt.gn.v20210318 institution_id: CSIRO long_name: TOA Incident Shortwave Radiation @@ -2430,6 +2497,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.ScenarioMIP.CSIRO.ACCESS-ESM1-5.ssp126.r1i1p1f1.Amon.rsut.gn.v20210318 institution_id: CSIRO long_name: TOA Outgoing Shortwave Radiation @@ -2466,6 +2534,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.ScenarioMIP.CSIRO.ACCESS-ESM1-5.ssp126.r1i1p1f1.Amon.tas.gn.v20210318 institution_id: CSIRO long_name: Near-Surface Air Temperature @@ -2502,6 +2571,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.ScenarioMIP.CSIRO.ACCESS-ESM1-5.ssp126.r1i1p1f1.Omon.tos.gn.v20210318 institution_id: CSIRO long_name: Sea Surface Temperature @@ -2538,6 +2608,7 @@ frequency: fx grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: null instance_id: CMIP6.ScenarioMIP.CSIRO.ACCESS-ESM1-5.ssp126.r1i1p1f1.fx.areacella.gn.v20210318 institution_id: CSIRO long_name: Grid-Cell Area for Atmospheric Grid Variables diff --git a/packages/climate-ref/tests/unit/datasets/test_cmip6/cmip6_catalog_local_complete.yml b/packages/climate-ref/tests/unit/datasets/test_cmip6/cmip6_catalog_local_complete.yml index 14b4418df..db1e4c69f 100644 --- a/packages/climate-ref/tests/unit/datasets/test_cmip6/cmip6_catalog_local_complete.yml +++ b/packages/climate-ref/tests/unit/datasets/test_cmip6/cmip6_catalog_local_complete.yml @@ -10,6 +10,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.C4MIP CDRMIP.CSIRO.ACCESS-ESM1-5.esm-1pct-brch-1000PgC.r1i1p1f1.Amon.tas.gn.v20191206 institution_id: CSIRO long_name: Near-Surface Air Temperature @@ -30,7 +31,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 0168-01-16 12:00:00-0268-12-16 12:00:00 units: K variable_id: tas variant_label: r1i1p1f1 @@ -48,6 +48,7 @@ frequency: fx grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.C4MIP CDRMIP.CSIRO.ACCESS-ESM1-5.esm-1pct-brch-1000PgC.r1i1p1f1.fx.areacella.gn.v20191206 institution_id: CSIRO long_name: Grid-Cell Area for Atmospheric Grid Variables @@ -68,7 +69,6 @@ sub_experiment: none sub_experiment_id: none table_id: fx - time_range: null units: m2 variable_id: areacella variant_label: r1i1p1f1 @@ -85,6 +85,7 @@ frequency: mon grid: gn grid_label: gn + init_year: .nan instance_id: CMIP6.C4MIP CDRMIP.MPI-M.MPI-ESM1-2-LR.esm-1pctCO2.r1i1p1f1.Amon.fco2antt.gn.v20190815 institution_id: MPI-M long_name: Carbon Mass Flux into Atmosphere Due to All Anthropogenic Emissions of @@ -106,7 +107,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 1850-01-16 12:00:00-1869-12-16 12:00:00 units: kg m-2 s-1 variable_id: fco2antt variant_label: r1i1p1f1 @@ -123,6 +123,7 @@ frequency: mon grid: gn grid_label: gn + init_year: .nan instance_id: CMIP6.C4MIP CDRMIP.MPI-M.MPI-ESM1-2-LR.esm-1pctCO2.r1i1p1f1.Amon.fco2antt.gn.v20190815 institution_id: MPI-M long_name: Carbon Mass Flux into Atmosphere Due to All Anthropogenic Emissions of @@ -144,7 +145,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 1870-01-16 12:00:00-1889-12-16 12:00:00 units: kg m-2 s-1 variable_id: fco2antt variant_label: r1i1p1f1 @@ -161,6 +161,7 @@ frequency: mon grid: gn grid_label: gn + init_year: .nan instance_id: CMIP6.C4MIP CDRMIP.MPI-M.MPI-ESM1-2-LR.esm-1pctCO2.r1i1p1f1.Amon.fco2antt.gn.v20190815 institution_id: MPI-M long_name: Carbon Mass Flux into Atmosphere Due to All Anthropogenic Emissions of @@ -182,7 +183,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 1890-01-16 12:00:00-1909-12-16 12:00:00 units: kg m-2 s-1 variable_id: fco2antt variant_label: r1i1p1f1 @@ -199,6 +199,7 @@ frequency: mon grid: gn grid_label: gn + init_year: .nan instance_id: CMIP6.C4MIP CDRMIP.MPI-M.MPI-ESM1-2-LR.esm-1pctCO2.r1i1p1f1.Amon.fco2antt.gn.v20190815 institution_id: MPI-M long_name: Carbon Mass Flux into Atmosphere Due to All Anthropogenic Emissions of @@ -220,7 +221,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 1910-01-16 12:00:00-1914-12-16 12:00:00 units: kg m-2 s-1 variable_id: fco2antt variant_label: r1i1p1f1 @@ -237,6 +237,7 @@ frequency: mon grid: gn grid_label: gn + init_year: .nan instance_id: CMIP6.C4MIP CDRMIP.MPI-M.MPI-ESM1-2-LR.esm-1pctCO2.r1i1p1f1.Amon.tas.gn.v20190815 institution_id: MPI-M long_name: Near-Surface Air Temperature @@ -257,7 +258,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 1850-01-16 12:00:00-1869-12-16 12:00:00 units: K variable_id: tas variant_label: r1i1p1f1 @@ -274,6 +274,7 @@ frequency: mon grid: gn grid_label: gn + init_year: .nan instance_id: CMIP6.C4MIP CDRMIP.MPI-M.MPI-ESM1-2-LR.esm-1pctCO2.r1i1p1f1.Amon.tas.gn.v20190815 institution_id: MPI-M long_name: Near-Surface Air Temperature @@ -294,7 +295,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 1870-01-16 12:00:00-1889-12-16 12:00:00 units: K variable_id: tas variant_label: r1i1p1f1 @@ -311,6 +311,7 @@ frequency: mon grid: gn grid_label: gn + init_year: .nan instance_id: CMIP6.C4MIP CDRMIP.MPI-M.MPI-ESM1-2-LR.esm-1pctCO2.r1i1p1f1.Amon.tas.gn.v20190815 institution_id: MPI-M long_name: Near-Surface Air Temperature @@ -331,7 +332,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 1890-01-16 12:00:00-1909-12-16 12:00:00 units: K variable_id: tas variant_label: r1i1p1f1 @@ -348,6 +348,7 @@ frequency: mon grid: gn grid_label: gn + init_year: .nan instance_id: CMIP6.C4MIP CDRMIP.MPI-M.MPI-ESM1-2-LR.esm-1pctCO2.r1i1p1f1.Amon.tas.gn.v20190815 institution_id: MPI-M long_name: Near-Surface Air Temperature @@ -368,7 +369,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 1910-01-16 12:00:00-1914-12-16 12:00:00 units: K variable_id: tas variant_label: r1i1p1f1 @@ -385,6 +385,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.1pctCO2.r1i1p1f1.Amon.tas.gn.v20191115 institution_id: CSIRO long_name: Near-Surface Air Temperature @@ -405,7 +406,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 0101-01-16 12:00:00-0250-12-16 12:00:00 units: K variable_id: tas variant_label: r1i1p1f1 @@ -422,6 +422,7 @@ frequency: fx grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.1pctCO2.r1i1p1f1.fx.areacella.gn.v20191115 institution_id: CSIRO long_name: Grid-Cell Area for Atmospheric Grid Variables @@ -442,7 +443,6 @@ sub_experiment: none sub_experiment_id: none table_id: fx - time_range: null units: m2 variable_id: areacella variant_label: r1i1p1f1 @@ -459,6 +459,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.abrupt-4xCO2.r1i1p1f1.Amon.rlut.gn.v20191115 institution_id: CSIRO long_name: TOA Outgoing Longwave Radiation @@ -479,7 +480,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 0101-01-16 12:00:00-0125-12-16 12:00:00 units: W m-2 variable_id: rlut variant_label: r1i1p1f1 @@ -496,6 +496,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.abrupt-4xCO2.r1i1p1f1.Amon.rsdt.gn.v20191115 institution_id: CSIRO long_name: TOA Incident Shortwave Radiation @@ -516,7 +517,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 0101-01-16 12:00:00-0125-12-16 12:00:00 units: W m-2 variable_id: rsdt variant_label: r1i1p1f1 @@ -533,6 +533,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.abrupt-4xCO2.r1i1p1f1.Amon.rsut.gn.v20191115 institution_id: CSIRO long_name: TOA Outgoing Shortwave Radiation @@ -553,7 +554,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 0101-01-16 12:00:00-0125-12-16 12:00:00 units: W m-2 variable_id: rsut variant_label: r1i1p1f1 @@ -570,6 +570,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.abrupt-4xCO2.r1i1p1f1.Amon.tas.gn.v20191115 institution_id: CSIRO long_name: Near-Surface Air Temperature @@ -590,7 +591,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 0101-01-16 12:00:00-0125-12-16 12:00:00 units: K variable_id: tas variant_label: r1i1p1f1 @@ -607,6 +607,7 @@ frequency: fx grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.abrupt-4xCO2.r1i1p1f1.fx.areacella.gn.v20191115 institution_id: CSIRO long_name: Grid-Cell Area for Atmospheric Grid Variables @@ -627,7 +628,6 @@ sub_experiment: none sub_experiment_id: none table_id: fx - time_range: null units: m2 variable_id: areacella variant_label: r1i1p1f1 @@ -644,6 +644,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.pr.gn.v20191115 institution_id: CSIRO long_name: Precipitation @@ -664,7 +665,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 1850-01-16 12:00:00-2014-12-16 12:00:00 units: kg m-2 s-1 variable_id: pr variant_label: r1i1p1f1 @@ -681,6 +681,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.psl.gn.v20191115 institution_id: CSIRO long_name: Sea Level Pressure @@ -701,7 +702,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 2000-01-16 12:00:00-2014-12-16 12:00:00 units: Pa variable_id: psl variant_label: r1i1p1f1 @@ -718,6 +718,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.rlut.gn.v20191115 institution_id: CSIRO long_name: TOA Outgoing Longwave Radiation @@ -738,7 +739,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 2000-01-16 12:00:00-2014-12-16 12:00:00 units: W m-2 variable_id: rlut variant_label: r1i1p1f1 @@ -755,6 +755,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.rlutcs.gn.v20191115 institution_id: CSIRO long_name: TOA Outgoing Clear-Sky Longwave Radiation @@ -775,7 +776,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 2005-01-16 12:00:00-2014-12-16 12:00:00 units: W m-2 variable_id: rlutcs variant_label: r1i1p1f1 @@ -792,6 +792,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.rsdt.gn.v20191115 institution_id: CSIRO long_name: TOA Incident Shortwave Radiation @@ -812,7 +813,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 2000-01-16 12:00:00-2014-12-16 12:00:00 units: W m-2 variable_id: rsdt variant_label: r1i1p1f1 @@ -829,6 +829,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.rsut.gn.v20191115 institution_id: CSIRO long_name: TOA Outgoing Shortwave Radiation @@ -849,7 +850,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 2000-01-16 12:00:00-2014-12-16 12:00:00 units: W m-2 variable_id: rsut variant_label: r1i1p1f1 @@ -866,6 +866,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.rsutcs.gn.v20191115 institution_id: CSIRO long_name: TOA Outgoing Clear-Sky Shortwave Radiation @@ -886,7 +887,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 2005-01-16 12:00:00-2014-12-16 12:00:00 units: W m-2 variable_id: rsutcs variant_label: r1i1p1f1 @@ -903,6 +903,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.tas.gn.v20191115 institution_id: CSIRO long_name: Near-Surface Air Temperature @@ -923,7 +924,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 1850-01-16 12:00:00-2014-12-16 12:00:00 units: K variable_id: tas variant_label: r1i1p1f1 @@ -940,6 +940,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.tauu.gn.v20191115 institution_id: CSIRO long_name: Surface Downward Eastward Wind Stress @@ -960,7 +961,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 1850-01-16 12:00:00-2014-12-16 12:00:00 units: Pa variable_id: tauu variant_label: r1i1p1f1 @@ -977,6 +977,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.ts.gn.v20191115 institution_id: CSIRO long_name: Surface Temperature @@ -997,7 +998,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 2000-01-16 12:00:00-2014-12-16 12:00:00 units: K variable_id: ts variant_label: r1i1p1f1 @@ -1014,6 +1014,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Emon.cSoil.gn.v20191115 institution_id: CSIRO long_name: Carbon Mass in Model Soil Pool @@ -1034,7 +1035,6 @@ sub_experiment: none sub_experiment_id: none table_id: Emon - time_range: 2000-01-16 12:00:00-2014-12-16 12:00:00 units: kg m-2 variable_id: cSoil variant_label: r1i1p1f1 @@ -1051,6 +1051,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Lmon.gpp.gn.v20191115 institution_id: CSIRO long_name: Carbon Mass Flux out of Atmosphere Due to Gross Primary Production on @@ -1072,7 +1073,6 @@ sub_experiment: none sub_experiment_id: none table_id: Lmon - time_range: 2000-01-16 12:00:00-2014-12-16 12:00:00 units: kg m-2 s-1 variable_id: gpp variant_label: r1i1p1f1 @@ -1089,6 +1089,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Lmon.lai.gn.v20191115 institution_id: CSIRO long_name: Leaf Area Index @@ -1109,7 +1110,6 @@ sub_experiment: none sub_experiment_id: none table_id: Lmon - time_range: 2000-01-16 12:00:00-2014-12-16 12:00:00 units: '1' variable_id: lai variant_label: r1i1p1f1 @@ -1126,6 +1126,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Lmon.mrro.gn.v20191115 institution_id: CSIRO long_name: Total Runoff @@ -1146,7 +1147,6 @@ sub_experiment: none sub_experiment_id: none table_id: Lmon - time_range: 2000-01-16 12:00:00-2014-12-16 12:00:00 units: kg m-2 s-1 variable_id: mrro variant_label: r1i1p1f1 @@ -1163,6 +1163,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Lmon.mrsos.gn.v20191115 institution_id: CSIRO long_name: Moisture in Upper Portion of Soil Column @@ -1183,7 +1184,6 @@ sub_experiment: none sub_experiment_id: none table_id: Lmon - time_range: 2000-01-16 12:00:00-2014-12-16 12:00:00 units: kg m-2 variable_id: mrsos variant_label: r1i1p1f1 @@ -1200,6 +1200,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Lmon.nbp.gn.v20191115 institution_id: CSIRO long_name: Carbon Mass Flux out of Atmosphere Due to Net Biospheric Production on @@ -1221,7 +1222,6 @@ sub_experiment: none sub_experiment_id: none table_id: Lmon - time_range: 1850-01-16 12:00:00-2014-12-16 12:00:00 units: kg m-2 s-1 variable_id: nbp variant_label: r1i1p1f1 @@ -1238,6 +1238,7 @@ frequency: fx grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Ofx.areacello.gn.v20191115 institution_id: CSIRO long_name: Grid-Cell Area for Ocean Variables @@ -1258,7 +1259,6 @@ sub_experiment: none sub_experiment_id: none table_id: Ofx - time_range: null units: m2 variable_id: areacello variant_label: r1i1p1f1 @@ -1275,6 +1275,7 @@ frequency: fx grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Ofx.sftof.gn.v20191115 institution_id: CSIRO long_name: Sea Area Percentage @@ -1295,7 +1296,6 @@ sub_experiment: none sub_experiment_id: none table_id: Ofx - time_range: null units: '%' variable_id: sftof variant_label: r1i1p1f1 @@ -1312,6 +1312,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Omon.msftmz.gn.v20191115 institution_id: CSIRO long_name: Ocean Meridional Overturning Mass Streamfunction @@ -1332,7 +1333,6 @@ sub_experiment: none sub_experiment_id: none table_id: Omon - time_range: 2000-01-16 12:00:00-2009-12-16 12:00:00 units: kg s-1 variable_id: msftmz variant_label: r1i1p1f1 @@ -1349,6 +1349,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Omon.msftmz.gn.v20191115 institution_id: CSIRO long_name: Ocean Meridional Overturning Mass Streamfunction @@ -1369,7 +1370,6 @@ sub_experiment: none sub_experiment_id: none table_id: Omon - time_range: 2010-01-16 12:00:00-2014-12-16 12:00:00 units: kg s-1 variable_id: msftmz variant_label: r1i1p1f1 @@ -1386,6 +1386,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Omon.sos.gn.v20191115 institution_id: CSIRO long_name: Sea Surface Salinity @@ -1406,7 +1407,6 @@ sub_experiment: none sub_experiment_id: none table_id: Omon - time_range: 2000-01-16 12:00:00-2014-12-16 12:00:00 units: '0.001' variable_id: sos variant_label: r1i1p1f1 @@ -1423,6 +1423,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Omon.tos.gn.v20191115 institution_id: CSIRO long_name: Sea Surface Temperature @@ -1443,7 +1444,6 @@ sub_experiment: none sub_experiment_id: none table_id: Omon - time_range: 1850-01-16 12:00:00-2014-12-16 12:00:00 units: degC variable_id: tos variant_label: r1i1p1f1 @@ -1460,6 +1460,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.SImon.siconc.gn.v20200817 institution_id: CSIRO long_name: Sea-Ice Area Percentage (Ocean Grid) @@ -1480,7 +1481,6 @@ sub_experiment: none sub_experiment_id: none table_id: SImon - time_range: 1979-01-16 12:00:00-2014-12-16 12:00:00 units: '%' variable_id: siconc variant_label: r1i1p1f1 @@ -1497,6 +1497,7 @@ frequency: fx grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.fx.areacella.gn.v20191115 institution_id: CSIRO long_name: Grid-Cell Area for Atmospheric Grid Variables @@ -1517,7 +1518,6 @@ sub_experiment: none sub_experiment_id: none table_id: fx - time_range: null units: m2 variable_id: areacella variant_label: r1i1p1f1 @@ -1534,6 +1534,7 @@ frequency: fx grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.fx.sftlf.gn.v20191115 institution_id: CSIRO long_name: Percentage of the grid cell occupied by land (including lakes) @@ -1554,7 +1555,6 @@ sub_experiment: none sub_experiment_id: none table_id: fx - time_range: null units: '%' variable_id: sftlf variant_label: r1i1p1f1 @@ -1571,6 +1571,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r2i1p1f1.Amon.psl.gn.v20191128 institution_id: CSIRO long_name: Sea Level Pressure @@ -1591,7 +1592,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 2000-01-16 12:00:00-2014-12-16 12:00:00 units: Pa variable_id: psl variant_label: r2i1p1f1 @@ -1608,6 +1608,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r2i1p1f1.Amon.ts.gn.v20191128 institution_id: CSIRO long_name: Surface Temperature @@ -1628,7 +1629,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 2000-01-16 12:00:00-2014-12-16 12:00:00 units: K variable_id: ts variant_label: r2i1p1f1 @@ -1645,6 +1645,7 @@ frequency: fx grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r2i1p1f1.fx.areacella.gn.v20191128 institution_id: CSIRO long_name: Grid-Cell Area for Atmospheric Grid Variables @@ -1665,7 +1666,6 @@ sub_experiment: none sub_experiment_id: none table_id: fx - time_range: null units: m2 variable_id: areacella variant_label: r2i1p1f1 @@ -1682,6 +1682,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.piControl.r1i1p1f1.Amon.rlut.gn.v20210316 institution_id: CSIRO long_name: TOA Outgoing Longwave Radiation @@ -1702,7 +1703,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 0101-01-16 12:00:00-0125-12-16 12:00:00 units: W m-2 variable_id: rlut variant_label: r1i1p1f1 @@ -1719,6 +1719,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.piControl.r1i1p1f1.Amon.rsdt.gn.v20210316 institution_id: CSIRO long_name: TOA Incident Shortwave Radiation @@ -1739,7 +1740,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 0101-01-16 12:00:00-0125-12-16 12:00:00 units: W m-2 variable_id: rsdt variant_label: r1i1p1f1 @@ -1756,6 +1756,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.piControl.r1i1p1f1.Amon.rsut.gn.v20210316 institution_id: CSIRO long_name: TOA Outgoing Shortwave Radiation @@ -1776,7 +1777,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 0101-01-16 12:00:00-0125-12-16 12:00:00 units: W m-2 variable_id: rsut variant_label: r1i1p1f1 @@ -1793,6 +1793,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.piControl.r1i1p1f1.Amon.tas.gn.v20210316 institution_id: CSIRO long_name: Near-Surface Air Temperature @@ -1813,7 +1814,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 0101-01-16 12:00:00-0180-12-16 12:00:00 units: K variable_id: tas variant_label: r1i1p1f1 @@ -1830,6 +1830,7 @@ frequency: fx grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.piControl.r1i1p1f1.fx.areacella.gn.v20210316 institution_id: CSIRO long_name: Grid-Cell Area for Atmospheric Grid Variables @@ -1850,7 +1851,6 @@ sub_experiment: none sub_experiment_id: none table_id: fx - time_range: null units: m2 variable_id: areacella variant_label: r1i1p1f1 @@ -1867,6 +1867,7 @@ frequency: mon grid: gn grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.MPI-M.MPI-ESM1-2-LR.esm-piControl.r1i1p1f1.Amon.tas.gn.v20190815 institution_id: MPI-M long_name: Near-Surface Air Temperature @@ -1887,7 +1888,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 1850-01-16 12:00:00-1869-12-16 12:00:00 units: K variable_id: tas variant_label: r1i1p1f1 @@ -1904,6 +1904,7 @@ frequency: mon grid: gn grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.MPI-M.MPI-ESM1-2-LR.esm-piControl.r1i1p1f1.Amon.tas.gn.v20190815 institution_id: MPI-M long_name: Near-Surface Air Temperature @@ -1924,7 +1925,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 1870-01-16 12:00:00-1889-12-16 12:00:00 units: K variable_id: tas variant_label: r1i1p1f1 @@ -1941,6 +1941,7 @@ frequency: mon grid: gn grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.MPI-M.MPI-ESM1-2-LR.esm-piControl.r1i1p1f1.Amon.tas.gn.v20190815 institution_id: MPI-M long_name: Near-Surface Air Temperature @@ -1961,7 +1962,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 1890-01-16 12:00:00-1909-12-16 12:00:00 units: K variable_id: tas variant_label: r1i1p1f1 @@ -1978,6 +1978,7 @@ frequency: mon grid: gn grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.MPI-M.MPI-ESM1-2-LR.esm-piControl.r1i1p1f1.Amon.tas.gn.v20190815 institution_id: MPI-M long_name: Near-Surface Air Temperature @@ -1998,7 +1999,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 1910-01-16 12:00:00-1915-12-16 12:00:00 units: K variable_id: tas variant_label: r1i1p1f1 @@ -2015,6 +2015,7 @@ frequency: fx grid: gn grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.MPI-M.MPI-ESM1-2-LR.esm-piControl.r1i1p1f1.fx.areacella.gn.v20190815 institution_id: MPI-M long_name: Grid-Cell Area for Atmospheric Grid Variables @@ -2035,7 +2036,6 @@ sub_experiment: none sub_experiment_id: none table_id: fx - time_range: null units: m2 variable_id: areacella variant_label: r1i1p1f1 @@ -2052,6 +2052,7 @@ frequency: mon grid: native 0.9x1.25 finite volume grid (192x288 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.NCAR.CESM2.historical.r1i1p1f1.ImonAnt.snc.gn.v20190308 institution_id: NCAR long_name: Snow Area Percentage @@ -2072,7 +2073,6 @@ sub_experiment: none sub_experiment_id: none table_id: ImonAnt - time_range: 2000-01-15 12:00:00-2014-12-15 12:00:00 units: '%' variable_id: snc variant_label: r1i1p1f1 @@ -2089,6 +2089,7 @@ frequency: mon grid: native 0.9x1.25 finite volume grid (192x288 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.NCAR.CESM2.historical.r1i1p1f1.ImonGre.snc.gn.v20190308 institution_id: NCAR long_name: Snow Area Percentage @@ -2109,7 +2110,6 @@ sub_experiment: none sub_experiment_id: none table_id: ImonGre - time_range: 2000-01-15 12:00:00-2014-12-15 12:00:00 units: '%' variable_id: snc variant_label: r1i1p1f1 @@ -2126,6 +2126,7 @@ frequency: mon grid: native 0.9x1.25 finite volume grid (192x288 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.NCAR.CESM2.historical.r1i1p1f1.LImon.snc.gn.v20190308 institution_id: NCAR long_name: Snow Area Percentage @@ -2146,7 +2147,6 @@ sub_experiment: none sub_experiment_id: none table_id: LImon - time_range: 2000-01-15 12:00:00-2014-12-15 12:00:00 units: '%' variable_id: snc variant_label: r1i1p1f1 @@ -2163,6 +2163,7 @@ frequency: mon grid: native 0.9x1.25 finite volume grid (192x288 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.NCAR.CESM2.historical.r1i1p1f1.Lmon.burntFractionAll.gn.v20190308 institution_id: NCAR long_name: Percentage of Entire Grid cell that is Covered by Burnt Vegetation (All @@ -2184,7 +2185,6 @@ sub_experiment: none sub_experiment_id: none table_id: Lmon - time_range: 2000-01-15 12:00:00-2014-12-15 12:00:00 units: '%' variable_id: burntFractionAll variant_label: r1i1p1f1 @@ -2201,6 +2201,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.DAMIP.CSIRO.ACCESS-ESM1-5.hist-GHG.r1i1p1f1.Amon.psl.gn.v20200615 institution_id: CSIRO long_name: Sea Level Pressure @@ -2221,7 +2222,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 2000-01-16 12:00:00-2020-12-16 12:00:00 units: Pa variable_id: psl variant_label: r1i1p1f1 @@ -2238,6 +2238,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.DAMIP.CSIRO.ACCESS-ESM1-5.hist-GHG.r1i1p1f1.Amon.ts.gn.v20200615 institution_id: CSIRO long_name: Surface Temperature @@ -2258,7 +2259,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 2000-01-16 12:00:00-2020-12-16 12:00:00 units: K variable_id: ts variant_label: r1i1p1f1 @@ -2275,6 +2275,7 @@ frequency: fx grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.DAMIP.CSIRO.ACCESS-ESM1-5.hist-GHG.r1i1p1f1.fx.areacella.gn.v20200615 institution_id: CSIRO long_name: Grid-Cell Area for Atmospheric Grid Variables @@ -2295,7 +2296,6 @@ sub_experiment: none sub_experiment_id: none table_id: fx - time_range: null units: m2 variable_id: areacella variant_label: r1i1p1f1 @@ -2312,6 +2312,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.DAMIP.CSIRO.ACCESS-ESM1-5.hist-GHG.r2i1p1f1.Amon.psl.gn.v20200615 institution_id: CSIRO long_name: Sea Level Pressure @@ -2332,7 +2333,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 2000-01-16 12:00:00-2020-12-16 12:00:00 units: Pa variable_id: psl variant_label: r2i1p1f1 @@ -2349,6 +2349,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.DAMIP.CSIRO.ACCESS-ESM1-5.hist-GHG.r2i1p1f1.Amon.ts.gn.v20200615 institution_id: CSIRO long_name: Surface Temperature @@ -2369,7 +2370,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 2000-01-16 12:00:00-2020-12-16 12:00:00 units: K variable_id: ts variant_label: r2i1p1f1 @@ -2386,6 +2386,7 @@ frequency: fx grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.DAMIP.CSIRO.ACCESS-ESM1-5.hist-GHG.r2i1p1f1.fx.areacella.gn.v20200615 institution_id: CSIRO long_name: Grid-Cell Area for Atmospheric Grid Variables @@ -2406,7 +2407,6 @@ sub_experiment: none sub_experiment_id: none table_id: fx - time_range: null units: m2 variable_id: areacella variant_label: r2i1p1f1 @@ -2423,6 +2423,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.ScenarioMIP.CSIRO.ACCESS-ESM1-5.ssp126.r1i1p1f1.Amon.pr.gn.v20210318 institution_id: CSIRO long_name: Precipitation @@ -2443,7 +2444,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 2015-01-16 12:00:00-2100-12-16 12:00:00 units: kg m-2 s-1 variable_id: pr variant_label: r1i1p1f1 @@ -2460,6 +2460,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.ScenarioMIP.CSIRO.ACCESS-ESM1-5.ssp126.r1i1p1f1.Amon.rsdt.gn.v20210318 institution_id: CSIRO long_name: TOA Incident Shortwave Radiation @@ -2480,7 +2481,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 2015-01-16 12:00:00-2025-12-16 12:00:00 units: W m-2 variable_id: rsdt variant_label: r1i1p1f1 @@ -2497,6 +2497,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.ScenarioMIP.CSIRO.ACCESS-ESM1-5.ssp126.r1i1p1f1.Amon.rsut.gn.v20210318 institution_id: CSIRO long_name: TOA Outgoing Shortwave Radiation @@ -2517,7 +2518,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 2015-01-16 12:00:00-2025-12-16 12:00:00 units: W m-2 variable_id: rsut variant_label: r1i1p1f1 @@ -2534,6 +2534,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.ScenarioMIP.CSIRO.ACCESS-ESM1-5.ssp126.r1i1p1f1.Amon.tas.gn.v20210318 institution_id: CSIRO long_name: Near-Surface Air Temperature @@ -2554,7 +2555,6 @@ sub_experiment: none sub_experiment_id: none table_id: Amon - time_range: 2015-01-16 12:00:00-2100-12-16 12:00:00 units: K variable_id: tas variant_label: r1i1p1f1 @@ -2571,6 +2571,7 @@ frequency: mon grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.ScenarioMIP.CSIRO.ACCESS-ESM1-5.ssp126.r1i1p1f1.Omon.tos.gn.v20210318 institution_id: CSIRO long_name: Sea Surface Temperature @@ -2591,7 +2592,6 @@ sub_experiment: none sub_experiment_id: none table_id: Omon - time_range: 2015-01-16 12:00:00-2025-12-16 12:00:00 units: degC variable_id: tos variant_label: r1i1p1f1 @@ -2608,6 +2608,7 @@ frequency: fx grid: native atmosphere N96 grid (145x192 latxlon) grid_label: gn + init_year: .nan instance_id: CMIP6.ScenarioMIP.CSIRO.ACCESS-ESM1-5.ssp126.r1i1p1f1.fx.areacella.gn.v20210318 institution_id: CSIRO long_name: Grid-Cell Area for Atmospheric Grid Variables @@ -2628,7 +2629,6 @@ sub_experiment: none sub_experiment_id: none table_id: fx - time_range: null units: m2 variable_id: areacella variant_label: r1i1p1f1 diff --git a/packages/climate-ref/tests/unit/datasets/test_cmip6/cmip6_catalog_local_drs.yml b/packages/climate-ref/tests/unit/datasets/test_cmip6/cmip6_catalog_local_drs.yml index 0ace792fa..9e91cf334 100644 --- a/packages/climate-ref/tests/unit/datasets/test_cmip6/cmip6_catalog_local_drs.yml +++ b/packages/climate-ref/tests/unit/datasets/test_cmip6/cmip6_catalog_local_drs.yml @@ -9,6 +9,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.C4MIP.CSIRO.ACCESS-ESM1-5.esm-1pct-brch-1000PgC.r1i1p1f1.Amon.tas.gn.v20191206 institution_id: CSIRO long_name: .nan @@ -29,7 +30,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 016801-026812 units: .nan variable_id: tas variant_label: r1i1p1f1 @@ -46,6 +46,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.C4MIP.CSIRO.ACCESS-ESM1-5.esm-1pct-brch-1000PgC.r1i1p1f1.fx.areacella.gn.v20191206 institution_id: CSIRO long_name: .nan @@ -66,7 +67,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: fx - time_range: .nan units: .nan variable_id: areacella variant_label: r1i1p1f1 @@ -83,6 +83,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.C4MIP.MPI-M.MPI-ESM1-2-LR.esm-1pctCO2.r1i1p1f1.Amon.fco2antt.gn.v20190815 institution_id: MPI-M long_name: .nan @@ -103,7 +104,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 185001-186912 units: .nan variable_id: fco2antt variant_label: r1i1p1f1 @@ -120,6 +120,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.C4MIP.MPI-M.MPI-ESM1-2-LR.esm-1pctCO2.r1i1p1f1.Amon.fco2antt.gn.v20190815 institution_id: MPI-M long_name: .nan @@ -140,7 +141,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 187001-188912 units: .nan variable_id: fco2antt variant_label: r1i1p1f1 @@ -157,6 +157,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.C4MIP.MPI-M.MPI-ESM1-2-LR.esm-1pctCO2.r1i1p1f1.Amon.fco2antt.gn.v20190815 institution_id: MPI-M long_name: .nan @@ -177,7 +178,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 189001-190912 units: .nan variable_id: fco2antt variant_label: r1i1p1f1 @@ -194,6 +194,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.C4MIP.MPI-M.MPI-ESM1-2-LR.esm-1pctCO2.r1i1p1f1.Amon.fco2antt.gn.v20190815 institution_id: MPI-M long_name: .nan @@ -214,7 +215,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 191001-191412 units: .nan variable_id: fco2antt variant_label: r1i1p1f1 @@ -231,6 +231,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.C4MIP.MPI-M.MPI-ESM1-2-LR.esm-1pctCO2.r1i1p1f1.Amon.tas.gn.v20190815 institution_id: MPI-M long_name: .nan @@ -251,7 +252,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 185001-186912 units: .nan variable_id: tas variant_label: r1i1p1f1 @@ -268,6 +268,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.C4MIP.MPI-M.MPI-ESM1-2-LR.esm-1pctCO2.r1i1p1f1.Amon.tas.gn.v20190815 institution_id: MPI-M long_name: .nan @@ -288,7 +289,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 187001-188912 units: .nan variable_id: tas variant_label: r1i1p1f1 @@ -305,6 +305,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.C4MIP.MPI-M.MPI-ESM1-2-LR.esm-1pctCO2.r1i1p1f1.Amon.tas.gn.v20190815 institution_id: MPI-M long_name: .nan @@ -325,7 +326,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 189001-190912 units: .nan variable_id: tas variant_label: r1i1p1f1 @@ -342,6 +342,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.C4MIP.MPI-M.MPI-ESM1-2-LR.esm-1pctCO2.r1i1p1f1.Amon.tas.gn.v20190815 institution_id: MPI-M long_name: .nan @@ -362,7 +363,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 191001-191412 units: .nan variable_id: tas variant_label: r1i1p1f1 @@ -379,6 +379,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.1pctCO2.r1i1p1f1.Amon.tas.gn.v20191115 institution_id: CSIRO long_name: .nan @@ -399,7 +400,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 010101-025012 units: .nan variable_id: tas variant_label: r1i1p1f1 @@ -416,6 +416,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.1pctCO2.r1i1p1f1.fx.areacella.gn.v20191115 institution_id: CSIRO long_name: .nan @@ -436,7 +437,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: fx - time_range: .nan units: .nan variable_id: areacella variant_label: r1i1p1f1 @@ -453,6 +453,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.abrupt-4xCO2.r1i1p1f1.Amon.rlut.gn.v20191115 institution_id: CSIRO long_name: .nan @@ -473,7 +474,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 010101-012512 units: .nan variable_id: rlut variant_label: r1i1p1f1 @@ -490,6 +490,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.abrupt-4xCO2.r1i1p1f1.Amon.rsdt.gn.v20191115 institution_id: CSIRO long_name: .nan @@ -510,7 +511,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 010101-012512 units: .nan variable_id: rsdt variant_label: r1i1p1f1 @@ -527,6 +527,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.abrupt-4xCO2.r1i1p1f1.Amon.rsut.gn.v20191115 institution_id: CSIRO long_name: .nan @@ -547,7 +548,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 010101-012512 units: .nan variable_id: rsut variant_label: r1i1p1f1 @@ -564,6 +564,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.abrupt-4xCO2.r1i1p1f1.Amon.tas.gn.v20191115 institution_id: CSIRO long_name: .nan @@ -584,7 +585,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 010101-012512 units: .nan variable_id: tas variant_label: r1i1p1f1 @@ -601,6 +601,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.abrupt-4xCO2.r1i1p1f1.fx.areacella.gn.v20191115 institution_id: CSIRO long_name: .nan @@ -621,7 +622,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: fx - time_range: .nan units: .nan variable_id: areacella variant_label: r1i1p1f1 @@ -638,6 +638,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.pr.gn.v20191115 institution_id: CSIRO long_name: .nan @@ -658,7 +659,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 185001-201412 units: .nan variable_id: pr variant_label: r1i1p1f1 @@ -675,6 +675,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.psl.gn.v20191115 institution_id: CSIRO long_name: .nan @@ -695,7 +696,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 200001-201412 units: .nan variable_id: psl variant_label: r1i1p1f1 @@ -712,6 +712,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.rlut.gn.v20191115 institution_id: CSIRO long_name: .nan @@ -732,7 +733,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 200001-201412 units: .nan variable_id: rlut variant_label: r1i1p1f1 @@ -749,6 +749,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.rlutcs.gn.v20191115 institution_id: CSIRO long_name: .nan @@ -769,7 +770,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 200501-201412 units: .nan variable_id: rlutcs variant_label: r1i1p1f1 @@ -786,6 +786,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.rsdt.gn.v20191115 institution_id: CSIRO long_name: .nan @@ -806,7 +807,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 200001-201412 units: .nan variable_id: rsdt variant_label: r1i1p1f1 @@ -823,6 +823,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.rsut.gn.v20191115 institution_id: CSIRO long_name: .nan @@ -843,7 +844,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 200001-201412 units: .nan variable_id: rsut variant_label: r1i1p1f1 @@ -860,6 +860,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.rsutcs.gn.v20191115 institution_id: CSIRO long_name: .nan @@ -880,7 +881,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 200501-201412 units: .nan variable_id: rsutcs variant_label: r1i1p1f1 @@ -897,6 +897,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.tas.gn.v20191115 institution_id: CSIRO long_name: .nan @@ -917,7 +918,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 185001-201412 units: .nan variable_id: tas variant_label: r1i1p1f1 @@ -934,6 +934,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.tauu.gn.v20191115 institution_id: CSIRO long_name: .nan @@ -954,7 +955,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 185001-201412 units: .nan variable_id: tauu variant_label: r1i1p1f1 @@ -971,6 +971,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Amon.ts.gn.v20191115 institution_id: CSIRO long_name: .nan @@ -991,7 +992,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 200001-201412 units: .nan variable_id: ts variant_label: r1i1p1f1 @@ -1008,6 +1008,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Emon.cSoil.gn.v20191115 institution_id: CSIRO long_name: .nan @@ -1028,7 +1029,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Emon - time_range: 200001-201412 units: .nan variable_id: cSoil variant_label: r1i1p1f1 @@ -1045,6 +1045,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Lmon.gpp.gn.v20191115 institution_id: CSIRO long_name: .nan @@ -1065,7 +1066,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Lmon - time_range: 200001-201412 units: .nan variable_id: gpp variant_label: r1i1p1f1 @@ -1082,6 +1082,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Lmon.lai.gn.v20191115 institution_id: CSIRO long_name: .nan @@ -1102,7 +1103,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Lmon - time_range: 200001-201412 units: .nan variable_id: lai variant_label: r1i1p1f1 @@ -1119,6 +1119,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Lmon.mrro.gn.v20191115 institution_id: CSIRO long_name: .nan @@ -1139,7 +1140,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Lmon - time_range: 200001-201412 units: .nan variable_id: mrro variant_label: r1i1p1f1 @@ -1156,6 +1156,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Lmon.mrsos.gn.v20191115 institution_id: CSIRO long_name: .nan @@ -1176,7 +1177,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Lmon - time_range: 200001-201412 units: .nan variable_id: mrsos variant_label: r1i1p1f1 @@ -1193,6 +1193,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Lmon.nbp.gn.v20191115 institution_id: CSIRO long_name: .nan @@ -1213,7 +1214,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Lmon - time_range: 185001-201412 units: .nan variable_id: nbp variant_label: r1i1p1f1 @@ -1230,6 +1230,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Ofx.areacello.gn.v20191115 institution_id: CSIRO long_name: .nan @@ -1250,7 +1251,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Ofx - time_range: .nan units: .nan variable_id: areacello variant_label: r1i1p1f1 @@ -1267,6 +1267,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Ofx.sftof.gn.v20191115 institution_id: CSIRO long_name: .nan @@ -1287,7 +1288,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Ofx - time_range: .nan units: .nan variable_id: sftof variant_label: r1i1p1f1 @@ -1304,6 +1304,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Omon.msftmz.gn.v20191115 institution_id: CSIRO long_name: .nan @@ -1324,7 +1325,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Omon - time_range: 200001-200912 units: .nan variable_id: msftmz variant_label: r1i1p1f1 @@ -1341,6 +1341,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Omon.msftmz.gn.v20191115 institution_id: CSIRO long_name: .nan @@ -1361,7 +1362,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Omon - time_range: 201001-201412 units: .nan variable_id: msftmz variant_label: r1i1p1f1 @@ -1378,6 +1378,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Omon.sos.gn.v20191115 institution_id: CSIRO long_name: .nan @@ -1398,7 +1399,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Omon - time_range: 200001-201412 units: .nan variable_id: sos variant_label: r1i1p1f1 @@ -1415,6 +1415,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.Omon.tos.gn.v20191115 institution_id: CSIRO long_name: .nan @@ -1435,7 +1436,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Omon - time_range: 185001-201412 units: .nan variable_id: tos variant_label: r1i1p1f1 @@ -1452,6 +1452,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.SImon.siconc.gn.v20200817 institution_id: CSIRO long_name: .nan @@ -1472,7 +1473,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: SImon - time_range: 197901-201412 units: .nan variable_id: siconc variant_label: r1i1p1f1 @@ -1489,6 +1489,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.fx.areacella.gn.v20191115 institution_id: CSIRO long_name: .nan @@ -1509,7 +1510,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: fx - time_range: .nan units: .nan variable_id: areacella variant_label: r1i1p1f1 @@ -1526,6 +1526,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r1i1p1f1.fx.sftlf.gn.v20191115 institution_id: CSIRO long_name: .nan @@ -1546,7 +1547,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: fx - time_range: .nan units: .nan variable_id: sftlf variant_label: r1i1p1f1 @@ -1563,6 +1563,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r2i1p1f1.Amon.psl.gn.v20191128 institution_id: CSIRO long_name: .nan @@ -1583,7 +1584,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 200001-201412 units: .nan variable_id: psl variant_label: r2i1p1f1 @@ -1600,6 +1600,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r2i1p1f1.Amon.ts.gn.v20191128 institution_id: CSIRO long_name: .nan @@ -1620,7 +1621,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 200001-201412 units: .nan variable_id: ts variant_label: r2i1p1f1 @@ -1637,6 +1637,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.historical.r2i1p1f1.fx.areacella.gn.v20191128 institution_id: CSIRO long_name: .nan @@ -1657,7 +1658,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: fx - time_range: .nan units: .nan variable_id: areacella variant_label: r2i1p1f1 @@ -1674,6 +1674,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.piControl.r1i1p1f1.Amon.rlut.gn.v20210316 institution_id: CSIRO long_name: .nan @@ -1694,7 +1695,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 010101-012512 units: .nan variable_id: rlut variant_label: r1i1p1f1 @@ -1711,6 +1711,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.piControl.r1i1p1f1.Amon.rsdt.gn.v20210316 institution_id: CSIRO long_name: .nan @@ -1731,7 +1732,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 010101-012512 units: .nan variable_id: rsdt variant_label: r1i1p1f1 @@ -1748,6 +1748,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.piControl.r1i1p1f1.Amon.rsut.gn.v20210316 institution_id: CSIRO long_name: .nan @@ -1768,7 +1769,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 010101-012512 units: .nan variable_id: rsut variant_label: r1i1p1f1 @@ -1785,6 +1785,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.piControl.r1i1p1f1.Amon.tas.gn.v20210316 institution_id: CSIRO long_name: .nan @@ -1805,7 +1806,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 010101-018012 units: .nan variable_id: tas variant_label: r1i1p1f1 @@ -1822,6 +1822,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.CSIRO.ACCESS-ESM1-5.piControl.r1i1p1f1.fx.areacella.gn.v20210316 institution_id: CSIRO long_name: .nan @@ -1842,7 +1843,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: fx - time_range: .nan units: .nan variable_id: areacella variant_label: r1i1p1f1 @@ -1859,6 +1859,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.MPI-M.MPI-ESM1-2-LR.esm-piControl.r1i1p1f1.Amon.tas.gn.v20190815 institution_id: MPI-M long_name: .nan @@ -1879,7 +1880,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 185001-186912 units: .nan variable_id: tas variant_label: r1i1p1f1 @@ -1896,6 +1896,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.MPI-M.MPI-ESM1-2-LR.esm-piControl.r1i1p1f1.Amon.tas.gn.v20190815 institution_id: MPI-M long_name: .nan @@ -1916,7 +1917,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 187001-188912 units: .nan variable_id: tas variant_label: r1i1p1f1 @@ -1933,6 +1933,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.MPI-M.MPI-ESM1-2-LR.esm-piControl.r1i1p1f1.Amon.tas.gn.v20190815 institution_id: MPI-M long_name: .nan @@ -1953,7 +1954,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 189001-190912 units: .nan variable_id: tas variant_label: r1i1p1f1 @@ -1970,6 +1970,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.MPI-M.MPI-ESM1-2-LR.esm-piControl.r1i1p1f1.Amon.tas.gn.v20190815 institution_id: MPI-M long_name: .nan @@ -1990,7 +1991,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 191001-191512 units: .nan variable_id: tas variant_label: r1i1p1f1 @@ -2007,6 +2007,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.MPI-M.MPI-ESM1-2-LR.esm-piControl.r1i1p1f1.fx.areacella.gn.v20190815 institution_id: MPI-M long_name: .nan @@ -2027,7 +2028,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: fx - time_range: .nan units: .nan variable_id: areacella variant_label: r1i1p1f1 @@ -2044,6 +2044,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.NCAR.CESM2.historical.r1i1p1f1.ImonAnt.snc.gn.v20190308 institution_id: NCAR long_name: .nan @@ -2064,7 +2065,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: ImonAnt - time_range: 200001-201412 units: .nan variable_id: snc variant_label: r1i1p1f1 @@ -2081,6 +2081,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.NCAR.CESM2.historical.r1i1p1f1.ImonGre.snc.gn.v20190308 institution_id: NCAR long_name: .nan @@ -2101,7 +2102,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: ImonGre - time_range: 200001-201412 units: .nan variable_id: snc variant_label: r1i1p1f1 @@ -2118,6 +2118,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.NCAR.CESM2.historical.r1i1p1f1.LImon.snc.gn.v20190308 institution_id: NCAR long_name: .nan @@ -2138,7 +2139,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: LImon - time_range: 200001-201412 units: .nan variable_id: snc variant_label: r1i1p1f1 @@ -2155,6 +2155,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.CMIP.NCAR.CESM2.historical.r1i1p1f1.Lmon.burntFractionAll.gn.v20190308 institution_id: NCAR long_name: .nan @@ -2175,7 +2176,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Lmon - time_range: 200001-201412 units: .nan variable_id: burntFractionAll variant_label: r1i1p1f1 @@ -2192,6 +2192,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.DAMIP.CSIRO.ACCESS-ESM1-5.hist-GHG.r1i1p1f1.Amon.psl.gn.v20200615 institution_id: CSIRO long_name: .nan @@ -2212,7 +2213,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 200001-202012 units: .nan variable_id: psl variant_label: r1i1p1f1 @@ -2229,6 +2229,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.DAMIP.CSIRO.ACCESS-ESM1-5.hist-GHG.r1i1p1f1.Amon.ts.gn.v20200615 institution_id: CSIRO long_name: .nan @@ -2249,7 +2250,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 200001-202012 units: .nan variable_id: ts variant_label: r1i1p1f1 @@ -2266,6 +2266,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.DAMIP.CSIRO.ACCESS-ESM1-5.hist-GHG.r1i1p1f1.fx.areacella.gn.v20200615 institution_id: CSIRO long_name: .nan @@ -2286,7 +2287,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: fx - time_range: .nan units: .nan variable_id: areacella variant_label: r1i1p1f1 @@ -2303,6 +2303,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.DAMIP.CSIRO.ACCESS-ESM1-5.hist-GHG.r2i1p1f1.Amon.psl.gn.v20200615 institution_id: CSIRO long_name: .nan @@ -2323,7 +2324,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 200001-202012 units: .nan variable_id: psl variant_label: r2i1p1f1 @@ -2340,6 +2340,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.DAMIP.CSIRO.ACCESS-ESM1-5.hist-GHG.r2i1p1f1.Amon.ts.gn.v20200615 institution_id: CSIRO long_name: .nan @@ -2360,7 +2361,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 200001-202012 units: .nan variable_id: ts variant_label: r2i1p1f1 @@ -2377,6 +2377,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.DAMIP.CSIRO.ACCESS-ESM1-5.hist-GHG.r2i1p1f1.fx.areacella.gn.v20200615 institution_id: CSIRO long_name: .nan @@ -2397,7 +2398,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: fx - time_range: .nan units: .nan variable_id: areacella variant_label: r2i1p1f1 @@ -2414,6 +2414,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.ScenarioMIP.CSIRO.ACCESS-ESM1-5.ssp126.r1i1p1f1.Amon.pr.gn.v20210318 institution_id: CSIRO long_name: .nan @@ -2434,7 +2435,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 201501-210012 units: .nan variable_id: pr variant_label: r1i1p1f1 @@ -2451,6 +2451,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.ScenarioMIP.CSIRO.ACCESS-ESM1-5.ssp126.r1i1p1f1.Amon.rsdt.gn.v20210318 institution_id: CSIRO long_name: .nan @@ -2471,7 +2472,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 201501-202512 units: .nan variable_id: rsdt variant_label: r1i1p1f1 @@ -2488,6 +2488,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.ScenarioMIP.CSIRO.ACCESS-ESM1-5.ssp126.r1i1p1f1.Amon.rsut.gn.v20210318 institution_id: CSIRO long_name: .nan @@ -2508,7 +2509,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 201501-202512 units: .nan variable_id: rsut variant_label: r1i1p1f1 @@ -2525,6 +2525,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.ScenarioMIP.CSIRO.ACCESS-ESM1-5.ssp126.r1i1p1f1.Amon.tas.gn.v20210318 institution_id: CSIRO long_name: .nan @@ -2545,7 +2546,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Amon - time_range: 201501-210012 units: .nan variable_id: tas variant_label: r1i1p1f1 @@ -2562,6 +2562,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.ScenarioMIP.CSIRO.ACCESS-ESM1-5.ssp126.r1i1p1f1.Omon.tos.gn.v20210318 institution_id: CSIRO long_name: .nan @@ -2582,7 +2583,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: Omon - time_range: 201501-202512 units: .nan variable_id: tos variant_label: r1i1p1f1 @@ -2599,6 +2599,7 @@ frequency: .nan grid: .nan grid_label: gn + init_year: .nan instance_id: CMIP6.ScenarioMIP.CSIRO.ACCESS-ESM1-5.ssp126.r1i1p1f1.fx.areacella.gn.v20210318 institution_id: CSIRO long_name: .nan @@ -2619,7 +2620,6 @@ sub_experiment: .nan sub_experiment_id: .nan table_id: fx - time_range: .nan units: .nan variable_id: areacella variant_label: r1i1p1f1 diff --git a/packages/climate-ref/tests/unit/datasets/test_obs4mips.py b/packages/climate-ref/tests/unit/datasets/test_obs4mips.py index 59e643ddc..6d1291d21 100644 --- a/packages/climate-ref/tests/unit/datasets/test_obs4mips.py +++ b/packages/climate-ref/tests/unit/datasets/test_obs4mips.py @@ -46,7 +46,6 @@ def test_empty_dir(): "source_type": "satellite_blended", "source_version_number": "v20210727", "start_time": "1870-01-16 11:59:59.464417", - "time_range": "1870-01-16 11:59:59.464417-2019-07-16 12:00:00", "units": "K", "variable_id": "ts", "variant_label": "PCMDI", @@ -114,12 +113,7 @@ def test_load_catalog(self, db_seeded, catalog_regression, sample_data_dir): def test_round_trip(self, db_seeded, obs4mips_data_catalog, sample_data_dir): # Indexes and ordering may be different adapter = Obs4MIPsDatasetAdapter() - local_data_catalog = ( - obs4mips_data_catalog.drop(columns=["time_range"]) - .sort_values(["instance_id"]) - .reset_index(drop=True) - ) - + local_data_catalog = obs4mips_data_catalog.sort_values(["instance_id"]).reset_index(drop=True) db_data_catalog = adapter.load_catalog(db_seeded).sort_values(["instance_id"]).reset_index(drop=True) # TODO: start_time has a different dtype from the database due to pandas dt coercion @@ -131,9 +125,8 @@ def test_load_local_datasets(self, sample_data_dir, catalog_regression): adapter = Obs4MIPsDatasetAdapter() data_catalog = adapter.find_local_datasets(str(sample_data_dir / "obs4REF")) - # TODO: add time_range to the db? assert sorted(data_catalog.columns.tolist()) == sorted( - [*adapter.dataset_specific_metadata, *adapter.file_specific_metadata, "time_range"] + [*adapter.dataset_specific_metadata, *adapter.file_specific_metadata] ) catalog_regression( diff --git a/packages/climate-ref/tests/unit/datasets/test_pmp_climatology.py b/packages/climate-ref/tests/unit/datasets/test_pmp_climatology.py index 13db5491f..8c97ed6b0 100644 --- a/packages/climate-ref/tests/unit/datasets/test_pmp_climatology.py +++ b/packages/climate-ref/tests/unit/datasets/test_pmp_climatology.py @@ -25,9 +25,8 @@ def test_load_local_datasets(self, sample_data_dir, catalog_regression): adapter = PMPClimatologyDatasetAdapter() data_catalog = adapter.find_local_datasets(str(sample_data_dir / "obs4REF")) - # TODO: add time_range to the db? assert sorted(data_catalog.columns.tolist()) == sorted( - [*adapter.dataset_specific_metadata, *adapter.file_specific_metadata, "time_range"] + [*adapter.dataset_specific_metadata, *adapter.file_specific_metadata] ) catalog_regression(