API reference

Simulation

FastIsostasy.SimulationType
Simulation(domain, c, solidearth, t_out)
Simulation(domain, c, solidearth, t_out, Hice)
Simulation(domain, c, solidearth, t_out, t_Hice, Hice)

Return a struct containing all the other structs needed for the forward integration of the model over domain::RegionalDomain with parameters c::PhysicalConstants and solidearth::SolidEarth. The outputs are stored at t_out::Vector{<:AbstractFloat}.

source
FastIsostasy.DiffEqOptionsType

Contains:

  • alg::ODEsolvers: the algorithm to integrate the ODE forward in time.
  • reltol: the relative error tolerance of the integrator.
source
FastIsostasy.run!Function
run!(sim::Simulation)

Solve the isostatic adjustment problem defined in sim::Simulation.

source
FastIsostasy.init_integratorFunction
init_integrator(sim::Simulation) -> Any

Initialise the integrator of sim::Simulation, which can be subsequently integrated forward in time by using step!.

source
Missing docstring.

Missing docstring for OrdinaryDiffEqTsit5.step!. Check Documenter's build log for details.

Computation domains

FastIsostasy.RegionalDomainType
RegionalDomain
RegionalDomain(W, n)
RegionalDomain(Wx, Wy, nx, ny)

Return a struct containing all information related to geometry of the domain and potentially used parallelism. To initialize one with 2*W and 2^n grid cells:

domain = RegionalDomain(W, n)

If a rectangular domain is needed, run:

domain = RegionalDomain(Wx, Wy, nx, ny)
source

Boundary conditions

FastIsostasy.BoundaryConditionsType

A struct containing the boundary conditions of the problem:

  • ice_thickness: an instance of AbstractIceThickness that defines how the ice thickness is updated.
  • viscous_displacement: a boundary condition for the viscous displacement, defined as an OffsetBC.
  • elastic_displacement: a boundary condition for the elastic displacement, defined as an OffsetBC.
  • sea_surface_perturbation: a boundary condition for the sea surface perturbation, defined as an OffsetBC.
source
FastIsostasy.apply_bc!Function
apply_bc!(H, t, it::TimeInterpolatedIceThickness)

Update the ice thickness H at time t using the method defined in it.

source
apply_bc!(X, bc::OffsetBC)

Apply the boundary condition bc to the matrix X in-place.

source

Ice thickness

FastIsostasy.TimeInterpolatedIceThicknessType

A struct to update the ice thickness based on time interpolation. Contains:

  • t_vec: a vector of time points at which the ice thickness is defined.
  • H_vec: a vector of ice thickness values corresponding to t_vec.
  • H_itp: a function that interpolates the ice thickness based on time.
source

Boundary condition spaces

FastIsostasy.ExtendedBCSpaceType

Singleton struct to impose boundary conditions at the edges of the extended computation domain, which naturally arises from convolutions.

source

Boundary condition rules

FastIsostasy.OffsetBCType

A boundary condition that applies an offset to the values at the boundaries of a computational domain. Contains:

  • space: the AbstractBCSpace in which the boundary condition is defined.
  • x_border: the offset value to be applied at the boundaries.
  • W: a weight matrix to apply the boundary condition according to some ÀbstractBCRule.
source
FastIsostasy.DistanceWeightedBCType

Impose a Dirichlet-like boundary condition at the borders of the computational domain, weighted by the distance from the center of the domain.

source

Sea level

Barystatic sea level (BSL)

FastIsostasy.ConstantBSLType

A mutable struct containing:

  • ref: an instance of ReferenceBSL.
  • z: the BSL, considered constant in time.
  • A: the ocean surface area, considered constant in time.

Assume that the BSL is constant in time.

source
FastIsostasy.ConstantOceanSurfaceBSLType

A mutable struct containing:

  • ref: an instance of ReferenceBSL.
  • z: the BSL at current time step.
  • A: the ocean surface area, considered constant in time.

Assume that the ocean surface is constant in time and that the BSL evolves only according to the changes in ice volume covered by the RegionalDomain.

source
FastIsostasy.PiecewiseConstantBSLType

A mutable struct containing:

  • ref: an instance of ReferenceBSL.
  • z: the BSL at current time step.
  • A: the ocean surface at current time step.

Assume that the ocean surface evolves in time according to a piecewise constant function of the BSL, which evolves in time according to the changes in ice volume covered by the RegionalDomain.

source
FastIsostasy.ImposedBSLType

A mutable struct containing:

  • ref: an instance of ReferenceBSL.
  • z: the BSL at current time step.
  • t_vec: the time vector.
  • z_vec: the BSL values corresponding to the time vector.
  • z_itp: an interpolation of z_vec over t_vec.

Impose an externally computed BSL, which is internally computed via a time interpolation.

source
FastIsostasy.CombinedBSLType

A mutable structcontaining:

This imposes a mixture of BSL. For instance, if you simulate Antarctica over the LGM, you can impose an offline BSL contribution from the other ice sheets via bsl1. The contribution of Antarctica will be intercatively added to this via bsl2.

source

Sea surface (gravitional response)

FastIsostasy.update_dz_ss!Function
update_dz_ss!(
    sim::Simulation,
    sl::LaterallyVariableSeaSurface
)

Update the SSH perturbation dz_ss by convoluting the Green's function with the load anom.

source

Sea level load

FastIsostasy.columnanom_water!Function
columnanom_water!(
    sim::Simulation,
    ol::InteractiveSealevelLoad
)

Update the water column based on the instance of AbstractSealevelLoad.

source

Solid Earth

FastIsostasy.SolidEarthType

Return a struct containing all information related to the lateral variability of solid-Earth parameters. To initialize with values other than default, run:

domain = RegionalDomain(3000e3, 7)
lb = [100e3, 300e3]
lv = [1e19, 1e21]
solidearth = SolidEarth(domain, layer_boundaries = lb, layer_viscosities = lv)

which initializes a lithosphere of thickness $T_1 = 100 \mathrm{km}$, a viscous channel between $T_1$and $T_2 = 300 \mathrm{km}$and a viscous halfspace starting at $T_2$. This represents a homogenous case. For heterogeneous ones, simply make lb::Vector{Matrix}, lv::Vector{Matrix} such that the vector elements represent the lateral variability of each layer on the grid of domain::RegionalDomain.

source

Lithosphere

Mantle

FastIsostasy.RelaxedMantleType

Assume a relaxed mantle that deforms according to a relaxation time. This is generally less realistic and offers worse performance than a viscous mantle. It is only included for legacy purpose (e.g. comparison among solvers).

source
FastIsostasy.MaxwellMantleType

Assume a viscous mantle that deforms according to a viscosity. This is the most realistic mantle model and generally offers the best performance. It is the default mantle model used in the solver.

source
FastIsostasy.update_dudt!Function
update_dudt!(dudt, u, sim, t, earth::SolidEarth) -> Any

Update the time derivative of the viscous displacement dudt based on an Model:

  • RigidMantle: no deformation, dudt is zero.
  • RelaxedMantle with LaterallyConstantLithosphere: uses ELRA (LeMeur & Huybrechts 1996) to compute the viscous response. This also works with laterally-variable relaxation time, as proposed in Van Calcar et al., in rev.
  • RelaxedMantle with LaterallyVariableLithosphere: not implemented. This corresponds to what is described in Coulon et al. (2021) but is not yet implemented.
  • MaxwellMantle with LaterallyConstantLithosphere or RigidLithosphere: not implemented. This corresponds to what is described in Bueler et al. (2007) but is not yet implemented.
  • MaxwellMantle with LaterallyVariableLithosphere: This corresponds to the approach of Swierczek-Jereczek et al. (2024).
source

Layering

Calibration

Viscosity lumping

FastIsostasy.get_effective_viscosity_and_scalingFunction
get_effective_viscosity_and_scaling(
    domain,
    layer_viscosities,
    layer_boundaries,
    maskactive,
    lumping::TimeDomainViscosityLumping
) -> Tuple{Any, Any}

Compute equivalent viscosity for multilayer model by recursively applying the formula for a halfspace and a channel from Lingle and Clark (1975).

source

Material utilities

FastIsostasy.get_shearmodulusFunction
get_shearmodulus(youngmodulus, poissonratio) -> Any

Compute shear modulus G based on Young modulus E and Poisson ratio nu, or based on seismic velocities.

source
FastIsostasy.get_elastic_greenFunction
get_elastic_green(
    domain::RegionalDomain,
    greenintegrand_function,
    quad_support,
    quad_coeffs
) -> Matrix{T} where T<:AbstractFloat

Integrate load response over field by using 2D quadrature with specified support points and associated coefficients.

source
FastIsostasy.get_flexural_lengthscaleFunction
get_flexural_lengthscale(
    litho_rigidity,
    rho_uppermantle,
    g
) -> Any

Compute the flexural length scale, based on Coulon et al. (2021), Eq. in text after Eq. 3. The flexural length scale will be on the order of 100km.

Arguments

  • litho_rigidity: Lithospheric rigidity
  • rho_uppermantle: Density of the upper mantle
  • g: Gravitational acceleration

Returns

  • L_w: The calculated flexural length scale
source
Missing docstring.

Missing docstring for calc_viscous_green. Check Documenter's build log for details.

Input/Output (I/O)

FastIsostasy.load_datasetFunction
load_dataset(
    name::String;
    kwargs...
) -> Union{Nothing, Tuple{Any, Any, Any}}

Return the dims::Tuple{Vararg{Vector}}, the field<:Array and the interpolator corresponding to a data set defined by a unique name::String. For instance:

(lon180, lat, t), Hice, Hice_itp = load_dataset("ICE6G_D")

Following options are available for parameter fields:

  • "ICE6GD": ice loading history from ICE6GD.
  • "Wiens2022": viscosity field from (Wiens et al. 2022)
  • "Lithothickness_Pan2022": lithospheric thickness field from (Pan et al. 2022)
  • "Viscosity_Pan2022": viscosity field from (Pan et al. 2022)

Following options are available for model results:

  • "Spada2011"
  • "LatychevGaussian"
  • "LatychevICE6G"
source
FastIsostasy.NativeOutputType

Return a mutable struct containing the native output which will be updated over the simulation.

Initialization example:

nout = NativeOutput(vars = [:u, :ue, :b, :dz_ss, :H_ice, :H_water, :u_x, :u_y],
    t = collect(0:1f3:10f3))
source

Makie utilities