You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
As the ODE module of Gridap is expanding, its structure is becoming a little messy and redundant. @santiagobadia and I propose the following changes
ODETools
Replace the current OperatorType subtypes by the more generic types MassLinear and ConstantMass. These traits are not fully taken advantage of for now.
Reindex the jacobians (from zero) to match the time derivative order.
Unify the signature of allocate_residual and allocate_jacobian to accept AbstractVectors and Tuple{Vararg{AbstractVector}}.
Enable allocate_cache to accept supplementary arguments (in the main signature).
Bring all the butcher tableaus under an AbstractButcherTableau{T} type, where T is a trait used to tell whether the tableau corresponds to an explicit / (diagonally) implicit / implicit-explicit scheme.
For now, Runge-Kutta schemes will only be defined for mass-linear operators, and will throw a @notimplemented for general transient FE operators.
TransientFESpaces
Replace Transient(...)RKFEOperatorFromWeakForm by a more general TransientMassLinearFEOperatorFromWeakForm to represent ODE operators that are linear in $\partial_{t} u$. This type was originally created for Runge-Kutta schemes, but it represents a much more general setting that can benefit many other schemes.
Mass-linear operators are currently represented by lhs and rhs, which are somewhat confusing names. These are currently defined through writing the ODE in the form $\mathrm{LHS}(t, u) \partial_{t} u = \mathrm{RHS}(t, u)$, so in fact LHS corresponds to the existing jacobian_t (the mass matrix). The new representation for these operators is $$\mathrm{mass}(\partial_{t} u, v) + \mathrm{res}(t, u, v) = 0,$$ where $\mathrm{mass}$ is linear with respect to $\partial_{t} u$ and $\mathrm{res}$ does not depend on $\partial_{t} u$.
IMEX Runge-Kutta schemes need a special TransientFEOperator as we need to split the residual in two or three parts:
General case: $\mathrm{res_implicit}(t, u, v) + \mathrm{res_explicit}(t, u, v) = 0$.
Semilinear case: $\mathrm{mass}(\partial_{t} u, v) + \mathrm{res_implicit}(t, u, v) + \mathrm{res_explicit}(t, u, v) = 0$, where here again the mass bilinear form is linear with respect to $\partial_{t} u$, and neither residual can depend on $\partial_{t} u$.
The text was updated successfully, but these errors were encountered:
As the ODE module of Gridap is expanding, its structure is becoming a little messy and redundant. @santiagobadia and I propose the following changes
ODETools
OperatorType
subtypes by the more generic typesMassLinear
andConstantMass
. These traits are not fully taken advantage of for now.allocate_residual
andallocate_jacobian
to acceptAbstractVectors
andTuple{Vararg{AbstractVector}}
.allocate_cache
to accept supplementary arguments (in the main signature).AbstractButcherTableau{T}
type, whereT
is a trait used to tell whether the tableau corresponds to an explicit / (diagonally) implicit / implicit-explicit scheme.@notimplemented
for general transient FE operators.TransientFESpaces
Transient(...)RKFEOperatorFromWeakForm
by a more generalTransientMassLinearFEOperatorFromWeakForm
to represent ODE operators that are linear inlhs
andrhs
, which are somewhat confusing names. These are currently defined through writing the ODE in the formLHS
corresponds to the existingjacobian_t
(the mass matrix). The new representation for these operators isTransientFEOperator
as we need to split the residual in two or three parts:The text was updated successfully, but these errors were encountered: