Loading NetCDF datafiles

Underlying assumptions

  • There are NetCDF files in a folder (in what follows, argument foldername) that contain (time-dependent) scalar/velocity fields on a regular (in space and time) grid spanning the whole globe in longitude/latitude units (in particular, you do not care about the poles).
  • Each file corresponds to a single-time snapshot of this field (and spacing between times are constant).
  • The filenames are orded ascending with time.
  • Each file has a field with longitude and latitude coordinates as a 1d array (uniform accross files).
  • You have a regular expression (e.g. r"^nrt_global_allsat_phy_l4_([0-9][0-9][0-9][0-9])([0-9][0-9])([0-9][0-9])_.*.nc$") that matches only the files you want (in what follows, argument schema).
Warning

The package assumes that the velocities are given at grid points as opposed to, for example, at the center of each grid cell. This assumption may not hold exactly for a velocity field used, including those shown in examples here.

Loading velocity fields

OceanTools.read_ocean_velocitiesFunction
read_ocean_velocities(foldername,start_date,end_date,boundary_t, [schema,LL_space=nothing,UR_space=nothing,...])

Reads velocity fields in a space-time window. Uses the whole globe if LL_space and UR_space are nothing. Else the rectangle of points will include spatially include the rectangle bounded by LL_space and UR_space.

The first timestep loaded is the first one in the folder foldername matching the regular expression schema where the "time" variable (converted to Int via kwarg date_to_int) is not less than start_date.

Spacing of "time" is assumed to be 1 day, change date_to_int if your data is different (note that the units of the velocity fields in the files were assumed to be in m/s and are converted to deg/day, you will have to manually rescale if spacing is not 1 day ). The range will include end_date

Supports 360-periodic longitude in the sense that LL_space[1] can larger than UR_space[1]. However, it cannot extend by more than one period. If you are very close to one period use the whole globe to avoid issues.

Other keyword arguments are:

  • lon_label with default "longitude"
  • lat_label with default "latitude"
  • remove_nan with default true, sets missing values to 0 instead of NaN
  • array_ctor with default SharedArray{Float64} to specify underlying storage to use.
  • date_to_int with default _daysSince1950 is the method for converting DateTime objects to Int
  • filename_match_to_date (if not equal to nothing) converts the match of the regex schema with the filename into the (integer) date

of the contents.

Returns (res_full, Ust1, (Lon, Lat, times)) where res_full is the corresponding ItpMetdata object and Ust1 is a slice of the x-component at the first timestep without NaNs removed

source

Loading scalar fields

OceanTools.read_ocean_scalarsFunction
read_ocean_scalars(args...; scalar_field_name="ssh", kwargs...)

Reads in a scalar field, otherwise like read_ocean_velocities. Resulting data field in the ItpMetdata is a 1-tuple with an array (of type given by array_ctor).

source

In each case, the end result contains an ItpMetadata that contains all of the data needed for interpolation.

Pseudocode example

p, _ = read_ocean_velocities(arguments)
uv_trilinear(u,p,t)