@@ -69,6 +69,7 @@ NCDatasets.jl and then convert to some kind of dimensional container.
69
69
lat = Array(ds["clat"]);
70
70
```
71
71
If `lon, lat` are given, `grid` is automatically assumed `CoordinateSpace()`.
72
+ * `celldim = nothing`: only used for `CoordinateSpace`: when `
72
73
"""
73
74
function ncread (path:: Union{String, Vector{String}} , args... ; kwargs... )
74
75
NCDataset (path) do ds
83
84
function ncread (ds:: NCDatasets.AbstractDataset , var, selection = nothing ;
84
85
name = var2name (var), grid = nothing , lon = nothing , lat = nothing ,
85
86
)
86
- if lon isa Vector && lat isa Vector
87
+ if lon isa AbstractVector && lat isa AbstractVector
87
88
gridtype = CoordinateSpace ()
88
89
elseif isnothing (grid)
89
90
gridtype = autodetect_grid (ds)
@@ -222,7 +223,12 @@ function ncread_unstructured(
222
223
lonlat, original_grid_dim = load_coordinate_points (ds)
223
224
else
224
225
lonlat = [SVector (lo, la) for (lo, la) in zip (lon, lat)]
225
- original_grid_dim = intersect (NCDatasets. dimnames (cfvar), POSSIBLE_CELL_NAMES)[1 ]
226
+ possible_name = intersect (NCDatasets. dimnames (cfvar), POSSIBLE_CELL_NAMES)
227
+ if isempty (possible_name)
228
+ error (" Name of dimension of cell coordinates not recognized,
229
+ augment `POSSIBLE_CELL_NAMES`" )
230
+ end
231
+ original_grid_dim = possible_name[1 ]
226
232
end
227
233
228
234
alldims = Any[NCDatasets. dimnames (cfvar)... ]
@@ -271,12 +277,8 @@ function ncread_unstructured(
271
277
return ClimArray (X; name = Symbol (name), attrib)
272
278
end
273
279
274
- function has_unstructured_key (ds)
275
- any (x -> haskey (ds. dim, x), POSSIBLE_CELL_NAMES) ||
276
- haskey (ds, " lon" ) || haskey (ds, " clon" )
277
- end
278
-
279
280
function load_coordinate_points (ds)
281
+ @show keys (ds)
280
282
if haskey (ds, " reduced_points" )
281
283
lonlat = reduced_grid_to_points (ds[" lat" ], ds[" reduced_points" ])
282
284
original_grid_dim = " rgrid" # Specific to CDO Gaussian grid
@@ -288,32 +290,30 @@ function load_coordinate_points(ds)
288
290
lats = ds[" lat" ] |> Matrix |> vec
289
291
original_grid_dim = (" lon" , " lat" )
290
292
lonlat = [SVector (lo, la) for (lo, la) in zip (lons, lats)]
291
- elseif has_unstructured_key (ds)
292
- if haskey (ds, " lon" )
293
- lons = ds[" lon" ] |> Vector
294
- lats = ds[" lat" ] |> Vector
295
- original_grid_dim = NCDatasets. dimnames (ds[" lon" ])[1 ]
296
- elseif haskey (ds, " clon" )
297
- lons = ds[" clon" ] |> Vector
298
- lats = ds[" clat" ] |> Vector
299
- original_grid_dim = NCDatasets. dimnames (ds[" clon" ])[1 ]
300
- else
301
- error ("""
302
- We didn't find key `"lon"` or `"clon"` that represents the longitude of each
303
- polygon in a non-orthogonal grid.
304
- """ )
305
- end
306
- lonlat = [SVector (lo, la) for (lo, la) in zip (lons, lats)]
293
+ elseif haskey (ds, " lon" )
294
+ lons = ds[" lon" ] |> Vector
295
+ lats = ds[" lat" ] |> Vector
296
+ original_grid_dim = NCDatasets. dimnames (ds[" lon" ])[1 ]
297
+ elseif haskey (ds, " clon" )
298
+ lons = ds[" clon" ] |> Vector
299
+ lats = ds[" clat" ] |> Vector
300
+ original_grid_dim = NCDatasets. dimnames (ds[" clon" ])[1 ]
301
+ elseif haskey (ds, " longitude" )
302
+ lons = ds[" longitude" ] |> Vector
303
+ lats = ds[" latitude" ] |> Vector
304
+ original_grid_dim = NCDatasets. dimnames (ds[" longitude" ])[1 ]
307
305
else
308
306
error ("""
309
307
We couldn't automatically identify the lon/lat values of cell centers.
310
308
Please provide explicitly keywords `lon, lat` in `ncread`.
311
309
""" )
312
310
end
311
+ lonlat = [SVector (lo, la) for (lo, la) in zip (lons, lats)]
313
312
lonlat = convert_to_degrees (lonlat, ds)
314
313
return lonlat, original_grid_dim
315
314
end
316
315
316
+ " Assumes a gaussian grid information for efficient storage"
317
317
function reduced_grid_to_points (lat, reduced_points)
318
318
lonlat = SVector{2 , Float32}[]
319
319
for (i, θ) in enumerate (lat)
0 commit comments