27 class FiniteElementState;
47 virtual mfem::Vector
evaluate(
double time,
double dt,
const std::vector<ConstFieldPtr>& fields,
48 bool update_fields =
true)
const = 0;
61 virtual std::unique_ptr<mfem::HypreParMatrix>
jacobian(
double time,
double dt,
62 const std::vector<ConstFieldPtr>& fields,
int direction,
63 bool update_fields =
true,
64 bool fresh_derivative =
true)
const = 0;
78 virtual std::unique_ptr<mfem::HypreParMatrix>
jacobian_tilde(
double time,
double dt,
79 const std::vector<ConstFieldPtr>& fields,
int direction,
80 bool update_fields =
true,
81 bool fresh_derivative =
true)
const
83 return jacobian(time, dt, fields, direction, update_fields, fresh_derivative);
100 const mfem::Vector& multipliers,
int direction,
bool update_fields =
true,
101 bool fresh_derivative =
true)
const
103 std::unique_ptr<mfem::HypreParMatrix> jac =
104 jacobian_tilde(time, dt, fields, direction, update_fields, fresh_derivative);
105 mfem::Vector y(jac->Width());
107 SLIC_ERROR_ROOT_IF(jac->Height() != multipliers.Size(),
"Incompatible matrix and vector sizes.");
108 jac->MultTranspose(multipliers, y);
126 [[maybe_unused]]
double time, [[maybe_unused]]
double dt,
127 [[maybe_unused]]
const std::vector<ConstFieldPtr>& fields, [[maybe_unused]]
const mfem::Vector& multipliers,
128 [[maybe_unused]]
int direction, [[maybe_unused]]
bool update_fields =
true,
129 [[maybe_unused]]
bool fresh_derivative =
true)
const
131 SLIC_ERROR_ROOT(std::format(
"Base class must override residual_contribution_jacobian before usage"));
132 std::unique_ptr<mfem::HypreParMatrix> res_contr_jacobian =
nullptr;
133 return res_contr_jacobian;
137 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, bool update_fields=true, bool fresh_derivative=true) const
Virtual interface for computing constraint Jacobian_tilde from a vector of smith::FiniteElementState*...
virtual mfem::Vector residual_contribution(double time, double dt, const std::vector< ConstFieldPtr > &fields, const mfem::Vector &multipliers, int direction, bool update_fields=true, bool fresh_derivative=true) const
Virtual interface for computing residual contribution Jacobian_tilde^(Transpose) * (Lagrange multipli...
virtual mfem::Vector evaluate(double time, double dt, const std::vector< ConstFieldPtr > &fields, bool update_fields=true) 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 > jacobian(double time, double dt, const std::vector< ConstFieldPtr > &fields, int direction, bool update_fields=true, bool fresh_derivative=true) const =0
Virtual interface for computing constraint Jacobian from a vector of smith::FiniteElementState*.
std::string name() const
name
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, [[maybe_unused]] bool update_fields=true, [[maybe_unused]] bool fresh_derivative=true) const
Virtual interface for computing residual contribution Jacobian_tilde^(Transpose) * (Lagrange multipli...
virtual ~Constraint()
destructor
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.