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 Polar stereographic 11# grib 1 -> 2 12constant gridDefinitionTemplateNumber = 20; 13 14unsigned[2] Nx : dump; 15alias Ni = Nx; 16alias numberOfPointsAlongXAxis = Nx; 17alias geography.Nx=Nx; 18 19unsigned[2] Ny : dump; 20alias Nj = Ny; 21alias numberOfPointsAlongYAxis = Ny; 22alias geography.Ny=Ny; 23 24signed[3] latitudeOfFirstGridPoint : edition_specific ; 25meta geography.latitudeOfFirstGridPointInDegrees scale(latitudeOfFirstGridPoint,oneConstant,grib1divider,truncateDegrees) : dump; 26alias La1 = latitudeOfFirstGridPoint; 27 28signed[3] longitudeOfFirstGridPoint : edition_specific; 29meta geography.longitudeOfFirstGridPointInDegrees scale(longitudeOfFirstGridPoint,oneConstant,grib1divider,truncateDegrees) : dump; 30alias Lo1 = longitudeOfFirstGridPoint; 31 32include "grib1/resolution_flags.def"; 33 34# LoV - orientation of the grid; i.e. the longitude value of the meridian which is parallel to the Y-axis 35signed[3] orientationOfTheGrid ; 36meta geography.orientationOfTheGridInDegrees scale(orientationOfTheGrid,oneConstant,grib1divider,truncateDegrees) : dump; 37alias LoV = orientationOfTheGrid ; 38 39# Dx - X-direction grid length 40unsigned[3] DxInMetres : dump; 41alias xDirectionGridLengthInMetres=DxInMetres; 42alias Dx=DxInMetres; 43alias geography.DxInMetres=DxInMetres; 44alias Di = DxInMetres; 45 46# Dy - Y-direction grid length 47unsigned[3] DyInMetres : dump; 48alias yDirectionGridLengthInMetres=DyInMetres; 49alias Dy = DyInMetres; 50alias Dj = DyInMetres; 51alias geography.DyInMetres=DyInMetres; 52 53constant latitudeWhereDxAndDyAreSpecifiedInDegrees=60; 54constant LaDInDegrees=60; 55alias geography.LaDInDegrees=LaDInDegrees; 56 57# Projection centre flag 58unsigned[1] projectionCentreFlag : dump ; 59alias projectionCenterFlag=projectionCentreFlag; 60# Note our flagbit numbers go from 7 to 0, while WMO convention is from 1 to 8 61# If bit 1 is 0, then the North Pole is on the projection plane 62# If bit 1 is 1, then the South Pole is on the projection plane 63flagbit southPoleOnProjectionPlane(projectionCentreFlag,7) : dump; # WMO bit 1 64 65 66# for change_scanning_direction 67alias yFirst=latitudeOfFirstGridPointInDegrees; 68alias xFirst=longitudeOfFirstGridPointInDegrees; 69 70include "grib1/scanning_mode.def"; 71 72pad padding_grid5_1(4); 73 74meta numberOfDataPoints number_of_points(Nx,Ny,PLPresent,pl) : dump; 75alias numberOfPoints=numberOfDataPoints; 76meta numberOfValues number_of_values(values,bitsPerValue,numberOfDataPoints,bitmapPresent,bitmap,numberOfCodedValues) : dump; 77#alias ls.valuesCount=numberOfValues; 78 79iterator polar_stereographic(numberOfPoints,missingValue,values, 80 radius,Nx,Ny, 81 latitudeOfFirstGridPointInDegrees,longitudeOfFirstGridPointInDegrees, 82 southPoleOnProjectionPlane, 83 orientationOfTheGridInDegrees, 84 Dx,Dy, 85 iScansNegatively, 86 jScansPositively, 87 jPointsAreConsecutive, 88 alternativeRowScanning); 89 90