starting newly from 2.14.1 + related updated

This commit is contained in:
Richard Mladek 2019-10-23 16:36:45 +01:00
parent fbdd8b14bc
commit e43ba9d8bf
9 changed files with 314 additions and 1 deletions

View File

@ -0,0 +1 @@
1 CRRA Copernicus regional reanalysis

View File

@ -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)

View File

@ -0,0 +1,4 @@
# CARRA/CERRA local
codetable[2] suiteName "grib2/crra_suiteName.table" : dump;
alias crraSuiteID = suiteName;

View File

@ -0,0 +1,5 @@
# Copyright 2005-2019 ECMWF.
# Copernicus regional reanalysis (CARRA/CERRA)
constant marsExpver = 'prod';
include "grib2/products_crra.def"

View File

@ -0,0 +1,5 @@
# Copyright 2005-2019 ECMWF.
# Copernicus regional reanalysis (CARRA/CERRA)
constant marsExpver = 'test';
include "grib2/products_crra.def"

View File

@ -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;

View File

@ -9,6 +9,8 @@
7 7 S2S test products
8 8 Uncertainties in Ensembles of Regional ReAnalyses project (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
255 255 Missing

134
definitions/section.1.def Normal file
View File

@ -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;}
}

45
definitions/section.2.def Normal file
View File

@ -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;