From 9f24d088f5b344bd4a58be7656007f5c5db8f79f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 03:48:36 +0000 Subject: [PATCH] Update documentation --- latest/_modules/compass/landice/mesh.html | 131 ++++------- .../landice/tests/antarctica/mesh.html | 69 +++--- .../compass/landice/tests/greenland/mesh.html | 212 +++++++----------- .../developers_guide/landice/api.rst.txt | 3 +- .../landice/framework.rst.txt | 11 +- ...landice.mesh.interp_ais_bedmachine.rst.txt | 6 - ...s.landice.mesh.interp_ais_measures.rst.txt | 6 - ...s.landice.mesh.interp_gridded2mali.rst.txt | 6 + .../landice/test_groups/antarctica.rst.txt | 14 +- .../landice/test_groups/greenland.rst.txt | 20 ++ latest/developers_guide/landice/api.html | 23 +- .../developers_guide/landice/framework.html | 10 +- ...mpass.landice.mesh.gridded_flood_fill.html | 4 +- ...ss.landice.mesh.interp_ais_bedmachine.html | 182 --------------- ...ass.landice.mesh.interp_gridded2mali.html} | 25 ++- .../compass.landice.mesh.mpas_flood_fill.html | 4 +- ...ass.landice.tests.greenland.mesh.Mesh.html | 7 +- latest/genindex.html | 4 +- latest/objects.inv | Bin 36418 -> 36392 bytes latest/searchindex.js | 2 +- .../landice/test_groups/antarctica.html | 12 + .../landice/test_groups/greenland.html | 20 ++ 22 files changed, 277 insertions(+), 494 deletions(-) delete mode 100644 latest/_sources/developers_guide/landice/generated/compass.landice.mesh.interp_ais_bedmachine.rst.txt delete mode 100644 latest/_sources/developers_guide/landice/generated/compass.landice.mesh.interp_ais_measures.rst.txt create mode 100644 latest/_sources/developers_guide/landice/generated/compass.landice.mesh.interp_gridded2mali.rst.txt delete mode 100644 latest/developers_guide/landice/generated/compass.landice.mesh.interp_ais_bedmachine.html rename latest/developers_guide/landice/generated/{compass.landice.mesh.interp_ais_measures.html => compass.landice.mesh.interp_gridded2mali.html} (79%) diff --git a/latest/_modules/compass/landice/mesh.html b/latest/_modules/compass/landice/mesh.html index f3348d4745..49fdf779dd 100644 --- a/latest/_modules/compass/landice/mesh.html +++ b/latest/_modules/compass/landice/mesh.html @@ -112,6 +112,7 @@

Source code for compass.landice.mesh

 import os
+import re
 import sys
 import time
 from shutil import copyfile
@@ -125,6 +126,7 @@ 

Source code for compass.landice.mesh

 from mpas_tools.logging import check_call
 from mpas_tools.mesh.conversion import convert, cull
 from mpas_tools.mesh.creation import build_planar_mesh
+from mpas_tools.mesh.creation.sort_mesh import sort_mesh
 from netCDF4 import Dataset
 from scipy.interpolate import NearestNDInterpolator, interpn
 
@@ -569,7 +571,7 @@ 

Source code for compass.landice.mesh

         logger.info('WARNING: window_size was set to a value smaller'
                     ' than high_dist and/or high_dist_bed. Resetting'
                     f' window_size to {max(high_dist, high_dist_bed)},'
-                    ' which is  max(high_dist, high_dist_bed)')
+                    ' which is max(high_dist, high_dist_bed)')
         window_size = max(high_dist, high_dist_bed)
 
     dx = x[1] - x[0]  # assumed constant and equal in x and y
@@ -877,10 +879,11 @@ 

Source code for compass.landice.mesh

 
     check_call(args, logger=logger)
 
-    logger.info('culling and converting')
+    logger.info('culling, converting, and sorting')
     dsMesh = xarray.open_dataset('culled.nc')
     dsMesh = cull(dsMesh, logger=logger)
     dsMesh = convert(dsMesh, logger=logger)
