Open
Description
Description
Write a module to generate the input data for FastIce from topography data. Most of the functionality is already implemented in the scripts, need to package and expose API.
The pre-processing happens in two stages:
- Extract the data from the source, e.g., BedMachine. Keep only relevant data, convert to the format supported by FastIce.
- In FastIce, load the data in a compatible format, select a subset of the data, transform, and create the object supporting sampling this data.
Step 1 should be outside the FastIce repo, and step 2 could be the part of the core library. We need to support synthetic data sources to be able to generate topography analytically.
Tasks
Data extraction (Stage 1)
- BedMachine Greenland/Antarctica - NetCDF
- Vavilov ice cap - GeoTIFF
- GLAMOS (Swiss glaciers) - GeoTIFF
Data processing (Stage 2)
- Load data for a selected region. By default, the region includes the whole data range.
- Transform the data (scale, translate, rotate)
- Compute the axis-aligned bounding-box (AABB)
- Generate the rotation matrix minimising the AABB volume
- Create the DEM sampler object returning the value at (x, y) in 3D, or (x) in 2D, and optionally the gradient vector at a point (using AD)
- For DEM data, create an SDF object returning the signed distance to the closest point on a surface, and optionally the gradient vector (using AD)
- For DEM, make a combined sampler returning the result of a binary operation between the two samplers, for example, to offset the smooth real data with a procedural noise
Synthetic data sources
- Make a collection of SDF primitives: sphere, box, etc. Each primitive should conform to the same interface as the SDF object for a real data
- Set operations: Union, Intersection, Difference
- Create an SDF object returning the distance estimate for an arbitrary smooth function
- Make a data source stochastically generating the bed topography
Extensions for distributed computing
- Each MPI rank must load only the subset of the data that is relevant to it's local subdomain