mirror of https://github.com/ecmwf/eccodes.git
85 lines
2.4 KiB
Modula-2
85 lines
2.4 KiB
Modula-2
# Copyright 2005-2017 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.
|
|
#
|
|
transient timeRangeIndicator=0 : no_copy,hidden;
|
|
|
|
position offsetSection4;
|
|
section_length[4] section4Length ;
|
|
meta section4Pointer section_pointer(offsetSection4,section4Length,4);
|
|
|
|
unsigned[1] numberOfSection = 4:read_only;
|
|
|
|
unsigned[2] NV : dump ;
|
|
alias numberOfVerticalCoordinateValues=NV ;
|
|
alias numberOfCoordinatesValues=NV;
|
|
# For table 4.5, code 150 Generalized vertical height coordinate
|
|
alias numberOfVerticalGridDescriptors=NV ;
|
|
|
|
# Product Definition Template Number
|
|
|
|
transient neitherPresent = 0;
|
|
|
|
if (centre==7 || centre==46) {
|
|
alias disableGrib1LocalSection=one;
|
|
}
|
|
|
|
codetable[2] productDefinitionTemplateNumber('4.0.table',masterDir,localDir) : dump;
|
|
|
|
if (section2Used == 1) {
|
|
when (new()) {
|
|
set_nofail productDefinitionTemplateNumber=productDefinitionTemplateNumberInternal;
|
|
}
|
|
}
|
|
transient genVertHeightCoords = 0;
|
|
template productDefinition "grib2/template.4.[productDefinitionTemplateNumber:l].def" ;
|
|
|
|
if (defined(marsStream) && defined(marsType)) {
|
|
template_nofail marsKeywords1 "mars/grib.[marsStream:s].[marsType:s].def";
|
|
}
|
|
|
|
template parameters "grib2/parameters.def";
|
|
|
|
# Detect if this is for Generalized vertical height coordinates
|
|
if (defined(typeOfFirstFixedSurface)) {
|
|
if (typeOfFirstFixedSurface == 150) {
|
|
transient genVertHeightCoords = 1;
|
|
transient PVPresent = 0;
|
|
}
|
|
}
|
|
|
|
if (genVertHeightCoords) {
|
|
# Generalized vertical height coordinate case
|
|
ieeefloat nlev : dump ;
|
|
ieeefloat numberOfVGridUsed : dump;
|
|
byte[16] uuidOfVGrid : dump;
|
|
|
|
alias numberOfVerticalCoordinateValues = nlev;
|
|
alias numberOfCoordinatesValues = nlev;
|
|
alias numberOfVerticalGridDescriptors = nlev;
|
|
}
|
|
else {
|
|
if (NV == 0){
|
|
transient PVPresent = 0;
|
|
} else {
|
|
transient PVPresent = 1;
|
|
}
|
|
# See GRIB-547
|
|
if (PVPresent || NV>0){
|
|
ieeefloat pv[numberOfCoordinatesValues] : dump;
|
|
alias vertical.pv=pv;
|
|
}
|
|
|
|
# GRIB-534: To easily remove vertical coordinates, set this key to 1
|
|
concept_nofail deletePV(unknown) {
|
|
"1" = { PVPresent=0; NV=0; }
|
|
}
|
|
|
|
}
|
|
|
|
meta md5Section4 md5(offsetSection4,section4Length);
|