@@ -69,6 +69,7 @@ NCDatasets.jl and then convert to some kind of dimensional container.
6969 lat = Array(ds["clat"]);
7070 ```
7171 If `lon, lat` are given, `grid` is automatically assumed `CoordinateSpace()`.
72+ * `celldim = nothing`: only used for `CoordinateSpace`: when `
7273"""
7374function ncread(path:: Union{String, Vector{String}} , args... ; kwargs... )
7475 NCDataset(path) do ds
8384function ncread(ds:: NCDatasets.AbstractDataset , var, selection = nothing ;
8485 name = var2name(var), grid = nothing , lon = nothing , lat = nothing ,
8586 )
86- if lon isa Vector && lat isa Vector
87+ if lon isa AbstractVector && lat isa AbstractVector
8788 gridtype = CoordinateSpace()
8889 elseif isnothing(grid)
8990 gridtype = autodetect_grid(ds)
@@ -222,7 +223,12 @@ function ncread_unstructured(
222223 lonlat, original_grid_dim = load_coordinate_points(ds)
223224 else
224225 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 ]
226232 end
227233
228234 alldims = Any[NCDatasets. dimnames(cfvar). .. ]
@@ -271,12 +277,8 @@ function ncread_unstructured(
271277 return ClimArray(X; name = Symbol(name), attrib)
272278end
273279
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-
279280function load_coordinate_points(ds)
281+ @show keys(ds)
280282 if haskey(ds, " reduced_points" )
281283 lonlat = reduced_grid_to_points(ds[" lat" ], ds[" reduced_points" ])
282284 original_grid_dim = " rgrid" # Specific to CDO Gaussian grid
@@ -288,32 +290,30 @@ function load_coordinate_points(ds)
288290 lats = ds[" lat" ] |> Matrix |> vec
289291 original_grid_dim = (" lon" , " lat" )
290292 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 ]
307305 else
308306 error("""
309307 We couldn't automatically identify the lon/lat values of cell centers.
310308 Please provide explicitly keywords `lon, lat` in `ncread`.
311309 """ )
312310 end
311+ lonlat = [SVector(lo, la) for (lo, la) in zip(lons, lats)]
313312 lonlat = convert_to_degrees(lonlat, ds)
314313 return lonlat, original_grid_dim
315314end
316315
316+ " Assumes a gaussian grid information for efficient storage"
317317function reduced_grid_to_points(lat, reduced_points)
318318 lonlat = SVector{2 , Float32}[]
319319 for (i, θ) in enumerate(lat)
0 commit comments