PolyFEM
Loading...
Searching...
No Matches
polyfem::solver::InflatedPeriodicShapeVariableToSimulation Class Referencefinal

Regenerate periodic meshes from [cell width, inflator parameters] and map shape derivatives back to design variables. More...

#include <InflatedPeriodicShapeVariableToSimulation.hpp>

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

Public Member Functions

 InflatedPeriodicShapeVariableToSimulation (std::vector< std::shared_ptr< varform::DifferentiableVarForm > > varforms, std::vector< std::shared_ptr< DiffCache > > diff_caches, CompositeParametrization parametrization, const json &settings, const io::ResourceIO &resources)
 
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 &variables) override
 Update forward simulation varforms from optimization variables.
 
void update_state_variables (const Eigen::VectorXd &variables, Eigen::VectorXd &state_variables) const override
 Update varform variables from optimization variables.
 
Eigen::VectorXd compute_adjoint_term (const Eigen::VectorXd &variables) 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 &variables) const override
 Apply parametrization jacobian to compute the gradient w.r.t.
 
- Public Member Functions inherited from polyfem::solver::VariableToSimulation
virtual ~VariableToSimulation ()=default
 

Private Attributes

std::vector< std::shared_ptr< varform::DifferentiableVarForm > > varforms_
 
std::vector< std::shared_ptr< DiffCache > > diff_caches_
 
CompositeParametrization parametrization_
 
int dimension_
 
std::filesystem::path wire_
 
std::string work_directory_
 
json meshing_
 
inflator::Options options_
 
int generation_ = 0
 
Eigen::VectorXd initial_
 
Eigen::VectorXd last_parameters_
 
Eigen::VectorXd periodic_parameters_
 
Eigen::MatrixXd shape_jacobian_
 Rows are design parameters; columns are interleaved physical vertex coordinates.
 
Eigen::MatrixXd periodic_jacobian_
 Rows are design parameters; columns are periodic coordinates followed by the cell matrix.
 
std::unique_ptr< PeriodicMeshToMesh > periodic_map_
 

Detailed Description

Regenerate periodic meshes from [cell width, inflator parameters] and map shape derivatives back to design variables.

Definition at line 11 of file InflatedPeriodicShapeVariableToSimulation.hpp.

Constructor & Destructor Documentation

◆ InflatedPeriodicShapeVariableToSimulation()

polyfem::solver::InflatedPeriodicShapeVariableToSimulation::InflatedPeriodicShapeVariableToSimulation ( std::vector< std::shared_ptr< varform::DifferentiableVarForm > >  varforms,
std::vector< std::shared_ptr< DiffCache > >  diff_caches,
CompositeParametrization  parametrization,
const json &  settings,
const io::ResourceIO &  resources 
)

Definition at line 15 of file InflatedPeriodicShapeVariableToSimulation.cpp.

References dimension_, initial_, polyfem::log_and_throw_adjoint_error(), polyfem::io::ResourceIO::materialize(), meshing_, options_, varforms_, wire_, and work_directory_.

Here is the call graph for this function:

Member Function Documentation

◆ affects_varform()

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

Return true if current var2sim maps to target varform.

Implements polyfem::solver::VariableToSimulation.

Definition at line 75 of file InflatedPeriodicShapeVariableToSimulation.cpp.

References varforms_.

◆ apply_parametrization_jacobian()

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

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

Here is the call graph for this function:

◆ compute_adjoint_term()

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

References polyfem::solver::CompositeParametrization::apply_jacobian(), diff_caches_, polyfem::solver::AdjointTools::dJ_periodic_shape_adjoint_term(), polyfem::get_adjoint_mat(), initial_, parametrization_, periodic_jacobian_, periodic_map_, periodic_parameters_, and varforms_.

Here is the call graph for this function:

◆ inverse_dof()

int polyfem::solver::InflatedPeriodicShapeVariableToSimulation::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 227 of file InflatedPeriodicShapeVariableToSimulation.cpp.

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

Here is the call graph for this function:

◆ inverse_eval()

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

References initial_, polyfem::solver::CompositeParametrization::inverse_eval(), and parametrization_.

Here is the call graph for this function:

◆ name()

std::string polyfem::solver::InflatedPeriodicShapeVariableToSimulation::name ( ) const
inlineoverridevirtual

◆ parameter_type()