+    dsMesh = sort_mesh(dsMesh)
     write_netcdf(dsMesh, 'dehorned.nc')
 
     args = ['create_landice_grid_from_generic_MPAS_grid.py', '-i',
@@ -1110,6 +1113,8 @@ 

Source code for compass.landice.mesh

 
         tic = time.perf_counter()
         logger.info(f"Beginning interpolation for {field}")
+        # NOTE: Do not need to evaluate the extrapolator at all grid cells.
+        #       Only needed for ice-free grid cells, since is NN extrapolation
         data.variables[field][0, :] = interp(xGrid, yGrid)
         toc = time.perf_counter()
         logger.info(f"Interpolation completed in {toc - tic} seconds")
@@ -1145,17 +1150,17 @@ 

Source code for compass.landice.mesh

 
 
 
-
-[docs] -def interp_ais_bedmachine(self, data_path, mali_scrip, nProcs, dest_file): +
+[docs] +def interp_gridded2mali(self, source_file, mali_scrip, nProcs, dest_file, proj, + variables="all"): """ - Interpolates BedMachine thickness and bedTopography dataset - to a MALI mesh + Interpolate gridded dataset (e.g. MEASURES, BedMachine) onto a MALI mesh Parameters ---------- - data_path : str - path to AIS datasets, including BedMachine + source_file : str + filepath to the source gridded datatset to be interpolated mali_scrip : str name of scrip file corresponding to destination MALI mesh @@ -1165,107 +1170,69 @@

Source code for compass.landice.mesh

 
     dest_file: str
         MALI input file to which data should be remapped
-    """
-
-    logger = self.logger
-
-    logger.info('creating scrip file for BedMachine dataset')
-    # Note: writing scrip file to workdir
-    args = ['create_SCRIP_file_from_planar_rectangular_grid.py',
-            '-i',
-            os.path.join(data_path,
-                         'BedMachineAntarctica_2020-07-15_v02_edits_floodFill_extrap_fillVostok.nc'),  # noqa
-            '-s',
-            'BedMachineAntarctica_2020-07-15_v02.scrip.nc',
-            '-p', 'ais-bedmap2',
-            '-r', '2']
-    check_call(args, logger=logger)
 
-    # Generate remapping weights
-    # Testing shows 5 badger/grizzly nodes works well.
-    # 2 nodes is too few. I have not tested anything in between.
-    logger.info('generating gridded dataset -> MPAS weights')
-    args = ['srun', '-n', nProcs, 'ESMF_RegridWeightGen',
-            '--source',
-            'BedMachineAntarctica_2020-07-15_v02.scrip.nc',
-            '--destination', mali_scrip,
-            '--weight', 'BedMachine_to_MPAS_weights.nc',
-            '--method', 'conserve',
-            "--netcdf4",
-            "--dst_regional", "--src_regional", '--ignore_unmapped']
-    check_call(args, logger=logger)
-
-    # Perform actual interpolation using the weights
-    logger.info('calling interpolate_to_mpasli_grid.py')
-    args = ['interpolate_to_mpasli_grid.py', '-s',
-            os.path.join(data_path,
-                         'BedMachineAntarctica_2020-07-15_v02_edits_floodFill_extrap_fillVostok.nc'),  # noqa
-            '-d', dest_file,
-            '-m', 'e',
-            '-w', 'BedMachine_to_MPAS_weights.nc']
-    check_call(args, logger=logger)
+ proj: str + projection of the source dataset + variables: "all" or list of strings + either the string "all" or a list of strings + """ + def __guess_scrip_name(filename): -
-[docs] -def interp_ais_measures(self, data_path, mali_scrip, nProcs, dest_file): - """ - Interpolates MEASURES ice velocity dataset - to a MALI mesh + # try searching for string followed by a version number + match = re.search(r'(^.*[_-]v\d*[_-])+', filename) - Parameters - ---------- - data_path : str - path to AIS datasets, including BedMachine + if match: + # slice string to end of match minus one to leave of final _ or - + base_fn = filename[:match.end() - 1] + else: + # no matches were found, just use the filename (minus extension) + base_fn = os.path.splitext(filename)[0] - mali_scrip : str - name of scrip file corresponding to destination MALI mesh + return f"{base_fn}.scrip.nc" - nProcs : int - number of processors to use for generating remapping weights + logger = self.logger - dest_file: str - MALI input file to which data should be remapped - """ + source_scrip = __guess_scrip_name(os.path.basename(source_file)) + weights_filename = "gridded_to_MPAS_weights.nc" - logger = self.logger + # make sure variables is a list, encompasses the variables="all" case + if isinstance(variables, str): + variables = [variables] + if not isinstance(variables, list): + raise TypeError("Arugment 'variables' is of incorrect type, must" + " either the string 'all' or a list of strings") - logger.info('creating scrip file for velocity dataset') + logger.info('creating scrip file for source dataset') # Note: writing scrip file to workdir args = ['create_SCRIP_file_from_planar_rectangular_grid.py', - '-i', - os.path.join(data_path, - 'antarctica_ice_velocity_450m_v2_edits_extrap.nc'), - '-s', - 'antarctica_ice_velocity_450m_v2.scrip.nc', - '-p', 'ais-bedmap2', + '-i', source_file, + '-s', source_scrip, + '-p', proj, '-r', '2'] check_call(args, logger=logger) # Generate remapping weights logger.info('generating gridded dataset -> MPAS weights') args = ['srun', '-n', nProcs, 'ESMF_RegridWeightGen', - '--source', - 'antarctica_ice_velocity_450m_v2.scrip.nc', + '--source', source_scrip, '--destination', mali_scrip, - '--weight', 'measures_to_MPAS_weights.nc', + '--weight', weights_filename, '--method', 'conserve', "--netcdf4", "--dst_regional", "--src_regional", '--ignore_unmapped'] check_call(args, logger=logger) + # Perform actual interpolation using the weights logger.info('calling interpolate_to_mpasli_grid.py') args = ['interpolate_to_mpasli_grid.py', - '-s', - os.path.join(data_path, - 'antarctica_ice_velocity_450m_v2_edits_extrap.nc'), + '-s', source_file, '-d', dest_file, '-m', 'e', - '-w', 'measures_to_MPAS_weights.nc', - '-v', 'observedSurfaceVelocityX', - 'observedSurfaceVelocityY', - 'observedSurfaceVelocityUncertainty'] + '-w', weights_filename, + '-v'] + variables + check_call(args, logger=logger)
diff --git a/latest/_modules/compass/landice/tests/antarctica/mesh.html b/latest/_modules/compass/landice/tests/antarctica/mesh.html index 678c31bbfb..5bc5a41076 100644 --- a/latest/_modules/compass/landice/tests/antarctica/mesh.html +++ b/latest/_modules/compass/landice/tests/antarctica/mesh.html @@ -123,8 +123,7 @@

Source code for compass.landice.tests.antarctica.mesh

build_cell_width, build_mali_mesh, clean_up_after_interp, - interp_ais_bedmachine, - interp_ais_measures, + interp_gridded2mali, make_region_masks, preprocess_ais_data, ) @@ -162,10 +161,10 @@

Source code for compass.landice.tests.antarctica.mesh

self.mesh_filename = 'Antarctica.nc' self.add_output_file(filename='graph.info') self.add_output_file(filename=self.mesh_filename) - self.add_output_file(filename=f'{self.mesh_filename[:-3]}_' - f'imbie_regionMasks.nc') - self.add_output_file(filename=f'{self.mesh_filename[:-3]}_' - f'ismip6_regionMasks.nc') + self.add_output_file( + filename=f'{self.mesh_filename[:-3]}_imbie_regionMasks.nc') + self.add_output_file( + filename=f'{self.mesh_filename[:-3]}_ismip6_regionMasks.nc') self.add_input_file( filename='antarctica_8km_2024_01_29.nc', target='antarctica_8km_2024_01_29.nc', @@ -182,37 +181,38 @@

Source code for compass.landice.tests.antarctica.mesh

""" logger = self.logger config = self.config + section_ais = config['antarctica'] - data_path = section_ais.get('data_path') + nProcs = section_ais.get('nProcs') + src_proj = section_ais.get("src_proj") + data_path = section_ais.get('data_path') + measures_filename = section_ais.get("measures_filename") + bedmachine_filename = section_ais.get("bedmachine_filename") + + measures_dataset = os.path.join(data_path, measures_filename) + bedmachine_dataset = os.path.join(data_path, bedmachine_filename) section_name = 'mesh' + # TODO: do we want to add this to the config file? source_gridded_dataset = 'antarctica_8km_2024_01_29.nc' - bedmachine_path = os.path.join( - data_path, - 'BedMachineAntarctica_2020-07-15_v02_edits_floodFill_extrap_fillVostok.nc') # noqa bm_updated_gridded_dataset = add_bedmachine_thk_to_ais_gridded_data( - self, source_gridded_dataset, bedmachine_path) + self, source_gridded_dataset, bedmachine_dataset) + logger.info('calling build_cell_width') cell_width, x1, y1, geom_points, geom_edges, floodFillMask = \ build_cell_width( self, section_name=section_name, gridded_dataset=bm_updated_gridded_dataset) - # Preprocess the gridded AIS source datasets to work - # with the rest of the workflow - logger.info('calling preprocess_ais_data') - preprocessed_gridded_dataset = preprocess_ais_data( - self, bm_updated_gridded_dataset, floodFillMask) - # Now build the base mesh and perform the standard interpolation build_mali_mesh( self, cell_width, x1, y1, geom_points, geom_edges, mesh_name=self.mesh_filename, section_name=section_name, gridded_dataset=bm_updated_gridded_dataset, - projection='ais-bedmap2', geojson_file=None) + projection=src_proj, geojson_file=None) # Now that we have base mesh with standard interpolation # perform advanced interpolation for specific fields @@ -228,12 +228,19 @@

Source code for compass.landice.tests.antarctica.mesh

data.variables['iceMask'][:] = 0. data.close() - # interpolate fields from composite dataset - # Note: this was already done in build_mali_mesh() using - # bilinear interpolation. Redoing it here again is likely - # not needed. Also, it should be assessed if bilinear or - # barycentric used here is preferred for this application. - # Current thinking is they are both equally appropriate. + # Preprocess the gridded AIS source datasets to work + # with the rest of the workflow + logger.info('calling preprocess_ais_data') + preprocessed_gridded_dataset = preprocess_ais_data( + self, bm_updated_gridded_dataset, floodFillMask) + + # interpolate fields from *preprocessed* composite dataset + # NOTE: while this has already been done in `build_mali_mesh()` + # we are using an updated version of the gridded dataset here, + # which has had unit conversion and extrapolation done. + # Also, it should be assessed if bilinear or + # barycentric used here is preferred for this application. + # Current thinking is they are both equally appropriate. logger.info('calling interpolate_to_mpasli_grid.py') args = ['interpolate_to_mpasli_grid.py', '-s', preprocessed_gridded_dataset, @@ -252,10 +259,16 @@

Source code for compass.landice.tests.antarctica.mesh

# Now perform bespoke interpolation of geometry and velocity data # from their respective sources - interp_ais_bedmachine(self, data_path, dst_scrip_file, nProcs, - self.mesh_filename) - interp_ais_measures(self, data_path, dst_scrip_file, nProcs, - self.mesh_filename) + interp_gridded2mali(self, bedmachine_dataset, dst_scrip_file, nProcs, + self.mesh_filename, src_proj, variables="all") + + # only interpolate a subset of MEaSUREs variables onto the MALI mesh + measures_vars = ['observedSurfaceVelocityX', + 'observedSurfaceVelocityY', + 'observedSurfaceVelocityUncertainty'] + interp_gridded2mali(self, measures_dataset, dst_scrip_file, nProcs, + self.mesh_filename, src_proj, + variables=measures_vars) # perform some final cleanup details clean_up_after_interp(self.mesh_filename) diff --git a/latest/_modules/compass/landice/tests/greenland/mesh.html b/latest/_modules/compass/landice/tests/greenland/mesh.html index 57370912ee..49e7de547c 100644 --- a/latest/_modules/compass/landice/tests/greenland/mesh.html +++ b/latest/_modules/compass/landice/tests/greenland/mesh.html @@ -112,17 +112,17 @@

Source code for compass.landice.tests.greenland.mesh

-from os.path import exists
-from shutil import copyfile
+import os
 
-import netCDF4
 import numpy as np
-from mpas_tools.logging import check_call
+import xarray as xr
 from mpas_tools.scrip.from_mpas import scrip_from_mpas
 
 from compass.landice.mesh import (
     build_cell_width,
     build_mali_mesh,
+    clean_up_after_interp,
+    interp_gridded2mali,
     make_region_masks,
 )
 from compass.model import make_graph_file
@@ -137,8 +137,8 @@ 

Source code for compass.landice.tests.greenland.mesh

Attributes ---------- - mesh_type : str - The resolution or mesh type of the test case + mesh_filename : str + File name of the MALI mesh """
[docs] @@ -151,14 +151,19 @@

Source code for compass.landice.tests.greenland.mesh

test_case : compass.TestCase The test case this step belongs to - mesh_type : str - The resolution or mesh type of the test case """ super().__init__(test_case=test_case, name='mesh', cpus_per_task=128, min_cpus_per_task=1) + # output files + self.mesh_filename = 'GIS.nc' self.add_output_file(filename='graph.info') - self.add_output_file(filename='GIS.nc') + self.add_output_file(filename=self.mesh_filename) + self.add_output_file( + filename=f'{self.mesh_filename[:-3]}_ismip6_regionMasks.nc') + self.add_output_file( + filename=f'{self.mesh_filename[:-3]}_zwally_regionMasks.nc') + # input files self.add_input_file( filename='greenland_1km_2024_01_29.epsg3413.icesheetonly.nc', target='greenland_1km_2024_01_29.epsg3413.icesheetonly.nc', @@ -177,142 +182,73 @@

Source code for compass.landice.tests.greenland.mesh

Run this step of the test case """ logger = self.logger - mesh_name = 'GIS.nc' - section_name = 'mesh' config = self.config - section = config[section_name] - data_path = section.get('data_path') - nProcs = section.get('nProcs') + + section_gis = config['greenland'] + + nProcs = section_gis.get('nProcs') + src_proj = section_gis.get("src_proj") + data_path = section_gis.get('data_path') + measures_filename = section_gis.get("measures_filename") + bedmachine_filename = section_gis.get("bedmachine_filename") + + measures_dataset = os.path.join(data_path, measures_filename) + bedmachine_dataset = os.path.join(data_path, bedmachine_filename) + + section_name = 'mesh' + + source_gridded_dataset_1km = 'greenland_1km_2024_01_29.epsg3413.icesheetonly.nc' # noqa: E501 + source_gridded_dataset_2km = 'greenland_2km_2024_01_29.epsg3413.nc' logger.info('calling build_cell_width') cell_width, x1, y1, geom_points, geom_edges, floodMask = \ build_cell_width( self, section_name=section_name, - gridded_dataset='greenland_2km_2024_01_29.epsg3413.nc', + gridded_dataset=source_gridded_dataset_2km, flood_fill_start=[100, 700]) + # Now build the base mesh and perform the standard interpolation build_mali_mesh( self, cell_width, x1, y1, geom_points, geom_edges, - mesh_name=mesh_name, section_name=section_name, - gridded_dataset='greenland_1km_2024_01_29.epsg3413.icesheetonly.nc', # noqa - projection='gis-gimp', geojson_file=None) - - # Create scrip files if they don't already exist - if exists(data_path + '/BedMachineGreenland-v5.scrip.nc'): - logger.info('BedMachine script file exists;' - ' skipping file creation') - else: - logger.info('creating scrip file for BedMachine dataset') - args = ['create_SCRIP_file_from_planar_rectangular_grid.py', - '-i', data_path + '/BedMachineGreenland-v5_edits_floodFill_extrap.nc', # noqa - '-s', data_path + '/BedMachineGreenland-v5.scrip.nc', - '-p', 'gis-gimp', '-r', '2'] - check_call(args, logger=logger) - if exists(data_path + '/greenland_vel_mosaic500.scrip.nc'): - logger.info('Measures script file exists; skipping file creation') - else: - logger.info('creating scrip file for 2006-2010 velocity dataset') - args = ['create_SCRIP_file_from_planar_rectangular_grid.py', - '-i', data_path + '/greenland_vel_mosaic500_extrap.nc', - '-s', data_path + '/greenland_vel_mosaic500.scrip.nc', - '-p', 'gis-gimp', '-r', '2'] - check_call(args, logger=logger) - - logger.info('calling set_lat_lon_fields_in_planar_grid.py') - args = ['set_lat_lon_fields_in_planar_grid.py', '-f', - 'GIS.nc', '-p', 'gis-gimp'] - check_call(args, logger=logger) + mesh_name=self.mesh_filename, section_name=section_name, + gridded_dataset=source_gridded_dataset_1km, + projection=src_proj, geojson_file=None) + # Create scrip file for the newly generated mesh logger.info('creating scrip file for destination mesh') - scrip_from_mpas('GIS.nc', 'GIS.scrip.nc') - args = ['create_SCRIP_file_from_MPAS_mesh.py', - '-m', 'GIS.nc', - '-s', 'GIS.scrip.nc'] - check_call(args, logger=logger) - - # Create weight files from datasets to mesh - if exists('BedMachine_to_MPAS_weights.nc'): - logger.info('BedMachine_to_MPAS_weights.nc exists; skipping') - else: - logger.info('generating gridded dataset -> MPAS weights') - args = ['srun', '-n', nProcs, 'ESMF_RegridWeightGen', '--source', - data_path + 'BedMachineGreenland-v5.scrip.nc', - '--destination', - 'GIS.scrip.nc', - '--weight', 'BedMachine_to_MPAS_weights.nc', - '--method', 'conserve', - "-i", "-64bit_offset", - "--dst_regional", "--src_regional", '--netcdf4'] - check_call(args, logger=logger) - - if exists('measures_to_MPAS_weights.nc'): - logger.info('measures_to_MPAS_weights.nc exists; skipping') - else: - logger.info('generating gridded dataset -> MPAS weights') - args = ['srun', '-n', nProcs, 'ESMF_RegridWeightGen', '--source', - data_path + 'greenland_vel_mosaic500.scrip.nc', - '--destination', - 'GIS.scrip.nc', - '--weight', 'measures_to_MPAS_weights.nc', - '--method', 'conserve', - "-i", "-64bit_offset", '--netcdf4', - "--dst_regional", "--src_regional", '--ignore_unmapped'] - check_call(args, logger=logger) - - # interpolate fields from BedMachine and Measures - # Using conservative remapping - logger.info('calling interpolate_to_mpasli_grid.py') - args = ['interpolate_to_mpasli_grid.py', '-s', - data_path + '/BedMachineGreenland-v5_edits_floodFill_extrap.nc', # noqa - '-d', 'GIS.nc', '-m', 'e', - '-w', 'BedMachine_to_MPAS_weights.nc'] - check_call(args, logger=logger) - - logger.info('calling interpolate_to_mpasli_grid.py') - args = ['interpolate_to_mpasli_grid.py', '-s', - data_path + '/greenland_vel_mosaic500_extrap.nc', - '-d', 'GIS.nc', '-m', 'e', - '-w', 'measures_to_MPAS_weights.nc', - '-v', 'observedSurfaceVelocityX', - 'observedSurfaceVelocityY', - 'observedSurfaceVelocityUncertainty'] - check_call(args, logger=logger) - - logger.info('Marking domain boundaries dirichlet') - args = ['mark_domain_boundaries_dirichlet.py', - '-f', 'GIS.nc'] - check_call(args, logger=logger) - + dst_scrip_file = f"{self.mesh_filename.split('.')[:-1][0]}_scrip.nc" + scrip_from_mpas(self.mesh_filename, dst_scrip_file) + + # Now perform bespoke interpolation of geometry and velocity data + # from their respective sources + interp_gridded2mali(self, bedmachine_dataset, dst_scrip_file, nProcs, + self.mesh_filename, src_proj, variables="all") + + # only interpolate a subset of MEaSUREs variables onto the MALI mesh + measures_vars = ['observedSurfaceVelocityX', + 'observedSurfaceVelocityY', + 'observedSurfaceVelocityUncertainty'] + interp_gridded2mali(self, measures_dataset, dst_scrip_file, nProcs, + self.mesh_filename, src_proj, + variables=measures_vars) + + # perform some final cleanup details + clean_up_after_interp(self.mesh_filename) + + # create graph file logger.info('creating graph.info') - make_graph_file(mesh_filename=mesh_name, + make_graph_file(mesh_filename=self.mesh_filename, graph_filename='graph.info') - # Create a backup in case clean-up goes awry - copyfile('GIS.nc', 'GIS_backup.nc') - - # Clean up: trim to iceMask and set large velocity - # uncertainties where appropriate. - data = netCDF4.Dataset('GIS.nc', 'r+') - data.set_auto_mask(False) - data.variables['thickness'][:] *= (data.variables['iceMask'][:] > 1.5) - - mask = np.logical_or( - np.isnan( - data.variables['observedSurfaceVelocityUncertainty'][:]), - data.variables['thickness'][:] < 1.0) - mask = np.logical_or( - mask, - data.variables['observedSurfaceVelocityUncertainty'][:] == 0.0) - data.variables['observedSurfaceVelocityUncertainty'][0, mask[0, :]] = 1.0 # noqa # create region masks - mask_filename = f'{mesh_name[:-3]}_ismip6_regionMasks.nc' - make_region_masks(self, mesh_name, mask_filename, + mask_filename = f'{self.mesh_filename[:-3]}_ismip6_regionMasks.nc' + make_region_masks(self, self.mesh_filename, mask_filename, self.cpus_per_task, tags=["Greenland", "ISMIP6", "Shelf"], component='ocean') - mask_filename = f'{mesh_name[:-3]}_zwally_regionMasks.nc' - make_region_masks(self, mesh_name, mask_filename, + mask_filename = f'{self.mesh_filename[:-3]}_zwally_regionMasks.nc' + make_region_masks(self, self.mesh_filename, mask_filename, self.cpus_per_task, tags=['eastCentralGreenland', 'northEastGreenland', @@ -324,21 +260,25 @@

Source code for compass.landice.tests.greenland.mesh

'westCentralGreenland'], all_tags=False) + # Do some final validation of the mesh + ds = xr.open_dataset(self.mesh_filename) # Ensure basalHeatFlux is positive - data.variables['basalHeatFlux'][:] = np.abs( - data.variables['basalHeatFlux'][:]) + ds["basalHeatFlux"] = np.abs(ds.basalHeatFlux) # Ensure reasonable dHdt values - dHdt = data.variables["observedThicknessTendency"][:] - dHdtErr = data.variables["observedThicknessTendencyUncertainty"][:] + dHdt = ds["observedThicknessTendency"] # Arbitrary 5% uncertainty; improve this later dHdtErr = np.abs(dHdt) * 0.05 - # large uncertainty where data is missing - dHdtErr[np.abs(dHdt) > 1.0] = 1.0 - dHdt[np.abs(dHdt) > 1.0] = 0.0 # Remove ridiculous values - data.variables["observedThicknessTendency"][:] = dHdt - data.variables["observedThicknessTendencyUncertainty"][:] = dHdtErr - - data.close()
+ # Use threshold of |dHdt| > 1.0 to determine invalid data + mask = np.abs(dHdt) > 1.0 + # Assign very large uncertainty where data is missing + dHdtErr = dHdtErr.where(~mask, 1.0) + # Remove ridiculous values + dHdt = dHdt.where(~mask, 0.0) + # Put the updated fields back in the dataset + ds["observedThicknessTendency"] = dHdt + ds["observedThicknessTendencyUncertainty"] = dHdtErr + # Write the data to disk + ds.to_netcdf(self.mesh_filename, 'a')
diff --git a/latest/_sources/developers_guide/landice/api.rst.txt b/latest/_sources/developers_guide/landice/api.rst.txt index 456dce84ae..ae9736f688 100644 --- a/latest/_sources/developers_guide/landice/api.rst.txt +++ b/latest/_sources/developers_guide/landice/api.rst.txt @@ -492,8 +492,7 @@ Landice Framework mesh.add_bedmachine_thk_to_ais_gridded_data mesh.clean_up_after_interp mesh.gridded_flood_fill - mesh.interp_ais_bedmachine - mesh.interp_ais_measures + mesh.interp_gridded2mali mesh.mpas_flood_fill mesh.preprocess_ais_data mesh.set_rectangular_geom_points_and_edges diff --git a/latest/_sources/developers_guide/landice/framework.rst.txt b/latest/_sources/developers_guide/landice/framework.rst.txt index 02123c5b22..e3fddd6e17 100644 --- a/latest/_sources/developers_guide/landice/framework.rst.txt +++ b/latest/_sources/developers_guide/landice/framework.rst.txt @@ -56,13 +56,10 @@ clean up steps after interpolation for the AIS mesh case. :py:func:`compass.landice.mesh.gridded_flood_fill()` applies a flood-fill algorithm to the gridded dataset in order to separate the ice sheet from peripheral ice. -:py:func:`compass.landice.mesh.interp_ais_bedmachine()` interpolates BedMachine -thickness and bedTopography dataset to a MALI mesh, accounting for masking of -the ice extent to avoid interpolation ramps. - -:py:func:`compass.landice.mesh.interp_ais_interp_ais_measures()` interpolates -MEASURES ice velocity dataset to a MALI mesh, accounting for masking at the ice -edge and extrapolation. +:py:func:`compass.landice.mesh.interp_gridded2mali()` interpolates gridded data +(e.g. BedMachine thickness or MEaSUREs ice velocity) to a MALI mesh, accounting +for masking of the ice extent to avoid interpolation ramps. This functions works +for both Antarctica and Greenland. :py:func:`compass.landice.mesh.preprocess_ais_data()` performs adjustments to gridded AIS datasets needed for rest of compass workflow to utilize them. diff --git a/latest/_sources/developers_guide/landice/generated/compass.landice.mesh.interp_ais_bedmachine.rst.txt b/latest/_sources/developers_guide/landice/generated/compass.landice.mesh.interp_ais_bedmachine.rst.txt deleted file mode 100644 index 4ae5cf634e..0000000000 --- a/latest/_sources/developers_guide/landice/generated/compass.landice.mesh.interp_ais_bedmachine.rst.txt +++ /dev/null @@ -1,6 +0,0 @@ -compass.landice.mesh.interp\_ais\_bedmachine -============================================ - -.. currentmodule:: compass.landice.mesh - -.. autofunction:: interp_ais_bedmachine \ No newline at end of file diff --git a/latest/_sources/developers_guide/landice/generated/compass.landice.mesh.interp_ais_measures.rst.txt b/latest/_sources/developers_guide/landice/generated/compass.landice.mesh.interp_ais_measures.rst.txt deleted file mode 100644 index ef0e33e7a9..0000000000 --- a/latest/_sources/developers_guide/landice/generated/compass.landice.mesh.interp_ais_measures.rst.txt +++ /dev/null @@ -1,6 +0,0 @@ -compass.landice.mesh.interp\_ais\_measures -========================================== - -.. currentmodule:: compass.landice.mesh - -.. autofunction:: interp_ais_measures \ No newline at end of file diff --git a/latest/_sources/developers_guide/landice/generated/compass.landice.mesh.interp_gridded2mali.rst.txt b/latest/_sources/developers_guide/landice/generated/compass.landice.mesh.interp_gridded2mali.rst.txt new file mode 100644 index 0000000000..5d97913f88 --- /dev/null +++ b/latest/_sources/developers_guide/landice/generated/compass.landice.mesh.interp_gridded2mali.rst.txt @@ -0,0 +1,6 @@ +compass.landice.mesh.interp\_gridded2mali +========================================= + +.. currentmodule:: compass.landice.mesh + +.. autofunction:: interp_gridded2mali \ No newline at end of file diff --git a/latest/_sources/users_guide/landice/test_groups/antarctica.rst.txt b/latest/_sources/users_guide/landice/test_groups/antarctica.rst.txt index f0a0629e80..cef797f9ee 100644 --- a/latest/_sources/users_guide/landice/test_groups/antarctica.rst.txt +++ b/latest/_sources/users_guide/landice/test_groups/antarctica.rst.txt @@ -73,7 +73,19 @@ the mesh generation options are adjusted through the config file. # path to directory containing BedMachine and Measures datasets # (default value is for Perlmutter) data_path = /global/cfs/cdirs/fanssie/standard_datasets/AIS_datasets - + + # filename of the BedMachine thickness and bedTopography dataset + # (default value is for Perlmutter) + bedmachine_filename = BedMachineAntarctica_2020-07-15_v02_edits_floodFill_extrap_fillVostok.nc + + # filename of the MEASURES ice velocity dataset + # (default value is for Perlmutter) + measures_filename = antarctica_ice_velocity_450m_v2_edits_extrap.nc + + # projection of the source datasets, according to the dictionary keys + # create_SCRIP_file_from_planar_rectangular_grid.py from MPAS_Tools + src_proj = ais-bedmap2 + # number of processors to use for ESMF_RegridWeightGen nProcs = 128 diff --git a/latest/_sources/users_guide/landice/test_groups/greenland.rst.txt b/latest/_sources/users_guide/landice/test_groups/greenland.rst.txt index 902baa0161..146119b909 100644 --- a/latest/_sources/users_guide/landice/test_groups/greenland.rst.txt +++ b/latest/_sources/users_guide/landice/test_groups/greenland.rst.txt @@ -86,6 +86,26 @@ The other test cases do not use config options. use_dist_to_edge = True use_bed = True + [greenland] + # path to directory containing BedMachine and Measures datasets + # (default value is for Perlmutter) + data_path = /global/cfs/cdirs/fanssie/standard_datasets/GIS_datasets/ + + # filename of the BedMachine thickness and bedTopography dataset + # (default value is for Perlmutter) + bedmachine_filename = BedMachineGreenland-v5_edits_floodFill_extrap.nc + + # filename of the MEASURES ice velocity dataset + # (default value is for Perlmutter) + measures_filename = greenland_vel_mosaic500_extrap.nc + + # projection of the source datasets, according to the dictionary keys + # create_SCRIP_file_from_planar_rectangular_grid.py from MPAS_Tools + src_proj = gis-gimp + + # number of processors to use for ESMF_RegridWeightGen + nProcs = 128 + smoke_test ---------- diff --git a/latest/developers_guide/landice/api.html b/latest/developers_guide/landice/api.html index 5d197db212..3eee0e4097 100644 --- a/latest/developers_guide/landice/api.html +++ b/latest/developers_guide/landice/api.html @@ -941,34 +941,31 @@

