27 FieldState shape_disp,
const std::vector<FieldState>& field_states,
30 std::vector<gretl::StateBase> all_state_bases{shape_disp};
31 for (
auto& f : field_states) all_state_bases.push_back(f);
32 all_state_bases.push_back(field_for_residual_space);
36 z.set_eval([=](
const gretl::UpstreamStates& inputs, gretl::DownstreamState& output) {
39 size_t num_fields = inputs.size() - 2;
41 std::vector<ConstFieldPtr> fields(num_fields);
42 for (
size_t field_index = 0; field_index < num_fields; ++field_index) {
43 fields[field_index] = inputs[field_index + 1].get<
FEFieldPtr>().
get();
47 FEDualPtr R = std::make_shared<FiniteElementDual>(field_for_residual_space_->space(),
50 *R = weak_form->residual(time_info, shape_disp_, fields);
54 z.set_vjp([=](gretl::UpstreamStates& inputs,
const gretl::DownstreamState& output) {
60 Z_dual_state = *Z_dual;
62 size_t num_fields = inputs.size() - 2;
63 std::vector<ConstFieldPtr> fields(num_fields);
64 for (
size_t field_index = 0; field_index < num_fields; ++field_index) {
65 fields[field_index] = inputs[field_index + 1].get<
FEFieldPtr>().
get();
68 std::vector<DualFieldPtr> field_sensitivities(num_fields);
69 for (
size_t field_index = 0; field_index < num_fields; ++field_index) {
77 weak_form->vjp(time_info, shape_disp_, fields, {}, &Z_dual_state, shape_disp_sensitivity, field_sensitivities, {});
Class for encapsulating the dual vector space of a finite element space (i.e. the space of linear for...
Class for encapsulating the critical MFEM components of a primal finite element field.
Contains DirichletBoundaryConditions class for interaction with the differentiable solve interfaces.
Accelerator functionality.
constexpr T & get(variant< T0, T1 > &v)
Returns the variant member of specified type.
std::shared_ptr< FiniteElementState > FEFieldPtr
typedef
auto evaluateWeakForm(const std::shared_ptr< WeakForm > &weak_form, const TimeInfo &time_info, FieldState shape_disp, const std::vector< FieldState > &field_states, FieldState field_for_residual_space)
gretl-function implementation which evaluates the residual force (which is minus the mechanical force...
gretl::State< FEFieldPtr, FEDualPtr > FieldState
typedef
std::shared_ptr< FiniteElementDual > FEDualPtr
typedef
FiniteElementState const * ConstFieldPtr
using
#define SMITH_MARK_FUNCTION
struct storing time and timestep information
functor which takes a std::shared_ptr<FiniteElementDual>, and returns a zero-valued std::shared_ptr<F...