PolyFEM
Loading...
Searching...
No Matches
polyfem::solver::ElasticVariableToSimulation Class Reference

Maps to lame coefficients per element. More...

#include <ElasticVariableToSimulation.hpp>

Inheritance diagram for polyfem::solver::ElasticVariableToSimulation:
[legend]
Collaboration diagram for polyfem::solver::ElasticVariableToSimulation:
[legend]

Public Types

using StatePtrs = std::vector< std::shared_ptr< legacy::State > >
 
using DiffCachePtrs = std::vector< std::shared_ptr< DiffCache > >
 

Public Member Functions

 ElasticVariableToSimulation (StatePtrs states, DiffCachePtrs diff_caches, CompositeParametrization parametrizations)
 Construct ElasticVariableToSimulation.
 
std::string name () const override
 
ParameterType parameter_type () const override
 
bool affect_state (const legacy::State &target) const override
 Return true if current var2sim maps to target state.
 
void update (const Eigen::VectorXd &x) override
 Update forward simulation states from optimization variables.
 
void update_state_variables (const Eigen::VectorXd &x, Eigen::VectorXd &state_variables) const override
 Update state variables from optimization variables.
 
Eigen::VectorXd compute_adjoint_term (const Eigen::VectorXd &x) const override
 Compute adjoint contribution of objective gradient.
 
int inverse_dof () const override
 Compute optimization variables dof.
 
Eigen::VectorXd inverse_eval () const override
 Compute optimization variables from forward simulation legacy::State.
 
Eigen::VectorXd apply_parametrization_jacobian (const Eigen::VectorXd &term, const Eigen::VectorXd &x) const override
 Apply parametrization jacobian to compute the gradient w.r.t.
 
- Public Member Functions inherited from polyfem::solver::VariableToSimulation
virtual ~VariableToSimulation ()=default
 

Private Member Functions

int para_out_dof () const
 

Private Attributes

int elem_num_
 
StatePtrs states_
 
DiffCachePtrs diff_caches_
 
CompositeParametrization parametrization_
 

Detailed Description

Maps to lame coefficients per element.

Ex. If a tet mesh has 100 tets, we maps 100 pairs of lame coefficients to their respective tets.

Expect optimization variables with layout: [ lambda for all elements ...] [ mu for all elements ... ]

Definition at line 20 of file ElasticVariableToSimulation.hpp.

Member Typedef Documentation

◆ DiffCachePtrs

Definition at line 24 of file ElasticVariableToSimulation.hpp.

◆ StatePtrs

Definition at line 23 of file ElasticVariableToSimulation.hpp.

Constructor & Destructor Documentation

◆ ElasticVariableToSimulation()

polyfem::solver::ElasticVariableToSimulation::ElasticVariableToSimulation ( StatePtrs  states,
DiffCachePtrs  diff_caches,
CompositeParametrization  parametrizations 
)

Construct ElasticVariableToSimulation.

Parameters
[in]statesShared ptr to all forward sim states.
[in]diff_cachesShared ptr to all diff caches.
[in]parametrizationsParametrizations.
Exceptions
std::runtime_errorThrow if input is invalid.

Definition at line 17 of file ElasticVariableToSimulation.cpp.

References diff_caches_, elem_num_, polyfem::log_and_throw_adjoint_error(), and states_.

Here is the call graph for this function:

Member Function Documentation

◆ affect_state()

bool polyfem::solver::ElasticVariableToSimulation::affect_state ( const legacy::State target) const
overridevirtual

Return true if current var2sim maps to target state.

Implements polyfem::solver::VariableToSimulation.

Definition at line 47 of file ElasticVariableToSimulation.cpp.

References states_.

◆ apply_parametrization_jacobian()

Eigen::VectorXd polyfem::solver::ElasticVariableToSimulation::apply_parametrization_jacobian ( const Eigen::VectorXd &  term,
const Eigen::VectorXd &  x 
) const
overridevirtual

Apply parametrization jacobian to compute the gradient w.r.t.

to optimization variables.

Parameters
termGradient w.r.t. to full inherent dof (Ex. all vertices for shape var2sim)
xOptimization variables.

Implements polyfem::solver::VariableToSimulation.

Definition at line 156 of file ElasticVariableToSimulation.cpp.

References polyfem::solver::CompositeParametrization::apply_jacobian(), elem_num_, parametrization_, and x.

Here is the call graph for this function:

◆ compute_adjoint_term()

Eigen::VectorXd polyfem::solver::ElasticVariableToSimulation::compute_adjoint_term ( const Eigen::VectorXd &  x) const
overridevirtual

