Contact: Bruce Wyman
Reviewers:
Change history: WebCVS Log for bgrid_change_grid.f90
Provides interfaces to interpolate data between the
four basic sub-grid locations on B-grid.
The B-grid model has four basic sub-grids that correspond to
temperature (TEMP), velocity (WIND), zonal mass flux (UFLX),
and meridional mass flux (VFLX) grid points. The orientation of
these points to each other for the same i,j can be depicted as:
VFLX(i,j) WIND(i,j)
TEMP(i,j) UFLX(i,j)
The interpolation between the sub-grids is done using either
a 4-pt or 2-pt averaging. The averaging can use area-weighting
or equal-weighting (a simple average). Overloaded interfaces
can accommodate either one or two input fields.
Not all grid changes are currently available,
see the notes section for details.
bgrid_horiz_mod
fms_mod
use bgrid_change_grid_mod [,only: change_grid,
TEMP_GRID, WIND_GRID,
UFLX_GRID, VFLX_GRID]
change_grid
Interpolates from sub-grid to another sub-grid.
Public parameters that identify the four basic sub-grids:
TEMP_GRID = temperature (mass) grid
WIND_GRID = velocity (momentum) grid
UFLX_GRID = zonal mass flux grid; grid points are located
between temperature points along the x-axis
VFLX_GRID = meridional mass flux grid; grid points are located
between temperature points along the y-axis
call change_grid ( Hgrid, grid_inp, grid_out, data_inp, data_out
[, weight, mask_inp] )
OR
call change_grid ( Hgrid, grid_inp, grid_out, data_inp1, data_inp2,
data_out1, data_out2 [, weight, mask_inp] )
INPUT
Hgrid horizontal grid constants [horiz_grid_type]
grid_inp grid identifier for the input grid
[integer]
grid_out grid identifier for the output grid
[integer]
data_inp,
data_inp1,
data_inp2 = input data
[real, dimension(Hgrid%ilb:,Hgrid%jlb:)]
[real, dimension(Hgrid%ilb:,Hgrid%jlb:,:)]
OUTPUT
data_out,
data_out1,
data_out2 = output data
[real, dimension(Hgrid%ilb:,Hgrid%jlb:)]
[real, dimension(Hgrid%ilb:,Hgrid%jlb:,:)]
OPTIONAL INPUT
weight = integer flag that type of interpolation
weight=AREA for area weighting (the default) or
weight=EQUAL for simple 4-pt (or 2pt) averaging
mask_inp = grid box mask (typically for step-coordinate model)
[real, dimension(Hgrid%ilb:,Hgrid%jlb:)]
[real, dimension(Hgrid%ilb:,Hgrid%jlb:,:)]
NOTES
1) Possible grid identifiers are:
TEMP_GRID = temperature (mass) grid
WIND_GRID = velocity (momentum) grid
UFLX_GRID = zonal mass flux grid; grid points are located
between temperature points along the x-axis
VFLX_GRID = meridional mass flux grid; grid points are located
between temperature points along the y-axis
2) Halo are not updated, see the notes section below.
3) The input and output arrays may be the same since
temporary memory is used to compute the result.
FATAL errors in change_grid
invalid grid change specified
The input and output grid identifiers must be set using the
public module parameters: TEMP_GRID, WIND_GRID, UFLX_GRID, VFLX_GRID.
Several grid conversions are not possible, refer to the notes section.
invalid value of area_weight
The optional input argument weight must be set to
one of the public module parameters: AREA or EQUAL.
WARNING message in bgrid_change_grid
optional mask argument not used for this type of grid interpolation
The optional mask argument is not used with two-point interpolations.
None.
The following are valid 4-pt interpolations:
"grid_inp" --> "grid_out"
WIND_GRID --> TEMP_GRID (south & west halos not computed)
TEMP_GRID --> WIND_GRID (north & east halos not computed)
VFLX_GRID --> UFLX_GRID (south & east halos not computed)
UFLX_GRID --> VFLX_GRID (north & west halos not computed)
The following are valid 2-pt interpolations:
TEMP_GRID --> UFLX_GRID (east halo not computed)
TEMP_GRID --> VFLX_GRID (north halo not computed)
The following have not been implemented.
They are INVALID and will produce a FATAL error.
WIND_GRID --> UFLX_GRID
WIND_GRID --> VFLX_GRID
VFLX_GRID --> TEMP_GRID
VFLX_GRID --> WIND_GRID
UFLX_GRID --> TEMP_GRID
UFLX_GRID --> WIND_GRID
Implement 2-pt interpolations that are currently not allowed.