Merge branch 'develop' into feature/mtg2_paramtype

This commit is contained in:
Sebastien Villaume 2024-06-07 14:54:25 +01:00
commit c4970ab95c
671 changed files with 27150 additions and 36664 deletions

View File

@ -82,7 +82,7 @@ jobs:
- private-downstream-ci
- downstream-ci-hpc
- private-downstream-ci-hpc
if: always() && ${{ !github.event.pull_request.head.repo.fork && github.event.action != 'labeled' || github.event.label.name == 'approved-for-ci' }}
if: ${{ always() && !github.event.pull_request.head.repo.fork && github.event.action != 'labeled' || github.event.label.name == 'approved-for-ci' }}
steps:
- name: Trigger Teams notification
uses: ecmwf-actions/notify-teams@v1

3
.gitignore vendored
View File

@ -17,6 +17,8 @@ grib_api.pc
grib_api_f90.pc
*.analyzerinfo
*.snalyzerinfo
tags
src/convert_*.sh
# compiled source #
###################
@ -72,3 +74,4 @@ data/bufr/*test
build/
*.back
trash

View File

@ -20,7 +20,8 @@ unsigned[1] localTablesVersionNumber : dump;
transient typicalCentury=21;
unsigned[1] typicalYearOfCentury : dump;
transient typicalYear = (typicalCentury - 1) * 100 + typicalYearOfCentury : no_copy;
# ECC-1840: Use the 'evaluate' accessor so typicalYear is updated if user changes typicalCentury
meta typicalYear evaluate( (typicalCentury - 1) * 100 + typicalYearOfCentury ) : no_copy;
unsigned[1] typicalMonth : dump;
unsigned[1] typicalDay : dump;

View File

@ -23,6 +23,7 @@
22 22 ACMAD
23 23 Mozambique (NMC)
24 fapr Pretoria (RSMC)
25 25 La Reunion (RSMC)
26 26 Khabarovsk (RSMC)
28 vabb New Delhi (IMD)
29 dems New Delhi (NCMRWF)
@ -58,12 +59,14 @@
64 64 Honolulu
65 65 Darwin (RSMC)
67 67 Melbourne (RSMC)
# 68 Reserved
69 nzkl Wellington (RSMC/RAFC)
71 71 Nadi (RSMC)
72 72 Singapore
73 73 Malaysia (NMC)
74 egrr U.K. Met Office - Exeter
76 76 Moscow (RSMC/RAFC)
# 77 Reserved
78 edzw Offenbach (RSMC)
80 cnmc Rome (RSMC)
82 eswi Norrkoping
@ -93,15 +96,68 @@
107 107 Uganda (NMC)
108 108 United Republic of Tanzania (NMC)
109 109 Zimbabwe (NMC)
110 110 Hong-Kong
110 110 Hong Kong
111 111 Afghanistan (NMC)
112 112 Bahrain (NMC)
113 113 Bangladesh (NMC)
114 114 Bhutan (NMC)
115 115 Cambodia (NMC)
116 116 Democratic People's Republic of Korea (NMC)
117 117 Islamic Republic of Iran (NMC)
118 118 Iraq (NMC)
119 119 Kazakhstan (NMC)
120 120 Kuwait (NMC)
121 121 Kyrgyzstan (NMC)
122 122 Lao People's Democratic Republic (NMC)
123 123 "Macao China"
124 124 Maldives (NMC)
125 125 Myanmar (NMC)
126 126 Nepal (NMC)
127 127 Oman (NMC)
128 128 Pakistan (NMC)
129 129 Qatar (NMC)
130 130 Yemen (NMC)
131 131 Sri Lanka (NMC)
132 132 Tajikistan (NMC)
133 133 Turkmenistan (NMC)
134 134 United Arab Emirates (NMC)
135 135 Uzbekistan (NMC)
136 136 Viet Nam (NMC)
# 137-139 Reserved for other centres
140 140 Bolivia (Plurinational State of) (NMC)
141 141 Guyana (NMC)
142 142 Paraguay (NMC)
143 143 Suriname (NMC)
144 144 Uruguay (NMC)
145 145 French Guiana
146 146 Brazilian Navy Hydrographic Centre
147 147 National Commission on Space Activities (CONAE) - Argentina
148 148 Brazilian Department of Airspace Control - DECEA
# 149 Reserved for other centres
150 150 Antigua and Barbuda (NMC)
151 151 Bahamas (NMC)
152 152 Barbados (NMC)
153 153 Belize (NMC)
154 154 British Caribbean Territories Centre
155 155 San Jose
156 156 Cuba (NMC)
157 157 Dominica (NMC)
158 158 Dominican Republic (NMC)
159 159 El Salvador (NMC)
160 160 US NOAA/NESDIS
161 161 US NOAA Office of Oceanic and Atmospheric Research
162 162 Guatemala (NMC)
163 163 Haiti (NMC)
164 164 Honduras (NMC)
165 165 Jamaica (NMC)
166 166 Mexico
167 167 Curacao and Sint Maarten (NMC)
168 168 Nicaragua (NMC)
169 169 Panama (NMC)
170 170 Saint Lucia (NMC)
171 171 Trinidad and Tobago (NMC)
172 172 French Departments in RA IV
173 nasa US National Aeronautics and Space Administration (NASA)
174 174 Integrated Science Data Management/Marine Environmental Data Service (ISDM/MEDS - Canada)
175 175 University Corporation for Atmospheric Research (UCAR) - United States
176 176 Cooperative Institute for Meteorological Satellite Studies (CIMSS) - United States
@ -110,9 +166,23 @@
179 179 GeoOptics, Inc.
180 180 PlanetiQ
181 181 Atmospheric and Environmental Research (AER)
# 182-189 Reserved for other centres
190 190 Cook Islands (NMC)
191 191 French Polynesia (NMC)
192 192 Tonga (NMC)
193 193 Vanuatu (NMC)
194 194 Brunei Darussalam (NMC)
195 wiix Indonesia (NMC)
196 196 Kiribati (NMC)
197 197 Federated States of Micronesia (NMC)
198 198 New Caledonia (NMC)
199 199 Niue
200 200 Papua New Guinea (NMC)
201 201 Philippines (NMC)
202 202 Samoa (NMC)
203 203 Solomon Islands (NMC)
204 niwa National Institute of Water and Atmospheric Research (NIWA - New Zealand)
# 205-209 Reserved for other centres
210 210 Frascati (ESA/ESRIN)
211 211 Lannion
212 212 Lisboa
@ -139,18 +209,24 @@
233 eidb Dublin
234 234 Israel (NMC)
235 ingv INGV
236 236 Latvia (NMC)
237 237 Lebanon (NMC)
238 238 Lithuania (NMC)
239 crfc CERFAX
240 240 Malta (NMC)
241 241 Monaco
242 242 Romania (NMC)
243 243 Syrian Arab Republic (NMC)
244 vuwien VUWien
245 knmi KNMI
246 ifmk IfM-Kiel
247 hadc Hadley Centre
248 248 Montenegro (NMC)
249 249 Barcelona Dust Forecast Center
250 cosmo COnsortium for Small scale MOdelling (COSMO)
251 251 Meteorological Cooperation on Operational NWP (MetCoOp)
252 mpim Max Planck Institute for Meteorology (MPI-M)
253 253 Alfred Wegener Institute (AWI)
254 eums EUMETSAT Operation Centre
255 consensus Consensus
256 256 Angola (NMC)
@ -184,9 +260,10 @@
284 284 Sierra Leone (NMC)
285 285 Somalia (NMC)
286 286 Sudan (NMC)
287 287 Swaziland (NMC)
287 287 Eswatini (NMC)
288 288 Togo (NMC)
289 289 Zambia (NMC)
290 290 EUMETNET E-Profile
291 anso Alliance of International Science Organizations (Beijing, China)
292 ufz Helmholtz Centre for Environmental Research
293 293 University of Bremen
@ -196,4 +273,28 @@
297 297 The Nanjing Institute of Environmental Sciences (NIES)
298 298 Dynamic Meteorology Laboratory (LMD)
299 299 The Rutherford Appleton Laboratory (RAL)
300 300 Greek Atomic Energy Commission (Greece)
301 301 United Stated Environmental Protection Agency (USA)
302 302 Autralian Radiation Protection and Nuclear Safety (Australia)
303 303 Authority for Nuclear Safety and Radiation Protection (The Netherlands)
304 304 Autorite de Surete Nucleaire (France)
305 305 Bundesamt für Strahlenschutz (Germany)
306 306 National Commission for Nuclear Activities Control (Romania)
307 307 Consejo de Seguridad Nuclear (Spain)
308 308 Danish Emergency Management Agency (Denmark)
309 309 Norwegian Radiation Protection Agency (Norway)
310 310 Federal Agency for Nuclear Control (Belgium)
311 311 Institute of Radiation Protection and Dosimetry (Brazil)
312 312 National Inspectorate for Nuclear Safety and Radiation Protection (Italy)
313 313 Nuclear Regulatory Authority (Turkiye)
314 314 Nuclear Regulation Authority (Japan)
315 315 Nuclear Regulatory Agency (Bulgaria)
316 316 Ukrainian Radiation Protection Institute (Ukriane)
317 317 Health Canada Radio Protection Bureau (Canada)
318 318 Portuguese Society for Radiation Protection (Portugal)
319 319 Swedish Radiation Safety Authority (Sweden)
320 320 Radiation and Nuclear Safety Authority (Finland)
321 321 State Office for Nuclear Safety (Czechia)
322 322 Nuclear Regulation Authority (Slovakia)
# 323-65534 Reserved for other centres
65535 65535 Missing value

View File

@ -195,12 +195,12 @@
indicatorOfParameter = 28 ;
}
#Type of low vegetation
'(code table 4.234)' = {
'(Code table 4.234)' = {
table2Version = 128 ;
indicatorOfParameter = 29 ;
}
#Type of high vegetation
'(code table 4.234)' = {
'(Code table 4.234)' = {
table2Version = 128 ;
indicatorOfParameter = 30 ;
}
@ -265,7 +265,7 @@
indicatorOfParameter = 42 ;
}
#Soil type
'~' = {
'(Code table 4.213)' = {
table2Version = 128 ;
indicatorOfParameter = 43 ;
}

View File

@ -486,7 +486,7 @@
indicatorOfParameter = 253 ;
}
#Type of vegetation
'Code Table JMA-252' = {
'(Code table JMA-252)' = {
table2Version = 200 ;
indicatorOfParameter = 252 ;
}

View File

@ -4836,28 +4836,28 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean snow density
'mrsn' = {
'avg_rsn' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 61 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean low vegetation cover
'mcvl' = {
'avg_cvl' = {
discipline = 2 ;
parameterCategory = 0 ;
parameterNumber = 53 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean high vegetation cover
'mcvh' = {
'avg_cvh' = {
discipline = 2 ;
parameterCategory = 0 ;
parameterNumber = 54 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean sea ice area fraction
'mci' = {
'avg_ci' = {
discipline = 10 ;
parameterCategory = 2 ;
parameterNumber = 0 ;
@ -4865,7 +4865,7 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean sea surface temperature
'msst' = {
'avg_sst' = {
discipline = 10 ;
parameterCategory = 3 ;
parameterNumber = 0 ;
@ -4873,21 +4873,21 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean leaf area index, low vegetation
'mlai_lv' = {
'avg_lai_lv' = {
discipline = 2 ;
parameterCategory = 0 ;
parameterNumber = 55 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean leaf area index, high vegetation
'mlai_hv' = {
'avg_lai_hv' = {
discipline = 2 ;
parameterCategory = 0 ;
parameterNumber = 56 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean total column liquid water
'mtclw' = {
'avg_tclw' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 69 ;
@ -4896,7 +4896,7 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean total column cloud ice water
'mtciw' = {
'avg_tciw' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 70 ;
@ -4905,7 +4905,7 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean 2 metre specific humidity
'm2sh' = {
'avg_2sh' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 0 ;
@ -4916,7 +4916,7 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean lake mix-layer temperature
'mlmlt' = {
'avg_lmlt' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
@ -4925,7 +4925,7 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean lake mix-layer depth
'mlmld' = {
'avg_lmld' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 0 ;
@ -4934,7 +4934,7 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean 2 metre relative humidity
'm2r' = {
'avg_2r' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 1 ;
@ -4944,70 +4944,98 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean fraction of snow cover
'mfscov' = {
'avg_fscov' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 121 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean soil temperature
'msot' = {
'avg_sot' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 18 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean snow depth
'msde' = {
#Time-mean wind speed
'avg_ws' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 11 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean snow cover
'msnowc' = {
#Time-mean pressure
'avg_pres' = {
discipline = 0 ;
parameterCategory = 3 ;
parameterNumber = 0 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean potential vorticity
'avg_pv' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 14 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean specific rain water content
'avg_crwc' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 42 ;
parameterNumber = 85 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean specific snow water content
'avg_cswc' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 86 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean eta-coordinate vertical velocity
'avg_etadot' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 32 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean geopotential
'mz' = {
'avg_z' = {
discipline = 0 ;
parameterCategory = 3 ;
parameterNumber = 4 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean temperature
'mt' = {
'avg_t' = {
discipline = 0 ;
parameterCategory = 0 ;
parameterNumber = 0 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean U component of wind
'mu' = {
'avg_u' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 2 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean V component of wind
'mv' = {
'avg_v' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 3 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean specific humidity
'mq' = {
'avg_q' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 0 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean surface pressure
'msp' = {
'avg_sp' = {
discipline = 0 ;
parameterCategory = 3 ;
parameterNumber = 0 ;
@ -5015,14 +5043,14 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean vertical velocity
'mw' = {
'avg_w' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 8 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean total column water
'mtcw' = {
'avg_tcw' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 51 ;
@ -5031,7 +5059,7 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean total column vertically-integrated water vapour
'mtcwv' = {
'avg_tcwv' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 64 ;
@ -5039,30 +5067,44 @@
typeOfSecondFixedSurface = 8 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean vorticity (relative)
'avg_vo' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 12 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean mean sea level pressure
'mmsl' = {
'avg_msl' = {
discipline = 0 ;
parameterCategory = 3 ;
parameterNumber = 0 ;
typeOfFirstFixedSurface = 101 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean divergence
'avg_d' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 13 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean relative humidity
'mr' = {
'avg_r' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 1 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean boundary layer height
'mblh' = {
'avg_blh' = {
discipline = 0 ;
parameterCategory = 3 ;
parameterNumber = 18 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean 10 metre U wind component
'm10u' = {
'avg_10u' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 2 ;
@ -5072,7 +5114,7 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean 10 metre V wind component
'm10v' = {
'avg_10v' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 3 ;
@ -5082,7 +5124,7 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean 2 metre dewpoint temperature
'm2d' = {
'avg_2d' = {
discipline = 0 ;
parameterCategory = 0 ;
parameterNumber = 6 ;
@ -5091,15 +5133,22 @@
scaleFactorOfFirstFixedSurface = 0 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean ozone mass mixing ratio
'avg_o3' = {
discipline = 0 ;
parameterCategory = 14 ;
parameterNumber = 1 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean temperature of snow layer
'mtsn' = {
'avg_tsn' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 28 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean forecast surface roughness
'mfsr' = {
'avg_fsr' = {
discipline = 2 ;
parameterCategory = 0 ;
parameterNumber = 1 ;
@ -5107,13 +5156,138 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean forecast logarithm of surface roughness for heat
'mflsr' = {
'avg_flsr' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 54 ;
typeOfFirstFixedSurface = 1 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean specific cloud liquid water content
'avg_clwc' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 83 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean specific cloud ice water content
'avg_ciwc' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 84 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean fraction of cloud cover
'avg_cc' = {
discipline = 0 ;
parameterCategory = 6 ;
parameterNumber = 32 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean K index
'avg_kx' = {
discipline = 0 ;
parameterCategory = 7 ;
parameterNumber = 2 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean total totals index
'avg_totalx' = {
discipline = 0 ;
parameterCategory = 7 ;
parameterNumber = 4 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean clear air turbulence (CAT)
'avg_cat' = {
discipline = 0 ;
parameterCategory = 19 ;
parameterNumber = 29 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean discharge from rivers or streams
'avg_dis' = {
discipline = 1 ;
parameterCategory = 0 ;
parameterNumber = 7 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean soil wetness index (total layer)
'avg_swit' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 30 ;
typeOfFirstFixedSurface = 1 ;
typeOfSecondFixedSurface = 151 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean soil wetness index (root zone)
'avg_swir' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 30 ;
typeOfFirstFixedSurface = 1 ;
typeOfSecondFixedSurface = 167 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean soil wetness index(layer)
'avg_swil' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 30 ;
typeOfFirstFixedSurface = 151 ;
typeOfSecondFixedSurface = 151 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean floodplain depth
'avg_flddep' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 17 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean floodplain flooded fraction
'avg_fldffr' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 18 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean floodplain flooded area
'avg_fldfar' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 19 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean river fraction
'avg_rivfr' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 20 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean river area
'avg_rivar' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 21 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean fraction of river coverage plus river related flooding
'avg_rivcffr' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 22 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean area of river coverage plus river related flooding
'avg_rivcfar' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 23 ;
typeOfStatisticalProcessing = 0 ;
}
#Cross sectional area of flow in channel
'chcross' = {
discipline = 1 ;
@ -5174,26 +5348,6 @@
parameterCategory = 0 ;
parameterNumber = 15 ;
}
#Mean discharge in the last 6 hours
'dis06' = {
discipline = 1 ;
parameterCategory = 0 ;
parameterNumber = 7 ;
typeOfFirstFixedSurface = 1 ;
indicatorOfUnitForTimeRange = 1 ;
typeOfStatisticalProcessing = 0 ;
lengthOfTimeRange = 6 ;
}
#Mean discharge in the last 24 hours
'dis24' = {
discipline = 1 ;
parameterCategory = 0 ;
parameterNumber = 7 ;
typeOfFirstFixedSurface = 1 ;
indicatorOfUnitForTimeRange = 1 ;
typeOfStatisticalProcessing = 0 ;
lengthOfTimeRange = 24 ;
}
#Snow depth at elevation bands
'sd_elev' = {
discipline = 2 ;
@ -5246,6 +5400,48 @@
parameterCategory = 0 ;
parameterNumber = 19 ;
}
#Floodplain depth
'flddep' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 17 ;
}
#Floodplain flooded fraction
'fldffr' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 18 ;
}
#Floodplain flooded area
'fldfar' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 19 ;
}
#River fraction
'rivfr' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 20 ;
}
#River area
'rivar' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 21 ;
}
#Fraction of river coverage plus river related flooding
'rivcffr' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 22 ;
}
#Area of river coverage plus river related flooding
'rivcfar' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 23 ;
}
#Latitude
'lat' = {
discipline = 0 ;
@ -7203,6 +7399,48 @@
typeOfFirstFixedSurface = 1 ;
typeOfSecondFixedSurface = 8 ;
}
#Standardised Precipitation Index (SPI)
'spi' = {
discipline = 0 ;
parameterCategory = 22 ;
parameterNumber = 0 ;
}
#Standardised Precipitation Evapotranspiration Index (SPEI)
'spei' = {
discipline = 0 ;
parameterCategory = 22 ;
parameterNumber = 1 ;
}
#Standardised Streamflow Index (SSFI)
'ssfi' = {
discipline = 0 ;
parameterCategory = 22 ;
parameterNumber = 2 ;
}
#Standardised Reservoir Supply Index (SRSI)
'srsi' = {
discipline = 0 ;
parameterCategory = 22 ;
parameterNumber = 3 ;
}
#Standardised Water-level Index (SWI)
'swi' = {
discipline = 0 ;
parameterCategory = 22 ;
parameterNumber = 4 ;
}
#Standardised Snowmelt and Rain Index (SMRI)
'smri' = {
discipline = 0 ;
parameterCategory = 22 ;
parameterNumber = 5 ;
}
#Streamflow Drought Index (SDI)
'sdi' = {
discipline = 0 ;
parameterCategory = 22 ;
parameterNumber = 6 ;
}
#Universal thermal climate index
'utci' = {
discipline = 20 ;
@ -7340,12 +7578,6 @@
discipline = 10 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfFirstFixedSurface = 174 ;
typeOfSecondFixedSurface = 176 ;
scaledValueOfFirstFixedSurface = missing() ;
scaleFactorOfFirstFixedSurface = missing() ;
scaledValueOfSecondFixedSurface = missing() ;
scaleFactorOfSecondFixedSurface = missing() ;
}
#Sea ice area fraction
'siconc' = {
@ -8450,12 +8682,6 @@
discipline = 10 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfFirstFixedSurface = 174 ;
typeOfSecondFixedSurface = 176 ;
scaledValueOfFirstFixedSurface = missing() ;
scaleFactorOfFirstFixedSurface = missing() ;
scaledValueOfSecondFixedSurface = missing() ;
scaleFactorOfSecondFixedSurface = missing() ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean sea ice area fraction
@ -10047,6 +10273,44 @@
is_chemical_srcsink = 1 ;
sourceSinkChemicalPhysicalProcess = 7 ;
}
#Aerosol optical depth
'aod' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 102 ;
}
#Single scattering albedo
'ssa' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 103 ;
}
#Asymmetry Factor
'asymf' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 104 ;
}
#Aerosol backscatter from top of atmosphere
'aerbscattoa' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 107 ;
typeOfFirstFixedSurface = 8 ;
}
#Aerosol backscatter from ground
'aerbscatgnd' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 108 ;
typeOfFirstFixedSurface = 1 ;
}
#Aerosol extinction coefficient
'aerext' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 105 ;
}
#Pressure tendency
'ptend' = {
discipline = 0 ;
@ -10575,6 +10839,12 @@
parameterCategory = 0 ;
parameterNumber = 44 ;
}
#Wave spectral peakedness
'wsp' = {
discipline = 10 ;
parameterCategory = 0 ;
parameterNumber = 98 ;
}
#Skin reservoir content
'srcrea' = {
discipline = 2 ;

View File

@ -153,7 +153,21 @@
typeOfStatisticalProcessing = 1 ;
}
#Time-mean snow depth
'msd_m' = {
'avg_sde' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 11 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean snow cover
'avg_snowc' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 42 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean snow depth
'avg_sd_m' = {
localTablesVersion = 1 ;
discipline = 0 ;
parameterCategory = 1 ;
@ -161,7 +175,7 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean low cloud cover
'mlcc_frac' = {
'avg_lcc_frac' = {
localTablesVersion = 1 ;
discipline = 0 ;
parameterCategory = 6 ;
@ -169,7 +183,7 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean medium cloud cover
'mmcc_frac' = {
'avg_mcc_frac' = {
localTablesVersion = 1 ;
discipline = 0 ;
parameterCategory = 6 ;
@ -177,7 +191,7 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean high cloud cover
'mhcc_frac' = {
'avg_hcc_frac' = {
localTablesVersion = 1 ;
discipline = 0 ;
parameterCategory = 6 ;
@ -185,7 +199,7 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean forecast albedo
'mfal_frac' = {
'avg_fal_frac' = {
localTablesVersion = 1 ;
discipline = 0 ;
parameterCategory = 19 ;

View File

@ -153,6 +153,20 @@
typeOfStatisticalProcessing = 1 ;
}
#Time-mean snow depth
'Time-mean snow depth' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 11 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean snow cover
'Time-mean snow cover' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 42 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean snow depth
'Time-mean snow depth' = {
localTablesVersion = 1 ;
discipline = 0 ;

View File

@ -153,6 +153,20 @@
typeOfStatisticalProcessing = 1 ;
}
#Time-mean snow depth
'235095' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 11 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean snow cover
'235096' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 42 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean snow depth
'235141' = {
localTablesVersion = 1 ;
discipline = 0 ;

View File

@ -153,7 +153,21 @@
typeOfStatisticalProcessing = 1 ;
}
#Time-mean snow depth
'msd_m' = {
'avg_sde' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 11 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean snow cover
'avg_snowc' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 42 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean snow depth
'avg_sd_m' = {
localTablesVersion = 1 ;
discipline = 0 ;
parameterCategory = 1 ;
@ -161,7 +175,7 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean low cloud cover
'mlcc_frac' = {
'avg_lcc_frac' = {
localTablesVersion = 1 ;
discipline = 0 ;
parameterCategory = 6 ;
@ -169,7 +183,7 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean medium cloud cover
'mmcc_frac' = {
'avg_mcc_frac' = {
localTablesVersion = 1 ;
discipline = 0 ;
parameterCategory = 6 ;
@ -177,7 +191,7 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean high cloud cover
'mhcc_frac' = {
'avg_hcc_frac' = {
localTablesVersion = 1 ;
discipline = 0 ;
parameterCategory = 6 ;
@ -185,7 +199,7 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean forecast albedo
'mfal_frac' = {
'avg_fal_frac' = {
localTablesVersion = 1 ;
discipline = 0 ;
parameterCategory = 19 ;

View File

@ -153,6 +153,20 @@
typeOfStatisticalProcessing = 1 ;
}
#Time-mean snow depth
'm' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 11 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean snow cover
'%' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 42 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean snow depth
'm of water equivalent' = {
localTablesVersion = 1 ;
discipline = 0 ;

View File

@ -1,7 +0,0 @@
# modelName: Contribution from Daniel Lee @ DWD
# defintions for Roma (COSMO LEPS)
'cosmo-leps' = {
subCentre=98;
grib2LocalSectionNumber=28;
}

View File

@ -13798,7 +13798,7 @@
typeOfStatisticalProcessing = 1 ;
}
#Time-mean snow depth
'msd_m' = {
'avg_sd_m' = {
localTablesVersion = 1 ;
discipline = 0 ;
parameterCategory = 1 ;
@ -13814,7 +13814,7 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean low cloud cover
'mlcc_frac' = {
'avg_lcc_frac' = {
localTablesVersion = 1 ;
discipline = 0 ;
parameterCategory = 6 ;
@ -13822,7 +13822,7 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean medium cloud cover
'mmcc_frac' = {
'avg_mcc_frac' = {
localTablesVersion = 1 ;
discipline = 0 ;
parameterCategory = 6 ;
@ -13830,7 +13830,7 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean high cloud cover
'mhcc_frac' = {
'avg_hcc_frac' = {
localTablesVersion = 1 ;
discipline = 0 ;
parameterCategory = 6 ;
@ -13838,7 +13838,7 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean forecast albedo
'mfal_frac' = {
'avg_fal_frac' = {
localTablesVersion = 1 ;
discipline = 0 ;
parameterCategory = 19 ;

View File

@ -1771,3 +1771,9 @@
parameterCategory = 172 ;
parameterNumber = 212 ;
}
#Wave spectral peakedness
'wsp' = {
discipline = 192 ;
parameterCategory = 140 ;
parameterNumber = 254 ;
}

View File

@ -1771,3 +1771,9 @@
parameterCategory = 172 ;
parameterNumber = 212 ;
}
#Wave spectral peakedness
'Wave spectral peakedness' = {
discipline = 192 ;
parameterCategory = 140 ;
parameterNumber = 254 ;
}

View File

@ -1771,3 +1771,9 @@
parameterCategory = 172 ;
parameterNumber = 212 ;
}
#Wave spectral peakedness
'140254' = {
discipline = 192 ;
parameterCategory = 140 ;
parameterNumber = 254 ;
}

View File

@ -1771,3 +1771,9 @@
parameterCategory = 172 ;
parameterNumber = 212 ;
}
#Wave spectral peakedness
'wsp' = {
discipline = 192 ;
parameterCategory = 140 ;
parameterNumber = 254 ;
}

View File

@ -1771,3 +1771,9 @@
parameterCategory = 172 ;
parameterNumber = 212 ;
}
#Wave spectral peakedness
'dimensionless' = {
discipline = 192 ;
parameterCategory = 140 ;
parameterNumber = 254 ;
}

View File

@ -1,107 +0,0 @@
# modelName: Contribution from Daniel Lee @ DWD
# definitions for Offenbach
'cosmo_eu' = {
generatingProcessIdentifier=131;
}
'cosmo_eu' = {
generatingProcessIdentifier=132;
}
'cosmo_eu' = {
generatingProcessIdentifier=134;
}
'cosmo_eu' = {
generatingProcessIdentifier=135;
}
'cosmo_de' = {
generatingProcessIdentifier=137;
}
'cosmo_de' = {
generatingProcessIdentifier=138;
}
'cosmo_de-eps' = {
generatingProcessIdentifier=137;
typeOfEnsembleForecast=192;
}
'cosmo_de-eps' = {
generatingProcessIdentifier=138;
typeOfEnsembleForecast=192;
}
#DWD model names for ICON
'icogl' = {
gridDefinitionTemplateNumber=101;
generatingProcessIdentifier=1;
}
'icogl130' = {
numberOfGridUsed=26;
generatingProcessIdentifier=1;
}
'icogl130l90' = {
numberOfGridUsed=26;
nlev=91;
generatingProcessIdentifier=1;
}
'icogl130p' = {
numberOfGridUsed=26;
typeOfFirstFixedSurface=100;
generatingProcessIdentifier=1;
}
'icoeu'= {
gridDefinitionTemplateNumber=101;
generatingProcessIdentifier=2;
}
'icoeu065' = {
numberOfGridUsed=27;
generatingProcessIdentifier=2;
}
'icoeu065l60' = {
numberOfGridUsed=27;
nlev=61;
generatingProcessIdentifier=2;
}
'icreu' = {
gridDefinitionTemplateNumber=0;
generatingProcessIdentifier=2;
}
'icreu_0.625' = {
gridDefinitionTemplateNumber=0;
Dx=62500;
Dy=62500;
generatingProcessIdentifier=2;
}
'icreu_0.625l60' = {
gridDefinitionTemplateNumber=0;
Dx=62500;
Dy=62500;
nlev=61;
generatingProcessIdentifier=2;
}
'icreu_0.625p' = {
gridDefinitionTemplateNumber=0;
Dx=62500;
Dy=62500;
typeOfFirstFixedSurface=100;
generatingProcessIdentifier=2;
}
'icreu_0.625z' = {
gridDefinitionTemplateNumber=0;
Dx=62500;
Dy=62500;
typeOfFirstFixedSurface=102;
generatingProcessIdentifier=2;
}
'icrde' = {
gridDefinitionTemplateNumber=0;
generatingProcessIdentifier=3;
}
'icrgl' = {
gridDefinitionTemplateNumber=0;
generatingProcessIdentifier=1;
}
'icrgl_0.25' = {
gridDefinitionTemplateNumber=0;
Dx=250000;
Dy=250000;
generatingProcessIdentifier=1;
}

View File

@ -27,6 +27,27 @@
parameterNumber = 8 ;
typeOfStatisticalProcessing = 0 ;
}
#Vorticity (relative)
'atmosphere_relative_vorticity' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 12 ;
typeOfStatisticalProcessing = 0 ;
}
#Divergence
'divergence_of_wind' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 13 ;
typeOfStatisticalProcessing = 0 ;
}
#Ozone mass mixing ratio
'mass_fraction_of_ozone_in_air' = {
discipline = 0 ;
parameterCategory = 14 ;
parameterNumber = 1 ;
typeOfStatisticalProcessing = 0 ;
}
#Snow depth
'lwe_thickness_of_surface_snow_amount' = {
discipline = 0 ;

View File

@ -1,4 +1,25 @@
# Automatically generated by ./create_def.pl, do not edit
#Specific rain water content
'Specific rain water content' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 85 ;
typeOfStatisticalProcessing = 0 ;
}
#Specific snow water content
'Specific snow water content' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 86 ;
typeOfStatisticalProcessing = 0 ;
}
#Eta-coordinate vertical velocity
'Eta-coordinate vertical velocity' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 32 ;
typeOfStatisticalProcessing = 0 ;
}
#Geopotential
'Geopotential' = {
discipline = 0 ;
@ -27,6 +48,13 @@
parameterNumber = 8 ;
typeOfStatisticalProcessing = 0 ;
}
#Vorticity (relative)
'Vorticity (relative)' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 12 ;
typeOfStatisticalProcessing = 0 ;
}
#Logarithm of surface pressure
'Logarithm of surface pressure' = {
discipline = 0 ;
@ -34,6 +62,49 @@
parameterNumber = 25 ;
typeOfFirstFixedSurface = 105 ;
}
#Logarithm of surface pressure
'Logarithm of surface pressure' = {
discipline = 0 ;
parameterCategory = 3 ;
parameterNumber = 25 ;
typeOfFirstFixedSurface = 105 ;
typeOfStatisticalProcessing = 0 ;
}
#Divergence
'Divergence' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 13 ;
typeOfStatisticalProcessing = 0 ;
}
#Ozone mass mixing ratio
'Ozone mass mixing ratio' = {
discipline = 0 ;
parameterCategory = 14 ;
parameterNumber = 1 ;
typeOfStatisticalProcessing = 0 ;
}
#Specific cloud liquid water content
'Specific cloud liquid water content' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 83 ;
typeOfStatisticalProcessing = 0 ;
}
#Specific cloud ice water content
'Specific cloud ice water content' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 84 ;
typeOfStatisticalProcessing = 0 ;
}
#Fraction of cloud cover
'Fraction of cloud cover' = {
discipline = 0 ;
parameterCategory = 6 ;
parameterNumber = 32 ;
typeOfStatisticalProcessing = 0 ;
}
#Temperature difference
'Temperature difference' = {
discipline = 192 ;
@ -479,6 +550,13 @@
parameterCategory = 228 ;
parameterNumber = 103 ;
}
#Precipitation type
'Precipitation type' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 19 ;
typeOfStatisticalProcessing = 0 ;
}
#Snow cover
'Snow cover' = {
discipline = 0 ;
@ -486,6 +564,20 @@
parameterNumber = 42 ;
typeOfStatisticalProcessing = 0 ;
}
#K index
'K index' = {
discipline = 0 ;
parameterCategory = 7 ;
parameterNumber = 2 ;
typeOfStatisticalProcessing = 0 ;
}
#Total totals index
'Total totals index' = {
discipline = 0 ;
parameterCategory = 7 ;
parameterNumber = 4 ;
typeOfStatisticalProcessing = 0 ;
}
#Sea water potential temperature
'Sea water potential temperature' = {
discipline = 192 ;

View File

@ -1,4 +1,25 @@
# Automatically generated by ./create_def.pl, do not edit
#Specific rain water content
'75' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 85 ;
typeOfStatisticalProcessing = 0 ;
}
#Specific snow water content
'76' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 86 ;
typeOfStatisticalProcessing = 0 ;
}
#Eta-coordinate vertical velocity
'77' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 32 ;
typeOfStatisticalProcessing = 0 ;
}
#Geopotential
'129' = {
discipline = 0 ;
@ -27,6 +48,13 @@
parameterNumber = 8 ;
typeOfStatisticalProcessing = 0 ;
}
#Vorticity (relative)
'138' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 12 ;
typeOfStatisticalProcessing = 0 ;
}
#Logarithm of surface pressure
'152' = {
discipline = 0 ;
@ -34,6 +62,49 @@
parameterNumber = 25 ;
typeOfFirstFixedSurface = 105 ;
}
#Logarithm of surface pressure
'152' = {
discipline = 0 ;
parameterCategory = 3 ;
parameterNumber = 25 ;
typeOfFirstFixedSurface = 105 ;
typeOfStatisticalProcessing = 0 ;
}
#Divergence
'155' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 13 ;
typeOfStatisticalProcessing = 0 ;
}
#Ozone mass mixing ratio
'203' = {
discipline = 0 ;
parameterCategory = 14 ;
parameterNumber = 1 ;
typeOfStatisticalProcessing = 0 ;
}
#Specific cloud liquid water content
'246' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 83 ;
typeOfStatisticalProcessing = 0 ;
}
#Specific cloud ice water content
'247' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 84 ;
typeOfStatisticalProcessing = 0 ;
}
#Fraction of cloud cover
'248' = {
discipline = 0 ;
parameterCategory = 6 ;
parameterNumber = 32 ;
typeOfStatisticalProcessing = 0 ;
}
#Temperature difference
'200130' = {
discipline = 192 ;
@ -479,6 +550,13 @@
parameterCategory = 228 ;
parameterNumber = 103 ;
}
#Precipitation type
'260015' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 19 ;
typeOfStatisticalProcessing = 0 ;
}
#Snow cover
'260038' = {
discipline = 0 ;
@ -486,6 +564,20 @@
parameterNumber = 42 ;
typeOfStatisticalProcessing = 0 ;
}
#K index
'260121' = {
discipline = 0 ;
parameterCategory = 7 ;
parameterNumber = 2 ;
typeOfStatisticalProcessing = 0 ;
}
#Total totals index
'260123' = {
discipline = 0 ;
parameterCategory = 7 ;
parameterNumber = 4 ;
typeOfStatisticalProcessing = 0 ;
}
#Sea water potential temperature
'151129' = {
discipline = 192 ;

View File

@ -1,4 +1,25 @@
# Automatically generated by ./create_def.pl, do not edit
#Specific rain water content
'crwc' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 85 ;
typeOfStatisticalProcessing = 0 ;
}
#Specific snow water content
'cswc' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 86 ;
typeOfStatisticalProcessing = 0 ;
}
#Eta-coordinate vertical velocity
'etadot' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 32 ;
typeOfStatisticalProcessing = 0 ;
}
#Geopotential
'z' = {
discipline = 0 ;
@ -27,6 +48,13 @@
parameterNumber = 8 ;
typeOfStatisticalProcessing = 0 ;
}
#Vorticity (relative)
'vo' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 12 ;
typeOfStatisticalProcessing = 0 ;
}
#Logarithm of surface pressure
'lnsp' = {
discipline = 0 ;
@ -34,6 +62,49 @@
parameterNumber = 25 ;
typeOfFirstFixedSurface = 105 ;
}
#Logarithm of surface pressure
'lnsp' = {
discipline = 0 ;
parameterCategory = 3 ;
parameterNumber = 25 ;
typeOfFirstFixedSurface = 105 ;
typeOfStatisticalProcessing = 0 ;
}
#Divergence
'd' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 13 ;
typeOfStatisticalProcessing = 0 ;
}
#Ozone mass mixing ratio
'o3' = {
discipline = 0 ;
parameterCategory = 14 ;
parameterNumber = 1 ;
typeOfStatisticalProcessing = 0 ;
}
#Specific cloud liquid water content
'clwc' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 83 ;
typeOfStatisticalProcessing = 0 ;
}
#Specific cloud ice water content
'ciwc' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 84 ;
typeOfStatisticalProcessing = 0 ;
}
#Fraction of cloud cover
'cc' = {
discipline = 0 ;
parameterCategory = 6 ;
parameterNumber = 32 ;
typeOfStatisticalProcessing = 0 ;
}
#Temperature difference
'tdiff' = {
discipline = 192 ;
@ -479,6 +550,13 @@
parameterCategory = 228 ;
parameterNumber = 103 ;
}
#Precipitation type
'ptype' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 19 ;
typeOfStatisticalProcessing = 0 ;
}
#Snow cover
'snowc' = {
discipline = 0 ;
@ -486,6 +564,20 @@
parameterNumber = 42 ;
typeOfStatisticalProcessing = 0 ;
}
#K index
'kx' = {
discipline = 0 ;
parameterCategory = 7 ;
parameterNumber = 2 ;
typeOfStatisticalProcessing = 0 ;
}
#Total totals index
'totalx' = {
discipline = 0 ;
parameterCategory = 7 ;
parameterNumber = 4 ;
typeOfStatisticalProcessing = 0 ;
}
#Sea water potential temperature
'thetao' = {
discipline = 192 ;

View File

@ -1,4 +1,25 @@
# Automatically generated by ./create_def.pl, do not edit
#Specific rain water content
'kg kg**-1' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 85 ;
typeOfStatisticalProcessing = 0 ;
}
#Specific snow water content
'kg kg**-1' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 86 ;
typeOfStatisticalProcessing = 0 ;
}
#Eta-coordinate vertical velocity
's**-1' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 32 ;
typeOfStatisticalProcessing = 0 ;
}
#Geopotential
'm**2 s**-2' = {
discipline = 0 ;
@ -27,6 +48,13 @@
parameterNumber = 8 ;
typeOfStatisticalProcessing = 0 ;
}
#Vorticity (relative)
's**-1' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 12 ;
typeOfStatisticalProcessing = 0 ;
}
#Logarithm of surface pressure
'Numeric' = {
discipline = 0 ;
@ -34,6 +62,49 @@
parameterNumber = 25 ;
typeOfFirstFixedSurface = 105 ;
}
#Logarithm of surface pressure
'Numeric' = {
discipline = 0 ;
parameterCategory = 3 ;
parameterNumber = 25 ;
typeOfFirstFixedSurface = 105 ;
typeOfStatisticalProcessing = 0 ;
}
#Divergence
's**-1' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 13 ;
typeOfStatisticalProcessing = 0 ;
}
#Ozone mass mixing ratio
'kg kg**-1' = {
discipline = 0 ;
parameterCategory = 14 ;
parameterNumber = 1 ;
typeOfStatisticalProcessing = 0 ;
}
#Specific cloud liquid water content
'kg kg**-1' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 83 ;
typeOfStatisticalProcessing = 0 ;
}
#Specific cloud ice water content
'kg kg**-1' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 84 ;
typeOfStatisticalProcessing = 0 ;
}
#Fraction of cloud cover
'(0 - 1)' = {
discipline = 0 ;
parameterCategory = 6 ;
parameterNumber = 32 ;
typeOfStatisticalProcessing = 0 ;
}
#Temperature difference
'K' = {
discipline = 192 ;
@ -479,6 +550,13 @@
parameterCategory = 228 ;
parameterNumber = 103 ;
}
#Precipitation type
'(Code table 4.201)' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 19 ;
typeOfStatisticalProcessing = 0 ;
}
#Snow cover
'%' = {
discipline = 0 ;
@ -486,6 +564,20 @@
parameterNumber = 42 ;
typeOfStatisticalProcessing = 0 ;
}
#K index
'K' = {
discipline = 0 ;
parameterCategory = 7 ;
parameterNumber = 2 ;
typeOfStatisticalProcessing = 0 ;
}
#Total totals index
'K' = {
discipline = 0 ;
parameterCategory = 7 ;
parameterNumber = 4 ;
typeOfStatisticalProcessing = 0 ;
}
#Sea water potential temperature
'deg C' = {
discipline = 192 ;

View File

@ -1,4 +1,40 @@
# Automatically generated by ./create_def.pl, do not edit
#U component of wind
'eastward_wind' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 2 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 100 ;
scaleFactorOfFirstFixedSurface = 0 ;
}
#U component of wind
'eastward_wind' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 2 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 200 ;
scaleFactorOfFirstFixedSurface = 0 ;
}
#V component of wind
'northward_wind' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 3 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 100 ;
scaleFactorOfFirstFixedSurface = 0 ;
}
#V component of wind
'northward_wind' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 3 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 200 ;
scaleFactorOfFirstFixedSurface = 0 ;
}
#Snow depth
'lwe_thickness_of_surface_snow_amount' = {
localTablesVersion = 1 ;

View File

@ -17,6 +17,24 @@
typeOfFirstFixedSurface = 1 ;
typeOfStatisticalProcessing = 1 ;
}
#Wind speed
'Wind speed' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 100 ;
scaleFactorOfFirstFixedSurface = 0 ;
}
#Wind speed
'Wind speed' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 200 ;
scaleFactorOfFirstFixedSurface = 0 ;
}
#UV visible albedo for direct radiation (climatological)
'UV visible albedo for direct radiation (climatological)' = {
localTablesVersion = 1 ;
@ -74,6 +92,42 @@
typeOfFirstFixedSurface = 1 ;
typeOfStatisticalProcessing = 1 ;
}
#U component of wind
'U component of wind' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 2 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 100 ;
scaleFactorOfFirstFixedSurface = 0 ;
}
#U component of wind
'U component of wind' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 2 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 200 ;
scaleFactorOfFirstFixedSurface = 0 ;
}
#V component of wind
'V component of wind' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 3 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 100 ;
scaleFactorOfFirstFixedSurface = 0 ;
}
#V component of wind
'V component of wind' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 3 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 200 ;
scaleFactorOfFirstFixedSurface = 0 ;
}
#Snow depth
'Snow depth' = {
localTablesVersion = 1 ;
@ -408,4 +462,12 @@
constituentType = 3 ;
typeOfStatisticalProcessing = 0 ;
is_chemical = 1 ;
}
#Time-mean logarithm of surface pressure
'Time-mean logarithm of surface pressure' = {
discipline = 0 ;
parameterCategory = 3 ;
parameterNumber = 25 ;
typeOfFirstFixedSurface = 105 ;
typeOfStatisticalProcessing = 0 ;
}

View File

@ -17,6 +17,24 @@
typeOfFirstFixedSurface = 1 ;
typeOfStatisticalProcessing = 1 ;
}
#Wind speed
'10' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 100 ;
scaleFactorOfFirstFixedSurface = 0 ;
}
#Wind speed
'10' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 200 ;
scaleFactorOfFirstFixedSurface = 0 ;
}
#UV visible albedo for direct radiation (climatological)
'15' = {
localTablesVersion = 1 ;
@ -74,6 +92,42 @@
typeOfFirstFixedSurface = 1 ;
typeOfStatisticalProcessing = 1 ;
}
#U component of wind
'131' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 2 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 100 ;
scaleFactorOfFirstFixedSurface = 0 ;
}
#U component of wind
'131' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 2 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 200 ;
scaleFactorOfFirstFixedSurface = 0 ;
}
#V component of wind
'132' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 3 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 100 ;
scaleFactorOfFirstFixedSurface = 0 ;
}
#V component of wind
'132' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 3 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 200 ;
scaleFactorOfFirstFixedSurface = 0 ;
}
#Snow depth
'141' = {
localTablesVersion = 1 ;
@ -408,4 +462,12 @@
constituentType = 3 ;
typeOfStatisticalProcessing = 0 ;
is_chemical = 1 ;
}
#Time-mean logarithm of surface pressure
'235152' = {
discipline = 0 ;
parameterCategory = 3 ;
parameterNumber = 25 ;
typeOfFirstFixedSurface = 105 ;
typeOfStatisticalProcessing = 0 ;
}

View File

@ -17,6 +17,24 @@
typeOfFirstFixedSurface = 1 ;
typeOfStatisticalProcessing = 1 ;
}
#Wind speed
'ws' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 100 ;
scaleFactorOfFirstFixedSurface = 0 ;
}
#Wind speed
'ws' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 200 ;
scaleFactorOfFirstFixedSurface = 0 ;
}
#UV visible albedo for direct radiation (climatological)
'aluvp' = {
localTablesVersion = 1 ;
@ -74,6 +92,42 @@
typeOfFirstFixedSurface = 1 ;
typeOfStatisticalProcessing = 1 ;
}
#U component of wind
'u' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 2 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 100 ;
scaleFactorOfFirstFixedSurface = 0 ;
}
#U component of wind
'u' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 2 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 200 ;
scaleFactorOfFirstFixedSurface = 0 ;
}
#V component of wind
'v' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 3 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 100 ;
scaleFactorOfFirstFixedSurface = 0 ;
}
#V component of wind
'v' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 3 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 200 ;
scaleFactorOfFirstFixedSurface = 0 ;
}
#Snow depth
'sd' = {
localTablesVersion = 1 ;
@ -408,4 +462,12 @@
constituentType = 3 ;
typeOfStatisticalProcessing = 0 ;
is_chemical = 1 ;
}
#Time-mean logarithm of surface pressure
'avg_lnsp' = {
discipline = 0 ;
parameterCategory = 3 ;
parameterNumber = 25 ;
typeOfFirstFixedSurface = 105 ;
typeOfStatisticalProcessing = 0 ;
}

View File

@ -17,6 +17,24 @@
typeOfFirstFixedSurface = 1 ;
typeOfStatisticalProcessing = 1 ;
}
#Wind speed
'm s**-1' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 100 ;
scaleFactorOfFirstFixedSurface = 0 ;
}
#Wind speed
'm s**-1' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 200 ;
scaleFactorOfFirstFixedSurface = 0 ;
}
#UV visible albedo for direct radiation (climatological)
'(0 - 1)' = {
localTablesVersion = 1 ;
@ -74,6 +92,42 @@
typeOfFirstFixedSurface = 1 ;
typeOfStatisticalProcessing = 1 ;
}
#U component of wind
'm s**-1' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 2 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 100 ;
scaleFactorOfFirstFixedSurface = 0 ;
}
#U component of wind
'm s**-1' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 2 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 200 ;
scaleFactorOfFirstFixedSurface = 0 ;
}
#V component of wind
'm s**-1' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 3 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 100 ;
scaleFactorOfFirstFixedSurface = 0 ;
}
#V component of wind
'm s**-1' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 3 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 200 ;
scaleFactorOfFirstFixedSurface = 0 ;
}
#Snow depth
'm of water equivalent' = {
localTablesVersion = 1 ;
@ -408,4 +462,12 @@
constituentType = 3 ;
typeOfStatisticalProcessing = 0 ;
is_chemical = 1 ;
}
#Time-mean logarithm of surface pressure
'Numeric' = {
discipline = 0 ;
parameterCategory = 3 ;
parameterNumber = 25 ;
typeOfFirstFixedSurface = 105 ;
typeOfStatisticalProcessing = 0 ;
}

View File

@ -1,4 +1,24 @@
# Automatically generated by ./create_def.pl, do not edit
#Mean discharge in the last 6 hours
'dis06' = {
discipline = 1 ;
parameterCategory = 0 ;
parameterNumber = 7 ;
typeOfFirstFixedSurface = 1 ;
indicatorOfUnitForTimeRange = 1 ;
typeOfStatisticalProcessing = 0 ;
lengthOfTimeRange = 6 ;
}
#Mean discharge in the last 24 hours
'dis24' = {
discipline = 1 ;
parameterCategory = 0 ;
parameterNumber = 7 ;
typeOfFirstFixedSurface = 1 ;
indicatorOfUnitForTimeRange = 1 ;
typeOfStatisticalProcessing = 0 ;
lengthOfTimeRange = 24 ;
}
#Total precipitation in the last 6 hours
'tp06' = {
discipline = 0 ;

View File

@ -1,4 +1,24 @@
# Automatically generated by ./create_def.pl, do not edit
#Mean discharge in the last 6 hours
'Mean discharge in the last 6 hours' = {
discipline = 1 ;
parameterCategory = 0 ;
parameterNumber = 7 ;
typeOfFirstFixedSurface = 1 ;
indicatorOfUnitForTimeRange = 1 ;
typeOfStatisticalProcessing = 0 ;
lengthOfTimeRange = 6 ;
}
#Mean discharge in the last 24 hours
'Mean discharge in the last 24 hours' = {
discipline = 1 ;
parameterCategory = 0 ;
parameterNumber = 7 ;
typeOfFirstFixedSurface = 1 ;
indicatorOfUnitForTimeRange = 1 ;
typeOfStatisticalProcessing = 0 ;
lengthOfTimeRange = 24 ;
}
#Total precipitation in the last 6 hours
'Total precipitation in the last 6 hours' = {
discipline = 0 ;

View File

@ -1,4 +1,24 @@
# Automatically generated by ./create_def.pl, do not edit
#Mean discharge in the last 6 hours
'240023' = {
discipline = 1 ;
parameterCategory = 0 ;
parameterNumber = 7 ;
typeOfFirstFixedSurface = 1 ;
indicatorOfUnitForTimeRange = 1 ;
typeOfStatisticalProcessing = 0 ;
lengthOfTimeRange = 6 ;
}
#Mean discharge in the last 24 hours
'240024' = {
discipline = 1 ;
parameterCategory = 0 ;
parameterNumber = 7 ;
typeOfFirstFixedSurface = 1 ;
indicatorOfUnitForTimeRange = 1 ;
typeOfStatisticalProcessing = 0 ;
lengthOfTimeRange = 24 ;
}
#Total precipitation in the last 6 hours
'260267' = {
discipline = 0 ;

View File

@ -1,4 +1,24 @@
# Automatically generated by ./create_def.pl, do not edit
#Mean discharge in the last 6 hours
'dis06' = {
discipline = 1 ;
parameterCategory = 0 ;
parameterNumber = 7 ;
typeOfFirstFixedSurface = 1 ;
indicatorOfUnitForTimeRange = 1 ;
typeOfStatisticalProcessing = 0 ;
lengthOfTimeRange = 6 ;
}
#Mean discharge in the last 24 hours
'dis24' = {
discipline = 1 ;
parameterCategory = 0 ;
parameterNumber = 7 ;
typeOfFirstFixedSurface = 1 ;
indicatorOfUnitForTimeRange = 1 ;
typeOfStatisticalProcessing = 0 ;
lengthOfTimeRange = 24 ;
}
#Total precipitation in the last 6 hours
'tp06' = {
discipline = 0 ;

View File

@ -1,4 +1,24 @@
# Automatically generated by ./create_def.pl, do not edit
#Mean discharge in the last 6 hours
'm**3 s**-1' = {
discipline = 1 ;
parameterCategory = 0 ;
parameterNumber = 7 ;
typeOfFirstFixedSurface = 1 ;
indicatorOfUnitForTimeRange = 1 ;
typeOfStatisticalProcessing = 0 ;
lengthOfTimeRange = 6 ;
}
#Mean discharge in the last 24 hours
'm**3 s**-1' = {
discipline = 1 ;
parameterCategory = 0 ;
parameterNumber = 7 ;
typeOfFirstFixedSurface = 1 ;
indicatorOfUnitForTimeRange = 1 ;
typeOfStatisticalProcessing = 0 ;
lengthOfTimeRange = 24 ;
}
#Total precipitation in the last 6 hours
'kg m**-2' = {
discipline = 0 ;

View File

@ -1,17 +0,0 @@
# modelName: Contribution from Daniel Lee @ DWD
# definitions for Zurich
'cosmo-1' = {
generatingProcessIdentifier=101;
}
'cosmo-2' = {
generatingProcessIdentifier=102;
}
'cosmo-7' = {
generatingProcessIdentifier=107;
}
'cosmo-e' = {
generatingProcessIdentifier=103;
}
'cosmo-e' = {
generatingProcessIdentifier=130;
}

View File

@ -17,6 +17,33 @@
scaledValueOfFirstFixedSurface = 200 ;
scaleFactorOfFirstFixedSurface = 0 ;
}
#Wind speed
'ws' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfStatisticalProcessing = 0 ;
}
#Wind speed
'ws' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 100 ;
scaleFactorOfFirstFixedSurface = 0 ;
typeOfStatisticalProcessing = 0 ;
}
#Wind speed
'ws' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 200 ;
scaleFactorOfFirstFixedSurface = 0 ;
typeOfStatisticalProcessing = 0 ;
}
#Sea ice area fraction
'ci' = {
discipline = 10 ;
@ -75,6 +102,34 @@
indicatorOfUnitForTimeRange = 1 ;
typeOfStatisticalProcessing = 2 ;
}
#Pressure
'pres' = {
discipline = 0 ;
parameterCategory = 3 ;
parameterNumber = 0 ;
typeOfStatisticalProcessing = 0 ;
}
#Potential vorticity
'pv' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 14 ;
typeOfStatisticalProcessing = 0 ;
}
#Specific rain water content
'crwc' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 85 ;
typeOfStatisticalProcessing = 0 ;
}
#Specific snow water content
'cswc' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 86 ;
typeOfStatisticalProcessing = 0 ;
}
#Total column cloud liquid water
'tclw' = {
discipline = 0 ;
@ -287,6 +342,20 @@
typeOfFirstFixedSurface = 1 ;
typeOfStatisticalProcessing = 0 ;
}
#Specific cloud liquid water content
'clwc' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 83 ;
typeOfStatisticalProcessing = 0 ;
}
#Specific cloud ice water content
'ciwc' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 84 ;
typeOfStatisticalProcessing = 0 ;
}
#2 metre specific humidity
'sh2' = {
discipline = 0 ;
@ -298,6 +367,13 @@
scaleFactorOfFirstFixedSurface = 0 ;
typeOfStatisticalProcessing = 0 ;
}
#Precipitation type
'ptype' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 19 ;
typeOfStatisticalProcessing = 0 ;
}
#Total column integrated water vapour
'tciwv' = {
discipline = 0 ;

View File

@ -17,6 +17,33 @@
scaledValueOfFirstFixedSurface = 200 ;
scaleFactorOfFirstFixedSurface = 0 ;
}
#Wind speed
'Wind speed' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfStatisticalProcessing = 0 ;
}
#Wind speed
'Wind speed' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 100 ;
scaleFactorOfFirstFixedSurface = 0 ;
typeOfStatisticalProcessing = 0 ;
}
#Wind speed
'Wind speed' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 200 ;
scaleFactorOfFirstFixedSurface = 0 ;
typeOfStatisticalProcessing = 0 ;
}
#Sea ice area fraction
'Sea ice area fraction' = {
discipline = 10 ;
@ -75,6 +102,34 @@
indicatorOfUnitForTimeRange = 1 ;
typeOfStatisticalProcessing = 2 ;
}
#Pressure
'Pressure' = {
discipline = 0 ;
parameterCategory = 3 ;
parameterNumber = 0 ;
typeOfStatisticalProcessing = 0 ;
}
#Potential vorticity
'Potential vorticity' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 14 ;
typeOfStatisticalProcessing = 0 ;
}
#Specific rain water content
'Specific rain water content' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 85 ;
typeOfStatisticalProcessing = 0 ;
}
#Specific snow water content
'Specific snow water content' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 86 ;
typeOfStatisticalProcessing = 0 ;
}
#Total column cloud liquid water
'Total column cloud liquid water' = {
discipline = 0 ;
@ -287,6 +342,20 @@
typeOfFirstFixedSurface = 1 ;
typeOfStatisticalProcessing = 0 ;
}
#Specific cloud liquid water content
'Specific cloud liquid water content' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 83 ;
typeOfStatisticalProcessing = 0 ;
}
#Specific cloud ice water content
'Specific cloud ice water content' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 84 ;
typeOfStatisticalProcessing = 0 ;
}
#2 metre specific humidity
'2 metre specific humidity' = {
discipline = 0 ;
@ -298,6 +367,13 @@
scaleFactorOfFirstFixedSurface = 0 ;
typeOfStatisticalProcessing = 0 ;
}
#Precipitation type
'Precipitation type' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 19 ;
typeOfStatisticalProcessing = 0 ;
}
#Total column integrated water vapour
'Total column integrated water vapour' = {
discipline = 0 ;

View File

@ -17,6 +17,33 @@
scaledValueOfFirstFixedSurface = 200 ;
scaleFactorOfFirstFixedSurface = 0 ;
}
#Wind speed
'10' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfStatisticalProcessing = 0 ;
}
#Wind speed
'10' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 100 ;
scaleFactorOfFirstFixedSurface = 0 ;
typeOfStatisticalProcessing = 0 ;
}
#Wind speed
'10' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 200 ;
scaleFactorOfFirstFixedSurface = 0 ;
typeOfStatisticalProcessing = 0 ;
}
#Sea ice area fraction
'31' = {
discipline = 10 ;
@ -75,6 +102,34 @@
indicatorOfUnitForTimeRange = 1 ;
typeOfStatisticalProcessing = 2 ;
}
#Pressure
'54' = {
discipline = 0 ;
parameterCategory = 3 ;
parameterNumber = 0 ;
typeOfStatisticalProcessing = 0 ;
}
#Potential vorticity
'60' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 14 ;
typeOfStatisticalProcessing = 0 ;
}
#Specific rain water content
'75' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 85 ;
typeOfStatisticalProcessing = 0 ;
}
#Specific snow water content
'76' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 86 ;
typeOfStatisticalProcessing = 0 ;
}
#Total column cloud liquid water
'78' = {
discipline = 0 ;
@ -287,6 +342,20 @@
typeOfFirstFixedSurface = 1 ;
typeOfStatisticalProcessing = 0 ;
}
#Specific cloud liquid water content
'246' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 83 ;
typeOfStatisticalProcessing = 0 ;
}
#Specific cloud ice water content
'247' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 84 ;
typeOfStatisticalProcessing = 0 ;
}
#2 metre specific humidity
'174096' = {
discipline = 0 ;
@ -298,6 +367,13 @@
scaleFactorOfFirstFixedSurface = 0 ;
typeOfStatisticalProcessing = 0 ;
}
#Precipitation type
'260015' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 19 ;
typeOfStatisticalProcessing = 0 ;
}
#Total column integrated water vapour
'260057' = {
discipline = 0 ;

View File

@ -17,6 +17,33 @@
scaledValueOfFirstFixedSurface = 200 ;
scaleFactorOfFirstFixedSurface = 0 ;
}
#Wind speed
'ws' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfStatisticalProcessing = 0 ;
}
#Wind speed
'ws' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 100 ;
scaleFactorOfFirstFixedSurface = 0 ;
typeOfStatisticalProcessing = 0 ;
}
#Wind speed
'ws' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 200 ;
scaleFactorOfFirstFixedSurface = 0 ;
typeOfStatisticalProcessing = 0 ;
}
#Sea ice area fraction
'ci' = {
discipline = 10 ;
@ -75,6 +102,34 @@
indicatorOfUnitForTimeRange = 1 ;
typeOfStatisticalProcessing = 2 ;
}
#Pressure
'pres' = {
discipline = 0 ;
parameterCategory = 3 ;
parameterNumber = 0 ;
typeOfStatisticalProcessing = 0 ;
}
#Potential vorticity
'pv' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 14 ;
typeOfStatisticalProcessing = 0 ;
}
#Specific rain water content
'crwc' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 85 ;
typeOfStatisticalProcessing = 0 ;
}
#Specific snow water content
'cswc' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 86 ;
typeOfStatisticalProcessing = 0 ;
}
#Total column cloud liquid water
'tclw' = {
discipline = 0 ;
@ -287,6 +342,20 @@
typeOfFirstFixedSurface = 1 ;
typeOfStatisticalProcessing = 0 ;
}
#Specific cloud liquid water content
'clwc' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 83 ;
typeOfStatisticalProcessing = 0 ;
}
#Specific cloud ice water content
'ciwc' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 84 ;
typeOfStatisticalProcessing = 0 ;
}
#2 metre specific humidity
'2sh' = {
discipline = 0 ;
@ -298,6 +367,13 @@
scaleFactorOfFirstFixedSurface = 0 ;
typeOfStatisticalProcessing = 0 ;
}
#Precipitation type
'ptype' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 19 ;
typeOfStatisticalProcessing = 0 ;
}
#Total column integrated water vapour
'tciwv' = {
discipline = 0 ;

View File

@ -17,6 +17,33 @@
scaledValueOfFirstFixedSurface = 200 ;
scaleFactorOfFirstFixedSurface = 0 ;
}
#Wind speed
'm s**-1' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfStatisticalProcessing = 0 ;
}
#Wind speed
'm s**-1' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 100 ;
scaleFactorOfFirstFixedSurface = 0 ;
typeOfStatisticalProcessing = 0 ;
}
#Wind speed
'm s**-1' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfFirstFixedSurface = 103 ;
scaledValueOfFirstFixedSurface = 200 ;
scaleFactorOfFirstFixedSurface = 0 ;
typeOfStatisticalProcessing = 0 ;
}
#Sea ice area fraction
'(0 - 1)' = {
discipline = 10 ;
@ -75,6 +102,34 @@
indicatorOfUnitForTimeRange = 1 ;
typeOfStatisticalProcessing = 2 ;
}
#Pressure
'Pa' = {
discipline = 0 ;
parameterCategory = 3 ;
parameterNumber = 0 ;
typeOfStatisticalProcessing = 0 ;
}
#Potential vorticity
'K m**2 kg**-1 s**-1' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 14 ;
typeOfStatisticalProcessing = 0 ;
}
#Specific rain water content
'kg kg**-1' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 85 ;
typeOfStatisticalProcessing = 0 ;
}
#Specific snow water content
'kg kg**-1' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 86 ;
typeOfStatisticalProcessing = 0 ;
}
#Total column cloud liquid water
'kg m**-2' = {
discipline = 0 ;
@ -287,6 +342,20 @@
typeOfFirstFixedSurface = 1 ;
typeOfStatisticalProcessing = 0 ;
}
#Specific cloud liquid water content
'kg kg**-1' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 83 ;
typeOfStatisticalProcessing = 0 ;
}
#Specific cloud ice water content
'kg kg**-1' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 84 ;
typeOfStatisticalProcessing = 0 ;
}
#2 metre specific humidity
'kg kg**-1' = {
discipline = 0 ;
@ -298,6 +367,13 @@
scaleFactorOfFirstFixedSurface = 0 ;
typeOfStatisticalProcessing = 0 ;
}
#Precipitation type
'(Code table 4.201)' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 19 ;
typeOfStatisticalProcessing = 0 ;
}
#Total column integrated water vapour
'kg m**-2' = {
discipline = 0 ;

View File

@ -1,43 +0,0 @@
# modelName: Contribution from Daniel Lee @ DWD
# COSMO
# general definition
'cosmo' = { originatingCentre=250; }
'cosmo' = { subCentre=250; }
# definitions for ARPA-SIMC
'cosmo-i2' = { originatingCentre=200;
generatingProcessIdentifier=36; }
'cosmo-i2' = { originatingCentre=200;
generatingProcessIdentifier=139; }
'cosmo-i2' = { originatingCentre=200;
generatingProcessIdentifier=144; }
'cosmo-i2' = { originatingCentre=200;
generatingProcessIdentifier=148; }
'cosmo-i7' = { originatingCentre=200;
generatingProcessIdentifier=31; }
'cosmo-i7' = { originatingCentre=200;
generatingProcessIdentifier=32; }
'cosmo-i7' = { originatingCentre=200;
generatingProcessIdentifier=34; }
'cosmo-i7' = { originatingCentre=200;
generatingProcessIdentifier=38; }
'cosmo-i7' = { originatingCentre=200;
generatingProcessIdentifier=42; }
'cosmo-i7' = { originatingCentre=200;
generatingProcessIdentifier=46; }
'cosmo-i7' = { originatingCentre=200;
generatingProcessIdentifier=131; }
# definitions for Moscow
'cosmo_ru' = { originatingCentre=76;
generatingProcessIdentifier=135; }
'cosmo_ru-eps' = { originatingCentre=76;
generatingProcessIdentifier=235;}
# definitions for Athens
'cosmo-greece' = { originatingCentre=96;}
# definitions for Warsaw / Poland
'cosmo-poland' = { originatingCentre=220;}
# definitions for Romania
'cosmo-romania' = { originatingCentre=242;}

View File

@ -4957,18 +4957,46 @@
parameterNumber = 18 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean snow depth
'Time-mean snow depth' = {
#Time-mean wind speed
'Time-mean wind speed' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 11 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean snow cover
'Time-mean snow cover' = {
#Time-mean pressure
'Time-mean pressure' = {
discipline = 0 ;
parameterCategory = 3 ;
parameterNumber = 0 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean potential vorticity
'Time-mean potential vorticity' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 14 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean specific rain water content
'Time-mean specific rain water content' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 42 ;
parameterNumber = 85 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean specific snow water content
'Time-mean specific snow water content' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 86 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean eta-coordinate vertical velocity
'Time-mean eta-coordinate vertical velocity' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 32 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean geopotential
@ -5039,6 +5067,13 @@
typeOfSecondFixedSurface = 8 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean vorticity (relative)
'Time-mean vorticity (relative)' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 12 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean mean sea level pressure
'Time-mean mean sea level pressure' = {
discipline = 0 ;
@ -5047,6 +5082,13 @@
typeOfFirstFixedSurface = 101 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean divergence
'Time-mean divergence' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 13 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean relative humidity
'Time-mean relative humidity' = {
discipline = 0 ;
@ -5091,6 +5133,13 @@
scaleFactorOfFirstFixedSurface = 0 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean ozone mass mixing ratio
'Time-mean ozone mass mixing ratio' = {
discipline = 0 ;
parameterCategory = 14 ;
parameterNumber = 1 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean temperature of snow layer
'Time-mean temperature of snow layer' = {
discipline = 2 ;
@ -5114,6 +5163,131 @@
typeOfFirstFixedSurface = 1 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean specific cloud liquid water content
'Time-mean specific cloud liquid water content' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 83 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean specific cloud ice water content
'Time-mean specific cloud ice water content' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 84 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean fraction of cloud cover
'Time-mean fraction of cloud cover' = {
discipline = 0 ;
parameterCategory = 6 ;
parameterNumber = 32 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean K index
'Time-mean K index' = {
discipline = 0 ;
parameterCategory = 7 ;
parameterNumber = 2 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean total totals index
'Time-mean total totals index' = {
discipline = 0 ;
parameterCategory = 7 ;
parameterNumber = 4 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean clear air turbulence (CAT)
'Time-mean clear air turbulence (CAT)' = {
discipline = 0 ;
parameterCategory = 19 ;
parameterNumber = 29 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean discharge from rivers or streams
'Time-mean discharge from rivers or streams' = {
discipline = 1 ;
parameterCategory = 0 ;
parameterNumber = 7 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean soil wetness index (total layer)
'Time-mean soil wetness index (total layer)' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 30 ;
typeOfFirstFixedSurface = 1 ;
typeOfSecondFixedSurface = 151 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean soil wetness index (root zone)
'Time-mean soil wetness index (root zone)' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 30 ;
typeOfFirstFixedSurface = 1 ;
typeOfSecondFixedSurface = 167 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean soil wetness index(layer)
'Time-mean soil wetness index(layer)' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 30 ;
typeOfFirstFixedSurface = 151 ;
typeOfSecondFixedSurface = 151 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean floodplain depth
'Time-mean floodplain depth' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 17 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean floodplain flooded fraction
'Time-mean floodplain flooded fraction' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 18 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean floodplain flooded area
'Time-mean floodplain flooded area' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 19 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean river fraction
'Time-mean river fraction' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 20 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean river area
'Time-mean river area' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 21 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean fraction of river coverage plus river related flooding
'Time-mean fraction of river coverage plus river related flooding' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 22 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean area of river coverage plus river related flooding
'Time-mean area of river coverage plus river related flooding' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 23 ;
typeOfStatisticalProcessing = 0 ;
}
#Cross sectional area of flow in channel
'Cross sectional area of flow in channel' = {
discipline = 1 ;
@ -5174,26 +5348,6 @@
parameterCategory = 0 ;
parameterNumber = 15 ;
}
#Mean discharge in the last 6 hours
'Mean discharge in the last 6 hours' = {
discipline = 1 ;
parameterCategory = 0 ;
parameterNumber = 7 ;
typeOfFirstFixedSurface = 1 ;
indicatorOfUnitForTimeRange = 1 ;
typeOfStatisticalProcessing = 0 ;
lengthOfTimeRange = 6 ;
}
#Mean discharge in the last 24 hours
'Mean discharge in the last 24 hours' = {
discipline = 1 ;
parameterCategory = 0 ;
parameterNumber = 7 ;
typeOfFirstFixedSurface = 1 ;
indicatorOfUnitForTimeRange = 1 ;
typeOfStatisticalProcessing = 0 ;
lengthOfTimeRange = 24 ;
}
#Snow depth at elevation bands
'Snow depth at elevation bands' = {
discipline = 2 ;
@ -5246,6 +5400,48 @@
parameterCategory = 0 ;
parameterNumber = 19 ;
}
#Floodplain depth
'Floodplain depth' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 17 ;
}
#Floodplain flooded fraction
'Floodplain flooded fraction' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 18 ;
}
#Floodplain flooded area
'Floodplain flooded area' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 19 ;
}
#River fraction
'River fraction' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 20 ;
}
#River area
'River area' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 21 ;
}
#Fraction of river coverage plus river related flooding
'Fraction of river coverage plus river related flooding' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 22 ;
}
#Area of river coverage plus river related flooding
'Area of river coverage plus river related flooding' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 23 ;
}
#Latitude
'Latitude' = {
discipline = 0 ;
@ -7203,6 +7399,48 @@
typeOfFirstFixedSurface = 1 ;
typeOfSecondFixedSurface = 8 ;
}
#Standardised Precipitation Index (SPI)
'Standardised Precipitation Index (SPI)' = {
discipline = 0 ;
parameterCategory = 22 ;
parameterNumber = 0 ;
}
#Standardised Precipitation Evapotranspiration Index (SPEI)
'Standardised Precipitation Evapotranspiration Index (SPEI)' = {
discipline = 0 ;
parameterCategory = 22 ;
parameterNumber = 1 ;
}
#Standardised Streamflow Index (SSFI)
'Standardised Streamflow Index (SSFI)' = {
discipline = 0 ;
parameterCategory = 22 ;
parameterNumber = 2 ;
}
#Standardised Reservoir Supply Index (SRSI)
'Standardised Reservoir Supply Index (SRSI)' = {
discipline = 0 ;
parameterCategory = 22 ;
parameterNumber = 3 ;
}
#Standardised Water-level Index (SWI)
'Standardised Water-level Index (SWI)' = {
discipline = 0 ;
parameterCategory = 22 ;
parameterNumber = 4 ;
}
#Standardised Snowmelt and Rain Index (SMRI)
'Standardised Snowmelt and Rain Index (SMRI)' = {
discipline = 0 ;
parameterCategory = 22 ;
parameterNumber = 5 ;
}
#Streamflow Drought Index (SDI)
'Streamflow Drought Index (SDI)' = {
discipline = 0 ;
parameterCategory = 22 ;
parameterNumber = 6 ;
}
#Universal thermal climate index
'Universal thermal climate index' = {
discipline = 20 ;
@ -7340,12 +7578,6 @@
discipline = 10 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfFirstFixedSurface = 174 ;
typeOfSecondFixedSurface = 176 ;
scaledValueOfFirstFixedSurface = missing() ;
scaleFactorOfFirstFixedSurface = missing() ;
scaledValueOfSecondFixedSurface = missing() ;
scaleFactorOfSecondFixedSurface = missing() ;
}
#Sea ice area fraction
'Sea ice area fraction' = {
@ -8450,12 +8682,6 @@
discipline = 10 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfFirstFixedSurface = 174 ;
typeOfSecondFixedSurface = 176 ;
scaledValueOfFirstFixedSurface = missing() ;
scaleFactorOfFirstFixedSurface = missing() ;
scaledValueOfSecondFixedSurface = missing() ;
scaleFactorOfSecondFixedSurface = missing() ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean sea ice area fraction
@ -10047,6 +10273,44 @@
is_chemical_srcsink = 1 ;
sourceSinkChemicalPhysicalProcess = 7 ;
}
#Aerosol optical depth
'Aerosol optical depth' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 102 ;
}
#Single scattering albedo
'Single scattering albedo' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 103 ;
}
#Asymmetry Factor
'Asymmetry Factor' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 104 ;
}
#Aerosol backscatter from top of atmosphere
'Aerosol backscatter from top of atmosphere' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 107 ;
typeOfFirstFixedSurface = 8 ;
}
#Aerosol backscatter from ground
'Aerosol backscatter from ground' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 108 ;
typeOfFirstFixedSurface = 1 ;
}
#Aerosol extinction coefficient
'Aerosol extinction coefficient' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 105 ;
}
#Pressure tendency
'Pressure tendency' = {
discipline = 0 ;
@ -10575,6 +10839,12 @@
parameterCategory = 0 ;
parameterNumber = 44 ;
}
#Wave spectral peakedness
'Wave spectral peakedness' = {
discipline = 10 ;
parameterCategory = 0 ;
parameterNumber = 98 ;
}
#Skin reservoir content
'Skin reservoir content' = {
discipline = 2 ;

View File

@ -4957,18 +4957,46 @@
parameterNumber = 18 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean snow depth
'235095' = {
#Time-mean wind speed
'235097' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 11 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean snow cover
'235096' = {
#Time-mean pressure
'235098' = {
discipline = 0 ;
parameterCategory = 3 ;
parameterNumber = 0 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean potential vorticity
'235100' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 14 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean specific rain water content
'235101' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 42 ;
parameterNumber = 85 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean specific snow water content
'235102' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 86 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean eta-coordinate vertical velocity
'235103' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 32 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean geopotential
@ -5039,6 +5067,13 @@
typeOfSecondFixedSurface = 8 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean vorticity (relative)
'235138' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 12 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean mean sea level pressure
'235151' = {
discipline = 0 ;
@ -5047,6 +5082,13 @@
typeOfFirstFixedSurface = 101 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean divergence
'235155' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 13 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean relative humidity
'235157' = {
discipline = 0 ;
@ -5091,6 +5133,13 @@
scaleFactorOfFirstFixedSurface = 0 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean ozone mass mixing ratio
'235203' = {
discipline = 0 ;
parameterCategory = 14 ;
parameterNumber = 1 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean temperature of snow layer
'235238' = {
discipline = 2 ;
@ -5114,6 +5163,131 @@
typeOfFirstFixedSurface = 1 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean specific cloud liquid water content
'235246' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 83 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean specific cloud ice water content
'235247' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 84 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean fraction of cloud cover
'235248' = {
discipline = 0 ;
parameterCategory = 6 ;
parameterNumber = 32 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean K index
'235257' = {
discipline = 0 ;
parameterCategory = 7 ;
parameterNumber = 2 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean total totals index
'235258' = {
discipline = 0 ;
parameterCategory = 7 ;
parameterNumber = 4 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean clear air turbulence (CAT)
'235262' = {
discipline = 0 ;
parameterCategory = 19 ;
parameterNumber = 29 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean discharge from rivers or streams
'235270' = {
discipline = 1 ;
parameterCategory = 0 ;
parameterNumber = 7 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean soil wetness index (total layer)
'235271' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 30 ;
typeOfFirstFixedSurface = 1 ;
typeOfSecondFixedSurface = 151 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean soil wetness index (root zone)
'235272' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 30 ;
typeOfFirstFixedSurface = 1 ;
typeOfSecondFixedSurface = 167 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean soil wetness index(layer)
'235273' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 30 ;
typeOfFirstFixedSurface = 151 ;
typeOfSecondFixedSurface = 151 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean floodplain depth
'235274' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 17 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean floodplain flooded fraction
'235275' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 18 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean floodplain flooded area
'235276' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 19 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean river fraction
'235277' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 20 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean river area
'235278' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 21 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean fraction of river coverage plus river related flooding
'235279' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 22 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean area of river coverage plus river related flooding
'235280' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 23 ;
typeOfStatisticalProcessing = 0 ;
}
#Cross sectional area of flow in channel
'240011' = {
discipline = 1 ;
@ -5174,26 +5348,6 @@
parameterCategory = 0 ;
parameterNumber = 15 ;
}
#Mean discharge in the last 6 hours
'240023' = {
discipline = 1 ;
parameterCategory = 0 ;
parameterNumber = 7 ;
typeOfFirstFixedSurface = 1 ;
indicatorOfUnitForTimeRange = 1 ;
typeOfStatisticalProcessing = 0 ;
lengthOfTimeRange = 6 ;
}
#Mean discharge in the last 24 hours
'240024' = {
discipline = 1 ;
parameterCategory = 0 ;
parameterNumber = 7 ;
typeOfFirstFixedSurface = 1 ;
indicatorOfUnitForTimeRange = 1 ;
typeOfStatisticalProcessing = 0 ;
lengthOfTimeRange = 24 ;
}
#Snow depth at elevation bands
'240026' = {
discipline = 2 ;
@ -5246,6 +5400,48 @@
parameterCategory = 0 ;
parameterNumber = 19 ;
}
#Floodplain depth
'240035' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 17 ;
}
#Floodplain flooded fraction
'240036' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 18 ;
}
#Floodplain flooded area
'240037' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 19 ;
}
#River fraction
'240038' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 20 ;
}
#River area
'240039' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 21 ;
}
#Fraction of river coverage plus river related flooding
'240040' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 22 ;
}
#Area of river coverage plus river related flooding
'240041' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 23 ;
}
#Latitude
'250001' = {
discipline = 0 ;
@ -7203,6 +7399,48 @@
typeOfFirstFixedSurface = 1 ;
typeOfSecondFixedSurface = 8 ;
}
#Standardised Precipitation Index (SPI)
'260658' = {
discipline = 0 ;
parameterCategory = 22 ;
parameterNumber = 0 ;
}
#Standardised Precipitation Evapotranspiration Index (SPEI)
'260659' = {
discipline = 0 ;
parameterCategory = 22 ;
parameterNumber = 1 ;
}
#Standardised Streamflow Index (SSFI)
'260660' = {
discipline = 0 ;
parameterCategory = 22 ;
parameterNumber = 2 ;
}
#Standardised Reservoir Supply Index (SRSI)
'260661' = {
discipline = 0 ;
parameterCategory = 22 ;
parameterNumber = 3 ;
}
#Standardised Water-level Index (SWI)
'260662' = {
discipline = 0 ;
parameterCategory = 22 ;
parameterNumber = 4 ;
}
#Standardised Snowmelt and Rain Index (SMRI)
'260663' = {
discipline = 0 ;
parameterCategory = 22 ;
parameterNumber = 5 ;
}
#Streamflow Drought Index (SDI)
'260664' = {
discipline = 0 ;
parameterCategory = 22 ;
parameterNumber = 6 ;
}
#Universal thermal climate index
'261001' = {
discipline = 20 ;
@ -7340,12 +7578,6 @@
discipline = 10 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfFirstFixedSurface = 174 ;
typeOfSecondFixedSurface = 176 ;
scaledValueOfFirstFixedSurface = missing() ;
scaleFactorOfFirstFixedSurface = missing() ;
scaledValueOfSecondFixedSurface = missing() ;
scaleFactorOfSecondFixedSurface = missing() ;
}
#Sea ice area fraction
'262001' = {
@ -8450,12 +8682,6 @@
discipline = 10 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfFirstFixedSurface = 174 ;
typeOfSecondFixedSurface = 176 ;
scaledValueOfFirstFixedSurface = missing() ;
scaleFactorOfFirstFixedSurface = missing() ;
scaledValueOfSecondFixedSurface = missing() ;
scaleFactorOfSecondFixedSurface = missing() ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean sea ice area fraction
@ -10047,6 +10273,44 @@
is_chemical_srcsink = 1 ;
sourceSinkChemicalPhysicalProcess = 7 ;
}
#Aerosol optical depth
'457000' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 102 ;
}
#Single scattering albedo
'458000' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 103 ;
}
#Asymmetry Factor
'459000' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 104 ;
}
#Aerosol backscatter from top of atmosphere
'460000' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 107 ;
typeOfFirstFixedSurface = 8 ;
}
#Aerosol backscatter from ground
'461000' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 108 ;
typeOfFirstFixedSurface = 1 ;
}
#Aerosol extinction coefficient
'462000' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 105 ;
}
#Pressure tendency
'3003' = {
discipline = 0 ;
@ -10575,6 +10839,12 @@
parameterCategory = 0 ;
parameterNumber = 44 ;
}
#Wave spectral peakedness
'140254' = {
discipline = 10 ;
parameterCategory = 0 ;
parameterNumber = 98 ;
}
#Skin reservoir content
'160198' = {
discipline = 2 ;

View File

@ -61,9 +61,6 @@ if (!chemId is "unknown"){
alias parameter.chemShortName = chemShortName;
}
# modelName: Contribution from Daniel Lee @ DWD
concept modelName (defaultName,"modelName.def",conceptsDir2,conceptsDir1): no_copy,dump,read_only;
template_nofail names "grib2/products_[productionStatusOfProcessedData].def";
meta ifsParam ifs_param(paramId,type);

View File

@ -4836,28 +4836,28 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean snow density
'mrsn' = {
'avg_rsn' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 61 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean low vegetation cover
'mcvl' = {
'avg_cvl' = {
discipline = 2 ;
parameterCategory = 0 ;
parameterNumber = 53 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean high vegetation cover
'mcvh' = {
'avg_cvh' = {
discipline = 2 ;
parameterCategory = 0 ;
parameterNumber = 54 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean sea ice area fraction
'mci' = {
'avg_ci' = {
discipline = 10 ;
parameterCategory = 2 ;
parameterNumber = 0 ;
@ -4865,7 +4865,7 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean sea surface temperature
'msst' = {
'avg_sst' = {
discipline = 10 ;
parameterCategory = 3 ;
parameterNumber = 0 ;
@ -4873,21 +4873,21 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean leaf area index, low vegetation
'mlai_lv' = {
'avg_lai_lv' = {
discipline = 2 ;
parameterCategory = 0 ;
parameterNumber = 55 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean leaf area index, high vegetation
'mlai_hv' = {
'avg_lai_hv' = {
discipline = 2 ;
parameterCategory = 0 ;
parameterNumber = 56 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean total column liquid water
'mtclw' = {
'avg_tclw' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 69 ;
@ -4896,7 +4896,7 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean total column cloud ice water
'mtciw' = {
'avg_tciw' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 70 ;
@ -4905,7 +4905,7 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean 2 metre specific humidity
'm2sh' = {
'avg_2sh' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 0 ;
@ -4916,7 +4916,7 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean lake mix-layer temperature
'mlmlt' = {
'avg_lmlt' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
@ -4925,7 +4925,7 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean lake mix-layer depth
'mlmld' = {
'avg_lmld' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 0 ;
@ -4934,7 +4934,7 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean 2 metre relative humidity
'm2r' = {
'avg_2r' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 1 ;
@ -4944,70 +4944,98 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean fraction of snow cover
'mfscov' = {
'avg_fscov' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 121 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean soil temperature
'msot' = {
'avg_sot' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 18 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean snow depth
'msde' = {
#Time-mean wind speed
'avg_ws' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 11 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean snow cover
'msnowc' = {
#Time-mean pressure
'avg_pres' = {
discipline = 0 ;
parameterCategory = 3 ;
parameterNumber = 0 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean potential vorticity
'avg_pv' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 14 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean specific rain water content
'avg_crwc' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 42 ;
parameterNumber = 85 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean specific snow water content
'avg_cswc' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 86 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean eta-coordinate vertical velocity
'avg_etadot' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 32 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean geopotential
'mz' = {
'avg_z' = {
discipline = 0 ;
parameterCategory = 3 ;
parameterNumber = 4 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean temperature
'mt' = {
'avg_t' = {
discipline = 0 ;
parameterCategory = 0 ;
parameterNumber = 0 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean U component of wind
'mu' = {
'avg_u' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 2 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean V component of wind
'mv' = {
'avg_v' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 3 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean specific humidity
'mq' = {
'avg_q' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 0 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean surface pressure
'msp' = {
'avg_sp' = {
discipline = 0 ;
parameterCategory = 3 ;
parameterNumber = 0 ;
@ -5015,14 +5043,14 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean vertical velocity
'mw' = {
'avg_w' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 8 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean total column water
'mtcw' = {
'avg_tcw' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 51 ;
@ -5031,7 +5059,7 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean total column vertically-integrated water vapour
'mtcwv' = {
'avg_tcwv' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 64 ;
@ -5039,30 +5067,44 @@
typeOfSecondFixedSurface = 8 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean vorticity (relative)
'avg_vo' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 12 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean mean sea level pressure
'mmsl' = {
'avg_msl' = {
discipline = 0 ;
parameterCategory = 3 ;
parameterNumber = 0 ;
typeOfFirstFixedSurface = 101 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean divergence
'avg_d' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 13 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean relative humidity
'mr' = {
'avg_r' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 1 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean boundary layer height
'mblh' = {
'avg_blh' = {
discipline = 0 ;
parameterCategory = 3 ;
parameterNumber = 18 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean 10 metre U wind component
'm10u' = {
'avg_10u' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 2 ;
@ -5072,7 +5114,7 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean 10 metre V wind component
'm10v' = {
'avg_10v' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 3 ;
@ -5082,7 +5124,7 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean 2 metre dewpoint temperature
'm2d' = {
'avg_2d' = {
discipline = 0 ;
parameterCategory = 0 ;
parameterNumber = 6 ;
@ -5091,15 +5133,22 @@
scaleFactorOfFirstFixedSurface = 0 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean ozone mass mixing ratio
'avg_o3' = {
discipline = 0 ;
parameterCategory = 14 ;
parameterNumber = 1 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean temperature of snow layer
'mtsn' = {
'avg_tsn' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 28 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean forecast surface roughness
'mfsr' = {
'avg_fsr' = {
discipline = 2 ;
parameterCategory = 0 ;
parameterNumber = 1 ;
@ -5107,13 +5156,138 @@
typeOfStatisticalProcessing = 0 ;
}
#Time-mean forecast logarithm of surface roughness for heat
'mflsr' = {
'avg_flsr' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 54 ;
typeOfFirstFixedSurface = 1 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean specific cloud liquid water content
'avg_clwc' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 83 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean specific cloud ice water content
'avg_ciwc' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 84 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean fraction of cloud cover
'avg_cc' = {
discipline = 0 ;
parameterCategory = 6 ;
parameterNumber = 32 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean K index
'avg_kx' = {
discipline = 0 ;
parameterCategory = 7 ;
parameterNumber = 2 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean total totals index
'avg_totalx' = {
discipline = 0 ;
parameterCategory = 7 ;
parameterNumber = 4 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean clear air turbulence (CAT)
'avg_cat' = {
discipline = 0 ;
parameterCategory = 19 ;
parameterNumber = 29 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean discharge from rivers or streams
'avg_dis' = {
discipline = 1 ;
parameterCategory = 0 ;
parameterNumber = 7 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean soil wetness index (total layer)
'avg_swit' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 30 ;
typeOfFirstFixedSurface = 1 ;
typeOfSecondFixedSurface = 151 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean soil wetness index (root zone)
'avg_swir' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 30 ;
typeOfFirstFixedSurface = 1 ;
typeOfSecondFixedSurface = 167 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean soil wetness index(layer)
'avg_swil' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 30 ;
typeOfFirstFixedSurface = 151 ;
typeOfSecondFixedSurface = 151 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean floodplain depth
'avg_flddep' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 17 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean floodplain flooded fraction
'avg_fldffr' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 18 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean floodplain flooded area
'avg_fldfar' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 19 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean river fraction
'avg_rivfr' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 20 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean river area
'avg_rivar' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 21 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean fraction of river coverage plus river related flooding
'avg_rivcffr' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 22 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean area of river coverage plus river related flooding
'avg_rivcfar' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 23 ;
typeOfStatisticalProcessing = 0 ;
}
#Cross sectional area of flow in channel
'chcross' = {
discipline = 1 ;
@ -5174,26 +5348,6 @@
parameterCategory = 0 ;
parameterNumber = 15 ;
}
#Mean discharge in the last 6 hours
'dis06' = {
discipline = 1 ;
parameterCategory = 0 ;
parameterNumber = 7 ;
typeOfFirstFixedSurface = 1 ;
indicatorOfUnitForTimeRange = 1 ;
typeOfStatisticalProcessing = 0 ;
lengthOfTimeRange = 6 ;
}
#Mean discharge in the last 24 hours
'dis24' = {
discipline = 1 ;
parameterCategory = 0 ;
parameterNumber = 7 ;
typeOfFirstFixedSurface = 1 ;
indicatorOfUnitForTimeRange = 1 ;
typeOfStatisticalProcessing = 0 ;
lengthOfTimeRange = 24 ;
}
#Snow depth at elevation bands
'sd_elev' = {
discipline = 2 ;
@ -5246,6 +5400,48 @@
parameterCategory = 0 ;
parameterNumber = 19 ;
}
#Floodplain depth
'flddep' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 17 ;
}
#Floodplain flooded fraction
'fldffr' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 18 ;
}
#Floodplain flooded area
'fldfar' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 19 ;
}
#River fraction
'rivfr' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 20 ;
}
#River area
'rivar' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 21 ;
}
#Fraction of river coverage plus river related flooding
'rivcffr' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 22 ;
}
#Area of river coverage plus river related flooding
'rivcfar' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 23 ;
}
#Latitude
'lat' = {
discipline = 0 ;
@ -7203,6 +7399,48 @@
typeOfFirstFixedSurface = 1 ;
typeOfSecondFixedSurface = 8 ;
}
#Standardised Precipitation Index (SPI)
'spi' = {
discipline = 0 ;
parameterCategory = 22 ;
parameterNumber = 0 ;
}
#Standardised Precipitation Evapotranspiration Index (SPEI)
'spei' = {
discipline = 0 ;
parameterCategory = 22 ;
parameterNumber = 1 ;
}
#Standardised Streamflow Index (SSFI)
'ssfi' = {
discipline = 0 ;
parameterCategory = 22 ;
parameterNumber = 2 ;
}
#Standardised Reservoir Supply Index (SRSI)
'srsi' = {
discipline = 0 ;
parameterCategory = 22 ;
parameterNumber = 3 ;
}
#Standardised Water-level Index (SWI)
'swi' = {
discipline = 0 ;
parameterCategory = 22 ;
parameterNumber = 4 ;
}
#Standardised Snowmelt and Rain Index (SMRI)
'smri' = {
discipline = 0 ;
parameterCategory = 22 ;
parameterNumber = 5 ;
}
#Streamflow Drought Index (SDI)
'sdi' = {
discipline = 0 ;
parameterCategory = 22 ;
parameterNumber = 6 ;
}
#Universal thermal climate index
'utci' = {
discipline = 20 ;
@ -7340,12 +7578,6 @@
discipline = 10 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfFirstFixedSurface = 174 ;
typeOfSecondFixedSurface = 176 ;
scaledValueOfFirstFixedSurface = missing() ;
scaleFactorOfFirstFixedSurface = missing() ;
scaledValueOfSecondFixedSurface = missing() ;
scaleFactorOfSecondFixedSurface = missing() ;
}
#Sea ice area fraction
'siconc' = {
@ -8450,12 +8682,6 @@
discipline = 10 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfFirstFixedSurface = 174 ;
typeOfSecondFixedSurface = 176 ;
scaledValueOfFirstFixedSurface = missing() ;
scaleFactorOfFirstFixedSurface = missing() ;
scaledValueOfSecondFixedSurface = missing() ;
scaleFactorOfSecondFixedSurface = missing() ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean sea ice area fraction
@ -10047,6 +10273,44 @@
is_chemical_srcsink = 1 ;
sourceSinkChemicalPhysicalProcess = 7 ;
}
#Aerosol optical depth
'aod' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 102 ;
}
#Single scattering albedo
'ssa' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 103 ;
}
#Asymmetry Factor
'asymf' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 104 ;
}
#Aerosol backscatter from top of atmosphere
'aerbscattoa' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 107 ;
typeOfFirstFixedSurface = 8 ;
}
#Aerosol backscatter from ground
'aerbscatgnd' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 108 ;
typeOfFirstFixedSurface = 1 ;
}
#Aerosol extinction coefficient
'aerext' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 105 ;
}
#Pressure tendency
'ptend' = {
discipline = 0 ;
@ -10575,6 +10839,12 @@
parameterCategory = 0 ;
parameterNumber = 44 ;
}
#Wave spectral peakedness
'wsp' = {
discipline = 10 ;
parameterCategory = 0 ;
parameterNumber = 98 ;
}
#Skin reservoir content
'srcrea' = {
discipline = 2 ;

View File

@ -0,0 +1,12 @@
# (C) Copyright 2005- ECMWF.
# TEMPLATE 4.124, Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for radionuclides
include "grib2/template.4.parameter.def"
include "grib2/template.4.chemical.def"
include "grib2/template.4.source.def"
include "grib2/template.4.radionuclides.def"
include "grib2/template.4.generating_process.def"
include "grib2/template.4.forecast_time.def"
include "grib2/template.4.point_in_time.def"
include "grib2/template.4.horizontal.def"

View File

@ -0,0 +1,13 @@
# (C) Copyright 2005- ECMWF.
# TEMPLATE 4.125, Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for radionuclides
include "grib2/template.4.parameter.def"
include "grib2/template.4.chemical.def"
include "grib2/template.4.source.def"
include "grib2/template.4.radionuclides.def"
include "grib2/template.4.generating_process.def"
include "grib2/template.4.forecast_time.def"
include "grib2/template.4.point_in_time.def"
include "grib2/template.4.horizontal.def"
include "grib2/template.4.eps.def"

View File

@ -0,0 +1,12 @@
# (C) Copyright 2005- ECMWF.
# TEMPLATE 4.126, Average, accumulation, and/or extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for radionuclides
include "grib2/template.4.parameter.def"
include "grib2/template.4.chemical.def"
include "grib2/template.4.source.def"
include "grib2/template.4.radionuclides.def"
include "grib2/template.4.generating_process.def"
include "grib2/template.4.forecast_time.def"
include "grib2/template.4.horizontal.def"
include "grib2/template.4.statistical.def"

View File

@ -0,0 +1,14 @@
# (C) Copyright 2005- ECMWF.
# TEMPLATE 4.127, Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for radionuclides
include "grib2/template.4.parameter.def"
include "grib2/template.4.chemical.def"
include "grib2/template.4.source.def"
include "grib2/template.4.radionuclides.def"
include "grib2/template.4.generating_process.def"
include "grib2/template.4.forecast_time.def"
include "grib2/template.4.horizontal.def"
include "grib2/template.4.eps.def"
include "grib2/template.4.statistical.def"

View File

@ -1,60 +1,60 @@
# (C) Copyright 2005- ECMWF.
# TEMPLATE 4.20, Radar product
codetable[1] parameterCategory ('4.1.[discipline:l].table',masterDir,localDir) : dump;
codetable[1] parameterCategory('4.1.[discipline:l].table',masterDir,localDir) : dump;
# Parameter number
codetable[1] parameterNumber ('4.2.[discipline:l].[parameterCategory:l].table',masterDir,localDir) : dump;
codetable[1] parameterNumber('4.2.[discipline:l].[parameterCategory:l].table',masterDir,localDir) : dump;
meta parameterUnits codetable_units(parameterNumber) : dump;
meta parameterName codetable_title(parameterNumber) : dump;
codetable[1] typeOfGeneratingProcess ('4.3.table',masterDir,localDir) : dump;
codetable[1] typeOfGeneratingProcess('4.3.table',masterDir,localDir) : dump;
# Number of radar sites used
unsigned[1] numberOfRadarSitesUsed : dump;
unsigned[1] numberOfRadarSitesUsed : dump;
codetable[1] indicatorOfUnitOfTimeRange ('4.4.table',masterDir,localDir) : dump;
alias indicatorOfUnitForForecastTime = indicatorOfUnitOfTimeRange;
codetable[1] indicatorOfUnitForForecastTime('4.4.table',masterDir,localDir) : dump;
alias indicatorOfUnitOfTimeRange = indicatorOfUnitForForecastTime;
include "grib2/stepUnits.def"
# Site latitude (in microdegrees)
unsigned[4] siteLatitude : dump;
unsigned[4] siteLatitude : dump;
# Site longitude (in microdegrees)
unsigned[4] siteLongitude : dump;
unsigned[4] siteLongitude : dump;
# Site elevation (meters)
unsigned[2] siteElevation : dump;
unsigned[2] siteElevation : dump;
# Site ID (alphanumeric)
unsigned[4] siteId : dump;
unsigned[4] siteId : dump;
# Site ID (numeric)
unsigned[2] siteId : dump;
unsigned[2] siteId : dump;
# Operating mode
codetable[1] operatingMode ('4.12.table',masterDir,localDir) : dump;
codetable[1] operatingMode('4.12.table',masterDir,localDir) : dump;
# Reflectivity calibration constant (tenths of dB)
unsigned[1] reflectivityCalibrationConstant : dump;
unsigned[1] reflectivityCalibrationConstant : dump;
# Quality control indicator
codetable[1] qualityControlIndicator ('4.13.table',masterDir,localDir) : dump;
codetable[1] qualityControlIndicator('4.13.table',masterDir,localDir) : dump;
# Clutter filter indicator
codetable[1] clutterFilterIndicator ('4.14.table',masterDir,localDir) : dump;
codetable[1] clutterFilterIndicator('4.14.table',masterDir,localDir) : dump;
# Constant antenna elevation angle (tenths of degree true)
unsigned[1] constantAntennaElevationAngle : dump;
unsigned[1] constantAntennaElevationAngle : dump;
# Accumulation interval (minutes)
unsigned[2] accumulationInterval : dump;
unsigned[2] accumulationInterval : dump;
# Reference reflectivity for echo top (dB)
unsigned[1] referenceReflectivityForEchoTop : dump;
unsigned[1] referenceReflectivityForEchoTop : dump;
# Range bin spacing (meters)
unsigned[3] rangeBinSpacing : dump;
unsigned[3] rangeBinSpacing : dump;
# Radial angular spacing (tenths of degree true)
unsigned[2] radialAngularSpacing : dump;
unsigned[2] radialAngularSpacing : dump;

View File

@ -1,3 +1,4 @@
# (C) Copyright 2005- ECMWF.
codetable[1] spatialVicinityType ('4.103.table',masterDir,localDir)=255 ;
unsigned[1] numberOfSpatialVicinityValues = 1 : edition_specific;

View File

@ -9,8 +9,8 @@ unsigned[1] minutesAfterDataCutoff = missing() : edition_specific,can_be_missin
alias minutesAfterReferenceTimeOfDataCutoff=minutesAfterDataCutoff;
# Indicator of unit for forecastTime (ECC-1709)
codetable[1] indicatorOfUnitOfTimeRange ('4.4.table',masterDir,localDir) : dump;
alias indicatorOfUnitForForecastTime = indicatorOfUnitOfTimeRange;
codetable[1] indicatorOfUnitForForecastTime ('4.4.table',masterDir,localDir) : dump;
alias indicatorOfUnitOfTimeRange = indicatorOfUnitForForecastTime;
include "grib2/stepUnits.def"

View File

@ -11,8 +11,8 @@ unsigned[1] minutesAfterDataCutoff = missing() : edition_specific,can_be_missin
alias minutesAfterReferenceTimeOfDataCutoff=minutesAfterDataCutoff;
# Indicator of unit for forecastTime (ECC-1709)
codetable[1] indicatorOfUnitOfTimeRange ('4.4.table',masterDir,localDir) : dump;
alias indicatorOfUnitForForecastTime = indicatorOfUnitOfTimeRange;
codetable[1] indicatorOfUnitForForecastTime ('4.4.table',masterDir,localDir) : dump;
alias indicatorOfUnitOfTimeRange = indicatorOfUnitForForecastTime;
include "grib2/stepUnits.def"

View File

@ -34,7 +34,7 @@ localTimeForecastList list(numberOfForecastsUsedInLocalTime)
unsigned[1] secondOfForecastUsedInLocalTime=0 : dump, edition_specific;
# Indicator of unit of time for ForecastTime
codetable[1] indicatorOfUnitForForecastTime ('4.4.table',masterDir,localDir)=1 : dump;
codetable[1] indicatorOfUnitForForecastTime('4.4.table',masterDir,localDir)=1 : dump;
# Length of the time range over which statistical processing is done, in units defined by the previous octet
unsigned[4] forecastTime=0 : dump;
@ -43,7 +43,7 @@ localTimeForecastList list(numberOfForecastsUsedInLocalTime)
unsigned[1] numberOfTimeIncrementsOfForecastsUsedInLocalTime=1 : dump;
# Indicator of unit of time for the increment between the successive steps used
codetable[1] indicatorOfUnitForTimeIncrement ('4.4.table',masterDir,localDir)=255 : dump;
codetable[1] indicatorOfUnitForTimeIncrement('4.4.table',masterDir,localDir)=255 : dump;
# Time increment between successive fields, in units defined by the previous octet
unsigned[4] timeIncrement=0 : dump;

View File

@ -0,0 +1,23 @@
# (C) Copyright 2005- ECMWF
codetable[2] transportModelUsed ('4.333.table',masterDir,localDir) = 255 : dump;
codetable[2] requestedByEntity 'common/c-11.table' : dump,string_type;
codetable[2] scenarioOrigin ('4.335.table',masterDir,localDir) = 255 : dump;
codetable[2] NWPused ('4.336.table',masterDir,localDir) = 255 : dump;
unsigned[2] releaseStartYear : dump;
unsigned[1] releaseStartMonth : dump;
unsigned[1] releaseStartDay : dump;
unsigned[1] releaseStartHour : dump;
unsigned[1] releaseStartMinute : dump;
unsigned[1] releaseStartSecond : dump;
unsigned[2] wallClockInitialTimeOfExecutionYear : dump;
unsigned[1] wallClockInitialTimeOfExecutionMonth : dump;
unsigned[1] wallClockInitialTimeOfExecutionDay : dump;
unsigned[1] wallClockInitialTimeOfExecutionHour : dump;
unsigned[1] wallClockInitialTimeOfExecutionMinute : dump;
unsigned[1] wallClockInitialTimeOfExecutionSecond : dump;

View File

@ -1,10 +1,11 @@
# Type of reference dataset
# (C) Copyright 2005- ECMWF.
# Type of reference dataset
codetable[1] typeOfReferenceDataset ('4.100.table',masterDir,localDir) = 255 : dump,edition_specific;
# Type of relation to reference dataset
# Type of relation to reference dataset
codetable[1] typeOfRelationToReferenceDataset ('4.101.table',masterDir,localDir) = 255 : dump,edition_specific;
# number of additional parameters
# Number of additional parameters
unsigned[1] numberOfAdditionalParametersForReferencePeriod=0 ;
additionalParameter list(numberOfAdditionalParametersForReferencePeriod)
{
@ -32,7 +33,7 @@ meta startDateOfReferencePeriod g2date(yearOfStartOfReferencePeriod,monthOfStart
unsigned[4] sampleSizeOfReferencePeriod = 0;
# n - number of time range specifications describing the time intervals used to calculate the statistically-processed field
# Number of time range specifications describing the time intervals used to calculate the statistically-processed field
unsigned[1] numberOfReferencePeriodTimeRanges = 1 : edition_specific;
alias nref = numberOfReferencePeriodTimeRanges;

View File

@ -1,3 +1,4 @@
# (C) Copyright 2005- ECMWF.
# The Model Version Date
# This is the date when the reforecast is produced with a particular version of the model

View File

@ -1,3 +1,4 @@
# (C) Copyright 2005- ECMWF.
# Template for wave parameters
## Direction part

View File

@ -1,3 +1,4 @@
# (C) Copyright 2005- ECMWF.
# Template for wave parameters defined on a certain period range
# Type of period interval

View File

@ -1,3 +1,4 @@
# (C) Copyright 2005- ECMWF.
# Template for wave spectra defined using a formula for frequency and direction
## Direction part

View File

@ -1,3 +1,5 @@
# (C) Copyright 2005- ECMWF.
# Template for wave spectra defined using an array of frequencies and directions
## Direction part

View File

@ -200,13 +200,13 @@
parameterNumber = 54 ;
}
#Type of low vegetation
'(code table 4.234)' = {
'(Code table 4.234)' = {
discipline = 2 ;
parameterCategory = 0 ;
parameterNumber = 57 ;
}
#Type of high vegetation
'(code table 4.234)' = {
'(Code table 4.234)' = {
discipline = 2 ;
parameterCategory = 0 ;
parameterNumber = 58 ;
@ -232,7 +232,7 @@
typeOfFirstFixedSurface = 1 ;
}
#Soil type
'~' = {
'(Code table 4.213)' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 0 ;
@ -3418,7 +3418,7 @@
parameterNumber = 45 ;
}
#Wetland type
'Code table 4.239' = {
'(Code table 4.239)' = {
discipline = 2 ;
parameterCategory = 0 ;
parameterNumber = 46 ;
@ -4957,18 +4957,46 @@
parameterNumber = 18 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean snow depth
'm' = {
#Time-mean wind speed
'm s**-1' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 11 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean snow cover
'%' = {
#Time-mean pressure
'Pa' = {
discipline = 0 ;
parameterCategory = 3 ;
parameterNumber = 0 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean potential vorticity
'K m**2 kg**-1 s**-1' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 14 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean specific rain water content
'kg kg**-1' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 42 ;
parameterNumber = 85 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean specific snow water content
'kg kg**-1' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 86 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean eta-coordinate vertical velocity
's**-1' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 32 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean geopotential
@ -5039,6 +5067,13 @@
typeOfSecondFixedSurface = 8 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean vorticity (relative)
's**-1' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 12 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean mean sea level pressure
'Pa' = {
discipline = 0 ;
@ -5047,6 +5082,13 @@
typeOfFirstFixedSurface = 101 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean divergence
's**-1' = {
discipline = 0 ;
parameterCategory = 2 ;
parameterNumber = 13 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean relative humidity
'%' = {
discipline = 0 ;
@ -5091,6 +5133,13 @@
scaleFactorOfFirstFixedSurface = 0 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean ozone mass mixing ratio
'kg kg**-1' = {
discipline = 0 ;
parameterCategory = 14 ;
parameterNumber = 1 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean temperature of snow layer
'K' = {
discipline = 2 ;
@ -5114,6 +5163,131 @@
typeOfFirstFixedSurface = 1 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean specific cloud liquid water content
'kg kg**-1' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 83 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean specific cloud ice water content
'kg kg**-1' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 84 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean fraction of cloud cover
'(0 - 1)' = {
discipline = 0 ;
parameterCategory = 6 ;
parameterNumber = 32 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean K index
'K' = {
discipline = 0 ;
parameterCategory = 7 ;
parameterNumber = 2 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean total totals index
'K' = {
discipline = 0 ;
parameterCategory = 7 ;
parameterNumber = 4 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean clear air turbulence (CAT)
'm**2/3 s**-1' = {
discipline = 0 ;
parameterCategory = 19 ;
parameterNumber = 29 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean discharge from rivers or streams
'm**3 s**-1' = {
discipline = 1 ;
parameterCategory = 0 ;
parameterNumber = 7 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean soil wetness index (total layer)
'Numeric' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 30 ;
typeOfFirstFixedSurface = 1 ;
typeOfSecondFixedSurface = 151 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean soil wetness index (root zone)
'Numeric' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 30 ;
typeOfFirstFixedSurface = 1 ;
typeOfSecondFixedSurface = 167 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean soil wetness index(layer)
'Numeric' = {
discipline = 2 ;
parameterCategory = 3 ;
parameterNumber = 30 ;
typeOfFirstFixedSurface = 151 ;
typeOfSecondFixedSurface = 151 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean floodplain depth
'm' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 17 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean floodplain flooded fraction
'Proportion' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 18 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean floodplain flooded area
'm**2' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 19 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean river fraction
'Proportion' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 20 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean river area
'm**2' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 21 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean fraction of river coverage plus river related flooding
'Proportion' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 22 ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean area of river coverage plus river related flooding
'm**2' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 23 ;
typeOfStatisticalProcessing = 0 ;
}
#Cross sectional area of flow in channel
'm**2' = {
discipline = 1 ;
@ -5174,26 +5348,6 @@
parameterCategory = 0 ;
parameterNumber = 15 ;
}
#Mean discharge in the last 6 hours
'm**3 s**-1' = {
discipline = 1 ;
parameterCategory = 0 ;
parameterNumber = 7 ;
typeOfFirstFixedSurface = 1 ;
indicatorOfUnitForTimeRange = 1 ;
typeOfStatisticalProcessing = 0 ;
lengthOfTimeRange = 6 ;
}
#Mean discharge in the last 24 hours
'm**3 s**-1' = {
discipline = 1 ;
parameterCategory = 0 ;
parameterNumber = 7 ;
typeOfFirstFixedSurface = 1 ;
indicatorOfUnitForTimeRange = 1 ;
typeOfStatisticalProcessing = 0 ;
lengthOfTimeRange = 24 ;
}
#Snow depth at elevation bands
'kg m**-2' = {
discipline = 2 ;
@ -5246,6 +5400,48 @@
parameterCategory = 0 ;
parameterNumber = 19 ;
}
#Floodplain depth
'm' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 17 ;
}
#Floodplain flooded fraction
'Proportion' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 18 ;
}
#Floodplain flooded area
'm**2' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 19 ;
}
#River fraction
'Proportion' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 20 ;
}
#River area
'm**2' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 21 ;
}
#Fraction of river coverage plus river related flooding
'Proportion' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 22 ;
}
#Area of river coverage plus river related flooding
'm**2' = {
discipline = 1 ;
parameterCategory = 2 ;
parameterNumber = 23 ;
}
#Latitude
'Degree N' = {
discipline = 0 ;
@ -5419,7 +5615,7 @@
parameterNumber = 18 ;
}
#Precipitation type
'code table (4.201)' = {
'(Code table 4.201)' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 19 ;
@ -5487,7 +5683,7 @@
typeOfStatisticalProcessing = 1 ;
}
#Precipitable water category
'code table (4.202)' = {
'(Code table 4.202)' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 30 ;
@ -5904,7 +6100,7 @@
parameterNumber = 7 ;
}
#Cloud type
'code table (4.203)' = {
'(Code table 4.203)' = {
discipline = 0 ;
parameterCategory = 6 ;
parameterNumber = 8 ;
@ -5916,7 +6112,7 @@
parameterNumber = 9 ;
}
#Thunderstorm coverage
'code table (4.204)' = {
'(Code table 4.204)' = {
discipline = 0 ;
parameterCategory = 6 ;
parameterNumber = 10 ;
@ -6048,7 +6244,7 @@
parameterNumber = 11 ;
}
#Aerosol type
'code table (4.205)' = {
'(Code table 4.205)' = {
discipline = 0 ;
parameterCategory = 13 ;
parameterNumber = 0 ;
@ -6158,7 +6354,7 @@
parameterNumber = 8 ;
}
#Volcanic ash
'code table (4.206)' = {
'(Code table 4.206)' = {
discipline = 0 ;
parameterCategory = 19 ;
parameterNumber = 4 ;
@ -6176,7 +6372,7 @@
parameterNumber = 6 ;
}
#Icing
'code table (4.207)' = {
'(Code table 4.207)' = {
discipline = 0 ;
parameterCategory = 19 ;
parameterNumber = 7 ;
@ -6194,7 +6390,7 @@
parameterNumber = 9 ;
}
#Turbulence
'code table (4.208)' = {
'(Code table 4.208)' = {
discipline = 0 ;
parameterCategory = 19 ;
parameterNumber = 10 ;
@ -6206,19 +6402,19 @@
parameterNumber = 11 ;
}
#Planetary boundary layer regime
'code table (4.209)' = {
'(Code table 4.209)' = {
discipline = 0 ;
parameterCategory = 19 ;
parameterNumber = 12 ;
}
#Contrail intensity
'code table (4.210)' = {
'(Code table 4.210)' = {
discipline = 0 ;
parameterCategory = 19 ;
parameterNumber = 13 ;
}
#Contrail engine type
'code table (4.211)' = {
'(Code table 4.211)' = {
discipline = 0 ;
parameterCategory = 19 ;
parameterNumber = 14 ;
@ -6296,13 +6492,13 @@
parameterNumber = 1 ;
}
#Remotely sensed snow cover
'(code table 4.215)' = {
'(Code table 4.215)' = {
discipline = 1 ;
parameterCategory = 0 ;
parameterNumber = 2 ;
}
#Elevation of snow covered terrain
'(code table 4.216)' = {
'(Code table 4.216)' = {
discipline = 1 ;
parameterCategory = 0 ;
parameterNumber = 3 ;
@ -6368,7 +6564,7 @@
parameterNumber = 7 ;
}
#Land use
'code table (4.212)' = {
'(Code table 4.212)' = {
discipline = 2 ;
parameterCategory = 0 ;
parameterNumber = 8 ;
@ -6536,7 +6732,7 @@
parameterNumber = 2 ;
}
#Cloud top height quality indicator
'Code table 4.219' = {
'(Code table 4.219)' = {
discipline = 3 ;
parameterCategory = 1 ;
parameterNumber = 3 ;
@ -6742,7 +6938,7 @@
parameterNumber = 0 ;
}
#Precipitation type (most severe) in the last 1 hour
'code table (4.201)' = {
'(Code table 4.201)' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 19 ;
@ -6751,7 +6947,7 @@
lengthOfTimeRange = 1 ;
}
#Precipitation type (most severe) in the last 3 hours
'code table (4.201)' = {
'(Code table 4.201)' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 19 ;
@ -6760,7 +6956,7 @@
lengthOfTimeRange = 3 ;
}
#Precipitation type (most frequent) in the last 1 hour
'code table (4.201)' = {
'(Code table 4.201)' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 19 ;
@ -6769,7 +6965,7 @@
lengthOfTimeRange = 1 ;
}
#Precipitation type (most frequent) in the last 3 hours
'code table (4.201)' = {
'(Code table 4.201)' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 19 ;
@ -6778,7 +6974,7 @@
lengthOfTimeRange = 3 ;
}
#Precipitation type (most severe) in the last 6 hours
'code table (4.201)' = {
'(Code table 4.201)' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 19 ;
@ -6787,7 +6983,7 @@
lengthOfTimeRange = 6 ;
}
#Precipitation type (most frequent) in the last 6 hours
'code table (4.201)' = {
'(Code table 4.201)' = {
discipline = 0 ;
parameterCategory = 1 ;
parameterNumber = 19 ;
@ -6963,19 +7159,19 @@
parameterNumber = 6 ;
}
#Cloud mask
'Code table 4.217' = {
'(Code table 4.217)' = {
discipline = 3 ;
parameterCategory = 0 ;
parameterNumber = 7 ;
}
#Pixel scene type
'Code table 4.218' = {
'(Code table 4.218)' = {
discipline = 3 ;
parameterCategory = 0 ;
parameterNumber = 8 ;
}
#Fire detection indicator
'Code table 4.223' = {
'(Code table 4.223)' = {
discipline = 3 ;
parameterCategory = 0 ;
parameterNumber = 9 ;
@ -7203,6 +7399,48 @@
typeOfFirstFixedSurface = 1 ;
typeOfSecondFixedSurface = 8 ;
}
#Standardised Precipitation Index (SPI)
'Numeric' = {
discipline = 0 ;
parameterCategory = 22 ;
parameterNumber = 0 ;
}
#Standardised Precipitation Evapotranspiration Index (SPEI)
'Numeric' = {
discipline = 0 ;
parameterCategory = 22 ;
parameterNumber = 1 ;
}
#Standardised Streamflow Index (SSFI)
'Numeric' = {
discipline = 0 ;
parameterCategory = 22 ;
parameterNumber = 2 ;
}
#Standardised Reservoir Supply Index (SRSI)
'Numeric' = {
discipline = 0 ;
parameterCategory = 22 ;
parameterNumber = 3 ;
}
#Standardised Water-level Index (SWI)
'Numeric' = {
discipline = 0 ;
parameterCategory = 22 ;
parameterNumber = 4 ;
}
#Standardised Snowmelt and Rain Index (SMRI)
'Numeric' = {
discipline = 0 ;
parameterCategory = 22 ;
parameterNumber = 5 ;
}
#Streamflow Drought Index (SDI)
'Numeric' = {
discipline = 0 ;
parameterCategory = 22 ;
parameterNumber = 6 ;
}
#Universal thermal climate index
'K' = {
discipline = 20 ;
@ -7340,12 +7578,6 @@
discipline = 10 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfFirstFixedSurface = 174 ;
typeOfSecondFixedSurface = 176 ;
scaledValueOfFirstFixedSurface = missing() ;
scaleFactorOfFirstFixedSurface = missing() ;
scaledValueOfSecondFixedSurface = missing() ;
scaleFactorOfSecondFixedSurface = missing() ;
}
#Sea ice area fraction
'Fraction' = {
@ -8450,12 +8682,6 @@
discipline = 10 ;
parameterCategory = 2 ;
parameterNumber = 1 ;
typeOfFirstFixedSurface = 174 ;
typeOfSecondFixedSurface = 176 ;
scaledValueOfFirstFixedSurface = missing() ;
scaleFactorOfFirstFixedSurface = missing() ;
scaledValueOfSecondFixedSurface = missing() ;
scaleFactorOfSecondFixedSurface = missing() ;
typeOfStatisticalProcessing = 0 ;
}
#Time-mean sea ice area fraction
@ -10047,6 +10273,44 @@
is_chemical_srcsink = 1 ;
sourceSinkChemicalPhysicalProcess = 7 ;
}
#Aerosol optical depth
'Numeric' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 102 ;
}
#Single scattering albedo
'(0 - 1)' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 103 ;
}
#Asymmetry Factor
'Numeric' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 104 ;
}
#Aerosol backscatter from top of atmosphere
'm**-1 sr**-1' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 107 ;
typeOfFirstFixedSurface = 8 ;
}
#Aerosol backscatter from ground
'm**-1 sr**-1' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 108 ;
typeOfFirstFixedSurface = 1 ;
}
#Aerosol extinction coefficient
'm**-1' = {
discipline = 0 ;
parameterCategory = 20 ;
parameterNumber = 105 ;
}
#Pressure tendency
'Pa s**-1' = {
discipline = 0 ;
@ -10575,6 +10839,12 @@
parameterCategory = 0 ;
parameterNumber = 44 ;
}
#Wave spectral peakedness
'dimensionless' = {
discipline = 10 ;
parameterCategory = 0 ;
parameterNumber = 98 ;
}
#Skin reservoir content
'kg m**-2' = {
discipline = 2 ;

View File

@ -1,43 +0,0 @@
# modelName: Contribution from Daniel Lee @ DWD
# COSMO
# general definition
'cosmo' = { originatingCentre=250; }
'cosmo' = { subCentre=250; }
# definitions for ARPA-SIMC
'cosmo-i2' = { originatingCentre=200;
generatingProcessIdentifier=36; }
'cosmo-i2' = { originatingCentre=200;
generatingProcessIdentifier=139; }
'cosmo-i2' = { originatingCentre=200;
generatingProcessIdentifier=144; }
'cosmo-i2' = { originatingCentre=200;
generatingProcessIdentifier=148; }
'cosmo-i7' = { originatingCentre=200;
generatingProcessIdentifier=31; }
'cosmo-i7' = { originatingCentre=200;
generatingProcessIdentifier=32; }
'cosmo-i7' = { originatingCentre=200;
generatingProcessIdentifier=34; }
'cosmo-i7' = { originatingCentre=200;
generatingProcessIdentifier=38; }
'cosmo-i7' = { originatingCentre=200;
generatingProcessIdentifier=42; }
'cosmo-i7' = { originatingCentre=200;
generatingProcessIdentifier=46; }
'cosmo-i7' = { originatingCentre=200;
generatingProcessIdentifier=131; }
# definitions for Moscow
'cosmo_ru' = { originatingCentre=76;
generatingProcessIdentifier=135; }
'cosmo_ru-eps' = { originatingCentre=76;
generatingProcessIdentifier=235;}
# definitions for Athens
'cosmo-greece' = { originatingCentre=96;}
# definitions for Warsaw / Poland
'cosmo-poland' = { originatingCentre=220;}
# definitions for Romania
'cosmo-romania' = { originatingCentre=242;}

View File

@ -23,9 +23,6 @@ concept cfName (cfNameECMF,"cfName.def",conceptsMasterDir,conceptsLocalDirAll) :
concept cfVarNameECMF (defaultShortName,"cfVarName.def",conceptsMasterDir,conceptsLocalDirECMF) : no_copy,dump;
concept cfVarName (cfVarNameECMF,"cfVarName.def",conceptsMasterDir,conceptsLocalDirAll) : no_copy,dump;
# modelName: Contribution from Daniel Lee @ DWD
concept modelName (defaultName,"modelName.def",conceptsMasterDir,conceptsLocalDirAll): no_copy,dump,read_only;
template_nofail names "grib3/products_[productionStatusOfProcessedData].def";
meta ifsParam ifs_param(paramId,type);

View File

@ -0,0 +1,23 @@
#no step in type an
unalias mars.step;
if (class is "od") { alias mars.system = systemNumber; }
if (class is "me") { alias mars.system = systemNumber; }
if (class is "en") { alias mars.system = systemNumber; }
if (class is "c3") { alias mars.system = systemNumber; }
if (class is "ci") { alias mars.system = systemNumber; }
alias mars.number = perturbationNumber;
alias mars.method = methodNumber;
if (!(class is "gw")) { # ECC-1448
alias mars.origin = centre;
}
# See ECC-624
if (centre == 80 && subCentre == 98 && class is "c3") {
constant cnmc_cmcc = 'cmcc';
alias mars.origin = cnmc_cmcc;
}
if (class is "ci") { unalias mars.method; }

View File

@ -0,0 +1 @@
alias mars.step = stepRange;

View File

@ -0,0 +1 @@
alias mars.step = stepRange;

View File

@ -0,0 +1 @@
alias mars.step = stepRange;

View File

@ -0,0 +1,7 @@
if (levtype is "o2d" || levtype is "o3d") {
alias mars.step = stepRange;
} else {
alias mars.step = endStep;
}
alias mars.number = perturbationNumber;

View File

@ -9,11 +9,22 @@
*/
#include <pthread.h>
#include "grib_api_internal.h"
#include <stdio.h>
#include <stdlib.h>
/*#include "grib_api_internal.h"*/
#include "eccodes.h"
#define NUM_THREADS 4
void Assert(int condition)
{
if (!condition) {
printf("Assertion failed\n");
exit(1);
}
}
/* Return 0 if numbers considered equal, otherwise 1 */
static int compare_doubles(double a, double b, double tolerance)
{
@ -40,7 +51,7 @@ static void* process_grib(void* threadID)
ProductKind prod_kind = 0;
codes_handle* h = codes_grib_handle_new_from_samples(0, "regular_ll_pl_grib2");
Assert(h);
Assert(h != NULL);
CODES_CHECK(codes_get_product_kind(h, &prod_kind), 0);
Assert(prod_kind == PRODUCT_GRIB);
printf("Thread %ld running\n", tid);

View File

@ -42,7 +42,7 @@ if( HAVE_FORTRAN )
# Note: $<BUILD_INTERFACE:...> will be present only while building (for the whole bundle),
# whereas $<INSTALL_INTERFACE:...> is only present once you install the package / bundle
ecbuild_add_library( TARGET eccodes_f90
SOURCES grib_fortran.c grib_f90.f90 eccodes_f90.f90 grib_kinds.h
SOURCES grib_fortran.cc grib_f90.f90 eccodes_f90.f90 grib_kinds.h
GENERATED grib_f90.f90 eccodes_f90.f90
PUBLIC_INCLUDES $<BUILD_INTERFACE:${CMAKE_Fortran_MODULE_DIRECTORY}>
$<INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR}>

View File

@ -9,6 +9,7 @@
*/
#include "grib_api_internal.h"
#include "grib_fortran_prototypes.h"
#if HAVE_SYS_TYPES_H
# include <sys/types.h>
@ -986,7 +987,7 @@ void grib_f_write_on_fail(int* gid) {
file_count++;
GRIB_MUTEX_UNLOCK(&handle_mutex)
sprintf(filename,"%ld_%d_error.grib",(long)pid,file_count);
snprintf(filename, sizeof(filename), "%ld_%d_error.grib",(long)pid,file_count);
h=get_handle(*gid);
if (h) grib_write_message(h,filename,"w");
@ -1249,7 +1250,7 @@ int grib_f_keys_iterator_get_name_(int* iterid,char* name,int len)
fort_char_clean(name, len);
sprintf(buf,"%s",grib_keys_iterator_get_name(kiter));
snprintf(buf, sizeof(buf), "%s",grib_keys_iterator_get_name(kiter));
lsize = strlen(buf);
if (input_len < lsize) return GRIB_ARRAY_TOO_SMALL;
@ -1321,7 +1322,7 @@ int codes_f_bufr_keys_iterator_get_name_(int* iterid, char* name, int len)
fort_char_clean(name, len);
sprintf(buf, "%s", codes_bufr_keys_iterator_get_name(kiter));
snprintf(buf, sizeof(buf), "%s", codes_bufr_keys_iterator_get_name(kiter));
lsize = strlen(buf);
if (input_len < lsize) return GRIB_ARRAY_TOO_SMALL;

View File

@ -0,0 +1,332 @@
/*
* Copyright 2005-2018 ECMWF.
*
* This software is licensed under the terms of the Apache Licence Version 2.0
* which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
*
* In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
/* grib_fortran.c */
#ifdef __cplusplus
extern "C" {
#endif
int grib_f_read_any_headers_only_from_file_(int *fid, char *buffer, size_t *nbytes);
int grib_f_write_file_(int* fid, void* buffer, size_t* nbytes);
int any_f_new_from_loaded_(int* msgid, int* gid);
int codes_f_bufr_copy_data_(int* gid1,int* gid2);
int grib_f_get_string_array_(int* gid, char* key, char* val,int* nvals,int* slen, int len);
int codes_f_bufr_keys_iterator_rewind_(int* kiter);
int any_f_scan_file_(int* fid, int* n);
int grib_f_new_from_message_int_(int* gid, int* buffer , size_t* bufsize);
int grib_f_copy_key_(int* gidsrc, char* key, int* giddest, int len);
int grib_f_set_samples_path_(char* path, int len);
int grib_f_read_file(int *fid, char *buffer, size_t *nbytes);
int grib_f_open_file_(int *fid, char *name, char *op, int lname, int lop);
int grib_f_open_file__(int *fid, char *name, char *op, int lname, int lop);
int grib_f_open_file(int *fid, char *name, char *op, int lname, int lop);
int grib_f_close_file_(int *fid);
int grib_f_close_file__(int *fid);
int grib_f_close_file(int *fid);
void grib_f_write_on_fail(int *gid);
void grib_f_write_on_fail_(int* gid);
void grib_f_write_on_fail__(int* gid);
int grib_f_multi_support_on_(void);
int grib_f_multi_support_on__(void);
int grib_f_multi_support_on(void);
int grib_f_multi_support_off_(void);
int grib_f_multi_support_off__(void);
int grib_f_multi_support_off(void);
int grib_f_iterator_new_(int *gid, int *iterid, int *mode);
int grib_f_iterator_new__(int *gid, int *iterid, int *mode);
int grib_f_iterator_new(int *gid, int *iterid, int *mode);
int grib_f_iterator_next_(int *iterid, double *lat, double *lon, double *value);
int grib_f_iterator_next__(int *iterid, double *lat, double *lon, double *value);
int grib_f_iterator_next(int *iterid, double *lat, double *lon, double *value);
int grib_f_iterator_delete_(int *iterid);
int grib_f_iterator_delete__(int *iterid);
int grib_f_iterator_delete(int *iterid);
int grib_f_keys_iterator_new_(int *gid, int *iterid, char *name_space, int len);
int grib_f_keys_iterator_new__(int *gid, int *iterid, char *name_space, int len);
int grib_f_keys_iterator_new(int *gid, int *iterid, char *name_space, int len);
int grib_f_keys_iterator_next_(int *iterid);
int grib_f_keys_iterator_next__(int *iterid);
int grib_f_keys_iterator_next(int *iterid);
int grib_f_keys_iterator_delete_(int *iterid);
int grib_f_keys_iterator_delete__(int *iterid);
int grib_f_keys_iterator_delete(int *iterid);
int grib_f_gribex_mode_on_(void);
int grib_f_gribex_mode_on__(void);
int grib_f_gribex_mode_on(void);
int grib_f_gribex_mode_off_(void);
int grib_f_gribex_mode_off__(void);
int grib_f_gribex_mode_off(void);
int grib_f_skip_computed_(int *iterid);
int grib_f_skip_computed__(int *iterid);
int grib_f_skip_computed(int *iterid);
int grib_f_skip_coded_(int *iterid);
int grib_f_skip_coded__(int *iterid);
int grib_f_skip_coded(int *iterid);
int grib_f_skip_edition_specific_(int *iterid);
int grib_f_skip_edition_specific__(int *iterid);
int grib_f_skip_edition_specific(int *iterid);
int grib_f_skip_duplicates_(int *iterid);
int grib_f_skip_duplicates__(int *iterid);
int grib_f_skip_duplicates(int *iterid);
int grib_f_skip_read_only_(int *iterid);
int grib_f_skip_read_only__(int *iterid);
int grib_f_skip_read_only(int *iterid);
int grib_f_skip_function_(int *iterid);
int grib_f_skip_function__(int *iterid);
int grib_f_skip_function(int *iterid);
int grib_f_keys_iterator_get_name_(int *iterid, char *name, int len);
int grib_f_keys_iterator_get_name__(int *kiter, char *name, int len);
int grib_f_keys_iterator_get_name(int *kiter, char *name, int len);
int grib_f_keys_iterator_rewind_(int *kiter);
int grib_f_keys_iterator_rewind__(int *kiter);
int grib_f_keys_iterator_rewind(int *kiter);
int grib_f_new_from_message_(int *gid, void *buffer, size_t *bufsize);
int grib_f_new_from_message__(int *gid, void *buffer, size_t *bufsize);
int grib_f_new_from_message(int *gid, void *buffer, size_t *bufsize);
int grib_f_new_from_message_copy_(int *gid, void *buffer, size_t *bufsize);
int grib_f_new_from_message_copy__(int *gid, void *buffer, size_t *bufsize);
int grib_f_new_from_message_copy(int *gid, void *buffer, size_t *bufsize);
int grib_f_new_from_samples_(int *gid, char *name, int lname);
int grib_f_new_from_samples__(int *gid, char *name, int lname);
int grib_f_new_from_samples(int *gid, char *name, int lname);
int grib_f_new_from_template_(int *gid, char *name, int lname);
int grib_f_new_from_template__(int *gid, char *name, int lname);
int grib_f_new_from_template(int *gid, char *name, int lname);
int grib_f_clone_(int *gidsrc, int *giddest);
int grib_f_clone__(int *gidsrc, int *giddest);
int grib_f_clone(int *gidsrc, int *giddest);
int grib_f_util_sections_copy_(int *gidfrom, int *gidto, int *what, int *gidout);
int grib_f_util_sections_copy__(int *gidfrom, int *gidto, int *what, int *gidout);
int grib_f_util_sections_copy(int *gidfrom, int *gidto, int *what, int *gidout);
int grib_f_copy_namespace_(int *gidsrc, char *name, int *giddest, int len);
int grib_f_copy_namespace__(int *gidsrc, char *name, int *giddest, int len);
int grib_f_copy_namespace(int *gidsrc, char *name, int *giddest, int len);
int grib_f_count_in_file(int *fid, int *n);
int grib_f_count_in_file_(int *fid, int *n);
int grib_f_count_in_file__(int *fid, int *n);
int grib_f_new_from_file_(int *fid, int *gid);
int grib_f_new_from_file__(int *fid, int *gid);
int grib_f_new_from_file(int *fid, int *gid);
int grib_f_headers_only_new_from_file_(int *fid, int *gid);
int grib_f_headers_only_new_from_file__(int *fid, int *gid);
int grib_f_headers_only_new_from_file(int *fid, int *gid);
int grib_f_new_from_index_(int *iid, int *gid);
int grib_f_new_from_index__(int *iid, int *gid);
int grib_f_new_from_index(int *iid, int *gid);
int grib_f_index_new_from_file_(char *file, char *keys, int *gid, int lfile, int lkeys);
int grib_f_index_new_from_file__(char *file, char *keys, int *gid, int lfile, int lkeys);
int grib_f_index_new_from_file(char *file, char *keys, int *gid, int lfile, int lkeys);
int grib_f_index_add_file_(int* iid, char* file, int lfile);
int grib_f_index_add_file__(int* iid, char* file, int lfile);
int grib_f_index_add_file(int* iid, char* file, int lfile);
int grib_f_index_read_(char *file, int *gid, int lfile);
int grib_f_index_read__(char *file, int *gid, int lfile);
int grib_f_index_read(char *file, int *gid, int lfile);
int grib_f_index_write_(int *gid, char *file, int lfile);
int grib_f_index_write__(int *gid, char *file, int lfile);
int grib_f_index_write(int *gid, char *file, int lfile);
int grib_f_index_release_(int *hid);
int grib_f_index_release__(int *hid);
int grib_f_index_release(int *hid);
int grib_f_multi_handle_release_(int *hid);
int grib_f_multi_handle_release__(int *hid);
int grib_f_multi_handle_release(int *hid);
int grib_f_release_(int *hid);
int grib_f_release__(int *hid);
int grib_f_release(int *hid);
int grib_f_dump_(int *gid);
int grib_f_dump__(int *gid);
int grib_f_dump(int *gid);
int grib_f_print_(int *gid, char *key, int len);
int grib_f_print__(int *gid, char *key, int len);
int grib_f_print(int *gid, char *key, int len);
int grib_f_get_error_string_(int *err, char *buf, int len);
int grib_f_get_error_string__(int *err, char *buf, int len);
int grib_f_get_error_string(int *err, char *buf, int len);
int grib_f_get_size_int_(int *gid, char *key, int *val, int len);
int grib_f_get_size_int__(int *gid, char *key, int *val, int len);
int grib_f_get_size_int(int *gid, char *key, int *val, int len);
int grib_f_get_size_long_(int *gid, char *key, long *val, int len);
int grib_f_get_size_long__(int *gid, char *key, long *val, int len);
int grib_f_get_size_long(int *gid, char *key, long *val, int len);
int grib_f_index_get_size_int_(int *gid, char *key, int *val, int len);
int grib_f_index_get_size_int__(int *gid, char *key, int *val, int len);
int grib_f_index_get_size_int(int *gid, char *key, int *val, int len);
int grib_f_index_get_size_long_(int *gid, char *key, long *val, int len);
int grib_f_index_get_size_long__(int *gid, char *key, long *val, int len);
int grib_f_index_get_size_long(int *gid, char *key, long *val, int len);
int grib_f_get_int_(int *gid, char *key, int *val, int len);
int grib_f_get_int__(int *gid, char *key, int *val, int len);
int grib_f_get_int(int *gid, char *key, int *val, int len);
int grib_f_get_long_(int *gid, char *key, long *val, int len);
int grib_f_get_long__(int *gid, char *key, long *val, int len);
int grib_f_get_long(int *gid, char *key, long *val, int len);
int grib_f_get_int_array_(int *gid, char *key, int *val, int *size, int len);
int grib_f_get_int_array__(int *gid, char *key, int *val, int *size, int len);
int grib_f_get_int_array(int *gid, char *key, int *val, int *size, int len);
int grib_f_get_long_array_(int *gid, char *key, long *val, int *size, int len);
int grib_f_get_long_array__(int *gid, char *key, long *val, int *size, int len);
int grib_f_get_long_array(int *gid, char *key, long *val, int *size, int len);
int grib_f_get_byte_array_(int* gid, char* key, unsigned char *val, int* size, int len, int lenv);
int grib_f_get_byte_array__(int* gid, char* key, unsigned char *val, int* size, int len, int lenv);
int grib_f_get_byte_array(int* gid, char* key, unsigned char *val, int* size, int len, int lenv);
int grib_f_index_get_string_(int *gid, char *key, char *val, int *eachsize, int *size, int len);
int grib_f_index_get_string__(int *gid, char *key, char *val, int *eachsize, int *size, int len);
int grib_f_index_get_string(int *gid, char *key, char *val, int *eachsize, int *size, int len);
int grib_f_index_get_long_(int *gid, char *key, long *val, int *size, int len);
int grib_f_index_get_long__(int *gid, char *key, long *val, int *size, int len);
int grib_f_index_get_long(int *gid, char *key, long *val, int *size, int len);
int grib_f_index_get_int_(int *gid, char *key, int *val, int *size, int len);
int grib_f_index_get_int__(int *gid, char *key, int *val, int *size, int len);
int grib_f_index_get_int(int *gid, char *key, int *val, int *size, int len);
int grib_f_index_get_real8_(int *gid, char *key, double *val, int *size, int len);
int grib_f_index_get_real8__(int *gid, char *key, double *val, int *size, int len);
int grib_f_index_get_real8(int *gid, char *key, double *val, int *size, int len);
int grib_f_set_int_array_(int *gid, char *key, int *val, int *size, int len);
int grib_f_set_int_array__(int *gid, char *key, int *val, int *size, int len);
int grib_f_set_int_array(int *gid, char *key, int *val, int *size, int len);
int grib_f_set_long_array_(int *gid, char *key, long *val, int *size, int len);
int grib_f_set_long_array__(int *gid, char *key, long *val, int *size, int len);
int grib_f_set_long_array(int *gid, char *key, long *val, int *size, int len);
int grib_f_set_byte_array_(int* gid, char* key, unsigned char *val, int* size, int len, int lenv);
int grib_f_set_byte_array__(int* gid, char* key, unsigned char *val, int* size, int len, int lenv);
int grib_f_set_byte_array(int* gid, char* key, unsigned char *val, int* size, int len, int lenv);
int grib_f_set_int_(int *gid, char *key, int *val, int len);
int grib_f_set_int__(int *gid, char *key, int *val, int len);
int grib_f_set_int(int *gid, char *key, int *val, int len);
int grib_f_set_long_(int *gid, char *key, long *val, int len);
int grib_f_set_long__(int *gid, char *key, long *val, int len);
int grib_f_set_long(int *gid, char *key, long *val, int len);
int grib_f_set_missing_(int *gid, char *key, int len);
int grib_f_set_missing__(int *gid, char *key, int len);
int grib_f_set_missing(int *gid, char *key, int len);
int grib_f_is_missing_(int *gid, char *key, int *isMissing, int len);
int grib_f_is_defined_(int *gid, char *key, int *isDefined, int len);
int grib_f_is_missing__(int *gid, char *key, int *isMissing, int len);
int grib_f_is_missing(int *gid, char *key, int *isMissing, int len);
int grib_f_set_real4_(int *gid, char *key, float *val, int len);
int grib_f_set_real4__(int *gid, char *key, float *val, int len);
int grib_f_set_real4(int *gid, char *key, float *val, int len);
int grib_f_get_real4_element_(int *gid, char *key, int *index, float *val, int len);
int grib_f_get_real4_element__(int *gid, char *key, int *index, float *val, int len);
int grib_f_get_real4_element(int *gid, char *key, int *index, float *val, int len);
int grib_f_get_real4_elements_(int *gid, char *key, int *index, float *val, int *size, int len);
int grib_f_get_real4_elements__(int *gid, char *key, int *index, float *val, int *len, int size);
int grib_f_get_real4_elements(int *gid, char *key, int *index, float *val, int *len, int size);
int grib_f_get_real4_(int *gid, char *key, float *val, int len);
int grib_f_get_real4__(int *gid, char *key, float *val, int len);
int grib_f_get_real4(int *gid, char *key, float *val, int len);
int grib_f_get_real4_array_(int *gid, char *key, float *val, int *size, int len);
int grib_f_get_real4_array__(int *gid, char *key, float *val, int *size, int len);
int grib_f_get_real4_array(int *gid, char *key, float *val, int *size, int len);
int grib_f_set_real4_array_(int *gid, char *key, float *val, int *size, int len);
int grib_f_set_real4_array__(int *gid, char *key, float *val, int *size, int len);
int grib_f_set_real4_array(int *gid, char *key, float *val, int *size, int len);
int grib_f_set_force_real4_array_(int *gid, char *key, float *val, int *size, int len);
int grib_f_set_force_real4_array__(int *gid, char *key, float *val, int *size, int len);
int grib_f_set_force_real4_array(int *gid, char *key, float *val, int *size, int len);
int grib_f_index_select_real8_(int *gid, char *key, double *val, int len);
int grib_f_index_select_real8__(int *gid, char *key, double *val, int len);
int grib_f_index_select_real8(int *gid, char *key, double *val, int len);
int grib_f_index_select_string_(int *gid, char *key, char *val, int len, int vallen);
int grib_f_index_select_string__(int *gid, char *key, char *val, int len, int vallen);
int grib_f_index_select_string(int *gid, char *key, char *val, int len, int vallen);
int grib_f_index_select_int_(int *gid, char *key, int *val, int len);
int grib_f_index_select_int__(int *gid, char *key, int *val, int len);
int grib_f_index_select_int(int *gid, char *key, int *val, int len);
int grib_f_index_select_long_(int *gid, char *key, long *val, int len);
int grib_f_index_select_long__(int *gid, char *key, long *val, int len);
int grib_f_index_select_long(int *gid, char *key, long *val, int len);
int grib_f_set_real8_(int *gid, char *key, double *val, int len);
int grib_f_set_real8__(int *gid, char *key, double *val, int len);
int grib_f_set_real8(int *gid, char *key, double *val, int len);
int grib_f_get_real8_(int *gid, char *key, double *val, int len);
int grib_f_get_real8__(int *gid, char *key, double *val, int len);
int grib_f_get_real8(int *gid, char *key, double *val, int len);
int grib_f_get_real8_element_(int *gid, char *key, int *index, double *val, int len);
int grib_f_get_real8_element__(int *gid, char *key, int *index, double *val, int len);
int grib_f_get_real8_element(int *gid, char *key, int *index, double *val, int len);
int grib_f_get_real8_elements_(int *gid, char *key, int *index, double *val, int *size, int len);
int grib_f_get_real8_elements__(int *gid, char *key, int *index, double *val, int *len, int size);
int grib_f_get_real8_elements(int *gid, char *key, int *index, double *val, int *len, int size);
int grib_f_find_nearest_four_single_(int *gid, int *is_lsm, double *inlat, double *inlon, double *outlats, double *outlons, double *values, double *distances, int *indexes);
int grib_f_find_nearest_four_single__(int *gid, int *is_lsm, double *inlats, double *inlons, double *outlats, double *outlons, double *values, double *distances, int *indexes);
int grib_f_find_nearest_four_single(int *gid, int *is_lsm, double *inlats, double *inlons, double *outlats, double *outlons, double *values, double *distances, int *indexes);
int grib_f_find_nearest_single_(int *gid, int *is_lsm, double *inlats, double *inlons, double *outlats, double *outlons, double *values, double *distances, int *indexes);
int grib_f_find_nearest_single__(int *gid, int *is_lsm, double *inlats, double *inlons, double *outlats, double *outlons, double *values, double *distances, int *indexes);
int grib_f_find_nearest_single(int *gid, int *is_lsm, double *inlats, double *inlons, double *outlats, double *outlons, double *values, double *distances, int *indexes);
int grib_f_find_nearest_multiple_(int *gid, int *is_lsm, double *inlats, double *inlons, double *outlats, double *outlons, double *values, double *distances, int *indexes, int *npoints);
int grib_f_find_nearest_multiple__(int *gid, int *is_lsm, double *inlats, double *inlons, double *outlats, double *outlons, double *values, double *distances, int *indexes, int *npoints);
int grib_f_find_nearest_multiple(int *gid, int *is_lsm, double *inlats, double *inlons, double *outlats, double *outlons, double *values, double *distances, int *indexes, int *npoints);
int grib_f_get_real8_array_(int *gid, char *key, double *val, int *size, int len);
int grib_f_get_real8_array__(int *gid, char *key, double *val, int *size, int len);
int grib_f_get_real8_array(int *gid, char *key, double *val, int *size, int len);
int grib_f_set_real8_array_(int *gid, char *key, double *val, int *size, int len);
int grib_f_set_real8_array__(int *gid, char *key, double *val, int *size, int len);
int grib_f_set_real8_array(int *gid, char *key, double *val, int *size, int len);
int grib_f_set_force_real8_array_(int *gid, char *key, double *val, int *size, int len);
int grib_f_set_force_real8_array__(int *gid, char *key, double *val, int *size, int len);
int grib_f_set_force_real8_array(int *gid, char *key, double *val, int *size, int len);
int grib_f_get_string_(int *gid, char *key, char *val, int len, int len2);
int grib_f_get_string__(int *gid, char *key, char *val, int len, int len2);
int grib_f_get_string(int *gid, char *key, char *val, int len, int len2);
int grib_f_set_string_(int *gid, char *key, char *val, int len, int len2);
int grib_f_set_string__(int *gid, char *key, char *val, int len, int len2);
int grib_f_set_string(int *gid, char *key, char *val, int len, int len2);
int grib_f_get_data_real4_(int *gid, float *lats, float *lons, float *values, size_t *size);
int grib_f_get_data_real4__(int *gid, float *lats, float *lons, float *values, size_t *size);
int grib_f_get_data_real4(int *gid, float *lats, float *lons, float *values, size_t *size);
int grib_f_get_data_real8_(int *gid, double *lats, double *lons, double *values, size_t *size);
int grib_f_get_data_real8__(int *gid, double *lats, double *lons, double *values, size_t *size);
int grib_f_get_data_real8(int *gid, double *lats, double *lons, double *values, size_t *size);
int grib_f_get_message_size_(int *gid, size_t *len);
int grib_f_get_message_size__(int *gid, size_t *len);
int grib_f_get_message_size(int *gid, size_t *len);
int grib_f_copy_message_(int *gid, void *mess, size_t *len);
int grib_f_copy_message__(int *gid, void *mess, size_t *len);
int grib_f_copy_message(int *gid, void *mess, size_t *len);
void grib_f_check_(int *err, char *call, char *str, int lencall, int lenstr);
void grib_f_check__(int *err, char *call, char *key, int lencall, int lenkey);
void grib_f_check(int *err, char *call, char *key, int lencall, int lenkey);
int grib_f_write_(int *gid, int *fid);
int grib_f_write__(int *gid, int *fid);
int grib_f_write(int *gid, int *fid);
int grib_f_multi_write_(int *gid, int *fid);
int grib_f_multi_write__(int *gid, int *fid);
int grib_f_multi_write(int *gid, int *fid);
int grib_f_multi_append_(int *ingid, int *sec, int *mgid);
int grib_f_multi_append(int *ingid, int *sec, int *mgid);
int grib_f_multi_append__(int *ingid, int *sec, int *mgid);
int codes_f_bufr_keys_iterator_new_(int* gid,int* iterid);
int grib_f_read_file_(int* fid, void* buffer, size_t* nbytes);
int codes_f_bufr_keys_iterator_delete_(int* iterid);
int grib_f_set_definitions_path_(char* path, int len);
int grib_f_read_any_from_file_(int* fid, void* buffer, size_t* nbytes);
int any_f_new_from_file_(int* fid, int* gid);
int grib_f_get_native_type_(int* gid, char* key, int* val, int len);
int grib_f_get_api_version_(int* apiVersion,int len);
int codes_bufr_f_new_from_samples_(int* gid, char* name, int lname);
int any_f_load_all_from_file_(int* fid, int* n);
int codes_f_bufr_multi_element_constant_arrays_on_();
int bufr_f_new_from_file_(int* fid, int* gid);
int grib_f_julian_to_datetime_(double* jd,long* year,long* month,long* day,long *hour,long *minute,long *second);
int any_f_new_from_scanned_file_(int* fid, int* msgid, int* gid);
int codes_f_bufr_keys_iterator_next_(int* iterid);
int grib_f_datetime_to_julian_(long* year,long* month,long* day, long* hour,long* minute,long* second,double* jd);
int grib_f_set_string_array_(int* gid, char* key, char* val,int* nvals,int* slen, int len);
int codes_f_bufr_keys_iterator_get_name_(int* iterid, char* name, int len);
int codes_f_bufr_multi_element_constant_arrays_off_();
#ifdef __cplusplus
}
#endif

View File

@ -9,6 +9,10 @@
# nor does it submit to any jurisdiction.
#
list( APPEND eccodes_src_files
accessor/grib_accessor.cc
accessor/grib_accessors_list.cc
grib_accessor_class.cc
shared_functions.cc
step_unit.cc
step.cc
step_utilities.cc
@ -20,9 +24,9 @@ list( APPEND eccodes_src_files
action_class_gen.cc
action_class_if.cc
action_class_switch.cc
grib_accessor_class_g1fcperiod.cc
grib_accessor_class_g1end_of_interval_monthly.cc
grib_accessor_class_mars_param.cc
accessor/grib_accessor_class_g1fcperiod.cc
accessor/grib_accessor_class_g1end_of_interval_monthly.cc
accessor/grib_accessor_class_mars_param.cc
action_class_section.cc
action_class_list.cc
action_class_while.cc
@ -47,7 +51,6 @@ list( APPEND eccodes_src_files
action_class_modify.cc
action_class_transient_darray.cc
eccodes.cc
grib_accessor.cc
grib_concept.cc
grib_hash_array.cc
grib_bufr_descriptor.cc
@ -60,208 +63,207 @@ list( APPEND eccodes_src_files
grib_iarray.cc
grib_viarray.cc
codes_memfs.cc
grib_accessor_class_ascii.cc
grib_accessor_class_bit.cc
grib_accessor_class_bitmap.cc
grib_accessor_class_bits.cc
grib_accessor_class_bits_per_value.cc
grib_accessor_class_bufr_elements_table.cc
grib_accessor_class_bufr_data_array.cc
grib_accessor_class_bufr_data_element.cc
grib_accessor_class_bufr_group.cc
grib_accessor_class_bufr_string_values.cc
grib_accessor_class_pack_bufr_values.cc
grib_accessor_class_unpack_bufr_values.cc
grib_accessor_class_group.cc
grib_accessor_class_non_alpha.cc
grib_accessor_class_g1bitmap.cc
grib_accessor_class_g2bitmap.cc
grib_accessor_class_concept.cc
grib_accessor_class_hash_array.cc
grib_accessor_class_decimal_precision.cc
grib_accessor_class_divdouble.cc
grib_accessor_class_multdouble.cc
grib_accessor_class_budgdate.cc
grib_accessor_class_validity_date.cc
grib_accessor_class_validity_time.cc
grib_accessor_class_bytes.cc
grib_accessor_class.cc
grib_accessor_class_change_alternative_row_scanning.cc
grib_accessor_class_change_scanning_direction.cc
grib_accessor_class_check_internal_version.cc
grib_accessor_class_codeflag.cc
grib_accessor_class_smart_table.cc
grib_accessor_class_smart_table_column.cc
grib_accessor_class_codetable.cc
grib_accessor_class_codetable_units.cc
grib_accessor_class_codetable_title.cc
grib_accessor_class_step_human_readable.cc
grib_accessor_class_count_file.cc
grib_accessor_class_count_total.cc
grib_accessor_class_double.cc
grib_accessor_class_element.cc
grib_accessor_class_evaluate.cc
grib_accessor_class_g1date.cc
grib_accessor_class_g1monthlydate.cc
grib_accessor_class_library_version.cc
grib_accessor_class_when.cc
grib_accessor_class_g1verificationdate.cc
grib_accessor_class_g1day_of_the_year_date.cc
grib_accessor_class_g1_half_byte_codeflag.cc
grib_accessor_class_g1forecastmonth.cc
grib_accessor_class_g1step_range.cc
grib_accessor_class_g2step_range.cc
grib_accessor_class_data_g22order_packing.cc
grib_accessor_class_mars_step.cc
grib_accessor_class_message_copy.cc
grib_accessor_class_dictionary.cc
grib_accessor_class_latlon_increment.cc
grib_accessor_class_g2date.cc
grib_accessor_class_g2level.cc
grib_accessor_class_g2end_step.cc
grib_accessor_class_g2latlon.cc
grib_accessor_class_g2lon.cc
grib_accessor_class_global_gaussian.cc
grib_accessor_class_gaussian_grid_name.cc
grib_accessor_class_gen.cc
grib_accessor_class_getenv.cc
grib_accessor_class_gts_header.cc
grib_accessor_class_ifs_param.cc
grib_accessor_class_julian_day.cc
grib_accessor_class_julian_date.cc
grib_accessor_class_closest_date.cc
grib_accessor_class_latlonvalues.cc
grib_accessor_class_latitudes.cc
grib_accessor_class_longitudes.cc
grib_accessor_class_offset_file.cc
grib_accessor_class_scale.cc
grib_accessor_class_from_scale_factor_scaled_value.cc
grib_accessor_class_g2bitmap_present.cc
grib_accessor_class_ibmfloat.cc
grib_accessor_class_ieeefloat.cc
grib_accessor_class_constant.cc
grib_accessor_class_iterator.cc
grib_accessor_class_message.cc
grib_accessor_class_nearest.cc
grib_accessor_class_ksec1expver.cc
grib_accessor_class_label.cc
grib_accessor_class_long.cc
grib_accessor_class_lookup.cc
grib_accessor_class_octahedral_gaussian.cc
grib_accessor_class_octet_number.cc
grib_accessor_class_headers_only.cc
grib_accessor_class_padding.cc
grib_accessor_class_pad.cc
grib_accessor_class_padto.cc
grib_accessor_class_padtoeven.cc
grib_accessor_class_padtomultiple.cc
grib_accessor_class_section_padding.cc
grib_accessor_class_packing_type.cc
grib_accessor_class_section_pointer.cc
grib_accessor_class_position.cc
grib_accessor_class_signed.cc
grib_accessor_class_signed_bits.cc
grib_accessor_class_section.cc
grib_accessor_class_step_in_units.cc
grib_accessor_class_optimal_step_units.cc
grib_accessor_class_section_length.cc
grib_accessor_class_g1_message_length.cc
grib_accessor_class_g1_section4_length.cc
grib_accessor_class_size.cc
grib_accessor_class_rdbtime_guess_date.cc
grib_accessor_class_scale_values.cc
grib_accessor_class_offset_values.cc
grib_accessor_class_sprintf.cc
grib_accessor_class_round.cc
grib_accessor_class_spectral_truncation.cc
grib_accessor_class_time.cc
grib_accessor_class_transient.cc
grib_accessor_class_trim.cc
grib_accessor_class_transient_darray.cc
grib_accessor_class_values.cc
grib_accessor_class_simple_packing_error.cc
grib_accessor_class_data_simple_packing.cc
grib_accessor_class_count_missing.cc
grib_accessor_class_data_sh_packed.cc
grib_accessor_class_data_sh_unpacked.cc
grib_accessor_class_number_of_values_data_raw_packing.cc
grib_accessor_class_data_g1simple_packing.cc
grib_accessor_class_data_g1shsimple_packing.cc
grib_accessor_class_data_shsimple_packing.cc
grib_accessor_class_data_dummy_field.cc
grib_accessor_class_variable.cc
grib_accessor_class_second_order_bits_per_value.cc
grib_accessor_class_data_g2simple_packing.cc
grib_accessor_class_data_g2simple_packing_with_preprocessing.cc
grib_accessor_class_data_g2shsimple_packing.cc
grib_accessor_class_data_g2complex_packing.cc
grib_accessor_class_data_g1second_order_row_by_row_packing.cc
grib_accessor_class_data_g1second_order_constant_width_packing.cc
grib_accessor_class_data_g1second_order_general_packing.cc
grib_accessor_class_data_g1second_order_general_extended_packing.cc
grib_accessor_class_g2grid.cc
grib_accessor_class_unexpanded_descriptors.cc
grib_accessor_class_expanded_descriptors.cc
grib_accessor_class_bufrdc_expanded_descriptors.cc
grib_accessor_class_data_apply_bitmap.cc
grib_accessor_class_data_apply_boustrophedonic.cc
grib_accessor_class_data_apply_boustrophedonic_bitmap.cc
grib_accessor_class_data_secondary_bitmap.cc
grib_accessor_class_data_g1secondary_bitmap.cc
grib_accessor_class_data_g2secondary_bitmap.cc
grib_accessor_class_data_jpeg2000_packing.cc
grib_accessor_class_data_png_packing.cc
grib_accessor_class_data_ccsds_packing.cc
grib_accessor_class_data_raw_packing.cc
grib_accessor_class_data_complex_packing.cc
grib_accessor_class_data_g1complex_packing.cc
grib_accessor_class_gds_not_present_bitmap.cc
grib_accessor_class_gds_is_present.cc
grib_accessor_class_select_step_template.cc
grib_accessor_class_local_definition.cc
grib_accessor_class_g2_eps.cc
grib_accessor_class_g2_aerosol.cc
grib_accessor_class_g2_chemical.cc
grib_accessor_class_g2_mars_labeling.cc
grib_accessor_class_md5.cc
grib_accessor_class_proj_string.cc
accessor/grib_accessor_class_gen.cc
accessor/grib_accessor_class_ascii.cc
accessor/grib_accessor_class_bit.cc
accessor/grib_accessor_class_bitmap.cc
accessor/grib_accessor_class_bits.cc
accessor/grib_accessor_class_bits_per_value.cc
accessor/grib_accessor_class_bufr_elements_table.cc
accessor/grib_accessor_class_bufr_data_array.cc
accessor/grib_accessor_class_bufr_data_element.cc
accessor/grib_accessor_class_bufr_group.cc
accessor/grib_accessor_class_bufr_string_values.cc
accessor/grib_accessor_class_pack_bufr_values.cc
accessor/grib_accessor_class_unpack_bufr_values.cc
accessor/grib_accessor_class_group.cc
accessor/grib_accessor_class_non_alpha.cc
accessor/grib_accessor_class_g1bitmap.cc
accessor/grib_accessor_class_g2bitmap.cc
accessor/grib_accessor_class_concept.cc
accessor/grib_accessor_class_hash_array.cc
accessor/grib_accessor_class_decimal_precision.cc
accessor/grib_accessor_class_divdouble.cc
accessor/grib_accessor_class_multdouble.cc
accessor/grib_accessor_class_budgdate.cc
accessor/grib_accessor_class_validity_date.cc
accessor/grib_accessor_class_validity_time.cc
accessor/grib_accessor_class_bytes.cc
accessor/grib_accessor_class_change_alternative_row_scanning.cc
accessor/grib_accessor_class_change_scanning_direction.cc
accessor/grib_accessor_class_check_internal_version.cc
accessor/grib_accessor_class_codeflag.cc
accessor/grib_accessor_class_smart_table.cc
accessor/grib_accessor_class_smart_table_column.cc
accessor/grib_accessor_class_codetable.cc
accessor/grib_accessor_class_codetable_units.cc
accessor/grib_accessor_class_codetable_title.cc
accessor/grib_accessor_class_step_human_readable.cc
accessor/grib_accessor_class_count_file.cc
accessor/grib_accessor_class_count_total.cc
accessor/grib_accessor_class_double.cc
accessor/grib_accessor_class_element.cc
accessor/grib_accessor_class_evaluate.cc
accessor/grib_accessor_class_g1date.cc
accessor/grib_accessor_class_g1monthlydate.cc
accessor/grib_accessor_class_library_version.cc
accessor/grib_accessor_class_when.cc
accessor/grib_accessor_class_g1verificationdate.cc
accessor/grib_accessor_class_g1day_of_the_year_date.cc
accessor/grib_accessor_class_g1_half_byte_codeflag.cc
accessor/grib_accessor_class_g1forecastmonth.cc
accessor/grib_accessor_class_g1step_range.cc
accessor/grib_accessor_class_g2step_range.cc
accessor/grib_accessor_class_data_g22order_packing.cc
accessor/grib_accessor_class_mars_step.cc
accessor/grib_accessor_class_message_copy.cc
accessor/grib_accessor_class_dictionary.cc
accessor/grib_accessor_class_latlon_increment.cc
accessor/grib_accessor_class_g2date.cc
accessor/grib_accessor_class_g2level.cc
accessor/grib_accessor_class_g2end_step.cc
accessor/grib_accessor_class_g2latlon.cc
accessor/grib_accessor_class_g2lon.cc
accessor/grib_accessor_class_global_gaussian.cc
accessor/grib_accessor_class_gaussian_grid_name.cc
accessor/grib_accessor_class_getenv.cc
accessor/grib_accessor_class_gts_header.cc
accessor/grib_accessor_class_ifs_param.cc
accessor/grib_accessor_class_julian_day.cc
accessor/grib_accessor_class_julian_date.cc
accessor/grib_accessor_class_closest_date.cc
accessor/grib_accessor_class_latlonvalues.cc
accessor/grib_accessor_class_latitudes.cc
accessor/grib_accessor_class_longitudes.cc
accessor/grib_accessor_class_offset_file.cc
accessor/grib_accessor_class_scale.cc
accessor/grib_accessor_class_from_scale_factor_scaled_value.cc
accessor/grib_accessor_class_g2bitmap_present.cc
accessor/grib_accessor_class_ibmfloat.cc
accessor/grib_accessor_class_ieeefloat.cc
accessor/grib_accessor_class_constant.cc
accessor/grib_accessor_class_iterator.cc
accessor/grib_accessor_class_message.cc
accessor/grib_accessor_class_nearest.cc
accessor/grib_accessor_class_ksec1expver.cc
accessor/grib_accessor_class_label.cc
accessor/grib_accessor_class_long.cc
accessor/grib_accessor_class_lookup.cc
accessor/grib_accessor_class_octahedral_gaussian.cc
accessor/grib_accessor_class_octet_number.cc
accessor/grib_accessor_class_headers_only.cc
accessor/grib_accessor_class_padding.cc
accessor/grib_accessor_class_pad.cc
accessor/grib_accessor_class_padto.cc
accessor/grib_accessor_class_padtoeven.cc
accessor/grib_accessor_class_padtomultiple.cc
accessor/grib_accessor_class_section_padding.cc
accessor/grib_accessor_class_packing_type.cc
accessor/grib_accessor_class_section_pointer.cc
accessor/grib_accessor_class_position.cc
accessor/grib_accessor_class_signed.cc
accessor/grib_accessor_class_signed_bits.cc
accessor/grib_accessor_class_section.cc
accessor/grib_accessor_class_step_in_units.cc
accessor/grib_accessor_class_optimal_step_units.cc
accessor/grib_accessor_class_section_length.cc
accessor/grib_accessor_class_g1_message_length.cc
accessor/grib_accessor_class_g1_section4_length.cc
accessor/grib_accessor_class_size.cc
accessor/grib_accessor_class_rdbtime_guess_date.cc
accessor/grib_accessor_class_scale_values.cc
accessor/grib_accessor_class_offset_values.cc
accessor/grib_accessor_class_sprintf.cc
accessor/grib_accessor_class_round.cc
accessor/grib_accessor_class_spectral_truncation.cc
accessor/grib_accessor_class_time.cc
accessor/grib_accessor_class_transient.cc
accessor/grib_accessor_class_trim.cc
accessor/grib_accessor_class_transient_darray.cc
accessor/grib_accessor_class_values.cc
accessor/grib_accessor_class_simple_packing_error.cc
accessor/grib_accessor_class_data_simple_packing.cc
accessor/grib_accessor_class_count_missing.cc
accessor/grib_accessor_class_data_sh_packed.cc
accessor/grib_accessor_class_data_sh_unpacked.cc
accessor/grib_accessor_class_number_of_values_data_raw_packing.cc
accessor/grib_accessor_class_data_g1simple_packing.cc
accessor/grib_accessor_class_data_g1shsimple_packing.cc
accessor/grib_accessor_class_data_shsimple_packing.cc
accessor/grib_accessor_class_data_dummy_field.cc
accessor/grib_accessor_class_variable.cc
accessor/grib_accessor_class_second_order_bits_per_value.cc
accessor/grib_accessor_class_data_g2simple_packing.cc
accessor/grib_accessor_class_data_g2simple_packing_with_preprocessing.cc
accessor/grib_accessor_class_data_g2shsimple_packing.cc
accessor/grib_accessor_class_data_g2complex_packing.cc
accessor/grib_accessor_class_data_g1second_order_row_by_row_packing.cc
accessor/grib_accessor_class_data_g1second_order_constant_width_packing.cc
accessor/grib_accessor_class_data_g1second_order_general_packing.cc
accessor/grib_accessor_class_data_g1second_order_general_extended_packing.cc
accessor/grib_accessor_class_g2grid.cc
accessor/grib_accessor_class_unexpanded_descriptors.cc
accessor/grib_accessor_class_expanded_descriptors.cc
accessor/grib_accessor_class_bufrdc_expanded_descriptors.cc
accessor/grib_accessor_class_data_apply_bitmap.cc
accessor/grib_accessor_class_data_apply_boustrophedonic.cc
accessor/grib_accessor_class_data_apply_boustrophedonic_bitmap.cc
accessor/grib_accessor_class_data_secondary_bitmap.cc
accessor/grib_accessor_class_data_g1secondary_bitmap.cc
accessor/grib_accessor_class_data_g2secondary_bitmap.cc
accessor/grib_accessor_class_data_jpeg2000_packing.cc
accessor/grib_accessor_class_data_png_packing.cc
accessor/grib_accessor_class_data_ccsds_packing.cc
accessor/grib_accessor_class_data_raw_packing.cc
accessor/grib_accessor_class_data_complex_packing.cc
accessor/grib_accessor_class_data_g1complex_packing.cc
accessor/grib_accessor_class_gds_not_present_bitmap.cc
accessor/grib_accessor_class_gds_is_present.cc
accessor/grib_accessor_class_select_step_template.cc
accessor/grib_accessor_class_local_definition.cc
accessor/grib_accessor_class_g2_eps.cc
accessor/grib_accessor_class_g2_aerosol.cc
accessor/grib_accessor_class_g2_chemical.cc
accessor/grib_accessor_class_g2_mars_labeling.cc
accessor/grib_accessor_class_md5.cc
accessor/grib_accessor_class_proj_string.cc
grib_jasper_encoding.cc
grib_openjpeg_encoding.cc
action_class_set_missing.cc
grib_accessor_class_number_of_points.cc
grib_accessor_class_suppressed.cc
accessor/grib_accessor_class_number_of_points.cc
accessor/grib_accessor_class_suppressed.cc
grib_index.cc
grib_accessor_class_number_of_points_gaussian.cc
grib_accessor_class_number_of_values.cc
grib_accessor_class_number_of_coded_values.cc
grib_accessor_class_g1number_of_coded_values_sh_complex.cc
grib_accessor_class_g1number_of_coded_values_sh_simple.cc
grib_accessor_class_dirty.cc
grib_accessor_class_statistics.cc
grib_accessor_class_statistics_spectral.cc
grib_accessor_class_unsigned.cc
grib_accessor_class_unsigned_bits.cc
grib_accessor_class_raw.cc
grib_accessor_class_bufr_simple_thinning.cc
grib_accessor_class_bufr_extract_subsets.cc
grib_accessor_class_bufr_extract_area_subsets.cc
grib_accessor_class_bufr_extract_datetime_subsets.cc
grib_accessor_class_spd.cc
grib_accessor_class_sum.cc
grib_accessor_class_to_integer.cc
grib_accessor_class_to_double.cc
grib_accessor_class_to_string.cc
grib_accessor_class_sexagesimal2decimal.cc
grib_accessor_class_vector.cc
grib_accessor_class_long_vector.cc
accessor/grib_accessor_class_number_of_points_gaussian.cc
accessor/grib_accessor_class_number_of_values.cc
accessor/grib_accessor_class_number_of_coded_values.cc
accessor/grib_accessor_class_g1number_of_coded_values_sh_complex.cc
accessor/grib_accessor_class_g1number_of_coded_values_sh_simple.cc
accessor/grib_accessor_class_dirty.cc
accessor/grib_accessor_class_statistics.cc
accessor/grib_accessor_class_statistics_spectral.cc
accessor/grib_accessor_class_unsigned.cc
accessor/grib_accessor_class_unsigned_bits.cc
accessor/grib_accessor_class_raw.cc
accessor/grib_accessor_class_bufr_simple_thinning.cc
accessor/grib_accessor_class_bufr_extract_subsets.cc
accessor/grib_accessor_class_bufr_extract_area_subsets.cc
accessor/grib_accessor_class_bufr_extract_datetime_subsets.cc
accessor/grib_accessor_class_spd.cc
accessor/grib_accessor_class_sum.cc
accessor/grib_accessor_class_to_integer.cc
accessor/grib_accessor_class_to_double.cc
accessor/grib_accessor_class_to_string.cc
accessor/grib_accessor_class_sexagesimal2decimal.cc
accessor/grib_accessor_class_vector.cc
accessor/grib_accessor_class_long_vector.cc
grib_gaussian_reduced.cc
grib_accessor_class_abstract_vector.cc
grib_accessor_class_abstract_long_vector.cc
accessor/grib_accessor_class_abstract_vector.cc
accessor/grib_accessor_class_abstract_long_vector.cc
grib_loader_from_handle.cc
grib_bits.cc
grib_ibmfloat.cc
grib_ieeefloat.cc
grib_accessor_class_reference_value_error.cc
accessor/grib_accessor_class_reference_value_error.cc
grib_memory.cc
grib_buffer.cc
grib_dumper.cc
@ -364,16 +366,16 @@ list( APPEND eccodes_src_files
grib_yacc.h
md5.h
md5.cc
grib_accessor_class_uint16.cc
grib_accessor_class_uint32.cc
grib_accessor_class_uint32_little_endian.cc
grib_accessor_class_uint64.cc
grib_accessor_class_uint64_little_endian.cc
grib_accessor_class_uint8.cc
grib_accessor_class_blob.cc
accessor/grib_accessor_class_uint16.cc
accessor/grib_accessor_class_uint32.cc
accessor/grib_accessor_class_uint32_little_endian.cc
accessor/grib_accessor_class_uint64.cc
accessor/grib_accessor_class_uint64_little_endian.cc
accessor/grib_accessor_class_uint8.cc
accessor/grib_accessor_class_blob.cc
grib_optimize_decimal_factor.cc
grib_accessor_class_data_g2bifourier_packing.cc
grib_accessor_class_data_run_length_packing.cc
accessor/grib_accessor_class_data_g2bifourier_packing.cc
accessor/grib_accessor_class_data_run_length_packing.cc
eccodes_windef.h
# We ship our own generated lex/yacc C files
grib_yacc.cc grib_lex.cc )

View File

@ -0,0 +1,135 @@
/*
* (C) Copyright 2005- ECMWF.
*
* This software is licensed under the terms of the Apache Licence Version 2.0
* which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
*
* In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
/***************************************************************************
* Jean Baptiste Filippi - 01.11.2005
***************************************************************************/
#include "grib_accessor.h"
#include <iostream>
// Note: A fast cut-down version of strcmp which does NOT return -1
// 0 means input strings are equal and 1 means not equal
GRIB_INLINE static int grib_inline_strcmp(const char* a, const char* b)
{
if (*a != *b)
return 1;
while ((*a != 0 && *b != 0) && *(a) == *(b)) {
a++;
b++;
}
return (*a == 0 && *b == 0) ? 0 : 1;
}
int grib_accessor::compare_accessors(grib_accessor* a2, int compare_flags)
{
int ret = 0;
long type1 = 0;
long type2 = 0;
int type_mismatch = 0;
grib_accessor_class* c1 = NULL;
grib_accessor* a1 = this;
if ((compare_flags & GRIB_COMPARE_NAMES) && grib_inline_strcmp(a1->name, a2->name))
return GRIB_NAME_MISMATCH;
if (compare_flags & GRIB_COMPARE_TYPES) {
type1 = a1->get_native_type();
type2 = a2->get_native_type();
type_mismatch = type1 != type2 ? 1 : 0;
}
// ret = GRIB_UNABLE_TO_COMPARE_ACCESSORS;
c1 = a1->cclass;
ret = c1->compare(a1, a2);
if (ret == GRIB_VALUE_MISMATCH && type_mismatch)
ret = GRIB_TYPE_AND_VALUE_MISMATCH;
return ret;
}
int grib_accessor::add_attribute(grib_accessor* attr, int nest_if_clash)
{
int id = 0;
int idx = 0;
grib_accessor* pSame = NULL;
grib_accessor* pAloc = this;
if (this->has_attributes()) {
pSame = this->get_attribute_index(attr->name, &id);
}
if (pSame) {
if (nest_if_clash == 0)
return GRIB_ATTRIBUTE_CLASH;
pAloc = pSame;
}
for (id = 0; id < MAX_ACCESSOR_ATTRIBUTES; id++) {
if (pAloc->attributes[id] == NULL) {
// attr->parent=a->parent;
pAloc->attributes[id] = attr;
attr->parent_as_attribute = pAloc;
if (pAloc->same)
attr->same = pAloc->same->get_attribute_index(attr->name, &idx);
grib_context_log(this->context, GRIB_LOG_DEBUG, "added attribute %s->%s", this->name, attr->name);
return GRIB_SUCCESS;
}
}
return GRIB_TOO_MANY_ATTRIBUTES;
}
grib_accessor* grib_accessor::get_attribute_index(const char* name, int* index)
{
int i = 0;
while (i < MAX_ACCESSOR_ATTRIBUTES && this->attributes[i]) {
if (!grib_inline_strcmp(this->attributes[i]->name, name)) {
*index = i;
return this->attributes[i];
}
i++;
}
return NULL;
}
int grib_accessor::has_attributes()
{
return this->attributes[0] ? 1 : 0;
}
grib_accessor* grib_accessor::get_attribute(const char* name)
{
int index = 0;
const char* p = 0;
char* basename = NULL;
const char* attribute_name = NULL;
grib_accessor* acc = NULL;
p = name;
while (*(p + 1) != '\0' && (*p != '-' || *(p + 1) != '>'))
p++;
if (*(p + 1) == '\0') {
return this->get_attribute_index(name, &index);
}
else {
size_t size = p - name;
attribute_name = p + 2;
basename = (char*)grib_context_malloc_clear(this->context, size + 1);
basename = (char*)memcpy(basename, name, size);
acc = this->get_attribute_index(basename, &index);
grib_context_free(this->context, basename);
if (acc)
return acc->get_attribute(attribute_name);
else
return NULL;
}
}

View File

@ -0,0 +1,147 @@
/*
* (C) Copyright 2005- ECMWF.
*
* This software is licensed under the terms of the Apache Licence Version 2.0
* which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
*
* In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#pragma once
#include "grib_api_internal.h"
#include "grib_value.h"
class grib_accessor
{
public:
grib_accessor() :
name(nullptr), name_space(nullptr), context(nullptr), h(nullptr), creator(nullptr),
length(0), offset(0), parent(nullptr), next_(nullptr), previous_(nullptr), cclass(nullptr),
flags(0), sub_section(nullptr), dirty(0), same(nullptr), loop(0), vvalue(nullptr),
set(nullptr), parent_as_attribute(nullptr) {}
virtual ~grib_accessor() {}
virtual void init_accessor(const long, grib_arguments*) = 0;
virtual void dump(grib_dumper* f) = 0;
virtual int pack_missing() = 0;
//virtual int grib_pack_zero(grib_accessor* a) = 0;
virtual int is_missing_internal() = 0;
virtual int pack_double(const double* v, size_t* len) = 0;
virtual int pack_float(const float* v, size_t* len) = 0;
virtual int pack_expression(grib_expression* e) = 0;
virtual int pack_string(const char* v, size_t* len) = 0;
virtual int pack_string_array(const char** v, size_t* len) = 0;
virtual int pack_long(const long* v, size_t* len) = 0;
virtual int pack_bytes(const unsigned char* v, size_t* len) = 0;
virtual int unpack_bytes(unsigned char* v, size_t* len) = 0;
virtual int unpack_double_subarray(double* v, size_t start, size_t len) = 0;
virtual int unpack_double(double* v, size_t* len) = 0;
virtual int unpack_float(float* v, size_t* len) = 0;
virtual int unpack_double_element(size_t i, double* v) = 0;
virtual int unpack_float_element(size_t i, float* v) = 0;
virtual int unpack_double_element_set(const size_t* index_array, size_t len, double* val_array) = 0;
virtual int unpack_float_element_set(const size_t* index_array, size_t len, float* val_array) = 0;
virtual int unpack_string(char* v, size_t* len) = 0;
virtual int unpack_string_array(char** v, size_t* len) = 0;
virtual int unpack_long(long* v, size_t* len) = 0;
virtual long get_native_type() = 0;
virtual long get_next_position_offset() = 0;
virtual long string_length() = 0;
virtual long byte_offset() = 0;
virtual long byte_count() = 0;
virtual int value_count(long* count) = 0;
virtual int notify_change(grib_accessor* changed) = 0;
virtual grib_accessor* clone(grib_section* s, int* err) = 0;
virtual void update_size(size_t len) = 0;
virtual int nearest_smaller_value(double val, double* nearest) = 0;
virtual size_t preferred_size(int from_handle) = 0;
virtual grib_accessor* next_accessor() = 0;
virtual void resize(size_t new_size) = 0;
virtual void destroy(grib_context* ct) = 0;
virtual int compare_accessors(grib_accessor* a2, int compare_flags);
virtual int add_attribute(grib_accessor* attr, int nest_if_clash);
virtual grib_accessor* get_attribute_index(const char* name, int* index);
virtual int has_attributes();
virtual grib_accessor* get_attribute(const char* name);
const char* name; /** < name of the accessor */
const char* name_space; /** < namespace to which the accessor belongs */
grib_context* context;
grib_handle* h;
grib_action* creator; /** < action that created the accessor */
long length; /** < byte length of the accessor */
long offset; /** < offset of the data in the buffer */
grib_section* parent; /** < section to which the accessor is attached */
grib_accessor* next_; /** < next accessor in list */
grib_accessor* previous_; /** < next accessor in list */
grib_accessor_class* cclass; /** < behaviour of the accessor */
unsigned long flags; /** < Various flags */
grib_section* sub_section;
const char* all_names[MAX_ACCESSOR_NAMES]= {0,}; /** < name of the accessor */
const char* all_name_spaces[MAX_ACCESSOR_NAMES] = {0,}; /** < namespace to which the accessor belongs */
int dirty;
grib_accessor* same; /** < accessors with the same name */
long loop; /** < used in lists */
grib_virtual_value* vvalue; /** < virtual value used when transient flag on **/
const char* set;
grib_accessor* attributes[MAX_ACCESSOR_ATTRIBUTES] = {0,}; /** < attributes are accessors */
grib_accessor* parent_as_attribute;
};
class grib_accessor_class
{
public:
const char* name;
grib_accessor_class(const char* name) : name(name){}
virtual ~grib_accessor_class(){}
virtual grib_accessor* create_empty_accessor() = 0;
virtual grib_section* sub_section(grib_accessor* a) = 0;
virtual int get_native_type(grib_accessor*) = 0;
virtual int pack_missing(grib_accessor*) = 0;
virtual int is_missing(grib_accessor*) = 0;
virtual int pack_bytes(grib_accessor*, const unsigned char*, size_t* len) = 0;
virtual int pack_double(grib_accessor*, const double* val, size_t* len) = 0;
virtual int pack_float(grib_accessor*, const float* val, size_t* len) = 0;
virtual int pack_long(grib_accessor*, const long* val, size_t* len) = 0;
virtual int pack_string(grib_accessor*, const char*, size_t* len) = 0;
virtual int pack_string_array(grib_accessor*, const char**, size_t* len) = 0;
virtual int pack_expression(grib_accessor*, grib_expression*) = 0;
virtual int unpack_bytes(grib_accessor*, unsigned char*, size_t* len) = 0;
virtual int unpack_double(grib_accessor*, double* val, size_t* len) = 0;
virtual int unpack_float(grib_accessor*, float* val, size_t* len) = 0;
virtual int unpack_long(grib_accessor*, long* val, size_t* len) = 0;
virtual int unpack_string(grib_accessor*, char*, size_t* len) = 0;
virtual int unpack_string_array(grib_accessor*, char**, size_t* len) = 0;
virtual size_t string_length(grib_accessor*) = 0;
virtual long byte_count(grib_accessor*) = 0;
virtual long byte_offset(grib_accessor*) = 0;
virtual long next_offset(grib_accessor*) = 0;
virtual int value_count(grib_accessor*, long*) = 0;
virtual void destroy(grib_context*, grib_accessor*) = 0;
virtual void dump(grib_accessor*, grib_dumper*) = 0;
virtual void init(grib_accessor*, const long, grib_arguments*) = 0;
virtual void post_init(grib_accessor*) = 0;
virtual int notify_change(grib_accessor*, grib_accessor*) = 0;
virtual void update_size(grib_accessor*, size_t) = 0;
virtual size_t preferred_size(grib_accessor*, int) = 0;
virtual void resize(grib_accessor*,size_t) = 0;
virtual int nearest_smaller_value (grib_accessor*, double, double*) = 0;
virtual grib_accessor* next(grib_accessor*, int) = 0;
virtual int compare(grib_accessor*, grib_accessor*) = 0;
virtual int unpack_double_element(grib_accessor*, size_t i, double* val) = 0;
virtual int unpack_float_element(grib_accessor*, size_t i, float* val) = 0;
virtual int unpack_double_element_set(grib_accessor*, const size_t* index_array, size_t len, double* val_array) = 0;
virtual int unpack_float_element_set(grib_accessor*, const size_t* index_array, size_t len, float* val_array) = 0;
virtual int unpack_double_subarray(grib_accessor*, double* val, size_t start, size_t len) = 0;
virtual int clear(grib_accessor*) = 0;
virtual grib_accessor* make_clone(grib_accessor*, grib_section*, int*) = 0;
};

View File

@ -0,0 +1,15 @@
/*
* (C) Copyright 2005- ECMWF.
*
* This software is licensed under the terms of the Apache Licence Version 2.0
* which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
*
* In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#include "grib_accessor_class_abstract_long_vector.h"
grib_accessor_class_abstract_long_vector_t _grib_accessor_class_abstract_long_vector{"abstract_long_vector"};
grib_accessor_class* grib_accessor_class_abstract_long_vector = &_grib_accessor_class_abstract_long_vector;

View File

@ -0,0 +1,30 @@
/*
* (C) Copyright 2005- ECMWF.
*
* This software is licensed under the terms of the Apache Licence Version 2.0
* which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
*
* In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#pragma once
#include "grib_accessor_class_gen.h"
class grib_accessor_abstract_long_vector_t : public grib_accessor_gen_t
{
public:
/* Members defined in abstract_long_vector */
long* v;
long pack_index;
int number_of_elements;
};
class grib_accessor_class_abstract_long_vector_t : public grib_accessor_class_gen_t
{
public:
grib_accessor_class_abstract_long_vector_t(const char* name) : grib_accessor_class_gen_t(name) {}
grib_accessor* create_empty_accessor() override { return new grib_accessor_abstract_long_vector_t{}; }
};

View File

@ -1,3 +1,4 @@
/*
* (C) Copyright 2005- ECMWF.
*
@ -8,8 +9,7 @@
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#pragma once
#include "grib_accessor_class_abstract_vector.h"
#include "grib_api_internal.h"
template <typename T> int grib_unpack(grib_accessor* a, T* v, size_t* len);
grib_accessor_class_abstract_vector_t _grib_accessor_class_abstract_vector{"abstract_vector"};
grib_accessor_class* grib_accessor_class_abstract_vector = &_grib_accessor_class_abstract_vector;

View File

@ -0,0 +1,29 @@
/*
* (C) Copyright 2005- ECMWF.
*
* This software is licensed under the terms of the Apache Licence Version 2.0
* which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
*
* In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#pragma once
#include "grib_accessor_class_double.h"
class grib_accessor_abstract_vector_t : public grib_accessor_double_t
{
public:
/* Members defined in abstract_vector */
double* v;
int number_of_elements;
};
class grib_accessor_class_abstract_vector_t : public grib_accessor_class_double_t
{
public:
grib_accessor_class_abstract_vector_t(const char* name) : grib_accessor_class_double_t(name) {}
grib_accessor* create_empty_accessor() override { return new grib_accessor_abstract_vector_t{}; }
};

View File

@ -0,0 +1,179 @@
/*
* (C) Copyright 2005- ECMWF.
*
* This software is licensed under the terms of the Apache Licence Version 2.0
* which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
*
* In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#include "grib_accessor_class_ascii.h"
grib_accessor_class_ascii_t _grib_accessor_class_ascii{ "ascii" };
grib_accessor_class* grib_accessor_class_ascii = &_grib_accessor_class_ascii;
void grib_accessor_class_ascii_t::init(grib_accessor* a, const long len, grib_arguments* arg)
{
grib_accessor_class_gen_t::init(a, len, arg);
a->length = len;
Assert(a->length >= 0);
}
int grib_accessor_class_ascii_t::value_count(grib_accessor* a, long* count)
{
*count = 1;
return 0;
}
size_t grib_accessor_class_ascii_t::string_length(grib_accessor* a)
{
return a->length;
}
void grib_accessor_class_ascii_t::dump(grib_accessor* a, grib_dumper* dumper)
{
grib_dump_string(dumper, a, NULL);
}
int grib_accessor_class_ascii_t::get_native_type(grib_accessor* a)
{
return GRIB_TYPE_STRING;
}
int grib_accessor_class_ascii_t::unpack_string(grib_accessor* a, char* val, size_t* len)
{
grib_handle* hand = grib_handle_of_accessor(a);
const size_t alen = a->length;
if (*len < (alen + 1)) {
const char* cclass_name = a->cclass->name;
grib_context_log(a->context, GRIB_LOG_ERROR,
"%s: Buffer too small for %s. It is %zu bytes long (len=%zu)",
cclass_name, a->name, alen + 1, *len);
*len = alen + 1;
return GRIB_BUFFER_TOO_SMALL;
}
size_t i = 0;
for (i = 0; i < alen; i++)
val[i] = hand->buffer->data[a->offset + i];
val[i] = 0;
*len = i;
return GRIB_SUCCESS;
}
int grib_accessor_class_ascii_t::pack_string(grib_accessor* a, const char* val, size_t* len)
{
grib_handle* hand = grib_handle_of_accessor(a);
const size_t alen = a->length;
if (len[0] > (alen + 1)) {
grib_context_log(a->context, GRIB_LOG_ERROR,
"pack_string: Wrong size (%zu) for %s, it contains %ld values",
len[0], a->name, a->length + 1);
len[0] = 0;
return GRIB_BUFFER_TOO_SMALL;
}
for (size_t i = 0; i < alen; i++) {
if (i < len[0])
hand->buffer->data[a->offset + i] = val[i];
else
hand->buffer->data[a->offset + i] = 0;
}
return GRIB_SUCCESS;
}
int grib_accessor_class_ascii_t::pack_long(grib_accessor* a, const long* v, size_t* len)
{
grib_context_log(a->context, GRIB_LOG_ERROR, "Should not pack %s as long (It's a string)", a->name);
return GRIB_NOT_IMPLEMENTED;
}
int grib_accessor_class_ascii_t::pack_double(grib_accessor* a, const double* v, size_t* len)
{
grib_context_log(a->context, GRIB_LOG_ERROR, "Should not pack %s as double (It's a string)", a->name);
return GRIB_NOT_IMPLEMENTED;
}
int grib_accessor_class_ascii_t::unpack_long(grib_accessor* a, long* v, size_t* len)
{
char val[1024] = {0,};
size_t l = sizeof(val);
size_t i = 0;
char* last = NULL;
int err = a->unpack_string(val, &l);
if (err)
return err;
i = 0;
while (i < l - 1 && val[i] == ' ')
i++;
if (val[i] == 0) {
*v = 0;
return 0;
}
if (val[i + 1] == ' ' && i < l - 2)
val[i + 1] = 0;
*v = strtol(val, &last, 10);
grib_context_log(a->context, GRIB_LOG_DEBUG, " Casting string %s to long", a->name);
return GRIB_SUCCESS;
}
int grib_accessor_class_ascii_t::unpack_double(grib_accessor* a, double* v, size_t* len)
{
char val[1024];
size_t l = sizeof(val);
char* last = NULL;
int err = a->unpack_string(val, &l);
if (err) return err;
*v = strtod(val, &last);
if (*last == 0) {
grib_context_log(a->context, GRIB_LOG_DEBUG, " Casting string %s to long", a->name);
return GRIB_SUCCESS;
}
grib_context_log(a->context, GRIB_LOG_WARNING, "Cannot unpack %s as double. Hint: Try unpacking as string", a->name);
return GRIB_NOT_IMPLEMENTED;
}
int grib_accessor_class_ascii_t::compare(grib_accessor* a, grib_accessor* b)
{
int retval = 0;
char* aval = 0;
char* bval = 0;
int err = 0;
size_t alen = a->length + 1;
size_t blen = b->length + 1;
if (alen != blen)
return GRIB_COUNT_MISMATCH;
aval = (char*)grib_context_malloc(a->context, alen * sizeof(char));
bval = (char*)grib_context_malloc(b->context, blen * sizeof(char));
err = a->unpack_string(aval, &alen);
if (err) return err;
err = b->unpack_string(bval, &blen);
if (err) return err;
retval = GRIB_SUCCESS;
if (!STR_EQUAL(aval, bval))
retval = GRIB_STRING_VALUE_MISMATCH;
grib_context_free(a->context, aval);
grib_context_free(b->context, bval);
return retval;
}

View File

@ -0,0 +1,39 @@
/*
* (C) Copyright 2005- ECMWF.
*
* This software is licensed under the terms of the Apache Licence Version 2.0
* which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
*
* In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#pragma once
#include "grib_accessor_class_gen.h"
class grib_accessor_ascii_t : public grib_accessor_gen_t
{
public:
/* Members defined in ascii */
};
class grib_accessor_class_ascii_t : public grib_accessor_class_gen_t
{
public:
grib_accessor_class_ascii_t(const char* name) : grib_accessor_class_gen_t(name) {}
grib_accessor* create_empty_accessor() override { return new grib_accessor_ascii_t{}; }
int get_native_type(grib_accessor*) override;
int pack_double(grib_accessor*, const double* val, size_t* len) override;
int pack_long(grib_accessor*, const long* val, size_t* len) override;
int pack_string(grib_accessor*, const char*, size_t* len) override;
int unpack_double(grib_accessor*, double* val, size_t* len) override;
int unpack_long(grib_accessor*, long* val, size_t* len) override;
int unpack_string(grib_accessor*, char*, size_t* len) override;
size_t string_length(grib_accessor*) override;
int value_count(grib_accessor*, long*) override;
void dump(grib_accessor*, grib_dumper*) override;
void init(grib_accessor*, const long, grib_arguments*) override;
int compare(grib_accessor*, grib_accessor*) override;
};

View File

@ -0,0 +1,82 @@
/*
* (C) Copyright 2005- ECMWF.
*
* This software is licensed under the terms of the Apache Licence Version 2.0
* which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
*
* In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#include "grib_accessor_class_bit.h"
grib_accessor_class_bit_t _grib_accessor_class_bit{ "bit" };
grib_accessor_class* grib_accessor_class_bit = &_grib_accessor_class_bit;
void grib_accessor_class_bit_t::init(grib_accessor* a, const long len, grib_arguments* arg)
{
grib_accessor_class_long_t::init(a, len, arg);
grib_accessor_bit_t* self = (grib_accessor_bit_t*)a;
a->length = 0;
self->owner = grib_arguments_get_name(grib_handle_of_accessor(a), arg, 0);
self->bit_index = grib_arguments_get_long(grib_handle_of_accessor(a), arg, 1);
}
int grib_accessor_class_bit_t::unpack_long(grib_accessor* a, long* val, size_t* len)
{
grib_accessor_bit_t* self = (grib_accessor_bit_t*)a;
int ret = 0;
long data = 0;
if (*len < 1) {
grib_context_log(a->context, GRIB_LOG_ERROR, "grib_accessor_bit_t: unpack_long: Wrong size for %s, it contains %d values ", a->name, 1);
*len = 1;
return GRIB_ARRAY_TOO_SMALL;
}
if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->owner, &data)) != GRIB_SUCCESS) {
*len = 0;
return ret;
}
if (data & (1 << self->bit_index))
*val = 1;
else
*val = 0;
*len = 1;
return GRIB_SUCCESS;
}
int grib_accessor_class_bit_t::pack_long(grib_accessor* a, const long* val, size_t* len)
{
grib_accessor_bit_t* self = (grib_accessor_bit_t*)a;
if (*len < 1) {
grib_context_log(a->context, GRIB_LOG_ERROR, "grib_accessor_bit_t: pack_long: At least one value to pack for %s", a->name);
*len = 1;
return GRIB_ARRAY_TOO_SMALL;
}
grib_accessor* owner = grib_find_accessor(grib_handle_of_accessor(a), self->owner);
if (!owner) {
grib_context_log(a->context, GRIB_LOG_ERROR, "grib_accessor_bit_t: Cannot get the owner %s for computing the bit value of %s",
self->owner, a->name);
*len = 0;
return GRIB_NOT_FOUND;
}
unsigned char* mdata = grib_handle_of_accessor(a)->buffer->data;
mdata += owner->byte_offset();
/* Note: In the definitions, flagbit numbers go from 7 to 0 (the bit_index), while WMO convention is from 1 to 8 */
if (a->context->debug) {
/* Print bit positions from 1 (MSB) */
fprintf(stderr, "ECCODES DEBUG Setting bit %d in %s to %d\n", 8 - self->bit_index, owner->name, (*val > 0));
}
grib_set_bit(mdata, 7 - self->bit_index, *val > 0);
*len = 1;
return GRIB_SUCCESS;
}

View File

@ -0,0 +1,32 @@
/*
* (C) Copyright 2005- ECMWF.
*
* This software is licensed under the terms of the Apache Licence Version 2.0
* which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
*
* In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#pragma once
#include "grib_accessor_class_long.h"
class grib_accessor_bit_t : public grib_accessor_long_t
{
public:
/* Members defined in bit */
const char* owner;
int bit_index;
};
class grib_accessor_class_bit_t : public grib_accessor_class_long_t
{
public:
grib_accessor_class_bit_t(const char* name) : grib_accessor_class_long_t(name) {}
grib_accessor* create_empty_accessor() override { return new grib_accessor_bit_t{}; }
int pack_long(grib_accessor*, const long* val, size_t* len) override;
int unpack_long(grib_accessor*, long* val, size_t* len) override;
void init(grib_accessor*, const long, grib_arguments*) override;
};

