EarthSciMLBase.CoupledSystemType

A system for composing together other systems using the couple function.

  • systems: Model components to be composed together

  • domaininfo: Initial and boundary conditions and other domain information

  • pdefunctions: A vector of functions where each function takes as an argument the resulting PDESystem after DomainInfo is added to this system, and returns a transformed PDESystem.

  • ops: A vector of operators to run during simulations.
EarthSciMLBase.DomainInfoType

Domain information for a ModelingToolkit.jl PDESystem. It can be used with the + operator to add initial and boundary conditions and coordinate transforms to a ModelingToolkit.jl ODESystem or Catalyst.jl ReactionSystem.

NOTE: The independent variable (usually time) must be first in the list of initial and boundary conditions.

  • partial_derivative_funcs: Function that returns spatial derivatives of the partially-independent variables, optionally performing a coordinate transformation first.

    Current function options in this package are:

    • partialderivatives_δxyδlonlat: Returns partial derivatives after transforming any variables named lat and lon

    from degrees to cartesian meters, assuming a spherical Earth.

    Other packages may implement additional functions. They are encouraged to use function names starting with partialderivatives_.

  • icbc: The sets of initial and/or boundary conditions.
EarthSciMLBase.OperatorType

Operators are objects that modify the current state of a Simulator system. Each operator should be define a run function with the signature:

`EarthSciMLBase.run!(op::Operator, s::Simulator, time)`

which modifies the s.du field in place. It should also implement:

`EarthSciMLBase.timestep(op::Operator)`

which returns the timestep length for the operator.

The Operator may also optionally implement the initialize! and finalize! methods, which will be run before the simulation starts and after it ends, respectively, if they are defined.

`EarthSciMLBase.initialize!(op::Operator, s::Simulator)`
`EarthSciMLBase.finalize!(op::Operator, s::Simulator)`
EarthSciMLBase.SimulatorType

Specify a simulator for large-scale model runs. Δs represent the grid cell spacing in each dimension; for example Δs = [0.1, 0.1, 1] would represent a grid with 0.1 spacing in the first two dimensions and 1 in the third, in whatever units the grid is natively in. The grid spacings should be given in the same order as the partial independent variables are in the provided DomainInfo. algorithm should be a DifferentialEquations.jl ODE solver. kwargs are passed on to the DifferentialEquations.jl integrator initialization.

  • sys::CoupledSystem: The system to be integrated

  • sys_mtk::ModelingToolkit.ODESystem: The ModelingToolkit version of the system

  • domaininfo::DomainInfo: Information about the spatiotemporal simulation domain

  • u::Array{T, 4} where T: The system state

  • du::Array{T, 4} where T: The system state derivative

  • p::Vector: The system parameter values

  • u_init::Vector: The initial values of the system state variables

  • pvidx::Vector{Int64}: The indexes of the partial independent variables in the system parameter value vector

  • grid::Any: The discretized values of the partial independent variables

  • obs_fs::Any: Functions to get the current values of the observed variables with input arguments of time and the partial independent variables

  • obs_fs_idx::Dict{Symbolics.Num, Int64}: Indexes for the obs_fs functions

  • tf_fs::Any: Functions to get the current values of the coordinate transforms with input arguments of time and the partial independent variables

  • integrators::Vector: Internal integrators

  • IIchunks::Vector{SubArray{CartesianIndex{3}, 1, Base.ReshapedArray{CartesianIndex{3}, 1, CartesianIndices{3, Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}, Base.OneTo{Int64}}}, Tuple{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64}, Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64}}}, Tuple{UnitRange{Int64}}, false}}: Internal chunks of grid cells for each integrator

EarthSciMLBase.constBCType

Construct constant boundary conditions equal to the value specified by val.

  • val: The value of the constant boundary conditions.

  • partialdomains: The partial domains, e.g. [x ∈ Interval(x_min, x_max), y ∈ Interval(y_min, y_max)].

EarthSciMLBase.constICType

Construct constant initial conditions equal to the value specified by val.

  • val: The value of the constant initial conditions.

  • indepdomain: The independent domain, e.g. t ∈ Interval(t_min, t_max).

EarthSciMLBase.periodicBCType

Construct periodic boundary conditions for the given partialdomains. Periodic boundary conditions are defined as when the value at one side of the domain is set equal to the value at the other side, so that the domain "wraps around" from one side to the other.

  • partialdomains: The partial domains, e.g. [x ∈ Interval(x_min, x_max), y ∈ Interval(y_min, y_max)].
EarthSciMLBase.zerogradBCType

Construct zero-gradient boundary conditions for the given partialdomains.

  • partialdomains: The partial domains, e.g. [x ∈ Interval(x_min, x_max), y ∈ Interval(y_min, y_max)].
EarthSciMLBase.ConstantWindMethod
ConstantWind(t, vals)

Construct a constant wind velocity model component with the given wind speed(s), which should include units. For example, ConstantWind(t, 1u"m/s", 2u"m/s").

EarthSciMLBase.MeanWindMethod
MeanWind(t, domain)

A model component that represents the mean wind velocity, where pvars is the partial dependent variables for the domain.

EarthSciMLBase.add_dimsMethod
add_dims(expression, vars, dims)
add_dims(equation, vars, dims)

