mirror of https://github.com/ecmwf/eccodes.git
starting newly from 2.14.1 + related updated
This commit is contained in:
parent
fbdd8b14bc
commit
e43ba9d8bf
|
@ -0,0 +1 @@
|
||||||
|
1 CRRA Copernicus regional reanalysis
|
|
@ -0,0 +1,7 @@
|
||||||
|
# CARRA/CERRA suite names
|
||||||
|
0 unknown Unknown
|
||||||
|
1 enmi-haro-cae HARMONIE-AROME reanalysis by MetNorway on CARRA-East domain (CARRA project)
|
||||||
|
2 enmi-haro-caw HARMONIE-AROME reanalysis by MetNorway on CARRA-West domain (CARRA project)
|
||||||
|
3 enmi-haro-par HARMONIE-AROME reanalysis by MetNorway on Pan-Arctic domain (CARRA project)
|
||||||
|
4 eswi-hald-ecx HARMONIE-ALADIN reanalysis by SMHI on EURO-CORDEX domain (CERRA project)
|
||||||
|
5 lfpw-mesu-ecx MESCAN-SURFEX surface reanalysis by Meteo-France on EURO-CORDEX domain (CERRA project)
|
|
@ -0,0 +1,4 @@
|
||||||
|
# CARRA/CERRA local
|
||||||
|
|
||||||
|
codetable[2] suiteName "grib2/crra_suiteName.table" : dump;
|
||||||
|
alias crraSuiteID = suiteName;
|
|
@ -0,0 +1,5 @@
|
||||||
|
# Copyright 2005-2019 ECMWF.
|
||||||
|
|
||||||
|
# Copernicus regional reanalysis (CARRA/CERRA)
|
||||||
|
constant marsExpver = 'prod';
|
||||||
|
include "grib2/products_crra.def"
|
|
@ -0,0 +1,5 @@
|
||||||
|
# Copyright 2005-2019 ECMWF.
|
||||||
|
|
||||||
|
# Copernicus regional reanalysis (CARRA/CERRA)
|
||||||
|
constant marsExpver = 'test';
|
||||||
|
include "grib2/products_crra.def"
|
|
@ -0,0 +1,110 @@
|
||||||
|
# Copyright 2005-2019 ECMWF.
|
||||||
|
|
||||||
|
# Copernicus regional reanalysis (CARRA/CERRA)
|
||||||
|
constant marsClass = 'rr';
|
||||||
|
|
||||||
|
alias tigge_short_name=shortName;
|
||||||
|
alias short_name=shortName;
|
||||||
|
alias parameter=paramId;
|
||||||
|
alias tigge_name=name;
|
||||||
|
|
||||||
|
alias parameter.paramId=paramId;
|
||||||
|
alias parameter.shortName=shortName;
|
||||||
|
alias parameter.units=units;
|
||||||
|
alias parameter.name=name;
|
||||||
|
|
||||||
|
# Special UERRA rule for level type 103 'Specified height level above ground (m)'
|
||||||
|
if(typeOfFirstFixedSurface == 103) {
|
||||||
|
# only the parameters above 10m
|
||||||
|
if (level > 10) {
|
||||||
|
constant heightLevelName = 'hl';
|
||||||
|
alias mars.levtype = heightLevelName;
|
||||||
|
# levelist was unaliased in template.4.horizontal.def so we must have it back
|
||||||
|
alias mars.levelist = level;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(typeOfFirstFixedSurface == 118) {
|
||||||
|
constant levTypeName = 'ml';
|
||||||
|
alias mars.levtype = levTypeName;
|
||||||
|
}
|
||||||
|
|
||||||
|
# See GRIB-871 and ECC-854
|
||||||
|
if(typeOfFirstFixedSurface == 151 && typeOfSecondFixedSurface == 151) {
|
||||||
|
alias level = bottomLevel;
|
||||||
|
}
|
||||||
|
|
||||||
|
alias mars.expver = marsExpver;
|
||||||
|
alias mars.class = marsClass;
|
||||||
|
alias mars.param = paramId;
|
||||||
|
alias mars.origin = centre;
|
||||||
|
|
||||||
|
if (section2Used == 1) {
|
||||||
|
constant marsLamModel = 'lam';
|
||||||
|
alias mars.model = marsLamModel; # model redefined. It is not 'glob'
|
||||||
|
alias mars.origin = crraSuiteID; # origin is the suiteName
|
||||||
|
unalias mars.domain; # No mars domain needed
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# See GRIB-911 re typeOfProcessedData values in UERRA
|
||||||
|
concept marsType {
|
||||||
|
|
||||||
|
fc = {
|
||||||
|
typeOfProcessedData = 1;
|
||||||
|
}
|
||||||
|
"9" = {
|
||||||
|
typeOfProcessedData = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
an = {
|
||||||
|
typeOfProcessedData = 0;
|
||||||
|
}
|
||||||
|
"2" = {
|
||||||
|
typeOfProcessedData = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
# See ECC-456. Special rule for Swedish data
|
||||||
|
# oi is Optimal Interpolation
|
||||||
|
oi = {
|
||||||
|
centre = 82;
|
||||||
|
typeOfGeneratingProcess = 0;
|
||||||
|
generatingProcessIdentifier = 50;
|
||||||
|
}
|
||||||
|
"4" = {
|
||||||
|
centre = 82;
|
||||||
|
typeOfGeneratingProcess = 0;
|
||||||
|
generatingProcessIdentifier = 50;
|
||||||
|
}
|
||||||
|
|
||||||
|
"default" = {
|
||||||
|
dummyc = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# See GRIB-205 re no_copy
|
||||||
|
# Cannot use typeOfProcessedData for stream. See GRIB-911
|
||||||
|
concept marsStream {
|
||||||
|
|
||||||
|
oper = {
|
||||||
|
productDefinitionTemplateNumber = 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
oper = {
|
||||||
|
productDefinitionTemplateNumber = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
enda = {
|
||||||
|
productDefinitionTemplateNumber = 11;
|
||||||
|
}
|
||||||
|
|
||||||
|
enda = {
|
||||||
|
productDefinitionTemplateNumber = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
"default" = {
|
||||||
|
dummyc = 0;
|
||||||
|
}
|
||||||
|
} : no_copy;
|
||||||
|
|
||||||
|
alias mars.stream = marsStream;
|
||||||
|
alias mars.type = marsType;
|
|
@ -9,6 +9,8 @@
|
||||||
7 7 S2S test products
|
7 7 S2S test products
|
||||||
8 8 Uncertainties in Ensembles of Regional ReAnalyses project (UERRA)
|
8 8 Uncertainties in Ensembles of Regional ReAnalyses project (UERRA)
|
||||||
9 9 Uncertainties in Ensembles of Regional ReAnalyses project test (UERRA)
|
9 9 Uncertainties in Ensembles of Regional ReAnalyses project test (UERRA)
|
||||||
# 10-191 Reserved
|
10 10 Copernicus regional reanalysis (CARRA/CERRA)
|
||||||
|
11 11 Copernicus regional reanalysis test (CARRA/CERRA)
|
||||||
|
# 12-191 Reserved
|
||||||
# 192-254 Reserved for local use
|
# 192-254 Reserved for local use
|
||||||
255 255 Missing
|
255 255 Missing
|
||||||
|
|
|
@ -0,0 +1,134 @@
|
||||||
|
# Copyright 2005-2019 ECMWF.
|
||||||
|
|
||||||
|
position offsetSection1;
|
||||||
|
section_length[4] section1Length ;
|
||||||
|
meta section1Pointer section_pointer(offsetSection1,section1Length,1);
|
||||||
|
|
||||||
|
unsigned[1] numberOfSection = 1 :read_only;
|
||||||
|
|
||||||
|
codetable[2] centre 'common/c-11.table' : dump,string_type;
|
||||||
|
alias identificationOfOriginatingGeneratingCentre=centre;
|
||||||
|
meta centreDescription codetable_title(centre);
|
||||||
|
|
||||||
|
alias parameter.centre=centre;
|
||||||
|
alias ls.centre=centre;
|
||||||
|
alias originatingCentre=centre;
|
||||||
|
|
||||||
|
unsigned[2] subCentre : dump;
|
||||||
|
|
||||||
|
_if (subCentre==98 ) {
|
||||||
|
alias centreForLocal=subCentre;
|
||||||
|
} else {
|
||||||
|
alias centreForLocal=centre;
|
||||||
|
}
|
||||||
|
|
||||||
|
codetable[1] tablesVersion 'grib2/tables/1.0.table' = tablesVersionLatest : edition_specific;
|
||||||
|
alias gribMasterTablesVersionNumber=tablesVersion;
|
||||||
|
|
||||||
|
transient masterDir="grib2/tables/[tablesVersion]";
|
||||||
|
if (tablesVersion > tablesVersionLatest) {
|
||||||
|
transient masterDir="grib2/tables/[tablesVersionLatest]";
|
||||||
|
}
|
||||||
|
when (tablesVersion!=255) {
|
||||||
|
set masterDir="grib2/tables/[tablesVersion]";
|
||||||
|
} else {
|
||||||
|
set masterDir="grib2/tables/4";
|
||||||
|
}
|
||||||
|
|
||||||
|
codetable[1] localTablesVersion 'grib2/tables/local/[centreForLocal]/1.1.table' ;
|
||||||
|
alias versionNumberOfGribLocalTables=localTablesVersion;
|
||||||
|
|
||||||
|
transient localDir="";
|
||||||
|
if (localTablesVersion != 0 and localTablesVersion != 255) {
|
||||||
|
transient localDir="grib2/tables/local/[centre]/[localTablesVersion]";
|
||||||
|
}
|
||||||
|
|
||||||
|
# Significance of Reference Time
|
||||||
|
codetable[1] significanceOfReferenceTime ('1.2.table',masterDir,localDir) = 1 : dump;
|
||||||
|
|
||||||
|
# Year
|
||||||
|
# (4 digits)
|
||||||
|
unsigned[2] year ;
|
||||||
|
|
||||||
|
# Month
|
||||||
|
unsigned[1] month ;
|
||||||
|
|
||||||
|
# Day
|
||||||
|
unsigned[1] day ;
|
||||||
|
|
||||||
|
# Hour
|
||||||
|
unsigned[1] hour ;
|
||||||
|
|
||||||
|
# Minute
|
||||||
|
unsigned[1] minute ;
|
||||||
|
|
||||||
|
# Second
|
||||||
|
unsigned[1] second ;
|
||||||
|
|
||||||
|
meta dataDate g2date(year,month,day) : dump;
|
||||||
|
alias mars.date = dataDate;
|
||||||
|
alias ls.date = dataDate;
|
||||||
|
|
||||||
|
meta julianDay julian_day(dataDate,hour,minute,second) : edition_specific;
|
||||||
|
|
||||||
|
meta dataTime time(hour,minute,second) : dump;
|
||||||
|
alias mars.time = dataTime;
|
||||||
|
|
||||||
|
# Production status of processed data in this GRIB message
|
||||||
|
codetable[1] productionStatusOfProcessedData ('1.3.table',masterDir,localDir) : dump;
|
||||||
|
|
||||||
|
# Type of processed data in this GRIB message
|
||||||
|
codetable[1] typeOfProcessedData ('1.4.table',masterDir,localDir) = 255 : dump,string_type,no_fail;
|
||||||
|
|
||||||
|
alias ls.dataType=typeOfProcessedData;
|
||||||
|
|
||||||
|
meta md5Section1 md5(offsetSection1,section1Length);
|
||||||
|
|
||||||
|
meta selectStepTemplateInterval select_step_template(productDefinitionTemplateNumber,0); # 0 -> not instant
|
||||||
|
meta selectStepTemplateInstant select_step_template(productDefinitionTemplateNumber,1); # 1 -> instant
|
||||||
|
|
||||||
|
transient stepTypeInternal="instant" : hidden,no_copy;
|
||||||
|
|
||||||
|
concept stepType {
|
||||||
|
"instant" = {selectStepTemplateInstant=1; stepTypeInternal="instant";}
|
||||||
|
"avg" = {selectStepTemplateInterval=1; stepTypeInternal="avg";}
|
||||||
|
"avgd" = {selectStepTemplateInterval=1; stepTypeInternal="avgd";}
|
||||||
|
"accum" = {selectStepTemplateInterval=1; stepTypeInternal="accum";}
|
||||||
|
"max" = {selectStepTemplateInterval=1; stepTypeInternal="max";}
|
||||||
|
"min" = {selectStepTemplateInterval=1; stepTypeInternal="min";}
|
||||||
|
"diff" = {selectStepTemplateInterval=1; stepTypeInternal="diff";}
|
||||||
|
"sdiff" = {selectStepTemplateInterval=1; stepTypeInternal="sdiff";}
|
||||||
|
"rms" = {selectStepTemplateInterval=1; stepTypeInternal="rms";}
|
||||||
|
"sd" = {selectStepTemplateInterval=1; stepTypeInternal="sd";}
|
||||||
|
"cov" = {selectStepTemplateInterval=1; stepTypeInternal="cov";}
|
||||||
|
"ratio" = {selectStepTemplateInterval=1; stepTypeInternal="ratio";}
|
||||||
|
"stdanom" = {selectStepTemplateInterval=1; stepTypeInternal="stdanom";}
|
||||||
|
"sum" = {selectStepTemplateInterval=1; stepTypeInternal="sum";}
|
||||||
|
}
|
||||||
|
|
||||||
|
# 0=atmospheric chemical constituents
|
||||||
|
# 1=atmospheric chemical constituents based on a distribution function
|
||||||
|
meta is_chemical g2_chemical(productDefinitionTemplateNumber, stepType, 0);
|
||||||
|
meta is_chemical_distfn g2_chemical(productDefinitionTemplateNumber, stepType, 1);
|
||||||
|
|
||||||
|
# 0=aerosol
|
||||||
|
# 1=optical properties of aerosol
|
||||||
|
meta is_aerosol g2_aerosol(productDefinitionTemplateNumber, stepType, 0);
|
||||||
|
meta is_aerosol_optical g2_aerosol(productDefinitionTemplateNumber, stepType, 1);
|
||||||
|
|
||||||
|
transient setCalendarId = 0 ;
|
||||||
|
transient deleteCalendarId = 0 ;
|
||||||
|
alias calendarIdPresent = zero;
|
||||||
|
if ( ((section1Length > 21) or setCalendarId > 0) and deleteCalendarId == 0) {
|
||||||
|
alias calendarIdPresent = present;
|
||||||
|
codetable[2] calendarIdentificationTemplateNumber ('1.5.table',masterDir,localDir) : dump,string_type,no_fail;
|
||||||
|
template calendarIdentification "grib2/template.1.[calendarIdentificationTemplateNumber:l].def";
|
||||||
|
}
|
||||||
|
|
||||||
|
concept is_uerra(zero) {
|
||||||
|
'1' = {productionStatusOfProcessedData=10;}
|
||||||
|
'1' = {productionStatusOfProcessedData=11;}
|
||||||
|
'1' = {productionStatusOfProcessedData=9;}
|
||||||
|
'1' = {productionStatusOfProcessedData=8;}
|
||||||
|
'0' = {dummy=1;}
|
||||||
|
}
|
|
@ -0,0 +1,45 @@
|
||||||
|
# Copyright 2005-2019 ECMWF.
|
||||||
|
|
||||||
|
position offsetSection2;
|
||||||
|
section_length[4] section2Length ;
|
||||||
|
|
||||||
|
meta section2Pointer section_pointer(offsetSection2,section2Length,2);
|
||||||
|
unsigned[1] numberOfSection = 2 :read_only;
|
||||||
|
|
||||||
|
alias tiggeSuiteID = zero;
|
||||||
|
|
||||||
|
# This is a workaround for TIGGE: allow creation of an 'empty' section 2
|
||||||
|
# so we can create bit-identical grib 2 files for backward compatibility
|
||||||
|
transient addEmptySection2 = 0;
|
||||||
|
|
||||||
|
if ( addEmptySection2 == 0 ) {
|
||||||
|
if ( grib2LocalSectionPresent==1 or ( section2Length>5 or new() ) ) {
|
||||||
|
alias section2Used=one;
|
||||||
|
|
||||||
|
if(productionStatusOfProcessedData == 4 || productionStatusOfProcessedData == 5) {
|
||||||
|
# This is TIGGE-LAM because of the productionStatusOfProcessedData and the non-empty section 2
|
||||||
|
codetable[2] tiggeLocalVersion 'grib2/tiggeLocalVersion.table' = 1 : dump;
|
||||||
|
template tiggeSection "grib2/local.tigge.[tiggeLocalVersion:l].def";
|
||||||
|
}
|
||||||
|
|
||||||
|
if(productionStatusOfProcessedData == 10 || productionStatusOfProcessedData == 11) {
|
||||||
|
# crra = Copernicus Regional ReAnalysis
|
||||||
|
codetable[2] crraLocalVersion 'grib2/crraLocalVersion.table' = 1 : dump;
|
||||||
|
template crraSection "grib2/local.crra.[crraLocalVersion:l].def";
|
||||||
|
}
|
||||||
|
|
||||||
|
codetable[2] grib2LocalSectionNumber 'grib2/grib2LocalSectionNumber.[centreForLocal:l].table' = 1 : dump;
|
||||||
|
|
||||||
|
if (grib2LocalSectionNumber!=0) {
|
||||||
|
template_nofail local "grib2/local.[centreForLocal:l].def";
|
||||||
|
} else {
|
||||||
|
constant deleteLocalDefinition=1;
|
||||||
|
}
|
||||||
|
position offsetAfterCentreLocalSection;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
section_padding section2Padding : read_only;
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue