21 template <
typename MaterialType,
typename AlphaType,
typename AlphaDotType,
typename DerivType,
typename... ParamTypes>
24 AlphaDotType alpha_dot, DerivType deriv_u, ParamTypes&&... params)
26 if constexpr (
requires { material(t_info, alpha, alpha_dot, deriv_u, std::forward<ParamTypes>(params)...); }) {
27 return material(t_info, alpha, alpha_dot, deriv_u, std::forward<ParamTypes>(params)...);
29 return material(alpha, alpha_dot, deriv_u, std::forward<ParamTypes>(params)...);
33 template <
typename MaterialType,
typename StateType,
typename GradUType,
typename GradVType,
typename AlphaType,
34 typename... ParamTypes>
37 const GradUType& grad_u,
const GradVType& grad_v, AlphaType alpha,
38 ParamTypes&&... params)
40 return material(t_info, state, grad_u, grad_v, alpha, std::forward<ParamTypes>(params)...);
43 template <
typename MaterialType>
47 using State =
typename MaterialType::State;
52 template <
typename StateType,
typename GradUType,
typename GradVType,
typename AlphaType,
typename AlphaDotType,
53 typename... ParamTypes>
55 auto operator()(
const TimeInfo& t_info, StateType& state, GradUType grad_u, GradVType grad_v, AlphaType alpha,
56 AlphaDotType , ParamTypes&&... params)
const
59 std::forward<ParamTypes>(params)...);
78 template <
int dim,
int disp_order,
typename DispRule,
typename SolidCoupling,
typename StateSpace,
typename StateRule,
79 typename StateCoupling,
typename MaterialType>
83 const MaterialType& material,
const std::string& domain_name)
87 solid->setMaterial(solid_material, domain_name);
98 template <
int dim,
typename StateSpace,
typename StateRule,
typename StateCoupling,
int disp_order,
typename DispRule,
99 typename SolidCoupling,
typename MaterialType>
103 const MaterialType& material,
const std::string& domain_name)
105 internal_variables->addEvolution(
106 domain_name, [=](
auto t_info,
auto alpha,
auto alpha_dot,
auto u,
auto ,
auto ,
auto... params) {
112 template <
int dim,
int disp_order,
typename DispRule,
typename SolidCoupling,
typename StateSpace,
typename StateRule,
113 typename StateCoupling,
typename MaterialType>
124 const MaterialType& material,
const std::string& domain_name)
auto evaluateCoupledInternalVariableMaterial(const MaterialType &material, const TimeInfo &t_info, AlphaType alpha, AlphaDotType alpha_dot, DerivType deriv_u, ParamTypes &&... params)
Dispatch internal-variable material calls with or without explicit TimeInfo.
auto evaluateSolidInternalVariableMaterial(const MaterialType &material, const TimeInfo &t_info, StateType &state, const GradUType &grad_u, const GradVType &grad_v, AlphaType alpha, ParamTypes &&... params)
Evaluate solid/internal-variable material using TimeInfo-aware signature.
Accelerator functionality.
void setCoupledSolidMechanicsInternalVarsMaterial(std::shared_ptr< SolidMechanicsSystem< dim, disp_order, DispRule, SolidCoupling >> solid, std::shared_ptr< InternalVariableSystem< dim, StateSpace, StateRule, StateCoupling >> state, const MaterialType &material, const std::string &domain_name)
Backward-compatible alias for setCoupledSolidMechanicsInternalVariableMaterial.
requires(detail::has_time_rule_v< SelfFields >) auto buildSolidMechanicsSystem(std
Build a SolidMechanicsSystem from already-registered field packs.
void setCoupledInternalVariableMaterial(std::shared_ptr< InternalVariableSystem< dim, StateSpace, StateRule, StateCoupling >> internal_variables, std::shared_ptr< SolidMechanicsSystem< dim, disp_order, DispRule, SolidCoupling >>, const MaterialType &material, const std::string &domain_name)
Register an internal-variable evolution law using solid displacement coupling.
void setCoupledSolidMechanicsInternalVariableMaterial(std::shared_ptr< SolidMechanicsSystem< dim, disp_order, DispRule, SolidCoupling >> solid, std::shared_ptr< InternalVariableSystem< dim, StateSpace, StateRule, StateCoupling >>, const MaterialType &material, const std::string &domain_name)
Register a solid material integrand on a SolidMechanicsSystem that is coupled to an InternalVariableS...
Defines the SolidMechanicsSystem struct and its factory function.
Standalone composable system for a first-order internal variable (damage, plasticity,...
System for a single internal variable using a two-state first-order rule.
System struct for solid dynamics with configurable time integration.
struct storing time and timestep information
Adapts coupled internal-variable solids to solid-system material interface.
typename MaterialType::State State
Material state type forwarded to solid system.
double density
Material density exposed for solid residual.
auto operator()(const TimeInfo &t_info, StateType &state, GradUType grad_u, GradVType grad_v, AlphaType alpha, AlphaDotType, ParamTypes &&... params) const
Evaluate wrapped material with current internal-variable value.
MaterialType material
Wrapped constitutive model.