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 Frameworkmesh.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
-
+
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¶
clean up steps after interpolation for the AIS mesh case.
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
Previous
- Next
+ Next
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
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ 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 @@
@@ -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
compass.landice.mesh.interp_ais_measures - Previous + Previous Next
compass.landice.mesh.mpas_flood_fill - Previous + Previous Next
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
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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
mesh_type (str) – The resolution or mesh type of the test case
+mesh_filename (str) – File name of the MALI mesh
}nJL8DQe6J|?+3Yu46X;-e__{RsnDf$_n4s$7W%c?2(7fWH{)4$?4pu($3DA2xr
z5c&<3O&bv=gOmF5UHAvCZGrs!+%Q+$jkqYJZ~H)M+90$#xH2}|>Qyw4Mu)0E;W3@W
z-kolp5h>_Hp_N_1I2BOajSzZgzuX32(IEWosbK$Yc;ftAn}bEYnmcg?Brbo&TXC+>
zFP!Rd*E7Xd-T5qqw2h_qQE4zw5$a|5vGbr~i|28V-;YK`^$f*<)*{2oaz-fX#X+sf
zS6)x7!ZKYerGZ+ y(y>z}p(fraW-}o3Zz-%;QV=2fktNx(Zy|IB&CwZ=N
z?1*@zH~kZf6`NV-0&ZYLdgA{4L%-nd4KX++qv^ NVy^45LYRxFJ5!X((S<;d*0RTRDb*ZwriO9tSs0z(ra(3l
zy>A-_(;)RhavH{=CG7nYYKbzq64{sdN2Iq$H5F;#8Eh;p>-OhoGpAnQv>~z2a8t+)
z=}LJfnv4>a@2?q+#g~m-Dp^VsC^iKc?N<}*E)1)83etkqixFxu9C1gPbn^3%a3BCB
zRxhS4KLRgjNqanaf_Wo(IfE{pIc(O8*|)^0ud)zFc-G*ul8F}Fx)IFKdRBIt{3x0K
zB5N!4DD@iowSl^Bz`+K1>7<|1dC%ORWsk4=yGI$_!7c56R(c!#?f>>xFE)Go9Bq~O
zeC*`f+``WDYs5o0Iv<835Q7QcHFXo}tm*^gi$=d7LsmPDH&={6F|5!{r7>=K59;6K
z1bjGrstqNJ^okHcB7a9jm1vZ;|HYSZl=t{DI>cg*4W;Ji11ORaUCEi80JbCNLzK#F
zRrTRA5(jKe!hi8*WU*^-*j{ho(2nj4#^lZxjjKo }lAjl(J4N7F6||K_zEuI93+7*b)qrVYQq!_}_Qeo!+NDn8r7Ha=;%HF-^x^lPb(9kFyr9pm?
zBpf6GHuuNZze_`t7XWzP*<>!8q=2-x9VL=3;tk1$;&!F0C|yk>%J?C<1rO`+4=it6
zeAxA*d8$r-#9Bl|Hju0P01!&^iPm-d=FFr9Y;gj&H3&n2!$X!rLoFjdg9q)*v8COT
zKB3LCb}t`#_VN>b=5+=#5(Ks#KVa(88i@`Lu>$T{(JV6U=|-33LU&$b5oM
z0c*
f2?uqyrx
VgqjWuSSXT2>n;4$zJiu#(-xf;N4dc;pS=SGfLc*^W$+$f@w|k