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
10unsigned[2] Nx  : dump;
11alias Ni =  Nx;
12alias numberOfPointsAlongXAxis =  Nx;
13alias geography.Nx=Nx;
14
15unsigned[2] Ny  : dump;
16alias Nj =  Ny;
17alias numberOfPointsAlongYAxis =  Ny;
18alias geography.Ny=Ny;
19
20#  La1 - latitude of first grid point
21signed[3] latitudeOfFirstGridPoint :  edition_specific;
22meta geography.latitudeOfFirstGridPointInDegrees
23      scale(latitudeOfFirstGridPoint,oneConstant,grib1divider,truncateDegrees) : dump;
24alias La1 = latitudeOfFirstGridPoint;
25alias La1InDegrees=latitudeOfFirstGridPointInDegrees;
26#meta latitudeOfFirstGridPointInMicrodegrees times(latitudeOfFirstGridPoint,thousand);
27
28
29#  Lo1 - longitude of first grid point
30signed[3] longitudeOfFirstGridPoint  : edition_specific;
31meta geography.longitudeOfFirstGridPointInDegrees
32      scale(longitudeOfFirstGridPoint,oneConstant,grib1divider,truncateDegrees) : dump;
33alias Lo1 = longitudeOfFirstGridPoint;
34alias Lo1InDegrees = longitudeOfFirstGridPointInDegrees;
35#meta longitudeOfFirstGridPointInMicrodegrees times(longitudeOfFirstGridPoint,thousand);
36
37#  Resolution and component flags
38include "grib1/resolution_flags.def";
39
40#  LoV - orientation of the grid; i.e.  the east longitude value of the meridian which is parallel to the Y-axis
41signed[3] LoV : edition_specific  ;
42meta geography.LoVInDegrees
43    scale(LoV,oneConstant,grib1divider,truncateDegrees) : dump;
44alias orientationOfTheGrid = LoV;
45alias orientationOfTheGridInDegrees = LoVInDegrees;
46
47#  Dx - X-direction grid length
48unsigned[3] DxInMetres  : dump;
49alias xDirectionGridLength=DxInMetres;
50alias geography.DxInMetres=DxInMetres ;
51alias Dx = DxInMetres;
52alias Di = DxInMetres;
53
54
55#  Dy - Y-direction grid length
56unsigned[3] DyInMetres  : dump;
57alias yDirectionGridLength=DyInMetres;
58alias geography.DyInMetres=DyInMetres;
59alias Dy= DyInMetres;
60alias Dj = DyInMetres;
61
62
63unsigned[1] projectionCentreFlag  : dump;
64# Also add the old spelling  of "centre" for backward compatibility
65alias projectionCenterFlag=projectionCentreFlag;
66
67# for change_scanning_direction
68alias yFirst=latitudeOfFirstGridPointInDegrees;
69alias xFirst=longitudeOfFirstGridPointInDegrees;
70
71include "grib1/scanning_mode.def";
72
73#  Latin 1 - first latitude from the pole at which the secant cone cuts the sphere
74signed[3] Latin1 : edition_specific;
75meta geography.Latin1InDegrees scale(Latin1,oneConstant,grib1divider,truncateDegrees) : dump;
76alias firstLatitude=Latin1;
77alias firstLatitudeInDegrees=Latin1InDegrees;
78
79# GRIB Edition 1 does not have the LaD parameter so we use Latin1 instead
80constant LaDInDegrees = Latin1InDegrees : dump;
81alias geography.LaDInDegrees=LaDInDegrees;
82
83#  Latin 2 - second latitude from the pole at which the secant cone cuts the sphere
84signed[3] Latin2 :edition_specific;
85alias secondLatitude=Latin2;
86meta geography.Latin2InDegrees scale(Latin2,oneConstant,grib1divider,truncateDegrees) : dump;
87alias secondLatitudeInDegrees=Latin2InDegrees;
88
89signed[3] latitudeOfSouthernPole : no_copy;
90meta  geography.latitudeOfSouthernPoleInDegrees
91        scale(latitudeOfSouthernPole,oneConstant,grib1divider,truncateDegrees) : dump;
92
93signed[3] longitudeOfSouthernPole : no_copy;
94meta  geography.longitudeOfSouthernPoleInDegrees
95        scale(longitudeOfSouthernPole,oneConstant,grib1divider,truncateDegrees) : dump;
96
97meta numberOfDataPoints number_of_points(Nx,Ny,PLPresent,pl) : dump;
98alias numberOfPoints=numberOfDataPoints;
99meta numberOfValues number_of_values(values,bitsPerValue,numberOfDataPoints,
100                                    bitmapPresent,bitmap,numberOfCodedValues) : dump;
101#alias ls.valuesCount=numberOfValues;
102
103iterator lambert_conformal(numberOfPoints,missingValue,values,
104          radius,Nx,Ny,
105          LoVInDegrees,LaDInDegrees,
106          Latin1InDegrees,Latin2InDegrees,
107          latitudeOfFirstGridPointInDegrees,longitudeOfFirstGridPointInDegrees,
108          Dx,Dy,
109          iScansNegatively,
110          jScansPositively,
111          jPointsAreConsecutive,
112          alternativeRowScanning);
113
114
115meta latLonValues latlonvalues(values);
116alias latitudeLongitudeValues=latLonValues;
117meta latitudes latitudes(values,0);
118meta longitudes longitudes(values,0);
119meta distinctLatitudes latitudes(values,1);
120meta distinctLongitudes longitudes(values,1);
121
122nearest lambert_conformal(values,radius,Nx,Ny);
123
124pad padding_grid3_1(2);
125
126# END   1/grid_definition.lambert_conformal ----------------------------------------------------------------------
127
128