View File

@ -0,0 +1,189 @@
/*
* (C) Copyright 2005- ECMWF.
*
* This software is licensed under the terms of the Apache Licence Version 2.0
* which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
*
* In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#include "grib_accessor_class_bitmap.h"
grib_accessor_class_bitmap_t _grib_accessor_class_bitmap{ "bitmap" };
grib_accessor_class* grib_accessor_class_bitmap = &_grib_accessor_class_bitmap;
static void compute_size(grib_accessor* a)
{
long slen = 0;
long off = 0;
grib_handle* hand = grib_handle_of_accessor(a);
grib_accessor_bitmap_t* self = (grib_accessor_bitmap_t*)a;
grib_get_long_internal(hand, self->offsetbsec, &off);
grib_get_long_internal(hand, self->sLength, &slen);
if (slen == 0) {
grib_accessor* seclen;
size_t size;
/* Assume reparsing */
Assert(hand->loader != 0);
if (hand->loader != 0) {
seclen = grib_find_accessor(hand, self->sLength);
Assert(seclen);
grib_get_block_length(seclen->parent, &size);
slen = size;
}
}
// printf("compute_size off=%ld slen=%ld a->offset=%ld\n", (long)off,(long)slen,(long)a->offset);
a->length = off + (slen - a->offset);
if (a->length < 0) {
/* Assume reparsing */
/*Assert(hand->loader != 0);*/
a->length = 0;
}
Assert(a->length >= 0);
}
void grib_accessor_class_bitmap_t::init(grib_accessor* a, const long len, grib_arguments* arg)
{
grib_accessor_class_bytes_t::init(a, len, arg);
grib_accessor_bitmap_t* self = (grib_accessor_bitmap_t*)a;
grib_handle* hand = grib_handle_of_accessor(a);
int n = 0;
self->tableReference = grib_arguments_get_name(hand, arg, n++);
self->missing_value = grib_arguments_get_name(hand, arg, n++);
self->offsetbsec = grib_arguments_get_name(hand, arg, n++);
self->sLength = grib_arguments_get_name(hand, arg, n++);
compute_size(a);
}
long grib_accessor_class_bitmap_t::next_offset(grib_accessor* a)
{
return a->byte_offset() + a->byte_count();
}
void grib_accessor_class_bitmap_t::dump(grib_accessor* a, grib_dumper* dumper)
{
long len = 0;
char label[1024];
a->value_count(&len);
snprintf(label, sizeof(label), "Bitmap of %ld values", len);
grib_dump_bytes(dumper, a, label);
}
int grib_accessor_class_bitmap_t::unpack_long(grib_accessor* a, long* val, size_t* len)
{
long pos = a->offset * 8;
long tlen = 0;
const grib_handle* hand = grib_handle_of_accessor(a);
int err = a->value_count(&tlen);
if (err)
return err;
if (*len < tlen) {
grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s, it contains %ld values", a->name, tlen);
*len = tlen;
return GRIB_ARRAY_TOO_SMALL;
}
for (long i = 0; i < tlen; i++) {
val[i] = (long)grib_decode_unsigned_long(hand->buffer->data, &pos, 1);
}
*len = tlen;
return GRIB_SUCCESS;
}
template <typename T>
static int unpack(grib_accessor* a, T* val, size_t* len)
{
static_assert(std::is_floating_point<T>::value, "Requires floating points numbers");
long pos = a->offset * 8;
long tlen;
grib_handle* hand = grib_handle_of_accessor(a);
int err = a->value_count(&tlen);
if (err)
return err;
if (*len < tlen) {
grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s, it contains %ld values", a->name, tlen);
*len = tlen;
return GRIB_ARRAY_TOO_SMALL;
}
for (long i = 0; i < tlen; i++) {
val[i] = (T)grib_decode_unsigned_long(hand->buffer->data, &pos, 1);
}
*len = tlen;
return GRIB_SUCCESS;
}
int grib_accessor_class_bitmap_t::unpack_double(grib_accessor* a, double* val, size_t* len)
{
return unpack<double>(a, val, len);
}
int grib_accessor_class_bitmap_t::unpack_float(grib_accessor* a, float* val, size_t* len)
{
return unpack<float>(a, val, len);
}
int grib_accessor_class_bitmap_t::unpack_double_element(grib_accessor* a, size_t idx, double* val)
{
long pos = a->offset * 8;
pos += idx;
*val = (double)grib_decode_unsigned_long(grib_handle_of_accessor(a)->buffer->data, &pos, 1);
return GRIB_SUCCESS;
}
int grib_accessor_class_bitmap_t::unpack_double_element_set(grib_accessor* a, const size_t* index_array, size_t len, double* val_array)
{
for (size_t i = 0; i < len; ++i) {
unpack_double_element(a, index_array[i], val_array + i);
}
return GRIB_SUCCESS;
}
void grib_accessor_class_bitmap_t::update_size(grib_accessor* a, size_t s)
{
a->length = s;
}
size_t grib_accessor_class_bitmap_t::string_length(grib_accessor* a)
{
return a->length;
}
int grib_accessor_class_bitmap_t::unpack_string(grib_accessor* a, char* val, size_t* len)
{
grib_handle* hand = grib_handle_of_accessor(a);
const size_t l = a->length;
if (*len < l) {
const char* cclass_name = a->cclass->name;
grib_context_log(a->context, GRIB_LOG_ERROR,
"%s: Buffer too small for %s. It is %zu bytes long (len=%zu)",
cclass_name, a->name, l, *len);
*len = l;
return GRIB_BUFFER_TOO_SMALL;
}
for (long i = 0; i < a->length; i++) {
val[i] = hand->buffer->data[a->offset + i];
}
*len = a->length;
return GRIB_SUCCESS;
}

