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

Maps one friction coefficient to the whole varform. More...

#include <FrictionVariableToSimulation.hpp>

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

Public Types

using VarFormPtrs = std::vector< std::shared_ptr< varform::DifferentiableVarForm > >
 
using DiffCachePtrs = std::vector< std::shared_ptr< DiffCache > >
 

Public Member Functions

 FrictionVariableToSimulation (VarFormPtrs varforms, DiffCachePtrs diff_caches, CompositeParametrization parametrizations)
 Construct FrictionVariableToSimulation.
 
std::string name () const override
 
ParameterType parameter_type () const override
 
bool affects_varform (const varform::DifferentiableVarForm &target) const override
 Return true if current var2sim maps to target varform.
 
void update (const Eigen::VectorXd &x) override
 Update forward simulation varforms from optimization variables.
 
void update_state_variables (const Eigen::VectorXd &x, Eigen::VectorXd &state_variables) const override
 Update varform 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 varform::DifferentiableVarForm.
 
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

VarFormPtrs varforms_
 
DiffCachePtrs diff_caches_
 
CompositeParametrization parametrization_
 

Detailed Description

Maps one friction coefficient to the whole varform.

Definition at line 14 of file FrictionVariableToSimulation.hpp.

Member Typedef Documentation

◆ DiffCachePtrs

Definition at line 18 of file FrictionVariableToSimulation.hpp.

◆ VarFormPtrs

Constructor & Destructor Documentation

◆ FrictionVariableToSimulation()

polyfem::solver::FrictionVariableToSimulation::FrictionVariableToSimulation ( VarFormPtrs  varforms,
DiffCachePtrs  diff_caches,
CompositeParametrization  parametrizations 
)

Construct FrictionVariableToSimulation.

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

Definition at line 16 of file FrictionVariableToSimulation.cpp.

References diff_caches_, polyfem::log_and_throw_adjoint_error(), and varforms_.

Here is the call graph for this function:

Member Function Documentation

◆ affects_varform()

bool polyfem::solver::FrictionVariableToSimulation::affects_varform ( const varform::DifferentiableVarForm target) const
overridevirtual

Return true if current var2sim maps to target varform.

Implements polyfem::solver::VariableToSimulation.

Definition at line 45 of file FrictionVariableToSimulation.cpp.

References varforms_.

◆ apply_parametrization_jacobian()

Eigen::VectorXd polyfem::solver::FrictionVariableToSimulation::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 113 of file FrictionVariableToSimulation.cpp.

References polyfem::log_and_throw_adjoint_error(), and name().

Here is the call graph for this function:

◆ compute_adjoint_term()

Eigen::VectorXd polyfem::solver::FrictionVariableToSimulation::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 74 of file FrictionVariableToSimulation.cpp.

References polyfem::solver::CompositeParametrization::apply_jacobian(), diff_caches_, polyfem::solver::AdjointTools::dJ_friction_transient_adjoint_term(), polyfem::get_adjoint_mat(), para_out_dof(), parametrization_, varforms_, and x.

Here is the call graph for this function:

◆ inverse_dof()

int polyfem::solver::FrictionVariableToSimulation::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 101 of file FrictionVariableToSimulation.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::FrictionVariableToSimulation::inverse_eval ( ) const
overridevirtual

Compute optimization variables from forward simulation varform::DifferentiableVarForm.

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

Implements polyfem::solver::VariableToSimulation.

Definition at line 106 of file FrictionVariableToSimulation.cpp.

References polyfem::solver::CompositeParametrization::inverse_eval(), para_out_dof(), parametrization_, varforms_, and y.

Here is the call graph for this function:

◆ name()

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

Implements polyfem::solver::VariableToSimulation.

Definition at line 35 of file FrictionVariableToSimulation.cpp.

Referenced by apply_parametrization_jacobian().

Here is the caller graph for this function:

◆ para_out_dof()

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

Definition at line 119 of file FrictionVariableToSimulation.cpp.

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::FrictionVariableToSimulation::parameter_type ( ) const
overridevirtual

◆ update()

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

Update forward simulation varforms from optimization variables.

Parameters
[in]xOptimization variables.

Implements polyfem::solver::VariableToSimulation.

Definition at line 57 of file FrictionVariableToSimulation.cpp.

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

Here is the call graph for this function:

◆ update_state_variables()

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

Update varform variables from optimization variables.

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

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

Implements polyfem::solver::VariableToSimulation.

Definition at line 68 of file FrictionVariableToSimulation.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::FrictionVariableToSimulation::diff_caches_
private

◆ parametrization_

CompositeParametrization polyfem::solver::FrictionVariableToSimulation::parametrization_
private

◆ varforms_

VarFormPtrs polyfem::solver::FrictionVariableToSimulation::varforms_
private

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