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

#include <SurfaceTractionForms.hpp>

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

Public Member Functions

 ProxyContactForceForm (const VariableToSimulationGroup &variable_to_simulations, const State &state, const double dhat, const bool quadratic_potential, const json &args)
 
 ~ProxyContactForceForm ()=default
 
double value_unweighted_step (const int time_step, const Eigen::VectorXd &x) const override
 
Eigen::VectorXd compute_adjoint_rhs_step (const int time_step, const Eigen::VectorXd &x, const State &state) const override
 
void compute_partial_gradient_step (const int time_step, const Eigen::VectorXd &x, Eigen::VectorXd &gradv) const override
 
void solution_changed_step (const int time_step, const Eigen::VectorXd &x) override
 
- Public Member Functions inherited from polyfem::solver::StaticForm
virtual ~StaticForm ()=default
 
virtual std::string name () const override
 
Eigen::MatrixXd compute_adjoint_rhs (const Eigen::VectorXd &x, const State &state) const final override
 
void compute_partial_gradient (const Eigen::VectorXd &x, Eigen::VectorXd &gradv) const final override
 
double value_unweighted (const Eigen::VectorXd &x) const final override
 Compute the value of the form.
 
virtual Eigen::VectorXd compute_adjoint_rhs_step_prev (const int time_step, const Eigen::VectorXd &x, const State &state) const
 
virtual void solution_changed (const Eigen::VectorXd &new_x) final override
 Update cached fields upon a change in the solution.
 
virtual bool depends_on_step_prev () const final
 
 AdjointForm (const VariableToSimulationGroup &variable_to_simulations)
 
- Public Member Functions inherited from polyfem::solver::AdjointForm
 AdjointForm (const VariableToSimulationGroup &variable_to_simulations)
 
virtual ~AdjointForm ()
 
void enable_energy_print (const std::string &print_energy_keyword)
 
double value (const Eigen::VectorXd &x) const override
 Compute the value of the form multiplied with the weigth.
 
const VariableToSimulationGroupget_variable_to_simulations () const
 
virtual Eigen::MatrixXd compute_reduced_adjoint_rhs (const Eigen::VectorXd &x, const State &state) const
 
virtual void first_derivative (const Eigen::VectorXd &x, Eigen::VectorXd &gradv) const final override
 Compute the first derivative of the value wrt x multiplied with the weigth.
 
virtual void update_quantities (const double t, const Eigen::VectorXd &x) final override
 Update time-dependent fields.
 
virtual void init_lagging (const Eigen::VectorXd &x) final override
 Initialize lagged fields TODO: more than one step.
 
virtual void update_lagging (const Eigen::VectorXd &x, const int iter_num) final override
 Update lagged fields.
 
virtual void set_apply_DBC (const Eigen::VectorXd &x, bool apply_DBC) final override
 Set if the Dirichlet boundary conditions should be enforced.
 
- Public Member Functions inherited from polyfem::solver::Form
virtual ~Form ()
 
virtual void init (const Eigen::VectorXd &x)
 Initialize the form.
 
Eigen::VectorXd value_per_element (const Eigen::VectorXd &x) const
 Compute the value of the form multiplied with the weigth.
 
void second_derivative (const Eigen::VectorXd &x, StiffnessMatrix &hessian) const
 Compute the second derivative of the value wrt x multiplied with the weigth.
 
virtual bool is_step_valid (const Eigen::VectorXd &x0, const Eigen::VectorXd &x1) const
 Determine if a step from solution x0 to solution x1 is allowed.
 
virtual double max_step_size (const Eigen::VectorXd &x0, const Eigen::VectorXd &x1) const
 Determine the maximum step size allowable between the current and next solution.
 
virtual void line_search_begin (const Eigen::VectorXd &x0, const Eigen::VectorXd &x1)
 Initialize variables used during the line search.
 
virtual void line_search_end ()
 Clear variables used during the line search.
 
virtual void post_step (const polysolve::nonlinear::PostStepData &data)
 Update fields after a step in the optimization.
 
virtual int max_lagging_iterations () const
 Get the maximum number of lagging iteration allowable.
 
virtual bool uses_lagging () const
 Does this form require lagging?
 
void set_project_to_psd (bool val)
 Set project to psd.
 
bool is_project_to_psd () const
 Get if the form's second derivative is projected to psd.
 
void enable ()
 Enable the form.
 