View File

@ -0,0 +1,42 @@
/*
* (C) Copyright 2005- ECMWF.
*
* This software is licensed under the terms of the Apache Licence Version 2.0
* which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
*
* In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#pragma once
#include "grib_accessor_class_bytes.h"
class grib_accessor_bitmap_t : public grib_accessor_bytes_t
{
public:
/* Members defined in bitmap */
const char* tableReference;
const char* missing_value;
const char* offsetbsec;
const char* sLength;
};
class grib_accessor_class_bitmap_t : public grib_accessor_class_bytes_t
{
public:
grib_accessor_class_bitmap_t(const char* name) : grib_accessor_class_bytes_t(name) {}
grib_accessor* create_empty_accessor() override { return new grib_accessor_bitmap_t{}; }
int unpack_double(grib_accessor*, double* val, size_t* len) override;
int unpack_float(grib_accessor*, float* val, size_t* len) override;
int unpack_long(grib_accessor*, long* val, size_t* len) override;
int unpack_string(grib_accessor*, char*, size_t* len) override;
size_t string_length(grib_accessor*) override;
long next_offset(grib_accessor*) override;
void dump(grib_accessor*, grib_dumper*) override;
void init(grib_accessor*, const long, grib_arguments*) override;
void update_size(grib_accessor*, size_t) override;
int unpack_double_element(grib_accessor*, size_t i, double* val) override;
int unpack_double_element_set(grib_accessor*, const size_t* index_array, size_t len, double* val_array) override;
};

