@@ -100,6 +100,104 @@ class DynamicZarrStoreError(ValueError):
100100
101101ZARR_TREE_STORE = "zarr_tree_store.json.gz"
102102
103+ # derived from eccodes/grib2/typeOfLevelConcept.def
104+ ECCODES_VERTICAL_LEVELS = {
105+ "abstractMultipleLevels" ,
106+ "abstractSingleLevel" ,
107+ "adiabaticCondensation" ,
108+ "atmosphere" ,
109+ "cloudBase" ,
110+ "cloudTop" ,
111+ "convectiveCondensation" ,
112+ "cumulonimbusBase" ,
113+ "cumulonimbusTop" ,
114+ "depthBelowLand" ,
115+ "depthBelowLandLayer" ,
116+ "depthBelowSea" ,
117+ "depthBelowSeaLayer" ,
118+ "entireAtmosphere" ,
119+ "entireLake" ,
120+ "entireMeltPond" ,
121+ "entireOcean" ,
122+ "eta" ,
123+ "freeConvection" ,
124+ "generalVertical" ,
125+ "generalVerticalLayer" ,
126+ "heightAboveGround" ,
127+ "heightAboveGroundLayer" ,
128+ "heightAboveSea" ,
129+ "heightAboveSeaLayer" ,
130+ "highCloudLayer" ,
131+ "hybrid" ,
132+ "hybridHeight" ,
133+ "hybridLayer" ,
134+ "hybridPressure" ,
135+ "iceBottomOnWater" ,
136+ "iceLayerAboveWaterSurface" ,
137+ "iceLayerOnWater" ,
138+ "iceLayerUnderSnowOnWater" ,
139+ "iceTopOnWater" ,
140+ "iceTopUnderSnowOnWater" ,
141+ "indefiniteSoilDepth" ,
142+ "isobaricInPa" ,
143+ "isobaricInhPa" ,
144+ "isobaricLayer" ,
145+ "isothermZero" ,
146+ "isothermal" ,
147+ "lakeBottom" ,
148+ "lowCloudLayer" ,
149+ "lowestLevelOfCloudCoverExceedance" ,
150+ "maxWind" ,
151+ "meanSea" ,
152+ "mediumCloudLayer" ,
153+ "meltPondBottom" ,
154+ "meltPondTop" ,
155+ "mixedLayerDepthByDensity" ,
156+ "mixedLayerDepthByDiffusivity" ,
157+ "mixedLayerDepthByTemperature" ,
158+ "mixedLayerDepthGeneric" ,
159+ "mixedLayerParcel" ,
160+ "mixingLayer" ,
161+ "mostUnstableParcel" ,
162+ "neutralBuoyancy" ,
163+ "nominalTop" ,
164+ "oceanModel" ,
165+ "oceanModelLayer" ,
166+ "oceanSurface" ,
167+ "oceanSurfaceToBottom" ,
168+ "potentialVorticity" ,
169+ "pressureFromGround" ,
170+ "pressureFromGroundLayer" ,
171+ "road" ,
172+ "roadLayer" ,
173+ "roof" ,
174+ "roofLayer" ,
175+ "rootZone" ,
176+ "seaBottom" ,
177+ "seaIce" ,
178+ "seaIceLayer" ,
179+ "sigma" ,
180+ "sigmaLayer" ,
181+ "snow" ,
182+ "snowLayer" ,
183+ "snowLayerOverIceOnWater" ,
184+ "snowTopOverIceOnWater" ,
185+ "soil" ,
186+ "soilLayer" ,
187+ "stratosphere" ,
188+ "surface" ,
189+ "theta" ,
190+ "thetaLayer" ,
191+ "totalSoilLayer" ,
192+ "tropopause" ,
193+ "troposphere" ,
194+ "unknown" ,
195+ "urbanCanyon" ,
196+ "wall" ,
197+ "wallLayer" ,
198+ "waterSurfaceToIsothermalOceanLayer" ,
199+ }
200+
103201
104202def repeat_steps (step_index : pd .TimedeltaIndex , to_length : int ) -> np .array :
105203 return np .tile (step_index .to_numpy (), int (np .ceil (to_length / len (step_index ))))[
@@ -612,12 +710,7 @@ def extract_dataset_chunk_index(
612710 for cname , cvar in dvar .coords .items ():
613711 if grib :
614712 # Grib data has only one level coordinate
615- cname = (
616- cname
617- if cname
618- in ("valid_time" , "time" , "step" , "latitude" , "longitude" )
619- else "level"
620- )
713+ cname = "level" if cname in ECCODES_VERTICAL_LEVELS else cname
621714
622715 if all ([dim_name in dim_idx for dim_name in cvar .dims ]):
623716 coord_index = tuple ([dim_idx [dim_name ] for dim_name in cvar .dims ])
0 commit comments