A set of reusable functions to integrate IPC into an existing simulation.
Various new features :rocket: and some bug fixes :bug:.
FindSIMD.cmake
to now add support for Neon (Arm/Apple Silicon SIMD instruction set) in #58
FindSIMD.cmake
from Project CHRONO under BSD 3-Clause "New" or "Revised" License.dtype
to EE collisions to keep track of the distance type for mollified constraintsCollisionConstraint::minimum_distance
to CollisionConstraint::dmin
additive_ccd
algorithm, utilize our distance function rather than porting the Codim-IPC versions, return true
if the initial distance is less than the minimum distance, and add an explicit tmax
parameter rather than relying on the initial value of toi
.project_to_psd
and project_to_pd
in #67NonlinearTrajectory
virtual class. By default the maximum distance between the trajectory and a linearized version is computed using interval arithmetic. That is $\max_{t \in [0, 1]} \Vert p(\mathrm{lerp}(t_0, t_1, t)) - \mathrm{lerp}(p(t_0), p(t_1), t) \Vert_2 \leq \sup(\Vert p([t_0, t_1]) - \mathrm{lerp}(p(t_0), p(t_1), [0, 1]) \Vert_2)$ where $p$ is the point's position over time, $\mathrm{lerp}(a, b, t) := (b - a) t + a$ and $\sup([a,b]):=b$. Because this can be an overly conservative approximation, users can override the NonlinearTrajectory::max_distance_from_linear
function to compute the max directly in closed form, if known.igl::predicate::segment_segment_intersect
in #74Full Changelog: https://github.com/ipc-sim/ipc-toolkit/compare/v1.1.1...v1.2.0
==
and <
functions to be order independent
Full Changelog: https://github.com/ipc-sim/ipc-toolkit/compare/v1.1.0...v1.1.1
Large refactoring to make the code more object-oriented rather than passing objects to functions. Other changes include the friction potential now being a function of velocity, bug fixes, and a new tutorial.
construct_collision_candidates(..., candidates)
-> candidates.build(...)
is_step_collision_free(candidates, ...)
-> candidates.is_step_collision_free(...)
compute_collision_free_stepsize(candidates, ...)
-> candidates.compute_collision_free_stepsize(...)
compute_barrier_potential*(constraints, ...)
-> constraints.compute_potential*(...)
compute_shape_derivative(constraints, ...)
-> constraints.compute_shape_derivative(...)
compute_minimum_distance(constraints, ...)
-> constraints.compute_minimum_distance(...)
construct_friction_constraint_set(..., friction_constraints)
-> friction_constraints.build(...)
compute_friction_*(..., friction_constraints, ...)
-> friction_constraints.compute_*(...)
CollisionStencil
parent class to Candidates
, CollisionConstraints
, and FrictionConstraints
.Constraints
to CollisionConstraints
V
, E
, F
with vertices
/positions
, edges
, faces
*_index
-> *_id
inflation_radius = min_distance / 1.99
with inflation_radius = min_distance / 2
and use rounding mode to conservativly inflate AABBsCollisionConstraints::use_convergent_formulation
and are_shape_derivatives_enabled
must now be accessed through getter and setter functionsV0
and V1
were passed and U = V1-V0
. This limited the integration scheme to implicit Euler. Upstream this means you need to multiply the potential by 1/(dv/dx)
to get the correct friction force.
project_hessian_to_psd
to false
in #301e-4
in #43Full Changelog: https://github.com/ipc-sim/ipc-toolkit/compare/v1.0.0...v1.1.0
This is the first official release. 🎉
This is a stable release of the toolkit prior to refactoring the code and making updates to the API.
Full Changelog: https://github.com/ipc-sim/ipc-toolkit/commits/v1.0.0