View File

@ -1,3 +1,4 @@
/*
* (C) Copyright 2005- ECMWF.
*
@ -8,127 +9,15 @@
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
/**************************************
* Enrico Fucile
**************************************/
#include "grib_api_internal.h"
/*
This is used by make_class.pl
START_CLASS_DEF
CLASS = accessor
SUPER = grib_accessor_class_gen
IMPLEMENTS = get_native_type
IMPLEMENTS = unpack_long; pack_long
IMPLEMENTS = unpack_bytes; byte_count
IMPLEMENTS = unpack_double; pack_double
IMPLEMENTS = unpack_string
IMPLEMENTS = init
MEMBERS=const char* argument
MEMBERS=long start
MEMBERS=long len
MEMBERS=double referenceValue
MEMBERS=double referenceValuePresent
MEMBERS=double scale
END_CLASS_DEF
*/
/* START_CLASS_IMP */
/*
Don't edit anything between START_CLASS_IMP and END_CLASS_IMP
Instead edit values between START_CLASS_DEF and END_CLASS_DEF
or edit "accessor.class" and rerun ./make_class.pl
*/
static int get_native_type(grib_accessor*);
static int pack_double(grib_accessor*, const double* val, size_t* len);
static int pack_long(grib_accessor*, const long* val, size_t* len);
static int unpack_bytes(grib_accessor*, unsigned char*, size_t* len);
static int unpack_double(grib_accessor*, double* val, size_t* len);
static int unpack_long(grib_accessor*, long* val, size_t* len);
static int unpack_string(grib_accessor*, char*, size_t* len);
static long byte_count(grib_accessor*);
static void init(grib_accessor*, const long, grib_arguments*);
typedef struct grib_accessor_bits
{
grib_accessor att;
/* Members defined in gen */
/* Members defined in bits */
const char* argument;
long start;
long len;
double referenceValue;
double referenceValuePresent;
double scale;
} grib_accessor_bits;
extern grib_accessor_class* grib_accessor_class_gen;
static grib_accessor_class _grib_accessor_class_bits = {
&grib_accessor_class_gen, /* super */
"bits", /* name */
sizeof(grib_accessor_bits), /* size */
0, /* inited */
0, /* init_class */
&init, /* init */
0, /* post_init */
0, /* destroy */
0, /* dump */
0, /* next_offset */
0, /* get length of string */
0, /* get number of values */
&byte_count, /* get number of bytes */
0, /* get offset to bytes */
&get_native_type, /* get native type */
0, /* get sub_section */
0, /* pack_missing */
0, /* is_missing */
&pack_long, /* pack_long */
&unpack_long, /* unpack_long */
&pack_double, /* pack_double */
0, /* pack_float */
&unpack_double, /* unpack_double */
0, /* unpack_float */
0, /* pack_string */
&unpack_string, /* unpack_string */
0, /* pack_string_array */
0, /* unpack_string_array */
0, /* pack_bytes */
&unpack_bytes, /* unpack_bytes */
0, /* pack_expression */
0, /* notify_change */
0, /* update_size */
0, /* preferred_size */
0, /* resize */
0, /* nearest_smaller_value */
0, /* next accessor */
0, /* compare vs. another accessor */
0, /* unpack only ith value (double) */
0, /* unpack only ith value (float) */
0, /* unpack a given set of elements (double) */
0, /* unpack a given set of elements (float) */
0, /* unpack a subarray */
0, /* clear */
0, /* clone accessor */
};
#include "grib_accessor_class_bits.h"
grib_accessor_class_bits_t _grib_accessor_class_bits{"bits"};
grib_accessor_class* grib_accessor_class_bits = &_grib_accessor_class_bits;
/* END_CLASS_IMP */
static void init(grib_accessor* a, const long l, grib_arguments* c)
{
grib_accessor_bits* self = (grib_accessor_bits*)a;
void grib_accessor_class_bits_t::init(grib_accessor* a, const long l, grib_arguments* c){
grib_accessor_class_gen_t::init(a, l, c);
grib_accessor_bits_t* self = (grib_accessor_bits_t*)a;
grib_handle* hand = grib_handle_of_accessor(a);
grib_expression* e = NULL;
int n = 0;
@ -154,9 +43,8 @@ static void init(grib_accessor* a, const long l, grib_arguments* c)
a->length = 0;
}
static int unpack_long(grib_accessor* a, long* val, size_t* len)
{
grib_accessor_bits* self = (grib_accessor_bits*)a;
int grib_accessor_class_bits_t::unpack_long(grib_accessor* a, long* val, size_t* len){
grib_accessor_bits_t* self = (grib_accessor_bits_t*)a;
grib_accessor* x = NULL;
unsigned char* p = NULL;
grib_handle* h = grib_handle_of_accessor(a);
@ -173,17 +61,15 @@ static int unpack_long(grib_accessor* a, long* val, size_t* len)
if (!x)
return GRIB_NOT_FOUND;
p = h->buffer->data + grib_byte_offset(x);
*val = grib_decode_unsigned_long(p, &start, length);
p = h->buffer->data + x->byte_offset(); *val = grib_decode_unsigned_long(p, &start, length);
*len = 1;
return ret;
}
static int unpack_double(grib_accessor* a, double* val, size_t* len)
{
grib_accessor_bits* self = (grib_accessor_bits*)a;
int grib_accessor_class_bits_t::unpack_double(grib_accessor* a, double* val, size_t* len){
grib_accessor_bits_t* self = (grib_accessor_bits_t*)a;
grib_accessor* x = NULL;
unsigned char* p = NULL;
grib_handle* h = grib_handle_of_accessor(a);
@ -200,8 +86,7 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len)
if (!x)
return GRIB_NOT_FOUND;
p = h->buffer->data + grib_byte_offset(x);
*val = grib_decode_unsigned_long(p, &start, length);
p = h->buffer->data + x->byte_offset(); *val = grib_decode_unsigned_long(p, &start, length);
*val = ((long)*val + self->referenceValue) / self->scale;
@ -210,9 +95,8 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len)
return ret;
}
static int pack_double(grib_accessor* a, const double* val, size_t* len)
{
grib_accessor_bits* self = (grib_accessor_bits*)a;
int grib_accessor_class_bits_t::pack_double(grib_accessor* a, const double* val, size_t* len){
grib_accessor_bits_t* self = (grib_accessor_bits_t*)a;
grib_accessor* x = NULL;
grib_handle* h = grib_handle_of_accessor(a);
unsigned char* p = NULL;
@ -228,15 +112,13 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
if (!x)
return GRIB_NOT_FOUND;
p = h->buffer->data + grib_byte_offset(x);
p = h->buffer->data + x->byte_offset();
lval = round(*val * self->scale) - self->referenceValue;
return grib_encode_unsigned_longb(p, lval, &start, length);
}
static int pack_long(grib_accessor* a, const long* val, size_t* len)
{
grib_accessor_bits* self = (grib_accessor_bits*)a;
int grib_accessor_class_bits_t::pack_long(grib_accessor* a, const long* val, size_t* len){
grib_accessor_bits_t* self = (grib_accessor_bits_t*)a;
grib_accessor* x = NULL;
grib_handle* h = grib_handle_of_accessor(a);
unsigned char* p = NULL;
@ -285,14 +167,12 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len)
return GRIB_ENCODING_ERROR;
}
p = h->buffer->data + grib_byte_offset(x);
return grib_encode_unsigned_longb(p, *val, &start, length);
p = h->buffer->data + x->byte_offset(); return grib_encode_unsigned_longb(p, *val, &start, length);
}
static int get_native_type(grib_accessor* a)
{
int grib_accessor_class_bits_t::get_native_type(grib_accessor* a){
int type = GRIB_TYPE_BYTES;
grib_accessor_bits* self = (grib_accessor_bits*)a;
grib_accessor_bits_t* self = (grib_accessor_bits_t*)a;
if (a->flags & GRIB_ACCESSOR_FLAG_STRING_TYPE)
type = GRIB_TYPE_STRING;
@ -306,13 +186,11 @@ static int get_native_type(grib_accessor* a)
return type;
}
static int unpack_string(grib_accessor* a, char* v, size_t* len)
{
int grib_accessor_class_bits_t::unpack_string(grib_accessor* a, char* v, size_t* len){
int ret = 0;
double dval = 0;
long lval = 0;
size_t llen = 1;
grib_accessor_class* super = NULL;
switch (get_native_type(a)) {
case GRIB_TYPE_LONG:
@ -328,20 +206,17 @@ static int unpack_string(grib_accessor* a, char* v, size_t* len)
break;
default:
super = *(a->cclass->super);
ret = super->unpack_string(a, v, len);
ret = grib_accessor_class_gen_t::unpack_string(a, v, len);
}
return ret;
}
static long byte_count(grib_accessor* a)
{
long grib_accessor_class_bits_t::byte_count(grib_accessor* a){
grib_context_log(a->context, GRIB_LOG_DEBUG, "byte_count of %s = %ld", a->name, a->length);
return a->length;
}
static int unpack_bytes(grib_accessor* a, unsigned char* buffer, size_t* len)
{
int grib_accessor_class_bits_t::unpack_bytes(grib_accessor* a, unsigned char* buffer, size_t* len){
if (*len < a->length) {
*len = a->length;
return GRIB_ARRAY_TOO_SMALL;

View File

@ -0,0 +1,42 @@
/*
* (C) Copyright 2005- ECMWF.
*
* This software is licensed under the terms of the Apache Licence Version 2.0
* which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
*
* In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#pragma once
#include "grib_accessor_class_gen.h"
class grib_accessor_bits_t : public grib_accessor_gen_t
{
public:
/* Members defined in bits */
const char* argument;
long start;
long len;
double referenceValue;
double referenceValuePresent;
double scale;
};
class grib_accessor_class_bits_t : public grib_accessor_class_gen_t
{
public:
grib_accessor_class_bits_t(const char* name) : grib_accessor_class_gen_t(name) {}
grib_accessor* create_empty_accessor() override { return new grib_accessor_bits_t{}; }
int get_native_type(grib_accessor*) override;
int pack_double(grib_accessor*, const double* val, size_t* len) override;
int pack_long(grib_accessor*, const long* val, size_t* len) override;
int unpack_bytes(grib_accessor*, unsigned char*, size_t* len) override;
int unpack_double(grib_accessor*, double* val, size_t* len) override;
int unpack_long(grib_accessor*, long* val, size_t* len) override;
int unpack_string(grib_accessor*, char*, size_t* len) override;
long byte_count(grib_accessor*) override;
void init(grib_accessor*, const long, grib_arguments*) override;
};

View File

@ -0,0 +1,78 @@
/*
* (C) Copyright 2005- ECMWF.
*
* This software is licensed under the terms of the Apache Licence Version 2.0
* which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
*
* In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#include "grib_accessor_class_bits_per_value.h"
grib_accessor_class_bits_per_value_t _grib_accessor_class_bits_per_value{ "bits_per_value" };
grib_accessor_class* grib_accessor_class_bits_per_value = &_grib_accessor_class_bits_per_value;
void grib_accessor_class_bits_per_value_t::init(grib_accessor* a, const long l, grib_arguments* args)
{
grib_accessor_class_long_t::init(a, l, args);
int n = 0;
grib_accessor_bits_per_value_t* self = (grib_accessor_bits_per_value_t*)a;
self->values = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++);
self->bits_per_value = grib_arguments_get_name(grib_handle_of_accessor(a), args, n++);
a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION;
a->length = 0;
}
int grib_accessor_class_bits_per_value_t::unpack_long(grib_accessor* a, long* val, size_t* len)
{
grib_accessor_bits_per_value_t* self = (grib_accessor_bits_per_value_t*)a;
int ret = 0;
grib_handle* h = grib_handle_of_accessor(a);
if ((ret = grib_get_long_internal(h, self->bits_per_value, val)) != GRIB_SUCCESS)
return ret;
*len = 1;
return ret;
}
int grib_accessor_class_bits_per_value_t::pack_long(grib_accessor* a, const long* val, size_t* len)
{
grib_accessor_bits_per_value_t* self = (grib_accessor_bits_per_value_t*)a;
double* values = NULL;
size_t size = 0;
int ret = 0;
grib_context* c = a->context;
grib_handle* h = grib_handle_of_accessor(a);
if ((ret = grib_get_size(h, self->values, &size)) != GRIB_SUCCESS)
return ret;
values = (double*)grib_context_malloc(c, size * sizeof(double));
if (!values)
return GRIB_OUT_OF_MEMORY;
if ((ret = grib_get_double_array_internal(h, self->values, values, &size)) != GRIB_SUCCESS) {
grib_context_free(c, values);
return ret;
}
if ((ret = grib_set_long_internal(h, self->bits_per_value, *val)) != GRIB_SUCCESS) {
grib_context_free(c, values);
return ret;
}
if ((ret = grib_set_double_array_internal(h, self->values, values, size)) != GRIB_SUCCESS) {
grib_context_free(c, values);
return ret;
}
grib_context_free(c, values);
return GRIB_SUCCESS;
}

View File

@ -0,0 +1,32 @@
/*
* (C) Copyright 2005- ECMWF.
*
* This software is licensed under the terms of the Apache Licence Version 2.0
* which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
*
* In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#pragma once
#include "grib_accessor_class_long.h"
class grib_accessor_bits_per_value_t : public grib_accessor_long_t
{
public:
/* Members defined in bits_per_value */
const char* values;
const char* bits_per_value;
};
class grib_accessor_class_bits_per_value_t : public grib_accessor_class_long_t
{
public:
grib_accessor_class_bits_per_value_t(const char* name) : grib_accessor_class_long_t(name) {}
grib_accessor* create_empty_accessor() override { return new grib_accessor_bits_per_value_t{}; }
int pack_long(grib_accessor*, const long* val, size_t* len) override;
int unpack_long(grib_accessor*, long* val, size_t* len) override;
void init(grib_accessor*, const long, grib_arguments*) override;
};

View File

@ -0,0 +1,47 @@
/*
* (C) Copyright 2005- ECMWF.
*
* This software is licensed under the terms of the Apache Licence Version 2.0
* which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
*
* In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#include "grib_accessor_class_blob.h"
grib_accessor_class_blob_t _grib_accessor_class_blob{ "blob" };
grib_accessor_class* grib_accessor_class_blob = &_grib_accessor_class_blob;
void grib_accessor_class_blob_t::init(grib_accessor* a, const long len, grib_arguments* arg)
{
grib_accessor_class_gen_t::init(a, len, arg);
grib_get_long_internal(grib_handle_of_accessor(a),
grib_arguments_get_name(a->parent->h, arg, 0), &a->length);
Assert(a->length >= 0);
}
int grib_accessor_class_blob_t::get_native_type(grib_accessor* a)
{
return GRIB_TYPE_BYTES;
}
int grib_accessor_class_blob_t::unpack_bytes(grib_accessor* a, unsigned char* buffer, size_t* len)
{
if (*len < (size_t)a->length) {
*len = a->length;
return GRIB_ARRAY_TOO_SMALL;
}
*len = a->length;
memcpy(buffer, grib_handle_of_accessor(a)->buffer->data + a->offset, *len);
return GRIB_SUCCESS;
}
void grib_accessor_class_blob_t::dump(grib_accessor* a, grib_dumper* dumper)
{
grib_dump_bytes(dumper, a, NULL);
}

View File

@ -0,0 +1,31 @@
/*
* (C) Copyright 2005- ECMWF.
*
* This software is licensed under the terms of the Apache Licence Version 2.0
* which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
*
* In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#pragma once
#include "grib_accessor_class_gen.h"
class grib_accessor_blob_t : public grib_accessor_gen_t
{
public:
/* Members defined in blob */
};
class grib_accessor_class_blob_t : public grib_accessor_class_gen_t
{
public:
grib_accessor_class_blob_t(const char* name) : grib_accessor_class_gen_t(name) {}
grib_accessor* create_empty_accessor() override { return new grib_accessor_blob_t{}; }
int get_native_type(grib_accessor*) override;
int unpack_bytes(grib_accessor*, unsigned char*, size_t* len) override;
void dump(grib_accessor*, grib_dumper*) override;
void init(grib_accessor*, const long, grib_arguments*) override;
};

View File

@ -0,0 +1,82 @@
/*
* (C) Copyright 2005- ECMWF.
*
* This software is licensed under the terms of the Apache Licence Version 2.0
* which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
*
* In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#include "grib_accessor_class_budgdate.h"
grib_accessor_class_budgdate_t _grib_accessor_class_budgdate{"budgdate"};
grib_accessor_class* grib_accessor_class_budgdate = &_grib_accessor_class_budgdate;
void grib_accessor_class_budgdate_t::init(grib_accessor* a, const long l, grib_arguments* c){
grib_accessor_class_long_t::init(a, l, c);
grib_accessor_budgdate_t* self = (grib_accessor_budgdate_t*)a;
int n = 0;
self->year = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++);
self->month = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++);
self->day = grib_arguments_get_name(grib_handle_of_accessor(a), c, n++);
}
int grib_accessor_class_budgdate_t::unpack_long(grib_accessor* a, long* val, size_t* len){
int ret = 0;
grib_accessor_budgdate_t* self = (grib_accessor_budgdate_t*)a;
long year = 0;
long month = 0;
long day = 0;
if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->day, &day)) != GRIB_SUCCESS)
return ret;
if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->month, &month)) != GRIB_SUCCESS)
return ret;
if ((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->year, &year)) != GRIB_SUCCESS)
return ret;
if (*len < 1)
return GRIB_WRONG_ARRAY_SIZE;
val[0] = (1900 + year) * 10000 + month * 100 + day;
return ret;
}
/* TODO: Check for a valid date */
int grib_accessor_class_budgdate_t::pack_long(grib_accessor* a, const long* val, size_t* len){
int ret = 0;
long v = val[0];
grib_accessor_budgdate_t* self = (grib_accessor_budgdate_t*)a;
long year = 0;
long month = 0;
long day = 0;
if (*len != 1)
return GRIB_WRONG_ARRAY_SIZE;
year = v / 10000;
v %= 10000;
month = v / 100;
v %= 100;
day = v;
year -= 1900;
Assert(year < 255);
if ((ret = grib_set_long_internal(grib_handle_of_accessor(a), self->day, day)) != GRIB_SUCCESS)
return ret;
if ((ret = grib_set_long_internal(grib_handle_of_accessor(a), self->month, month)) != GRIB_SUCCESS)
return ret;
if ((ret = grib_set_long_internal(grib_handle_of_accessor(a), self->year, year)) != GRIB_SUCCESS)
return ret;
return ret;
}

View File

@ -0,0 +1,33 @@
/*
* (C) Copyright 2005- ECMWF.
*
* This software is licensed under the terms of the Apache Licence Version 2.0
* which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
*
* In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#pragma once
#include "grib_accessor_class_long.h"
class grib_accessor_budgdate_t : public grib_accessor_long_t
{
public:
/* Members defined in budgdate */
const char* year;
const char* month;
const char* day;
};
class grib_accessor_class_budgdate_t : public grib_accessor_class_long_t
{
public:
grib_accessor_class_budgdate_t(const char* name) : grib_accessor_class_long_t(name) {}
grib_accessor* create_empty_accessor() override { return new grib_accessor_budgdate_t{}; }
int pack_long(grib_accessor*, const long* val, size_t* len) override;
int unpack_long(grib_accessor*, long* val, size_t* len) override;
void init(grib_accessor*, const long, grib_arguments*) override;
};

View File

@ -0,0 +1,89 @@
/*
* (C) Copyright 2005- ECMWF.
*
* This software is licensed under the terms of the Apache Licence Version 2.0
* which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
*
* In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#pragma once
#include "grib_accessor_class_gen.h"
class grib_accessor_bufr_data_array_t : public grib_accessor_gen_t
{
public:
const char* bufrDataEncodedName;
const char* numberOfSubsetsName;
const char* expandedDescriptorsName;
const char* flagsName;
const char* unitsName;
const char* elementsDescriptorsIndexName;
const char* compressedDataName;
bufr_descriptors_array* expanded;
grib_accessor* expandedAccessor;
int* canBeMissing;
long numberOfSubsets;
long compressedData;
grib_vdarray* numericValues;
grib_vsarray* stringValues;
grib_viarray* elementsDescriptorsIndex;
int do_decode;
int bitmapStartElementsDescriptorsIndex;
int bitmapCurrentElementsDescriptorsIndex;
int bitmapSize;
int bitmapStart;
int bitmapCurrent;
grib_accessors_list* dataAccessors;
int unpackMode;
int bitsToEndData;
grib_section* dataKeys;
double* inputBitmap;
int nInputBitmap;
int iInputBitmap;
long* inputReplications;
int nInputReplications;
int iInputReplications;
long* inputExtendedReplications;
int nInputExtendedReplications;
int iInputExtendedReplications;
long* inputShortReplications;
int nInputShortReplications;
int iInputShortReplications;
grib_iarray* iss_list;
grib_trie_with_rank* dataAccessorsTrie;
grib_sarray* tempStrings;
grib_vdarray* tempDoubleValues;
int change_ref_value_operand;
size_t refValListSize;
long* refValList;
long refValIndex;
bufr_tableb_override* tableb_override;
int set_to_missing_if_out_of_range;
};
class grib_accessor_class_bufr_data_array_t : public grib_accessor_class_gen_t
{
public:
grib_accessor_class_bufr_data_array_t(const char* name) : grib_accessor_class_gen_t(name) {}
grib_accessor* create_empty_accessor() override { return new grib_accessor_bufr_data_array_t{}; }
int get_native_type(grib_accessor*) override;
int pack_double(grib_accessor*, const double* val, size_t* len) override;
int pack_long(grib_accessor*, const long* val, size_t* len) override;
int unpack_double(grib_accessor*, double* val, size_t* len) override;
long byte_count(grib_accessor*) override;
long byte_offset(grib_accessor*) override;
long next_offset(grib_accessor*) override;
int value_count(grib_accessor*, long*) override;
void destroy(grib_context*, grib_accessor*) override;
void dump(grib_accessor*, grib_dumper*) override;
void init(grib_accessor*, const long, grib_arguments*) override;
};
grib_vsarray* accessor_bufr_data_array_get_stringValues(grib_accessor* a);
grib_accessors_list* accessor_bufr_data_array_get_dataAccessors(grib_accessor* a);
grib_trie_with_rank* accessor_bufr_data_array_get_dataAccessorsTrie(grib_accessor* a);
void accessor_bufr_data_array_set_unpackMode(grib_accessor* a, int unpackMode);

View File

@ -8,147 +8,22 @@
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
/*****************************************
* Enrico Fucile
****************************************/
#include "grib_api_internal.h"
/*
This is used by make_class.pl
START_CLASS_DEF
CLASS = accessor
SUPER = grib_accessor_class_gen
IMPLEMENTS = init;dump
IMPLEMENTS = unpack_string;unpack_string_array;unpack_long; unpack_double
IMPLEMENTS = unpack_double_element ; is_missing
IMPLEMENTS = pack_long; pack_double ; pack_string_array; pack_string; pack_missing
IMPLEMENTS = value_count; get_native_type; make_clone; destroy
MEMBERS = long index
MEMBERS = int type
MEMBERS = long compressedData
MEMBERS = long subsetNumber
MEMBERS = long numberOfSubsets
MEMBERS = bufr_descriptors_array* descriptors
MEMBERS = grib_vdarray* numericValues
MEMBERS = grib_vsarray* stringValues
MEMBERS = grib_viarray* elementsDescriptorsIndex
MEMBERS = char* cname
END_CLASS_DEF
*/
/* START_CLASS_IMP */
/*
Don't edit anything between START_CLASS_IMP and END_CLASS_IMP
Instead edit values between START_CLASS_DEF and END_CLASS_DEF
or edit "accessor.class" and rerun ./make_class.pl
*/
static int get_native_type(grib_accessor*);
static int pack_missing(grib_accessor*);
static int is_missing(grib_accessor*);
static int pack_double(grib_accessor*, const double* val, size_t* len);
static int pack_long(grib_accessor*, const long* val, size_t* len);
static int pack_string(grib_accessor*, const char*, size_t* len);
static int pack_string_array(grib_accessor*, const char**, size_t* len);
static int unpack_double(grib_accessor*, double* val, size_t* len);
static int unpack_long(grib_accessor*, long* val, size_t* len);
static int unpack_string(grib_accessor*, char*, size_t* len);
static int unpack_string_array(grib_accessor*, char**, size_t* len);
static int value_count(grib_accessor*, long*);
static void destroy(grib_context*, grib_accessor*);
static void dump(grib_accessor*, grib_dumper*);
static void init(grib_accessor*, const long, grib_arguments*);
static int unpack_double_element(grib_accessor*, size_t i, double* val);
static grib_accessor* make_clone(grib_accessor*, grib_section*, int*);
typedef struct grib_accessor_bufr_data_element
{
grib_accessor att;
/* Members defined in gen */
/* Members defined in bufr_data_element */
long index;
int type;
long compressedData;
long subsetNumber;
long numberOfSubsets;
bufr_descriptors_array* descriptors;
grib_vdarray* numericValues;
grib_vsarray* stringValues;
grib_viarray* elementsDescriptorsIndex;
char* cname;
} grib_accessor_bufr_data_element;
extern grib_accessor_class* grib_accessor_class_gen;
static grib_accessor_class _grib_accessor_class_bufr_data_element = {
&grib_accessor_class_gen, /* super */
"bufr_data_element", /* name */
sizeof(grib_accessor_bufr_data_element), /* size */
0, /* inited */
0, /* init_class */
&init, /* init */
0, /* post_init */
&destroy, /* destroy */
&dump, /* dump */
0, /* next_offset */
0, /* get length of string */
&value_count, /* get number of values */
0, /* get number of bytes */
0, /* get offset to bytes */
&get_native_type, /* get native type */
0, /* get sub_section */
&pack_missing, /* pack_missing */
&is_missing, /* is_missing */
&pack_long, /* pack_long */
&unpack_long, /* unpack_long */
&pack_double, /* pack_double */
0, /* pack_float */
&unpack_double, /* unpack_double */
0, /* unpack_float */
&pack_string, /* pack_string */
&unpack_string, /* unpack_string */
&pack_string_array, /* pack_string_array */
&unpack_string_array, /* unpack_string_array */
0, /* pack_bytes */
0, /* unpack_bytes */
0, /* pack_expression */
0, /* notify_change */
0, /* update_size */
0, /* preferred_size */
0, /* resize */
0, /* nearest_smaller_value */
0, /* next accessor */
0, /* compare vs. another accessor */
&unpack_double_element, /* unpack only ith value (double) */
0, /* unpack only ith value (float) */
0, /* unpack a given set of elements (double) */
0, /* unpack a given set of elements (float) */
0, /* unpack a subarray */
0, /* clear */
&make_clone, /* clone accessor */
};
#include "grib_accessor_class_bufr_data_element.h"
grib_accessor_class_bufr_data_element_t _grib_accessor_class_bufr_data_element{ "bufr_data_element" };
grib_accessor_class* grib_accessor_class_bufr_data_element = &_grib_accessor_class_bufr_data_element;
/* END_CLASS_IMP */
static grib_accessor* make_clone(grib_accessor* a, grib_section* s, int* err)
grib_accessor* grib_accessor_class_bufr_data_element_t::make_clone(grib_accessor* a, grib_section* s, int* err)
{
grib_accessor* the_clone = NULL;
grib_accessor* attribute = NULL;
grib_accessor_bufr_data_element* elementAccessor;
grib_accessor_bufr_data_element* self;
grib_accessor_bufr_data_element_t* elementAccessor;
grib_accessor_bufr_data_element_t* self;
char* copied_name = NULL;
int i;
grib_action creator = {0,};
grib_action creator = {
0,
};
creator.op = (char*)"bufr_data_element";
creator.name_space = (char*)"";
creator.set = 0;
@ -161,8 +36,8 @@ static grib_accessor* make_clone(grib_accessor* a, grib_section* s, int* err)
the_clone = grib_accessor_factory(s, &creator, 0, NULL);
copied_name = grib_context_strdup(a->context, a->name);
the_clone->name = copied_name;
elementAccessor = (grib_accessor_bufr_data_element*)the_clone;
self = (grib_accessor_bufr_data_element*)a;
elementAccessor = (grib_accessor_bufr_data_element_t*)the_clone;
self = (grib_accessor_bufr_data_element_t*)a;
the_clone->flags = a->flags;
the_clone->parent = NULL;
the_clone->h = s->h;
@ -179,9 +54,9 @@ static grib_accessor* make_clone(grib_accessor* a, grib_section* s, int* err)
i = 0;
while (a->attributes[i]) {
attribute = grib_accessor_clone(a->attributes[i], s, err);
attribute = a->attributes[i]->clone(s, err);
/* attribute->parent=a->parent; */
grib_accessor_add_attribute(the_clone, attribute, 0);
the_clone->add_attribute(attribute, 0);
i++;
}
@ -190,68 +65,69 @@ static grib_accessor* make_clone(grib_accessor* a, grib_section* s, int* err)
void accessor_bufr_data_element_set_index(grib_accessor* a, long index)
{
grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a;
self->index = index;
grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a;
self->index = index;
}
void accessor_bufr_data_element_set_type(grib_accessor* a, int type)
{
grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a;
self->type = type;
grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a;
self->type = type;
}
void accessor_bufr_data_element_set_numberOfSubsets(grib_accessor* a, long numberOfSubsets)
{
grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a;
self->numberOfSubsets = numberOfSubsets;
grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a;
self->numberOfSubsets = numberOfSubsets;
}
void accessor_bufr_data_element_set_subsetNumber(grib_accessor* a, long subsetNumber)
{
grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a;
self->subsetNumber = subsetNumber;
grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a;
self->subsetNumber = subsetNumber;
}
void accessor_bufr_data_element_set_compressedData(grib_accessor* a, int compressedData)
{
grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a;
self->compressedData = compressedData;
grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a;
self->compressedData = compressedData;
}
void accessor_bufr_data_element_set_descriptors(grib_accessor* a, bufr_descriptors_array* descriptors)
{
grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a;
self->descriptors = descriptors;
grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a;
self->descriptors = descriptors;
}
void accessor_bufr_data_element_set_numericValues(grib_accessor* a, grib_vdarray* numericValues)
{
grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a;
self->numericValues = numericValues;
grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a;
self->numericValues = numericValues;
}
void accessor_bufr_data_element_set_stringValues(grib_accessor* a, grib_vsarray* stringValues)
{
grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a;
self->stringValues = stringValues;
grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a;
self->stringValues = stringValues;
}
void accessor_bufr_data_element_set_elementsDescriptorsIndex(grib_accessor* a, grib_viarray* elementsDescriptorsIndex)
{
grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a;
self->elementsDescriptorsIndex = elementsDescriptorsIndex;
grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a;
self->elementsDescriptorsIndex = elementsDescriptorsIndex;
}
static void init(grib_accessor* a, const long len, grib_arguments* params)
void grib_accessor_class_bufr_data_element_t::init(grib_accessor* a, const long len, grib_arguments* params)
{
grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a;
a->length = 0;
grib_accessor_class_gen_t::init(a, len, params);
grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a;
a->length = 0;
a->flags |= GRIB_ACCESSOR_FLAG_BUFR_DATA;
/* a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; */
self->cname = NULL;
}
static void dump(grib_accessor* a, grib_dumper* dumper)
void grib_accessor_class_bufr_data_element_t::dump(grib_accessor* a, grib_dumper* dumper)
{
int type = get_native_type(a);
@ -268,9 +144,9 @@ static void dump(grib_accessor* a, grib_dumper* dumper)
}
}
static int unpack_string_array(grib_accessor* a, char** val, size_t* len)
int grib_accessor_class_bufr_data_element_t::unpack_string_array(grib_accessor* a, char** val, size_t* len)
{
grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a;
grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a;
int ret = 0, idx = 0;
size_t count = 0, i = 0;
@ -289,7 +165,7 @@ static int unpack_string_array(grib_accessor* a, char** val, size_t* len)
else {
DEBUG_ASSERT(self->subsetNumber < self->numericValues->n);
DEBUG_ASSERT(self->index < self->numericValues->v[self->subsetNumber]->n);
idx = (int)self->numericValues->v[self->subsetNumber]->v[self->index] / 1000 - 1;
idx = (int)self->numericValues->v[self->subsetNumber]->v[self->index] / 1000 - 1;
val[0] = grib_context_strdup(c, self->stringValues->v[idx]->v[0]);
*len = 1;
}
@ -297,13 +173,13 @@ static int unpack_string_array(grib_accessor* a, char** val, size_t* len)
return ret;
}
static int pack_string_array(grib_accessor* a, const char** v, size_t* len)
int grib_accessor_class_bufr_data_element_t::pack_string_array(grib_accessor* a, const char** v, size_t* len)
{
grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a;
grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a;
int ret = GRIB_SUCCESS, idx = 0;
size_t i = 0;
char* s = NULL;
size_t i = 0;
char* s = NULL;
grib_context* c = a->context;
if (self->compressedData) {
@ -322,32 +198,32 @@ static int pack_string_array(grib_accessor* a, const char** v, size_t* len)
}
}
else {
//ECC-1623
// ECC-1623
if (*len != (size_t)self->numberOfSubsets) {
grib_context_log(c, GRIB_LOG_ERROR,
"Number of values mismatch for '%s': %zu strings provided but expected %ld (=number of subsets)",
a->name, *len, self->numberOfSubsets);
"Number of values mismatch for '%s': %zu strings provided but expected %ld (=number of subsets)",
a->name, *len, self->numberOfSubsets);
return GRIB_WRONG_ARRAY_SIZE;
}
for (i = 0; i < *len; i++) {
//idx = (int)self->numericValues->v[self->subsetNumber]->v[self->index] / 1000 - 1;
idx = (int)self->numericValues->v[i]->v[self->index] / 1000 - 1;
// idx = (int)self->numericValues->v[self->subsetNumber]->v[self->index] / 1000 - 1;
idx = (int)self->numericValues->v[i]->v[self->index] / 1000 - 1;
self->stringValues->v[idx]->v[0] = strdup(v[i]);
}
*len=1;
*len = 1;
}
return ret;
}
static int unpack_string(grib_accessor* a, char* val, size_t* len)
int grib_accessor_class_bufr_data_element_t::unpack_string(grib_accessor* a, char* val, size_t* len)
{
grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a;
char* str = NULL;
char* p = 0;
size_t slen = 0;
double dval = 0;
size_t dlen = 1;
grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a;
char* str = NULL;
char* p = 0;
size_t slen = 0;
double dval = 0;
size_t dlen = 1;
int idx = 0, err = 0;
grib_context* c = a->context;
@ -409,12 +285,12 @@ static int unpack_string(grib_accessor* a, char* val, size_t* len)
return GRIB_SUCCESS;
}
static int pack_string(grib_accessor* a, const char* val, size_t* len)
int grib_accessor_class_bufr_data_element_t::pack_string(grib_accessor* a, const char* val, size_t* len)
{
grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a;
grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a;
int ret = GRIB_SUCCESS, idx = 0;
char* s = NULL;
char* s = NULL;
grib_context* c = a->context;
if (self->compressedData) {
@ -426,16 +302,16 @@ static int pack_string(grib_accessor* a, const char* val, size_t* len)
grib_sarray_delete_content(c, self->stringValues->v[idx]); /* ECC-1172 */
grib_sarray_delete(c, self->stringValues->v[idx]);
self->stringValues->v[idx] = grib_sarray_new(c, 1, 1);
s = grib_context_strdup(c, val);
s = grib_context_strdup(c, val);
grib_sarray_push(c, self->stringValues->v[idx], s);
return ret;
}
static int unpack_long(grib_accessor* a, long* val, size_t* len)
int grib_accessor_class_bufr_data_element_t::unpack_long(grib_accessor* a, long* val, size_t* len)
{
grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a;
int ret = GRIB_SUCCESS;
grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a;
int ret = GRIB_SUCCESS;
long count = 0, i = 0;
value_count(a, &count);
@ -461,10 +337,10 @@ static int unpack_long(grib_accessor* a, long* val, size_t* len)
return ret;
}
static int unpack_double(grib_accessor* a, double* val, size_t* len)
int grib_accessor_class_bufr_data_element_t::unpack_double(grib_accessor* a, double* val, size_t* len)
{
grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a;
int ret = GRIB_SUCCESS;
grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a;
int ret = GRIB_SUCCESS;
long count = 0, i = 0;
value_count(a, &count);
@ -490,10 +366,10 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len)
return ret;
}
static int pack_double(grib_accessor* a, const double* val, size_t* len)
int grib_accessor_class_bufr_data_element_t::pack_double(grib_accessor* a, const double* val, size_t* len)
{
grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a;
int ret = GRIB_SUCCESS;
grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a;
int ret = GRIB_SUCCESS;
size_t count = 1, i = 0;
grib_context* c = a->context;
@ -514,16 +390,16 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
}
else {
self->numericValues->v[self->subsetNumber]->v[self->index] = val[0];
*len = 1;
*len = 1;
}
return ret;
}
static int pack_long(grib_accessor* a, const long* val, size_t* len)
int grib_accessor_class_bufr_data_element_t::pack_long(grib_accessor* a, const long* val, size_t* len)
{
grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a;
int ret = 0;
grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a;
int ret = 0;
size_t count = 1, i = 0;
grib_context* c = a->context;
@ -544,17 +420,17 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len)
}
else {
self->numericValues->v[self->subsetNumber]->v[self->index] = val[0] == GRIB_MISSING_LONG ? GRIB_MISSING_DOUBLE : val[0];
*len = 1;
*len = 1;
}
return ret;
}
static int value_count(grib_accessor* a, long* count)
int grib_accessor_class_bufr_data_element_t::value_count(grib_accessor* a, long* count)
{
int ret = 0, type = 0, idx = 0;
size_t size = 0;
grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a;
size_t size = 0;
grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a;
if (!self->compressedData) {
*count = 1;
@ -577,12 +453,12 @@ static int value_count(grib_accessor* a, long* count)
return ret;
}
static int unpack_double_element(grib_accessor* a, size_t idx, double* val)
int grib_accessor_class_bufr_data_element_t::unpack_double_element(grib_accessor* a, size_t idx, double* val)
{
/* ECC-415 */
grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a;
int ret = GRIB_SUCCESS;
long count = 0;
grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a;
int ret = GRIB_SUCCESS;
long count = 0;
value_count(a, &count);
if (idx >= (size_t)count) {
@ -598,10 +474,10 @@ static int unpack_double_element(grib_accessor* a, size_t idx, double* val)
return ret;
}
static int get_native_type(grib_accessor* a)
int grib_accessor_class_bufr_data_element_t::get_native_type(grib_accessor* a)
{
grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a;
int ret = GRIB_TYPE_DOUBLE;
grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a;
int ret = GRIB_TYPE_DOUBLE;
DEBUG_ASSERT(self);
switch (self->type) {
case BUFR_DESCRIPTOR_TYPE_STRING:
@ -624,24 +500,25 @@ static int get_native_type(grib_accessor* a)
return ret;
}
static void destroy(grib_context* ct, grib_accessor* a)
void grib_accessor_class_bufr_data_element_t::destroy(grib_context* ct, grib_accessor* a)
{
grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a;
int i = 0;
grib_accessor_bufr_data_element_t* self = (grib_accessor_bufr_data_element_t*)a;
int i = 0;
if (self->cname)
grib_context_free(ct, self->cname); /* ECC-765 */
while (i < MAX_ACCESSOR_ATTRIBUTES && a->attributes[i]) {
/*grib_context_log(ct,GRIB_LOG_DEBUG,"deleting attribute %s->%s",a->name,a->attributes[i]->name);*/
/*printf("bufr_data_element destroy %s %p\n", a->attributes[i]->name, (void*)a->attributes[i]);*/
grib_accessor_delete(ct, a->attributes[i]);
a->attributes[i]->destroy(ct);
a->attributes[i] = NULL;
i++;
}
grib_accessor_class_gen_t::destroy(ct, a);
}
#define MAX_STRING_SIZE 4096
/* Return 1 if BUFR element(s) is/are missing, 0 otherwise. In case of decoding errors, also return 0 */
static int is_missing(grib_accessor* a)
int grib_accessor_class_bufr_data_element_t::is_missing(grib_accessor* a)
{
const int ktype = get_native_type(a);
int err = 0, result = 1; /* default: assume all are missing */
@ -651,16 +528,16 @@ static int is_missing(grib_accessor* a)
if (ktype == GRIB_TYPE_LONG) {
long* values = NULL;
long value = 0;
long value = 0;
value_count(a, &count);
size = size2 = count;
if (size > 1) {
values = (long*)grib_context_malloc_clear(c, sizeof(long) * size);
err = grib_unpack_long(a, values, &size2);
err = a->unpack_long(values, &size2);
}
else {
err = grib_unpack_long(a, &value, &size2);
err = a->unpack_long(&value, &size2);
}
if (err) return 0; /* TODO: no way of propagating the error up */
Assert(size2 == size);
@ -672,22 +549,23 @@ static int is_missing(grib_accessor* a)
}
}
grib_context_free(c, values);
} else {
}
else {
result = grib_is_missing_long(a, value);
}
}
else if (ktype == GRIB_TYPE_DOUBLE) {
double value = 0;
double value = 0;
double* values = NULL;
value_count(a, &count);
size = size2 = count;
if (size > 1) {
values = (double*)grib_context_malloc_clear(c, sizeof(double) * size);
err = grib_unpack_double(a, values, &size2);
err = a->unpack_double(values, &size2);
}
else {
err = grib_unpack_double(a, &value, &size2);
err = a->unpack_double(&value, &size2);
}
if (err) return 0; /* TODO: no way of propagating the error up */
Assert(size2 == size);
@ -710,7 +588,7 @@ static int is_missing(grib_accessor* a)
size = count;
if (size > 1) {
values = (char**)grib_context_malloc_clear(a->context, size * sizeof(char*));
err = grib_unpack_string_array(a, values, &size);
err = a->unpack_string_array(values, &size);
if (err) return 0; /* TODO: no way of propagating the error up */
for (i = 0; i < size; i++) {
if (!grib_is_missing_string(a, (unsigned char*)values[i], size)) {
@ -718,12 +596,14 @@ static int is_missing(grib_accessor* a)
break;
}
}
for (i = 0; i < size; i++) grib_context_free(c, values[i]);
for (i = 0; i < size; i++)
grib_context_free(c, values[i]);
grib_context_free(c, values);
} else {
}
else {
char value[MAX_STRING_SIZE] = {0,}; /* See ECC-710 */
size = MAX_STRING_SIZE;
err = grib_unpack_string(a, value, &size);
err = a->unpack_string(value, &size);
if (err) return 0; /* TODO: no way of propagating the error up */
result = grib_is_missing_string(a, (unsigned char*)value, size);
}
@ -734,11 +614,11 @@ static int is_missing(grib_accessor* a)
return result;
}
static int pack_missing(grib_accessor* a)
int grib_accessor_class_bufr_data_element_t::pack_missing(grib_accessor* a)
{
int ktype = GRIB_TYPE_UNDEFINED;
int err = 0;
size_t size = 1;
int ktype = GRIB_TYPE_UNDEFINED;
int err = 0;
size_t size = 1;
const int can_be_missing = (a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING);
if (!can_be_missing)
return GRIB_VALUE_CANNOT_BE_MISSING;
@ -746,11 +626,11 @@ static int pack_missing(grib_accessor* a)
ktype = get_native_type(a);
if (ktype == GRIB_TYPE_LONG) {
long missing = GRIB_MISSING_LONG;
err = pack_long(a, &missing, &size);
err = pack_long(a, &missing, &size);
}
else if (ktype == GRIB_TYPE_DOUBLE) {
double missing = GRIB_MISSING_DOUBLE;
err = pack_double(a, &missing, &size);
err = pack_double(a, &missing, &size);
}
else if (ktype == GRIB_TYPE_STRING) {
err = pack_string(a, "", &size);

View File

@ -0,0 +1,54 @@
/*
* (C) Copyright 2005- ECMWF.
*
* This software is licensed under the terms of the Apache Licence Version 2.0
* which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
*
* In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#pragma once
#include "grib_accessor_class_gen.h"
class grib_accessor_bufr_data_element_t : public grib_accessor_gen_t
{
public:
/* Members defined in bufr_data_element */
long index;
int type;
long compressedData;
long subsetNumber;
long numberOfSubsets;
bufr_descriptors_array* descriptors;
grib_vdarray* numericValues;
grib_vsarray* stringValues;
grib_viarray* elementsDescriptorsIndex;
char* cname;
};
class grib_accessor_class_bufr_data_element_t : public grib_accessor_class_gen_t
{
public:
grib_accessor_class_bufr_data_element_t(const char* name) : grib_accessor_class_gen_t(name) {}
grib_accessor* create_empty_accessor() override { return new grib_accessor_bufr_data_element_t{}; }
int get_native_type(grib_accessor*) override;
int pack_missing(grib_accessor*) override;
int is_missing(grib_accessor*) override;
int pack_double(grib_accessor*, const double* val, size_t* len) override;
int pack_long(grib_accessor*, const long* val, size_t* len) override;
int pack_string(grib_accessor*, const char*, size_t* len) override;
int pack_string_array(grib_accessor*, const char**, size_t* len) override;
int unpack_double(grib_accessor*, double* val, size_t* len) override;
int unpack_long(grib_accessor*, long* val, size_t* len) override;
int unpack_string(grib_accessor*, char*, size_t* len) override;
int unpack_string_array(grib_accessor*, char**, size_t* len) override;
int value_count(grib_accessor*, long*) override;
void destroy(grib_context*, grib_accessor*) override;
void dump(grib_accessor*, grib_dumper*) override;
void init(grib_accessor*, const long, grib_arguments*) override;
int unpack_double_element(grib_accessor*, size_t i, double* val) override;
grib_accessor* make_clone(grib_accessor*, grib_section*, int*) override;
};

View File

@ -1,3 +1,4 @@
/*
* (C) Copyright 2005- ECMWF.
*
@ -8,12 +9,8 @@
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
/*****************************************
* Enrico Fucile
****************************************/
#include "grib_accessor_class_bufr_elements_table.h"
#include "grib_scaling.h"
#include "grib_api_internal.h"
#if GRIB_PTHREADS
static pthread_once_t once = PTHREAD_ONCE_INIT;
@ -31,7 +28,7 @@ static void thread_init()
static int once = 0;
static omp_nest_lock_t mutex1;
static void thread_init()
void thread_init()
{
GRIB_OMP_CRITICAL(lock_grib_accessor_class_bufr_elements_table_c)
{
@ -43,107 +40,16 @@ static void thread_init()
}
#endif
/*
This is used by make_class.pl
START_CLASS_DEF
CLASS = accessor
SUPER = grib_accessor_class_gen
IMPLEMENTS = init;unpack_string;unpack_long;unpack_double
IMPLEMENTS = value_count; get_native_type;
MEMBERS = const char* dictionary
MEMBERS = const char* masterDir
MEMBERS = const char* localDir
END_CLASS_DEF
*/
/* START_CLASS_IMP */
/*
Don't edit anything between START_CLASS_IMP and END_CLASS_IMP
Instead edit values between START_CLASS_DEF and END_CLASS_DEF
or edit "accessor.class" and rerun ./make_class.pl
*/
static int get_native_type(grib_accessor*);
static int unpack_double(grib_accessor*, double* val, size_t* len);
static int unpack_long(grib_accessor*, long* val, size_t* len);
static int unpack_string(grib_accessor*, char*, size_t* len);
static int value_count(grib_accessor*, long*);
static void init(grib_accessor*, const long, grib_arguments*);
typedef struct grib_accessor_bufr_elements_table
{
grib_accessor att;
/* Members defined in gen */
/* Members defined in bufr_elements_table */
const char* dictionary;
const char* masterDir;
const char* localDir;
} grib_accessor_bufr_elements_table;
extern grib_accessor_class* grib_accessor_class_gen;
static grib_accessor_class _grib_accessor_class_bufr_elements_table = {
&grib_accessor_class_gen, /* super */
"bufr_elements_table", /* name */
sizeof(grib_accessor_bufr_elements_table), /* size */
0, /* inited */
0, /* init_class */
&init, /* init */
0, /* post_init */
0, /* destroy */
0, /* dump */
0, /* next_offset */
0, /* get length of string */
&value_count, /* get number of values */
0, /* get number of bytes */
0, /* get offset to bytes */
&get_native_type, /* get native type */
0, /* get sub_section */
0, /* pack_missing */
0, /* is_missing */
0, /* pack_long */
&unpack_long, /* unpack_long */
0, /* pack_double */
0, /* pack_float */
&unpack_double, /* unpack_double */
0, /* unpack_float */
0, /* pack_string */
&unpack_string, /* unpack_string */
0, /* pack_string_array */
0, /* unpack_string_array */
0, /* pack_bytes */
0, /* unpack_bytes */
0, /* pack_expression */
0, /* notify_change */
0, /* update_size */
0, /* preferred_size */
0, /* resize */
0, /* nearest_smaller_value */
0, /* next accessor */
0, /* compare vs. another accessor */
0, /* unpack only ith value (double) */
0, /* unpack only ith value (float) */
0, /* unpack a given set of elements (double) */
0, /* unpack a given set of elements (float) */
0, /* unpack a subarray */
0, /* clear */
0, /* clone accessor */
};
grib_accessor_class_bufr_elements_table_t _grib_accessor_class_bufr_elements_table{ "bufr_elements_table" };
grib_accessor_class* grib_accessor_class_bufr_elements_table = &_grib_accessor_class_bufr_elements_table;
/* END_CLASS_IMP */
static void init(grib_accessor* a, const long len, grib_arguments* params)
void grib_accessor_class_bufr_elements_table_t::init(grib_accessor* a, const long len, grib_arguments* params)
{
int n = 0;
grib_accessor_bufr_elements_table* self = (grib_accessor_bufr_elements_table*)a;
grib_accessor_class_gen_t::init(a, len, params);
int n = 0;
grib_accessor_bufr_elements_table_t* self = (grib_accessor_bufr_elements_table_t*)a;
self->dictionary = grib_arguments_get_string(grib_handle_of_accessor(a), params, n++);
self->masterDir = grib_arguments_get_name(grib_handle_of_accessor(a), params, n++);
@ -155,7 +61,7 @@ static void init(grib_accessor* a, const long len, grib_arguments* params)
static grib_trie* load_bufr_elements_table(grib_accessor* a, int* err)
{
grib_accessor_bufr_elements_table* self = (grib_accessor_bufr_elements_table*)a;
grib_accessor_bufr_elements_table_t* self = (grib_accessor_bufr_elements_table_t*)a;
char* filename = NULL;
char line[1024] = {0,};
@ -163,7 +69,9 @@ static grib_trie* load_bufr_elements_table(grib_accessor* a, int* err)
char localDir[1024] = {0,};
char dictName[1024] = {0,};
char masterRecomposed[1024] = {0,}; /*e.g. bufr/tables/0/wmo/36/element.table */
char localRecomposed[1024] = {0,}; /*e.g. bufr/tables/0/local/0/98/0/element.table */
char localRecomposed[1024] = {
0,
}; /*e.g. bufr/tables/0/local/0/98/0/element.table */
char* localFilename = 0;
char** list = 0;
char** cached_list = 0;
@ -208,9 +116,9 @@ static grib_trie* load_bufr_elements_table(grib_accessor* a, int* err)
if (!filename) {
grib_context_log(c, GRIB_LOG_ERROR, "Unable to find definition file %s", self->dictionary);
if (strlen(masterRecomposed) > 0) grib_context_log(c, GRIB_LOG_DEBUG,"master path=%s", masterRecomposed);
if (strlen(masterRecomposed) > 0) grib_context_log(c, GRIB_LOG_DEBUG, "master path=%s", masterRecomposed);
if (strlen(localRecomposed) > 0) grib_context_log(c, GRIB_LOG_DEBUG, "local path=%s", localRecomposed);
*err = GRIB_FILE_NOT_FOUND;
*err = GRIB_FILE_NOT_FOUND;
dictionary = NULL;
goto the_end;
}
@ -234,7 +142,7 @@ static grib_trie* load_bufr_elements_table(grib_accessor* a, int* err)
dictionary = grib_trie_new(c);
while (fgets(line, sizeof(line) - 1, f)) {
DEBUG_ASSERT( strlen(line) > 0 );
DEBUG_ASSERT(strlen(line) > 0);
if (line[0] == '#') continue; /* Ignore first line with column titles */
list = string_split(line, "|");
grib_trie_insert(dictionary, list[0], list);
@ -251,14 +159,15 @@ static grib_trie* load_bufr_elements_table(grib_accessor* a, int* err)
}
while (fgets(line, sizeof(line) - 1, f)) {
DEBUG_ASSERT( strlen(line) > 0 );
if (line[0] == '#') continue; /* Ignore first line with column titles */
DEBUG_ASSERT(strlen(line) > 0);
if (line[0] == '#') continue; /* Ignore first line with column titles */
list = string_split(line, "|");
/* Look for the descriptor code in the trie. It might be there from before */
cached_list = (char**)grib_trie_get(dictionary, list[0]);
if (cached_list) { /* If found, we are about to overwrite it. So free memory */
int i;
for (i = 0; cached_list[i] != NULL; ++i) free(cached_list[i]);
for (i = 0; cached_list[i] != NULL; ++i)
free(cached_list[i]);
free(cached_list);
}
grib_trie_insert(dictionary, list[0], list);
@ -304,17 +213,18 @@ static int convert_type(const char* stype)
return ret;
}
static long atol_fast(const char* input)
long atol_fast(const char* input)
{
if (strcmp(input, "0") == 0)
return 0;
return atol(input);
}
static int bufr_get_from_table(grib_accessor* a, bufr_descriptor* v)
int bufr_get_from_table(grib_accessor* a, bufr_descriptor* v)
{
int ret = 0;
char** list = 0;
char code[7] = { 0 };
int ret = 0;
char** list = 0;
char code[7] = { 0 };
const size_t codeLen = sizeof(code);
grib_trie* table = load_bufr_elements_table(a, &ret);
@ -332,8 +242,8 @@ static int bufr_get_from_table(grib_accessor* a, bufr_descriptor* v)
/* ECC-1137: check descriptor key name and unit lengths */
const size_t maxlen_shortName = sizeof(v->shortName);
const size_t maxlen_units = sizeof(v->units);
Assert( strlen(list[1]) < maxlen_shortName );
Assert( strlen(list[4]) < maxlen_units );
Assert(strlen(list[1]) < maxlen_shortName);
Assert(strlen(list[4]) < maxlen_units);
}
#endif
@ -407,28 +317,28 @@ bufr_descriptor* accessor_bufr_elements_table_get_descriptor(grib_accessor* a, i
return v;
}
static int unpack_string(grib_accessor* a, char* buffer, size_t* len)
int grib_accessor_class_bufr_elements_table_t::unpack_string(grib_accessor* a, char* buffer, size_t* len)
{
return GRIB_NOT_IMPLEMENTED;
}
static int value_count(grib_accessor* a, long* count)
int grib_accessor_class_bufr_elements_table_t::value_count(grib_accessor* a, long* count)
{
*count = 1;
return 0;
}
static int get_native_type(grib_accessor* a)
int grib_accessor_class_bufr_elements_table_t::get_native_type(grib_accessor* a)
{
return GRIB_TYPE_STRING;
}
static int unpack_long(grib_accessor* a, long* val, size_t* len)
int grib_accessor_class_bufr_elements_table_t::unpack_long(grib_accessor* a, long* val, size_t* len)
{
return GRIB_NOT_IMPLEMENTED;
}
static int unpack_double(grib_accessor* a, double* val, size_t* len)
int grib_accessor_class_bufr_elements_table_t::unpack_double(grib_accessor* a, double* val, size_t* len)
{
return GRIB_NOT_IMPLEMENTED;
}

Some files were not shown because too many files have changed in this diff Show More