mirror of https://github.com/ecmwf/eccodes.git
240 lines
6.9 KiB
Modula-2
240 lines
6.9 KiB
Modula-2
# Copyright 2005-2014 ECMWF.
|
|
#
|
|
# This software is licensed under the terms of the Apache Licence Version 2.0
|
|
# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
|
|
#
|
|
# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
|
|
# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
|
|
#
|
|
|
|
# START 1/local.98.4 ----------------------------------------------------------------------
|
|
# LOCAL 98 4
|
|
#
|
|
# localDefinitionTemplate_004
|
|
# ---------------------------
|
|
#
|
|
# Description Octet Code Ksec1 Count
|
|
# ----------- ----- ---- ----- -----
|
|
#localDefinitionNumber 41 I1 37 -
|
|
#class 42 I1 38 -
|
|
#type 43 I1 39 -
|
|
#stream 44 I2 40 -
|
|
#experimentVersionNumber 46 A4 41 -
|
|
#! if stream == 1090
|
|
#if1 - IF_EQ 1090 stream
|
|
#ensembleMemberNumber 50 I2 42 -
|
|
#setToZeroForStream1090Unpacking n/a PAD 43 1
|
|
#endif1 - ENDIF if1
|
|
#! if stream != 1090
|
|
#if2 - IF_NEQ 1090 stream
|
|
#ensembleMemberNumber 50 I1 42 -
|
|
#setToZero 51 PAD 43 1
|
|
#endif2 - ENDIF if2
|
|
#flagShowingPostAuxiliaryArrayInUse 52 F1 - 1
|
|
#systemNumber 53 I1 44 -
|
|
#methodNumber 54 I1 45 -
|
|
#! Coordinate structure definition
|
|
#spaceUnitFlag 55 I1 46 -
|
|
#verticalCoordinateDefinition 56 I1 47 -
|
|
#horizontalCoordinateDefinition 57 I1 48 -
|
|
#timeUnitFlag 58 I1 49 -
|
|
#timeCoordinateDefinition 59 I1 50 -
|
|
#! Position definition: mixed coordinates
|
|
#mixedCoordinateFieldFlag 60 I1 51 -
|
|
#coordinate1Flag 61 I1 52 -
|
|
#averagingFlag 62 I1 53 -
|
|
#positionOfLevel1 63 S4 54 -
|
|
#positionOfLevel2 67 S4 55 -
|
|
#coordinate2Flag 71 I1 56 -
|
|
#averagingFlag 72 I1 57 -
|
|
#positionOfLevel1 73 S4 58 -
|
|
#positionOfLevel2 77 S4 59 -
|
|
#! Data grid definitions
|
|
#coordinate3Flag 81 I1 60 -
|
|
#coordinate4Flag 82 I1 61 -
|
|
#coordinate4OfFirstGridPoint 83 S4 62 -
|
|
#coordinate3OfFirstGridPoint 87 S4 63 -
|
|
#coordinate4OfLastGridPoint 91 S4 64 -
|
|
#coordinate3OfLastGridPoint 95 S4 65 -
|
|
#iIncrement 99 S4 66 -
|
|
#jIncrement 103 S4 67 -
|
|
#flagForIrregularGridCoordinateList 107 I1 68 -
|
|
#flagForNormalOrStaggeredGrid 108 I1 69 -
|
|
#! Auxiliary information
|
|
#flagForAnyFurtherInformation 109 I1 70 -
|
|
#numberInHorizontalCoordinates 110 I1 71 -
|
|
#numberInMixedCoordinateDefinition 111 I2 72 -
|
|
#numberInTheGridCoordinateList 113 I2 73 -
|
|
#numberInTheAuxiliaryArray 115 I2 74 -
|
|
#! Horizontal coordinate definition
|
|
#horizontalCoordinateSupplement - LP_S4 - numberInHorizontalCoordinates
|
|
#! Mixed coordinate definition
|
|
#mixedCoordinateDefinition - LP_S4 - numberInMixedCoordinateDefinition
|
|
#! Grid coordinate list
|
|
#gridCoordinateList - LP_S4 - numberInTheGridCoordinateList
|
|
#! Auxiliary array
|
|
#auxiliaryArray - LP_I4 - numberInTheAuxiliaryArray
|
|
#! Post-auxiliary array
|
|
#if3 - IF_EQ 1 flagShowingPostAuxiliaryArrayInUse
|
|
#sizeOfPostAuxiliaryArray - I4 - -
|
|
#arrayValues - LP_I4M1 - sizeOfPostAuxiliaryArray
|
|
#endif3 - ENDIF if3
|
|
##
|
|
|
|
constant GRIBEXSection1Problem = 0 ;
|
|
|
|
template mars_labeling "grib1/mars_labeling.def";
|
|
transient localFlag=1 : hidden ;
|
|
|
|
constant oceanStream = 1090;
|
|
|
|
if(marsStream == oceanStream)
|
|
{
|
|
unsigned[2] perturbationNumber : dump ;
|
|
}
|
|
|
|
if(marsStream != oceanStream)
|
|
{
|
|
unsigned[1] perturbationNumber : dump ;
|
|
pad padding_loc4_2(1);
|
|
}
|
|
|
|
unsigned[1] flagShowingPostAuxiliaryArrayInUse;
|
|
# 'grib1/ocean.1.table';
|
|
|
|
unsigned[1] systemNumber : dump ;
|
|
alias system=systemNumber;
|
|
|
|
unsigned[1] methodNumber : dump ;
|
|
|
|
|
|
#
|
|
# Coordinate structure definition
|
|
#
|
|
|
|
unsigned[1] spaceUnitFlag : dump ;
|
|
|
|
unsigned[1] verticalCoordinateDefinition : dump ;
|
|
|
|
unsigned[1] horizontalCoordinateDefinition : dump ;
|
|
|
|
unsigned[1] timeUnitFlag : dump ;
|
|
|
|
unsigned[1] timeCoordinateDefinition : dump ;
|
|
|
|
|
|
#
|
|
# Position definition: mixed coordinates
|
|
#
|
|
|
|
unsigned[1] mixedCoordinateFieldFlag : dump ;
|
|
|
|
unsigned[1] coordinate1Flag : dump ;
|
|
|
|
unsigned[1] averaging1Flag : dump ;
|
|
|
|
signed[4] coordinate1Start : dump ;
|
|
|
|
signed[4] coordinate1End : dump ;
|
|
|
|
unsigned[1] coordinate2Flag : dump ;
|
|
|
|
unsigned[1] averaging2Flag : dump ;
|
|
|
|
signed[4] coordinate2Start : dump ;
|
|
|
|
signed[4] coordinate2End : dump ;
|
|
|
|
#
|
|
# Data grid definitions
|
|
#
|
|
|
|
unsigned[1] coordinate3Flag : dump ;
|
|
|
|
unsigned[1] coordinate4Flag : dump ;
|
|
|
|
signed[4] coordinate4OfFirstGridPoint : dump;
|
|
|
|
signed[4] coordinate3OfFirstGridPoint : dump ;
|
|
|
|
signed[4] coordinate4OfLastGridPoint : dump;
|
|
|
|
signed[4] coordinate3OfLastGridPoint : dump ;
|
|
|
|
signed[4] iIncrement : dump ;
|
|
|
|
signed[4] jIncrement : dump;
|
|
|
|
flags[1] flagForIrregularGridCoordinateList 'grib1/ocean.1.table' : dump;
|
|
|
|
flags[1] flagForNormalOrStaggeredGrid 'grib1/ocean.1.table' : dump;
|
|
|
|
#
|
|
# Auxiliary information
|
|
#
|
|
|
|
flags[1] flagForAnyFurtherInformation 'grib1/ocean.1.table' : dump;
|
|
|
|
unsigned[1] numberInHorizontalCoordinates : dump;
|
|
|
|
unsigned[2] numberInMixedCoordinateDefinition : dump;
|
|
|
|
unsigned[2] numberInTheGridCoordinateList : dump;
|
|
|
|
unsigned[2] numberInTheAuxiliaryArray : dump ;
|
|
|
|
#
|
|
# Horizontal coordinate definition
|
|
#
|
|
|
|
|
|
unsigned[4] horizontalCoordinateSupplement[numberInHorizontalCoordinates] : dump;
|
|
|
|
#
|
|
# Mixed coordinate definition
|
|
#
|
|
|
|
|
|
unsigned[4] mixedCoordinateDefinition[numberInMixedCoordinateDefinition] : dump;
|
|
|
|
#
|
|
# Grid coordinate list
|
|
#
|
|
if (numberInTheGridCoordinateList>0) {
|
|
|
|
signed[4] gridCoordinate[numberInTheGridCoordinateList] : dump;
|
|
}
|
|
|
|
#
|
|
# Auxiliary array
|
|
#
|
|
|
|
unsigned[4] auxiliary[numberInTheAuxiliaryArray] : dump;
|
|
|
|
#
|
|
# Post-auxiliary array
|
|
#
|
|
|
|
constant postAuxiliaryArrayPresent = 1;
|
|
|
|
if (flagShowingPostAuxiliaryArrayInUse == postAuxiliaryArrayPresent){
|
|
unsigned[4] sizeOfPostAuxiliaryArrayPlusOne : dump;
|
|
meta sizeOfPostAuxiliaryArray evaluate(sizeOfPostAuxiliaryArrayPlusOne - 1);
|
|
if (sizeOfPostAuxiliaryArray>0) {
|
|
unsigned[4] postAuxiliary[sizeOfPostAuxiliaryArray] : dump;
|
|
|
|
if (sizeOfPostAuxiliaryArray>3) {
|
|
meta referenceDate element(postAuxiliary,3);
|
|
}
|
|
} else {
|
|
transient referenceDate=0;
|
|
}
|
|
|
|
}
|
|
alias hdate = dataDate;
|
|
|
|
|
|
|
|
template local_use "grib1/mars_labeling.4.def";
|
|
# END 1/local.98.4 ----------------------------------------------------------------------
|