Template Class ExecutionComposition

Nested Relationships

Nested Types

Class Documentation

template<typename FieldVectorType, typename GlobalVectorType>
class ExecutionComposition

Private shared execution composition used by steady and IDA adapters.

Applications only interact with the adapters and semantic FieldIds.

Public Types

using Model = SemiDiscreteModel<FieldVectorType>
using Builder = SemidiscreteBuilder<FieldVectorType>
using Operator = dealii::LinearOperator<GlobalVectorType>
using LocalOperator = typename Model::Operator
using SaddlePointMetadata = typename Model::SaddlePointMetadata
using MatrixType = typename Model::MatrixOperator::Matrix
using BlockMatrixType = ImmersXLA::MPI::BlockSparseMatrix

Public Functions

inline explicit ExecutionComposition(const MPI_Comm communicator)
template<typename Problem, typename ...Arguments>
inline auto add(const Problem &problem, const std::string &prefix, const Arguments&... arguments)
inline GlobalVectorType make_state() const
inline void reinit(GlobalVectorType &state) const
inline FieldVectorType &field(GlobalVectorType &state, const FieldId id) const
inline const FieldVectorType &field(const GlobalVectorType &state, const FieldId id) const
inline void evaluate_residual(const double time, const GlobalVectorType &state, const GlobalVectorType *state_dot, GlobalVectorType &residual, const TermSelection &terms = {}) const
inline Operator jacobian(const double time, const GlobalVectorType &state, const GlobalVectorType *state_dot, const double alpha, const TermSelection &terms = {}) const
inline std::shared_ptr<Snapshot> make_snapshot(const double time, const GlobalVectorType &state, const GlobalVectorType &state_dot) const
inline std::shared_ptr<StateSnapshot> make_snapshot(const double time, const GlobalVectorType &state) const
inline Operator jacobian(const EvaluationContext<FieldVectorType> &context, const double alpha) const
inline dealii::IndexSet differential_components() const
inline dealii::IndexSet differential_components(const GlobalVectorType &state) const
inline unsigned int n_fields() const
inline const Model &model() const
inline std::optional<typename Model::MatrixOperator> state_matrix_operator(const GlobalVectorType &state, const FieldId row, const FieldId column, const double time = 0.) const
inline const StateLayout &state_layout() const
inline MPI_Comm communicator() const
inline bool can_materialize_matrix(const GlobalVectorType &state, const GlobalVectorType *state_dot = nullptr, const double alpha = 0.) const
inline BlockMatrixType block_matrix(const GlobalVectorType &state, const GlobalVectorType *state_dot = nullptr, const double alpha = 0.) const

Materialize the current linearization as a true block sparse matrix.

inline void monolithic_matrix(const BlockMatrixType &block_matrix, MatrixType &result) const

Convert a block matrix to its concatenated monolithic sparse matrix.

inline MatrixType monolithic_matrix(const BlockMatrixType &block_matrix) const
inline MatrixType monolithic_matrix(const GlobalVectorType &state, const GlobalVectorType *state_dot = nullptr, const double alpha = 0.) const
inline void monolithic_matrix(const GlobalVectorType &state, MatrixType &result, const GlobalVectorType *state_dot = nullptr, const double alpha = 0.) const
inline bool has_local_preconditioner(const FieldId field) const
inline bool has_complete_local_preconditioners() const
inline const std::vector<SaddlePointMetadata> &saddle_points() const
inline LocalOperator schur_operator(const FieldId multiplier, const GlobalVectorType &state, const GlobalVectorType *state_dot = nullptr, const double alpha = 0.) const

Build S ~= sum_i B_i P_i^-1 B_i^T on a semantic multiplier field.

inline Operator schur_preconditioner(const FieldId multiplier, const GlobalVectorType &state, const GlobalVectorType *state_dot = nullptr, const double alpha = 0., const unsigned int maximum_iterations = 1000, const double tolerance = 1.e-10) const

Build a global block-factorization preconditioner using a Schur solve.

inline Operator augmented_lagrangian_operator(const GlobalVectorType &state, const double gamma = 1.e1, const GlobalVectorType *state_dot = nullptr, const double alpha = 0.) const

Apply A_gamma = A + gamma B^T W^-1 B on the coupled state.

inline BlockMatrixType augmented_lagrangian_matrix(const GlobalVectorType &state, const double gamma = 1.e1, const GlobalVectorType *state_dot = nullptr, const double alpha = 0.) const

Materialize the matrix A + gamma B^T diag(W^{-1}) B.

The multiplier metric is intentionally reduced to its diagonal here: this is the matrix-based counterpart of the lumped metric used by the first AL implementation. Each participant pair is assembled, so augmentation cross terms are retained when a relation has multiple primal fields.

inline Operator augmented_lagrangian_preconditioner(const GlobalVectorType &state, const double gamma = 1.e1, const GlobalVectorType *state_dot = nullptr, const double alpha = 0.) const

Apply an augmented-Lagrangian block factorization.

inline std::optional<LocalOperator> local_preconditioner(const FieldId field, const GlobalVectorType &state) const
inline std::optional<LocalOperator> local_preconditioner(const FieldId field, const GlobalVectorType &state, const EvaluationContext<FieldVectorType> &context, const double alpha) const
inline LocalOperator multiplier_preconditioner(const FieldId multiplier, const GlobalVectorType &state, const EvaluationContext<FieldVectorType> &context) const

Build the metric preconditioner used by a multiplier Schur solve.

inline Operator block_diagonal_preconditioner(const GlobalVectorType &state, const GlobalVectorType *state_dot = nullptr, const double alpha = 0.) const

Assemble registered local inverses into a global block diagonal map.

inline Operator block_triangular_preconditioner(const GlobalVectorType &state, const bool lower = true, const GlobalVectorType *state_dot = nullptr, const double alpha = 0.) const

Apply a lower or upper approximate block substitution.

inline FieldVectorType pack(const GlobalVectorType &global) const

Pack execution blocks into the concatenated field ordering.

inline void unpack(const FieldVectorType &flat, GlobalVectorType &global) const

Unpack a concatenated vector into execution blocks.

struct Snapshot

Public Functions

inline Snapshot(const ExecutionComposition &composition, const double time, const GlobalVectorType &state, const GlobalVectorType &state_dot)

Public Members

GlobalVectorType state_storage
GlobalVectorType derivative_storage
StateView<FieldVectorType> state_view
StateView<FieldVectorType> derivative_view
EvaluationContext<FieldVectorType> context
struct StateSnapshot

Public Functions

inline StateSnapshot(const ExecutionComposition &composition, const double time, const GlobalVectorType &state)

Public Members

GlobalVectorType state_storage
StateView<FieldVectorType> state_view
EvaluationContext<FieldVectorType> context