PolyFEM
Loading...
Searching...
No Matches
NormalAdhesionForceDerivative.cpp
Go to the documentation of this file.
2
3#include <Eigen/Core>
6#include <ipc/collisions/normal/normal_collisions.hpp>
7
8namespace polyfem::solver
9{
12 const ipc::NormalCollisions &collision_set,
13 const Eigen::MatrixXd &solution,
14 const Eigen::VectorXd &adjoint_sol,
15 Eigen::VectorXd &term)
16 {
17 // Eigen::MatrixXd U = collision_mesh_.vertices(utils::unflatten(solution, collision_mesh_.dim()));
18 // Eigen::MatrixXd X = collision_mesh_.vertices(boundary_nodes_pos_);
19 const Eigen::MatrixXd displaced_surface = form.compute_displaced_surface(solution);
20
21 StiffnessMatrix dq_h = form.collision_mesh_.to_full_dof(form.normal_adhesion_potential_.shape_derivative(collision_set, form.collision_mesh_, displaced_surface));
22 term = dq_h.transpose() * adjoint_sol;
23 }
24} // namespace polyfem::solver
static void force_shape_derivative(NormalAdhesionForm &form, const ipc::NormalCollisions &collision_set, const Eigen::MatrixXd &solution, const Eigen::VectorXd &adjoint_sol, Eigen::VectorXd &term)
Form representing the contact potential and forces.
const ipc::CollisionMesh & collision_mesh_
Collision mesh.
const ipc::NormalAdhesionPotential normal_adhesion_potential_
Eigen::MatrixXd compute_displaced_surface(const Eigen::VectorXd &x) const
Compute the displaced positions of the surface nodes.
Eigen::SparseMatrix< double, Eigen::ColMajor > StiffnessMatrix
Definition Types.hpp:24