mirror of https://github.com/ecmwf/eccodes.git
76 lines
2.8 KiB
Modula-2
76 lines
2.8 KiB
Modula-2
# (C) Copyright 2005- ECMWF.
|
|
|
|
include "grib2/template.3.grid.def"
|
|
|
|
# Di - i direction increment
|
|
unsigned[4] iDirectionIncrement : can_be_missing,edition_specific;
|
|
alias Di = iDirectionIncrement;
|
|
alias Dx = iDirectionIncrement;
|
|
|
|
# Dj - j direction increment
|
|
unsigned[4] jDirectionIncrement : can_be_missing,edition_specific;
|
|
alias Dj = jDirectionIncrement;
|
|
alias Dy = jDirectionIncrement;
|
|
|
|
include "grib2/template.3.scanning_mode.def"
|
|
|
|
meta g2grid g2grid(
|
|
latitudeOfFirstGridPoint,
|
|
longitudeOfFirstGridPoint,
|
|
latitudeOfLastGridPoint,
|
|
longitudeOfLastGridPoint,
|
|
iDirectionIncrement,
|
|
jDirectionIncrement,
|
|
basicAngleOfTheInitialProductionDomain,
|
|
subdivisionsOfBasicAngle
|
|
);
|
|
|
|
meta geography.latitudeOfFirstGridPointInDegrees g2latlon(g2grid,0) : dump;
|
|
meta geography.longitudeOfFirstGridPointInDegrees g2latlon(g2grid,1) : dump;
|
|
meta geography.latitudeOfLastGridPointInDegrees g2latlon(g2grid,2) : dump;
|
|
meta geography.longitudeOfLastGridPointInDegrees g2latlon(g2grid,3) : dump;
|
|
|
|
alias xFirst=longitudeOfFirstGridPointInDegrees;
|
|
alias yFirst=latitudeOfFirstGridPointInDegrees;
|
|
alias xLast=longitudeOfLastGridPointInDegrees;
|
|
alias yLast=latitudeOfLastGridPointInDegrees;
|
|
|
|
meta geography.iDirectionIncrementInDegrees g2latlon(g2grid,4,
|
|
iDirectionIncrementGiven) : can_be_missing,dump;
|
|
|
|
meta geography.jDirectionIncrementInDegrees g2latlon(g2grid,5,
|
|
jDirectionIncrementGiven) : can_be_missing,dump;
|
|
|
|
alias latitudeFirstInDegrees = latitudeOfFirstGridPointInDegrees;
|
|
alias longitudeFirstInDegrees = longitudeOfFirstGridPointInDegrees;
|
|
alias latitudeLastInDegrees = latitudeOfLastGridPointInDegrees;
|
|
alias longitudeLastInDegrees = longitudeOfLastGridPointInDegrees;
|
|
alias DiInDegrees = iDirectionIncrementInDegrees;
|
|
alias DxInDegrees = iDirectionIncrementInDegrees;
|
|
alias DjInDegrees = jDirectionIncrementInDegrees;
|
|
alias DyInDegrees = jDirectionIncrementInDegrees;
|
|
|
|
_if ( missing(Ni) && PLPresent == 1 ) {
|
|
iterator latlon_reduced(numberOfPoints,missingValue,values,
|
|
latitudeFirstInDegrees,longitudeFirstInDegrees,
|
|
latitudeLastInDegrees,longitudeLastInDegrees,
|
|
Nj,DjInDegrees,pl);
|
|
nearest latlon_reduced(values,radius,Nj,pl,longitudeFirstInDegrees,longitudeLastInDegrees);
|
|
} else {
|
|
transient iteratorDisableUnrotate = 0 : hidden; # ECC-808
|
|
iterator latlon(numberOfPoints,missingValue,values,
|
|
longitudeFirstInDegrees,DiInDegrees ,
|
|
Ni,Nj,iScansNegatively,
|
|
latitudeFirstInDegrees, DjInDegrees,
|
|
jScansPositively, jPointsAreConsecutive,
|
|
isRotatedGrid, angleOfRotation,
|
|
latitudeOfSouthernPoleInDegrees,longitudeOfSouthernPoleInDegrees);
|
|
nearest regular(values,radius,Ni,Nj);
|
|
}
|
|
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);
|