climate-ref 0.5.2__py3-none-any.whl → 0.5.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- climate_ref/cli/solve.py +14 -1
- climate_ref/config.py +10 -0
- climate_ref/database.py +46 -0
- climate_ref/dataset_registry/obs4ref_reference.txt +35 -1
- climate_ref/dataset_registry/sample_data.txt +105 -74
- climate_ref/datasets/cmip6.py +87 -2
- climate_ref/executor/result_handling.py +17 -16
- climate_ref/provider_registry.py +2 -1
- climate_ref/solver.py +39 -8
- climate_ref/testing.py +1 -1
- {climate_ref-0.5.2.dist-info → climate_ref-0.5.4.dist-info}/METADATA +3 -3
- {climate_ref-0.5.2.dist-info → climate_ref-0.5.4.dist-info}/RECORD +16 -16
- {climate_ref-0.5.2.dist-info → climate_ref-0.5.4.dist-info}/WHEEL +0 -0
- {climate_ref-0.5.2.dist-info → climate_ref-0.5.4.dist-info}/entry_points.txt +0 -0
- {climate_ref-0.5.2.dist-info → climate_ref-0.5.4.dist-info}/licenses/LICENCE +0 -0
- {climate_ref-0.5.2.dist-info → climate_ref-0.5.4.dist-info}/licenses/NOTICE +0 -0
climate_ref/cli/solve.py
CHANGED
|
@@ -10,6 +10,12 @@ def solve(
|
|
|
10
10
|
ctx: typer.Context,
|
|
11
11
|
dry_run: bool = typer.Option(False, help="Do not execute any diagnostics"),
|
|
12
12
|
timeout: int = typer.Option(60, help="Timeout in seconds for the solve operation"),
|
|
13
|
+
one_per_provider: bool = typer.Option(
|
|
14
|
+
False, help="Limit to one execution per provider. This is useful for testing"
|
|
15
|
+
),
|
|
16
|
+
one_per_diagnostic: bool = typer.Option(
|
|
17
|
+
False, help="Limit to one execution per diagnostic. This is useful for testing"
|
|
18
|
+
),
|
|
13
19
|
) -> None:
|
|
14
20
|
"""
|
|
15
21
|
Solve for executions that require recalculation
|
|
@@ -19,4 +25,11 @@ def solve(
|
|
|
19
25
|
"""
|
|
20
26
|
config = ctx.obj.config
|
|
21
27
|
db = ctx.obj.database
|
|
22
|
-
solve_required_executions(
|
|
28
|
+
solve_required_executions(
|
|
29
|
+
config=config,
|
|
30
|
+
db=db,
|
|
31
|
+
dry_run=dry_run,
|
|
32
|
+
timeout=timeout,
|
|
33
|
+
one_per_provider=one_per_provider,
|
|
34
|
+
one_per_diagnostic=one_per_diagnostic,
|
|
35
|
+
)
|
climate_ref/config.py
CHANGED
|
@@ -276,6 +276,16 @@ class DbConfig:
|
|
|
276
276
|
"""
|
|
277
277
|
run_migrations: bool = field(default=True)
|
|
278
278
|
|
|
279
|
+
max_backups: int = env_field(name="MAX_BACKUPS", default=5)
|
|
280
|
+
"""
|
|
281
|
+
Maximum number of database backups to keep.
|
|
282
|
+
|
|
283
|
+
|
|
284
|
+
When running migrations for on-disk SQLite databases, a backup of the database is created.
|
|
285
|
+
This setting controls how many of these backups are retained.
|
|
286
|
+
The oldest backups are automatically removed when this limit is exceeded.
|
|
287
|
+
"""
|
|
288
|
+
|
|
279
289
|
@database_url.default
|
|
280
290
|
def _connection_url_factory(self) -> str:
|
|
281
291
|
filename = env.path("REF_CONFIGURATION") / "db" / "climate_ref.db"
|
climate_ref/database.py
CHANGED
|
@@ -9,6 +9,8 @@ It provides a session object that can be used to interact with the database and
|
|
|
9
9
|
"""
|
|
10
10
|
|
|
11
11
|
import importlib.resources
|
|
12
|
+
import shutil
|
|
13
|
+
from datetime import datetime
|
|
12
14
|
from pathlib import Path
|
|
13
15
|
from typing import TYPE_CHECKING, Any
|
|
14
16
|
from urllib import parse as urlparse
|
|
@@ -53,6 +55,44 @@ def _get_database_revision(connection: sqlalchemy.engine.Connection) -> str | No
|
|
|
53
55
|
return current_rev
|
|
54
56
|
|
|
55
57
|
|
|
58
|
+
def _create_backup(db_path: Path, max_backups: int) -> Path:
|
|
59
|
+
"""
|
|
60
|
+
Create a backup of the database file
|
|
61
|
+
|
|
62
|
+
Parameters
|
|
63
|
+
----------
|
|
64
|
+
db_path
|
|
65
|
+
Path to the database file
|
|
66
|
+
max_backups
|
|
67
|
+
Maximum number of backups to keep
|
|
68
|
+
|
|
69
|
+
Returns
|
|
70
|
+
-------
|
|
71
|
+
:
|
|
72
|
+
Path to the backup file
|
|
73
|
+
"""
|
|
74
|
+
if not db_path.exists():
|
|
75
|
+
logger.warning(f"Database file {db_path} does not exist, skipping backup")
|
|
76
|
+
return db_path
|
|
77
|
+
|
|
78
|
+
backup_dir = db_path.parent / "backups"
|
|
79
|
+
backup_dir.mkdir(exist_ok=True)
|
|
80
|
+
|
|
81
|
+
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
|
82
|
+
backup_path = backup_dir / f"{db_path.stem}_{timestamp}{db_path.suffix}"
|
|
83
|
+
|
|
84
|
+
logger.info(f"Creating backup of database at {backup_path}")
|
|
85
|
+
shutil.copy2(db_path, backup_path)
|
|
86
|
+
|
|
87
|
+
# Clean up old backups
|
|
88
|
+
backups = sorted(backup_dir.glob(f"{db_path.stem}_*{db_path.suffix}"), reverse=True)
|
|
89
|
+
for old_backup in backups[max_backups:]:
|
|
90
|
+
logger.info(f"Removing old backup {old_backup}")
|
|
91
|
+
old_backup.unlink()
|
|
92
|
+
|
|
93
|
+
return backup_path
|
|
94
|
+
|
|
95
|
+
|
|
56
96
|
def validate_database_url(database_url: str) -> str:
|
|
57
97
|
"""
|
|
58
98
|
Validate a database URL
|
|
@@ -153,6 +193,12 @@ class Database:
|
|
|
153
193
|
"Please delete your database and start again."
|
|
154
194
|
)
|
|
155
195
|
|
|
196
|
+
# Create backup before running migrations
|
|
197
|
+
split_url = urlparse.urlsplit(self.url)
|
|
198
|
+
if split_url.scheme == "sqlite" and split_url.path != ":memory:":
|
|
199
|
+
db_path = Path(split_url.path[1:])
|
|
200
|
+
_create_backup(db_path, config.db.max_backups)
|
|
201
|
+
|
|
156
202
|
alembic.command.upgrade(self.alembic_config(config), "heads")
|
|
157
203
|
|
|
158
204
|
@staticmethod
|
|
@@ -1,2 +1,36 @@
|
|
|
1
|
-
obs4REF/
|
|
1
|
+
obs4REF/ECMWF/ERA-20C/mon/psl/gn/v20210727/psl_mon_ERA-20C_PCMDI_gn_190001-201012.nc md5:c100cf25d5681c375cd6c1ee60b678ba
|
|
2
|
+
obs4REF/ECMWF/ERA-20C/mon/ts/gn/v20210727/ts_mon_ERA-20C_PCMDI_gn_190001-201012.nc md5:9ed8dfbb805ed4caa282ed70f873a3a0
|
|
2
3
|
obs4REF/NOAA-ESRL-PSD/20CR/mon/psl/gn/v20210727/psl_mon_20CR_PCMDI_gn_187101-201212.nc md5:570ce90b3afd1d0b31690ae5dbe32d31
|
|
4
|
+
obs4REF/NOAA-ESRL-PSD/20CR/mon/ts/gn/v20210727/ts_mon_20CR_PCMDI_gn_187101-201212.nc md5:e4890cc19ccc5bac29c6b70f28265ff1
|
|
5
|
+
obs4REF/NOAA-NCEI/CMAP-V1902/mon/pr/gn/v20210727/pr_mon_CMAP-V1902_PCMDI_gn_197901-201901.nc md5:9d943d2dd0645850b616820f246aedf3
|
|
6
|
+
obs4REF/MOHC/HadISST-1-1/mon/ts/gn/v20210727/ts_mon_HadISST-1-1_PCMDI_gn_187001-201907.nc md5:99c8691e0f615dc4d79b4fb5e926cc76
|
|
7
|
+
obs4REF/ESSO/TropFlux-1-0/mon/hfls/gn/v20210727/hfls_mon_TropFlux-1-0_PCMDI_gn_197901-201707.nc md5:2f05191d6727068e1500d8d4ed90098a
|
|
8
|
+
obs4REF/ESSO/TropFlux-1-0/mon/hfns/gn/v20210727/hfns_mon_TropFlux-1-0_PCMDI_gn_197901-201707.nc md5:7a9019e51a41d9e4ab1fcfb072d8ca8d
|
|
9
|
+
obs4REF/ESSO/TropFlux-1-0/mon/hfss/gn/v20210727/hfss_mon_TropFlux-1-0_PCMDI_gn_197901-201707.nc md5:1da9d8fe862c61bc49c36c18b6527213
|
|
10
|
+
obs4REF/ESSO/TropFlux-1-0/mon/tas/gn/v20210727/tas_mon_TropFlux-1-0_PCMDI_gn_197901-201707.nc md5:a6057931b5f6bc000a44514a1a8c891f
|
|
11
|
+
obs4REF/ESSO/TropFlux-1-0/mon/tauu/gn/v20210727/tauu_mon_TropFlux-1-0_PCMDI_gn_197901-201707.nc md5:7c73a3deed3403fa9d21caef3a4d988d
|
|
12
|
+
obs4REF/ESSO/TropFlux-1-0/mon/tauv/gn/v20210727/tauv_mon_TropFlux-1-0_PCMDI_gn_197901-201707.nc md5:8abc7a724a7a297826e2f783a4ea14f9
|
|
13
|
+
obs4REF/ESSO/TropFlux-1-0/mon/ts/gn/v20210727/ts_mon_TropFlux-1-0_PCMDI_gn_197901-201707.nc md5:8697d3d7862f6e3b72bb5a161aa75ee8
|
|
14
|
+
obs4REF/ECMWF/ERA-INT/mon/hfls/gn/v20210727/hfls_mon_ERA-INT_PCMDI_gn_197901-201903.nc md5:1ae4587143f05ee81432b3d9960aab63
|
|
15
|
+
obs4REF/ECMWF/ERA-INT/mon/hfss/gn/v20210727/hfss_mon_ERA-INT_PCMDI_gn_197901-201903.nc md5:261f02b8cbce18486548882a11f9aa34
|
|
16
|
+
obs4REF/ECMWF/ERA-INT/mon/hur/gn/v20210727/hur_mon_ERA-INT_PCMDI_gn_198901-201001.nc md5:56fcd2df8ed2879f18b5e8c78134a148
|
|
17
|
+
obs4REF/ECMWF/ERA-INT/mon/hus/gn/v20210727/hus_mon_ERA-INT_PCMDI_gn_198901-201001.nc md5:6f3344d5d936fb84084ac1caf6431016
|
|
18
|
+
obs4REF/ECMWF/ERA-INT/mon/pr/gn/v20210727/pr_mon_ERA-INT_PCMDI_gn_197901-201903.nc md5:92e48c992cde6850d41c52e1778057c2
|
|
19
|
+
obs4REF/ECMWF/ERA-INT/mon/psl/gn/v20210727/psl_mon_ERA-INT_PCMDI_gn_197901-201903.nc md5:7409d0caa4a675436e28085bed12d0c9
|
|
20
|
+
obs4REF/ECMWF/ERA-INT/mon/rlds/gn/v20210727/rlds_mon_ERA-INT_PCMDI_gn_197901-201903.nc md5:dfba31b6b8e6a4924b7b6cfba648715f
|
|
21
|
+
obs4REF/ECMWF/ERA-INT/mon/rlus/gn/v20210727/rlus_mon_ERA-INT_PCMDI_gn_197901-201903.nc md5:94acf2c3bd5f39301148f610722b4590
|
|
22
|
+
obs4REF/ECMWF/ERA-INT/mon/rsds/gn/v20210727/rsds_mon_ERA-INT_PCMDI_gn_197901-201903.nc md5:0a56d7cd3fdf112a37c48433b8cd1e29
|
|
23
|
+
obs4REF/ECMWF/ERA-INT/mon/rsus/gn/v20210727/rsus_mon_ERA-INT_PCMDI_gn_197901-201903.nc md5:ec8f6e9cb64d81a7c0b70fbd7692e133
|
|
24
|
+
obs4REF/ECMWF/ERA-INT/mon/sfcWind/gn/v20210727/sfcWind_mon_ERA-INT_PCMDI_gn_197901-201903.nc md5:8a54a0edef0b9c22ea0b1dd8d5f2dd57
|
|
25
|
+
obs4REF/ECMWF/ERA-INT/mon/ta/gn/v20210727/ta_mon_ERA-INT_PCMDI_gn_198901-201001.nc md5:458b5d536c7314c29f8867a5417a95a1
|
|
26
|
+
obs4REF/ECMWF/ERA-INT/mon/tauu/gn/v20210727/tauu_mon_ERA-INT_PCMDI_gn_197901-201903.nc md5:af86da822ebd76ed3ee0a7e5d5a9912f
|
|
27
|
+
obs4REF/ECMWF/ERA-INT/mon/tauv/gn/v20210727/tauv_mon_ERA-INT_PCMDI_gn_197901-201903.nc md5:87757bbcaff35aef1d685649563ba0a7
|
|
28
|
+
obs4REF/ECMWF/ERA-INT/mon/ts/gn/v20210727/ts_mon_ERA-INT_PCMDI_gn_197901-201903.nc md5:f6a6f2bd8710df95c06dcb910501a771
|
|
29
|
+
obs4REF/ECMWF/ERA-INT/mon/ua/gn/v20210727/ua_mon_ERA-INT_PCMDI_gn_198901-201001.nc md5:054306f777065cf8cf94d44e412510bd
|
|
30
|
+
obs4REF/ECMWF/ERA-INT/mon/uas/gn/v20210727/uas_mon_ERA-INT_PCMDI_gn_197901-201903.nc md5:2b3144fc737c5e3d2aa930c53751ff2b
|
|
31
|
+
obs4REF/ECMWF/ERA-INT/mon/va/gn/v20210727/va_mon_ERA-INT_PCMDI_gn_198901-201001.nc md5:f67ca168d6cd87bfdd4a911eb72dd022
|
|
32
|
+
obs4REF/ECMWF/ERA-INT/mon/vas/gn/v20210727/vas_mon_ERA-INT_PCMDI_gn_197901-201903.nc md5:ac19b48b897cfe839585df4ff0fc4a7b
|
|
33
|
+
obs4REF/ECMWF/ERA-INT/mon/zg/gn/v20210727/zg_mon_ERA-INT_PCMDI_gn_198901-201001.nc md5:d8fb93f31ff4a6370ccee93db82af86c
|
|
34
|
+
obs4REF/NOAA-NCEI/GPCP-2-3/mon/pr/gn/v20210727/pr_mon_GPCP-2-3_PCMDI_gn_197901-201907.nc md5:0877f014868b83547448f96c3e7c83e9
|
|
35
|
+
obs4REF/NASA-GSFC/TRMM-3B43v-7/mon/pr/gn/v20210727/pr_mon_TRMM-3B43v-7_PCMDI_gn_199801-201712.nc md5:b80c9989d358656c781be5ea5a44c64c
|
|
36
|
+
obs4REF/CNES/AVISO-1-0/mon/zos/gn/v20210727/zos_mon_AVISO-1-0_PCMDI_gn_199301-201912.nc md5:91252303cb65548fee5ff42dd3024825
|
|
@@ -1,74 +1,105 @@
|
|
|
1
|
-
CMIP6/C4MIP/CSIRO/ACCESS-ESM1-5/esm-1pct-brch-1000PgC/r1i1p1f1/Amon/tas/gn/v20191206/tas_Amon_ACCESS-ESM1-5_esm-1pct-brch-1000PgC_r1i1p1f1_gn_016801-026812.nc
|
|
2
|
-
CMIP6/C4MIP/CSIRO/ACCESS-ESM1-5/esm-1pct-brch-1000PgC/r1i1p1f1/fx/areacella/gn/v20191206/areacella_fx_ACCESS-ESM1-5_esm-1pct-brch-1000PgC_r1i1p1f1_gn.nc
|
|
3
|
-
CMIP6/C4MIP/MPI-M/MPI-ESM1-2-LR/esm-1pctCO2/r1i1p1f1/Amon/fco2antt/gn/v20190815/fco2antt_Amon_MPI-ESM1-2-LR_esm-1pctCO2_r1i1p1f1_gn_185001-186912.nc
|
|
4
|
-
CMIP6/C4MIP/MPI-M/MPI-ESM1-2-LR/esm-1pctCO2/r1i1p1f1/Amon/fco2antt/gn/v20190815/fco2antt_Amon_MPI-ESM1-2-LR_esm-1pctCO2_r1i1p1f1_gn_187001-188912.nc
|
|
5
|
-
CMIP6/C4MIP/MPI-M/MPI-ESM1-2-LR/esm-1pctCO2/r1i1p1f1/Amon/fco2antt/gn/v20190815/fco2antt_Amon_MPI-ESM1-2-LR_esm-1pctCO2_r1i1p1f1_gn_189001-190912.nc
|
|
6
|
-
CMIP6/C4MIP/MPI-M/MPI-ESM1-2-LR/esm-1pctCO2/r1i1p1f1/Amon/fco2antt/gn/v20190815/fco2antt_Amon_MPI-ESM1-2-LR_esm-1pctCO2_r1i1p1f1_gn_191001-191412.nc
|
|
7
|
-
CMIP6/C4MIP/MPI-M/MPI-ESM1-2-LR/esm-1pctCO2/r1i1p1f1/Amon/tas/gn/v20190815/tas_Amon_MPI-ESM1-2-LR_esm-1pctCO2_r1i1p1f1_gn_185001-186912.nc
|
|
8
|
-
CMIP6/C4MIP/MPI-M/MPI-ESM1-2-LR/esm-1pctCO2/r1i1p1f1/Amon/tas/gn/v20190815/tas_Amon_MPI-ESM1-2-LR_esm-1pctCO2_r1i1p1f1_gn_187001-188912.nc
|
|
9
|
-
CMIP6/C4MIP/MPI-M/MPI-ESM1-2-LR/esm-1pctCO2/r1i1p1f1/Amon/tas/gn/v20190815/tas_Amon_MPI-ESM1-2-LR_esm-1pctCO2_r1i1p1f1_gn_189001-190912.nc
|
|
10
|
-
CMIP6/C4MIP/MPI-M/MPI-ESM1-2-LR/esm-1pctCO2/r1i1p1f1/Amon/tas/gn/v20190815/tas_Amon_MPI-ESM1-2-LR_esm-1pctCO2_r1i1p1f1_gn_191001-191412.nc
|
|
11
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/1pctCO2/r1i1p1f1/Amon/tas/gn/v20191115/tas_Amon_ACCESS-ESM1-5_1pctCO2_r1i1p1f1_gn_010101-025012.nc
|
|
12
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/1pctCO2/r1i1p1f1/fx/areacella/gn/v20191115/areacella_fx_ACCESS-ESM1-5_1pctCO2_r1i1p1f1_gn.nc
|
|
13
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/abrupt-4xCO2/r1i1p1f1/Amon/rlut/gn/v20191115/rlut_Amon_ACCESS-ESM1-5_abrupt-4xCO2_r1i1p1f1_gn_010101-012512.nc
|
|
14
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/abrupt-4xCO2/r1i1p1f1/Amon/rsdt/gn/v20191115/rsdt_Amon_ACCESS-ESM1-5_abrupt-4xCO2_r1i1p1f1_gn_010101-012512.nc
|
|
15
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/abrupt-4xCO2/r1i1p1f1/Amon/rsut/gn/v20191115/rsut_Amon_ACCESS-ESM1-5_abrupt-4xCO2_r1i1p1f1_gn_010101-012512.nc
|
|
16
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/abrupt-4xCO2/r1i1p1f1/Amon/tas/gn/v20191115/tas_Amon_ACCESS-ESM1-5_abrupt-4xCO2_r1i1p1f1_gn_010101-012512.nc
|
|
17
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/abrupt-4xCO2/r1i1p1f1/fx/areacella/gn/v20191115/areacella_fx_ACCESS-ESM1-5_abrupt-4xCO2_r1i1p1f1_gn.nc
|
|
18
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Amon/pr/gn/v20191115/pr_Amon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_185001-201412.nc
|
|
19
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Amon/psl/gn/v20191115/psl_Amon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_200001-201412.nc
|
|
20
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Amon/rlut/gn/v20191115/rlut_Amon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_200001-201412.nc
|
|
21
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Amon/rlutcs/gn/v20191115/rlutcs_Amon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_200501-201412.nc
|
|
22
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Amon/rsdt/gn/v20191115/rsdt_Amon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_200001-201412.nc
|
|
23
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Amon/rsut/gn/v20191115/rsut_Amon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_200001-201412.nc
|
|
24
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Amon/rsutcs/gn/v20191115/rsutcs_Amon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_200501-201412.nc
|
|
25
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Amon/tas/gn/v20191115/tas_Amon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_185001-201412.nc
|
|
26
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Amon/ts/gn/v20191115/ts_Amon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_200001-201412.nc
|
|
27
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Emon/cSoil/gn/v20191115/cSoil_Emon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_200001-201412.nc
|
|
28
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Lmon/gpp/gn/v20191115/gpp_Lmon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_200001-201412.nc
|
|
29
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Lmon/lai/gn/v20191115/lai_Lmon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_200001-201412.nc
|
|
30
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Lmon/mrro/gn/v20191115/mrro_Lmon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_200001-201412.nc
|
|
31
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Lmon/mrsos/gn/v20191115/mrsos_Lmon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_200001-201412.nc
|
|
32
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Lmon/nbp/gn/v20191115/nbp_Lmon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_200001-201412.nc
|
|
33
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Ofx/areacello/gn/v20191115/areacello_Ofx_ACCESS-ESM1-5_historical_r1i1p1f1_gn.nc
|
|
34
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Ofx/sftof/gn/v20191115/sftof_Ofx_ACCESS-ESM1-5_historical_r1i1p1f1_gn.nc
|
|
35
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Omon/msftmz/gn/v20191115/msftmz_Omon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_197901-197912.nc
|
|
36
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Omon/msftmz/gn/v20191115/msftmz_Omon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_198001-198912.nc
|
|
37
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Omon/msftmz/gn/v20191115/msftmz_Omon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_199001-199912.nc
|
|
38
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Omon/msftmz/gn/v20191115/msftmz_Omon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_200001-200912.nc
|
|
39
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Omon/msftmz/gn/v20191115/msftmz_Omon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_201001-201412.nc
|
|
40
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Omon/sos/gn/v20191115/sos_Omon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_197901-201412.nc
|
|
41
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Omon/tos/gn/v20191115/tos_Omon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_200001-201412.nc
|
|
42
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/SImon/siconc/gn/v20200817/siconc_SImon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_197901-201412.nc
|
|
43
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/fx/areacella/gn/v20191115/areacella_fx_ACCESS-ESM1-5_historical_r1i1p1f1_gn.nc
|
|
44
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/fx/sftlf/gn/v20191115/sftlf_fx_ACCESS-ESM1-5_historical_r1i1p1f1_gn.nc
|
|
45
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r2i1p1f1/Amon/psl/gn/v20191128/psl_Amon_ACCESS-ESM1-5_historical_r2i1p1f1_gn_200001-201412.nc
|
|
46
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r2i1p1f1/Amon/ts/gn/v20191128/ts_Amon_ACCESS-ESM1-5_historical_r2i1p1f1_gn_200001-201412.nc
|
|
47
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r2i1p1f1/fx/areacella/gn/v20191128/areacella_fx_ACCESS-ESM1-5_historical_r2i1p1f1_gn.nc
|
|
48
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/piControl/r1i1p1f1/Amon/rlut/gn/v20210316/rlut_Amon_ACCESS-ESM1-5_piControl_r1i1p1f1_gn_010101-012512.nc
|
|
49
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/piControl/r1i1p1f1/Amon/rsdt/gn/v20210316/rsdt_Amon_ACCESS-ESM1-5_piControl_r1i1p1f1_gn_010101-012512.nc
|
|
50
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/piControl/r1i1p1f1/Amon/rsut/gn/v20210316/rsut_Amon_ACCESS-ESM1-5_piControl_r1i1p1f1_gn_010101-012512.nc
|
|
51
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/piControl/r1i1p1f1/Amon/tas/gn/v20210316/tas_Amon_ACCESS-ESM1-5_piControl_r1i1p1f1_gn_010101-018012.nc
|
|
52
|
-
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/piControl/r1i1p1f1/fx/areacella/gn/v20210316/areacella_fx_ACCESS-ESM1-5_piControl_r1i1p1f1_gn.nc
|
|
53
|
-
CMIP6/CMIP/MPI-M/MPI-ESM1-2-LR/esm-piControl/r1i1p1f1/Amon/tas/gn/v20190815/tas_Amon_MPI-ESM1-2-LR_esm-piControl_r1i1p1f1_gn_185001-186912.nc
|
|
54
|
-
CMIP6/CMIP/MPI-M/MPI-ESM1-2-LR/esm-piControl/r1i1p1f1/Amon/tas/gn/v20190815/tas_Amon_MPI-ESM1-2-LR_esm-piControl_r1i1p1f1_gn_187001-188912.nc
|
|
55
|
-
CMIP6/CMIP/MPI-M/MPI-ESM1-2-LR/esm-piControl/r1i1p1f1/Amon/tas/gn/v20190815/tas_Amon_MPI-ESM1-2-LR_esm-piControl_r1i1p1f1_gn_189001-190912.nc
|
|
56
|
-
CMIP6/CMIP/MPI-M/MPI-ESM1-2-LR/esm-piControl/r1i1p1f1/Amon/tas/gn/v20190815/tas_Amon_MPI-ESM1-2-LR_esm-piControl_r1i1p1f1_gn_191001-191512.nc
|
|
57
|
-
CMIP6/CMIP/MPI-M/MPI-ESM1-2-LR/esm-piControl/r1i1p1f1/fx/areacella/gn/v20190815/areacella_fx_MPI-ESM1-2-LR_esm-piControl_r1i1p1f1_gn.nc
|
|
58
|
-
CMIP6/DAMIP/CSIRO/ACCESS-ESM1-5/hist-GHG/r1i1p1f1/Amon/psl/gn/v20200615/psl_Amon_ACCESS-ESM1-5_hist-GHG_r1i1p1f1_gn_200001-202012.nc
|
|
59
|
-
CMIP6/DAMIP/CSIRO/ACCESS-ESM1-5/hist-GHG/r1i1p1f1/Amon/ts/gn/v20200615/ts_Amon_ACCESS-ESM1-5_hist-GHG_r1i1p1f1_gn_200001-202012.nc
|
|
60
|
-
CMIP6/DAMIP/CSIRO/ACCESS-ESM1-5/hist-GHG/r1i1p1f1/fx/areacella/gn/v20200615/areacella_fx_ACCESS-ESM1-5_hist-GHG_r1i1p1f1_gn.nc
|
|
61
|
-
CMIP6/DAMIP/CSIRO/ACCESS-ESM1-5/hist-GHG/r2i1p1f1/Amon/psl/gn/v20200615/psl_Amon_ACCESS-ESM1-5_hist-GHG_r2i1p1f1_gn_200001-202012.nc
|
|
62
|
-
CMIP6/DAMIP/CSIRO/ACCESS-ESM1-5/hist-GHG/r2i1p1f1/Amon/ts/gn/v20200615/ts_Amon_ACCESS-ESM1-5_hist-GHG_r2i1p1f1_gn_200001-202012.nc
|
|
63
|
-
CMIP6/DAMIP/CSIRO/ACCESS-ESM1-5/hist-GHG/r2i1p1f1/fx/areacella/gn/v20200615/areacella_fx_ACCESS-ESM1-5_hist-GHG_r2i1p1f1_gn.nc
|
|
64
|
-
CMIP6/ScenarioMIP/CSIRO/ACCESS-ESM1-5/ssp126/r1i1p1f1/Amon/pr/gn/v20210318/pr_Amon_ACCESS-ESM1-5_ssp126_r1i1p1f1_gn_201501-210012.nc
|
|
65
|
-
CMIP6/ScenarioMIP/CSIRO/ACCESS-ESM1-5/ssp126/r1i1p1f1/Amon/rsdt/gn/v20210318/rsdt_Amon_ACCESS-ESM1-5_ssp126_r1i1p1f1_gn_201501-202512.nc
|
|
66
|
-
CMIP6/ScenarioMIP/CSIRO/ACCESS-ESM1-5/ssp126/r1i1p1f1/Amon/rsut/gn/v20210318/rsut_Amon_ACCESS-ESM1-5_ssp126_r1i1p1f1_gn_201501-202512.nc
|
|
67
|
-
CMIP6/ScenarioMIP/CSIRO/ACCESS-ESM1-5/ssp126/r1i1p1f1/Amon/tas/gn/v20210318/tas_Amon_ACCESS-ESM1-5_ssp126_r1i1p1f1_gn_201501-210012.nc
|
|
68
|
-
CMIP6/ScenarioMIP/CSIRO/ACCESS-ESM1-5/ssp126/r1i1p1f1/Omon/tos/gn/v20210318/tos_Omon_ACCESS-ESM1-5_ssp126_r1i1p1f1_gn_201501-202512.nc
|
|
69
|
-
CMIP6/ScenarioMIP/CSIRO/ACCESS-ESM1-5/ssp126/r1i1p1f1/fx/areacella/gn/v20210318/areacella_fx_ACCESS-ESM1-5_ssp126_r1i1p1f1_gn.nc
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
obs4REF/
|
|
74
|
-
obs4REF/
|
|
1
|
+
CMIP6/C4MIP/CSIRO/ACCESS-ESM1-5/esm-1pct-brch-1000PgC/r1i1p1f1/Amon/tas/gn/v20191206/tas_Amon_ACCESS-ESM1-5_esm-1pct-brch-1000PgC_r1i1p1f1_gn_016801-026812.nc ffef38229e3b69ea703274f174152cfc4886665bb346c1cc604d88f932137828
|
|
2
|
+
CMIP6/C4MIP/CSIRO/ACCESS-ESM1-5/esm-1pct-brch-1000PgC/r1i1p1f1/fx/areacella/gn/v20191206/areacella_fx_ACCESS-ESM1-5_esm-1pct-brch-1000PgC_r1i1p1f1_gn.nc d3292e1af73f8ab0327a4f689f8b4fdd7d818e861d8b78351daf392de15e4409
|
|
3
|
+
CMIP6/C4MIP/MPI-M/MPI-ESM1-2-LR/esm-1pctCO2/r1i1p1f1/Amon/fco2antt/gn/v20190815/fco2antt_Amon_MPI-ESM1-2-LR_esm-1pctCO2_r1i1p1f1_gn_185001-186912.nc c027154d3ef3962584d48e603638754c59f8bb106923cd8523a08db5be67f2a0
|
|
4
|
+
CMIP6/C4MIP/MPI-M/MPI-ESM1-2-LR/esm-1pctCO2/r1i1p1f1/Amon/fco2antt/gn/v20190815/fco2antt_Amon_MPI-ESM1-2-LR_esm-1pctCO2_r1i1p1f1_gn_187001-188912.nc a550c2c36e620eafadba06a6e6f80ff231481b23eb225d9c25874e50122107a9
|
|
5
|
+
CMIP6/C4MIP/MPI-M/MPI-ESM1-2-LR/esm-1pctCO2/r1i1p1f1/Amon/fco2antt/gn/v20190815/fco2antt_Amon_MPI-ESM1-2-LR_esm-1pctCO2_r1i1p1f1_gn_189001-190912.nc 05734f60346b084873772e9b166c136fa5daf1338e8a5a15721e2834389c0cc6
|
|
6
|
+
CMIP6/C4MIP/MPI-M/MPI-ESM1-2-LR/esm-1pctCO2/r1i1p1f1/Amon/fco2antt/gn/v20190815/fco2antt_Amon_MPI-ESM1-2-LR_esm-1pctCO2_r1i1p1f1_gn_191001-191412.nc 82bf8fbcfde0418b4ec95b14af9b653f9b654f748ca1d1deb6450c4ea4ef277c
|
|
7
|
+
CMIP6/C4MIP/MPI-M/MPI-ESM1-2-LR/esm-1pctCO2/r1i1p1f1/Amon/tas/gn/v20190815/tas_Amon_MPI-ESM1-2-LR_esm-1pctCO2_r1i1p1f1_gn_185001-186912.nc f0dcb10542fc6b685238028a333f6255d22b630d588555a7691c26e213267033
|
|
8
|
+
CMIP6/C4MIP/MPI-M/MPI-ESM1-2-LR/esm-1pctCO2/r1i1p1f1/Amon/tas/gn/v20190815/tas_Amon_MPI-ESM1-2-LR_esm-1pctCO2_r1i1p1f1_gn_187001-188912.nc b9cd82588c1a5be0a6eb9b54cb3f6699c9a0f39ce0ce87f59ea8a6ac76c16561
|
|
9
|
+
CMIP6/C4MIP/MPI-M/MPI-ESM1-2-LR/esm-1pctCO2/r1i1p1f1/Amon/tas/gn/v20190815/tas_Amon_MPI-ESM1-2-LR_esm-1pctCO2_r1i1p1f1_gn_189001-190912.nc 5000371d6f31bab096119b000edd5be66b3dbe1b53962ccb01b3105ad449579a
|
|
10
|
+
CMIP6/C4MIP/MPI-M/MPI-ESM1-2-LR/esm-1pctCO2/r1i1p1f1/Amon/tas/gn/v20190815/tas_Amon_MPI-ESM1-2-LR_esm-1pctCO2_r1i1p1f1_gn_191001-191412.nc 9213e72eb6e1e77e7585313838ca245c8ab8f87829ad2e55ba9769df8dde0035
|
|
11
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/1pctCO2/r1i1p1f1/Amon/tas/gn/v20191115/tas_Amon_ACCESS-ESM1-5_1pctCO2_r1i1p1f1_gn_010101-025012.nc b995e36ed0a7d1748901d83359f8995e0d7bfeb1af05ee25e6a376815417ba85
|
|
12
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/1pctCO2/r1i1p1f1/fx/areacella/gn/v20191115/areacella_fx_ACCESS-ESM1-5_1pctCO2_r1i1p1f1_gn.nc f6b1dcf34a6de5c9c0c0743d1f3344923e476e3ad33d73d29da67163b6973d01
|
|
13
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/abrupt-4xCO2/r1i1p1f1/Amon/rlut/gn/v20191115/rlut_Amon_ACCESS-ESM1-5_abrupt-4xCO2_r1i1p1f1_gn_010101-012512.nc d02d4096c7cd1892e284a97d5009e109fce474c2c9e91e43f83ecc9519ae2ce5
|
|
14
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/abrupt-4xCO2/r1i1p1f1/Amon/rsdt/gn/v20191115/rsdt_Amon_ACCESS-ESM1-5_abrupt-4xCO2_r1i1p1f1_gn_010101-012512.nc 14cd0b3ce52c8e11c92cf24ffc70bda191a1da41b0004afdcfbd43d71730d10d
|
|
15
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/abrupt-4xCO2/r1i1p1f1/Amon/rsut/gn/v20191115/rsut_Amon_ACCESS-ESM1-5_abrupt-4xCO2_r1i1p1f1_gn_010101-012512.nc 85c6e81dc193b326646781e5b46d481fa720435b30adf40370a8dc0dd1c49714
|
|
16
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/abrupt-4xCO2/r1i1p1f1/Amon/tas/gn/v20191115/tas_Amon_ACCESS-ESM1-5_abrupt-4xCO2_r1i1p1f1_gn_010101-012512.nc 9469aca1a6d082ae052e0885207acd8b16859aad37d9e0a514c71c7b45419887
|
|
17
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/abrupt-4xCO2/r1i1p1f1/fx/areacella/gn/v20191115/areacella_fx_ACCESS-ESM1-5_abrupt-4xCO2_r1i1p1f1_gn.nc 78f79e91d0fa163e2744aa70c1ac89b8c878a2753ece016110563b6e3c4afd8b
|
|
18
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Amon/pr/gn/v20191115/pr_Amon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_185001-201412.nc 6696166383b0427476de40658f1d31666a28d9ec2334ffb68be49339e24f49bc
|
|
19
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Amon/psl/gn/v20191115/psl_Amon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_200001-201412.nc 42c9e8f0d432fe634abab6fe3499854e19ae5ccaf5d70dba6e930aed4c8fd635
|
|
20
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Amon/rlut/gn/v20191115/rlut_Amon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_200001-201412.nc 019b61b1a05bfc06ef35a1b97e0544d242996c3c1d177ad9da6189e549af0e19
|
|
21
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Amon/rlutcs/gn/v20191115/rlutcs_Amon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_200501-201412.nc d639634716a12c0af933aa4cbd62edef8e2f1bbab454f3935ed0b1d91d384b63
|
|
22
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Amon/rsdt/gn/v20191115/rsdt_Amon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_200001-201412.nc dd43eb17caf7082bcc18f31ecd756566466f7fc17ae86284985177ba0ac7d386
|
|
23
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Amon/rsut/gn/v20191115/rsut_Amon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_200001-201412.nc b3148af8bee4c3562607aeaec9d81d94abad366c85421dd55ef222516fd3f7e0
|
|
24
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Amon/rsutcs/gn/v20191115/rsutcs_Amon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_200501-201412.nc 9f336ed549c02bf31f73f4679b850463ca8edc4db7afb04b31acd643bc3b51c8
|
|
25
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Amon/tas/gn/v20191115/tas_Amon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_185001-201412.nc 4c74c74031fbc88cb0df70826e0aea63a582af5f5a714603a0ae70b3ff834097
|
|
26
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Amon/ts/gn/v20191115/ts_Amon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_200001-201412.nc b3b8e7675287471fd27f3de1f3ecada278eb7ea384da24031d0f3a949e04f757
|
|
27
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Emon/cSoil/gn/v20191115/cSoil_Emon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_200001-201412.nc d78d9bc532d79a50a0e40645f91572d61a92881aea43552061baea0e77353777
|
|
28
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Lmon/gpp/gn/v20191115/gpp_Lmon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_200001-201412.nc 41a43edaa1ff7385232f8fbf67fcc551eb77e51ba6cd75b95b5f0ee71af19544
|
|
29
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Lmon/lai/gn/v20191115/lai_Lmon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_200001-201412.nc 4e6e1530da9030cfb7c207543369c636f339ee3c59c4621e22405494dc436755
|
|
30
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Lmon/mrro/gn/v20191115/mrro_Lmon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_200001-201412.nc 3b9c010af44ca894bb23a55903fdc57dcd5af8a4e22ea1e98b41b18274720fd9
|
|
31
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Lmon/mrsos/gn/v20191115/mrsos_Lmon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_200001-201412.nc ca21d4f5341114cbc217d7c30f89c4375b02ea0a2b723d9cb069db6a9c08b08f
|
|
32
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Lmon/nbp/gn/v20191115/nbp_Lmon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_200001-201412.nc 476b4ebacf38ddb78d44975b01d859e9ca3ed7955b92adc4bd098591867e56b0
|
|
33
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Ofx/areacello/gn/v20191115/areacello_Ofx_ACCESS-ESM1-5_historical_r1i1p1f1_gn.nc fe5adde7cfe6d80462ad649fe68c2aa983ba700d96cff5ac830b1d7e7b09ca6f
|
|
34
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Ofx/sftof/gn/v20191115/sftof_Ofx_ACCESS-ESM1-5_historical_r1i1p1f1_gn.nc 89106ad204fb1ac9f3b25f4b93d6fcf9e95db5f1f4466b9baafcb426bad24e4f
|
|
35
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Omon/msftmz/gn/v20191115/msftmz_Omon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_197901-197912.nc 9016163abd89155710291dc541a4146778f18a320435a2ee618f0da1424b0338
|
|
36
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Omon/msftmz/gn/v20191115/msftmz_Omon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_198001-198912.nc 97094c32cb3e8f019ad87145d348307c2a57ba9b0acf0cc5c59978213060e8d4
|
|
37
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Omon/msftmz/gn/v20191115/msftmz_Omon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_199001-199912.nc be682038248b0d79ea9e0402a2a173bd5c054dfdd8cc0932f6cb85d925670889
|
|
38
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Omon/msftmz/gn/v20191115/msftmz_Omon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_200001-200912.nc 266c386ddfbe9556404afadef1e778a64b5f4c5dd746c54a1beee3e5fbc9954b
|
|
39
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Omon/msftmz/gn/v20191115/msftmz_Omon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_201001-201412.nc 21fa3a223baced12da8a62ad406ba8126851c3e36589184fba2bb1c8b269c6e3
|
|
40
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Omon/sos/gn/v20191115/sos_Omon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_197901-201412.nc a757237973708d28f2333542fc34ed9543a15256c7f38d0139fcfe66bdb8d95c
|
|
41
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Omon/tos/gn/v20191115/tos_Omon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_200001-201412.nc 701fa01ac2c50b622c3454bb3d69a54fed1c92b66f9194c09148b2349aa11342
|
|
42
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/SImon/siconc/gn/v20200817/siconc_SImon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_197901-201412.nc 384b45a0f88678ffaf0c9701a0fc0175fb0c319d7d94d0b3c4334939d653e51d
|
|
43
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/fx/areacella/gn/v20191115/areacella_fx_ACCESS-ESM1-5_historical_r1i1p1f1_gn.nc 6750d4a2432842cb9342ef99b8ecb3569e8ff3dcbbf020f7f9f43a6f7af42f06
|
|
44
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/fx/sftlf/gn/v20191115/sftlf_fx_ACCESS-ESM1-5_historical_r1i1p1f1_gn.nc 08d84ba3cf02a2481b76611dfa1abe25cbf76326003eebc4eb00c99b32fea19a
|
|
45
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r2i1p1f1/Amon/psl/gn/v20191128/psl_Amon_ACCESS-ESM1-5_historical_r2i1p1f1_gn_200001-201412.nc 0344cf5babc7e3f827d66e1c41a9aaa89b52b6345381bf478146df44c7ec813e
|
|
46
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r2i1p1f1/Amon/ts/gn/v20191128/ts_Amon_ACCESS-ESM1-5_historical_r2i1p1f1_gn_200001-201412.nc e5dde58ae1b21c765d00dea5e6362c771f6945dcb62def864313c9756ed4b8db
|
|
47
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r2i1p1f1/fx/areacella/gn/v20191128/areacella_fx_ACCESS-ESM1-5_historical_r2i1p1f1_gn.nc 9a1df5675b2168b3da8e5537f339196ebb8eb73f2dbcf1431f5c269c46191f40
|
|
48
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/piControl/r1i1p1f1/Amon/rlut/gn/v20210316/rlut_Amon_ACCESS-ESM1-5_piControl_r1i1p1f1_gn_010101-012512.nc a8bf35b4415b5d24971fb94f7a04b99ea3534157ea3c1995abf379bad82bbc83
|
|
49
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/piControl/r1i1p1f1/Amon/rsdt/gn/v20210316/rsdt_Amon_ACCESS-ESM1-5_piControl_r1i1p1f1_gn_010101-012512.nc 158cea3284df26fa95851e22bdee4064b909ecd87e12acd52aec242df7171e49
|
|
50
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/piControl/r1i1p1f1/Amon/rsut/gn/v20210316/rsut_Amon_ACCESS-ESM1-5_piControl_r1i1p1f1_gn_010101-012512.nc 5a8f026e4be636e51625a6b59e504de6ed2dfcfae1df8be60084fdf1d602fc1c
|
|
51
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/piControl/r1i1p1f1/Amon/tas/gn/v20210316/tas_Amon_ACCESS-ESM1-5_piControl_r1i1p1f1_gn_010101-018012.nc e8705dda0c26cad086526d8e77f10a91707187e371d90f5ebb7feb4187cec2b4
|
|
52
|
+
CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/piControl/r1i1p1f1/fx/areacella/gn/v20210316/areacella_fx_ACCESS-ESM1-5_piControl_r1i1p1f1_gn.nc c3f274b147fbcb7e7c6116a933a40993c4f2186952b8e8fd4ad8056326688887
|
|
53
|
+
CMIP6/CMIP/MPI-M/MPI-ESM1-2-LR/esm-piControl/r1i1p1f1/Amon/tas/gn/v20190815/tas_Amon_MPI-ESM1-2-LR_esm-piControl_r1i1p1f1_gn_185001-186912.nc 141a24094d42fe2bc0b765774905c192d77817620da273b7e7c789510d0891c9
|
|
54
|
+
CMIP6/CMIP/MPI-M/MPI-ESM1-2-LR/esm-piControl/r1i1p1f1/Amon/tas/gn/v20190815/tas_Amon_MPI-ESM1-2-LR_esm-piControl_r1i1p1f1_gn_187001-188912.nc 5f0dc6bee4c4eb12a05c532fb0ca08aaacbb869b43306c8b82f4bdd6adc661a4
|
|
55
|
+
CMIP6/CMIP/MPI-M/MPI-ESM1-2-LR/esm-piControl/r1i1p1f1/Amon/tas/gn/v20190815/tas_Amon_MPI-ESM1-2-LR_esm-piControl_r1i1p1f1_gn_189001-190912.nc ae9193e06aec8a7f63f2f7ec63fec9d25b2c1dc5de2bbe7065428c722090f45c
|
|
56
|
+
CMIP6/CMIP/MPI-M/MPI-ESM1-2-LR/esm-piControl/r1i1p1f1/Amon/tas/gn/v20190815/tas_Amon_MPI-ESM1-2-LR_esm-piControl_r1i1p1f1_gn_191001-191512.nc 2113b7d4a781c7c28de55b0ffe99c42b49692d113f5109e7a4d0214211a9eb1c
|
|
57
|
+
CMIP6/CMIP/MPI-M/MPI-ESM1-2-LR/esm-piControl/r1i1p1f1/fx/areacella/gn/v20190815/areacella_fx_MPI-ESM1-2-LR_esm-piControl_r1i1p1f1_gn.nc 2f5595635a566d5b4a889468f687aabf99ca5cdadb11f6a770d05d09775bfabb
|
|
58
|
+
CMIP6/DAMIP/CSIRO/ACCESS-ESM1-5/hist-GHG/r1i1p1f1/Amon/psl/gn/v20200615/psl_Amon_ACCESS-ESM1-5_hist-GHG_r1i1p1f1_gn_200001-202012.nc 5fed6b48717fcf508e8b5936be304db0346362c2182c5d13a141afe7c982021a
|
|
59
|
+
CMIP6/DAMIP/CSIRO/ACCESS-ESM1-5/hist-GHG/r1i1p1f1/Amon/ts/gn/v20200615/ts_Amon_ACCESS-ESM1-5_hist-GHG_r1i1p1f1_gn_200001-202012.nc aa98fa93ef29ea266a94d87876b4ae08917caf77e38c5df1eae1ec98a5f559cb
|
|
60
|
+
CMIP6/DAMIP/CSIRO/ACCESS-ESM1-5/hist-GHG/r1i1p1f1/fx/areacella/gn/v20200615/areacella_fx_ACCESS-ESM1-5_hist-GHG_r1i1p1f1_gn.nc 7179f75ff1754e9666b10f8c5508040bbe9fdac0c8117a9231ba5977d4889f27
|
|
61
|
+
CMIP6/DAMIP/CSIRO/ACCESS-ESM1-5/hist-GHG/r2i1p1f1/Amon/psl/gn/v20200615/psl_Amon_ACCESS-ESM1-5_hist-GHG_r2i1p1f1_gn_200001-202012.nc 2073711f1517b53f2670f939b3ad8c81f24ae8d022bd193157e173733eb19636
|
|
62
|
+
CMIP6/DAMIP/CSIRO/ACCESS-ESM1-5/hist-GHG/r2i1p1f1/Amon/ts/gn/v20200615/ts_Amon_ACCESS-ESM1-5_hist-GHG_r2i1p1f1_gn_200001-202012.nc dd8b8043a058454c6218d3895ffd12d3d8cfc2ccef485ece30c913ecc2244d57
|
|
63
|
+
CMIP6/DAMIP/CSIRO/ACCESS-ESM1-5/hist-GHG/r2i1p1f1/fx/areacella/gn/v20200615/areacella_fx_ACCESS-ESM1-5_hist-GHG_r2i1p1f1_gn.nc 6a25555c13d62859cb81f739f24398ae4f1dae60d495d8ada5f799411471985b
|
|
64
|
+
CMIP6/ScenarioMIP/CSIRO/ACCESS-ESM1-5/ssp126/r1i1p1f1/Amon/pr/gn/v20210318/pr_Amon_ACCESS-ESM1-5_ssp126_r1i1p1f1_gn_201501-210012.nc 3650d30ce27d44a0564ee29fd5e4741a60fe7e91ea634f4f6896f3fc494c1cd7
|
|
65
|
+
CMIP6/ScenarioMIP/CSIRO/ACCESS-ESM1-5/ssp126/r1i1p1f1/Amon/rsdt/gn/v20210318/rsdt_Amon_ACCESS-ESM1-5_ssp126_r1i1p1f1_gn_201501-202512.nc 9a04641b91da68be60e307cd1b3e6af72098ae09e5d16103910368314ebf6217
|
|
66
|
+
CMIP6/ScenarioMIP/CSIRO/ACCESS-ESM1-5/ssp126/r1i1p1f1/Amon/rsut/gn/v20210318/rsut_Amon_ACCESS-ESM1-5_ssp126_r1i1p1f1_gn_201501-202512.nc 61aee51691b9e5b4a9d1189bdd59a8dd206ad5e8d554c5ea5e47827e0fd9216a
|
|
67
|
+
CMIP6/ScenarioMIP/CSIRO/ACCESS-ESM1-5/ssp126/r1i1p1f1/Amon/tas/gn/v20210318/tas_Amon_ACCESS-ESM1-5_ssp126_r1i1p1f1_gn_201501-210012.nc b164b974798624b284ac83425fc02f42ae88d75071d76aa3b860253f527ce27f
|
|
68
|
+
CMIP6/ScenarioMIP/CSIRO/ACCESS-ESM1-5/ssp126/r1i1p1f1/Omon/tos/gn/v20210318/tos_Omon_ACCESS-ESM1-5_ssp126_r1i1p1f1_gn_201501-202512.nc 8138c9e1d5ba641799b547b0867fa0068902c17b95277cd26bec1c7e91c7eb0c
|
|
69
|
+
CMIP6/ScenarioMIP/CSIRO/ACCESS-ESM1-5/ssp126/r1i1p1f1/fx/areacella/gn/v20210318/areacella_fx_ACCESS-ESM1-5_ssp126_r1i1p1f1_gn.nc 0b3daf08cacf722fe51e01dd106f0df2fa86b11764befcf26a55d2e670db74df
|
|
70
|
+
obs4REF/obs4REF/CNES/AVISO-1-0/mon/zos/gn/v20210727/zos_mon_AVISO-1-0_PCMDI_gn_199301-201912.nc 1b0a61ea75fbc12a0c8f5ed64c62ddd52c14b30a2873b4977584899c879b66c2
|
|
71
|
+
obs4REF/obs4REF/ECMWF/ERA-20C/mon/psl/gn/v20210727/psl_mon_ERA-20C_PCMDI_gn_190001-201012.nc a307849fa2ef38954400ecef089438400a98e2ba38806c36529ac4b7b91c11a5
|
|
72
|
+
obs4REF/obs4REF/ECMWF/ERA-20C/mon/ts/gn/v20210727/ts_mon_ERA-20C_PCMDI_gn_190001-201012.nc e75d22c2cd5077cc4ced12526f280248b3ab251b0995b830f2f6d716a165af3f
|
|
73
|
+
obs4REF/obs4REF/ECMWF/ERA-INT/mon/hfls/gn/v20210727/hfls_mon_ERA-INT_PCMDI_gn_197901-201903.nc c51b850dccfa4a95d4cbd9555a333aef6f6299191a5a6ccf5a8dec0b3ba389a4
|
|
74
|
+
obs4REF/obs4REF/ECMWF/ERA-INT/mon/hfss/gn/v20210727/hfss_mon_ERA-INT_PCMDI_gn_197901-201903.nc 11f12bb01d71a8d769099fff0f2ff41a2c01a967ce6ab5eb4ef4f691f669de80
|
|
75
|
+
obs4REF/obs4REF/ECMWF/ERA-INT/mon/hur/gn/v20210727/hur_mon_ERA-INT_PCMDI_gn_198901-201001.nc 06b9290fef6dbd9bd776a428429309aed88c32faf2ddae2c3076c817d22ca75b
|
|
76
|
+
obs4REF/obs4REF/ECMWF/ERA-INT/mon/hus/gn/v20210727/hus_mon_ERA-INT_PCMDI_gn_198901-201001.nc 97af286fe733dcf33144517034df92803b80057fecbda488a576a60515763d62
|
|
77
|
+
obs4REF/obs4REF/ECMWF/ERA-INT/mon/pr/gn/v20210727/pr_mon_ERA-INT_PCMDI_gn_197901-201903.nc 7f663506b2984a98b952efc0cae7c2165d5b201884480462672d219e1ac03c13
|
|
78
|
+
obs4REF/obs4REF/ECMWF/ERA-INT/mon/psl/gn/v20210727/psl_mon_ERA-INT_PCMDI_gn_197901-201903.nc 7b9e6aeafe4926fa2435fcf0f8cb0a4afcbfc9aa8db47187e21d5f280879e0ec
|
|
79
|
+
obs4REF/obs4REF/ECMWF/ERA-INT/mon/rlds/gn/v20210727/rlds_mon_ERA-INT_PCMDI_gn_197901-201903.nc d20e0f45fe49252982afbd281980764cac4d3d2aec93e6c18f0f88f30382397c
|
|
80
|
+
obs4REF/obs4REF/ECMWF/ERA-INT/mon/rlus/gn/v20210727/rlus_mon_ERA-INT_PCMDI_gn_197901-201903.nc ba7f248c2dd60f4ce52bb34390c133f2ff73f507476899c6430ba88fa0e92baf
|
|
81
|
+
obs4REF/obs4REF/ECMWF/ERA-INT/mon/rsds/gn/v20210727/rsds_mon_ERA-INT_PCMDI_gn_197901-201903.nc b37c38913868538c6ef1aed10c80c0492dc83cf897073c7bcfd820f716f69db1
|
|
82
|
+
obs4REF/obs4REF/ECMWF/ERA-INT/mon/rsus/gn/v20210727/rsus_mon_ERA-INT_PCMDI_gn_197901-201903.nc 4840ef8fdce03ed7397756d5cbc445949bfce2e64e4f469559eefc0acb0bfd53
|
|
83
|
+
obs4REF/obs4REF/ECMWF/ERA-INT/mon/sfcWind/gn/v20210727/sfcWind_mon_ERA-INT_PCMDI_gn_197901-201903.nc 0e96f90f858cdcd394a6c75c37bd5cf16f8629c46a7ff7e160141c216812eb4f
|
|
84
|
+
obs4REF/obs4REF/ECMWF/ERA-INT/mon/ta/gn/v20210727/ta_mon_ERA-INT_PCMDI_gn_198901-201001.nc d8024c2a148d9c096bb89a6ab7cf88a4857d6368bd87b3b2e8ec2d9e6f99259c
|
|
85
|
+
obs4REF/obs4REF/ECMWF/ERA-INT/mon/tauu/gn/v20210727/tauu_mon_ERA-INT_PCMDI_gn_197901-201903.nc a89e8f5bc93ceca4f73eaab3320836ec29396125ae66df2ba8f55053dd7127fe
|
|
86
|
+
obs4REF/obs4REF/ECMWF/ERA-INT/mon/tauv/gn/v20210727/tauv_mon_ERA-INT_PCMDI_gn_197901-201903.nc 6879b06537c0bb899171f26594e80a4e83b6c5ff70e4304811bf5f334f841a91
|
|
87
|
+
obs4REF/obs4REF/ECMWF/ERA-INT/mon/ts/gn/v20210727/ts_mon_ERA-INT_PCMDI_gn_197901-201903.nc f37fae9b17febbe259044c8652798a94ed50549603dbd2bd0d481c8838bc8f7d
|
|
88
|
+
obs4REF/obs4REF/ECMWF/ERA-INT/mon/ua/gn/v20210727/ua_mon_ERA-INT_PCMDI_gn_198901-201001.nc 988cc905d04e6aa0278d915dd1873242277fca5901c82b3e674e4775bfe71da7
|
|
89
|
+
obs4REF/obs4REF/ECMWF/ERA-INT/mon/uas/gn/v20210727/uas_mon_ERA-INT_PCMDI_gn_197901-201903.nc c104226c7c8cb3ba1c0a75e848eb1c4ad33f4337c283b96daf9a565ead018283
|
|
90
|
+
obs4REF/obs4REF/ECMWF/ERA-INT/mon/va/gn/v20210727/va_mon_ERA-INT_PCMDI_gn_198901-201001.nc 1549f008a6ee6a1d2c8b76f9094328acd296a220cc36e39eb40e4ec345db7785
|
|
91
|
+
obs4REF/obs4REF/ECMWF/ERA-INT/mon/vas/gn/v20210727/vas_mon_ERA-INT_PCMDI_gn_197901-201903.nc 366d6726c8e8f998a4c51eaf9e3905f915cd269171b491afaedf0581d28be2a5
|
|
92
|
+
obs4REF/obs4REF/ECMWF/ERA-INT/mon/zg/gn/v20210727/zg_mon_ERA-INT_PCMDI_gn_198901-201001.nc 60083418a6597e41d9d9b4f80f3731db2c93d065b4ed9113383470a3090943fc
|
|
93
|
+
obs4REF/obs4REF/ESSO/TropFlux-1-0/mon/hfls/gn/v20210727/hfls_mon_TropFlux-1-0_PCMDI_gn_197901-201707.nc c05111c9b0680c52b0f78a0f0603c204130d941527f079ba6c431c35b81d1b09
|
|
94
|
+
obs4REF/obs4REF/ESSO/TropFlux-1-0/mon/hfns/gn/v20210727/hfns_mon_TropFlux-1-0_PCMDI_gn_197901-201707.nc 0f47f55514cb6ac29d8903775cd5af197ccb828d3eb9403eb94c71bdc5a08fc4
|
|
95
|
+
obs4REF/obs4REF/ESSO/TropFlux-1-0/mon/hfss/gn/v20210727/hfss_mon_TropFlux-1-0_PCMDI_gn_197901-201707.nc 1fc71a0befc05e29295025b4f2a1d3030000991ce54ffd5e4e57b513af74f9f5
|
|
96
|
+
obs4REF/obs4REF/ESSO/TropFlux-1-0/mon/tas/gn/v20210727/tas_mon_TropFlux-1-0_PCMDI_gn_197901-201707.nc 8ac0c77ebc9672401bebfc599b7535696eead0c75f4f40ffa735be802b5d6a62
|
|
97
|
+
obs4REF/obs4REF/ESSO/TropFlux-1-0/mon/tauu/gn/v20210727/tauu_mon_TropFlux-1-0_PCMDI_gn_197901-201707.nc b073ed8f915064cf69daeb51d5c31b1167ca8f1ac1f5d4f324ecdfd5847827c6
|
|
98
|
+
obs4REF/obs4REF/ESSO/TropFlux-1-0/mon/tauv/gn/v20210727/tauv_mon_TropFlux-1-0_PCMDI_gn_197901-201707.nc f9b27f56e08dbccec19aa33ac70f1f04bd51eac4d1fa7554c237676b7a3411e2
|
|
99
|
+
obs4REF/obs4REF/ESSO/TropFlux-1-0/mon/ts/gn/v20210727/ts_mon_TropFlux-1-0_PCMDI_gn_197901-201707.nc 8c8857d8dca575d7b2e9cfd7130cfe6172d96e41614ed3666cbfbdb4af9fbdda
|
|
100
|
+
obs4REF/obs4REF/MOHC/HadISST-1-1/mon/ts/gn/v20210727/ts_mon_HadISST-1-1_PCMDI_gn_187001-201907.nc f5cc77d002cd90dc63c63a4db62863fcbf72763d02ae7ba743ff691fe3b10fe3
|
|
101
|
+
obs4REF/obs4REF/NASA-GSFC/TRMM-3B43v-7/mon/pr/gn/v20210727/pr_mon_TRMM-3B43v-7_PCMDI_gn_199801-201712.nc 5df3a5cb29bb08f317dda64bd3659d81c382d69c29d1325f461cbcb0272eb5bc
|
|
102
|
+
obs4REF/obs4REF/NOAA-ESRL-PSD/20CR/mon/psl/gn/v20210727/psl_mon_20CR_PCMDI_gn_187101-201212.nc 47c894191e9a9f62d4c455721ff6bf1a5ab1571082b5a08a2c52ff1240b77ac3
|
|
103
|
+
obs4REF/obs4REF/NOAA-ESRL-PSD/20CR/mon/ts/gn/v20210727/ts_mon_20CR_PCMDI_gn_187101-201212.nc c9a4a75c3df7c24e5662756a7ca8674af8275244ea9fe213384d1a1e41e1bbad
|
|
104
|
+
obs4REF/obs4REF/NOAA-NCEI/CMAP-V1902/mon/pr/gn/v20210727/pr_mon_CMAP-V1902_PCMDI_gn_197901-201901.nc 0a73fa7fef1f631321f2cb70a6aea12c9cc2a2ed00e6cb5d8c03618fe6c9f2ae
|
|
105
|
+
obs4REF/obs4REF/NOAA-NCEI/GPCP-2-3/mon/pr/gn/v20210727/pr_mon_GPCP-2-3_PCMDI_gn_197901-201907.nc dcca502f8748a73b0be5c6e402e14086f1d45e5c85be3cbbe63ba6c07ab0eb21
|
climate_ref/datasets/cmip6.py
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
import traceback
|
|
3
4
|
import warnings
|
|
4
5
|
from datetime import datetime
|
|
5
6
|
from pathlib import Path
|
|
6
7
|
from typing import Any
|
|
7
8
|
|
|
8
|
-
import ecgtools.parsers
|
|
9
9
|
import pandas as pd
|
|
10
|
+
import xarray as xr
|
|
10
11
|
from ecgtools import Builder
|
|
12
|
+
from ecgtools.parsers.utilities import extract_attr_with_regex # type: ignore
|
|
13
|
+
from loguru import logger
|
|
11
14
|
|
|
12
15
|
from climate_ref.datasets.base import DatasetAdapter
|
|
13
16
|
from climate_ref.models.dataset import CMIP6Dataset
|
|
@@ -65,6 +68,88 @@ def _clean_branch_time(branch_time: pd.Series[str]) -> pd.Series[float]:
|
|
|
65
68
|
return pd.to_numeric(branch_time.astype(str).str.replace("D", ""), errors="coerce")
|
|
66
69
|
|
|
67
70
|
|
|
71
|
+
def parse_cmip6(file: str) -> dict[str, Any]:
|
|
72
|
+
"""
|
|
73
|
+
Parser for CMIP6
|
|
74
|
+
|
|
75
|
+
This function parses the CMIP6 dataset and returns a dictionary with the metadata.
|
|
76
|
+
This was copied from the ecgtools package, but we want to log the exception when it fails.
|
|
77
|
+
"""
|
|
78
|
+
keys = sorted(
|
|
79
|
+
{
|
|
80
|
+
"activity_id",
|
|
81
|
+
"branch_method",
|
|
82
|
+
"branch_time_in_child",
|
|
83
|
+
"branch_time_in_parent",
|
|
84
|
+
"experiment",
|
|
85
|
+
"experiment_id",
|
|
86
|
+
"frequency",
|
|
87
|
+
"grid",
|
|
88
|
+
"grid_label",
|
|
89
|
+
"institution_id",
|
|
90
|
+
"nominal_resolution",
|
|
91
|
+
"parent_activity_id",
|
|
92
|
+
"parent_experiment_id",
|
|
93
|
+
"parent_source_id",
|
|
94
|
+
"parent_time_units",
|
|
95
|
+
"parent_variant_label",
|
|
96
|
+
"realm",
|
|
97
|
+
"product",
|
|
98
|
+
"source_id",
|
|
99
|
+
"source_type",
|
|
100
|
+
"sub_experiment",
|
|
101
|
+
"sub_experiment_id",
|
|
102
|
+
"table_id",
|
|
103
|
+
"variable_id",
|
|
104
|
+
"variant_label",
|
|
105
|
+
}
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
try:
|
|
109
|
+
with xr.open_dataset(file, chunks={}, use_cftime=True) as ds:
|
|
110
|
+
info = {key: ds.attrs.get(key) for key in keys}
|
|
111
|
+
info["member_id"] = info["variant_label"]
|
|
112
|
+
|
|
113
|
+
variable_id = info["variable_id"]
|
|
114
|
+
if variable_id: # pragma: no branch
|
|
115
|
+
attrs = ds[variable_id].attrs
|
|
116
|
+
for attr in ["standard_name", "long_name", "units"]:
|
|
117
|
+
info[attr] = attrs.get(attr)
|
|
118
|
+
|
|
119
|
+
# Set the default of # of vertical levels to 1
|
|
120
|
+
vertical_levels = 1
|
|
121
|
+
start_time, end_time = None, None
|
|
122
|
+
init_year = None
|
|
123
|
+
try:
|
|
124
|
+
vertical_levels = ds[ds.cf["vertical"].name].size
|
|
125
|
+
except (KeyError, AttributeError, ValueError):
|
|
126
|
+
...
|
|
127
|
+
|
|
128
|
+
try:
|
|
129
|
+
start_time, end_time = str(ds.cf["T"][0].data), str(ds.cf["T"][-1].data)
|
|
130
|
+
except (KeyError, AttributeError, ValueError):
|
|
131
|
+
...
|
|
132
|
+
if info.get("sub_experiment_id"): # pragma: no branch
|
|
133
|
+
init_year = extract_attr_with_regex(info["sub_experiment_id"], r"\d{4}")
|
|
134
|
+
if init_year: # pragma: no cover
|
|
135
|
+
init_year = int(init_year)
|
|
136
|
+
info["vertical_levels"] = vertical_levels
|
|
137
|
+
info["init_year"] = init_year
|
|
138
|
+
info["start_time"] = start_time
|
|
139
|
+
info["end_time"] = end_time
|
|
140
|
+
if not (start_time and end_time):
|
|
141
|
+
info["time_range"] = None
|
|
142
|
+
else:
|
|
143
|
+
info["time_range"] = f"{start_time}-{end_time}"
|
|
144
|
+
info["path"] = str(file)
|
|
145
|
+
info["version"] = extract_attr_with_regex(str(file), regex=r"v\d{4}\d{2}\d{2}|v\d{1}") or "v0"
|
|
146
|
+
return info
|
|
147
|
+
|
|
148
|
+
except Exception:
|
|
149
|
+
logger.exception(f"Failed to parse {file}")
|
|
150
|
+
return {"INVALID_ASSET": file, "TRACEBACK": traceback.format_exc()}
|
|
151
|
+
|
|
152
|
+
|
|
68
153
|
class CMIP6DatasetAdapter(DatasetAdapter):
|
|
69
154
|
"""
|
|
70
155
|
Adapter for CMIP6 datasets
|
|
@@ -171,7 +256,7 @@ class CMIP6DatasetAdapter(DatasetAdapter):
|
|
|
171
256
|
depth=10,
|
|
172
257
|
include_patterns=["*.nc"],
|
|
173
258
|
joblib_parallel_kwargs={"n_jobs": self.n_jobs},
|
|
174
|
-
).build(parsing_func=
|
|
259
|
+
).build(parsing_func=parse_cmip6) # type: ignore
|
|
175
260
|
|
|
176
261
|
datasets: pd.DataFrame = builder.df.drop(["init_year"], axis=1)
|
|
177
262
|
|
|
@@ -133,24 +133,25 @@ def handle_execution_result(
|
|
|
133
133
|
# execution.mark_failed()
|
|
134
134
|
|
|
135
135
|
# Perform a bulk insert of scalar values
|
|
136
|
-
# TODO: The section below will likely fail until we have agreed on a controlled vocabulary
|
|
137
136
|
# The current implementation will swallow the exception, but display a log message
|
|
138
137
|
try:
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
138
|
+
scalar_values = [
|
|
139
|
+
{
|
|
140
|
+
"execution_id": execution.id,
|
|
141
|
+
"value": result.value,
|
|
142
|
+
"attributes": result.attributes,
|
|
143
|
+
**result.dimensions,
|
|
144
|
+
}
|
|
145
|
+
for result in cmec_metric_bundle.iter_results()
|
|
146
|
+
]
|
|
147
|
+
if scalar_values:
|
|
148
|
+
# Perform this in a nested transaction to rollback if something goes wrong
|
|
149
|
+
# We will lose the metric values for a given execution, but not the whole execution
|
|
150
|
+
with database.session.begin_nested():
|
|
151
|
+
database.session.execute(
|
|
152
|
+
insert(ScalarMetricValue),
|
|
153
|
+
scalar_values,
|
|
154
|
+
)
|
|
154
155
|
except Exception:
|
|
155
156
|
# TODO: Remove once we have settled on a controlled vocabulary
|
|
156
157
|
logger.exception("Something went wrong when ingesting diagnostic values")
|
climate_ref/provider_registry.py
CHANGED
|
@@ -34,9 +34,10 @@ def _register_provider(db: Database, provider: DiagnosticProvider) -> None:
|
|
|
34
34
|
provider_model, created = db.get_or_create(
|
|
35
35
|
Provider,
|
|
36
36
|
slug=provider.slug,
|
|
37
|
-
version=provider.version,
|
|
38
37
|
defaults={
|
|
39
38
|
"name": provider.name,
|
|
39
|
+
# TODO: Handle if this changes
|
|
40
|
+
"version": provider.version,
|
|
40
41
|
},
|
|
41
42
|
)
|
|
42
43
|
if created:
|
climate_ref/solver.py
CHANGED
|
@@ -49,6 +49,12 @@ class DiagnosticExecution:
|
|
|
49
49
|
diagnostic: Diagnostic
|
|
50
50
|
datasets: ExecutionDatasetCollection
|
|
51
51
|
|
|
52
|
+
def execution_slug(self) -> str:
|
|
53
|
+
"""
|
|
54
|
+
Get a slug for the execution
|
|
55
|
+
"""
|
|
56
|
+
return f"{self.diagnostic.full_slug()}/{self.dataset_key}"
|
|
57
|
+
|
|
52
58
|
@property
|
|
53
59
|
def dataset_key(self) -> str:
|
|
54
60
|
"""
|
|
@@ -290,12 +296,14 @@ class ExecutionSolver:
|
|
|
290
296
|
yield from solve_executions(self.data_catalog, diagnostic, provider)
|
|
291
297
|
|
|
292
298
|
|
|
293
|
-
def solve_required_executions(
|
|
299
|
+
def solve_required_executions( # noqa: PLR0913
|
|
294
300
|
db: Database,
|
|
295
301
|
dry_run: bool = False,
|
|
296
302
|
solver: ExecutionSolver | None = None,
|
|
297
303
|
config: Config | None = None,
|
|
298
304
|
timeout: int = 60,
|
|
305
|
+
one_per_provider: bool = False,
|
|
306
|
+
one_per_diagnostic: bool = False,
|
|
299
307
|
) -> None:
|
|
300
308
|
"""
|
|
301
309
|
Solve for executions that require recalculation
|
|
@@ -317,6 +325,9 @@ def solve_required_executions(
|
|
|
317
325
|
|
|
318
326
|
executor = config.executor.build(config, db)
|
|
319
327
|
|
|
328
|
+
diagnostic_count = {}
|
|
329
|
+
provider_count = {}
|
|
330
|
+
|
|
320
331
|
for potential_execution in solver.solve():
|
|
321
332
|
# The diagnostic output is first written to the scratch directory
|
|
322
333
|
definition = potential_execution.build_execution_definition(output_root=config.paths.scratch)
|
|
@@ -337,7 +348,6 @@ def solve_required_executions(
|
|
|
337
348
|
.join(DiagnosticModel.provider)
|
|
338
349
|
.filter(
|
|
339
350
|
ProviderModel.slug == potential_execution.provider.slug,
|
|
340
|
-
ProviderModel.version == potential_execution.provider.version,
|
|
341
351
|
DiagnosticModel.slug == potential_execution.diagnostic.slug,
|
|
342
352
|
)
|
|
343
353
|
.one()
|
|
@@ -352,17 +362,35 @@ def solve_required_executions(
|
|
|
352
362
|
},
|
|
353
363
|
)
|
|
354
364
|
|
|
365
|
+
if diagnostic.provider.slug not in provider_count:
|
|
366
|
+
provider_count[diagnostic.provider.slug] = 0
|
|
367
|
+
if diagnostic.full_slug() not in diagnostic_count:
|
|
368
|
+
diagnostic_count[diagnostic.full_slug()] = 0
|
|
369
|
+
|
|
355
370
|
if created:
|
|
356
|
-
logger.info(
|
|
357
|
-
f"Created new execution group: "
|
|
358
|
-
f"{definition.key!r} for {potential_execution.diagnostic.full_slug()}"
|
|
359
|
-
)
|
|
371
|
+
logger.info(f"Created new execution group: {potential_execution.execution_slug()!r}")
|
|
360
372
|
db.session.flush()
|
|
361
373
|
|
|
374
|
+
# Check if we should run given the one_per_provider or one_per_diagnostic flags
|
|
375
|
+
one_of_check_failed = (
|
|
376
|
+
one_per_provider and provider_count.get(diagnostic.provider.slug, 0) > 0
|
|
377
|
+
) or (one_per_diagnostic and diagnostic_count.get(diagnostic.full_slug(), 0) > 0)
|
|
378
|
+
|
|
379
|
+
logger.debug(
|
|
380
|
+
f"one_per_provider={one_per_provider}, one_per_diagnostic={one_per_diagnostic}, "
|
|
381
|
+
f"one_of_check_failed={one_of_check_failed}, diagnostic_count={diagnostic_count}, "
|
|
382
|
+
f"provider_count={provider_count}"
|
|
383
|
+
)
|
|
384
|
+
|
|
362
385
|
if execution_group.should_run(definition.datasets.hash):
|
|
386
|
+
if (one_per_provider or one_per_diagnostic) and one_of_check_failed:
|
|
387
|
+
logger.info(
|
|
388
|
+
f"Skipping execution due to one-of check: {potential_execution.execution_slug()!r}"
|
|
389
|
+
)
|
|
390
|
+
continue
|
|
391
|
+
|
|
363
392
|
logger.info(
|
|
364
|
-
f"Running new execution for execution group: "
|
|
365
|
-
f"{definition.key!r} for {potential_execution.diagnostic.full_slug()}"
|
|
393
|
+
f"Running new execution for execution group: {potential_execution.execution_slug()!r}"
|
|
366
394
|
)
|
|
367
395
|
execution = Execution(
|
|
368
396
|
execution_group=execution_group,
|
|
@@ -379,5 +407,8 @@ def solve_required_executions(
|
|
|
379
407
|
definition=definition,
|
|
380
408
|
execution=execution,
|
|
381
409
|
)
|
|
410
|
+
|
|
411
|
+
provider_count[diagnostic.provider.slug] += 1
|
|
412
|
+
diagnostic_count[diagnostic.full_slug()] += 1
|
|
382
413
|
if timeout > 0:
|
|
383
414
|
executor.join(timeout=timeout)
|
climate_ref/testing.py
CHANGED
|
@@ -26,7 +26,7 @@ def _determine_test_directory() -> Path | None:
|
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
TEST_DATA_DIR = _determine_test_directory()
|
|
29
|
-
SAMPLE_DATA_VERSION = "v0.
|
|
29
|
+
SAMPLE_DATA_VERSION = "v0.6.0"
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
def fetch_sample_data(force_cleanup: bool = False, symlink: bool = False) -> None:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: climate-ref
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.4
|
|
4
4
|
Summary: Application which runs the CMIP Rapid Evaluation Framework
|
|
5
5
|
Author-email: Jared Lewis <jared.lewis@climate-resource.com>, Mika Pflueger <mika.pflueger@climate-resource.com>, Bouwe Andela <b.andela@esciencecenter.nl>, Jiwoo Lee <lee1043@llnl.gov>, Min Xu <xum1@ornl.gov>, Nathan Collier <collierno@ornl.gov>, Dora Hegedus <dora.hegedus@stfc.ac.uk>
|
|
6
6
|
License: Apache-2.0
|
|
@@ -75,8 +75,8 @@ pip install climate-ref[aft-providers]
|
|
|
75
75
|
|
|
76
76
|
```bash
|
|
77
77
|
# Ingest some observation datasets
|
|
78
|
-
ref datasets fetch-data --registry obs4ref
|
|
79
|
-
ref datasets fetch-data --registry sample-data
|
|
78
|
+
ref datasets fetch-data --registry obs4ref ---output-directory datasets/obs4ref
|
|
79
|
+
ref datasets fetch-data --registry sample-data ---output-directory datasets/sample-data
|
|
80
80
|
|
|
81
81
|
# Run metrics against your climate data
|
|
82
82
|
ref solve
|
|
@@ -1,31 +1,31 @@
|
|
|
1
1
|
climate_ref/__init__.py,sha256=OJl5EnjLyEoCQpa0zQ8edV8EcU2YxBJ0xjermIlm9Bw,820
|
|
2
2
|
climate_ref/_config_helpers.py,sha256=-atI5FX7SukhLE_jz_rL-EHQ7s0YYqKu3dSFYWxSyMU,6632
|
|
3
3
|
climate_ref/alembic.ini,sha256=WRvbwSIFuZ7hWNMnR2-yHPJAwYUnwhvRYBzkJhtpGdg,3535
|
|
4
|
-
climate_ref/config.py,sha256=
|
|
4
|
+
climate_ref/config.py,sha256=tHuKNCPM9BVq9Lai6WOpBw5FbYHtVQ4fDF1MIEXuP1Q,16482
|
|
5
5
|
climate_ref/constants.py,sha256=9RaNLgUSuQva7ki4eRW3TjOKeVP6T81QNiu0veB1zVk,111
|
|
6
|
-
climate_ref/database.py,sha256=
|
|
7
|
-
climate_ref/provider_registry.py,sha256=
|
|
6
|
+
climate_ref/database.py,sha256=b_6XHdr78Mo7KeLqQJ5DjLsySHPdQE83P8dRpdMfzfM,8661
|
|
7
|
+
climate_ref/provider_registry.py,sha256=dyfj4vU6unKHNXtT03HafQtAi3LilL37uvu3paCnmNY,4159
|
|
8
8
|
climate_ref/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
|
-
climate_ref/solver.py,sha256=
|
|
10
|
-
climate_ref/testing.py,sha256=
|
|
9
|
+
climate_ref/solver.py,sha256=5m3L0t9JNCb7h5dcNF4Wuo9BsCzOfhkeUs1UmKdGLqI,14963
|
|
10
|
+
climate_ref/testing.py,sha256=MbecuSUMFYtyQFvTuKQInIFJQQapvLZVk5ddADwf3Og,4105
|
|
11
11
|
climate_ref/cli/__init__.py,sha256=1SjCNQ2fV5GtQX_TS77rNlf0h_ECGAup58WYGlcOTTs,4112
|
|
12
12
|
climate_ref/cli/_utils.py,sha256=6bIb8zEVvzXyKpv8MG58T-T2L2jH-G8WNrOOGpz3uCw,1918
|
|
13
13
|
climate_ref/cli/config.py,sha256=8I6CLdqKgTu6yaASy-qG0T839Fc0lDZtLSZ6YCc4wOY,520
|
|
14
14
|
climate_ref/cli/datasets.py,sha256=4k5iSeft5klYKFPBPkmN9sw1RNT7WWp6eI2RPxPT-SM,7519
|
|
15
15
|
climate_ref/cli/executions.py,sha256=sZXyVFYWML5mD7dE8xlsqyunsrwOIweTBDEUKCjXEpo,6798
|
|
16
16
|
climate_ref/cli/providers.py,sha256=eS9IaQxW8zGxidr8TWt7thdMU5JH53u4T3xbcIe2C_E,2455
|
|
17
|
-
climate_ref/cli/solve.py,sha256=
|
|
18
|
-
climate_ref/dataset_registry/obs4ref_reference.txt,sha256=
|
|
19
|
-
climate_ref/dataset_registry/sample_data.txt,sha256=
|
|
17
|
+
climate_ref/cli/solve.py,sha256=oF416rXwFC_GZoFe4Ijsr2ReC5x3zkxKOnt_4LtwAmo,1061
|
|
18
|
+
climate_ref/dataset_registry/obs4ref_reference.txt,sha256=fWhNAwXbUOaXjqvcCdUjtlTmz5e19x5UZT-g3lcppok,4507
|
|
19
|
+
climate_ref/dataset_registry/sample_data.txt,sha256=EvoYXdqEpu_-hTmLyS1MQmgf2e2X5u4u70THx6Dnflo,19766
|
|
20
20
|
climate_ref/datasets/__init__.py,sha256=PV3u5ZmhyfcHbKqySgwVA8m4-naZgxzydLXSBqdTGLM,1171
|
|
21
21
|
climate_ref/datasets/base.py,sha256=sgfR548rLZRNPIaZKKXmGp8E_dyoAW1NONZnuVbFXa0,8286
|
|
22
|
-
climate_ref/datasets/cmip6.py,sha256=
|
|
22
|
+
climate_ref/datasets/cmip6.py,sha256=w3Co17bvcrAXeS8Iwt47AAaW8zqpwcLeqhGPtoifDIM,9121
|
|
23
23
|
climate_ref/datasets/obs4mips.py,sha256=PQhI3QKlYA9L2d_MpnlcVrUn4irMG7Iu-II8l1ncjUs,7032
|
|
24
24
|
climate_ref/datasets/pmp_climatology.py,sha256=goHDc_3B2Wdiy_hmpERNvWDdDYZACPOyFDt3Du6nGc0,534
|
|
25
25
|
climate_ref/datasets/utils.py,sha256=iLJO7h4G3DWsRe9hIC4qkIyi5_zIW1ZMw-FDASLujtM,359
|
|
26
26
|
climate_ref/executor/__init__.py,sha256=DooN4jQudmLHyw24IfqNfWynfa1vEolLs-mZ7uY8O0k,604
|
|
27
27
|
climate_ref/executor/local.py,sha256=W62scL2UTtBurhYQz9hVIHrYiq9-FeMKRdnajqiohN0,7753
|
|
28
|
-
climate_ref/executor/result_handling.py,sha256=
|
|
28
|
+
climate_ref/executor/result_handling.py,sha256=y4RBryg5L4H-LeHbnc_5BJAyiepvfdnKGzBNzWHV35E,7881
|
|
29
29
|
climate_ref/executor/synchronous.py,sha256=o4TndsoKMu9AzJYLkusU9lRkgHCy6HcCP46tEs6o86U,1895
|
|
30
30
|
climate_ref/migrations/README,sha256=xM5osYbyEbEFA2eh5kwary_oh-5VFWtDubA-vgWwvlE,935
|
|
31
31
|
climate_ref/migrations/env.py,sha256=8GvBLhGTuQy6MKYMj7QszJEQ2LNewf1Z9kB9dBHQs9I,4375
|
|
@@ -39,9 +39,9 @@ climate_ref/models/diagnostic.py,sha256=YB6xzbEXdpz2j-Ddf19RV8mAiWBrkmtRmiAEUV3t
|
|
|
39
39
|
climate_ref/models/execution.py,sha256=lRCpaKLSR7rZbuoL94GW76tm9wLMsSDoIOA7bIa6xgY,9848
|
|
40
40
|
climate_ref/models/metric_value.py,sha256=44OLcZz-qLx-p_9w7YWDKpD5S7Y9HyTKKsvSb77RBro,10190
|
|
41
41
|
climate_ref/models/provider.py,sha256=RAE2qAAxwObu-72CdK4kt5ACMmKYEn07WJm7DU9hF28,990
|
|
42
|
-
climate_ref-0.5.
|
|
43
|
-
climate_ref-0.5.
|
|
44
|
-
climate_ref-0.5.
|
|
45
|
-
climate_ref-0.5.
|
|
46
|
-
climate_ref-0.5.
|
|
47
|
-
climate_ref-0.5.
|
|
42
|
+
climate_ref-0.5.4.dist-info/METADATA,sha256=beRYbe7GKZpf3fLfzqeV8epSVaG-nZ9xw0QN1xHqtdE,4382
|
|
43
|
+
climate_ref-0.5.4.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
44
|
+
climate_ref-0.5.4.dist-info/entry_points.txt,sha256=IaggEJlDIhoYWXdXJafacWbWtCcoEqUKceP1qD7_7vU,44
|
|
45
|
+
climate_ref-0.5.4.dist-info/licenses/LICENCE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
46
|
+
climate_ref-0.5.4.dist-info/licenses/NOTICE,sha256=4qTlax9aX2-mswYJuVrLqJ9jK1IkN5kSBqfVvYLF3Ws,128
|
|
47
|
+
climate_ref-0.5.4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|