void disable ()
 Disable the form.
 
void set_enabled (const bool enabled)
 Set if the form is enabled.
 
bool enabled () const
 Determine if the form is enabled.
 
virtual double weight () const
 Get the form's multiplicative constant weight.
 
void set_weight (const double weight)
 Set the form's multiplicative constant weight.
 
virtual bool is_step_collision_free (const Eigen::VectorXd &x0, const Eigen::VectorXd &x1) const
 Checks if the step is collision free.
 
void set_output_dir (const std::string &output_dir)
 

Protected Member Functions

void build_collision_mesh ()
 
void build_forward_collision_mesh ()
 
const ipc::Collisions & get_or_compute_collision_set (const int time_step, const Eigen::MatrixXd &displaced_surface) const
 
- Protected Member Functions inherited from polyfem::solver::AdjointForm
virtual void first_derivative_unweighted (const Eigen::VectorXd &x, Eigen::VectorXd &gradv) const final override
 Compute the first derivative of the value wrt x.
 
virtual void second_derivative_unweighted (const Eigen::VectorXd &x, StiffnessMatrix &hessian) const final override
 Compute the second derivative of the value wrt x.
 
- Protected Member Functions inherited from polyfem::solver::Form
std::string resolve_output_path (const std::string &path) const
 
virtual Eigen::VectorXd value_per_element_unweighted (const Eigen::VectorXd &x) const
 Compute the value of the form multiplied per element.
 

Protected Attributes

const Statestate_
 
std::set< int > boundary_ids_
 
std::map< int, std::set< int > > boundary_ids_to_dof_
 
Eigen::MatrixXi can_collide_cache_
 
Eigen::MatrixXd node_positions_
 
Eigen::VectorXi collision_set_indicator_
 
std::vector< std::shared_ptr< ipc::Collisions > > collision_sets_
 
ipc::CollisionMesh collision_mesh_
 
const double dhat_
 
const double dmin_ = 0
 
ipc::BroadPhaseMethod broad_phase_method_
 
Eigen::VectorXd curr_x_
 
ipc::BarrierPotential barrier_potential_
 
- Protected Attributes inherited from polyfem::solver::StaticForm
bool depends_on_step_prev_ = false
 
- Protected Attributes inherited from polyfem::solver::AdjointForm
const VariableToSimulationGroup variable_to_simulations_
 
PrintStage print_energy_ = PrintStage::Inactive
 
std::string print_energy_keyword_
 
- Protected Attributes inherited from polyfem::solver::Form
bool project_to_psd_ = false
 If true, the form's second derivative is projected to be positive semidefinite.
 
double weight_ = 1
 weight of the form (e.g., AL penalty weight or Δt²)
 
bool enabled_ = true
 If true, the form is enabled.
 
std::string output_dir_
 

Additional Inherited Members

- Protected Types inherited from polyfem::solver::AdjointForm
enum class  PrintStage { Inactive , AlreadyPrinted , ToPrint }
 

Detailed Description

Definition at line 61 of file SurfaceTractionForms.hpp.

Constructor & Destructor Documentation

◆ ProxyContactForceForm()

polyfem::solver::ProxyContactForceForm::ProxyContactForceForm ( const VariableToSimulationGroup variable_to_simulations,
const State state,
const double  dhat,
const bool  quadratic_potential,
const json args 
)

Definition at line 786 of file SurfaceTractionForms.cpp.

References polyfem::State::args, barrier_potential_, boundary_ids_, broad_phase_method_, build_collision_mesh(), collision_set_indicator_, collision_sets_, and polyfem::State::problem.

Here is the call graph for this function:

◆ ~ProxyContactForceForm()

polyfem::solver::ProxyContactForceForm::~ProxyContactForceForm ( )
default

Member Function Documentation

◆ build_collision_mesh()

void polyfem::solver::ProxyContactForceForm::build_collision_mesh ( )
protected

◆ build_forward_collision_mesh()

void polyfem::solver::ProxyContactForceForm::build_forward_collision_mesh ( )
protected

◆ compute_adjoint_rhs_step()

Eigen::VectorXd polyfem::solver::ProxyContactForceForm::compute_adjoint_rhs_step ( const int  time_step,
const Eigen::VectorXd &  x,
const State state 
) const
overridevirtual

◆ compute_partial_gradient_step()

