-
Notifications
You must be signed in to change notification settings - Fork 38
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weβll occasionally send you account related emails.
Already on GitHub? Sign in to your account
on-the-fly cmoriser for ACCESS native data #2430
Changes from all commits
b774a36
5acf65c
e7277a0
a0a05bc
a32a48f
efcea11
9c0c9b8
f98406d
2b5f8d5
8043643
a86e1d9
c8bc262
f389559
7815a07
6db0088
4018368
0e864b6
200e2d6
803c544
fbfefdc
88047fc
0cd3498
7cd6cf8
7c91b6c
b446f6f
9a0104f
64054ba
b8c6057
869c481
6885d9a
8cc0f3b
c803837
d2d1da3
013d5f0
b116bfc
c371ba0
84fe2ed
6d80f5f
a566cfd
b666121
f7fb9d7
97acf57
645a203
5f587df
f10b23c
fb3ef3f
fdaf89d
857b9d1
1753b8d
b0e1400
7a06b34
7f2ffeb
24ef703
c5c7393
4569cf5
cadd99e
42ec653
7422346
41c6530
c92373d
fe5e4d6
fecb98b
8f744ff
1456249
bd3769e
e160394
573b4f1
f7081ba
b5143bd
08722f0
8e89122
2b93eb3
8743481
e909bf4
21481a3
17789cb
2ee9aa0
320ec83
8ab57f7
66b7d7e
f29e18d
442b2db
7022df1
151642e
2f500ea
5d6d519
4f26996
814ece5
d08ae67
0451b7d
18ceca5
e15236e
dcb13a7
1d3a0cf
bac5051
44af431
1106514
5a837e5
04921ea
9105512
ce60ea0
41aeee0
ef3e7de
b36738d
07519cb
475f4b8
5fd5b64
862d318
70d4258
cb87ce6
155c7cc
71252bd
f429566
d48dac9
043b229
ab151ab
78e9a68
0e97c34
f033eea
0f2ff15
43279b0
bc69800
f750d5a
81be7d3
fdf9f56
18d31cc
7370733
c5acc53
54caba7
987bdd9
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -564,6 +564,64 @@ explained in :ref:`extra_facets`, and which content is :download:`available here | |
</../esmvalcore/config/extra_facets/ipslcm-mappings.yml>`. These multi-variable | ||
files must also undergo some data selection. | ||
|
||
.. _read_access-esm: | ||
|
||
ACCESS-ESM | ||
^^^^^^^^^^ | ||
|
||
ESMValTool can read native `ACCESS-ESM <https://research.csiro.au/access/about/esm1-5/>`__ | ||
model output. | ||
|
||
.. warning:: | ||
|
||
This is the first version of ACCESS-ESM CMORizer for ESMValCore. Currently, | ||
Supported variables: ``pr``, ``ps``, ``psl``, ``rlds``, ``tas``, ``ta``, ``va``, | ||
``ua``, ``zg``, ``hus``, ``clt``, ``rsus``, ``rlus``. | ||
|
||
The default naming conventions for input directories and files for ACCESS output are | ||
|
||
* input directories: ``{institute}/{sub_dataset}/{exp}/{modeling_realm}/netCDF`` | ||
* input files: ``{sub_dataset}.{special_attr}-*.nc`` | ||
|
||
.. hint:: | ||
|
||
We only provide one default `input_dir` since this is how ACCESS-ESM native data was | ||
stored on NCI. Users can modify this path in the :ref:`config-developer` to match their local file structure. | ||
|
||
|
||
Thus, example dataset entries could look like this: | ||
|
||
.. code-block:: yaml | ||
|
||
dataset: | ||
- {project: ACCESS, mip: Amon, dataset:ACCESS_ESM1_5, sub_dataset: HI-CN-05, | ||
exp: history, modeling_realm: atm, special_attr: pa, start_year: 1986, end_year: 1986} | ||
|
||
|
||
Similar to any other fix, the ACCESS-ESM fix allows the use of :ref:`extra | ||
facets<extra_facets>`. | ||
By default, the file :download:`access-mappings.yml | ||
</../esmvalcore/config/extra_facets/access-mappings.yml>` is used for that | ||
purpose. | ||
For some variables, extra facets are necessary; otherwise ESMValCore cannot | ||
read them properly. | ||
Supported keys for extra facets are: | ||
|
||
==================== ====================================== ================================= | ||
rhaegar325 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
Key Description Default value if not specified | ||
==================== ====================================== ================================= | ||
``raw_name`` Variable name of the variable in the CMOR variable name of the | ||
raw input file corresponding variable | ||
``modeling_realm`` Realm attribute include `atm`, `ice` No default (needs to be | ||
and `oce` specified in extra facets or | ||
recipe if default DRS is used) | ||
```special_attr`` A special attribute in the filename No default | ||
`ACCESS-ESM` raw data, it's related to | ||
frquency of raw data | ||
``sub_dataset`` Part of the ACCESS-ESM raw dataset No default | ||
root, need to specify if you want to | ||
use the cmoriser | ||
Comment on lines
+621
to
+623
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is it part of the root ? I don't think so. careful to not create confusion with the rootpath in the config file. |
||
==================== ====================================== ================================= | ||
|
||
.. _data-retrieval: | ||
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
"""Fix base classes for ACCESS-ESM on-the-fly CMORizer.""" | ||
|
||
import logging | ||
|
||
from iris.cube import CubeList | ||
|
||
from esmvalcore.cmor._fixes.native_datasets import NativeDatasetFix | ||
|
||
logger = logging.getLogger(__name__) | ||
|
||
|
||
class AccessFix(NativeDatasetFix): | ||
"""Fixes functions.""" | ||
|
||
def fix_coord_system(self, cube): | ||
"""Delete coord_system to make CubeList able to merge.""" | ||
for dim in cube.dim_coords: | ||
if dim.coord_system is not None: | ||
cube.coord(dim.standard_name).coord_system = None | ||
|
||
def get_cubes_from_multivar(self, cubes): | ||
"""Get cube before calculate from multiple variables.""" | ||
name_list = self.extra_facets.get('raw_name', | ||
self.vardef.short_name) | ||
|
||
data_list = [] | ||
for name in name_list: | ||
data_list.append(self.get_cube(cubes, name)) | ||
return CubeList(data_list) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
"""On-the-fly CMORizer for ACCESS-ESM.""" | ||
import logging | ||
|
||
from iris.cube import CubeList | ||
|
||
from ._base_fix import AccessFix | ||
|
||
logger = logging.getLogger(__name__) | ||
|
||
|
||
class AllVars(AccessFix): | ||
"""Fixes for all variables.""" | ||
|
||
def fix_metadata(self, cubes): | ||
"""Fix metadata. | ||
|
||
Parameters | ||
---------- | ||
cubes : iris.cube.CubeList | ||
Input cubes. | ||
|
||
Returns | ||
------- | ||
iris.cube.CubeList | ||
""" | ||
if len(cubes) == 1: | ||
cube = cubes[0] | ||
else: | ||
cube = self.get_cube(cubes) | ||
|
||
# Fix coordinates | ||
self.fix_scalar_coords(cube) | ||
self.fix_var_metadata(cube) | ||
self.fix_lon_metadata(cube) | ||
self.fix_lat_metadata(cube) | ||
|
||
# Fix coordinate 'height' | ||
if 'height_0' in [var.var_name for var in cube.coords()]: | ||
self.fix_height_metadata(cube) | ||
# Fix coordinate 'pressure' | ||
if 'pressure' in [var.var_name for var in cube.coords()]: | ||
self.fix_plev_metadata(cube, coord='pressure') | ||
|
||
# Fix coord system | ||
self.fix_coord_system(cube) | ||
|
||
return CubeList([cube]) | ||
|
||
|
||
class Rlus(AccessFix): | ||
"""Fixes for Rlus.""" | ||
|
||
def fix_rlus_data(self, cubes): | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. rename to |
||
"""Fix rlus data.""" | ||
return cubes[0] - cubes[1] + cubes[2] - cubes[3] | ||
|
||
def fix_metadata(self, cubes): | ||
"""Fix metadata. | ||
|
||
Parameters | ||
---------- | ||
cubes : iris.cube.CubeList | ||
Input cubes. | ||
|
||
Returns | ||
------- | ||
iris.cube.CubeList | ||
""" | ||
cubes = self.get_cubes_from_multivar(cubes) | ||
|
||
cube = self.fix_rlus_data(cubes) | ||
|
||
return CubeList([cube]) | ||
|
||
|
||
class Rsus(AccessFix): | ||
"""Fixes for Rsus.""" | ||
|
||
def fix_rsus_data(self, cubes): | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. rename to |
||
"""Fix rsus data.""" | ||
return cubes[0] - cubes[1] | ||
|
||
def fix_metadata(self, cubes): | ||
"""Fix metadata. | ||
|
||
Parameters | ||
---------- | ||
cubes : iris.cube.CubeList | ||
Input cubes. | ||
|
||
Returns | ||
------- | ||
iris.cube.CubeList | ||
""" | ||
cubes = self.get_cubes_from_multivar(cubes) | ||
|
||
cube = self.fix_rsus_data(cubes) | ||
|
||
return CubeList([cube]) | ||
|
||
|
||
class Tas(AccessFix): | ||
"""Fixes for Rsus.""" | ||
|
||
def fix_metadata(self, cubes): | ||
"""Fix metadata. | ||
|
||
Parameters | ||
---------- | ||
cubes : iris.cube.CubeList | ||
Input cubes. | ||
|
||
Returns | ||
------- | ||
iris.cube.CubeList | ||
""" | ||
cube = self.get_cube(cubes) | ||
|
||
self.fix_height_metadata(cube) | ||
self.fix_height_value(cube) | ||
|
||
return CubeList([cube]) | ||
|
||
def fix_height_value(self, cube): | ||
"""Fix height value to make it comparable to other dataset.""" | ||
if cube.coord('height').points[0] != 2: | ||
cube.coord('height').points = [2] |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
# Extra facets for native ACCESS model output | ||
|
||
# A complete list of supported keys is given in the documentation (see | ||
# ESMValCore/doc/quickstart/find_data.rst). | ||
--- | ||
|
||
ACCESS_ESM: | ||
|
||
'*': | ||
|
||
tas: | ||
raw_name: fld_s03i236 | ||
modeling_realm: atm | ||
|
||
pr: | ||
raw_name: fld_s05i216 | ||
modeling_realm: atm | ||
|
||
ps: | ||
raw_name: fld_s00i409 | ||
modeling_realm: atm | ||
|
||
clt: | ||
raw_name: fld_s02i204 | ||
modeling_realm: atm | ||
|
||
psl: | ||
raw_name: fld_s16i222 | ||
modeling_realm: atm | ||
|
||
hus: | ||
raw_name: fld_s30i205 | ||
modeling_realm: atm | ||
|
||
zg: | ||
raw_name: fld_s30i207 | ||
modeling_realm: atm | ||
|
||
va: | ||
raw_name: fld_s30i202 | ||
modeling_realm: atm | ||
|
||
ua: | ||
raw_name: fld_s30i201 | ||
modeling_realm: atm | ||
|
||
ta: | ||
raw_name: fld_s30i204 | ||
modeling_realm: atm | ||
|
||
rlus: | ||
raw_name: | ||
- fld_s02i207 | ||
- fld_s02i201 | ||
- fld_s03i332 | ||
- fld_s02i205 | ||
modeling_realm: atm | ||
|
||
rlds: | ||
raw_name: fld_s02i207 | ||
modeling_realm: atm | ||
|
||
rsus: | ||
raw_name: | ||
- fld_s01i235 | ||
- fld_s01i201 | ||
modeling_realm: atm | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not sure if this is intentional or can be confusing as currently searching for published CMIP6 we use
dataset: ACCESS-ESM1-5
eg:does it make more sense to have
{ institute: ACCESS_ESM, dataset: ACCESS-ESM1-5 }
(switch them)?then change input_dir default above?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This doesn't look resolved to me.
ACCESS-ESM1-5
is not the institute, but rather the name of the model, right? So this probably would be a better fit fordataset
(you can then rename your fix file fromcmor/_fixes/access/access_esm.py
tocmor/_fixes/access/access_esm1_5.py
and possible extend this with more fix files if you want to look at other versions of the model. Then you can get rid ofinstitute
altogether.