1# Copyright 2005-2018 ECMWF. 2# 3# This software is licensed under the terms of the Apache Licence Version 2.0 4# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 5# 6# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by 7# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. 8# 9 10# GRID DEFINITION quasi-regular latitude/longitude grid 11# grib 1 -> 2 12constant gridDefinitionTemplateNumber = 0; 13 14unsigned[2] NRj : can_be_missing,dump; 15 16unsigned[2] numberOfPointsAlongAMeridian : can_be_missing,dump; 17alias Nj = numberOfPointsAlongAMeridian; 18 19# Latitudes and Longitudes of the first and the last points 20# Resolution and component flags 21include "grib1/grid_first_last_resandcomp.def"; 22 23unsigned[2] iDirectionIncrement : can_be_missing; 24unsigned[2] jDirectionIncrement : can_be_missing; 25alias Dj = jDirectionIncrement; 26alias Di = iDirectionIncrement; 27 28# for change_scanning_direction 29alias yFirst=latitudeOfFirstGridPointInDegrees; 30alias yLast=latitudeOfLastGridPointInDegrees; 31alias xFirst=longitudeOfFirstGridPointInDegrees; 32alias xLast=longitudeOfLastGridPointInDegrees; 33 34include "grib1/scanning_mode.def"; 35 36# Lar1 - latitude of first grid point of reference domain 37signed[3] Lar1 : edition_specific; 38meta geography.Lar1InDegrees scale(latitudeOfFirstGridPointOfReferenceDomain,oneConstant,grib1divider,truncateDegrees) :dump; 39alias La1 = Lar1; 40 41# Lor1 - longitude of first grid point of reference domain 42signed[3] Lor1 : edition_specific; 43meta geography.Lor1InDegrees scale(longitudeOfFirstGridPointOfReferenceDomain,oneConstant,grib1divider,truncateDegrees) : dump; 44alias Lo1 = Lor1; 45 46# Lar2 - latitude of last grid point of reference domain 47signed[3] Lar2 : edition_specific; 48meta geography.Lar2InDegrees scale(latitudeOfLastGridPointOfReferenceDomain,oneConstant,grib1divider,truncateDegrees) : dump; 49alias La2 = Lar2; 50 51# Lor2 - longitude of last grid point of reference domain 52signed[3] Lor2 ; 53meta geography.Lor2InDegrees scale(longitudeOfLastGridPointOfReferenceDomain,oneConstant,grib1divider,truncateDegrees) : dump; 54alias Lo2 = Lor2; 55 56meta geography.jDirectionIncrementInDegrees latlon_increment(ijDirectionIncrementGiven,jDirectionIncrement, 57 jScansPositively, 58 latitudeOfFirstGridPointInDegrees,latitudeOfLastGridPointInDegrees, 59 numberOfPointsAlongAMeridian,oneConstant,grib1divider,0) : can_be_missing,dump; 60#transient DjInMicrodegrees = times(jDirectionIncrement,thousand); 61 62meta geography.iDirectionIncrementInDegrees latlon_increment(ijDirectionIncrementGiven,iDirectionIncrement, 63 iScansPositively, 64 longitudeOfFirstGridPointInDegrees,longitudeOfLastGridPointInDegrees, 65 Ni,oneConstant,grib1divider,1) : can_be_missing,dump; 66#meta DiInMicrodegrees times(iDirectionIncrement,thousand); 67 68alias latitudeFirstInDegrees = latitudeOfFirstGridPointInDegrees; 69alias longitudeFirstInDegrees = longitudeOfFirstGridPointInDegrees; 70 71alias latitudeLastInDegrees = latitudeOfLastGridPointInDegrees; 72alias longitudeLastInDegrees = longitudeOfLastGridPointInDegrees; 73alias DiInDegrees = iDirectionIncrementInDegrees; 74alias DjInDegrees = jDirectionIncrementInDegrees; 75 76meta numberOfDataPoints number_of_points(Ni,Nj,PLPresent,pl) : dump; 77alias numberOfPoints=numberOfDataPoints; 78meta numberOfValues number_of_values(values,bitsPerValue,numberOfDataPoints,bitmapPresent,bitmap,numberOfCodedValues) : dump; 79#alias ls.valuesCount=numberOfValues; 80 81if(missing(Ni)){ 82 iterator latlon_reduced(numberOfPoints,missingValue,values, 83 latitudeFirstInDegrees,longitudeFirstInDegrees, 84 latitudeLastInDegrees,loLast, 85 Nj,DjInDegrees,pl); 86 nearest latlon_reduced(values,radius,Nj,pl); 87} else { 88 iterator latlon(numberOfPoints,missingValue,values,longitudeFirstInDegrees,iInc , 89 Ni,Nj,iScansNegatively , 90 latitudeFirstInDegrees,DjInDegrees,jScansPositively ); 91 nearest regular(values,radius,Ni,Nj); 92} 93meta latLonValues latlonvalues(values); 94alias latitudeLongitudeValues=latLonValues; 95meta latitudes latitudes(values,0); 96meta longitudes longitudes(values,0); 97meta distinctLatitudes latitudes(values,1); 98meta distinctLongitudes longitudes(values,1); 99 100# END 1/grid_definition.latitude_longitude_grid ---------------------------------------------------------------------- 101