Source code for yonderdrake.time.formulations
"""Public choices for fractional time formulation."""
from __future__ import annotations
from dataclasses import dataclass
[docs]
@dataclass(frozen=True, slots=True)
class Recurrence:
"""Eliminated constant-memory recurrence formulation."""
interpolant: str = "linear"
def __post_init__(self) -> None:
if self.interpolant != "linear":
raise ValueError("only interpolant='linear' is supported")
[docs]
@dataclass(frozen=True, slots=True)
class AuxiliaryODE:
"""Monolithic physical-plus-mode auxiliary-ODE formulation."""
scheme: str = "backward_euler"
coupling: str = "monolithic"
def __post_init__(self) -> None:
if self.scheme not in {"backward_euler", "trapezoidal"}:
raise ValueError(
"scheme must be 'backward_euler' or 'trapezoidal'"
)
if self.coupling != "monolithic":
raise ValueError("only coupling='monolithic' is supported")