NCEPLIBS-ip  5.0.0
ip_rot_equid_cylind_egrid_mod Module Reference

Rotated equidistant cylindrical GRIB decoder and grid coordinate transformations for Arakawa grid E. More...

Data Types

type  ip_rot_equid_cylind_egrid
 

Functions/Subroutines

subroutine gdswzd_rot_equid_cylind_egrid (self, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
 Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for rotated equidistant cylindrical grids. More...
 
subroutine init_grib1 (self, g1_desc)
 Initializes a rotated equidistant cylindrical grid given a grib1_descriptor object. More...
 
subroutine init_grib2 (self, g2_desc)
 Initializes a rotated equidistant cylindrical grid given a grib2_descriptor object. More...
 
subroutine rot_equid_cylind_egrid_error (IOPT, FILL, RLAT, RLON, XPTS, YPTS, NPTS)
 Error handler. More...
 
subroutine rot_equid_cylind_egrid_grid_area (FILL, AREA)
 Computes the grid box area for a rotated equidistant cylindrical grid. More...
 
subroutine rot_equid_cylind_egrid_map_jacob (FILL, RLON, XLON, XLAT, YLON, YLAT)
 Computes the map jacobians for a rotated equidistant cylindrical grid. More...
 
subroutine rot_equid_cylind_egrid_vect_rot (RLON, CROT, SROT)
 Computes the vector rotation sines and cosines for a rotated equidistant cylindrical grid. More...
 

Variables

real(kind=kdclat
 Cosine of the latitude. More...
 
real(kind=kdclat0
 Local copy of clat0. More...
 
real(kind=kdclatr
 Cosine of the rotated latitude. More...
 
real(kind=kdclon
 Cosine of the difference between rlon and rlon0. More...
 
real(kind=kddlats
 Local copy of dlats. More...
 
real(kind=kddlons
 Local copy of dlons. More...
 
integer irot
 Local copy of irot. More...
 
integer, parameter kd = real64
 Kind of reals. More...
 
real(kind=kdrerth
 Radius of the Earth. More...
 
real(kind=kdrlon0
 Local copy of rlon0. More...
 
real(kind=kdslat
 Sine of the latitude. More...
 
real(kind=kdslat0
 Local copy of slat0. More...
 
real(kind=kdslatr
 Sine of the rotated latitude. More...
 

Detailed Description

Rotated equidistant cylindrical GRIB decoder and grid coordinate transformations for Arakawa grid E.

(To handle the A through D grids, see ip_rot_equid_cylind_grid_mod).

The E stagger is a bit odd because the 'wind' points shift by half a grid box in each row. That makes the logic tricky. So the routine does its computations by rotating the grid by 45 degrees.

See more info about Awakawa grids.

Octet numbers refer to GRIB2 - GRID DEFINITION TEMPLATE 3.1 Rotate Latitude/Longitude.

Author
George Gayno, Mark Iredell, Kyle Gerheiser
Date
July 2021

Function/Subroutine Documentation

◆ gdswzd_rot_equid_cylind_egrid()

subroutine ip_rot_equid_cylind_egrid_mod::gdswzd_rot_equid_cylind_egrid ( class(ip_rot_equid_cylind_egrid), intent(in)  self,
integer, intent(in)  IOPT,
integer, intent(in)  NPTS,
real, intent(in)  FILL,
real, dimension(npts), intent(inout)  XPTS,
real, dimension(npts), intent(inout)  YPTS,
real, dimension(npts), intent(inout)  RLON,
real, dimension(npts), intent(inout)  RLAT,
integer, intent(out)  NRET,
real, dimension(npts), intent(out), optional  CROT,
real, dimension(npts), intent(out), optional  SROT,
real, dimension(npts), intent(out), optional  XLON,
real, dimension(npts), intent(out), optional  XLAT,
real, dimension(npts), intent(out), optional  YLON,
real, dimension(npts), intent(out), optional  YLAT,
real, dimension(npts), intent(out), optional  AREA 
)
private

Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for rotated equidistant cylindrical grids.

Works for e-staggered rotated equidistant cylindrical projections. The scan mode determines whether this is an "h" or "v" grid.

If the selected coordinates are more than one gridpoint beyond the the edges of the grid domain, then the relevant output elements are set to fill values.

The actual number of valid points computed is returned too. Optionally, the vector rotations, the map jacobians and the grid box areas may be returned as well.

To compute the vector rotations, the optional arguments 'srot' and 'crot' must be present.

To compute the map jacobians, the optional arguments 'xlon', 'xlat', 'ylon', 'ylat' must be present.

To compute the grid box areas, the optional argument 'area' must be present.

Parameters
[in]selfThe grid object gdswzd was called on.
[in]ioptoption flag
  • +1 to compute earth coords of selected grid coords.
  • -1 o compute grid coords of selected earth coords.
[in]nptsMaximum number of coordinates.
[in]fillFill value to set invalid output data. Must be impossible value; suggested value: -9999.
[in,out]xptsGrid x point coordinates if iopt>0.
[in,out]yptsGrid y point coordinates if iopt>0.
[in,out]rlonEarth longitudes in degrees e if iopt<0 (Acceptable range: -360. to 360.)
[in,out]rlatEarth latitudes in degrees n if iopt<0 (Acceptable range: -90. to 90.)
[out]nretNumber of valid points computed.
[out]crotOptional clockwise vector rotation cosines.
[out]srotOptional clockwise vector rotation sines.
[out]xlonOptional dx/dlon in 1/degrees.
[out]xlatOptional dx/dlat in 1/degrees.
[out]ylonOptional dy/dlon in 1/degrees.
[out]ylatOptional dy/dlat in 1/degrees.
[out]areaOptional area weights in m**2.
Author
Mark Iredell, George Gayno, Kyle Gerheiser
Date
Jan 2015

Definition at line 267 of file ip_rot_equid_cylind_egrid_mod.F90.

References clat, clat0, clatr, clon, dlats, dlons, irot, rerth, rlon0, rot_equid_cylind_egrid_error(), rot_equid_cylind_egrid_grid_area(), rot_equid_cylind_egrid_map_jacob(), rot_equid_cylind_egrid_vect_rot(), slat, slat0, and slatr.

◆ init_grib1()

subroutine ip_rot_equid_cylind_egrid_mod::init_grib1 ( class(ip_rot_equid_cylind_egrid), intent(inout)  self,
type(grib1_descriptor), intent(in)  g1_desc 
)
private

Initializes a rotated equidistant cylindrical grid given a grib1_descriptor object.

Parameters
[in,out]selfThe grid to initialize
[in]g1_descA grib1_descriptor
Author
Kyle Gerheiser
Date
July 2021

Definition at line 86 of file ip_rot_equid_cylind_egrid_mod.F90.

References ip_constants_mod::dpr.

◆ init_grib2()

subroutine ip_rot_equid_cylind_egrid_mod::init_grib2 ( class(ip_rot_equid_cylind_egrid), intent(inout)  self,
type(grib2_descriptor), intent(in)  g2_desc 
)
private

Initializes a rotated equidistant cylindrical grid given a grib2_descriptor object.

Parameters
[in,out]selfThe grid to initialize
[in]g2_descA grib2_descriptor
Author
Kyle Gerheiser
Date
July 2021

Definition at line 163 of file ip_rot_equid_cylind_egrid_mod.F90.

◆ rot_equid_cylind_egrid_error()

subroutine ip_rot_equid_cylind_egrid_mod::rot_equid_cylind_egrid_error ( integer, intent(in)  IOPT,
real, intent(in)  FILL,
real, dimension(npts), intent(out)  RLAT,
real, dimension(npts), intent(out)  RLON,
real, dimension(npts), intent(out)  XPTS,
real, dimension(npts), intent(out)  YPTS,
integer, intent(in)  NPTS 
)
private

Error handler.

UPON AN ERROR, THIS SUBPROGRAM ASSIGNS A "FILL" VALUE TO THE OUTPUT FIELDS.

Program History Log

Date Programmer Comments
2015-07-13 GAYNO Initial version
2015-09-17 GAYNO Rename as "rot_equid_cylind_egrid_error"
Parameters
[in]ioptoption flag
  • 1 to compute earth coords of selected grid coords
  • -1 to compute grid coords of selected earth coords
[in]fillfill value to set invalid output data (must be impossible value; suggested value: -9999.)
[out]rlat(npts) earth latitudes in degrees n if iopt<0
[out]rlon(npts) earth longitudes in degrees e if iopt<0
[out]xpts(npts) grid x point coordinates if iopt>0
[out]ypts(npts) grid y point coordinates if iopt>0
[in]nptsmaximum number of coordinates
Author
GAYNO
Date
2015-07-13

Definition at line 482 of file ip_rot_equid_cylind_egrid_mod.F90.

Referenced by gdswzd_rot_equid_cylind_egrid().

◆ rot_equid_cylind_egrid_grid_area()

subroutine ip_rot_equid_cylind_egrid_mod::rot_equid_cylind_egrid_grid_area ( real, intent(in)  FILL,
real, intent(out)  AREA 
)
private

Computes the grid box area for a rotated equidistant cylindrical grid.

Parameters
[in]fillFill value for undefined points.
[out]areaArea weights in m^2.
Author
George Gayno
Date
Jan 2015

Definition at line 587 of file ip_rot_equid_cylind_egrid_mod.F90.

References clatr, dlats, dlons, and rerth.

Referenced by gdswzd_rot_equid_cylind_egrid().

◆ rot_equid_cylind_egrid_map_jacob()

subroutine ip_rot_equid_cylind_egrid_mod::rot_equid_cylind_egrid_map_jacob ( real, intent(in)  FILL,
real, intent(in)  RLON,
real, intent(out)  XLON,
real, intent(out)  XLAT,
real, intent(out)  YLON,
real, intent(out)  YLAT 
)
private

Computes the map jacobians for a rotated equidistant cylindrical grid.

Parameters
[in]fillFill value for undefined points.
[in]rlonLongitude in degrees.
[out]xlondx/dlon in 1/degrees.
[out]xlatdx/dlat in 1/degrees.
[out]ylondy/dlon in 1/degrees.
[out]ylatdy/dlat in 1/degrees.
Author
George Gayno
Date
Jan 2015

Definition at line 549 of file ip_rot_equid_cylind_egrid_mod.F90.

References clat, clat0, clatr, clon, dlats, dlons, rlon0, slat, and slat0.

Referenced by gdswzd_rot_equid_cylind_egrid().

◆ rot_equid_cylind_egrid_vect_rot()

subroutine ip_rot_equid_cylind_egrid_mod::rot_equid_cylind_egrid_vect_rot ( real, intent(in)  RLON,
real, intent(out)  CROT,
real, intent(out)  SROT 
)
private

Computes the vector rotation sines and cosines for a rotated equidistant cylindrical grid.

Parameters
[in]rlonLongitude in degrees.
[out]crotClockwise vector rotation cosines.
[out]srotClockwise vector rotation sines.
Note
ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
Author
George Gayno
Date
Jan 2015

Definition at line 514 of file ip_rot_equid_cylind_egrid_mod.F90.

References clat, clat0, clatr, clon, irot, rlon0, slat, slat0, and slatr.

Referenced by gdswzd_rot_equid_cylind_egrid().

Variable Documentation

◆ clat

real(kind=kd) ip_rot_equid_cylind_egrid_mod::clat
private

◆ clat0

real(kind=kd) ip_rot_equid_cylind_egrid_mod::clat0
private

◆ clatr

real(kind=kd) ip_rot_equid_cylind_egrid_mod::clatr
private

◆ clon

real(kind=kd) ip_rot_equid_cylind_egrid_mod::clon
private

Cosine of the difference between rlon and rlon0.

Definition at line 67 of file ip_rot_equid_cylind_egrid_mod.F90.

Referenced by gdswzd_rot_equid_cylind_egrid(), rot_equid_cylind_egrid_map_jacob(), and rot_equid_cylind_egrid_vect_rot().

◆ dlats

real(kind=kd) ip_rot_equid_cylind_egrid_mod::dlats
private

◆ dlons

real(kind=kd) ip_rot_equid_cylind_egrid_mod::dlons
private

◆ irot

integer ip_rot_equid_cylind_egrid_mod::irot
private

Local copy of irot.

Definition at line 62 of file ip_rot_equid_cylind_egrid_mod.F90.

Referenced by gdswzd_rot_equid_cylind_egrid(), and rot_equid_cylind_egrid_vect_rot().

◆ kd

integer, parameter ip_rot_equid_cylind_egrid_mod::kd = real64
private

Kind of reals.

Definition at line 35 of file ip_rot_equid_cylind_egrid_mod.F90.

◆ rerth

real(kind=kd) ip_rot_equid_cylind_egrid_mod::rerth
private

Radius of the Earth.

Definition at line 70 of file ip_rot_equid_cylind_egrid_mod.F90.

Referenced by gdswzd_rot_equid_cylind_egrid(), and rot_equid_cylind_egrid_grid_area().

◆ rlon0

real(kind=kd) ip_rot_equid_cylind_egrid_mod::rlon0
private

◆ slat

real(kind=kd) ip_rot_equid_cylind_egrid_mod::slat
private

◆ slat0

real(kind=kd) ip_rot_equid_cylind_egrid_mod::slat0
private

◆ slatr

real(kind=kd) ip_rot_equid_cylind_egrid_mod::slatr
private

Sine of the rotated latitude.

Definition at line 74 of file ip_rot_equid_cylind_egrid_mod.F90.

Referenced by gdswzd_rot_equid_cylind_egrid(), and rot_equid_cylind_egrid_vect_rot().