From 2274edae7b232e776ad43a1e68bbc9bb7d34c178 Mon Sep 17 00:00:00 2001 From: Matthew Mizielinski Date: Wed, 11 Feb 2026 16:14:58 +0000 Subject: [PATCH 1/5] Added UKCM2a-0-HH model --- .../common/plugins/cmip7/cmip7_attributes.py | 6 +- .../cdds/common/plugins/cmip7/cmip7_models.py | 56 +++- .../plugins/cmip7/data/model/UKCM2a-0-HH.json | 241 ++++++++++++++++++ 3 files changed, 293 insertions(+), 10 deletions(-) create mode 100644 cdds/cdds/common/plugins/cmip7/data/model/UKCM2a-0-HH.json diff --git a/cdds/cdds/common/plugins/cmip7/cmip7_attributes.py b/cdds/cdds/common/plugins/cmip7/cmip7_attributes.py index 8f5ae456a..5bb5f0b98 100644 --- a/cdds/cdds/common/plugins/cmip7/cmip7_attributes.py +++ b/cdds/cdds/common/plugins/cmip7/cmip7_attributes.py @@ -35,7 +35,7 @@ def further_info_url(self) -> str: self._request.metadata.experiment_id, self._request.metadata.sub_experiment_id, self._request.metadata.variant_label) - return further_info_url + return None class AttributesValidator: @@ -62,7 +62,7 @@ def validate_request(cls, request: 'Request') -> None: raise ValueError('Request must contain a model ID') if not request.metadata.experiment_id: raise ValueError('Request must contain an experiment ID') - if not request.metadata.sub_experiment_id: - raise ValueError('Request must contain a sub experiment ID') + # if not request.metadata.sub_experiment_id: + # raise ValueError('Request must contain a sub experiment ID') if not request.metadata.variant_label: raise ValueError('Request must contain a variant label') diff --git a/cdds/cdds/common/plugins/cmip7/cmip7_models.py b/cdds/cdds/common/plugins/cmip7/cmip7_models.py index 6b2877d10..a560ea4ce 100644 --- a/cdds/cdds/common/plugins/cmip7/cmip7_models.py +++ b/cdds/cdds/common/plugins/cmip7/cmip7_models.py @@ -72,7 +72,7 @@ def um_version(self) -> str: class UKCM2_0_LL_Params(BaseModelParameters): - """Class to store the parameters for the UKESM1_3_LL model.""" + """Class to store the parameters for the UKCM2.0 model.""" def __init__(self) -> None: super(UKCM2_0_LL_Params, self).__init__(Cmip7ModelId.UKCM2_0_LL) @@ -80,34 +80,75 @@ def __init__(self) -> None: @property def model_version(self) -> str: - """Returns the model version of the UKESM1_3_LL model. + """Returns the model version of the UKCM2.0 model. Returns ------- str - Model version of UKESM1_3_LL + Model version of UKCM2.0 """ return '1.0' @property def data_request_version(self) -> str: - """Returns the data request version of the UKESM1_3_LL model. + """Returns the data request version of the UKCM2.0 model. Returns ------- str - Data request version of UKESM1_3_LL + Data request version of UKCM2.0 """ return '01.00.17' @property def um_version(self) -> str: - """Returns the UM version of the UKESM1_3_LL model. + """Returns the UM version of the UKCM2.0 model. Returns ------- str - UM version of UKESM1_3_LL + UM version of UKCM2.0 + """ + return '10.8' + + +class UKCM2a_0_HH_Params(BaseModelParameters): + """Class to store the parameters for the UKCM2a high res model.""" + + def __init__(self) -> None: + super(UKCM2a_0_HH_Params, self).__init__(Cmip7ModelId.UKCM2A_0_HH) + self._grid_mappings: CMIP7GridMapping = CMIP7GridMapping() + + @property + def model_version(self) -> str: + """Returns the model version of the UKCM2a model. + + Returns + ------- + str + Model version of UKCM2a + """ + return '1.0' + + @property + def data_request_version(self) -> str: + """Returns the data request version of the UKCM2a model. + + Returns + ------- + str + Data request version of UKCM2a + """ + return '01.00.17' + + @property + def um_version(self) -> str: + """Returns the UM version of the UKCM2a model. + + Returns + ------- + str + UM version of UKCM2a """ return '10.8' @@ -124,6 +165,7 @@ def __init__(self) -> None: model_instances: List[BaseModelParameters] = [ UKESM1_3_LL_Params(), UKCM2_0_LL_Params(), + UKCM2a_0_HH_Params(), ] super(Cmip7ModelsStore, self).__init__(model_instances) self.logger = logging.getLogger(self.__class__.__name__) diff --git a/cdds/cdds/common/plugins/cmip7/data/model/UKCM2a-0-HH.json b/cdds/cdds/common/plugins/cmip7/data/model/UKCM2a-0-HH.json new file mode 100644 index 000000000..faba5df08 --- /dev/null +++ b/cdds/cdds/common/plugins/cmip7/data/model/UKCM2a-0-HH.json @@ -0,0 +1,241 @@ +{ + "stream_file_frequency": { + "quarterly": [ + ], + "monthly": [ + "ap4", + "ap5", + "ap6", + "ap7", + "ap8", + "ap9", + "apt", + "apm", + "apu", + "inm", + "ind", + "onm", + "ond" + ], + "10 day": [ + + ] + }, + "cycle_length": { + "ap4": "P3M", + "ap5": "P3M", + "apm": "P3M", + "apu": "P3M", + "ap6": "P3M", + "ap7": "P3M", + "ap8": "P1Y", + "ap9": "P1Y", + "apt": "P3M", + "ind": "P1Y", + "inm": "P5Y", + "ond": "P3M", + "onm": "P2Y" + }, + "memory": { + "ap4": "80G", + "ap5": "80G", + "apm": "8G", + "apu": "8G", + "ap6": "30G", + "ap7": "32G", + "ap8": "24G", + "ap9": "64G", + "apt": "12G", + "ind": "8G", + "inm": "8G", + "ond": "32G", + "onm": "16G" + }, + "temp_space": { + "ap4": 98304, + "ap5": 100000, + "apm": 8192, + "apu": 100000, + "ap6": 98304, + "ap7": 65536, + "ap8": 32768, + "ap9": 32768, + "apt": 32768, + "ind": 8192, + "inm": 8192, + "ond": 32768, + "onm": 32768 + }, + "sizing_info": { + "mon": { + "default": 10, + "85-960-1280": 1, + "85-961-1280": 1, + "86-960-1280": 1, + "75-4320-3604": 1 + }, + "yr": { + "default": 100 + }, + "day": { + "default": 5, + "19-960-1280": 1, + "19-961-1280": 1, + "8-960-1280": 1, + "8-961-1280": 1, + "27-960-1280": 1, + "4-960-1280": 1, + "5-960-1280": 1, + "7-960-1280": 1, + "7-7-960-1280": 1, + "4320-3604": 1, + "40-960-1280": 1, + "85-960-1280": 1, + "85-961-1280": 1, + "86-960-1280": 1 + }, + "6hr": { + "default": 1 + }, + "3hr": { + "default": 1 + }, + "1hr": { + "default": 1 + } + }, + "subdaily_streams": [ + ], + "halo_removal": { + "onm": { + "longitude": "1:-1", + "latitude": "1:-1" + }, + "ond": { + "longitude": "1:-1", + "latitude": "1:-1" + } + }, + "grid_info": { + "atmos": { + "atmos_timestep": 600, + "model_info": "N640 grid", + "nominal_resolution": "25 km", + "longitude": 1280, + "latitude": 960, + "v_latitude": 961, + "levels": 85, + "ancil_filenames": [ + "qrparm.landfrac.pp", + "qrparm.soil.pp" + ], + "hybrid_heights_files": [ + "atmosphere_theta_levels_85.txt", + "atmosphere_rho_levels_86.txt" + ] + }, + "ocean": { + "model_info": "eORCA12 tripolar 1/12 degree grid", + "nominal_resolution": "1 km", + "longitude": 4320, + "latitude": 3604, + "levels": 75, + "replacement_coordinates_file": "", + "ancil_filenames": [ + "ocean_constants.nc", + "ocean_byte_masks.nc", + "ocean_basin.nc", + "diaptr_basin_masks.nc", + "ocean_zostoga.nc" + ], + "bounds_coordinates": { + "onm-grid-T": [ + "bounds_nav_lon", + "bounds_nav_lat", + "time_centered_bounds", + "deptht_bounds" + ], + "onm-grid-U": [ + "bounds_nav_lon", + "bounds_nav_lat", + "time_centered_bounds", + "depthu_bounds" + ], + "onm-grid-V": [ + "bounds_nav_lon", + "bounds_nav_lat", + "time_centered_bounds", + "depthv_bounds" + ], + "onm-grid-W": [ + "bounds_nav_lon", + "bounds_nav_lat", + "time_centered_bounds", + "depthw_bounds" + ], + "onm-grid-X": [ + "bounds_nav_lon", + "bounds_nav_lat", + "time_centered_bounds", + "deptht_bounds" + ], + "ond-grid-T": [ + "bounds_nav_lon", + "bounds_nav_lat", + "time_centered_bounds", + "deptht_bounds" + ], + "ond-grid-U": [ + "bounds_nav_lon", + "bounds_nav_lat", + "time_centered_bounds" + ], + "ond-grid-V": [ + "bounds_nav_lon", + "bounds_nav_lat", + "time_centered_bounds" + ], + "inm-icemod": [ + "bounds_nav_lon_grid_T", + "bounds_nav_lat_grid_T", + "bounds_nav_lon_grid_U", + "bounds_nav_lat_grid_U", + "bounds_nav_lon_grid_V", + "bounds_nav_lat_grid_V", + "time_centered_bounds" + ], + "ind-icemod": [ + "bounds_nav_lon", + "bounds_nav_lat", + "time_centered_bounds" + ] + }, + "masked": { + "grid-V": { + "slice_latitude": [ + -1, + null, + null + ], + "slice_longitude": [ + 2160, + null, + null + ] + }, + "cice-U": { + "slice_latitude": [ + -1, + null, + null + ], + "slice_longitude": [ + 2160, + null, + null + ] + } + } + } + } +} From 2e54fceeb0368f64460f05e844253a361b24d6e1 Mon Sep 17 00:00:00 2001 From: mo-laurenboon Date: Mon, 16 Feb 2026 08:54:04 +0000 Subject: [PATCH 2/5] #810: update model parameters for ap5 stream --- .../common/plugins/cmip7/cmip7_attributes.py | 2 +- .../cdds/common/plugins/cmip7/cmip7_models.py | 1 + .../plugins/cmip7/data/model/UKCM2a-0-HH.json | 21 ++++++------------- 3 files changed, 8 insertions(+), 16 deletions(-) diff --git a/cdds/cdds/common/plugins/cmip7/cmip7_attributes.py b/cdds/cdds/common/plugins/cmip7/cmip7_attributes.py index 5bb5f0b98..83de634cd 100644 --- a/cdds/cdds/common/plugins/cmip7/cmip7_attributes.py +++ b/cdds/cdds/common/plugins/cmip7/cmip7_attributes.py @@ -35,7 +35,7 @@ def further_info_url(self) -> str: self._request.metadata.experiment_id, self._request.metadata.sub_experiment_id, self._request.metadata.variant_label) - return None + return further_info_url class AttributesValidator: diff --git a/cdds/cdds/common/plugins/cmip7/cmip7_models.py b/cdds/cdds/common/plugins/cmip7/cmip7_models.py index a560ea4ce..ac33dac22 100644 --- a/cdds/cdds/common/plugins/cmip7/cmip7_models.py +++ b/cdds/cdds/common/plugins/cmip7/cmip7_models.py @@ -28,6 +28,7 @@ def get_json_file(self) -> str: UKESM1_3_LL = 'UKESM1-3-LL' UKCM2_0_LL = 'UKCM2-0-LL' + UKCM2A_0_HH = 'UKCM2a-0-HH' class UKESM1_3_LL_Params(BaseModelParameters): diff --git a/cdds/cdds/common/plugins/cmip7/data/model/UKCM2a-0-HH.json b/cdds/cdds/common/plugins/cmip7/data/model/UKCM2a-0-HH.json index faba5df08..7654b7948 100644 --- a/cdds/cdds/common/plugins/cmip7/data/model/UKCM2a-0-HH.json +++ b/cdds/cdds/common/plugins/cmip7/data/model/UKCM2a-0-HH.json @@ -34,7 +34,7 @@ "ind": "P1Y", "inm": "P5Y", "ond": "P3M", - "onm": "P2Y" + "onm": "P6M" }, "memory": { "ap4": "80G", @@ -49,11 +49,11 @@ "ind": "8G", "inm": "8G", "ond": "32G", - "onm": "16G" + "onm": "80G" }, "temp_space": { "ap4": 98304, - "ap5": 100000, + "ap5": 200000, "apm": 8192, "apu": 100000, "ap6": 98304, @@ -64,7 +64,7 @@ "ind": 8192, "inm": 8192, "ond": 32768, - "onm": 32768 + "onm": 200000 }, "sizing_info": { "mon": { @@ -125,10 +125,7 @@ "latitude": 960, "v_latitude": 961, "levels": 85, - "ancil_filenames": [ - "qrparm.landfrac.pp", - "qrparm.soil.pp" - ], + "ancil_filenames": [], "hybrid_heights_files": [ "atmosphere_theta_levels_85.txt", "atmosphere_rho_levels_86.txt" @@ -141,13 +138,7 @@ "latitude": 3604, "levels": 75, "replacement_coordinates_file": "", - "ancil_filenames": [ - "ocean_constants.nc", - "ocean_byte_masks.nc", - "ocean_basin.nc", - "diaptr_basin_masks.nc", - "ocean_zostoga.nc" - ], + "ancil_filenames": [], "bounds_coordinates": { "onm-grid-T": [ "bounds_nav_lon", From 73a71bb182ede15b37d74b807ed086c1a799a048 Mon Sep 17 00:00:00 2001 From: mo-gill Date: Mon, 16 Mar 2026 14:36:34 +0000 Subject: [PATCH 3/5] #811: Amend model config json. --- .../common/plugins/cmip7/data/model/UKCM2a-0-HH.json | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/cdds/cdds/common/plugins/cmip7/data/model/UKCM2a-0-HH.json b/cdds/cdds/common/plugins/cmip7/data/model/UKCM2a-0-HH.json index 7654b7948..1a7d10a75 100644 --- a/cdds/cdds/common/plugins/cmip7/data/model/UKCM2a-0-HH.json +++ b/cdds/cdds/common/plugins/cmip7/data/model/UKCM2a-0-HH.json @@ -125,7 +125,11 @@ "latitude": 960, "v_latitude": 961, "levels": 85, - "ancil_filenames": [], + "ancil_filenames": [ + "qrparm.orog.pp", + "qrparm.landfrac.pp", + "qrparm.soil.pp" + ], "hybrid_heights_files": [ "atmosphere_theta_levels_85.txt", "atmosphere_rho_levels_86.txt" @@ -138,7 +142,9 @@ "latitude": 3604, "levels": 75, "replacement_coordinates_file": "", - "ancil_filenames": [], + "ancil_filenames": [ + "ocean_byte_masks_HH.nc" + ], "bounds_coordinates": { "onm-grid-T": [ "bounds_nav_lon", From 8e1a9ac42999f23521b0bbdb8b34232cffe94905 Mon Sep 17 00:00:00 2001 From: mo-gill Date: Tue, 17 Mar 2026 10:03:17 +0000 Subject: [PATCH 4/5] #811: Conflict resolution. --- .../plugins/cmip7/data/model/UKCM2a-0-HH.json | 36 ------------------- 1 file changed, 36 deletions(-) diff --git a/cdds/cdds/common/plugins/cmip7/data/model/UKCM2a-0-HH.json b/cdds/cdds/common/plugins/cmip7/data/model/UKCM2a-0-HH.json index a1c722c26..b19dc3827 100644 --- a/cdds/cdds/common/plugins/cmip7/data/model/UKCM2a-0-HH.json +++ b/cdds/cdds/common/plugins/cmip7/data/model/UKCM2a-0-HH.json @@ -39,33 +39,6 @@ "memory": { "ap4": "80G", "ap5": "80G", -<<<<<<< 811_missing_surface_altitude - "apm": "8G", - "apu": "8G", - "ap6": "30G", - "ap7": "32G", - "ap8": "24G", - "ap9": "64G", - "apt": "12G", - "ind": "8G", - "inm": "8G", - "ond": "32G", - "onm": "80G" - }, - "temp_space": { - "ap4": 98304, - "ap5": 200000, - "apm": 8192, - "apu": 100000, - "ap6": 98304, - "ap7": 65536, - "ap8": 32768, - "ap9": 32768, - "apt": 32768, - "ind": 8192, - "inm": 8192, - "ond": 32768, -======= "apm": "80G", "apu": "80G", "ap6": "80G", @@ -91,7 +64,6 @@ "ind": 200000, "inm": 200000, "ond": 200000, ->>>>>>> main "onm": 200000 }, "sizing_info": { @@ -153,15 +125,11 @@ "latitude": 960, "v_latitude": 961, "levels": 85, -<<<<<<< 811_missing_surface_altitude "ancil_filenames": [ "qrparm.orog.pp", "qrparm.landfrac.pp", "qrparm.soil.pp" ], -======= - "ancil_filenames": [], ->>>>>>> main "hybrid_heights_files": [ "atmosphere_theta_levels_85.txt", "atmosphere_rho_levels_86.txt" @@ -174,13 +142,9 @@ "latitude": 3604, "levels": 75, "replacement_coordinates_file": "", -<<<<<<< 811_missing_surface_altitude "ancil_filenames": [ "ocean_byte_masks_HH.nc" ], -======= - "ancil_filenames": [], ->>>>>>> main "bounds_coordinates": { "onm-grid-T": [ "bounds_nav_lon", From fe362a6bd49ddcd953ad370fb564cda7a22a4b3e Mon Sep 17 00:00:00 2001 From: mo-gill Date: Tue, 17 Mar 2026 10:04:43 +0000 Subject: [PATCH 5/5] #811: Fix second conflict. --- cdds/cdds/common/plugins/cmip7/cmip7_attributes.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/cdds/cdds/common/plugins/cmip7/cmip7_attributes.py b/cdds/cdds/common/plugins/cmip7/cmip7_attributes.py index 941b19787..81ebda80f 100644 --- a/cdds/cdds/common/plugins/cmip7/cmip7_attributes.py +++ b/cdds/cdds/common/plugins/cmip7/cmip7_attributes.py @@ -62,10 +62,5 @@ def validate_request(cls, request: 'Request') -> None: raise ValueError('Request must contain a model ID') if not request.metadata.experiment_id: raise ValueError('Request must contain an experiment ID') -<<<<<<< 811_missing_surface_altitude - # if not request.metadata.sub_experiment_id: - # raise ValueError('Request must contain a sub experiment ID') -======= ->>>>>>> main if not request.metadata.variant_label: raise ValueError('Request must contain a variant label')