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