Compute adjoint contribution of objective gradient.

See arXiv:2205.13643.

Let objective function be J and optimization variable be x. This method computes all adjoint related terms in dJ/dx. For static case (E.q. 11), it's the second term. For dynamic case (E.q. 15), it's everything except ∂qJ.

Parameters
x[in]Optimization variables.
Returns
Adjoint contribution of objective gradient.

Implements polyfem::solver::VariableToSimulation.

Definition at line 76 of file ElasticVariableToSimulation.cpp.

References polyfem::solver::CompositeParametrization::apply_jacobian(), diff_caches_, polyfem::solver::AdjointTools::dJ_material_static_adjoint_term(), polyfem::solver::AdjointTools::dJ_material_transient_adjoint_term(), polyfem::get_adjoint_mat(), para_out_dof(), parametrization_, states_, and x.

Here is the call graph for this function:

◆ inverse_dof()

int polyfem::solver::ElasticVariableToSimulation::inverse_dof ( ) const
overridevirtual

Compute optimization variables dof.

Returns
Optimization variables dof.
Exceptions
std::runtime_errorThrow if not implemented.

Implements polyfem::solver::VariableToSimulation.

Definition at line 110 of file ElasticVariableToSimulation.cpp.

References polyfem::solver::CompositeParametrization::inverse_size(), para_out_dof(), and parametrization_.

Here is the call graph for this function:

◆ inverse_eval()

Eigen::VectorXd polyfem::solver::ElasticVariableToSimulation::inverse_eval ( ) const
overridevirtual

Compute optimization variables from forward simulation legacy::State.

Returns
Optimization variables.
Exceptions
std::runtime_errorThrow if not implemented.

Implements polyfem::solver::VariableToSimulation.

Definition at line 115 of file ElasticVariableToSimulation.cpp.

References polyfem::mesh::Mesh::cell_barycenter(), elem_num_, polyfem::mesh::Mesh2D::face_barycenter(), polyfem::solver::CompositeParametrization::inverse_eval(), polyfem::log_and_throw_adjoint_error(), name(), para_out_dof(), parametrization_, and states_.

Here is the call graph for this function:

◆ name()

std::string polyfem::solver::ElasticVariableToSimulation::name ( ) const
overridevirtual

Implements polyfem::solver::VariableToSimulation.

Definition at line 37 of file ElasticVariableToSimulation.cpp.

Referenced by inverse_eval().

Here is the caller graph for this function:

◆ para_out_dof()

int polyfem::solver::ElasticVariableToSimulation::para_out_dof ( ) const
private

Definition at line 162 of file ElasticVariableToSimulation.cpp.

References elem_num_.

Referenced by compute_adjoint_term(), inverse_dof(), inverse_eval(), update(), and update_state_variables().

Here is the caller graph for this function:

◆ parameter_type()

ParameterType polyfem::solver::ElasticVariableToSimulation::parameter_type ( ) const
overridevirtual

◆ update()

void polyfem::solver::ElasticVariableToSimulation::update ( const Eigen::VectorXd &  x)
overridevirtual

Update forward simulation states from optimization variables.

Parameters
[in]xOptimization variables.

Implements polyfem::solver::VariableToSimulation.

Definition at line 59 of file ElasticVariableToSimulation.cpp.

References elem_num_, polyfem::solver::CompositeParametrization::eval(), para_out_dof(), parametrization_, states_, x, and y.

Here is the call graph for this function:

◆ update_state_variables()

void polyfem::solver::ElasticVariableToSimulation::update_state_variables ( const Eigen::VectorXd &  x,
Eigen::VectorXd &  state_variables 
) const
overridevirtual

Update state variables from optimization variables.

Compared to update() this method update abstract state variables instead of writing directly to state.

Parameters
[in]xOptimization variables.
[out]state_variablesAbstract state variables update dst.

Implements polyfem::solver::VariableToSimulation.

Definition at line 70 of file ElasticVariableToSimulation.cpp.

References polyfem::solver::CompositeParametrization::eval(), para_out_dof(), parametrization_, and x.

Here is the call graph for this function:

Member Data Documentation

◆ diff_caches_

DiffCachePtrs polyfem::solver::ElasticVariableToSimulation::diff_caches_
private

◆ elem_num_

int polyfem::solver::ElasticVariableToSimulation::elem_num_
private

◆ parametrization_

CompositeParametrization polyfem::solver::ElasticVariableToSimulation::parametrization_
private

◆ states_

StatePtrs polyfem::solver::ElasticVariableToSimulation::states_
private

The documentation for this class was generated from the following files: