Merge branch 'develop' into single_precision_spherical_complex

This commit is contained in:
Eugen Betke 2023-06-13 12:25:09 +00:00
commit 9c231996c8
23 changed files with 991 additions and 110 deletions

11
.github/workflows/cd.yml vendored Normal file
View File

@ -0,0 +1,11 @@
name: cd
on:
push:
tags:
- '**'
jobs:
deploy:
uses: ecmwf-actions/reusable-workflows/.github/workflows/create-package.yml@v2
secrets: inherit

View File

@ -21,7 +21,7 @@ cmake_minimum_required( VERSION 3.12 FATAL_ERROR )
find_package( ecbuild 3.7 REQUIRED HINTS ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/../ecbuild)
# Initialise project
project( eccodes VERSION 2.31.0 LANGUAGES CXX )
project( eccodes LANGUAGES CXX )
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

1
VERSION Normal file
View File

@ -0,0 +1 @@
2.31.0

View File

@ -0,0 +1,277 @@
0 0 WMO SECRETARIAT
1 1 MELBOURNE
2 2 MELBOURNE
3 3 )
4 4 MOSCOW
5 5 MOSCOW
6 6 )
7 7 US NATIONAL WEATHER SERVICE, NATIONAL CENTRES FOR ENVIRONMENTAL PREDICTION (NCEP)
8 8 US NATIONAL WEATHER SERVICE TELECOMMUNICATIONS GATEWAY (NWSTG)
9 9 US NATIONAL WEATHER SERVICE - OTHER
10 10 CAIRO (RSMC)
11 11 )
12 12 DAKAR (RSMC)
13 13 )
14 14 NAIROBI (RSMC)
15 15 )
16 16 CASABLANCA (RSMC)
17 17 TUNIS (RSMC)
18 18 TUNIS-CASABLANCA (RSMC)
19 19 )
20 20 LAS PALMAS
21 21 ALGIERS (RSMC)
22 22 ACMAD
23 23 MOZAMBIQUE (NMC)
24 24 PRETORIA (RSMC)
25 25 LA REUNION (RSMC)
26 26 KHABAROVSK (RSMC)
27 27 )
28 28 NEW DELHI (RSMC)
29 29 )
30 30 NOVOSIBIRSK (RSMC)
31 31 )
32 32 TASHKENT (RSMC)
33 33 JEDDAH (RSMC)
34 34 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
35 35 )
36 36 BANGKOK
37 37 ULAANBAATAR
38 38 BEIJING (RSMC)
39 39 )
40 40 SEOUL
41 41 BUENOS AIRES (RSMC)
42 42 )
43 43 BRASILIA (RSMC)
44 44 )
45 45 SANTIAGO
46 46 BRAZILIAN SPACE AGENCY INPE
47 47 COLOMBIA (NMC)
48 48 ECUADOR (NMC)
49 49 PERU (NMC)
50 50 VENEZUELA (BOLIVARIAN REPUBLIC OF) (NMC)
51 51 MIAMI (RSMC)
52 52 MIAMI RSMC, NATIONAL HURRICANE CENTRE
53 53 MSC MONITORING
54 54 MONTREAL (RSMC)
55 55 SAN FRANCISCO
56 56 ARINC CENTRE
57 57 US AIR FORCE - AIR FORCE GLOBAL WEATHER CENTRAL
58 58 FLEET NUMERICAL METEOROLOGY AND OCEANOGRAPHY CENTER, MONTEREY, CA, UNITED STATES
59 59 THE NOAA FORECAST SYSTEMS LABORATORY, BOULDER, CO, UNITED STATES
60 60 UNITED STATES NATIONAL CENTER FOR ATMOSPHERIC RESEARCH (NCAR)
61 61 SERVICE ARGOS - LANDOVER
62 62 US NAVAL OCEANOGRAPHIC OFFICE
63 63 INTERNATIONAL RESEARCH INSTITUTE FOR CLIMATE AND SOCIETY (IRI)
64 64 HONOLULU (RSMC)
65 65 DARWIN (RSMC)
66 66 )
67 67 MELBOURNE (RSMC)
68 68 RESERVED
69 69 WELLINGTON (RSMC)
70 70 )
71 71 NADI (RSMC)
72 72 SINGAPORE
73 73 MALAYSIA (NMC)
74 74 UK METEOROLOGICAL OFFICE EXETER (RSMC)
75 75 )
76 76 MOSCOW (RSMC)
77 77 RESERVED
78 78 OFFENBACH (RSMC)
79 79 )
80 80 ROME (RSMC)
81 81 )
82 82 NORRKOPING
83 83 )
84 84 TOULOUSE (RSMC)
85 85 TOULOUSE (RSMC)
86 86 HELSINKI
87 87 BELGRADE
88 88 OSLO
89 89 PRAGUE
90 90 EPISKOPI
91 91 ANKARA
92 92 FRANKFURT/MAIN
93 93 LONDON (WAFC)
94 94 COPENHAGEN
95 95 ROTA
96 96 ATHENS
97 97 EUROPEAN SPACE AGENCY (ESA)
98 98 EUROPEAN CENTRE FOR MEDIUM RANGE WEATHER FORECASTS (ECMWF) (RSMC)
99 99 DE BILT
100 100 BRAZZAVILLE
101 101 ABIDJAN
102 102 LIBYA (NMC)
103 103 MADAGASCAR (NMC)
104 104 MAURITIUS (NMC)
105 105 NIGER (NMC)
106 106 SEYCHELLES (NMC)
107 107 UGANDA (NMC)
108 108 UNITED REPUBLIC OF TANZANIA (NMC)
109 109 ZIMBABWE (NMC)
110 110 HONG KONG, CHINA
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)
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 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 173 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
177 177 NOAA NATIONAL OCEAN SERVICE - UNITED STATES
178 178 SPIRE GLOBAL, INC.
179 179 GEOOPTICS, INC.
180 180 PLANETIQ
190 190 COOK ISLANDS (NMC)
191 191 FRENCH POLYNESIA (NMC)
192 192 TONGA (NMC)
193 193 VANUATU (NMC)
194 194 BRUNEI DARUSSALAM (NMC)
195 195 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 204 NATIONAL INSTITUTE OF WATER AND ATMOSPHERIC RESEARCH (NIWA - NEW ZEALAND)
210 210 FRASCATI (ESA/ESRIN)
211 211 LANNION
212 212 LISBOA
213 213 REYKJAVIK
214 214 MADRID
215 215 ZUERICH
216 216 SERVICE ARGOS TOULOUSE
217 217 BRATISLAVA
218 218 BUDAPEST
219 219 LJUBLJANA
220 220 WARSAW
221 221 ZAGREB
222 222 ALBANIA (NMC)
223 223 ARMENIA (NMC)
224 224 AUSTRIA (NMC)
225 225 AZERBAIJAN (NMC)
226 226 BELARUS (NMC)
227 227 BELGIUM (NMC)
228 228 BOSNIA AND HERZEGOVINA (NMC)
229 229 BULGARIA (NMC)
230 230 CYPRUS (NMC)
231 231 ESTONIA (NMC)
232 232 GEORGIA (NMC)
233 233 DUBLIN
234 234 ISRAEL (NMC)
235 235 JORDAN (NMC)
236 236 LATVIA (NMC)
237 237 LEBANON (NMC)
238 238 LITHUANIA (NMC)
239 239 LUXEMBOURG
240 240 MALTA (NMC)
241 241 MONACO
242 242 ROMANIA (NMC)
243 243 SYRIAN ARAB REPUBLIC (NMC)
244 244 THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA (NMC)
245 245 UKRAINE (NMC)
246 246 REPUBLIC OF MOLDOVA (NMC)
247 247 OPERATIONAL PROGRAMME FOR THE EXCHANGE OF WEATHER RADAR INFORMATION (OPERA) - EUMETNET
248 248 MONTENEGRO (NMC)
249 249 BARCELONA DUST FORECAST CENTER
250 250 CONSORTIUM FOR SMALL SCALE MODELLING (COSMO)
251 251 METEOROLOGICAL COOPERATION ON OPERATIONAL NWP (METCOOP)
252 252 MAX PLANCK INSTITUTE FOR METEOROLOGY (MPI-M)
253 253 RESERVED FOR OTHER CENTRES
254 254 EUMETSAT OPERATION CENTRE
255 255 NOT TO BE USED
256 256 ANGOLA (NMC)
257 257 BENIN (NMC)
258 258 BOTSWANA (NMC)
259 259 BURKINA FASO (NMC)
260 260 BURUNDI (NMC)
261 261 CAMEROON (NMC)
262 262 CABO VERDE (NMC)
263 263 CENTRAL AFRICAN REPUBLIC (NMC)
264 264 CHAD (NMC)
265 265 COMOROS (NMC)
266 266 DEMOCRATIC REPUBLIC OF THE CONGO (NMC)
267 267 DJIBOUTI (NMC)
268 268 ERITREA (NMC)
269 269 ETHIOPIA (NMC)
270 270 GABON (NMC)
271 271 GAMBIA (NMC)
272 272 GHANA (NMC)
273 273 GUINEA (NMC)
274 274 GUINEA-BISSAU (NMC)
275 275 LESOTHO (NMC)
276 276 LIBERIA (NMC)
277 277 MALAWI (NMC)
278 278 MALI (NMC)
279 279 MAURITANIA (NMC)
280 280 NAMIBIA (NMC)
281 281 NIGERIA (NMC)
282 282 RWANDA (NMC)
283 283 SAO TOME AND PRINCIPE (NMC)
284 284 SIERRA LEONE (NMC)
285 285 SOMALIA (NMC)
286 286 SUDAN (NMC)
287 287 ESWATINI (NMC)
288 288 TOGO (NMC)
289 289 ZAMBIA (NMC)
290 290 EUMETNET E-PROFILE
291 291 INSTITUTE OF ATMOSPHERIC PHYSICS (IAP) OF THE CHINESE ACADEMY OF SCIENCES (CAS)
292 292 HELMHOLTZ CENTRE FOR ENVIRONMENTAL RESEARCH (UFZ)
65535 65535 MISSING VALUE

View File

@ -0,0 +1,520 @@
0 0 OZONE
1 1 WATER VAPOUR
2 2 METHANE
3 3 CARBON DIOXIDE
4 4 CARBON MONOXIDE
5 5 NITROGEN DIOXIDE
6 6 NITROUS OXIDE
7 7 FORMALDEHYDE
8 8 SULPHUR DIOXIDE
9 9 AMMONIA
10 10 AMMONIUM CATION
11 11 NITROGEN MONOXIDE
12 12 ATOMIC OXYGEN
13 13 NITRATE RADICAL
14 14 HYDROPEROXYL RADICAL
15 15 DINITROGEN PENTOXIDE
16 16 NITROUS ACID
17 17 NITRIC ACID
18 18 PEROXYNITRIC ACID
19 19 HYDROGEN PEROXIDE
20 20 DIHYDROGEN
21 21 ATOMIC NITROGEN
22 22 SULPHATE ANION
23 23 ATOMIC RADON
24 24 MERCURY VAPOUR
25 25 MERCURY(II) CATION
26 26 ATOMIC CHLORINE
27 27 CHLORINE MONOXIDE
28 28 DICHLORINE PEROXIDE
29 29 HYPOCHLOROUS ACID
30 30 CHLORINE NITRATE
31 31 CHLORINE DIOXIDE
32 32 ATOMIC BROMINE
33 33 BROMINE MONOXIDE
34 34 BROMINE CHLORIDE
35 35 HYDROGEN BROMIDE
36 36 HYPOBROMOUS ACID
37 37 BROMINE NITRATE
38 38 DIOXYGEN
39 39 NITRYL CHLORIDE
40 40 SULPHURIC ACID
41 41 HYDROGEN SULPHIDE
42 42 SULPHUR TRIOXIDE
43 43 BROMINE
44 44 HYDROFLUORIC ACID
45 45 SULPHUR HEXAFLUORIDE
46 46 CHLORINE
10000 10000 HYDROXYL RADICAL
10001 10001 METHYL PEROXY RADICAL
10002 10002 METHYL HYDROPEROXIDE
10004 10004 METHANOL
10005 10005 FORMIC ACID
10006 10006 HYDROGEN CYANIDE
10007 10007 ACETO NITRILE
10008 10008 ETHANE
10009 10009 ETHENE (= ETHYLENE)
10010 10010 ETHYNE (= ACETYLENE)
10011 10011 ETHANOL
10012 10012 ACETIC ACID
10013 10013 PEROXYACETYL NITRATE
10014 10014 PROPANE
10015 10015 PROPENE
10016 10016 BUTANE (ALL ISOMERS)
10017 10017 ISOPRENE
10018 10018 ALPHA PINENE
10019 10019 BETA PINENE
10020 10020 LIMONENE
10021 10021 BENZENE
10022 10022 TOLUENE
10023 10023 XYLENE
10024 10024 METHANESULPHONIC ACID
10025 10025 METHYLGLYOXAL (2-OXOPROPANAL)
10026 10026 PEROXYACETYL RADICAL
10027 10027 METHACRYLIC ACID (2-METHYLPROP-2-ENOIC ACID)
10028 10028 METHACROLEIN (2-METHYLPROP-2-ENAL)
10029 10029 ACETONE (PROPAN-2-ONE)
10030 10030 ETHYL DIOXIDANYL RADICAL
10031 10031 BUTADIENE (BUTA-1,3-DIENE)
10032 10032 ACETALDEHYDE (ETHANAL)
10033 10033 GLYCOLALDEHYDE (HYDROXYETHANAL)
10034 10034 CRESOL (METHYLPHENOL), ALL ISOMERS
10035 10035 PERACETIC ACID (ETHANEPEROXOIC ACID)
10036 10036 2-HYDROXYETHYL OXIDANYL RADICAL
10037 10037 2-HYDROXYETHYL DIOXIDANYL RADICAL
10038 10038 GLYOXAL (OXALDEHYDE)
10039 10039 ISOPROPYL DIOXIDANYL RADICAL
10040 10040 ISOPROPYL HYDROPEROXIDE (2-HYDROPEROXYPROPANE)
10041 10041 HYDROXYACETONE (1-HYDROXYPROPAN-2-ONE)
10042 10042 PEROXYACETIC ACID (ETHANEPEROXOIC ACID)
10043 10043 METHYL VINYL KETONE (BUT-3-EN-2-ONE)
10044 10044 PHENOXY RADICAL
10045 10045 METHYL RADICAL
10046 10046 CARBONYL SULPHIDE (CARBON OXIDE SULPHIDE)
10047 10047 DIBROMOMETHANE
10048 10048 METHOXY RADICAL
10049 10049 TRIBROMOMETHANE
10050 10050 FORMYL RADICAL (OXOMETHYL RADICAL)
10051 10051 HYDROXYMETHYL DIOXIDANYL RADICAL
10052 10052 ETHYL HYDROPEROXIDE
10053 10053 3-HYDROXYPROPYL DIOXIDANYL RADICAL
10054 10054 3-HYDROXYPROPYL HYDROPEROXIDE
10055 10055 METHYL-PEROXY-NITRATE (NITROPEROXY-METHANE)
10056 10056 2-LAMBDA^1-OXIDANYLOXY-2-METHYLBUT-3-EN-1-OL (4-HYDROXY-3-METHYL-1-BUTENE-3-YLPEROXY RADICAL)
10057 10057 2-LAMBDA^1-OXIDANYLOXY-3-METHYLBUT-3-EN-1-OL (2-HYDROXY-1-ISOPROPENYLETHYLPEROXY RADICAL)
10058 10058 (Z)-4-HYDROPEROXY-2-METHYL-2-BUTENAL
10059 10059 (Z)-4-HYDROPEROXY-3-METHYL-2-BUTENAL
10500 10500 DIMETHYL SULPHIDE
10501 10501 DMSO (DIMETHYL SULFOXIDE)
20001 20001 HYDROGEN CHLORIDE
20002 20002 CFC-11 (TRICHLOROFLUOROMETHANE)
20003 20003 CFC-12 (DICHLORODIFLUOROMETHANE)
20004 20004 CFC-113 (1,1,2-TRICHLORO-1,2,2-TRIFLUOROETHANE)
20005 20005 CFC-113A (1,1,1-TRICHLORO-2,2,2-TRIFLUOROETHANE)
20006 20006 CFC-114 (1,2-DICHLORO-1,1,2,2-TETRAFLUOROETHANE)
20007 20007 CFC-115 (1-CHLORO-1,1,2,2,2-PENTAFLUOROETHANE)
20008 20008 HCFC-22 (CHLORODIFLUOROMETHANE)
20009 20009 HCFC-141B (1,1-DICHLORO-1-FLUOROETHANE)
20010 20010 HCFC-142B (1-CHLORO-1,1-DIFLUOROETHANE)
20011 20011 HALON-1202 (DIBROMODIFLUOROMETHANE)
20012 20012 HALON-1211 (BROMOCHLORODIFLUOROMETHANE)
20013 20013 HALON-1301 (BROMOTRIFLUOROMETHANE)
20014 20014 HALON-2402 (1,2-DIBROMO-1,1,2,2-TETRAFLUOROETHANE)
20015 20015 HCC-40 (METHYL CHLORIDE)
20016 20016 HCC-10 (CARBON TETRACHLORIDE)
20017 20017 HCC-140A (1,1,1-TRICHLOROETHANE)
20018 20018 HBC-40B1 (METHYL BROMIDE)
20019 20019 HCH (HEXACHLOROCYCLOHEXANE) ALL ISOMERS
20020 20020 ALPHA-HCH (ALPHA-HEXACHLOROCYCLOHEXANE) BOTH ENANTIOMERS
20021 20021 PCB-153 (2,2',4,4',5,5'-HEXACHLOROBIPHENYL)
20022 20022 HCFC-141A (1,1-DICHLORO-2-FLUOROETHANE)
30000 30000 RADIOACTIVE POLLUTANT (TRACER, DEFINED BY ORIGINATING CENTRE)
30010 30010 TRITIUM (HYDROGEN 3)
30011 30011 TRITIUM ORGANIC BOUNDED
30012 30012 TRITIUM INORGANIC
30013 30013 BERYLLIUM 7
30014 30014 BERYLLIUM 10
30015 30015 CARBON 14
30016 30016 CARBON 14 CO2
30017 30017 CARBON 14 OTHER GASES
30018 30018 NITROGEN 13
30019 30019 NITROGEN 16
30020 30020 FLUORINE 18
30021 30021 SODIUM 22
30022 30022 PHOSPHATE 32
30023 30023 PHOSPHATE 33
30024 30024 SULPHUR 35
30025 30025 CHLORINE 36
30026 30026 POTASSIUM 40
30027 30027 ARGON 41
30028 30028 CALCIUM 41
30029 30029 CALCIUM 45
30030 30030 TITANIUM 44
30031 30031 SCANDIUM 46
30032 30032 VANADIUM 48
30033 30033 VANADIUM 49
30034 30034 CHROME 51
30035 30035 MANGANESE 52
30036 30036 MANGANESE 54
30037 30037 IRON 55
30038 30038 IRON 59
30039 30039 COBALT 56
30040 30040 COBALT 57
30041 30041 COBALT 58
30042 30042 COBALT 60
30043 30043 NICKEL 59
30044 30044 NICKEL 63
30045 30045 ZINC 65
30046 30046 GALLIUM 67
30047 30047 GALLIUM 68
30048 30048 GERMANIUM 68
30049 30049 GERMANIUM 69
30050 30050 ARSENIC 73
30051 30051 SELENIUM 75
30052 30052 SELENIUM 79
30053 30053 RUBIDIUM 81
30054 30054 RUBIDIUM 83
30055 30055 RUBIDIUM 84
30056 30056 RUBIDIUM 86
30057 30057 RUBIDIUM 87
30058 30058 RUBIDIUM 88
30059 30059 KRYPTON 85
30060 30060 KRYPTON 85 METASTABLE
30061 30061 KRYPTON 87
30062 30062 KRYPTON 88
30063 30063 KRYPTON 89
30064 30064 STRONTIUM 85
30065 30065 STRONTIUM 89
30066 30066 STRONTIUM 89/90
30067 30067 STRONTIUM 90
30068 30068 STRONTIUM 91
30069 30069 STRONTIUM 92
30070 30070 YTTRIUM 87
30071 30071 YTTRIUM 88
30072 30072 YTTRIUM 90
30073 30073 YTTRIUM 91
30074 30074 YTTRIUM 91 METASTABLE
30075 30075 YTTRIUM 92
30076 30076 YTTRIUM 93
30077 30077 ZIRCONIUM 89
30078 30078 ZIRCONIUM 93
30079 30079 ZIRCONIUM 95
30080 30080 ZIRCONIUM 97
30081 30081 NIOBIUM 93 METASTABLE
30082 30082 NIOBIUM 94
30083 30083 NIOBIUM 95
30084 30084 NIOBIUM 95 METASTABLE
30085 30085 NIOBIUM 97
30086 30086 NIOBIUM 97 METASTABLE
30087 30087 MOLYBDENUM 93
30088 30088 MOLYBDENUM 99
30089 30089 TECHNETIUM 95 METASTABLE
30090 30090 TECHNETIUM 96
30091 30091 TECHNETIUM 99
30092 30092 TECHNETIUM 99 METASTABLE
30093 30093 RHODIUM 99
30094 30094 RHODIUM 101
30095 30095 RHODIUM 102 METASTABLE
30096 30096 RHODIUM 103 METASTABLE
30097 30097 RHODIUM 105
30098 30098 RHODIUM 106
30099 30099 PALLADIUM 100
30100 30100 PALLADIUM 103
30101 30101 PALLADIUM 107
30102 30102 RUTHENIUM 103
30103 30103 RUTHENIUM 105
30104 30104 RUTHENIUM 106
30105 30105 SILVER 108 METASTABLE
30106 30106 SILVER 110 METASTABLE
30107 30107 CADMIUM 109
30108 30108 CADMIUM 113 METASTABLE
30109 30109 CADMIUM 115 METASTABLE
30110 30110 INDIUM 114 METASTABLE
30111 30111 TIN 113
30112 30112 TIN 119 METASTABLE
30113 30113 TIN 121 METASTABLE
30114 30114 TIN 122
30115 30115 TIN 123
30116 30116 TIN 126
30117 30117 ANTIMONY 124
30118 30118 ANTIMONY 125
30119 30119 ANTIMONY 126
30120 30120 ANTIMONY 127
30121 30121 ANTIMONY 129
30122 30122 TELLURIUM 123 METASTABLE
30123 30123 TELLURIUM 125 METASTABLE
30124 30124 TELLURIUM 127
30125 30125 TELLURIUM 127 METASTABLE
30126 30126 TELLURIUM 129
30127 30127 TELLURIUM 129 METASTABLE
30128 30128 TELLURIUM 131 METASTABLE
30129 30129 TELLURIUM 132
30130 30130 IODINE 123
30131 30131 IODINE 124
30132 30132 IODINE 125
30133 30133 IODINE 126
30134 30134 IODINE 129
30135 30135 IODINE 129 ELEMENTARY GASEOUS
30136 30136 IODINE 129 ORGANIC BOUNDED
30137 30137 IODINE 131
30138 30138 IODINE 131 ELEMENTARY GASEOUS
30139 30139 IODINE 131 ORGANIC BOUNDED
30140 30140 IODINE 131 GASEOUS ELEMENTARY AND ORGANIC BOUNDED
30141 30141 IODINE 131 AEROSOL
30142 30142 IODINE 132
30143 30143 IODINE 132 ELEMENTARY GASEOUS
30144 30144 IODINE 132 ORGANIC BOUNDED
30145 30145 IODINE 132 GASEOUS ELEMENTARY AND ORGANIC BOUNDED
30146 30146 IODINE 132 AEROSOL
30147 30147 IODINE 133
30148 30148 IODINE 133 ELEMENTARY GASEOUS
30149 30149 IODINE 133 ORGANIC BOUNDED
30150 30150 IODINE 133 GASEOUS ELEMENTARY AND ORGANIC BOUNDED
30151 30151 IODINE 133 AEROSOL
30152 30152 IODINE 134
30153 30153 IODINE 134 ELEMENTARY GASEOUS
30154 30154 IODINE 134 ORGANIC BOUNDED
30155 30155 IODINE 135
30156 30156 IODINE 135 ELEMENTARY GASEOUS
30157 30157 IODINE 135 ORGANIC BOUNDED
30158 30158 IODINE 135 GASEOUS ELEMENTARY AND ORGANIC BOUNDED
30159 30159 IODINE 135 AEROSOL
30160 30160 XENON 131 METASTABLE
30161 30161 XENON 133
30162 30162 XENON 133 METASTABLE
30163 30163 XENON 135
30164 30164 XENON 135 METASTABLE
30165 30165 XENON 137
30166 30166 XENON 138
30167 30167 XENON SUM OF ALL XENON ISOTOPES
30168 30168 CAESIUM 131
30169 30169 CAESIUM 134
30170 30170 CAESIUM 135
30171 30171 CAESIUM 136
30172 30172 CAESIUM 137
30173 30173 BARIUM 133
30174 30174 BARIUM 137 METASTABLE
30175 30175 BARIUM 140
30176 30176 CERIUM 139
30177 30177 CERIUM 141
30178 30178 CERIUM 143
30179 30179 CERIUM 144
30180 30180 LANTHANUM 140
30181 30181 LANTHANUM 141
30182 30182 PRASEODYMIUM 143
30183 30183 PRASEODYMIUM 144
30184 30184 PRASEODYMIUM 144 METASTABLE
30185 30185 SAMARIUM 145
30186 30186 SAMARIUM 147
30187 30187 SAMARIUM 151
30188 30188 NEODYMIUM 147
30189 30189 PROMETHIUM 146
30190 30190 PROMETHIUM 147
30191 30191 PROMETHIUM 151
30192 30192 EUROPIUM 152
30193 30193 EUROPIUM 154
30194 30194 EUROPIUM 155
30195 30195 GADOLINIUM 153
30196 30196 TERBIUM 160
30197 30197 HOLMIUM 166 METASTABLE
30198 30198 THULIUM 170
30199 30199 YTTERBIUM 169
30200 30200 HAFNIUM 175
30201 30201 HAFNIUM 181
30202 30202 TANTALUM 179
30203 30203 TANTALUM 182
30204 30204 RHENIUM 184
30205 30205 IRIDIUM 192
30206 30206 MERCURY 203
30207 30207 THALLIUM 204
30208 30208 THALLIUM 207
30209 30209 THALLIUM 208
30210 30210 THALLIUM 209
30211 30211 BISMUTH 205
30212 30212 BISMUTH 207
30213 30213 BISMUTH 210
30214 30214 BISMUTH 211
30215 30215 BISMUTH 212
30216 30216 BISMUTH 213
30217 30217 BISMUTH 214
30218 30218 POLONIUM 208
30219 30219 POLONIUM 210
30220 30220 POLONIUM 212
30221 30221 POLONIUM 213
30222 30222 POLONIUM 214
30223 30223 POLONIUM 215
30224 30224 POLONIUM 216
30225 30225 POLONIUM 218
30226 30226 LEAD 209
30227 30227 LEAD 210
30228 30228 LEAD 211
30229 30229 LEAD 212
30230 30230 LEAD 214
30231 30231 ASTATINE 217
30232 30232 RADON 219
30233 30233 RADON 220
30234 30234 RADON 222
30235 30235 FRANCIUM 221
30236 30236 FRANCIUM 223
30237 30237 RADIUM 223
30238 30238 RADIUM 224
30239 30239 RADIUM 225
30240 30240 RADIUM 226
30241 30241 RADIUM 228
30242 30242 ACTINIUM 225
30243 30243 ACTINIUM 227
30244 30244 ACTINIUM 228
30245 30245 THORIUM 227
30246 30246 THORIUM 228
30247 30247 THORIUM 229
30248 30248 THORIUM 230
30249 30249 THORIUM 231
30250 30250 THORIUM 232
30251 30251 THORIUM 234
30252 30252 PROTACTINIUM 231
30253 30253 PROTACTINIUM 233
30254 30254 PROTACTINIUM 234 METASTABLE
30255 30255 URANIUM 232
30256 30256 URANIUM 233
30257 30257 URANIUM 234
30258 30258 URANIUM 235
30259 30259 URANIUM 236
30260 30260 URANIUM 237
30261 30261 URANIUM 238
30262 30262 PLUTONIUM 236
30263 30263 PLUTONIUM 238
30264 30264 PLUTONIUM 239
30265 30265 PLUTONIUM 240
30266 30266 PLUTONIUM 241
30267 30267 PLUTONIUM 242
30268 30268 PLUTONIUM 244
30269 30269 NEPTUNIUM 237
30270 30270 NEPTUNIUM 238
30271 30271 NEPTUNIUM 239
30272 30272 AMERICIUM 241
30273 30273 AMERICIUM 242
30274 30274 AMERICIUM 242 METASTABLE
30275 30275 AMERICIUM 243
30276 30276 CURIUM 242
30277 30277 CURIUM 243
30278 30278 CURIUM 244
30279 30279 CURIUM 245
30280 30280 CURIUM 246
30281 30281 CURIUM 247
30282 30282 CURIUM 248
30283 30283 CURIUM 243/244
30284 30284 PLUTONIUM 238/AMERICIUM 241
30285 30285 PLUTONIUM 239/240
30286 30286 BERKELIUM 249
30287 30287 CALIFORNIUM 249
30288 30288 CALIFORNIUM 250
30289 30289 CALIFORNIUM 252
30290 30290 SUM AEROSOL PARTICULATES
30291 30291 SUM IODINE
30292 30292 SUM NOBLE GAS
30293 30293 ACTIVATION GAS
30294 30294 CS-137 EQUIVALENT
30295 30295 CARBON-13
30296 30296 LEAD
30297 30297 TELLURIUM 131
30298 30298 NEODYMIUM 137
40000 40000 SINGLET SIGMA OXYGEN (DIOXYGEN (SIGMA SINGLET))
40001 40001 SINGLET DELTA OXYGEN (DIOXYGEN (DELTA SINGLET))
40002 40002 SINGLET EXCITED OXYGEN ATOM
40003 40003 TRIPLET GROUND STATE OXYGEN ATOM
60000 60000 HOX RADICAL (OH+HO2)
60001 60001 TOTAL INORGANIC AND ORGANIC PEROXY RADICALS (HOO* + ROO*)
60002 60002 PASSIVE OZONE
60003 60003 NOX EXPRESSED AS NITROGEN
60004 60004 ALL NITROGEN OXIDES (NOY) EXPRESSED AS NITROGEN
60005 60005 TOTAL INORGANIC CHLORINE
60006 60006 TOTAL INORGANIC BROMINE
60007 60007 TOTAL INORGANIC CHLORINE EXCEPT HCL, CLONO2: CLOX
60008 60008 TOTAL INORGANIC BROMINE EXCEPT HBR, BRONO2: BROX
60009 60009 LUMPED ALKANES
60010 60010 LUMPED ALKENES
60011 60011 LUMPED AROMATIC COMPOUNDS
60012 60012 LUMPED TERPENES
60013 60013 NON-METHANE VOLATILE ORGANIC COMPOUNDS EXPRESSED AS CARBON
60014 60014 ANTHROPOGENIC NON-METHANE VOLATILE ORGANIC COMPOUNDS EXPRESSED AS CARBON
60015 60015 BIOGENIC NON-METHANE VOLATILE ORGANIC COMPOUNDS EXPRESSED AS CARBON
60016 60016 LUMPED OXYGENATED HYDROCARBONS
60017 60017 NOX EXPRESSED AS NITROGEN DIOXIDE (NO2)
60018 60018 ORGANIC ALDEHYDES
60019 60019 ORGANIC PEROXIDES
60020 60020 ORGANIC NITRATES
60021 60021 ETHERS
60022 60022 AMINES
60023 60023 KETONES
60024 60024 DICARBONYLS UNSATURATED
60025 60025 HYDROXY DICARBONYLS UNSATURATED
60026 60026 HYDROXY KETONES
60027 60027 OXIDES
60028 60028 PEROXYACYL NITRATES
60029 60029 AROMATIC PEROXIDE RADICAL (ARYL DIOXYDANYL RADICALS)
60030 60030 BIOGENIC SECONDARY ORGANIC COMPOUND
60031 60031 ANTHROPOGENIC SECONDARY ORGANIC COMPOUND
60032 60032 ALL HYDROXY-PEROXIDES PRODUCTS OF THE REACTION OF HYDROXY-ISOPRENE ADDUCTS WITH O2
60033 60033 ANTHROPOGENIC VOLATILE ORGANIC COMPOUNDS
60034 60034 BIOMASS BURNING VOLATILE ORGANIC COMPOUNDS
62000 62000 TOTAL AEROSOL
62001 62001 DUST DRY
62002 62002 WATER IN AMBIENT
62003 62003 AMMONIUM DRY
62004 62004 NITRATE DRY
62005 62005 NITRIC ACID TRIHYDRATE
62006 62006 SULPHATE DRY
62007 62007 MERCURY DRY
62008 62008 SEA SALT DRY
62009 62009 BLACK CARBON DRY
62010 62010 PARTICULATE ORGANIC MATTER DRY
62011 62011 PRIMARY PARTICULATE ORGANIC MATTER DRY
62012 62012 SECONDARY PARTICULATE ORGANIC MATTER DRY
62013 62013 BLACK CARBON HYDROPHILIC DRY
62014 62014 BLACK CARBON HYDROPHOBIC DRY
62015 62015 PARTICULATE ORGANIC MATTER HYDROPHILIC DRY
62016 62016 PARTICULATE ORGANIC MATTER HYDROPHOBIC DRY
62017 62017 NITRATE HYDROPHILIC DRY
62018 62018 NITRATE HYDROPHOBIC DRY
62019 62019 RESERVED
62020 62020 SMOKE - HIGH ABSORPTION
62021 62021 SMOKE - LOW ABSORPTION
62022 62022 AEROSOL - HIGH ABSORPTION
62023 62023 AEROSOL - LOW ABSORPTION
62024 62024 RESERVED
62025 62025 VOLCANIC ASH
62026 62026 PARTICULATE MATTER (PM)
62027 62027 RESERVED
62028 62028 TOTAL AEROSOL HYDROPHILIC
62029 62029 TOTAL AEROSOL HYDROPHOBIC
62030 62030 PRIMARY PARTICULATE INORGANIC MATTER DRY
62031 62031 SECONDARY PARTICULATE INORGANIC MATTER DRY
62032 62032 BIOGENIC SECONDARY ORGANIC AEROSOL
62033 62033 ANTHROPOGENIC SECONDARY ORGANIC AEROSOL
62034 62034 RAIN WATER
62035 62035 CLOUD WATER
62036 62036 BROWN CARBON DRY
62100 62100 ALNUS (ALDER) POLLEN
62101 62101 BETULA (BIRCH) POLLEN
62102 62102 CASTANEA (CHESTNUT) POLLEN
62103 62103 CARPINUS (HORNBEAM) POLLEN
62104 62104 CORYLUS (HAZEL) POLLEN
62105 62105 FAGUS (BEECH) POLLEN
62106 62106 FRAXINUS (ASH) POLLEN
62107 62107 PINUS (PINE) POLLEN
62108 62108 PLATANUS (PLANE) POLLEN
62109 62109 POPULUS (COTTONWOOD, POPLAR) POLLEN
62110 62110 QUERCUS (OAK) POLLEN
62111 62111 SALIX (WILLOW) POLLEN
62112 62112 TAXUS (YEW) POLLEN
62113 62113 TILIA (LIME, LINDEN) POLLEN
62114 62114 ULMUS (ELM) POLLEN
62115 62115 OLEA (OLIVE) POLLEN
62200 62200 AMBROSIA (RAGWEED, BURR-RAGWEED) POLLEN
62201 62201 ARTEMISIA (SAGEBRUSH, WORMWOOD, MUGWORT) POLLEN
62202 62202 BRASSICA (RAPE, BROCCOLI, BRUSSELS SPROUTS, CABBAGE, CAULIFLOWER, COLLARDS, KALE, KOHLRABI, MUSTARD, RUTABAGA) POLLEN
62203 62203 PLANTAGO (PLANTAIN) POLLEN
62204 62204 RUMEX (DOCK, SORREL) POLLEN
62205 62205 URTICA (NETTLE) POLLEN
62300 62300 POACEAE (GRASS FAMILY) POLLEN
65535 65535 MISSING

View File

@ -23,7 +23,7 @@ alias Lo1 = longitudeOfFirstGridPoint;
include "grib1/resolution_flags.def";
# LoV - orientation of the grid; i.e. the longitude value of the meridian which is parallel to the Y-axis
signed[3] orientationOfTheGrid ;
signed[3] orientationOfTheGrid : edition_specific, no_copy ;
meta geography.orientationOfTheGridInDegrees scale(orientationOfTheGrid,oneConstant,grib1divider,truncateDegrees) : dump;
alias LoV = orientationOfTheGrid ;

View File

@ -60,7 +60,7 @@ alias xFirst=longitudeOfFirstGridPointInDegrees;
include "grib1/scanning_mode.def";
# Latin 1 - first latitude from the pole at which the secant cone cuts the sphere
signed[3] Latin1 : edition_specific;
signed[3] Latin1 : edition_specific, no_copy;
meta geography.Latin1InDegrees scale(Latin1,oneConstant,grib1divider,truncateDegrees) : dump;
alias firstLatitude=Latin1;
alias firstLatitudeInDegrees=Latin1InDegrees;
@ -70,7 +70,7 @@ constant LaDInDegrees = Latin1InDegrees : dump;
alias geography.LaDInDegrees=LaDInDegrees;
# Latin 2 - second latitude from the pole at which the secant cone cuts the sphere
signed[3] Latin2 :edition_specific;
signed[3] Latin2 :edition_specific,no_copy;
alias secondLatitude=Latin2;
meta geography.Latin2InDegrees scale(Latin2,oneConstant,grib1divider,truncateDegrees) : dump;
alias secondLatitudeInDegrees=Latin2InDegrees;

View File

@ -1,10 +1,10 @@
# (C) Copyright 2005- ECMWF.
signed[3] latitudeOfSouthernPole : edition_specific;
meta geography.latitudeOfSouthernPoleInDegrees scale(latitudeOfSouthernPole ,oneConstant,grib1divider,truncateDegrees) : dump;
signed[3] latitudeOfSouthernPole : edition_specific, no_copy;
meta geography.latitudeOfSouthernPoleInDegrees scale(latitudeOfSouthernPole ,oneConstant,grib1divider,truncateDegrees): dump;
signed[3] longitudeOfSouthernPole : edition_specific ;
meta geography.longitudeOfSouthernPoleInDegrees scale(longitudeOfSouthernPole ,oneConstant,grib1divider,truncateDegrees) : dump;
signed[3] longitudeOfSouthernPole : edition_specific, no_copy;
meta geography.longitudeOfSouthernPoleInDegrees scale(longitudeOfSouthernPole ,oneConstant,grib1divider,truncateDegrees): dump;
ibmfloat geography.angleOfRotationInDegrees : dump;

View File

@ -0,0 +1,8 @@
# aliasing MARS date and time to the date and time defined in section 1
alias mars.date = dataDate;
alias mars.time = dataTime;
# dateOfAnalysis and timeOfAnalysis still exist in this stream but is not used in MARS
unalias mars.step;
alias mars.step = stepRange;

View File

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

View File

@ -154,17 +154,18 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len)
grib_accessor_change_scanning_direction* self = (grib_accessor_change_scanning_direction*)a;
grib_context* c = a->context;
grib_handle* h = grib_handle_of_accessor(a);
const char* cclass_name = a->cclass->name;
if (*val == 0)
return 0;
/* Make sure Ni / Nj are not missing */
if (grib_is_missing(h, self->Ni, &err) && !err) {
grib_context_log(c, GRIB_LOG_ERROR, "change_scanning_direction: Key %s cannot be 'missing'!", self->Ni);
grib_context_log(c, GRIB_LOG_ERROR, "%s: Key %s cannot be 'missing'!", cclass_name, self->Ni);
return GRIB_WRONG_GRID;
}
if (grib_is_missing(h, self->Nj, &err) && !err) {
grib_context_log(c, GRIB_LOG_ERROR, "change_scanning_direction: Key %s cannot be 'missing'!", self->Nj);
grib_context_log(c, GRIB_LOG_ERROR, "%s: Key %s cannot be 'missing'!", cclass_name, self->Nj);
return GRIB_WRONG_GRID;
}
@ -187,7 +188,7 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len)
return err;
if (size > Ni * Nj) {
grib_context_log(c, GRIB_LOG_ERROR, "change_scanning_direction: wrong values size!=Ni*Nj (%ld!=%ld*%ld)", size, Ni, Nj);
grib_context_log(c, GRIB_LOG_ERROR, "%s: Wrong values size!=Ni*Nj (%ld!=%ld*%ld)", cclass_name, size, Ni, Nj);
return GRIB_WRONG_ARRAY_SIZE;
}

View File

@ -315,6 +315,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
{
grib_accessor_data_complex_packing* self = (grib_accessor_data_complex_packing*)a;
grib_handle* gh = grib_handle_of_accessor(a);
const char* cclass_name = a->cclass->name;
size_t i = 0;
int ret = GRIB_SUCCESS;
@ -431,8 +432,8 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
n_vals = (pen_j + 1) * (pen_j + 2);
if (*len != n_vals) {
grib_context_log(a->context, GRIB_LOG_ERROR, "COMPLEX_PACKING: wrong number of values, expected %ld - got %lu",
n_vals, *len);
grib_context_log(a->context, GRIB_LOG_ERROR, "%s: Wrong number of values, expected %ld - got %zu",
cclass_name, n_vals, *len);
return GRIB_INTERNAL_ERROR;
}
@ -488,7 +489,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
hpos = 0;
scals = (double*)grib_context_malloc(a->context, maxv * sizeof(double));
Assert(scals);
if (!scals) return GRIB_OUT_OF_MEMORY;
scals[0] = 0;
for (i = 1; i < maxv; i++)
@ -544,7 +545,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
&reference_value);
if (ret != GRIB_SUCCESS) {
grib_context_log(gh->context, GRIB_LOG_ERROR,
"unable to find nearest_smaller_value of %g for %s", min, self->reference_value);
"%s: unable to find nearest_smaller_value of %g for %s", cclass_name, min, self->reference_value);
return GRIB_INTERNAL_ERROR;
}
d = grib_power<double>(+decimal_scale_factor, 10);
@ -553,7 +554,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
d = grib_power<double>(+decimal_scale_factor, 10);
if (grib_get_nearest_smaller_value(gh, self->reference_value, d * min, &reference_value) != GRIB_SUCCESS) {
grib_context_log(gh->context, GRIB_LOG_ERROR,
"unable to find nearest_smaller_value of %g for %s", d * min, self->reference_value);
"%s: unable to find nearest_smaller_value of %g for %s", cclass_name, d * min, self->reference_value);
return GRIB_INTERNAL_ERROR;
}
binary_scale_factor = grib_get_binary_scale_fact(d * max, reference_value, bits_per_value, &ret);
@ -565,7 +566,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
}
else {
if (ret != GRIB_SUCCESS) {
grib_context_log(a->context, GRIB_LOG_ERROR, "COMPLEX_PACKING : Cannot compute binary_scale_factor");
grib_context_log(a->context, GRIB_LOG_ERROR, "%s: Cannot compute binary_scale_factor", cclass_name);
return ret;
}
}
@ -610,13 +611,13 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
current_val = (((((val[i++] * d) * scals[lup]) - reference_value) * s) + 0.5);
if (current_val < 0)
grib_context_log(a->context, GRIB_LOG_ERROR,
"COMPLEX_PACKING : negative coput before packing (%g)", current_val);
"%s: negative coput before packing (%g)", cclass_name, current_val);
grib_encode_unsigned_longb(lres, current_val, &lpos, bits_per_value);
current_val = (((((val[i++] * d) * scals[lup]) - reference_value) * s) + 0.5);
if (current_val < 0)
grib_context_log(a->context, GRIB_LOG_ERROR,
"COMPLEX_PACKING : negative coput before packing (%g)", current_val);
"%s: negative coput before packing (%g)", cclass_name, current_val);
grib_encode_unsigned_longb(lres, current_val, &lpos, bits_per_value);
lup++;
}
@ -626,13 +627,13 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
current_val = (((((val[i++] * d) * scals[lup]) - reference_value) * s) + 0.5);
if (current_val < 0)
grib_context_log(a->context, GRIB_LOG_ERROR,
"COMPLEX_PACKING : negative coput before packing (%g)", current_val);
"%s: negative coput before packing (%g)", cclass_name, current_val);
grib_encode_unsigned_long(lres, current_val, &lpos, bits_per_value);
current_val = (((((val[i++] * d) * scals[lup]) - reference_value) * s) + 0.5);
if (current_val < 0)
grib_context_log(a->context, GRIB_LOG_ERROR,
"COMPLEX_PACKING : negative coput before packing (%g)", current_val);
"%s: negative coput before packing (%g)", cclass_name, current_val);
grib_encode_unsigned_long(lres, current_val, &lpos, bits_per_value);
lup++;
}
@ -646,7 +647,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
if (((hpos / 8) != hsize) && ((lpos / 8) != lsize)) {
grib_context_log(a->context, GRIB_LOG_ERROR,
"COMPLEX_PACKING : Mismatch in packing between high resolution and low resolution part");
"%s: Mismatch in packing between high resolution and low resolution part", cclass_name);
grib_context_free(a->context, buf);
grib_context_free(a->context, scals);
return GRIB_INTERNAL_ERROR;
@ -682,6 +683,7 @@ static int unpack(grib_accessor* a, T* val, size_t* len)
static_assert(std::is_floating_point<T>::value, "Requires floating point numbers");
grib_accessor_data_complex_packing* self = (grib_accessor_data_complex_packing*)a;
grib_handle* gh = grib_handle_of_accessor(a);
const char* cclass_name = a->cclass->name;
size_t i = 0;
int ret = GRIB_SUCCESS;
@ -817,7 +819,6 @@ static int unpack(grib_accessor* a, T* val, size_t* len)
return 0;
}
packed_offset = grib_byte_offset(a) + bytes * (sub_k + 1) * (sub_k + 2);
lpos = 8 * (packed_offset - offsetdata);
@ -826,7 +827,7 @@ static int unpack(grib_accessor* a, T* val, size_t* len)
d = grib_power<T>(-decimal_scale_factor, 10);
scals = (T*)grib_context_malloc(a->context, maxv * sizeof(T));
Assert(scals);
if (!scals) return GRIB_OUT_OF_MEMORY;
scals[0] = 0;
for (i = 1; i < maxv; i++) {
@ -835,8 +836,7 @@ static int unpack(grib_accessor* a, T* val, size_t* len)
scals[i] = (1.0 / operat);
else {
grib_context_log(a->context, GRIB_LOG_WARNING,
"COMPLEX_PACKING : problem with operator div by zero at index %d of %d \n",
i, maxv);
"%s: Problem with operator div by zero at index %d of %d", cclass_name, i, maxv);
scals[i] = 0;
}
}
@ -910,24 +910,24 @@ static int unpack_float(grib_accessor* a, float* val, size_t* len)
// TODO(maee): See ECC-1579
// Investigate why results are not bit-identical
return unpack<float>(a, val, len);
// return unpack<float>(a, val, len);
//int err = 0;
//size_t i = 0;
//size_t size = *len;
//double* val8 = NULL;
//val8 = (double*)grib_context_malloc(a->context, size*(sizeof(double)));
//if (!val8)
// return GRIB_OUT_OF_MEMORY;
//err = unpack<double>(a, val8, len);
//if (err) {
// grib_context_free(a->context,val8);
// return err;
//}
int err = 0;
size_t i = 0;
size_t size = *len;
double* val8 = NULL;
val8 = (double*)grib_context_malloc(a->context, size*(sizeof(double)));
if (!val8) return GRIB_OUT_OF_MEMORY;
//for(i=0; i<size; i++)
// val[i] = val8[i];
//grib_context_free(a->context,val8);
err = unpack<double>(a, val8, len);
if (err) {
grib_context_free(a->context,val8);
return err;
}
for(i=0; i<size; i++)
val[i] = val8[i];
grib_context_free(a->context,val8);
return GRIB_SUCCESS;
}

View File

@ -348,7 +348,7 @@ static int min_max_array(double* data, unsigned int n, double* min, double* max)
if (n == 0) {
*min = *max = 0.0;
return 1;
return GRIB_DECODING_ERROR;
}
for (first = 0; first < n; first++) {
@ -356,7 +356,7 @@ static int min_max_array(double* data, unsigned int n, double* min, double* max)
}
if (first >= n) {
*min = *max = 0.0;
return 1;
return GRIB_DECODING_ERROR;
}
mn = mx = data[first];
@ -381,7 +381,7 @@ static int min_max_array(double* data, unsigned int n, double* min, double* max)
*min = mn;
*max = mx;
return 0;
return GRIB_SUCCESS;
}
#if 0
@ -522,16 +522,15 @@ static int unpack(grib_accessor* a, T* val, const size_t* len)
{
static_assert(std::is_floating_point<T>::value, "Requires floating points numbers");
grib_accessor_data_g22order_packing* self = reinterpret_cast<grib_accessor_data_g22order_packing*>(a);
const char* cclass_name = a->cclass->name;
grib_handle* gh = grib_handle_of_accessor(a);
size_t i = 0;
size_t j = 0;
long n_vals = 0;
long vcount = 0;
int err = GRIB_SUCCESS;
long* sec_val = NULL;
grib_handle* gh = grib_handle_of_accessor(a);
long* sec_val = NULL;
unsigned char* buf = reinterpret_cast<unsigned char*>(gh->buffer->data);
unsigned char* buf_ref = NULL;
unsigned char* buf_width = NULL;
@ -542,7 +541,6 @@ static int unpack(grib_accessor* a, T* val, const size_t* len)
long ref_p = 0;
long width_p = 0;
long vals_p = 0;
long nvals_per_group = 0;
long nbits_per_group_val = 0;
long group_ref_val = 0;
@ -738,7 +736,7 @@ static int unpack(grib_accessor* a, T* val, const size_t* len)
// For Complex packing and spatial differencing, order == 1 or 2 (code table 5.6)
if (orderOfSpatialDifferencing != 1 && orderOfSpatialDifferencing != 2) {
grib_context_log(a->context, GRIB_LOG_ERROR,
"grid_complex unpacking: Unsupported order of spatial differencing %ld", orderOfSpatialDifferencing);
"%s unpacking: Unsupported order of spatial differencing %ld", cclass_name, orderOfSpatialDifferencing);
return GRIB_INTERNAL_ERROR;
}
@ -1182,6 +1180,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
unsigned char* sec7;
grib_accessor_data_g22order_packing* self = reinterpret_cast<grib_accessor_data_g22order_packing*>(a);
grib_handle* gh = grib_handle_of_accessor(a);
const char* cclass_name = a->cclass->name;
int err = 0;
@ -1211,7 +1210,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
int use_bitmap;
int j, j0, k, *v, binary_scale, nbits, has_undef, extra_0, extra_1;
unsigned int i, ii;
size_t i, ii;
int vmn, vmx, vbits;
// Sections
double max_val, min_val, ref, frange, dec_factor, scale;
@ -1332,7 +1331,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
size_t ndata = *len;
double* data = reinterpret_cast<double*>(grib_context_malloc_clear(a->context, ndata * sizeof(double)));
if (data == NULL) {
grib_context_log(a->context, GRIB_LOG_ERROR, "grid_complex packing: unable to allocate %zu bytes", ndata * sizeof(double));
grib_context_log(a->context, GRIB_LOG_ERROR, "%s packing: unable to allocate %zu bytes", cclass_name, ndata * sizeof(double));
return GRIB_OUT_OF_MEMORY;
}
memcpy(data, val, sizeof(*data) * ndata);
@ -1352,11 +1351,11 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
v = reinterpret_cast<int*>(grib_context_malloc(a->context, nndata * sizeof(int)));
if (v == NULL) {
grib_context_log(a->context, GRIB_LOG_ERROR, "grid_complex packing: unable to allocate %d bytes", nndata * sizeof(int));
grib_context_log(a->context, GRIB_LOG_ERROR, "%s packing: unable to allocate %zu bytes", cclass_name, nndata * sizeof(int));
return GRIB_OUT_OF_MEMORY;
}
if (min_max_array(data, ndata, &mn, &mx) != 0) {
grib_context_log(a->context, GRIB_LOG_ERROR, "grid_complex packing: failed to get min max of data");
if (min_max_array(data, ndata, &mn, &mx) != GRIB_SUCCESS) {
grib_context_log(a->context, GRIB_LOG_ERROR, "%s packing: failed to get min max of data", cclass_name);
return GRIB_ENCODING_ERROR;
}
min_val = static_cast<double>(mn);
@ -1535,7 +1534,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
list = reinterpret_cast<section*>(grib_context_malloc_clear(a->context, nstruct * sizeof(section)));
if (list == NULL) {
grib_context_log(a->context, GRIB_LOG_ERROR, "grid_complex packing: memory allocation of list failed");
grib_context_log(a->context, GRIB_LOG_ERROR, "%s packing: memory allocation of list failed",cclass_name);
return GRIB_OUT_OF_MEMORY;
}
@ -1565,7 +1564,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
start.tail = &list[0];
if (nstruct != ii + 1) {
grib_context_log(a->context, GRIB_LOG_ERROR, "grid_complex packing: nstruct=%zu wanted %lu", nstruct, ii + 1);
grib_context_log(a->context, GRIB_LOG_ERROR, "%s packing: nstruct=%zu wanted %zu", cclass_name, nstruct, ii + 1);
return GRIB_ENCODING_ERROR;
}
for (i = 1; i < nstruct; i++) {
@ -1593,7 +1592,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
list_backup = reinterpret_cast<section*>(grib_context_malloc(a->context, nstruct * sizeof(section)));
if (list_backup == NULL) {
grib_context_log(a->context, GRIB_LOG_ERROR, "grid_complex packing: memory allocation of list_backup failed");
grib_context_log(a->context, GRIB_LOG_ERROR, "%s packing: memory allocation of list_backup failed", cclass_name);
return GRIB_OUT_OF_MEMORY;
}
@ -1673,7 +1672,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
itmp2 = reinterpret_cast<int*>(grib_context_malloc(a->context, ngroups * sizeof(int)));
if (lens == NULL || widths == NULL || refs == NULL || itmp == NULL || itmp2 == NULL) {
grib_context_log(a->context, GRIB_LOG_ERROR, "grid_complex packing: memory allocation of lens/widths/refs/itmp/itmp2 failed");
grib_context_log(a->context, GRIB_LOG_ERROR, "%s packing: memory alloc of lens/widths/refs/itmp/itmp2 failed",cclass_name);
return GRIB_OUT_OF_MEMORY;
}
@ -1808,7 +1807,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
sec7 = reinterpret_cast<unsigned char*>(grib_context_malloc(a->context, size_sec7));
if (sec7 == NULL) {
grib_context_log(a->context, GRIB_LOG_ERROR, "grid_complex packing: unable to allocate %d bytes", size_sec7);
grib_context_log(a->context, GRIB_LOG_ERROR, "%s packing: unable to allocate %d bytes", cclass_name, size_sec7);
return GRIB_OUT_OF_MEMORY;
}

View File

@ -151,6 +151,7 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len)
{
grib_accessor_data_run_length_packing* self = (grib_accessor_data_run_length_packing*)a;
grib_handle* gh = grib_handle_of_accessor(a);
const char* cclass_name = a->cclass->name;
int err = GRIB_SUCCESS;
long seclen, number_of_values, bits_per_value, max_level_value, number_of_level_values, decimal_scale_factor;
long* level_values = NULL;
@ -195,9 +196,9 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len)
range = (1 << bits_per_value) - 1 - max_level_value;
if ((max_level_value <= 0) || (number_of_level_values <= 0) || (max_level_value > number_of_level_values) || (range <= 0)) {
grib_context_log(a->context, GRIB_LOG_ERROR,
"data_run_length_packing: parameters are invalid: max_level_value=%ld(>0, <=number_of_level_values), "
"%s: parameters are invalid: max_level_value=%ld(>0, <=number_of_level_values), "
"number_of_level_values=%ld(>0, >=max_level_value), range=%ld(>0)",
max_level_value, number_of_level_values, range);
cclass_name, max_level_value, number_of_level_values, range);
return GRIB_DECODING_ERROR;
}
if (decimal_scale_factor > 127) {
@ -220,9 +221,9 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len)
while (i < number_of_compressed_values) {
if (compressed_values[i] > max_level_value) {
grib_context_log(a->context, GRIB_LOG_ERROR,
"data_run_length_packing: numberOfValues mismatch: i=%d, "
"%s: numberOfValues mismatch: i=%d, "
"compressed_values[i]=%ld, max_level_value=%ld",
i, compressed_values[i], max_level_value);
cclass_name, i, compressed_values[i], max_level_value);
break;
}
v = compressed_values[i++];
@ -234,8 +235,8 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len)
i++;
}
if (n > number_of_values) {
grib_context_log(a->context, GRIB_LOG_ERROR, "data_run_length_packing: numberOfValues mismatch: n=%ld, number_of_values=%ld",
n, number_of_values);
grib_context_log(a->context, GRIB_LOG_ERROR, "%s: numberOfValues mismatch: n=%ld, number_of_values=%ld",
cclass_name, n, number_of_values);
break;
}
for (k = 0; k < n; k++) {
@ -246,8 +247,8 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len)
grib_context_free(a->context, levels);
grib_context_free(a->context, compressed_values);
if (j != number_of_values) {
grib_context_log(a->context, GRIB_LOG_ERROR, "data_run_length_packing: numberOfValues mismatch: j=%ld, number_of_values=%ld",
j, number_of_values);
grib_context_log(a->context, GRIB_LOG_ERROR, "%s: numberOfValues mismatch: j=%ld, number_of_values=%ld",
cclass_name, j, number_of_values);
return GRIB_DECODING_ERROR;
}
return err;
@ -255,6 +256,7 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len)
static int pack_double(grib_accessor* a, const double* val, size_t* len)
{
grib_context_log(a->context, GRIB_LOG_ERROR, "Changing the packing type to 'grid_run_length' is not implemented.");
grib_context_log(a->context, GRIB_LOG_ERROR,
"%s: Function '%s' is not implemented", a->cclass->name, __func__);
return GRIB_NOT_IMPLEMENTED;
}

