eccodes/definitions/grib2/template.3.20.def

86 lines
3.4 KiB
Modula-2

# (C) Copyright 2005- ECMWF.
# TEMPLATE 3.20, Polar stereographic projection
include "grib2/template.3.shape_of_the_earth.def"
constant isGridded = true;
# Nx - number of points along X-axis
unsigned[4] Nx : dump;
alias Ni = Nx;
alias numberOfPointsAlongXAxis = Nx;
alias geography.Nx=Nx;
# Ny - number of points along Y-axis
unsigned[4] Ny : dump;
alias Nj = Ny;
alias numberOfPointsAlongYAxis = Ny;
alias numberOfPointsAlongAMeridian = Nj;
alias geography.Ny=Ny;
# La1 - latitude of first grid point
signed[4] latitudeOfFirstGridPoint : edition_specific ;
meta geography.latitudeOfFirstGridPointInDegrees scale(latitudeOfFirstGridPoint,oneConstant,grib2divider,truncateDegrees) : dump;
alias La1 = latitudeOfFirstGridPoint;
# Lo1 - longitude of first grid point
unsigned[4] longitudeOfFirstGridPoint : edition_specific;
meta geography.longitudeOfFirstGridPointInDegrees scale(longitudeOfFirstGridPoint,oneConstant,grib2divider,truncateDegrees) : dump;
alias Lo1 = longitudeOfFirstGridPoint;
# Resolution and component flag
flags[1] resolutionAndComponentFlags 'grib2/tables/[tablesVersion]/3.3.table' : dump;
# LaD - Latitude where Dx and Dy are specified
signed[4] LaD : edition_specific;
alias latitudeWhereDxAndDyAreSpecified=LaD;
meta geography.LaDInDegrees scale(LaD,oneConstant,grib2divider,truncateDegrees) : dump;
alias latitudeWhereDxAndDyAreSpecifiedInDegrees=LaDInDegrees;
# LoV - orientation of the grid
# LoV is the longitude value of the meridian which is parallel to the y-axis (or columns of the grid)
# along which latitude increases as the y-coordinate increases
signed[4] orientationOfTheGrid : edition_specific;
alias LoV = orientationOfTheGrid ;
meta geography.orientationOfTheGridInDegrees scale(orientationOfTheGrid,oneConstant,grib2divider,truncateDegrees) : dump;
# Dx - X-direction grid length
# Grid length is in units of 10-3 m at the latitude specified by LaD
unsigned[4] Dx : edition_specific;
meta geography.DxInMetres scale(Dx,one,thousand,truncateDegrees) : dump;
alias xDirectionGridLength=Dx;
# Dy - Y-direction grid length
# Grid length is in units of 10-3 m at the latitude specified by LaD
unsigned[4] Dy : edition_specific;
meta geography.DyInMetres scale(Dy,one,thousand,truncateDegrees) : dump;
alias yDirectionGridLength=Dy;
# Projection centre flag
flags[1] projectionCentreFlag 'grib2/tables/[tablesVersion]/3.5.table' : dump;
# Note our flagbit numbers go from 7 to 0, while WMO convention is from 1 to 8
# If bit 1 is 0, then the North Pole is on the projection plane
# If bit 1 is 1, then the South Pole is on the projection plane
flagbit southPoleOnProjectionPlane(projectionCentreFlag,7) : dump; # WMO bit 1
include "grib2/template.3.scanning_mode.def"
iterator polar_stereographic(numberOfPoints,missingValue,values,
radius,Nx,Ny,
latitudeOfFirstGridPointInDegrees,longitudeOfFirstGridPointInDegrees,
southPoleOnProjectionPlane,
orientationOfTheGridInDegrees,
LaDInDegrees,
DxInMetres,DyInMetres,
iScansNegatively, jScansPositively,
jPointsAreConsecutive, alternativeRowScanning);
nearest polar_stereographic(values,radius,Nx,Ny);
meta latLonValues latlonvalues(values);
alias latitudeLongitudeValues=latLonValues;
meta latitudes latitudes(values,0);
meta longitudes longitudes(values,0);
meta distinctLatitudes latitudes(values,1);
meta distinctLongitudes longitudes(values,1);