ParameterType polyfem::solver::InflatedPeriodicShapeVariableToSimulation::parameter_type ( ) const
inlineoverridevirtual

◆ update()

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

Update forward simulation varforms from optimization variables.

Parameters
[in]xOptimization variables.

Implements polyfem::solver::VariableToSimulation.

Definition at line 80 of file InflatedPeriodicShapeVariableToSimulation.cpp.

References polyfem::adjoint_logger(), diff_caches_, dimension_, polyfem::solver::CompositeParametrization::eval(), polyfem::utils::flatten(), generation_, initial_, last_parameters_, polyfem::log_and_throw_adjoint_error(), options_, parametrization_, periodic_jacobian_, periodic_map_, periodic_parameters_, shape_jacobian_, varforms_, wire_, work_directory_, and polyfem::io::MshWriter::write().

Here is the call graph for this function:

◆ update_state_variables()

void polyfem::solver::InflatedPeriodicShapeVariableToSimulation::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 202 of file InflatedPeriodicShapeVariableToSimulation.cpp.

References polyfem::log_and_throw_adjoint_error().

Here is the call graph for this function:

Member Data Documentation

◆ diff_caches_

std::vector<std::shared_ptr<DiffCache> > polyfem::solver::InflatedPeriodicShapeVariableToSimulation::diff_caches_
private

Definition at line 31 of file InflatedPeriodicShapeVariableToSimulation.hpp.

Referenced by compute_adjoint_term(), and update().

◆ dimension_

int polyfem::solver::InflatedPeriodicShapeVariableToSimulation::dimension_
private

◆ generation_

int polyfem::solver::InflatedPeriodicShapeVariableToSimulation::generation_ = 0
private

Definition at line 38 of file InflatedPeriodicShapeVariableToSimulation.hpp.

Referenced by update().

◆ initial_

Eigen::VectorXd polyfem::solver::InflatedPeriodicShapeVariableToSimulation::initial_
private

◆ last_parameters_

Eigen::VectorXd polyfem::solver::InflatedPeriodicShapeVariableToSimulation::last_parameters_
private

Definition at line 40 of file InflatedPeriodicShapeVariableToSimulation.hpp.

Referenced by update().

◆ meshing_

json polyfem::solver::InflatedPeriodicShapeVariableToSimulation::meshing_
private

◆ options_

inflator::Options polyfem::solver::InflatedPeriodicShapeVariableToSimulation::options_
private

◆ parametrization_

CompositeParametrization polyfem::solver::InflatedPeriodicShapeVariableToSimulation::parametrization_
private

◆ periodic_jacobian_

Eigen::MatrixXd polyfem::solver::InflatedPeriodicShapeVariableToSimulation::periodic_jacobian_
private

Rows are design parameters; columns are periodic coordinates followed by the cell matrix.

Definition at line 45 of file InflatedPeriodicShapeVariableToSimulation.hpp.

Referenced by compute_adjoint_term(), and update().

◆ periodic_map_

std::unique_ptr<PeriodicMeshToMesh> polyfem::solver::InflatedPeriodicShapeVariableToSimulation::periodic_map_
private

Definition at line 46 of file InflatedPeriodicShapeVariableToSimulation.hpp.

Referenced by compute_adjoint_term(), and update().

◆ periodic_parameters_

Eigen::VectorXd polyfem::solver::InflatedPeriodicShapeVariableToSimulation::periodic_parameters_
private

Definition at line 41 of file InflatedPeriodicShapeVariableToSimulation.hpp.

Referenced by compute_adjoint_term(), and update().

◆ shape_jacobian_

Eigen::MatrixXd polyfem::solver::InflatedPeriodicShapeVariableToSimulation::shape_jacobian_
private

Rows are design parameters; columns are interleaved physical vertex coordinates.

Definition at line 43 of file InflatedPeriodicShapeVariableToSimulation.hpp.

Referenced by apply_parametrization_jacobian(), and update().

◆ varforms_

std::vector<std::shared_ptr<varform::DifferentiableVarForm> > polyfem::solver::InflatedPeriodicShapeVariableToSimulation::varforms_
private

◆ wire_

std::filesystem::path polyfem::solver::InflatedPeriodicShapeVariableToSimulation::wire_
private

◆ work_directory_

std::string polyfem::solver::InflatedPeriodicShapeVariableToSimulation::work_directory_
private

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