Add the given dimensions to each variable in vars in the given expression or equation. Each variable in vars must be unidimensional, i.e. defined like @variables u(t) rather than @variables u(..).

Example:

using EarthSciMLBase, ModelingToolkit

@parameters x y k t
@variables u(t) q(t)
exp = 2u + 3k*q + 1
EarthSciMLBase.add_dims(exp, [u, q], [x, y, t])

# output
1 + 2u(x, y, t) + 3k*q(x, y, t)
EarthSciMLBase.add_scopeMethod
add_scope(sys, v, iv)

Add a system scope to a variable name, for example so that x in system sys1 becomes sys1₊x. iv is the independent variable.

EarthSciMLBase.coupleMethod
couple(systems...) -> CoupledSystem

Couple multiple ModelingToolkit systems together.

The systems that are arguments to this system can be of type ModelingToolkit.AbstractSystem, CoupledSystem, DomainInfo, or any type T that has a method couple(::CoupledSystem, ::T)::CoupledSystem or a method couple(::T, ::CoupledSystem)::CoupledSystem defined for it.

EarthSciMLBase.dimsMethod
dims(
    icbc::EarthSciMLBase.ICcomponent
) -> Vector{Symbolics.Num}

Returns the dimensions of the independent and partial domains associated with these initial or boundary conditions.

EarthSciMLBase.domainsMethod
domains(icbc::EarthSciMLBase.ICcomponent) -> Vector

Returns the domains associated with these initial or boundary conditions.

EarthSciMLBase.get_dvMethod

Return the dependent variable, which is the first argument of the term, unless the term is a time derivative, in which case the dependent variable is the argument of the time derivative.

EarthSciMLBase.graphMethod

Create a graph from a CoupledSystem using the MetaGraphsNext package.

EarthSciMLBase.gridMethod
grid(d, Δs)

Return the ranges representing the discretization of the partial independent variables for this domain, based on the discretization intervals given in Δs

EarthSciMLBase.icbcMethod
icbc(di, states)

Return a vector of equations that define the initial and boundary conditions for the given state variables.

EarthSciMLBase.ivarMethod
ivar(di::DomainInfo) -> Any

Return the independent variable associated with these initial and boundary conditions.

EarthSciMLBase.observed_expressionMethod
observed_expression(sys, x; extra_eqs)

Return an expression for the observed value of a variable x after substituting in the constants observed values of other variables. extra_eqs is a list of additional equations to use in the substitution.

EarthSciMLBase.observed_functionMethod
observed_function(sys, x, coords; extra_eqs)

Return a function to for the observed value of a variable x based on the input arguments in coords. extra_eqs is a list of additional equations to use to determine the value of x.

EarthSciMLBase.operator_composeFunction
operator_compose(a, b)
operator_compose(a, b, translate)

Compose to systems of equations together by adding the right-hand side terms together of equations that have matching left-hand sides. The left hand sides of two equations will be considered matching if:

  1. They are both time derivatives of the same variable.
  2. The first one is a time derivative of a variable and the second one is the variable itself.
  3. There is an entry in the optional translate dictionary that maps the dependent variable in the first system to the dependent variable in the second system, e.g. Dict(sys1.sys.x => sys2.sys.y).
  4. There is an entry in the optional translate dictionary that maps the dependent variable in the first system to the dependent variable in the second system, with a conversion factor, e.g. Dict(sys1.sys.x => sys2.sys.y => 6).
EarthSciMLBase.param_to_varMethod

Replace the parameter p in the system sys with a new variable that has the same name, units, and description as p.

param_to_var(sys, ps)

This can be useful to replace a parameter that does not change in time in a model component with one specified by another system that does change in time (or space). For example, the code below specifies a first-order loss equation, and then changes the temperature (which determines the loss rate) with a temperature value that varies in time. ```

EarthSciMLBase.partialderivative_transformsMethod
partialderivative_transforms(di::DomainInfo) -> Vector{Any}

Return transform factor to multiply each partial derivative operator by, for example to convert from degrees to meters.

EarthSciMLBase.partialderivatives_δxyδlonlatMethod
partialderivatives_δxyδlonlat(pvars; default_lat)

Return partial derivative operator transform factors corresponding for the given partial-independent variables after converting variables named lon and lat from degrees to x and y meters, assuming they represent longitude and latitude on a spherical Earth.

EarthSciMLBase.pvarsMethod
pvars(di::DomainInfo) -> Any

Return the partial independent variables associated with these initial and boundary conditions.

EarthSciMLBase.register_couplingMethod
register_coupling(f, a, b)

Register a coupling function for two systems.

In the get_mtk method of CoupledSystem, the function f is called to make any edits needed to the two systems before they are composed together, and also to return a ConnectorSystem that represents the coupling of the two systems.

The function f should take as two ODESystems and return a ConnectorSystem, i.e. f(a::ODESystem, b::ODESystem)::ConnectorSystem.

EarthSciMLBase.steplengthMethod
steplength(timesteps)

Return the time step length common to all of the given timesteps. Throw an error if not all timesteps are the same length.

EarthSciMLBase.timestepsMethod
timesteps(tsteps)

Return the time points during which integration should be stopped to run the operators.

EarthSciMLBase.utypeMethod
utype(_)

Return the data type of the state variables for this domain, based on the data types of the boundary conditions domain intervals.