From f93bf1f40b7535ceecca462a346b6ad19caf9770 Mon Sep 17 00:00:00 2001 From: bmooremaley Date: Sun, 6 Oct 2024 20:32:11 -0500 Subject: [PATCH 01/15] Modified ocean/mesh/remap_topography to use mbtempest weights file generation. --- compass/ocean/mesh/remap_topography.cfg | 10 +- compass/ocean/mesh/remap_topography.py | 206 ++++++++++++++++++------ 2 files changed, 162 insertions(+), 54 deletions(-) diff --git a/compass/ocean/mesh/remap_topography.cfg b/compass/ocean/mesh/remap_topography.cfg index 34b4bcdd80..ba7a6ff815 100644 --- a/compass/ocean/mesh/remap_topography.cfg +++ b/compass/ocean/mesh/remap_topography.cfg @@ -2,7 +2,8 @@ [remap_topography] # the name of the topography file in the bathymetry database -topo_filename = BedMachineAntarctica_v3_and_GEBCO_2023_0.0125_degree_20240828.nc +topo_filename = BedMachineAntarctica_v3_and_GEBCO_2023_ne3000_20241004.nc +src_scrip_filename = ne3000_20241004.scrip.nc # variable names in topo_filename lon_var = lon @@ -31,3 +32,10 @@ renorm_threshold = 0.01 # the density of land ice from MALI (kg/m^3) ice_density = 910.0 + +# smoothing parameters +# no smoothing: +# expandDist = 0 [m] +# expandFactor = 1 [cell fraction] +expandDist = 0 +expandFactor = 1 diff --git a/compass/ocean/mesh/remap_topography.py b/compass/ocean/mesh/remap_topography.py index 788561fc38..db9a32a4b5 100644 --- a/compass/ocean/mesh/remap_topography.py +++ b/compass/ocean/mesh/remap_topography.py @@ -4,8 +4,10 @@ import xarray as xr from mpas_tools.cime.constants import constants from mpas_tools.io import write_netcdf -from pyremap import LatLonGridDescriptor, MpasCellMeshDescriptor, Remapper +from mpas_tools.logging import check_call +from pyremap import MpasCellMeshDescriptor +from compass.parallel import run_command from compass.step import Step @@ -23,8 +25,10 @@ class RemapTopography(Step): The name of the MPAS mesh to include in the mapping file """ - def __init__(self, test_case, base_mesh_step, name='remap_topography', - subdir=None, mesh_name='MPAS_mesh'): + def __init__( + self, test_case, base_mesh_step, name='remap_topography', subdir=None, + mesh_name='MPAS_mesh', + ): """ Create a new step @@ -59,20 +63,30 @@ def setup(self): """ super().setup() config = self.config - topo_filename = config.get('remap_topography', 'topo_filename') + section = config['remap_topography'] + topo_filename = section.get('topo_filename') + src_scrip_filename = section.get('src_scrip_filename') + self.add_input_file( filename='topography.nc', target=topo_filename, - database='bathymetry_database') + database='bathymetry_database', + ) + self.add_input_file( + filename='source.scrip.nc', + target=src_scrip_filename, + database='bathymetry_database', + ) base_path = self.base_mesh_step.path base_filename = self.base_mesh_step.config.get( - 'spherical_mesh', 'mpas_mesh_filename') + 'spherical_mesh', 'mpas_mesh_filename', + ) target = os.path.join(base_path, base_filename) self.add_input_file(filename='base_mesh.nc', work_dir_target=target) - self.ntasks = config.getint('remap_topography', 'ntasks') - self.min_tasks = config.getint('remap_topography', 'min_tasks') + self.ntasks = section.getint('ntasks') + self.min_tasks = section.getint('min_tasks') def constrain_resources(self, available_resources): """ @@ -93,65 +107,151 @@ def run(self): """ Run this step of the test case """ + self._create_target_scrip_file() + self._partition_scrip_file('source.scrip.nc') + self._partition_scrip_file('target.scrip.nc') + self._create_weights() + self._remap_to_target() + self._modify_remapped_bathymetry() + + def _create_target_scrip_file(self): + """ + Create target SCRIP file from MPAS mesh file. + """ + logger = self.logger + logger.info('Create source SCRIP file') + config = self.config + section = config['remap_topography'] + expandDist = section.getfloat('expandDist') + expandFactor = section.getfloat('expandFactor') + + descriptor = MpasCellMeshDescriptor( + fileName='base_mesh.nc', + meshName=self.mesh_name, + ) + descriptor.to_scrip( + 'target.scrip.nc', + expandDist=expandDist, + expandFactor=expandFactor, + ) + + logger.info(' Done.') + + def _partition_scrip_file(self, in_filename): + """ + Partition SCRIP file for parallel mbtempest use + """ + logger = self.logger + logger.info('Partition SCRIP file') + + # Convert source SCRIP to mbtempest + args = [ + 'mbconvert', '-B', + in_filename, + in_filename.replace('.nc', '.h5m'), + ] + check_call(args, logger) + + # Partition source SCRIP + args = [ + 'mbpart', f'{self.ntasks}', + '-z', 'RCB', + in_filename.replace('.nc', '.h5m'), + in_filename.replace('.nc', f'.p{self.ntasks}.h5m'), + ] + check_call(args, logger) + + logger.info(' Done.') + + def _create_weights(self): + """ + Create mapping weights file using mbtempest + """ + logger = self.logger + logger.info('Create weights file') + + args = [ + 'mbtempest', '--type', '5', + '--load', f'source.scrip.p{self.ntasks}.h5m', + '--load', f'target.scrip.p{self.ntasks}.h5m', + '--file', f'mapfv_source_to_target.nomask_{self.ntasks}_gnom.nc', + '--intx', 'moab_intx_source_target.h5m', + '--weights', '--verbose', '--gnomonic', '--boxeps', '1e-9', + ] + run_command( + args, self.cpus_per_task, self.ntasks, + self.openmp_threads, self.config, self.logger, + ) + + logger.info(' Done.') + + def _remap_to_target(self): + """ + Remap combined bathymetry onto MPAS target mesh + """ logger = self.logger - parallel_executable = config.get('parallel', 'parallel_executable') - - lon_var = config.get('remap_topography', 'lon_var') - lat_var = config.get('remap_topography', 'lat_var') - method = config.get('remap_topography', 'method') - renorm_threshold = config.getfloat('remap_topography', - 'renorm_threshold') - ice_density = config.getfloat('remap_topography', 'ice_density') + logger.info('Remap to target') + + # Build command args + # Unused options: + # -P mpas, handles some MPAS-specific index ordering, CF, etc... + # -C climatology, basically bypasses fill values + args = [ + 'ncremap', + '-m', f'mapfv_source_to_target.nomask_{self.ntasks}_gnom.nc', + '--vrb=1', + 'topography.nc', 'topography_ncremap.nc', + ] + check_call(args, logger) + + logger.info(' Done.') + + def _modify_remapped_bathymetry(self): + """ + Modify remapped bathymetry + """ + logger = self.logger + logger.info('Modify remapped bathymetry') + + config = self.config + section = config['remap_topography'] + renorm_threshold = section.getfloat('renorm_threshold') + ice_density = section.getfloat('ice_density') ocean_density = constants['SHR_CONST_RHOSW'] g = constants['SHR_CONST_G'] - in_descriptor = LatLonGridDescriptor.read(fileName='topography.nc', - lonVarName=lon_var, - latVarName=lat_var) - - in_mesh_name = in_descriptor.meshName - - out_mesh_name = self.mesh_name - out_descriptor = MpasCellMeshDescriptor(fileName='base_mesh.nc', - meshName=self.mesh_name) - - mapping_file_name = \ - f'map_{in_mesh_name}_to_{out_mesh_name}_{method}.nc' - remapper = Remapper(in_descriptor, out_descriptor, mapping_file_name) - - remapper.build_mapping_file(method=method, mpiTasks=self.ntasks, - tempdir='.', logger=logger, - esmf_parallel_exec=parallel_executable) - - remapper.remap_file(inFileName='topography.nc', - outFileName='topography_ncremap.nc', - logger=logger) - ds_in = xr.open_dataset('topography_ncremap.nc') ds_in = ds_in.rename({'ncol': 'nCells'}) - ds_out = xr.Dataset() - rename = {'bathymetry_var': 'bed_elevation', - 'ice_thickness_var': 'landIceThkObserved', - 'ice_frac_var': 'landIceFracObserved', - 'grounded_ice_frac_var': 'landIceGroundedFracObserved', - 'ocean_frac_var': 'oceanFracObserved', - 'bathy_frac_var': 'bathyFracObserved'} + ds_out = xr.Dataset() + rename = { + 'bathymetry_var': 'bed_elevation', + 'ice_thickness_var': 'landIceThkObserved', + 'ice_frac_var': 'landIceFracObserved', + 'grounded_ice_frac_var': 'landIceGroundedFracObserved', + 'ocean_frac_var': 'oceanFracObserved', + 'bathy_frac_var': 'bathyFracObserved', + } for option, out_var in rename.items(): - in_var = config.get('remap_topography', option) + in_var = section.get(option) ds_out[out_var] = ds_in[in_var] ds_out['landIceFloatingFracObserved'] = \ ds_out.landIceFracObserved - ds_out.landIceGroundedFracObserved - # make sure fractions don't exceed 1 - for var in ['landIceFracObserved', 'landIceGroundedFracObserved', - 'landIceFloatingFracObserved', 'oceanFracObserved', - 'bathyFracObserved']: + # Make sure fractions don't exceed 1 + varNames = [ + 'landIceFracObserved', + 'landIceGroundedFracObserved', + 'landIceFloatingFracObserved', + 'oceanFracObserved', + 'bathyFracObserved', + ] + for var in varNames: ds_out[var] = np.minimum(ds_out[var], 1.) - # renormalize elevation variables + # Renormalize elevation variables norm = ds_out.bathyFracObserved valid = norm > renorm_threshold for var in ['bed_elevation', 'landIceThkObserved']: @@ -163,13 +263,13 @@ def run(self): # not allowed to be thicker than the flotation thickness thickness = np.minimum(thickness, flotation_thickness) ds_out['landIceThkObserved'] = thickness - ds_out['landIcePressureObserved'] = ice_density * g * thickness # compute the ice draft to be consistent with the land ice pressure # and using E3SM's density of seawater - ds_out['landIceDraftObserved'] = \ - (ice_density / ocean_density) * thickness write_netcdf(ds_out, 'topography_remapped.nc') + + logger.info(' Done.') From 70e5ca2cc8d2d4dcc27727d3240cf0c7d983f38f Mon Sep 17 00:00:00 2001 From: bmooremaley Date: Tue, 12 Nov 2024 11:32:19 -0600 Subject: [PATCH 02/15] Added conversion to netcdf3 in ocean/mesh/remap_topography --- compass/ocean/mesh/remap_topography.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/compass/ocean/mesh/remap_topography.py b/compass/ocean/mesh/remap_topography.py index db9a32a4b5..9c290ab912 100644 --- a/compass/ocean/mesh/remap_topography.py +++ b/compass/ocean/mesh/remap_topography.py @@ -145,11 +145,19 @@ def _partition_scrip_file(self, in_filename): logger = self.logger logger.info('Partition SCRIP file') + # Convert to 64-bit NetCDF + args = [ + 'ncks', '-5', + in_filename, + in_filename.replace('.nc', '.64bit.nc'), + ] + check_call(args, logger) + # Convert source SCRIP to mbtempest args = [ 'mbconvert', '-B', - in_filename, - in_filename.replace('.nc', '.h5m'), + in_filename.replace('.nc', '.64bit.nc'), + in_filename.replace('.nc', '.64bit.h5m'), ] check_call(args, logger) @@ -157,8 +165,8 @@ def _partition_scrip_file(self, in_filename): args = [ 'mbpart', f'{self.ntasks}', '-z', 'RCB', - in_filename.replace('.nc', '.h5m'), - in_filename.replace('.nc', f'.p{self.ntasks}.h5m'), + in_filename.replace('.nc', '.64bit.h5m'), + in_filename.replace('.nc', f'.64bit.p{self.ntasks}.h5m'), ] check_call(args, logger) @@ -173,8 +181,8 @@ def _create_weights(self): args = [ 'mbtempest', '--type', '5', - '--load', f'source.scrip.p{self.ntasks}.h5m', - '--load', f'target.scrip.p{self.ntasks}.h5m', + '--load', f'source.scrip.64bit.p{self.ntasks}.h5m', + '--load', f'target.scrip.64bit.p{self.ntasks}.h5m', '--file', f'mapfv_source_to_target.nomask_{self.ntasks}_gnom.nc', '--intx', 'moab_intx_source_target.h5m', '--weights', '--verbose', '--gnomonic', '--boxeps', '1e-9', From a8599fe8e91243cad1fd2853878c0db2eada137b Mon Sep 17 00:00:00 2001 From: bmooremaley Date: Mon, 18 Nov 2024 10:06:37 -0600 Subject: [PATCH 03/15] Preserved ESMF option for generating weights files from a latlon source grid in remap_topography --- compass/ocean/mesh/remap_topography.cfg | 13 +++-- compass/ocean/mesh/remap_topography.py | 65 +++++++++++++++++++++---- 2 files changed, 65 insertions(+), 13 deletions(-) diff --git a/compass/ocean/mesh/remap_topography.cfg b/compass/ocean/mesh/remap_topography.cfg index ba7a6ff815..a3711336c1 100644 --- a/compass/ocean/mesh/remap_topography.cfg +++ b/compass/ocean/mesh/remap_topography.cfg @@ -2,9 +2,15 @@ [remap_topography] # the name of the topography file in the bathymetry database +#topo_filename = BedMachineAntarctica_v3_and_GEBCO_2023_ne3000_20241004.nc +#src_scrip_filename = ne3000_20241004.scrip.nc topo_filename = BedMachineAntarctica_v3_and_GEBCO_2023_ne3000_20241004.nc src_scrip_filename = ne3000_20241004.scrip.nc +# weight generator function: +# `tempest` for cubed-sphere bathy or `esmf` for latlon bathy +weight_generator = tempest + # variable names in topo_filename lon_var = lon lat_var = lat @@ -20,10 +26,11 @@ description = Bathymetry is from GEBCO 2023, combined with BedMachine Antarctica v3 around Antarctica. # the target and minimum number of MPI tasks to use in remapping -ntasks = 4096 -min_tasks = 360 +ntasks = 1280 +min_tasks = 256 # remapping method {'bilinear', 'neareststod', 'conserve'} +# must use 'conserve' for tempestremap method = conserve # threshold of what fraction of an MPAS cell must contain ocean in order to @@ -34,7 +41,7 @@ renorm_threshold = 0.01 ice_density = 910.0 # smoothing parameters -# no smoothing: +# no smoothing (required for esmf): # expandDist = 0 [m] # expandFactor = 1 [cell fraction] expandDist = 0 diff --git a/compass/ocean/mesh/remap_topography.py b/compass/ocean/mesh/remap_topography.py index 9c290ab912..d061aa6186 100644 --- a/compass/ocean/mesh/remap_topography.py +++ b/compass/ocean/mesh/remap_topography.py @@ -107,10 +107,19 @@ def run(self): """ Run this step of the test case """ + config = self.config + weight_generator = config.get('remap_topography', 'weight_generator') + self._create_target_scrip_file() - self._partition_scrip_file('source.scrip.nc') - self._partition_scrip_file('target.scrip.nc') - self._create_weights() + if weight_generator == 'tempest': + self._partition_scrip_file('source.scrip.nc') + self._partition_scrip_file('target.scrip.nc') + self._create_weights_tempest() + elif weight_generator == 'esmf': + self._create_weights_esmf() + else: + msg = f'Unsupported weight generator function {weight_generator}' + raise ValueError(msg) self._remap_to_target() self._modify_remapped_bathymetry() @@ -145,7 +154,7 @@ def _partition_scrip_file(self, in_filename): logger = self.logger logger.info('Partition SCRIP file') - # Convert to 64-bit NetCDF + # Convert to NetCDF3 64-bit args = [ 'ncks', '-5', in_filename, @@ -172,21 +181,54 @@ def _partition_scrip_file(self, in_filename): logger.info(' Done.') - def _create_weights(self): + def _create_weights_tempest(self): """ - Create mapping weights file using mbtempest + Create mapping weights file using TempestRemap """ logger = self.logger logger.info('Create weights file') + config = self.config + method = config.get('remap_topography', 'method') + if method != 'conserve': + raise ValueError(f'Unsupported method {method} for TempestRemap') + args = [ 'mbtempest', '--type', '5', '--load', f'source.scrip.64bit.p{self.ntasks}.h5m', '--load', f'target.scrip.64bit.p{self.ntasks}.h5m', - '--file', f'mapfv_source_to_target.nomask_{self.ntasks}_gnom.nc', - '--intx', 'moab_intx_source_target.h5m', - '--weights', '--verbose', '--gnomonic', '--boxeps', '1e-9', + '--file', f'map_source_to_target_{method}.nc', + '--weights', '--gnomonic', + '--boxeps', '1e-9', + ] + + run_command( + args, self.cpus_per_task, self.ntasks, + self.openmp_threads, self.config, self.logger, + ) + + logger.info(' Done.') + + def _create_weights_esmf(self): + """ + Create mapping weights file using ESMF_RegridWeightGen + """ + logger = self.logger + logger.info('Create weights file') + + config = self.config + method = config.get('remap_topography', 'method') + + args = [ + 'ESMF_RegridWeightGen', + '--source', 'source.scrip.nc', + '--destination', 'target.scrip.nc', + '--weight', f'map_source_to_target_{method}.nc', + '--method', method, + '--netcdf4', + '--ignore_unmapped', ] + run_command( args, self.cpus_per_task, self.ntasks, self.openmp_threads, self.config, self.logger, @@ -201,13 +243,16 @@ def _remap_to_target(self): logger = self.logger logger.info('Remap to target') + config = self.config + method = config.get('remap_topography', 'method') + # Build command args # Unused options: # -P mpas, handles some MPAS-specific index ordering, CF, etc... # -C climatology, basically bypasses fill values args = [ 'ncremap', - '-m', f'mapfv_source_to_target.nomask_{self.ntasks}_gnom.nc', + '-m', f'map_source_to_target_{method}.nc', '--vrb=1', 'topography.nc', 'topography_ncremap.nc', ] From e07e36e242a2ca6d39a9c272f69f6312f98d12aa Mon Sep 17 00:00:00 2001 From: Xylar Asay-Davis Date: Fri, 3 Jan 2025 07:34:45 -0600 Subject: [PATCH 04/15] Update config for low res topography --- compass/ocean/mesh/low_res_topography.cfg | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/compass/ocean/mesh/low_res_topography.cfg b/compass/ocean/mesh/low_res_topography.cfg index c3bf08c611..6b62c5666d 100644 --- a/compass/ocean/mesh/low_res_topography.cfg +++ b/compass/ocean/mesh/low_res_topography.cfg @@ -2,14 +2,8 @@ [remap_topography] # the name of the topography file in the bathymetry database -topo_filename = BedMachineAntarctica_v2_and_GEBCO_2022_0.05_degree_20220729.nc - -# variable names in topo_filename -bathy_frac_var = ocean_mask - -# the description to include in metadata -description = Bathymetry is from GEBCO 2022, combined with BedMachine - Antarctica v2 around Antarctica. +topo_filename = BedMachineAntarctica-v3_GEBCO_2023_ne120_20250105.nc +src_scrip_filename = ne120_20250105.scrip.nc # the target and minimum number of MPI tasks to use in remapping ntasks = 64 From ec1cfb16010c611396d809a6e57311f029b64aab Mon Sep 17 00:00:00 2001 From: Xylar Asay-Davis Date: Sun, 5 Jan 2025 12:19:42 -0600 Subject: [PATCH 05/15] Update ne3000 topography dataset --- compass/ocean/mesh/remap_topography.cfg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/compass/ocean/mesh/remap_topography.cfg b/compass/ocean/mesh/remap_topography.cfg index a3711336c1..1eec7b384c 100644 --- a/compass/ocean/mesh/remap_topography.cfg +++ b/compass/ocean/mesh/remap_topography.cfg @@ -4,8 +4,8 @@ # the name of the topography file in the bathymetry database #topo_filename = BedMachineAntarctica_v3_and_GEBCO_2023_ne3000_20241004.nc #src_scrip_filename = ne3000_20241004.scrip.nc -topo_filename = BedMachineAntarctica_v3_and_GEBCO_2023_ne3000_20241004.nc -src_scrip_filename = ne3000_20241004.scrip.nc +topo_filename = BedMachineAntarctica-v3_GEBCO_2023_ne3000_20250105.nc +src_scrip_filename = ne3000_20250105.scrip.nc # weight generator function: # `tempest` for cubed-sphere bathy or `esmf` for latlon bathy From c5270651958dc7dbc9e7635df0fabe6b996571d3 Mon Sep 17 00:00:00 2001 From: Xylar Asay-Davis Date: Sun, 5 Jan 2025 14:56:30 -0600 Subject: [PATCH 06/15] Overwrite file with ncks if it exists --- compass/ocean/mesh/remap_topography.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compass/ocean/mesh/remap_topography.py b/compass/ocean/mesh/remap_topography.py index d061aa6186..14cef6ffa4 100644 --- a/compass/ocean/mesh/remap_topography.py +++ b/compass/ocean/mesh/remap_topography.py @@ -156,7 +156,7 @@ def _partition_scrip_file(self, in_filename): # Convert to NetCDF3 64-bit args = [ - 'ncks', '-5', + 'ncks', '-O', '-5', in_filename, in_filename.replace('.nc', '.64bit.nc'), ] From b3b8f6e1ee54c2ad3b625ecc3ffa9bb88ff5d08f Mon Sep 17 00:00:00 2001 From: Xylar Asay-Davis Date: Fri, 10 Jan 2025 08:05:48 -0600 Subject: [PATCH 07/15] Update topography datasets --- compass/ocean/mesh/low_res_topography.cfg | 4 ++-- compass/ocean/mesh/remap_topography.cfg | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/compass/ocean/mesh/low_res_topography.cfg b/compass/ocean/mesh/low_res_topography.cfg index 6b62c5666d..617ba13581 100644 --- a/compass/ocean/mesh/low_res_topography.cfg +++ b/compass/ocean/mesh/low_res_topography.cfg @@ -2,8 +2,8 @@ [remap_topography] # the name of the topography file in the bathymetry database -topo_filename = BedMachineAntarctica-v3_GEBCO_2023_ne120_20250105.nc -src_scrip_filename = ne120_20250105.scrip.nc +topo_filename = BedMachineAntarctica-v3_GEBCO_2023_ne120_20250110.nc +src_scrip_filename = ne120_20250110.scrip.nc # the target and minimum number of MPI tasks to use in remapping ntasks = 64 diff --git a/compass/ocean/mesh/remap_topography.cfg b/compass/ocean/mesh/remap_topography.cfg index 1eec7b384c..24bb569e27 100644 --- a/compass/ocean/mesh/remap_topography.cfg +++ b/compass/ocean/mesh/remap_topography.cfg @@ -4,8 +4,8 @@ # the name of the topography file in the bathymetry database #topo_filename = BedMachineAntarctica_v3_and_GEBCO_2023_ne3000_20241004.nc #src_scrip_filename = ne3000_20241004.scrip.nc -topo_filename = BedMachineAntarctica-v3_GEBCO_2023_ne3000_20250105.nc -src_scrip_filename = ne3000_20250105.scrip.nc +topo_filename = BedMachineAntarctica-v3_GEBCO_2023_ne3000_20250110.nc +src_scrip_filename = ne3000_20250110.scrip.nc # weight generator function: # `tempest` for cubed-sphere bathy or `esmf` for latlon bathy From 4ef3f250a4ae8112d637033e736e3605cad43121 Mon Sep 17 00:00:00 2001 From: Xylar Asay-Davis Date: Sat, 11 Jan 2025 04:34:47 -0600 Subject: [PATCH 08/15] Hard-code topography variable names --- compass/ocean/mesh/remap_topography.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/compass/ocean/mesh/remap_topography.py b/compass/ocean/mesh/remap_topography.py index 14cef6ffa4..51e3596ff1 100644 --- a/compass/ocean/mesh/remap_topography.py +++ b/compass/ocean/mesh/remap_topography.py @@ -279,15 +279,14 @@ def _modify_remapped_bathymetry(self): ds_out = xr.Dataset() rename = { - 'bathymetry_var': 'bed_elevation', - 'ice_thickness_var': 'landIceThkObserved', - 'ice_frac_var': 'landIceFracObserved', - 'grounded_ice_frac_var': 'landIceGroundedFracObserved', - 'ocean_frac_var': 'oceanFracObserved', - 'bathy_frac_var': 'bathyFracObserved', + 'bathymetry': 'bed_elevation', + 'thickness': 'landIceThkObserved', + 'ice_mask': 'landIceFracObserved', + 'grounded_mask': 'landIceGroundedFracObserved', + 'ocean_mask': 'oceanFracObserved', + 'bathymetry_mask': 'bathyFracObserved', } - for option, out_var in rename.items(): - in_var = section.get(option) + for in_var, out_var in rename.items(): ds_out[out_var] = ds_in[in_var] ds_out['landIceFloatingFracObserved'] = \ From 6e6cad202aa13edb8ce9691cc8b91f64697bab3c Mon Sep 17 00:00:00 2001 From: Xylar Asay-Davis Date: Fri, 10 Jan 2025 08:06:08 -0600 Subject: [PATCH 09/15] Remove unused config options --- compass/ocean/mesh/remap_topography.cfg | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/compass/ocean/mesh/remap_topography.cfg b/compass/ocean/mesh/remap_topography.cfg index 24bb569e27..7982c8f68d 100644 --- a/compass/ocean/mesh/remap_topography.cfg +++ b/compass/ocean/mesh/remap_topography.cfg @@ -2,8 +2,6 @@ [remap_topography] # the name of the topography file in the bathymetry database -#topo_filename = BedMachineAntarctica_v3_and_GEBCO_2023_ne3000_20241004.nc -#src_scrip_filename = ne3000_20241004.scrip.nc topo_filename = BedMachineAntarctica-v3_GEBCO_2023_ne3000_20250110.nc src_scrip_filename = ne3000_20250110.scrip.nc @@ -11,16 +9,6 @@ src_scrip_filename = ne3000_20250110.scrip.nc # `tempest` for cubed-sphere bathy or `esmf` for latlon bathy weight_generator = tempest -# variable names in topo_filename -lon_var = lon -lat_var = lat -bathymetry_var = bathymetry -ice_thickness_var = thickness -ice_frac_var = ice_mask -grounded_ice_frac_var = grounded_mask -ocean_frac_var = ocean_mask -bathy_frac_var = bathymetry_mask - # the description to include in metadata description = Bathymetry is from GEBCO 2023, combined with BedMachine Antarctica v3 around Antarctica. From 23bbb2081a3af12cb0e3d5245e657101776380ee Mon Sep 17 00:00:00 2001 From: Xylar Asay-Davis Date: Fri, 10 Jan 2025 08:10:30 -0600 Subject: [PATCH 10/15] Don't convert SCRIP to NetCDF3 Instead, we assume this has been done correctly when the SCRIP files were generated. This merge also simplifies the naming of intermediate files during file partitioning for mbtempest. --- compass/ocean/mesh/remap_topography.py | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/compass/ocean/mesh/remap_topography.py b/compass/ocean/mesh/remap_topography.py index 51e3596ff1..4652e6baa1 100644 --- a/compass/ocean/mesh/remap_topography.py +++ b/compass/ocean/mesh/remap_topography.py @@ -1,4 +1,5 @@ import os +import pathlib import numpy as np import xarray as xr @@ -154,19 +155,15 @@ def _partition_scrip_file(self, in_filename): logger = self.logger logger.info('Partition SCRIP file') - # Convert to NetCDF3 64-bit - args = [ - 'ncks', '-O', '-5', - in_filename, - in_filename.replace('.nc', '.64bit.nc'), - ] - check_call(args, logger) + stem = pathlib.Path(in_filename).stem + h5m_filename = f'{stem}.h5m' + part_filename = f'{stem}.p{self.ntasks}.h5m' # Convert source SCRIP to mbtempest args = [ 'mbconvert', '-B', - in_filename.replace('.nc', '.64bit.nc'), - in_filename.replace('.nc', '.64bit.h5m'), + in_filename, + h5m_filename, ] check_call(args, logger) @@ -174,8 +171,8 @@ def _partition_scrip_file(self, in_filename): args = [ 'mbpart', f'{self.ntasks}', '-z', 'RCB', - in_filename.replace('.nc', '.64bit.h5m'), - in_filename.replace('.nc', f'.64bit.p{self.ntasks}.h5m'), + h5m_filename, + part_filename, ] check_call(args, logger) @@ -195,8 +192,8 @@ def _create_weights_tempest(self): args = [ 'mbtempest', '--type', '5', - '--load', f'source.scrip.64bit.p{self.ntasks}.h5m', - '--load', f'target.scrip.64bit.p{self.ntasks}.h5m', + '--load', f'source.scrip.p{self.ntasks}.h5m', + '--load', f'target.scrip.p{self.ntasks}.h5m', '--file', f'map_source_to_target_{method}.nc', '--weights', '--gnomonic', '--boxeps', '1e-9', From da525c14250387102df0dedcbd544469ff16e5b7 Mon Sep 17 00:00:00 2001 From: Xylar Asay-Davis Date: Fri, 10 Jan 2025 08:38:56 -0600 Subject: [PATCH 11/15] Update the docs --- docs/developers_guide/ocean/framework.rst | 10 ++- docs/users_guide/ocean/framework/mesh.rst | 75 ++++++++++++++----- .../ocean/test_groups/global_ocean.rst | 2 +- 3 files changed, 62 insertions(+), 25 deletions(-) diff --git a/docs/developers_guide/ocean/framework.rst b/docs/developers_guide/ocean/framework.rst index 4cf25760a5..49fd906ced 100644 --- a/docs/developers_guide/ocean/framework.rst +++ b/docs/developers_guide/ocean/framework.rst @@ -57,12 +57,14 @@ thickness, grounded and floating land-ice masks, etc.) to the MPAS mesh. This step is controlled by config options described in :ref:`ocean_remap_topography`. -The step uses the `pyremap `_ -package to call +By default, the step creates a partitioned SCRIP file and generates a mapping +file using the `tempest `_ +and `MOAB `_ +tools. It can optionally use ESMF's `ESMF_RegridWeightGen `_ -to generate a mapping file, then it uses +tool to generate a mapping files. In either case, the step then uses `ncremap `_ -to perform remapping to the MPAS mesh. Then, it renames the +to perform remapping to the MPAS mesh. Finally, it renames the topography variables to the following names, expected in MPAS-Ocean's init mode for the global ocean: diff --git a/docs/users_guide/ocean/framework/mesh.rst b/docs/users_guide/ocean/framework/mesh.rst index 097e59ba8e..778e5d548f 100644 --- a/docs/users_guide/ocean/framework/mesh.rst +++ b/docs/users_guide/ocean/framework/mesh.rst @@ -24,46 +24,81 @@ controlled by the following config options: [remap_topography] # the name of the topography file in the bathymetry database - topo_filename = BedMachineAntarctica_v3_and_GEBCO_2023_0.0125_degree_20230831.nc - - # variable names in topo_filename - lon_var = lon - lat_var = lat - bathymetry_var = bathymetry - ice_draft_var = ice_draft - ice_thickness_var = thickness - ice_frac_var = ice_mask - grounded_ice_frac_var = grounded_mask - ocean_frac_var = ocean_mask + topo_filename = BedMachineAntarctica-v3_GEBCO_2023_ne3000_20250110.nc + src_scrip_filename = ne3000_20250110.scrip.nc + + # weight generator function: + # `tempest` for cubed-sphere bathy or `esmf` for latlon bathy + weight_generator = tempest # the description to include in metadata description = Bathymetry is from GEBCO 2023, combined with BedMachine Antarctica v3 around Antarctica. # the target and minimum number of MPI tasks to use in remapping - ntasks = 4096 - min_tasks = 360 + ntasks = 1280 + min_tasks = 256 # remapping method {'bilinear', 'neareststod', 'conserve'} + # must use 'conserve' for tempestremap method = conserve -The topography filename should be something from the ocean + # threshold of what fraction of an MPAS cell must contain ocean in order to + # perform renormalization of elevation variables + renorm_threshold = 0.01 + + # the density of land ice from MALI (kg/m^3) + ice_density = 910.0 + + # smoothing parameters + # no smoothing (required for esmf): + # expandDist = 0 [m] + # expandFactor = 1 [cell fraction] + expandDist = 0 + expandFactor = 1 + +The topography and source SCRIP filenames should be something from the ocean `bathymetry database `_. +The default is a ~1 km (ne3000 cubed sphere grid) dataset. -The various variable names are designed to provide flexibility in case a given -topography file used different variable names tha the defaults provided above. +The ``weight_generator`` is the software used to generate weight files that +map between the original topography dataset and the MPAS mesh. The ``tempest`` +approach uses MOAB's ``mbtempest`` tool to generate conservative weights in +parallel. This is the recommended approach because it is faster and more +reliable in our experience than the ``esmf`` software. However ESMF allows +more remapping methods and supports latitude-longitude bathymetry datasets. The ``description`` config option is passed on as part of the mesh metadata in global ocean files. The target and minimum number of MPI tasks (``ntasks`` and ``min_tasks``, respectively) will depend on the resolution of the topography file. The -default file is at 1/80 of a degree and typically requires at least 360 tasks -to successfully remap the data even to relatively coarse MPAS meshes. Coarser -bathymetry datasets can likely get away with far fewer MPI tasks. The method -used for remapping (``conserve`` by default) also makes a difference in how +default file is at ~1 km (ne3000 cubed sphere grid) and typically requires at +least 256 tasks to successfully remap the data even to relatively coarse MPAS +meshes. Coarser bathymetry datasets can get away with far fewer MPI tasks. +The method used for remapping (``conserve`` by default) also makes a difference in how many tasks are required. +Coarse meshes can get away with a coarser topography dataset that speeds up +the topography-remapping process. Config options related to coarser topography +are the following: + +.. code-block:: cfg + + # config options related to remapping topography to an MPAS-Ocean mesh + [remap_topography] + + # the name of the topography file in the bathymetry database + topo_filename = BedMachineAntarctica-v3_GEBCO_2023_ne120_20250110.nc + src_scrip_filename = ne120_20250110.scrip.nc + + # the target and minimum number of MPI tasks to use in remapping + ntasks = 64 + min_tasks = 4 + +The ne120 topography dataset has a resolution of ~25 km (sufficient for MPAS +meshes with 240 km resolution) and requires far fewer processers to remap. + Culling land cells ------------------ diff --git a/docs/users_guide/ocean/test_groups/global_ocean.rst b/docs/users_guide/ocean/test_groups/global_ocean.rst index 7ca1785b9d..94be78db92 100644 --- a/docs/users_guide/ocean/test_groups/global_ocean.rst +++ b/docs/users_guide/ocean/test_groups/global_ocean.rst @@ -476,7 +476,7 @@ The mesh has 12-km resolution around Antarctica and 30-km resolution elsewhere. The mesh includes the :ref:`global_ocean_ice_shelf_cavities` around Antarctica in the ocean domain. -.. image:: images/sowisc12to30.png +.. image:: images/sowisc12to60.png :width: 500 px :align: center From d1ad6729f6928201ee4dd7ebfde00a2b143ed866 Mon Sep 17 00:00:00 2001 From: Xylar Asay-Davis Date: Fri, 10 Jan 2025 08:48:46 -0600 Subject: [PATCH 12/15] Remove comment --- compass/ocean/mesh/remap_topography.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/compass/ocean/mesh/remap_topography.py b/compass/ocean/mesh/remap_topography.py index 4652e6baa1..27dab80d92 100644 --- a/compass/ocean/mesh/remap_topography.py +++ b/compass/ocean/mesh/remap_topography.py @@ -244,9 +244,6 @@ def _remap_to_target(self): method = config.get('remap_topography', 'method') # Build command args - # Unused options: - # -P mpas, handles some MPAS-specific index ordering, CF, etc... - # -C climatology, basically bypasses fill values args = [ 'ncremap', '-m', f'map_source_to_target_{method}.nc', From 3bd7636620f984f07c8a36c42eb3e58ae1926ea3 Mon Sep 17 00:00:00 2001 From: Xylar Asay-Davis Date: Fri, 10 Jan 2025 08:56:04 -0600 Subject: [PATCH 13/15] Clean up and fix docs config script --- docs/conf.py | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 55bf6dc6f5..8fbbddf907 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -96,14 +96,7 @@ # a list of builtin themes. # -# on_rtd is whether we are on readthedocs.org, this line of code grabbed from -# docs.readthedocs.org -on_rtd = os.environ.get('READTHEDOCS', None) == 'True' - -if not on_rtd: # only import and set the theme if we're building docs locally - import sphinx_rtd_theme - html_theme = 'sphinx_rtd_theme' - html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] +html_theme = 'sphinx_rtd_theme' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the @@ -179,9 +172,9 @@ 'numpy': ('https://numpy.org/doc/stable/', None), 'xarray': ('http://xarray.pydata.org/en/stable/', None), 'geometric_features': - ('http://mpas-dev.github.io/geometric_features/stable/', None), + ('http://mpas-dev.github.io/geometric_features/main/', None), 'mpas_tools': - ('http://mpas-dev.github.io/MPAS-Tools/stable/', None)} + ('http://mpas-dev.github.io/MPAS-Tools/master/', None)} github_doc_root = 'https://github.com/rtfd/recommonmark/tree/master/doc/' From 6cac480016b2e77cde0172c0e5467db64d19cc23 Mon Sep 17 00:00:00 2001 From: Xylar Asay-Davis Date: Sat, 11 Jan 2025 07:18:11 -0600 Subject: [PATCH 14/15] Update Icos240, IcoswISC240, Icos and IcoswISC cache files --- compass/ocean/cached_files.json | 192 ++++++++++++++++---------------- 1 file changed, 96 insertions(+), 96 deletions(-) diff --git a/compass/ocean/cached_files.json b/compass/ocean/cached_files.json index 8d05ad98d8..1e52a9ebe8 100644 --- a/compass/ocean/cached_files.json +++ b/compass/ocean/cached_files.json @@ -104,13 +104,13 @@ "ocean/global_convergence/qu/cosine_bell/QU60/init/initial_state.nc": "global_convergence/qu/cosine_bell/QU60/init/initial_state.220528.nc", "ocean/global_convergence/qu/cosine_bell/QU90/init/namelist.ocean": "global_convergence/qu/cosine_bell/QU90/init/namelist.220528.ocean", "ocean/global_convergence/qu/cosine_bell/QU90/init/initial_state.nc": "global_convergence/qu/cosine_bell/QU90/init/initial_state.220528.nc", - "ocean/global_ocean/Icos240/mesh/base_mesh/mesh.msh": "global_ocean/Icos240/mesh/base_mesh/mesh.240312.msh", - "ocean/global_ocean/Icos240/mesh/base_mesh/base_mesh.nc": "global_ocean/Icos240/mesh/base_mesh/base_mesh.240312.nc", - "ocean/global_ocean/Icos240/mesh/base_mesh/cellWidthVsLatLon.nc": "global_ocean/Icos240/mesh/base_mesh/cellWidthVsLatLon.240312.nc", - "ocean/global_ocean/Icos240/mesh/base_mesh/graph.info": "global_ocean/Icos240/mesh/base_mesh/graph.240312.info", - "ocean/global_ocean/Icos240/mesh/cull_mesh/culled_mesh.nc": "global_ocean/Icos240/mesh/cull_mesh/culled_mesh.240312.nc", - "ocean/global_ocean/Icos240/mesh/cull_mesh/culled_graph.info": "global_ocean/Icos240/mesh/cull_mesh/culled_graph.240312.info", - "ocean/global_ocean/Icos240/mesh/cull_mesh/critical_passages_mask_final.nc": "global_ocean/Icos240/mesh/cull_mesh/critical_passages_mask_final.240312.nc", + "ocean/global_ocean/Icos240/mesh/base_mesh/mesh.msh": "global_ocean/Icos240/mesh/base_mesh/mesh.250111.msh", + "ocean/global_ocean/Icos240/mesh/base_mesh/base_mesh.nc": "global_ocean/Icos240/mesh/base_mesh/base_mesh.250111.nc", + "ocean/global_ocean/Icos240/mesh/base_mesh/cellWidthVsLatLon.nc": "global_ocean/Icos240/mesh/base_mesh/cellWidthVsLatLon.250111.nc", + "ocean/global_ocean/Icos240/mesh/base_mesh/graph.info": "global_ocean/Icos240/mesh/base_mesh/graph.250111.info", + "ocean/global_ocean/Icos240/mesh/cull_mesh/culled_mesh.nc": "global_ocean/Icos240/mesh/cull_mesh/culled_mesh.250111.nc", + "ocean/global_ocean/Icos240/mesh/cull_mesh/culled_graph.info": "global_ocean/Icos240/mesh/cull_mesh/culled_graph.250111.info", + "ocean/global_ocean/Icos240/mesh/cull_mesh/critical_passages_mask_final.nc": "global_ocean/Icos240/mesh/cull_mesh/critical_passages_mask_final.250111.nc", "ocean/global_ocean/QU240/mesh/base_mesh/mesh.msh": "global_ocean/QU240/mesh/base_mesh/mesh.230605.msh", "ocean/global_ocean/QU240/mesh/base_mesh/base_mesh.nc": "global_ocean/QU240/mesh/base_mesh/base_mesh.230605.nc", "ocean/global_ocean/QU240/mesh/base_mesh/cellWidthVsLatLon.nc": "global_ocean/QU240/mesh/base_mesh/cellWidthVsLatLon.230605.nc", @@ -173,95 +173,95 @@ "ocean/global_ocean/QUwISC240/mesh/cull_mesh/topography_culled.nc": "global_ocean/QUwISC240/mesh/cull_mesh/topography_culled.230605.nc", "ocean/global_ocean/QUwISC240/WOA23/init/remap_ice_shelf_melt/prescribed_ismf_adusumilli2020.nc": "global_ocean/QUwISC240/WOA23/init/remap_ice_shelf_melt/prescribed_ismf_adusumilli2020.230824.nc", "ocean/global_ocean/ECwISC30to60/WOA23/init/remap_ice_shelf_melt/prescribed_ismf_adusumilli2020.nc": "global_ocean/ECwISC30to60/WOA23/init/remap_ice_shelf_melt/prescribed_ismf_adusumilli2020.230824.nc", - "ocean/global_ocean/Icos240/mesh/cull_mesh/topography_culled.nc": "global_ocean/Icos240/mesh/cull_mesh/topography_culled.240312.nc", - "ocean/global_ocean/Icos240/mesh/cull_mesh/map_culled_to_base.nc": "global_ocean/Icos240/mesh/cull_mesh/map_culled_to_base.240312.nc", - "ocean/global_ocean/Icos240/mesh/remap_topography/topography_remapped.nc": "global_ocean/Icos240/mesh/remap_topography/topography_remapped.240312.nc", - "ocean/global_ocean/Icos240/WOA23/init/initial_state/initial_state.nc": "global_ocean/Icos240/WOA23/init/initial_state/initial_state.240312.nc", - "ocean/global_ocean/Icos240/WOA23/init/initial_state/init_mode_forcing_data.nc": "global_ocean/Icos240/WOA23/init/initial_state/init_mode_forcing_data.240312.nc", - "ocean/global_ocean/Icos240/WOA23/init/initial_state/graph.info": "global_ocean/Icos240/WOA23/init/initial_state/graph.240312.info", - "ocean/global_ocean/IcoswISC240/mesh/base_mesh/mesh.msh": "global_ocean/IcoswISC240/mesh/base_mesh/mesh.240509.msh", - "ocean/global_ocean/IcoswISC240/mesh/base_mesh/base_mesh.nc": "global_ocean/IcoswISC240/mesh/base_mesh/base_mesh.240509.nc", - "ocean/global_ocean/IcoswISC240/mesh/base_mesh/cellWidthVsLatLon.nc": "global_ocean/IcoswISC240/mesh/base_mesh/cellWidthVsLatLon.240509.nc", - "ocean/global_ocean/IcoswISC240/mesh/base_mesh/graph.info": "global_ocean/IcoswISC240/mesh/base_mesh/graph.240509.info", - "ocean/global_ocean/IcoswISC240/mesh/cull_mesh/culled_mesh.nc": "global_ocean/IcoswISC240/mesh/cull_mesh/culled_mesh.240509.nc", - "ocean/global_ocean/IcoswISC240/mesh/cull_mesh/culled_graph.info": "global_ocean/IcoswISC240/mesh/cull_mesh/culled_graph.240509.info", - "ocean/global_ocean/IcoswISC240/mesh/cull_mesh/critical_passages_mask_final.nc": "global_ocean/IcoswISC240/mesh/cull_mesh/critical_passages_mask_final.240509.nc", - "ocean/global_ocean/IcoswISC240/mesh/cull_mesh/land_ice_mask.nc": "global_ocean/IcoswISC240/mesh/cull_mesh/land_ice_mask.240509.nc", - "ocean/global_ocean/IcoswISC240/mesh/cull_mesh/topography_culled.nc": "global_ocean/IcoswISC240/mesh/cull_mesh/topography_culled.240509.nc", - "ocean/global_ocean/IcoswISC240/mesh/cull_mesh/map_culled_to_base.nc": "global_ocean/IcoswISC240/mesh/cull_mesh/map_culled_to_base.240509.nc", - "ocean/global_ocean/IcoswISC240/mesh/remap_topography/topography_remapped.nc": "global_ocean/IcoswISC240/mesh/remap_topography/topography_remapped.240509.nc", - "ocean/global_ocean/IcoswISC240/WOA23/init/initial_state/initial_state.nc": "global_ocean/IcoswISC240/WOA23/init/initial_state/initial_state.240509.nc", - "ocean/global_ocean/IcoswISC240/WOA23/init/initial_state/init_mode_forcing_data.nc": "global_ocean/IcoswISC240/WOA23/init/initial_state/init_mode_forcing_data.240509.nc", - "ocean/global_ocean/IcoswISC240/WOA23/init/initial_state/graph.info": "global_ocean/IcoswISC240/WOA23/init/initial_state/graph.240509.info", - "ocean/global_ocean/IcoswISC240/WOA23/init/remap_ice_shelf_melt/prescribed_ismf_paolo2023.nc": "global_ocean/IcoswISC240/WOA23/init/remap_ice_shelf_melt/prescribed_ismf_paolo2023.240509.nc", + "ocean/global_ocean/Icos240/mesh/cull_mesh/topography_culled.nc": "global_ocean/Icos240/mesh/cull_mesh/topography_culled.250111.nc", + "ocean/global_ocean/Icos240/mesh/cull_mesh/map_culled_to_base.nc": "global_ocean/Icos240/mesh/cull_mesh/map_culled_to_base.250111.nc", + "ocean/global_ocean/Icos240/mesh/remap_topography/topography_remapped.nc": "global_ocean/Icos240/mesh/remap_topography/topography_remapped.250111.nc", + "ocean/global_ocean/Icos240/WOA23/init/initial_state/initial_state.nc": "global_ocean/Icos240/WOA23/init/initial_state/initial_state.250111.nc", + "ocean/global_ocean/Icos240/WOA23/init/initial_state/init_mode_forcing_data.nc": "global_ocean/Icos240/WOA23/init/initial_state/init_mode_forcing_data.250111.nc", + "ocean/global_ocean/Icos240/WOA23/init/initial_state/graph.info": "global_ocean/Icos240/WOA23/init/initial_state/graph.250111.info", + "ocean/global_ocean/IcoswISC240/mesh/base_mesh/mesh.msh": "global_ocean/IcoswISC240/mesh/base_mesh/mesh.250111.msh", + "ocean/global_ocean/IcoswISC240/mesh/base_mesh/base_mesh.nc": "global_ocean/IcoswISC240/mesh/base_mesh/base_mesh.250111.nc", + "ocean/global_ocean/IcoswISC240/mesh/base_mesh/cellWidthVsLatLon.nc": "global_ocean/IcoswISC240/mesh/base_mesh/cellWidthVsLatLon.250111.nc", + "ocean/global_ocean/IcoswISC240/mesh/base_mesh/graph.info": "global_ocean/IcoswISC240/mesh/base_mesh/graph.250111.info", + "ocean/global_ocean/IcoswISC240/mesh/cull_mesh/culled_mesh.nc": "global_ocean/IcoswISC240/mesh/cull_mesh/culled_mesh.250111.nc", + "ocean/global_ocean/IcoswISC240/mesh/cull_mesh/culled_graph.info": "global_ocean/IcoswISC240/mesh/cull_mesh/culled_graph.250111.info", + "ocean/global_ocean/IcoswISC240/mesh/cull_mesh/critical_passages_mask_final.nc": "global_ocean/IcoswISC240/mesh/cull_mesh/critical_passages_mask_final.250111.nc", + "ocean/global_ocean/IcoswISC240/mesh/cull_mesh/land_ice_mask.nc": "global_ocean/IcoswISC240/mesh/cull_mesh/land_ice_mask.250111.nc", + "ocean/global_ocean/IcoswISC240/mesh/cull_mesh/topography_culled.nc": "global_ocean/IcoswISC240/mesh/cull_mesh/topography_culled.250111.nc", + "ocean/global_ocean/IcoswISC240/mesh/cull_mesh/map_culled_to_base.nc": "global_ocean/IcoswISC240/mesh/cull_mesh/map_culled_to_base.250111.nc", + "ocean/global_ocean/IcoswISC240/mesh/remap_topography/topography_remapped.nc": "global_ocean/IcoswISC240/mesh/remap_topography/topography_remapped.250111.nc", + "ocean/global_ocean/IcoswISC240/WOA23/init/initial_state/initial_state.nc": "global_ocean/IcoswISC240/WOA23/init/initial_state/initial_state.250111.nc", + "ocean/global_ocean/IcoswISC240/WOA23/init/initial_state/init_mode_forcing_data.nc": "global_ocean/IcoswISC240/WOA23/init/initial_state/init_mode_forcing_data.250111.nc", + "ocean/global_ocean/IcoswISC240/WOA23/init/initial_state/graph.info": "global_ocean/IcoswISC240/WOA23/init/initial_state/graph.250111.info", + "ocean/global_ocean/IcoswISC240/WOA23/init/remap_ice_shelf_melt/prescribed_ismf_paolo2023.nc": "global_ocean/IcoswISC240/WOA23/init/remap_ice_shelf_melt/prescribed_ismf_paolo2023.250111.nc", "ocean/global_ocean/IcoswISC240/WOA23/init/ssh_adjustment/adjusted_init.nc": "global_ocean/IcoswISC240/WOA23/init/ssh_adjustment/adjusted_init.240312.nc", - "ocean/global_ocean/Icos/mesh/base_mesh/mesh.msh": "global_ocean/Icos/mesh/base_mesh/mesh.240312.msh", - "ocean/global_ocean/Icos/mesh/base_mesh/base_mesh.nc": "global_ocean/Icos/mesh/base_mesh/base_mesh.240312.nc", - "ocean/global_ocean/Icos/mesh/base_mesh/cellWidthVsLatLon.nc": "global_ocean/Icos/mesh/base_mesh/cellWidthVsLatLon.240312.nc", - "ocean/global_ocean/Icos/mesh/base_mesh/graph.info": "global_ocean/Icos/mesh/base_mesh/graph.240312.info", - "ocean/global_ocean/Icos/mesh/cull_mesh/culled_mesh.nc": "global_ocean/Icos/mesh/cull_mesh/culled_mesh.240312.nc", - "ocean/global_ocean/Icos/mesh/cull_mesh/culled_graph.info": "global_ocean/Icos/mesh/cull_mesh/culled_graph.240312.info", - "ocean/global_ocean/Icos/mesh/cull_mesh/critical_passages_mask_final.nc": "global_ocean/Icos/mesh/cull_mesh/critical_passages_mask_final.240312.nc", - "ocean/global_ocean/Icos/mesh/cull_mesh/topography_culled.nc": "global_ocean/Icos/mesh/cull_mesh/topography_culled.240312.nc", - "ocean/global_ocean/Icos/mesh/cull_mesh/map_culled_to_base.nc": "global_ocean/Icos/mesh/cull_mesh/map_culled_to_base.240312.nc", - "ocean/global_ocean/Icos/mesh/remap_topography/topography_remapped.nc": "global_ocean/Icos/mesh/remap_topography/topography_remapped.240312.nc", - "ocean/global_ocean/Icos/WOA23/init/initial_state/initial_state.nc": "global_ocean/Icos/WOA23/init/initial_state/initial_state.240312.nc", - "ocean/global_ocean/Icos/WOA23/init/initial_state/init_mode_forcing_data.nc": "global_ocean/Icos/WOA23/init/initial_state/init_mode_forcing_data.240312.nc", - "ocean/global_ocean/Icos/WOA23/init/initial_state/graph.info": "global_ocean/Icos/WOA23/init/initial_state/graph.240312.info", - "ocean/global_ocean/IcoswISC/mesh/base_mesh/mesh.msh": "global_ocean/IcoswISC/mesh/base_mesh/mesh.240509.msh", - "ocean/global_ocean/IcoswISC/mesh/base_mesh/base_mesh.nc": "global_ocean/IcoswISC/mesh/base_mesh/base_mesh.240509.nc", - "ocean/global_ocean/IcoswISC/mesh/base_mesh/cellWidthVsLatLon.nc": "global_ocean/IcoswISC/mesh/base_mesh/cellWidthVsLatLon.240509.nc", - "ocean/global_ocean/IcoswISC/mesh/base_mesh/graph.info": "global_ocean/IcoswISC/mesh/base_mesh/graph.240509.info", - "ocean/global_ocean/IcoswISC/mesh/cull_mesh/culled_mesh.nc": "global_ocean/IcoswISC/mesh/cull_mesh/culled_mesh.240509.nc", - "ocean/global_ocean/IcoswISC/mesh/cull_mesh/culled_graph.info": "global_ocean/IcoswISC/mesh/cull_mesh/culled_graph.240509.info", - "ocean/global_ocean/IcoswISC/mesh/cull_mesh/critical_passages_mask_final.nc": "global_ocean/IcoswISC/mesh/cull_mesh/critical_passages_mask_final.240509.nc", - "ocean/global_ocean/IcoswISC/mesh/cull_mesh/land_ice_mask.nc": "global_ocean/IcoswISC/mesh/cull_mesh/land_ice_mask.240509.nc", - "ocean/global_ocean/IcoswISC/mesh/cull_mesh/topography_culled.nc": "global_ocean/IcoswISC/mesh/cull_mesh/topography_culled.240509.nc", - "ocean/global_ocean/IcoswISC/mesh/cull_mesh/map_culled_to_base.nc": "global_ocean/IcoswISC/mesh/cull_mesh/map_culled_to_base.240509.nc", - "ocean/global_ocean/IcoswISC/mesh/remap_topography/topography_remapped.nc": "global_ocean/IcoswISC/mesh/remap_topography/topography_remapped.240509.nc", - "ocean/global_ocean/IcoswISC/WOA23/init/initial_state/initial_state.nc": "global_ocean/IcoswISC/WOA23/init/initial_state/initial_state.240509.nc", - "ocean/global_ocean/IcoswISC/WOA23/init/initial_state/init_mode_forcing_data.nc": "global_ocean/IcoswISC/WOA23/init/initial_state/init_mode_forcing_data.240509.nc", - "ocean/global_ocean/IcoswISC/WOA23/init/initial_state/graph.info": "global_ocean/IcoswISC/WOA23/init/initial_state/graph.240509.info", - "ocean/global_ocean/IcoswISC/WOA23/init/remap_ice_shelf_melt/prescribed_ismf_paolo2023.nc": "global_ocean/IcoswISC/WOA23/init/remap_ice_shelf_melt/prescribed_ismf_paolo2023.240509.nc", + "ocean/global_ocean/Icos/mesh/base_mesh/mesh.msh": "global_ocean/Icos/mesh/base_mesh/mesh.250111.msh", + "ocean/global_ocean/Icos/mesh/base_mesh/base_mesh.nc": "global_ocean/Icos/mesh/base_mesh/base_mesh.250111.nc", + "ocean/global_ocean/Icos/mesh/base_mesh/cellWidthVsLatLon.nc": "global_ocean/Icos/mesh/base_mesh/cellWidthVsLatLon.250111.nc", + "ocean/global_ocean/Icos/mesh/base_mesh/graph.info": "global_ocean/Icos/mesh/base_mesh/graph.250111.info", + "ocean/global_ocean/Icos/mesh/cull_mesh/culled_mesh.nc": "global_ocean/Icos/mesh/cull_mesh/culled_mesh.250111.nc", + "ocean/global_ocean/Icos/mesh/cull_mesh/culled_graph.info": "global_ocean/Icos/mesh/cull_mesh/culled_graph.250111.info", + "ocean/global_ocean/Icos/mesh/cull_mesh/critical_passages_mask_final.nc": "global_ocean/Icos/mesh/cull_mesh/critical_passages_mask_final.250111.nc", + "ocean/global_ocean/Icos/mesh/cull_mesh/topography_culled.nc": "global_ocean/Icos/mesh/cull_mesh/topography_culled.250111.nc", + "ocean/global_ocean/Icos/mesh/cull_mesh/map_culled_to_base.nc": "global_ocean/Icos/mesh/cull_mesh/map_culled_to_base.250111.nc", + "ocean/global_ocean/Icos/mesh/remap_topography/topography_remapped.nc": "global_ocean/Icos/mesh/remap_topography/topography_remapped.250111.nc", + "ocean/global_ocean/Icos/WOA23/init/initial_state/initial_state.nc": "global_ocean/Icos/WOA23/init/initial_state/initial_state.250111.nc", + "ocean/global_ocean/Icos/WOA23/init/initial_state/init_mode_forcing_data.nc": "global_ocean/Icos/WOA23/init/initial_state/init_mode_forcing_data.250111.nc", + "ocean/global_ocean/Icos/WOA23/init/initial_state/graph.info": "global_ocean/Icos/WOA23/init/initial_state/graph.250111.info", + "ocean/global_ocean/IcoswISC/mesh/base_mesh/mesh.msh": "global_ocean/IcoswISC/mesh/base_mesh/mesh.250111.msh", + "ocean/global_ocean/IcoswISC/mesh/base_mesh/base_mesh.nc": "global_ocean/IcoswISC/mesh/base_mesh/base_mesh.250111.nc", + "ocean/global_ocean/IcoswISC/mesh/base_mesh/cellWidthVsLatLon.nc": "global_ocean/IcoswISC/mesh/base_mesh/cellWidthVsLatLon.250111.nc", + "ocean/global_ocean/IcoswISC/mesh/base_mesh/graph.info": "global_ocean/IcoswISC/mesh/base_mesh/graph.250111.info", + "ocean/global_ocean/IcoswISC/mesh/cull_mesh/culled_mesh.nc": "global_ocean/IcoswISC/mesh/cull_mesh/culled_mesh.250111.nc", + "ocean/global_ocean/IcoswISC/mesh/cull_mesh/culled_graph.info": "global_ocean/IcoswISC/mesh/cull_mesh/culled_graph.250111.info", + "ocean/global_ocean/IcoswISC/mesh/cull_mesh/critical_passages_mask_final.nc": "global_ocean/IcoswISC/mesh/cull_mesh/critical_passages_mask_final.250111.nc", + "ocean/global_ocean/IcoswISC/mesh/cull_mesh/land_ice_mask.nc": "global_ocean/IcoswISC/mesh/cull_mesh/land_ice_mask.250111.nc", + "ocean/global_ocean/IcoswISC/mesh/cull_mesh/topography_culled.nc": "global_ocean/IcoswISC/mesh/cull_mesh/topography_culled.250111.nc", + "ocean/global_ocean/IcoswISC/mesh/cull_mesh/map_culled_to_base.nc": "global_ocean/IcoswISC/mesh/cull_mesh/map_culled_to_base.250111.nc", + "ocean/global_ocean/IcoswISC/mesh/remap_topography/topography_remapped.nc": "global_ocean/IcoswISC/mesh/remap_topography/topography_remapped.250111.nc", + "ocean/global_ocean/IcoswISC/WOA23/init/initial_state/initial_state.nc": "global_ocean/IcoswISC/WOA23/init/initial_state/initial_state.250111.nc", + "ocean/global_ocean/IcoswISC/WOA23/init/initial_state/init_mode_forcing_data.nc": "global_ocean/IcoswISC/WOA23/init/initial_state/init_mode_forcing_data.250111.nc", + "ocean/global_ocean/IcoswISC/WOA23/init/initial_state/graph.info": "global_ocean/IcoswISC/WOA23/init/initial_state/graph.250111.info", + "ocean/global_ocean/IcoswISC/WOA23/init/remap_ice_shelf_melt/prescribed_ismf_paolo2023.nc": "global_ocean/IcoswISC/WOA23/init/remap_ice_shelf_melt/prescribed_ismf_paolo2023.250111.nc", "ocean/global_ocean/IcoswISC/WOA23/init/ssh_adjustment/adjusted_init.nc": "global_ocean/IcoswISC/WOA23/init/ssh_adjustment/adjusted_init.240312.nc", - "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/initial_state.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/initial_state.240509.nc", - "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/init_mode_forcing_data.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/init_mode_forcing_data.240509.nc", - "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/graph.info": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/graph.240509.info", - "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/02_ssh_from_surface_density/topography_culled.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/02_ssh_from_surface_density/topography_culled.240509.nc", - "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/03_init/initial_state.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/03_init/initial_state.240509.nc", - "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/03_init/init_mode_forcing_data.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/03_init/init_mode_forcing_data.240509.nc", - "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/03_init/graph.info": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/03_init/graph.240509.info", - "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/04_adjust_ssh/topography_culled.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/04_adjust_ssh/topography_culled.240509.nc", - "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/05_init/initial_state.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/05_init/initial_state.240509.nc", - "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/05_init/init_mode_forcing_data.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/05_init/init_mode_forcing_data.240509.nc", - "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/05_init/graph.info": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/05_init/graph.240509.info", - "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/06_adjust_ssh/topography_culled.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/06_adjust_ssh/topography_culled.240509.nc", - "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/07_init/initial_state.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/07_init/initial_state.240509.nc", - "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/07_init/init_mode_forcing_data.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/07_init/init_mode_forcing_data.240509.nc", - "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/07_init/graph.info": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/07_init/graph.240509.info", - "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/08_adjust_ssh/topography_culled.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/08_adjust_ssh/topography_culled.240509.nc", - "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/09_init/initial_state.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/09_init/initial_state.240509.nc", - "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/09_init/init_mode_forcing_data.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/09_init/init_mode_forcing_data.240509.nc", - "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/09_init/graph.info": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/09_init/graph.240509.info", - "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/10_adjust_ssh/topography_culled.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/10_adjust_ssh/topography_culled.240509.nc", - "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/initial_state.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/initial_state.240509.nc", - "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/init_mode_forcing_data.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/init_mode_forcing_data.240509.nc", - "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/graph.info": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/graph.240509.info", - "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/02_ssh_from_surface_density/topography_culled.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/02_ssh_from_surface_density/topography_culled.240509.nc", - "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/03_init/initial_state.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/03_init/initial_state.240509.nc", - "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/03_init/init_mode_forcing_data.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/03_init/init_mode_forcing_data.240509.nc", - "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/03_init/graph.info": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/03_init/graph.240509.info", - "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/04_adjust_ssh/topography_culled.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/04_adjust_ssh/topography_culled.240509.nc", - "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/05_init/initial_state.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/05_init/initial_state.240509.nc", - "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/05_init/init_mode_forcing_data.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/05_init/init_mode_forcing_data.240509.nc", - "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/05_init/graph.info": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/05_init/graph.240509.info", - "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/06_adjust_ssh/topography_culled.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/06_adjust_ssh/topography_culled.240509.nc", - "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/07_init/initial_state.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/07_init/initial_state.240509.nc", - "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/07_init/init_mode_forcing_data.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/07_init/init_mode_forcing_data.240509.nc", - "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/07_init/graph.info": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/07_init/graph.240509.info", - "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/08_adjust_ssh/topography_culled.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/08_adjust_ssh/topography_culled.240509.nc", - "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/09_init/initial_state.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/09_init/initial_state.240509.nc", - "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/09_init/init_mode_forcing_data.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/09_init/init_mode_forcing_data.240509.nc", - "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/09_init/graph.info": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/09_init/graph.240509.info", - "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/10_adjust_ssh/topography_culled.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/10_adjust_ssh/topography_culled.240509.nc" + "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/initial_state.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/initial_state.250111.nc", + "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/init_mode_forcing_data.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/init_mode_forcing_data.250111.nc", + "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/graph.info": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/graph.250111.info", + "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/02_ssh_from_surface_density/topography_culled.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/02_ssh_from_surface_density/topography_culled.250111.nc", + "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/03_init/initial_state.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/03_init/initial_state.250111.nc", + "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/03_init/init_mode_forcing_data.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/03_init/init_mode_forcing_data.250111.nc", + "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/03_init/graph.info": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/03_init/graph.250111.info", + "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/04_adjust_ssh/topography_culled.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/04_adjust_ssh/topography_culled.250111.nc", + "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/05_init/initial_state.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/05_init/initial_state.250111.nc", + "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/05_init/init_mode_forcing_data.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/05_init/init_mode_forcing_data.250111.nc", + "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/05_init/graph.info": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/05_init/graph.250111.info", + "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/06_adjust_ssh/topography_culled.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/06_adjust_ssh/topography_culled.250111.nc", + "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/07_init/initial_state.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/07_init/initial_state.250111.nc", + "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/07_init/init_mode_forcing_data.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/07_init/init_mode_forcing_data.250111.nc", + "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/07_init/graph.info": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/07_init/graph.250111.info", + "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/08_adjust_ssh/topography_culled.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/08_adjust_ssh/topography_culled.250111.nc", + "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/09_init/initial_state.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/09_init/initial_state.250111.nc", + "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/09_init/init_mode_forcing_data.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/09_init/init_mode_forcing_data.250111.nc", + "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/09_init/graph.info": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/09_init/graph.250111.info", + "ocean/global_ocean/IcoswISC/WOA23/init/adjust_ssh/10_adjust_ssh/topography_culled.nc": "global_ocean/IcoswISC/WOA23/init/adjust_ssh/10_adjust_ssh/topography_culled.250111.nc", + "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/initial_state.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/initial_state.250111.nc", + "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/init_mode_forcing_data.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/init_mode_forcing_data.250111.nc", + "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/graph.info": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/01_init_with_draft_from_constant_density/graph.250111.info", + "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/02_ssh_from_surface_density/topography_culled.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/02_ssh_from_surface_density/topography_culled.250111.nc", + "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/03_init/initial_state.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/03_init/initial_state.250111.nc", + "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/03_init/init_mode_forcing_data.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/03_init/init_mode_forcing_data.250111.nc", + "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/03_init/graph.info": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/03_init/graph.250111.info", + "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/04_adjust_ssh/topography_culled.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/04_adjust_ssh/topography_culled.250111.nc", + "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/05_init/initial_state.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/05_init/initial_state.250111.nc", + "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/05_init/init_mode_forcing_data.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/05_init/init_mode_forcing_data.250111.nc", + "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/05_init/graph.info": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/05_init/graph.250111.info", + "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/06_adjust_ssh/topography_culled.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/06_adjust_ssh/topography_culled.250111.nc", + "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/07_init/initial_state.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/07_init/initial_state.250111.nc", + "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/07_init/init_mode_forcing_data.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/07_init/init_mode_forcing_data.250111.nc", + "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/07_init/graph.info": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/07_init/graph.250111.info", + "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/08_adjust_ssh/topography_culled.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/08_adjust_ssh/topography_culled.250111.nc", + "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/09_init/initial_state.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/09_init/initial_state.250111.nc", + "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/09_init/init_mode_forcing_data.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/09_init/init_mode_forcing_data.250111.nc", + "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/09_init/graph.info": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/09_init/graph.250111.info", + "ocean/global_ocean/IcoswISC240/WOA23/init/adjust_ssh/10_adjust_ssh/topography_culled.nc": "global_ocean/IcoswISC240/WOA23/init/adjust_ssh/10_adjust_ssh/topography_culled.250111.nc" } From 44cf4d55f74154146cd7a71ee92750503fc6e51b Mon Sep 17 00:00:00 2001 From: Xylar Asay-Davis Date: Sat, 11 Jan 2025 07:46:34 -0600 Subject: [PATCH 15/15] Try not updating conda in workflows Hoping this will prevent download failures --- .github/workflows/build_workflow.yml | 2 +- .github/workflows/docs_workflow.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build_workflow.yml b/.github/workflows/build_workflow.yml index 391f85d94e..be4387fd33 100644 --- a/.github/workflows/build_workflow.yml +++ b/.github/workflows/build_workflow.yml @@ -89,7 +89,7 @@ jobs: channels: conda-forge,e3sm/label/compass channel-priority: strict use-mamba: false - auto-update-conda: true + auto-update-conda: false python-version: ${{ matrix.python-version }} - if: ${{ steps.skip_check.outputs.should_skip != 'true' }} diff --git a/.github/workflows/docs_workflow.yml b/.github/workflows/docs_workflow.yml index 383c8215a8..8008c3b959 100644 --- a/.github/workflows/docs_workflow.yml +++ b/.github/workflows/docs_workflow.yml @@ -41,7 +41,7 @@ jobs: channels: conda-forge,e3sm/label/compass channel-priority: strict use-mamba: false - auto-update-conda: true + auto-update-conda: false python-version: ${{ matrix.python-version }} - if: ${{ steps.skip_check.outputs.should_skip != 'true' }}