2020-01-28 14:32:34 +00:00
|
|
|
# (C) Copyright 2005- ECMWF.
|
2019-04-25 12:26:15 +00:00
|
|
|
|
2013-03-25 12:04:10 +00:00
|
|
|
transient timeRangeIndicator=0 : no_copy,hidden;
|
2021-03-09 16:10:09 +00:00
|
|
|
transient is_localtime=0 : no_copy,hidden;
|
2013-03-25 12:04:10 +00:00
|
|
|
|
|
|
|
position offsetSection4;
|
2014-06-21 21:28:40 +00:00
|
|
|
section_length[4] section4Length ;
|
2013-03-25 12:04:10 +00:00
|
|
|
meta section4Pointer section_pointer(offsetSection4,section4Length,4);
|
|
|
|
|
|
|
|
unsigned[1] numberOfSection = 4:read_only;
|
|
|
|
|
2021-02-06 13:07:35 +00:00
|
|
|
unsigned[2] NV : dump ;
|
2013-03-25 12:04:10 +00:00
|
|
|
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) {
|
2023-11-22 10:51:00 +00:00
|
|
|
alias disableGrib1LocalSection=true;
|
2013-03-25 12:04:10 +00:00
|
|
|
}
|
|
|
|
|
2021-06-23 15:27:29 +00:00
|
|
|
concept datasetForLocal(unknown) {
|
2024-11-18 12:57:03 +00:00
|
|
|
"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;}
|
2024-11-15 10:28:51 +00:00
|
|
|
"destinegen1" = {productionStatusOfProcessedData=12;generation=1;} # DestinE ClimateDT Generation 1
|
|
|
|
"destinegen1" = {productionStatusOfProcessedData=13;generation=1;}
|
2024-11-18 12:57:03 +00:00
|
|
|
"era" = {marsClass="e2";}
|
|
|
|
"era" = {marsClass="e4";}
|
|
|
|
"era" = {marsClass="ea";}
|
|
|
|
"era" = {marsClass="ei";}
|
|
|
|
"era" = {marsClass="em";}
|
|
|
|
"era" = {marsClass="ep";}
|
|
|
|
"era" = {marsClass="er";}
|
|
|
|
"era" = {marsClass="et";}
|
|
|
|
"era" = {marsClass="l5";}
|
|
|
|
"nextgems" = {marsClass="ng";}
|
|
|
|
"unknown" = { dummy=1; }
|
2021-06-23 15:27:29 +00:00
|
|
|
}
|
|
|
|
|
2024-07-16 10:55:07 +00:00
|
|
|
if (datasetForLocal isnot "unknown") {
|
2021-09-21 14:28:31 +00:00
|
|
|
constant conceptsDir2 = "grib2/localConcepts/[datasetForLocal]": hidden;
|
|
|
|
constant conceptsDir1 = "grib2": hidden;
|
2021-06-23 15:27:29 +00:00
|
|
|
}
|
|
|
|
|
2013-03-25 12:04:10 +00:00
|
|
|
codetable[2] productDefinitionTemplateNumber('4.0.table',masterDir,localDir) : dump;
|
|
|
|
|
|
|
|
if (section2Used == 1) {
|
|
|
|
when (new()) {
|
|
|
|
set_nofail productDefinitionTemplateNumber=productDefinitionTemplateNumberInternal;
|
|
|
|
}
|
|
|
|
}
|
2014-03-25 11:12:01 +00:00
|
|
|
transient genVertHeightCoords = 0;
|
2023-03-31 16:22:39 +00:00
|
|
|
|
|
|
|
if (productDefinitionTemplateNumber >= 32768) {
|
|
|
|
template productDefinition "grib2/local/[centreForLocal]/template.4.[productDefinitionTemplateNumber:l].def";
|
|
|
|
} else {
|
2024-08-08 08:59:28 +00:00
|
|
|
template productDefinition "grib2/templates/template.4.[productDefinitionTemplateNumber:l].def";
|
2023-03-31 16:22:39 +00:00
|
|
|
}
|
2013-03-25 12:04:10 +00:00
|
|
|
|
|
|
|
if (defined(marsStream) && defined(marsType)) {
|
2015-11-23 13:52:38 +00:00
|
|
|
template_nofail marsKeywords1 "mars/grib.[marsStream:s].[marsType:s].def";
|
2013-03-25 12:04:10 +00:00
|
|
|
}
|
|
|
|
|
2024-08-10 12:18:12 +00:00
|
|
|
concept productDefinitionTemplateName(unknown, "productDefinitionTemplateConcept.def", conceptsDir2,conceptsDir1): no_copy;
|
|
|
|
|
2013-03-25 12:04:10 +00:00
|
|
|
template parameters "grib2/parameters.def";
|
|
|
|
|
2024-06-21 12:00:21 +00:00
|
|
|
# Hook for local extras
|
|
|
|
template_nofail extras "grib2/local/[centre]/section4_extras.def";
|
2024-01-26 08:47:49 +00:00
|
|
|
|
2013-03-25 12:04:10 +00:00
|
|
|
# Detect if this is for Generalized vertical height coordinates
|
|
|
|
if (defined(typeOfFirstFixedSurface)) {
|
|
|
|
if (typeOfFirstFixedSurface == 150) {
|
|
|
|
transient genVertHeightCoords = 1;
|
2013-05-08 10:53:09 +00:00
|
|
|
transient PVPresent = 0;
|
2013-03-25 12:04:10 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (genVertHeightCoords) {
|
|
|
|
# Generalized vertical height coordinate case
|
2021-02-06 13:07:35 +00:00
|
|
|
ieeefloat nlev : dump ;
|
2014-03-25 11:12:01 +00:00
|
|
|
ieeefloat numberOfVGridUsed : dump;
|
|
|
|
byte[16] uuidOfVGrid : dump;
|
|
|
|
|
2013-12-05 15:51:59 +00:00
|
|
|
alias numberOfVerticalCoordinateValues = nlev;
|
|
|
|
alias numberOfCoordinatesValues = nlev;
|
|
|
|
alias numberOfVerticalGridDescriptors = nlev;
|
2013-03-25 12:04:10 +00:00
|
|
|
}
|
|
|
|
else {
|
2013-12-05 15:51:59 +00:00
|
|
|
if (NV == 0){
|
2013-03-25 12:04:10 +00:00
|
|
|
transient PVPresent = 0;
|
|
|
|
} else {
|
|
|
|
transient PVPresent = 1;
|
|
|
|
}
|
2014-07-01 13:58:06 +00:00
|
|
|
# See GRIB-547
|
|
|
|
if (PVPresent || NV>0){
|
2013-03-25 12:04:10 +00:00
|
|
|
ieeefloat pv[numberOfCoordinatesValues] : dump;
|
|
|
|
alias vertical.pv=pv;
|
|
|
|
}
|
2014-09-29 16:36:13 +00:00
|
|
|
|
|
|
|
# GRIB-534: To easily remove vertical coordinates, set this key to 1
|
|
|
|
concept_nofail deletePV(unknown) {
|
|
|
|
"1" = { PVPresent=0; NV=0; }
|
|
|
|
}
|
2013-03-25 12:04:10 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
meta md5Section4 md5(offsetSection4,section4Length);
|