View File

@ -8,10 +8,6 @@
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
/********************************
* Enrico Fucile
*******************************/
#include "grib_api_internal_cpp.h"
#include "grib_optimize_decimal_factor.h"
#include <float.h>
@ -198,6 +194,7 @@ static int value_count(grib_accessor* a, long* number_of_values)
static int unpack_double_element(grib_accessor* a, size_t idx, double* val)
{
grib_accessor_data_simple_packing* self = (grib_accessor_data_simple_packing*)a;
const char* cclass_name = a->cclass->name;
long n_vals;
int err = 0;
@ -242,8 +239,8 @@ static int unpack_double_element(grib_accessor* a, size_t idx, double* val)
d = grib_power<double>(-decimal_scale_factor, 10);
grib_context_log(a->context, GRIB_LOG_DEBUG,
"grib_accessor_data_simple_packing: unpack_double_element: creating %s, %d values (idx=%ld)",
a->name, n_vals, idx);
"%s: %s: creating %s, %ld values (idx=%zu)",
cclass_name, __func__, a->name, n_vals, idx);
buf += grib_byte_offset(a);
@ -251,14 +248,11 @@ static int unpack_double_element(grib_accessor* a, size_t idx, double* val)
if (bits_per_value % 8) {
grib_context_log(a->context, GRIB_LOG_DEBUG,
"unpack_double_element: calling outline function : bpv %d, rv : %g, sf : %d, dsf : %d ",
bits_per_value, reference_value, binary_scale_factor, decimal_scale_factor);
"%s: calling outline function : bpv %ld, rv: %g, bsf: %ld, dsf: %ld ",
cclass_name, bits_per_value, reference_value, binary_scale_factor, decimal_scale_factor);
pos = idx * bits_per_value;
*val = (double)(((
grib_decode_unsigned_long(buf, &pos, bits_per_value) * s) +
reference_value) *
d);
/* val[i] = grib_decode_unsigned_long(buf, &pos, bits_per_value); */
*val = (double)(((grib_decode_unsigned_long(buf, &pos, bits_per_value) * s) + reference_value) * d);
/* val[i] = grib_decode_unsigned_long(buf, &pos, bits_per_value); */
/* fprintf(stdout,"unpck uuu-o: %d vals %d bitspv buf %d by long \n", n_vals, bits_per_value, pos/8);*/
}
else {
@ -298,6 +292,7 @@ static int unpack(grib_accessor* a, T* val, size_t* len)
static_assert(std::is_floating_point<T>::value, "Requires floating point numbers");
grib_accessor_data_simple_packing* self = (grib_accessor_data_simple_packing*)a;
const char* cclass_name = a->cclass->name;
grib_handle* gh = grib_handle_of_accessor(a);
unsigned char* buf = (unsigned char*)grib_handle_of_accessor(a)->buffer->data;
@ -377,8 +372,7 @@ static int unpack(grib_accessor* a, T* val, size_t* len)
d = grib_power<double>(-decimal_scale_factor, 10);
grib_context_log(a->context, GRIB_LOG_DEBUG,
"grib_accessor_data_simple_packing: unpack_double : creating %s, %d values",
a->name, n_vals);
"%s %s: Creating %s, %zu values", cclass_name, __func__, a->name, n_vals);
offsetBeforeData = grib_byte_offset(a);
buf += offsetBeforeData;
@ -394,8 +388,9 @@ static int unpack(grib_accessor* a, T* val, size_t* len)
const long valuesSize = (bits_per_value * n_vals) / 8; /*in bytes*/
if (offsetBeforeData + valuesSize > offsetAfterData) {
grib_context_log(a->context, GRIB_LOG_ERROR,
"Data section size mismatch: offset before data=%ld, offset after data=%ld (num values=%ld, bits per value=%ld)",
offsetBeforeData, offsetAfterData, n_vals, bits_per_value);
"%s: Data section size mismatch: "
"offset before data=%ld, offset after data=%ld (num values=%zu, bits per value=%ld)",
cclass_name, offsetBeforeData, offsetAfterData, n_vals, bits_per_value);
return GRIB_DECODING_ERROR;
}
}
@ -411,8 +406,8 @@ static int unpack(grib_accessor* a, T* val, size_t* len)
}
grib_context_log(a->context, GRIB_LOG_DEBUG,
"unpack_double: calling outline function : bpv %d, rv : %g, sf : %d, dsf : %d ",
bits_per_value, reference_value, binary_scale_factor, decimal_scale_factor);
"%s %s: calling outline function: bpv: %ld, rv: %g, bsf: %ld, dsf: %ld",
cclass_name, __func__, bits_per_value, reference_value, binary_scale_factor, decimal_scale_factor);
grib_decode_array<T>(buf, &pos, bits_per_value, reference_value, s, d, n_vals, val);
*len = (long)n_vals;
@ -445,6 +440,7 @@ static int _unpack_double(grib_accessor* a, double* val, size_t* len, unsigned c
{
grib_accessor_data_simple_packing* self = (grib_accessor_data_simple_packing*)a;
grib_handle* gh = grib_handle_of_accessor(a);
const char* cclass_name = a->cclass->name;
size_t i = 0;
int err = 0;
@ -514,8 +510,7 @@ static int _unpack_double(grib_accessor* a, double* val, size_t* len, unsigned c
d = grib_power<double>(-decimal_scale_factor, 10);
grib_context_log(a->context, GRIB_LOG_DEBUG,
"grib_accessor_data_simple_packing: unpack_double : creating %s, %d values",
a->name, n_vals);
"%s %s: Creating %s, %zu values", cclass_name, __func__, a->name, n_vals);
offsetBeforeData = grib_byte_offset(a);
buf += offsetBeforeData;
@ -620,6 +615,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
{
grib_accessor_data_simple_packing* self = (grib_accessor_data_simple_packing*)a;
grib_handle* gh = grib_handle_of_accessor(a);
const char* cclass_name = a->cclass->name;
size_t i = 0;
size_t n_vals = *len;
@ -694,8 +690,8 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
double ref = 1e-100;
grib_get_double_internal(gh, self->reference_value, &ref);
if (ref != reference_value) {
grib_context_log(a->context, GRIB_LOG_ERROR, "data_simple_packing %s: (ref=%.10e != reference_value=%.10e)",
__func__, ref, reference_value);
grib_context_log(a->context, GRIB_LOG_ERROR, "%s %s: (ref=%.10e != reference_value=%.10e)",
cclass_name, __func__, ref, reference_value);
return GRIB_INTERNAL_ERROR;
}
}
@ -756,8 +752,8 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
err = number_of_bits((unsigned long)ceil(fabs(max - min)), &bits_per_value);
if (err) {
grib_context_log(a->context, GRIB_LOG_ERROR,
"Range of values too large. Try a smaller value for decimal precision (less than %ld)",
decimal_scale_factor);
"%s %s: Range of values too large. Try a smaller value for decimal precision (less than %ld)",
cclass_name, __func__, decimal_scale_factor);
return err;
}

View File

@ -463,7 +463,7 @@ static int pack_long(grib_accessor* a, const long* v, size_t* len)
double* val = (double*)grib_context_malloc(c, *len * (sizeof(double)));
if (!val) {
grib_context_log(c, GRIB_LOG_ERROR,
"Unable to allocate %d bytes\n", (int)(*len * (sizeof(double))));
"Unable to allocate %zu bytes", *len * (sizeof(double)));
return GRIB_OUT_OF_MEMORY;
}
for (i = 0; i < *len; i++)
@ -473,7 +473,6 @@ static int pack_long(grib_accessor* a, const long* v, size_t* len)
return ret;
}
grib_context_log(c, GRIB_LOG_ERROR, "Should not grib_pack %s as long", a->name);
Assert(0);
return GRIB_NOT_IMPLEMENTED;
}
@ -565,7 +564,7 @@ static int pack_bytes(grib_accessor* a, const unsigned char* val, size_t* len)
const size_t length = *len;
if (length != a->length) {
grib_context_log(a->context, GRIB_LOG_ERROR,
"pack_bytes: Wrong size (%lu) for %s. It is %lu bytes long",
"pack_bytes: Wrong size (%zu) for %s. It is %ld bytes long",
length, a->name, a->length);
return GRIB_BUFFER_TOO_SMALL;
}
@ -599,7 +598,7 @@ static void update_size(grib_accessor* a, size_t s)
{
grib_context_log(a->context, GRIB_LOG_ERROR,
"Accessor %s [%s] must implement 'update_size'", a->name, a->cclass->name);
Assert(0 == 1);
Assert(0);
}
static grib_accessor* next(grib_accessor* a, int mod)

