7 #include "gretl/data_store.hpp"
13 const std::vector<FieldState>& inputs,
const TimeInfo& time_info)
16 std::vector<gretl::StateBase> all_states{shape_disp};
17 all_states.insert(all_states.end(), inputs.begin(), inputs.end());
19 shape_disp.create_state<double,
double>(all_states, gretl::defaultInitializeZeroDual<double, double>{});
22 [time_info, objective_ptr](
const gretl::UpstreamStates& upstreams, gretl::DownstreamState& downstream) {
24 std::vector<FEFieldPtr> Inputs;
25 for (
size_t i = 1; i < upstreams.size(); ++i) {
26 Inputs.push_back(upstreams[i].get<FEFieldPtr>());
31 value.set_vjp([time_info, objective_ptr](gretl::UpstreamStates& upstreams,
const gretl::DownstreamState& downstream) {
33 std::vector<FEFieldPtr> fields;
34 for (
size_t i = 1; i < upstreams.size(); ++i) {
35 fields.push_back(upstreams[i].get<FEFieldPtr>());
38 const double downstream_dual = downstream.get_dual<double,
double>();
43 for (
size_t i = 1; i < upstreams.size(); ++i) {
49 return value.finalize();
virtual double evaluate(TimeInfo time_info, ConstFieldPtr shape_disp, const std::vector< ConstFieldPtr > &fields) const =0
Virtual interface for computing the scale value for the objective/constrant, given a vector of smith:...
virtual mfem::Vector mesh_coordinate_gradient(TimeInfo time_info, ConstFieldPtr shape_disp, const std::vector< ConstFieldPtr > &fields) const =0
Virtual interface for computing objective gradient with respect to the mesh coordinates.
virtual mfem::Vector gradient(TimeInfo time_info, ConstFieldPtr shape_disp, const std::vector< ConstFieldPtr > &fields, size_t field_ordinal) const =0
Virtual interface for computing objective gradient from a vector of smith::FiniteElementState*.
Methods for evaluating objective functions and tracking these operations on the gretl graph with a cu...
Accelerator functionality.
gretl::State< double, double > DoubleState
typedef
std::shared_ptr< FiniteElementState > FEFieldPtr
typedef
gretl::State< FEFieldPtr, FEDualPtr > FieldState
typedef
DoubleState evaluateObjective(const ScalarObjective &objective, const FieldState &shape_disp, const std::vector< FieldState > &inputs, const TimeInfo &time_info)
Evaluates a DoubleState using a provided ScalarObjective reference, and the input arguments to that o...
std::shared_ptr< FiniteElementDual > FEDualPtr
typedef
std::vector< const FiniteElementState * > getConstFieldPointers(const std::vector< FieldState > &states, const std::vector< FieldState > ¶ms={})
Get a vector of ConstFieldPtr or ConstDualFieldPtr from a vector of FieldState.
struct storing time and timestep information