Barrier¶
Barrier functions and functionals.
Types¶
Name |
Description |
|---|---|
|
Base class for barrier functions. |
Smoothly clamped log barrier functions from [Li et al.]. |
|
Clamped log barrier with a quadratic log term from [Huang et al.]. |
|
Cubic barrier function from [Ando 2024]. |
|
Normalized barrier function from [Li et al.]. |
|
Two-stage barrier function from [Chen et al. 2025]. |
Functions¶
Name |
Description |
|---|---|
|
Evaluate the barrier function. |
|
Derivative of the barrier function. |
|
Second derivative of the barrier function. |
Compute the barrier force magnitude. |
|
Compute the gradient of the barrier force magnitude. |
|
Compute the initial barrier stiffness. |
|
Update the barrier stiffness based on the current state. |
|
Compute the semi-implicit stiffness for all collisions. |
Function Details¶
Warning
doxygenfunction: Unable to resolve function “barrier” with arguments “(const T, const T)”. Candidate function could not be parsed. Parsing error is Error when parsing function declaration. If the function has no return type: Error in declarator or parameters-and-qualifiers Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 45] template<typename T> IPC_TOOLKIT_HOST_DEVICE T barrier (const T d, const T dhat) ———————————————^ If the function has a return type: Error in declarator or parameters-and-qualifiers If pointer to member declarator: Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 47] template<typename T> IPC_TOOLKIT_HOST_DEVICE T barrier (const T d, const T dhat) ———————————————–^ If declarator-id: Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 47] template<typename T> IPC_TOOLKIT_HOST_DEVICE T barrier (const T d, const T dhat) ———————————————–^
Warning
doxygenfunction: Unable to resolve function “barrier_first_derivative” with arguments “(const T, const T)”. Candidate function could not be parsed. Parsing error is Error when parsing function declaration. If the function has no return type: Error in declarator or parameters-and-qualifiers Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 45] template<typename T> IPC_TOOLKIT_HOST_DEVICE T barrier_first_derivative (const T d, const T dhat) ———————————————^ If the function has a return type: Error in declarator or parameters-and-qualifiers If pointer to member declarator: Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 47] template<typename T> IPC_TOOLKIT_HOST_DEVICE T barrier_first_derivative (const T d, const T dhat) ———————————————–^ If declarator-id: Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 47] template<typename T> IPC_TOOLKIT_HOST_DEVICE T barrier_first_derivative (const T d, const T dhat) ———————————————–^
Warning
doxygenfunction: Unable to resolve function “barrier_second_derivative” with arguments “(const T, const T)”. Candidate function could not be parsed. Parsing error is Error when parsing function declaration. If the function has no return type: Error in declarator or parameters-and-qualifiers Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 45] template<typename T> IPC_TOOLKIT_HOST_DEVICE T barrier_second_derivative (const T d, const T dhat) ———————————————^ If the function has a return type: Error in declarator or parameters-and-qualifiers If pointer to member declarator: Invalid C++ declaration: Expected ‘::’ in pointer to member (function). [error at 47] template<typename T> IPC_TOOLKIT_HOST_DEVICE T barrier_second_derivative (const T d, const T dhat) ———————————————–^ If declarator-id: Invalid C++ declaration: Expecting “(” in parameters-and-qualifiers. [error at 47] template<typename T> IPC_TOOLKIT_HOST_DEVICE T barrier_second_derivative (const T d, const T dhat) ———————————————–^
Barrier Force Magnitude¶
-
double ipc::barrier_force_magnitude(const double distance_squared,
const Barrier& barrier, const double dhat,
const double barrier_stiffness, const double dmin = 0);¶ Compute the magnitude of the force due to a barrier.
-
VectorMax12d ipc::barrier_force_magnitude_gradient(
const double distance_squared,
Eigen::ConstRef<VectorMax12d> distance_squared_gradient,
const Barrier& barrier, const double dhat,
const double barrier_stiffness, const double dmin = 0);¶ Compute the gradient of the magnitude of the force due to a barrier.
- Parameters:¶
- const double distance_squared¶
The squared distance between elements.
- Eigen::ConstRef<VectorMax12d> distance_squared_gradient¶
The gradient of the squared distance.
- const Barrier &barrier¶
The barrier function.
- const double dhat¶
The activation distance of the barrier.
- const double barrier_stiffness¶
The stiffness of the barrier.
- const double dmin = 0¶
The minimum distance offset to the barrier.
- Returns:¶
The gradient of the force.
Adaptive Barrier Stiffness¶
-
double ipc::initial_barrier_stiffness(const double bbox_diagonal,
const Barrier& barrier, const double dhat,
const double average_mass,
Eigen::ConstRef<Eigen::VectorXd> grad_energy,
Eigen::ConstRef<Eigen::VectorXd> grad_barrier,
double& max_barrier_stiffness,
const double min_barrier_stiffness_scale = 1e11,
const double dmin = 0);¶ Compute an inital barrier stiffness using the barrier potential gradient.
- Parameters:¶
- const double bbox_diagonal¶
[in] Length of the diagonal of the bounding box of the scene.
- const Barrier &barrier¶
[in] Barrier function.
- const double dhat¶
[in] Activation distance of the barrier.
- const double average_mass¶
[in] Average mass of all bodies.
- Eigen::ConstRef<Eigen::VectorXd> grad_energy¶
[in] Gradient of the elasticity energy function.
- Eigen::ConstRef<Eigen::VectorXd> grad_barrier¶
[in] Gradient of the barrier potential.
- double &max_barrier_stiffness¶
[out] Maximum stiffness of the barrier.
- const double min_barrier_stiffness_scale = 1e11¶
[in] Scale used to premultiply the minimum barrier stiffness.
- const double dmin = 0¶
[in] Minimum distance between elements.
- Returns:¶
The initial barrier stiffness.
-
double ipc::update_barrier_stiffness(const double prev_min_distance,
const double min_distance, const double max_barrier_stiffness,
const double barrier_stiffness, const double bbox_diagonal,
const double dhat_epsilon_scale = 1e-9, const double dmin = 0);¶ Update the barrier stiffness if the distance is decreasing and less than dhat_epsilon_scale * diag.
- Parameters:¶
- const double prev_min_distance¶
[in] Previous minimum distance between elements.
- const double min_distance¶
[in] Current minimum distance between elements.
- const double max_barrier_stiffness¶
[in] Maximum stiffness of the barrier.
- const double barrier_stiffness¶
[in] Current barrier stiffness.
- const double bbox_diagonal¶
[in] Length of the diagonal of the bounding box of the scene.
- const double dhat_epsilon_scale = 1e-9¶
[in] Update if distance is less than this fraction of the diagonal.
- const double dmin = 0¶
[in] Minimum distance between elements.
- Returns:¶
The updated barrier stiffness.
Semi-Implicit Stiffness¶
-
template <typename StencilsT>
Eigen::VectorXd ipc::semi_implicit_stiffness(
const CollisionMesh& mesh,
Eigen::ConstRef<Eigen::MatrixXd> vertices,
const StencilsT& collisions,
Eigen::ConstRef<Eigen::VectorXd> vertex_masses,
const Eigen::SparseMatrix<double>& hess, const double dmin);¶ Compute the semi-implicit stiffness’s for all collisions.
Note
See [Ando 2024] for details.
- Parameters:¶
- const CollisionMesh &mesh¶
Collision mesh.
- Eigen::ConstRef<Eigen::MatrixXd> vertices¶
Vertex positions.
- const StencilsT &collisions¶
Normal collisions or collision candidates.
- Eigen::ConstRef<Eigen::VectorXd> vertex_masses¶
Lumped vertex masses.
- const Eigen::SparseMatrix<double> &hess¶
Hessian of the elasticity energy function.
- const double dmin¶
Minimum distance between elements.
- Returns:¶
The semi-implicit stiffness’s.