void polyfem::solver::ProxyContactForceForm::compute_partial_gradient_step ( const int  time_step,
const Eigen::VectorXd &  x,
Eigen::VectorXd &  gradv 
) const
overridevirtual

◆ get_or_compute_collision_set()

const ipc::Collisions & polyfem::solver::ProxyContactForceForm::get_or_compute_collision_set ( const int  time_step,
const Eigen::MatrixXd &  displaced_surface 
) const
protected

Definition at line 954 of file SurfaceTractionForms.cpp.

References broad_phase_method_, collision_mesh_, collision_set_indicator_, collision_sets_, dhat_, and dmin_.

Referenced by compute_adjoint_rhs_step(), compute_partial_gradient_step(), and value_unweighted_step().

Here is the caller graph for this function:

◆ solution_changed_step()

void polyfem::solver::ProxyContactForceForm::solution_changed_step ( const int  time_step,
const Eigen::VectorXd &  x 
)
inlineoverridevirtual

Reimplemented from polyfem::solver::StaticForm.

Definition at line 75 of file SurfaceTractionForms.hpp.

References build_collision_mesh(), collision_set_indicator_, curr_x_, and x.

Here is the call graph for this function:

◆ value_unweighted_step()

double polyfem::solver::ProxyContactForceForm::value_unweighted_step ( const int  time_step,
const Eigen::VectorXd &  x 
) const
overridevirtual

Implements polyfem::solver::StaticForm.

Definition at line 965 of file SurfaceTractionForms.cpp.

References barrier_potential_, collision_mesh_, polyfem::solver::SolveData::contact_form, polyfem::State::diff_cached, get_or_compute_collision_set(), polyfem::State::solve_data, state_, polyfem::solver::SolveData::time_integrator, polyfem::solver::DiffCache::u(), and polyfem::utils::unflatten().

Here is the call graph for this function:

Member Data Documentation

◆ barrier_potential_

ipc::BarrierPotential polyfem::solver::ProxyContactForceForm::barrier_potential_
protected

◆ boundary_ids_

std::set<int> polyfem::solver::ProxyContactForceForm::boundary_ids_
protected

Definition at line 91 of file SurfaceTractionForms.hpp.

Referenced by build_collision_mesh(), and ProxyContactForceForm().

◆ boundary_ids_to_dof_

std::map<int, std::set<int> > polyfem::solver::ProxyContactForceForm::boundary_ids_to_dof_
protected

Definition at line 92 of file SurfaceTractionForms.hpp.

Referenced by build_collision_mesh().

◆ broad_phase_method_

ipc::BroadPhaseMethod polyfem::solver::ProxyContactForceForm::broad_phase_method_
protected

◆ can_collide_cache_

Eigen::MatrixXi polyfem::solver::ProxyContactForceForm::can_collide_cache_
protected

Definition at line 93 of file SurfaceTractionForms.hpp.

Referenced by build_collision_mesh().

◆ collision_mesh_

ipc::CollisionMesh polyfem::solver::ProxyContactForceForm::collision_mesh_
protected

◆ collision_set_indicator_

Eigen::VectorXi polyfem::solver::ProxyContactForceForm::collision_set_indicator_
mutableprotected

◆ collision_sets_

std::vector<std::shared_ptr<ipc::Collisions> > polyfem::solver::ProxyContactForceForm::collision_sets_
protected

Definition at line 98 of file SurfaceTractionForms.hpp.

Referenced by get_or_compute_collision_set(), and ProxyContactForceForm().

◆ curr_x_

Eigen::VectorXd polyfem::solver::ProxyContactForceForm::curr_x_
protected

Definition at line 105 of file SurfaceTractionForms.hpp.

Referenced by solution_changed_step().

◆ dhat_

const double polyfem::solver::ProxyContactForceForm::dhat_
protected

Definition at line 101 of file SurfaceTractionForms.hpp.

Referenced by get_or_compute_collision_set().

◆ dmin_

const double polyfem::solver::ProxyContactForceForm::dmin_ = 0
protected

Definition at line 102 of file SurfaceTractionForms.hpp.

Referenced by get_or_compute_collision_set().

◆ node_positions_

Eigen::MatrixXd polyfem::solver::ProxyContactForceForm::node_positions_
protected

Definition at line 95 of file SurfaceTractionForms.hpp.

Referenced by build_collision_mesh().

◆ state_

const State& polyfem::solver::ProxyContactForceForm::state_
protected

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