Skip to content

Commit

Permalink
FIX: Fix unnecessary coordinate reduction for SCRIP in chunked-rwg #497
Browse files Browse the repository at this point in the history
- Also added some more example scripts
- Moved CTSM examples into own directory
  • Loading branch information
bekozi committed May 17, 2019
1 parent db3d0ec commit d90d5bf
Show file tree
Hide file tree
Showing 5 changed files with 89 additions and 2 deletions.
24 changes: 24 additions & 0 deletions examples/CTSM-MapData-Workflow/convert_to_shapefile.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import ocgis

# Path to the file of interest
PATH = "/home/benkoziol/Dropbox/dtmp/ctsm-grids/SCRIPgrid_4x5_nomask_c110308.nc"
# The metadata/IO driver for the data file.
DRIVER="netcdf-scrip"

# ----------------------------------------------------------------------------------------------------------------------

# The request dataset provides metadata for a field.
rd = ocgis.RequestDataset(PATH, driver=DRIVER)
# The field is similar to ESMF Field and provides access to grids, etc. It can also hold multiple data variables.
field = rd.create_field()
# Convert the coordinates into Shapely polygon objects.
print("This is the geometry abstraction that will be used: {}".format(field.grid.abstraction))
field.set_abstraction_geom()
print("Sending polygons to a shapefile...")
field.geom.write_vector("/tmp/shp_polygon.shp")

# Can also write the points in another way...
field.grid.abstraction = "point"
points = field.grid.get_abstraction_geometry()
points.write_vector("/tmp/shp_points.shp")

42 changes: 42 additions & 0 deletions examples/CTSM-MapData-Workflow/do-chunked-rwg-ctsm-scrip.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
#!/usr/bin/env bash

# The base or working directory.
WD=~/scratch/

# Directory to write all the chunked files to.
CHUNKDIR=${WD}/chunking

# Path to the source field/grid netCDF file.
SRC="/home/ubuntu/Dropbox/dtmp/ctsm-grids/SCRIPgrid_0.5x0.5_AVHRR_c110228.nc"
SRCTYPE="SCRIP"
SRC_MAXSPATIALRES=0.5

# Path to the destination field/grid netCDF file.
DST="/home/ubuntu/Dropbox/dtmp/ctsm-grids/SCRIPgrid_4x5_nomask_c110308.nc"
DSTTYPE="SCRIP"
DST_MAXSPATIALRES=0.5

# Chunking composition for the destination grid (n_chunks_y,n_chunks_x).
NCHUNKS_DST=10

# Path to the merged output weight file.
WEIGHTS=${WD}/weights.nc

# The ocli python file or executable target with the subcommand for chunked
# regrid weight generation.
CRWG="ocli chunked-rwg "
#CRWG="python /home/ubuntu/Dropbox/NESII/project/ocg/git/ocgis/src/ocgis/ocli.py chunked-rwg "

# An optional execution prefix.
EXEC_PREFIX=""
#EXEC_PREFIX="mpirun -n `nproc`"

###############################################################################

# Generate the weights using the spatially subset source field and destination
# field.

${EXEC_PREFIX} ${CRWG} --source ${SRC} --destination ${DST} \
--esmf_regrid_method CONSERVE --nchunks_dst ${NCHUNKS_DST} --wd ${CHUNKDIR} \
--weight ${WEIGHTS} --persist --esmf_src_type ${SRCTYPE} --esmf_dst_type ${DSTTYPE} \
--src_resolution ${SRC_MAXSPATIALRES} --dst_resolution ${DST_MAXSPATIALRES} --verbose
20 changes: 20 additions & 0 deletions examples/CTSM-MapData-Workflow/get_grid_spatial_resolution.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import ocgis

# Path to the file of interest
PATH = "/home/benkoziol/Dropbox/dtmp/ctsm-grids/SCRIPgrid_4x5_nomask_c110308.nc"
# The metadata/IO driver for the data file.
DRIVER="netcdf-scrip"

# The request dataset provides metadata for a field.
rd = ocgis.RequestDataset(PATH, driver=DRIVER)
# The field is similar to ESMF Field and provides access to grids, etc. It can also hold multiple data variables.
field = rd.create_field()
print("Average spatial resolution: {}".format(field.grid.resolution))
print("Maximum spatial resolution: {}".format(field.grid.resolution_max))

#-----------------------------------------------------------------------------------------------------------------------

print("\nDo a simple data file inspection...")
rd.inspect()
print("\nThis is the OCGIS interpretation of the metadata (can be customized)...")
rd.dimension_map.pprint(as_dict=True)
5 changes: 3 additions & 2 deletions src/ocgis/spatial/grid_chunker.py
Original file line number Diff line number Diff line change
Expand Up @@ -505,8 +505,9 @@ def iter_src_grid_subsets(self, yield_dst=False, yield_idx=None):
else:
target_grid = dst_grid_subset

# Try to reduce the coordinates in the case of unstructured grid data.
if hasattr(target_grid, 'reduce_global') and Topology.POLYGON in target_grid.abstractions_available:
# Try to reduce the coordinates in the case of unstructured grid data. Ensure the data also has a
# coordinate index. SCRIP grid files, for example, do not have a coordinate index like UGRID.
if hasattr(target_grid, 'reduce_global') and Topology.POLYGON in target_grid.abstractions_available and target_grid.cindex is not None:
ocgis_lh(logger='grid_chunker', msg='starting reduce_global for dst_grid_subset',
level=logging.DEBUG)
target_grid = target_grid.reduce_global()
Expand Down

0 comments on commit d90d5bf

Please sign in to comment.