# (C) Copyright 2005- ECMWF. transient timeRangeIndicator=0 : no_copy,hidden; transient is_localtime=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=true; } concept datasetForLocal(unknown) { "tigge" = {productionStatusOfProcessedData=4;} "tigge" = {productionStatusOfProcessedData=5;} "s2s" = {productionStatusOfProcessedData=6;} "s2s" = {productionStatusOfProcessedData=7;} "cerise" = {marsClass="ci";} "era6" = {marsClass="e6";} # for ERA6 parameters with constituentType "hydro" = {marsClass="ce";} # EFAS/GLOFAS "hydro" = {marsClass="ul";} # ULYSSES "fire" = {marsClass="gw";} # Global Wildfire awareness system "uerra" = {productionStatusOfProcessedData=8;} # UERRA "uerra" = {productionStatusOfProcessedData=9;} "uerra" = {productionStatusOfProcessedData=10;} # CARRA/CERRA "uerra" = {productionStatusOfProcessedData=11;} "destine" = {productionStatusOfProcessedData=12;} # Destination Earth "destine" = {productionStatusOfProcessedData=13;} "unknown" = { dummy=1; } } if (!(datasetForLocal is "unknown")) { constant conceptsDir2 = "grib2/localConcepts/[datasetForLocal]": hidden; constant conceptsDir1 = "grib2": hidden; } codetable[2] productDefinitionTemplateNumber('4.0.table',masterDir,localDir) : dump; if (section2Used == 1) { when (new()) { set_nofail productDefinitionTemplateNumber=productDefinitionTemplateNumberInternal; } } transient genVertHeightCoords = 0; if (productDefinitionTemplateNumber >= 32768) { template productDefinition "grib2/local/[centreForLocal]/template.4.[productDefinitionTemplateNumber:l].def"; } else { 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);