View File

@ -210,7 +210,7 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len)
rlen = count;
if (*len < 1) {
grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s it contains %d values ", a->name, 1);
grib_context_log(a->context, GRIB_LOG_ERROR, "Wrong size for %s, it contains %d values", a->name, 1);
len[0] = 0;
return GRIB_ARRAY_TOO_SMALL;
}
@ -222,9 +222,22 @@ static int pack_long(grib_accessor* a, const long* val, size_t* len)
if (rlen == 1) {
long v = val[0];
if (missing)
if (missing) {
if (v == GRIB_MISSING_LONG)
v = missing;
} else {
// ECC-1605: Check overflow/underflow
const int nbits = self->nbytes * 8;
const long minval = -(1L << (nbits-1)) + 1;
const long maxval = (1L << (nbits-1)) - 1;
//printf(" key=%s: v=%ld (minval=%ld maxval=%ld)\n", a->name, v, minval, maxval);
if (v > maxval || v < minval) {
grib_context_log(a->context, GRIB_LOG_ERROR,
"Key \"%s\": Trying to encode value of %ld but the allowable range is %ld to %ld (number of bits=%d)",
a->name, v, minval, maxval, nbits);
return GRIB_ENCODING_ERROR;
}
}
off = a->offset;
ret = grib_encode_signed_long(grib_handle_of_accessor(a)->buffer->data, v, off, a->length);

View File

@ -220,7 +220,7 @@ int pack_long_unsigned_helper(grib_accessor* a, const long* val, size_t* len, in
if (check) {
if (val[0] < 0) {
grib_context_log(a->context, GRIB_LOG_ERROR,
"Key \"%s\": Trying to encode a negative value of %ld for key of type unsigned\n", a->name, val[0]);
"Key \"%s\": Trying to encode a negative value of %ld for key of type unsigned", a->name, val[0]);
return GRIB_ENCODING_ERROR;
}
/* See GRIB-23 and GRIB-262 */
@ -230,8 +230,8 @@ int pack_long_unsigned_helper(grib_accessor* a, const long* val, size_t* len, in
unsigned long maxval = (1UL << nbits) - 1;
if (maxval > 0 && v > maxval) { /* See ECC-1002 */
grib_context_log(a->context, GRIB_LOG_ERROR,
"Key \"%s\": Trying to encode value of %ld but the maximum allowable value is %ld (number of bits=%ld)\n",
a->name, v, maxval, nbits);
"Key \"%s\": Trying to encode value of %ld but the maximum allowable value is %lu (number of bits=%ld)",
a->name, v, maxval, nbits);
return GRIB_ENCODING_ERROR;
}
}

View File

@ -191,6 +191,8 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment)
fprintf(self->dumper.out, "%ld-%ld %s %s = %ld", self->begin, self->theEnd, a->creator->op, a->name, value);
if (comment)
fprintf(self->dumper.out, " [%s]", comment);
if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0)
fprintf(self->dumper.out, " (%s)", grib_get_type_name(grib_accessor_get_native_type(a)));
if ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0)
fprintf(self->dumper.out, " %s", "(can be missing)");
if ((a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0)
@ -269,6 +271,8 @@ static void dump_double(grib_dumper* d, grib_accessor* a, const char* comment)
fprintf(self->dumper.out, "%ld-%ld %s %s = %g", self->begin, self->theEnd, a->creator->op, a->name, value);
if (comment)
fprintf(self->dumper.out, " [%s]", comment);
if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0)
fprintf(self->dumper.out, " (%s)", grib_get_type_name(grib_accessor_get_native_type(a)));
if (err)
fprintf(self->dumper.out, " *** ERR=%d (%s) [grib_dumper_debug::dump_double]", err, grib_get_error_message(err));
aliases(d, a);
@ -317,6 +321,9 @@ static void dump_string(grib_dumper* d, grib_accessor* a, const char* comment)
if (comment)
fprintf(self->dumper.out, " [%s]", comment);
if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0)
fprintf(self->dumper.out, " (%s)", grib_get_type_name(grib_accessor_get_native_type(a)));
if (err)
fprintf(self->dumper.out, " *** ERR=%d (%s) [grib_dumper_debug::dump_string]", err, grib_get_error_message(err));
aliases(d, a);