Landice Framework

mesh.gridded_flood_fill(field[, iStart, jStart])

Generic flood-fill routine to create mask of connected elements in the desired input array (field) from a gridded dataset.

-

mesh.interp_ais_bedmachine(self, data_path, ...)

-

Interpolates BedMachine thickness and bedTopography dataset to a MALI mesh

+

mesh.interp_gridded2mali(self, source_file, ...)

+

Interpolate gridded dataset (e.g. MEASURES, BedMachine) onto a MALI mesh.

-

mesh.interp_ais_measures(self, data_path, ...)

-

Interpolates MEASURES ice velocity dataset to a MALI mesh

- -

mesh.mpas_flood_fill(seed_mask, grow_mask, ...)

+

mesh.mpas_flood_fill(seed_mask, grow_mask, ...)

Flood-fill for mpas meshes using mpas cells.

-

mesh.preprocess_ais_data(self, ...)

+

mesh.preprocess_ais_data(self, ...)

Perform adjustments to gridded AIS datasets needed for rest of compass workflow to utilize them

-

mesh.set_rectangular_geom_points_and_edges(...)

+

mesh.set_rectangular_geom_points_and_edges(...)

Set node and edge coordinates to pass to mpas_tools.mesh.creation.build_mesh.build_planar_mesh().

-

mesh.set_cell_width(self, section_name, thk)

+

mesh.set_cell_width(self, section_name, thk)

Set cell widths based on settings in config file to pass to mpas_tools.mesh.creation.build_mesh.build_planar_mesh().

-

mesh.get_dist_to_edge_and_gl(self, thk, ...)

+

mesh.get_dist_to_edge_and_gl(self, thk, ...)

Calculate distance from each point to ice edge and grounding line, to be used in mesh density functions in compass.landice.mesh.set_cell_width().

-

mesh.build_cell_width(self, section_name, ...)

+

mesh.build_cell_width(self, section_name, ...)

Determine MPAS mesh cell size based on user-defined density function.

-

mesh.build_mali_mesh(self, cell_width, x1, ...)

+

mesh.build_mali_mesh(self, cell_width, x1, ...)

Create the MALI mesh based on final cell widths determined by compass.landice.mesh.build_cell_width(), using Jigsaw and MPAS-Tools functions.

-

mesh.make_region_masks(self, mesh_filename, ...)

+

mesh.make_region_masks(self, mesh_filename, ...)

Create masks for ice-sheet subregions based on data in MPAS-Dev/geometric_fatures.

diff --git a/latest/developers_guide/landice/framework.html b/latest/developers_guide/landice/framework.html index 476feb2f67..f6e5a3e4f5 100644 --- a/latest/developers_guide/landice/framework.html +++ b/latest/developers_guide/landice/framework.html @@ -171,12 +171,10 @@

