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