# (C) Copyright 2005- ECMWF. 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);