mesh

compass.landice.mesh.gridded_flood_fill() applies a flood-fill algorithm to the gridded dataset in order to separate the ice sheet from peripheral ice.

-

compass.landice.mesh.interp_ais_bedmachine() interpolates BedMachine -thickness and bedTopography dataset to a MALI mesh, accounting for masking of -the ice extent to avoid interpolation ramps.

-

compass.landice.mesh.interp_ais_interp_ais_measures() interpolates -MEASURES ice velocity dataset to a MALI mesh, accounting for masking at the ice -edge and extrapolation.

+

compass.landice.mesh.interp_gridded2mali() interpolates gridded data +(e.g. BedMachine thickness or MEaSUREs ice velocity) to a MALI mesh, accounting +for masking of the ice extent to avoid interpolation ramps. This functions works +for both Antarctica and Greenland.

compass.landice.mesh.preprocess_ais_data() performs adjustments to gridded AIS datasets needed for rest of compass workflow to utilize them.

compass.landice.mesh.set_rectangular_geom_points_and_edges() sets node diff --git a/latest/developers_guide/landice/generated/compass.landice.mesh.gridded_flood_fill.html b/latest/developers_guide/landice/generated/compass.landice.mesh.gridded_flood_fill.html index f1330d679b..419f57b7c9 100644 --- a/latest/developers_guide/landice/generated/compass.landice.mesh.gridded_flood_fill.html +++ b/latest/developers_guide/landice/generated/compass.landice.mesh.gridded_flood_fill.html @@ -19,7 +19,7 @@ - + @@ -163,7 +163,7 @@

