Regrids a POP ocean model grid to another grid.
procedure pop_remap ( x_dst [*] : numeric, map_wts [*][*] : numeric, dst_add [*] : integer, src_add [*] : integer, x_src [*] : numeric ) return_val : numeric
A one-dimensional array representing all points in the destination grid. The size is determined by the SCRIP software's variable dst_grid_dims. Must be the same type as x_src.
A two-dimensional array equal to the remapping weights. The dimension order is (num_links,num_wgts) using SCRIP nomenclature.dst_add
An one-dimensional array equal to the destination addresses.src_add
An one-dimensional array equal to the source addresses.x_src
A one-dimensional array representing all points in the source grid. Must be the same type as x_dst.
Regrids a POP ocean model grid to another grid using weights, source addresses and
destination addresses from the
(Spherical Coordinate Remapping and Interpolation Package). Only users
should use this function.
This routine performs the appropriate first-order multiplication between the values in a one dimensional representation of the source grid and derived weights. The output is a one dimensional representation of the output grid.
ndtooned and onedtond can be used to perform the transformations between multi-dimensional arrays and one dimensional arrays.
It is the user's responsibility to read in the appropriate data from a SCRIP file.
Jones, Philip W. (1999): First and Second Order Conservative Remapping Schemes for Grids in Spherical Coordinates. Monthly Weather Review: v127 pp 2204-2210. Jones, Philip W. (1998): A User's Guide for SCRIP: A Spherical Coordinate Remapping and Interpolation Package. Version 1.2. Los Alamos National Laboratory.
Let Src_to_Dst.nc represent the SCRIP file with the desired regridding information. Let XIN be the two-dimensional source grid and XOUT be the two-dimensional destination grid.
fP = addfile("Src_to_Dst.nc","r") ; SCRIP netCDF file dim_x = dimsizes( XIN ) ; XIN is the variable to be remapped nDx = dimsizes( dim_x ) ; rank [# dimensions] dim_src = fP->src_grid_dims ; size source grid ; error check if (dim_x(nDx-2).ne.dim_src(1) .or. dim_x(nDx-1).ne.dim_src(0)) then print (" Input grid and Remap sizes do not match") exit end if dst_add = fP->dst_address ; destination grid [linear] src_add = fP->src_address ; source grid [linear] map_wts = fP->remap_matrix ; wts dim_dst = fP->dst_grid_dims ; size destination grid mx = dim_dst(0) ; output # elements in "x" ny = dim_dst(1) ; output # elements in "y" xout_1D = new (ny*mx, typeof(XIN)) ; (temporary) return grid [1D] xin_1D = ndtooned ( XIN ) ; convert to 1D pop_remap(xout_1D, map_wts, dst_add, src_add, xin_1D) XOUT = onedtond(xout_1D, (/ny,mx/) ) ; new grid delete(xout_1D) ; clean up delete(xin_1D) delete(dst_add) delete(src_add) delete(map_wts)