19 #include "field_store.hpp"
20 #include "coupled_system_solver.hpp"
27 template <
typename... Args>
35 const mfem::ParFiniteElementSpace*
space =
nullptr;
42 template <std::
size_t,
typename T>
46 template <
typename Space,
typename... Tail, std::size_t... Is>
53 template <
typename Rule,
typename Space,
typename... Tail>
55 decltype(detail::time_rule_params_impl<Space, Tail...>(std::make_index_sequence<Rule::num_states>{}));
62 std::shared_ptr<CoupledSystemSolver>
solver;
78 std::string
prefix(
const std::string& name)
const
A file defining some enums and structs that are used by the different physics modules.
Accelerator functionality.
decltype(detail::time_rule_params_impl< Space, Tail... >(std::make_index_sequence< Rule::num_states >{})) TimeRuleParams
Generate a Parameters<...> type with Rule::num_states copies of Space followed by additional Tail typ...
Interface and implementations for advancing from one step to the next. Typically these are time integ...
a struct that is used in the physics modules to clarify which template arguments are user-controlled ...
Information about a dual field.
std::string name
The name of the dual field.
const mfem::ParFiniteElementSpace * space
The finite element space of the dual field.
Base struct for physics systems containing common members and helper functions.
std::vector< FieldState > parameter_fields
Optional parameter fields.
std::shared_ptr< CoupledSystemSolver > solver
The solver for the system.
std::string prefix(const std::string &name) const
Helper function to prepend the physics name to a string.
std::shared_ptr< StateAdvancer > advancer
The state advancer.
std::shared_ptr< FieldStore > field_store
Field store managing the system's fields.
std::vector< ReactionInfo > getReactionInfos() const
Metadata for dual outputs exported by this system.
const std::vector< FieldState > & getParameterFields() const
Get the list of all parameter fields.
std::string prepend_name
Optional prepended name for all fields.
T always_t
Helper: given an index and a type, always produces the type (used to repeat a type N times via pack e...
auto time_rule_params_impl(std::index_sequence< Is... >) -> Parameters< always_t< Is, Space >..., Tail... >
Implementation for TimeRuleParams: repeat Space N times, then append Tail...