Hello:
I adapted your tutorial code to downscale a 5424 x 5424 curvilinear grid conservatively to a 162 (1 degree lat) by 128 (1.25 degree lon) section of a coarse global model grid.
The code below worked quite well for a small test where I downscaled a 170 x 170 grid to 162 x 128. But for the larger scale grid I got the following error when trying to run with mpirun and 4 processors. I know you are a user and not support but any help would be greatly appreciated.
ERROR
Primary job terminated normally, but 1 process returned
a non-zero exit code. Per user-direction, the job has been aborted.
mpirun noticed that process rank 2 with PID 0 on node ldt-4295279 exited on signal 9 (Killed).
CODE:
import ESMF
ESMF.Manager(debug=True)
import numpy as np
from netCDF4 import Dataset
glm_nc = Dataset('glmlatlon_goes16_with_glm_ff_var_no_time.nc')
glm_ff = glm_nc['glm_ff'][:,:]
glm_ff_shape = glm_ff.shape
print(glm_ff_shape)
glm_lats = np.linspace(1, 5424, 5424)
print(glm_lats)
print(len(glm_lats))
glm_lat_b = np.linspace(0, 5425, 5425)
print(glm_lat_b)
glm_lons = np.linspace(1, 5424, 5424)
print(glm_lons)
print(len(glm_lons))
glm_lon_b = np.linspace(0, 5425, 5425)
print(glm_lon_b)
glm_lat_corners,glm_lon_corners = np.meshgrid(glm_lat_b, glm_lon_b)
c96_nc = Dataset('c96_grid_May2019_region_0_to_180_no_time.nc')
c96_grid = c96_nc['flash_freq'][:,:]
c96_grid_shape = c96_grid.shape
print(c96_grid_shape)
latitudes = c96_nc['lat'][:]
lat_corners = np.linspace(-81.5, 81.5, 163)
print(lat_corners)
longitudes = c96_nc['lon'][:]
lon_corners = np.linspace(-155.5, 5.5, 129)
print(lon_corners)
c96_corner_lat, c96_corner_lon = np.meshgrid(lat_corners, lon_corners)
FORTRAN_CONTIGUOUS = True
sourcegrid = ESMF.Grid(np.array(glm_ff_shape),staggerloc=[ESMF.StaggerLoc.CENTER, ESMF.StaggerLoc.CORNER],
coord_sys=ESMF.CoordSys.SPH_DEG) #, staggerloc=ESMF.StaggerLoc.CENTER)
destgrid = ESMF.Grid(np.array(c96_grid_shape),staggerloc=[ESMF.StaggerLoc.CENTER, ESMF.StaggerLoc.CORNER],
coord_sys=ESMF.CoordSys.SPH_DEG) #, staggerloc=ESMF.StaggerLoc.CENTER)
source_lon = sourcegrid.get_coords(0, staggerloc=ESMF.StaggerLoc.CENTER)
source_lat = sourcegrid.get_coords(1, staggerloc=ESMF.StaggerLoc.CENTER)
dest_lon = destgrid.get_coords(0, staggerloc=ESMF.StaggerLoc.CENTER)
dest_lat = destgrid.get_coords(1, staggerloc=ESMF.StaggerLoc.CENTER)
source_lon[...] = source_lon
source_lat[...] = source_lat
dest_lon[...] = dest_lon
dest_lat[...] = dest_lat
glm_lat = sourcegrid.get_coords(1, staggerloc=ESMF.StaggerLoc.CORNER)
glm_lon = sourcegrid.get_coords(0, staggerloc=ESMF.StaggerLoc.CORNER)
c96_lat = destgrid.get_coords(1, staggerloc=ESMF.StaggerLoc.CORNER)
c96_lon = destgrid.get_coords(0, staggerloc=ESMF.StaggerLoc.CORNER)
if FORTRAN_CONTIGUOUS:
glm_lat[...] = glm_lat_corners.T
glm_lon[...] = glm_lon_corners.T
c96_lat[...] = c96_corner_lat.T
c96_lon[...] = c96_corner_lon.T
else:
glm_lat[...] = glm_lat_corner
glm_lon[...] = glm_lon_corner
c96_lat[...] = c96_corner_lat
c96_lon[...] = c96_corner_lon
sourcefield = ESMF.Field(sourcegrid, name='GLM Flash Frequency')
destfield = ESMF.Field(destgrid, name='Downscaled GLM Flash Frequency')
if FORTRAN_CONTIGUOUS:
sourcefield.data[...] = glm_ff.T
else:
sourcefield.data[...] = glm_ff
regrid = ESMF.Regrid(sourcefield, destfield, regrid_method=ESMF.RegridMethod.CONSERVE, unmapped_action=ESMF.UnmappedAction.IGNORE)
destfield = regrid(sourcefield, destfield)
glm_downscaled = destfield.data
print(glm_downscaled)
np.savetxt("glm_downscale_052019.csv", glm_downscaled, fmt="%1.14f", delimiter=",")