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] Ni : can_be_missing,dump;
11alias numberOfPointsAlongAParallel= Ni ;
12alias Nx =Ni;
13
14signed[2] Nj : dump;
15alias numberOfPointsAlongAMeridian=Nj;
16alias Ny=Nj;
17
18# Latitudes and Longitudes of the first and the last points
19# Resolution and component flags
20include "grib1/grid_first_last_resandcomp.def";
21
22#  Di - i direction increment
23unsigned[2] iDirectionIncrement : can_be_missing,dump,edition_specific;
24meta geography.iDirectionIncrementInDegrees scale(iDirectionIncrement,oneConstant,grib1divider,truncateDegrees) : can_be_missing,dump;
25alias Di = iDirectionIncrement;
26
27#  N - number of parallels between a pole and the equator
28unsigned[2] N : dump ;
29alias numberOfParallelsBetweenAPoleAndTheEquator=N;
30alias geography.N=N;
31
32# for change_scanning_direction
33alias yFirst=latitudeOfFirstGridPointInDegrees;
34alias yLast=latitudeOfLastGridPointInDegrees;
35alias xFirst=longitudeOfFirstGridPointInDegrees;
36alias xLast=longitudeOfLastGridPointInDegrees;
37
38include "grib1/scanning_mode.def";
39
40pad padding_grid4_1(4);
41
42alias latitudeFirstInDegrees  = latitudeOfFirstGridPointInDegrees;
43alias longitudeFirstInDegrees = longitudeOfFirstGridPointInDegrees;
44alias latitudeLastInDegrees   = latitudeOfLastGridPointInDegrees;
45alias longitudeLastInDegrees  = longitudeOfLastGridPointInDegrees;
46alias DiInDegrees = iDirectionIncrementInDegrees;
47
48meta global global_gaussian(N,Ni,iDirectionIncrement,
49                            latitudeOfFirstGridPoint,
50                            longitudeOfFirstGridPoint,
51                            latitudeOfLastGridPoint,
52                            longitudeOfLastGridPoint,
53                            PLPresent,pl) = 0 : dump;
54
55meta numberOfDataPoints number_of_points_gaussian(Ni,Nj,PLPresent,pl,
56  N,
57  latitudeOfFirstGridPointInDegrees,longitudeOfFirstGridPointInDegrees,
58  latitudeOfLastGridPointInDegrees,longitudeOfLastGridPointInDegrees) : dump;
59
60alias numberOfPoints=numberOfDataPoints;
61# alias numberOfExpectedPoints=numberOfDataPoints;
62meta numberOfValues number_of_values(values,bitsPerValue,numberOfDataPoints,bitmapPresent,bitmap,numberOfCodedValues) : dump;
63#alias ls.valuesCount=numberOfValues;
64
65if(missing(Ni)){
66   iterator gaussian_reduced(numberOfPoints,missingValue,values,
67       latitudeOfFirstGridPointInDegrees,longitudeOfFirstGridPointInDegrees,
68       latitudeOfLastGridPointInDegrees,longitudeOfLastGridPointInDegrees,
69       N,pl,Nj);
70   nearest reduced(values,radius,Nj,pl);
71   box reduced_gaussian(latitudeOfFirstGridPointInDegrees,longitudeOfFirstGridPointInDegrees,
72          latitudeOfLastGridPointInDegrees,longitudeOfLastGridPointInDegrees,
73		  N,pl);
74} else {
75   iterator   gaussian(numberOfPoints,missingValue,values,longitudeFirstInDegrees,
76            DiInDegrees  ,Ni,Nj,iScansNegatively ,
77            latitudeFirstInDegrees, latitudeLastInDegrees,
78            N,jScansPositively);
79   nearest regular(values,radius,Ni,Nj);
80 #  box regular_gaussian(latitudeOfFirstGridPointInDegrees,longitudeOfFirstGridPointInDegrees,
81 #         latitudeOfLastGridPointInDegrees,longitudeOfLastGridPointInDegrees,
82#		  DiInDegrees,Ni,N,iScansNegatively,jScansPositively);
83}
84
85meta latLonValues latlonvalues(values);
86alias latitudeLongitudeValues=latLonValues;
87meta latitudes latitudes(values,0);
88meta longitudes longitudes(values,0);
89meta distinctLatitudes latitudes(values,1);
90meta distinctLongitudes longitudes(values,1);
91
92meta isOctahedral octahedral_gaussian(N, Ni, PLPresent, pl) = 0 : no_copy,dump;
93
94meta gaussianGridName gaussian_grid_name(N, Ni, isOctahedral);
95alias gridName=gaussianGridName;
96
97