9#include <ipc/utils/eigen_ext.hpp>
10#include <ipc/barrier/adaptive_stiffness.hpp>
11#include <ipc/utils/world_bbox_diagonal_length.hpp>
17 const double avg_mass,
20 const bool use_adaptive_dhat,
21 const double min_distance_ratio,
22 const bool use_adaptive_barrier_stiffness,
23 const bool is_time_dependent,
24 const bool enable_shape_derivatives,
25 const ipc::BroadPhaseMethod broad_phase_method,
26 const double ccd_tolerance,
27 const int ccd_max_iterations) :
ContactForm(collision_mesh, dhat, avg_mass, use_adaptive_barrier_stiffness, is_time_dependent, enable_shape_derivatives, broad_phase_method, ccd_tolerance, ccd_max_iterations), params(dhat_, alpha_t, 0, alpha_n, 0, collision_mesh.dim() - 1), use_adaptive_dhat(use_adaptive_dhat), barrier_potential_(params)
29 params.set_adaptive_dhat_ratio(min_distance_ratio);
34 logger().error(
"Adaptive dhat is not compatible with adaptive barrier stiffness");
55 static Eigen::MatrixXd cached_displaced_surface;
56 if (cached_displaced_surface.size() == displaced_surface.size() && cached_displaced_surface == displaced_surface)
65 cached_displaced_surface = displaced_surface;
103 if (!std::isinf(curr_distance))
105 const double ratio = sqrt(curr_distance) /
dhat();
106 const auto log_level = (ratio < 1e-6) ? spdlog::level::err : ((ratio < 1e-4) ? spdlog::level::warn : spdlog::level::debug);
107 polyfem::logger().log(log_level,
"Minimum distance during solve: {}, active distance: {}, dhat: {}", sqrt(curr_distance), sqrt(curr_active_distance),
dhat());
110 if (data.iter_num == 0)
126 "updated barrier stiffness from {:g} to {:g}",
#define POLYFEM_SCOPED_TIMER(...)
spdlog::logger & logger()
Retrieves the current logger.
void log_and_throw_error(const std::string &msg)
Eigen::SparseMatrix< double, Eigen::ColMajor > StiffnessMatrix