compass.landice.mesh.gridded_flood_fill - +


diff --git a/latest/developers_guide/landice/generated/compass.landice.mesh.interp_ais_bedmachine.html b/latest/developers_guide/landice/generated/compass.landice.mesh.interp_ais_bedmachine.html deleted file mode 100644 index 68432ed03e..0000000000 --- a/latest/developers_guide/landice/generated/compass.landice.mesh.interp_ais_bedmachine.html +++ /dev/null @@ -1,182 +0,0 @@ - - - - - - - compass.landice.mesh.interp_ais_bedmachine — compass latest documentation - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

compass.landice.mesh.interp_ais_bedmachine

-
-
-compass.landice.mesh.interp_ais_bedmachine(self, data_path, mali_scrip, nProcs, dest_file)[source]
-

Interpolates BedMachine thickness and bedTopography dataset -to a MALI mesh

-
-
Parameters:
-
    -
  • data_path (str) – path to AIS datasets, including BedMachine

  • -
  • mali_scrip (str) – name of scrip file corresponding to destination MALI mesh

  • -
  • nProcs (int) – number of processors to use for generating remapping weights

  • -
  • dest_file (str) – MALI input file to which data should be remapped

  • -
-
-
-
- -
- - -
-
-
- -
- -
-

© Copyright Copyright (c) 2013-2021, Los Alamos National Security, LLC (LANS) (Ocean: LA-CC-13-047;Land Ice: LA-CC-13-117) and the University Corporation for Atmospheric Research (UCAR)..

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/latest/developers_guide/landice/generated/compass.landice.mesh.interp_ais_measures.html b/latest/developers_guide/landice/generated/compass.landice.mesh.interp_gridded2mali.html similarity index 79% rename from latest/developers_guide/landice/generated/compass.landice.mesh.interp_ais_measures.html rename to latest/developers_guide/landice/generated/compass.landice.mesh.interp_gridded2mali.html index 7a6050fb9c..c0c1d5b202 100644 --- a/latest/developers_guide/landice/generated/compass.landice.mesh.interp_ais_measures.html +++ b/latest/developers_guide/landice/generated/compass.landice.mesh.interp_gridded2mali.html @@ -4,7 +4,7 @@ - compass.landice.mesh.interp_ais_measures — compass latest documentation + compass.landice.mesh.interp_gridded2mali — compass latest documentation @@ -20,7 +20,7 @@ - + @@ -117,9 +117,9 @@
  • - +
  • - View page source + View page source

  • @@ -127,20 +127,21 @@
    -
    -

    compass.landice.mesh.interp_ais_measures

    +
    +

    compass.landice.mesh.interp_gridded2mali

    -
    -compass.landice.mesh.interp_ais_measures(self, data_path, mali_scrip, nProcs, dest_file)[source]
    -

    Interpolates MEASURES ice velocity dataset -to a MALI mesh

    +
    +compass.landice.mesh.interp_gridded2mali(self, source_file, mali_scrip, nProcs, dest_file, proj, variables='all')[source]
    +

    Interpolate gridded dataset (e.g. MEASURES, BedMachine) onto a MALI mesh

    Parameters:
      -
    • data_path (str) – path to AIS datasets, including BedMachine

    • +
    • source_file (str) – filepath to the source gridded datatset to be interpolated

    • mali_scrip (str) – name of scrip file corresponding to destination MALI mesh

    • nProcs (int) – number of processors to use for generating remapping weights

    • dest_file (str) – MALI input file to which data should be remapped

    • +
    • proj (str) – projection of the source dataset

    • +
    • variables ("all" or list of strings) – either the string “all” or a list of strings

    @@ -152,7 +153,7 @@

    compass.landice.mesh.interp_ais_measures - +

    diff --git a/latest/developers_guide/landice/generated/compass.landice.mesh.mpas_flood_fill.html b/latest/developers_guide/landice/generated/compass.landice.mesh.mpas_flood_fill.html index de521e493d..647ca0f9f9 100644 --- a/latest/developers_guide/landice/generated/compass.landice.mesh.mpas_flood_fill.html +++ b/latest/developers_guide/landice/generated/compass.landice.mesh.mpas_flood_fill.html @@ -20,7 +20,7 @@ - + @@ -160,7 +160,7 @@

    compass.landice.mesh.mpas_flood_fill - +

    diff --git a/latest/developers_guide/landice/generated/compass.landice.tests.greenland.mesh.Mesh.html b/latest/developers_guide/landice/generated/compass.landice.tests.greenland.mesh.Mesh.html index 36bd679393..3d05d0e3ad 100644 --- a/latest/developers_guide/landice/generated/compass.landice.tests.greenland.mesh.Mesh.html +++ b/latest/developers_guide/landice/generated/compass.landice.tests.greenland.mesh.Mesh.html @@ -135,7 +135,7 @@

    compass.landice.tests.greenland.mesh.Mesh
    Variables:
    -

    mesh_type (str) – The resolution or mesh type of the test case

    +

    mesh_filename (str) – File name of the MALI mesh

    @@ -144,10 +144,7 @@

    compass.landice.tests.greenland.mesh.Mesh
    Parameters:
    -
    +

    test_case (compass.TestCase) – The test case this step belongs to

    diff --git a/latest/genindex.html b/latest/genindex.html index 3bf6dd0acc..089c5e6b55 100644 --- a/latest/genindex.html +++ b/latest/genindex.html @@ -1526,9 +1526,7 @@

    I

  • InternalWave (class in compass.ocean.tests.internal_wave)
  • -
  • interp_ais_bedmachine() (in module compass.landice.mesh) -
  • -
  • interp_ais_measures() (in module compass.landice.mesh) +
  • interp_gridded2mali() (in module compass.landice.mesh)
  • interpolate_data_to_grid() (compass.ocean.tests.hurricane.init.interpolate_atm_forcing.InterpolateAtmForcing method) diff --git a/latest/objects.inv b/latest/objects.inv index 264f7c4439f50269a0049a73e8624ba5e7e38144..17502082019a54d4e2a1ea0484c21d6fee95a749 100644 GIT binary patch delta 28757 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 options# (default value is for Perlmutter) data_path = /global/cfs/cdirs/fanssie/standard_datasets/AIS_datasets +# filename of the BedMachine thickness and bedTopography dataset +# (default value is for Perlmutter) +bedmachine_filename = BedMachineAntarctica_2020-07-15_v02_edits_floodFill_extrap_fillVostok.nc + +# filename of the MEASURES ice velocity dataset +# (default value is for Perlmutter) +measures_filename = antarctica_ice_velocity_450m_v2_edits_extrap.nc + +# projection of the source datasets, according to the dictionary keys +# create_SCRIP_file_from_planar_rectangular_grid.py from MPAS_Tools +src_proj = ais-bedmap2 + # number of processors to use for ESMF_RegridWeightGen nProcs = 128

  • diff --git a/latest/users_guide/landice/test_groups/greenland.html b/latest/users_guide/landice/test_groups/greenland.html index dbeacee8e1..7facb06917 100644 --- a/latest/users_guide/landice/test_groups/greenland.html +++ b/latest/users_guide/landice/test_groups/greenland.html @@ -224,6 +224,26 @@

    config optionsuse_dist_to_grounding_line = False use_dist_to_edge = True use_bed = True + +[greenland] +# path to directory containing BedMachine and Measures datasets +# (default value is for Perlmutter) +data_path = /global/cfs/cdirs/fanssie/standard_datasets/GIS_datasets/ + +# filename of the BedMachine thickness and bedTopography dataset +# (default value is for Perlmutter) +bedmachine_filename = BedMachineGreenland-v5_edits_floodFill_extrap.nc + +# filename of the MEASURES ice velocity dataset +# (default value is for Perlmutter) +measures_filename = greenland_vel_mosaic500_extrap.nc + +# projection of the source datasets, according to the dictionary keys +# create_SCRIP_file_from_planar_rectangular_grid.py from MPAS_Tools +src_proj = gis-gimp + +# number of processors to use for ESMF_RegridWeightGen +nProcs = 128