27 class FiniteElementState;
46 virtual mfem::Vector
evaluate(
double time,
double dt,
const std::vector<ConstFieldPtr>& fields)
const = 0;
56 virtual std::unique_ptr<mfem::HypreParMatrix>
jacobian(
double time,
double dt,
57 const std::vector<ConstFieldPtr>& fields,
58 int direction)
const = 0;
69 virtual std::unique_ptr<mfem::HypreParMatrix>
jacobian_tilde(
double time,
double dt,
70 const std::vector<ConstFieldPtr>& fields,
73 return jacobian(time, dt, fields, direction);
87 const mfem::Vector& multipliers,
int direction)
const
89 std::unique_ptr<mfem::HypreParMatrix> jac =
jacobian_tilde(time, dt, fields, direction);
90 mfem::Vector y(jac->Width());
92 SLIC_ERROR_ROOT_IF(jac->Height() != multipliers.Size(),
"Incompatible matrix and vector sizes.");
93 jac->MultTranspose(multipliers, y);
108 [[maybe_unused]]
double time, [[maybe_unused]]
double dt,
109 [[maybe_unused]]
const std::vector<ConstFieldPtr>& fields, [[maybe_unused]]
const mfem::Vector& multipliers,
110 [[maybe_unused]]
int direction)
const
112 SLIC_ERROR_ROOT(axom::fmt::format(
"Base class must override residual_contribution_jacobian before usage"));
113 std::unique_ptr<mfem::HypreParMatrix> res_contr_jacobian =
nullptr;
114 return res_contr_jacobian;
118 std::string
name()
const {
return name_; }
Abstract constraint class.
virtual std::unique_ptr< mfem::HypreParMatrix > jacobian_tilde(double time, double dt, const std::vector< ConstFieldPtr > &fields, int direction) const
Virtual interface for computing constraint Jacobian_tilde from a vector of smith::FiniteElementState*...
virtual mfem::Vector evaluate(double time, double dt, const std::vector< ConstFieldPtr > &fields) const =0
Virtual interface for computing the constraint, given a vector of smith::FiniteElementState*.
Constraint(const std::string &name="constraint")
base constructor takes the name of the physics
virtual std::unique_ptr< mfem::HypreParMatrix > residual_contribution_jacobian([[maybe_unused]] double time, [[maybe_unused]] double dt, [[maybe_unused]] const std::vector< ConstFieldPtr > &fields, [[maybe_unused]] const mfem::Vector &multipliers, [[maybe_unused]] int direction) const
Virtual interface for computing Jacobians of the residual contribution from a vector of smith::Finite...
std::string name() const
name
virtual mfem::Vector residual_contribution(double time, double dt, const std::vector< ConstFieldPtr > &fields, const mfem::Vector &multipliers, int direction) const
Virtual interface for computing residual contribution Jacobian_tilde^T multiplier from a vector of sm...
virtual ~Constraint()
destructor
virtual std::unique_ptr< mfem::HypreParMatrix > jacobian(double time, double dt, const std::vector< ConstFieldPtr > &fields, int direction) const =0
Virtual interface for computing constraint Jacobian from a vector of smith::FiniteElementState*.
A file defining some enums and structs that are used by the different physics modules.
Defines common types and helper functions for using the residual and scalar_objective classes.
Accelerator functionality.