View File

@ -82,8 +82,8 @@ fi
rm -f $outfile1 $outfile2
infile=${data_dir}/reduced_latlon_surface.grib2
outfile1=$infile.tmp_ccsds.1
outfile2=$infile.tmp_ccsds.2
#outfile1=$infile.tmp_ccsds.1
#outfile2=$infile.tmp_ccsds.2
${tools_dir}/grib_set -r -s packingType=grid_ccsds $infile $outfile1
${tools_dir}/grib_compare -b $BLACKLIST $infile $outfile1 > $REDIRECT
@ -101,8 +101,8 @@ rm -f $outfile1 $outfile2
# ECC-297: Basic support
# --------------------------------------
infile=${data_dir}/tigge_ecmwf.grib2
outfile1=$infile.tmp_ccsds.1
outfile2=$infile.tmp_ccsds.2
#outfile1=$infile.tmp_ccsds.1
#outfile2=$infile.tmp_ccsds.2
${tools_dir}/grib_set -r -s bitsPerValue=17 $infile $outfile1
${tools_dir}/grib_set -r -s packingType=grid_ccsds $outfile1 $outfile2
@ -143,6 +143,29 @@ grib_check_key_equals $outfile2 packingType grid_ccsds
${tools_dir}/grib_compare -b $BLACKLIST $infile $outfile1
${tools_dir}/grib_compare -c data:n $outfile1 $outfile2
# Test increasing bitsPerValue
# -----------------------------
# TODO: This one is broken for some BPV values. It has AEC_DATA_3BYTE_OPTION_MASK==0
# input=${data_dir}/ccsds.grib2
ifs_samples="gg_ml.tmpl gg_sfc_grib2.tmpl"
ifs_dir=${proj_dir}/ifs_samples/grib1_mlgrib2_ccsds
MAX_BPV=32 # libaec cannot handle more than this
for sample in $ifs_samples; do
input=$ifs_dir/$sample
MIN_BPV=`${tools_dir}/grib_get -p bitsPerValue $input`
stats1=`${tools_dir}/grib_get -F%.3f -p min,max,avg,sd $input`
grib_check_key_equals $input 'bitsPerValue,packingType,AEC_DATA_3BYTE_OPTION_MASK' '16 grid_ccsds 1'
for bpv in `seq $MIN_BPV $MAX_BPV`; do
${tools_dir}/grib_set -s setBitsPerValue=$bpv $input $outfile2
${tools_dir}/grib_compare -c data:n $input $outfile2
stats2=`${tools_dir}/grib_get -F%.3f -p min,max,avg,sd $outfile2`
[ "$stats1" = "$stats2" ]
rm -f $outfile2
done
done
# ECC-1362
# ---------

View File

@ -75,6 +75,23 @@ set -e
[ $status -ne 0 ]
grep -q "Trying to encode a negative value of -1 for key of type unsigned" $temp
# ECC-1605: Out-of-bounds value for signed keys
# ----------------------------------------------------
if [ $ECCODES_ON_WINDOWS -eq 0 ]; then
input=$ECCODES_SAMPLES_PATH/GRIB2.tmpl
set +e
${tools_dir}/grib_set -s forecastTime=2147483648 $input $outfile 2>$temp
status=$?
set -e
[ $status -ne 0 ]
grep -q "Trying to encode value of 2147483648 but the allowable range is -2147483647 to 2147483647" $temp
set +e
${tools_dir}/grib_set -s forecastTime=-2147483650 $input $outfile 2>$temp
status=$?
set -e
[ $status -ne 0 ]
fi
# GRIB-941: encoding of GRIB2 angles
# -----------------------------------

View File

@ -20,6 +20,10 @@ typedef enum ResourceType
static void usage(const char* prog)
{
printf("Usage: %s [-s | -d] resource_path out_file\n", prog);
printf(" -s Extract a resource from the samples directory\n");
printf(" -d Extract a resource from the definitions directory\n");
printf("\n");
printf(" E.g., %s -s GRIB2.tmpl my.grib2\n", prog);
exit(1);
}

View File

@ -126,7 +126,6 @@ static int process_file(const char* filename)
GRIB_CHECK(grib_get_long(h, "angleSubdivisions", &angleSubdivisions), 0);
Assert(angleSubdivisions > 0);
angular_tolerance = 1.0/angleSubdivisions;
printf(" angular_tolerance=%g\n",angular_tolerance);
if (N <= 0) {
error(filename, msg_num, "N should be > 0\n", N);