Skip to content

Commit 8d59aca

Browse files
committed
Update docs
1 parent 535bc36 commit 8d59aca

File tree

4 files changed

+12
-9
lines changed

4 files changed

+12
-9
lines changed

cmake/recipes/simple_bvh.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# BVH
1+
# BVH (https://github.com/geometryprocessing/SimpleBVH)
22
# License: MIT
33

44
if(TARGET simple_bvh::simple_bvh)
@@ -8,4 +8,4 @@ endif()
88
message(STATUS "Third-party: creating target 'simple_bvh::simple_bvh'")
99

1010
include(CPM)
11-
CPMAddPackage("gh:ipc-sim/SimpleBVH#2117898eb366647d6aacdb82860b9315fb42d6ad")
11+
CPMAddPackage("gh:geometryprocessing/SimpleBVH#e1a931337a9e07e8bd2d2e8bbdfd7e54bc850df5")

docs/source/tutorial/getting_started.rst

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -372,12 +372,12 @@ where we define the operator :math:`\setminus_r: \mathcal{P}(\mathbb{R}^2) \time
372372
373373
with :math:`r \rightarrow 0`.
374374

375-
We then define our surface discretization with a triangulated boundary mesh geometry. As in the smooth case, we can parameterize the domain across all polylines with :math:`u \in \tilde{M}` so that :math:`p(u): \tilde{M} \mapsto \mathbb{R}^3` traverses all material points, across all triangles :math:`t ∈ T` in the triangle mesh contiguously. The corresponding surface contact potential is then
375+
We then define our surface discretization with a triangulated boundary mesh geometry. As in the smooth case, we can parameterize the domain across all triangles with :math:`u \in \tilde{M}` so that :math:`p(u): \tilde{M} \mapsto \mathbb{R}^3` traverses all material points, across all triangles :math:`t ∈ T` in the triangle mesh contiguously. The corresponding surface contact potential is then
376376

377377
.. math::
378378
\frac{1}{2} \int_{u \in \tilde{M}} \max_{t \in T \backslash p(u)} b(d(p(u), t), \hat{d})~\mathrm{d} u,
379379
380-
where :math:`T \setminus p` is the set of boundary faces that do not contain the point p.
380+
where :math:`T \setminus p` is the set of boundary faces that do not contain the point :math:`p`.
381381

382382
Applying mesh vertices as nodes (and quadrature points), we numerically integrate the surface contact potential. For each nodal position :math:`x \in V` we then have a corresponding material space coordinate :math:`\bar{x} \in \bar{V}`. Piecewise linear integration of the surface barrier is then
383383

@@ -399,7 +399,9 @@ where :math:`V_{\text{int}} \subseteq V` is the subset of internal surface nodes
399399
The corresponding discrete barrier potential is then simply
400400

401401
.. math::
402-
P_s(V)= \frac{1}{2} \sum_{x \in V} w_x \Psi_s(x).
402+
P_s(V)= \frac{1}{2} \sum_{x \in V} w_x \Psi_s(x),
403+
404+
where we simplify with :math:`w_x = w_{\bar{x}}` defined appropriately, per domain, as covered above.
403405

404406
Please, see the `paper <https://arxiv.org/abs/2307.15908>`_ for more details (including the formulation for 2D curves and edge-edge contact) and evaluation.
405407

@@ -642,12 +644,13 @@ The ``Candidates`` class represents the culled set of candidate pairs and is bui
642644
mesh, vertices_t0, vertices_t1,
643645
broad_phase_method=ipctk.BroadPhaseMethod.HASH_GRID)
644646
645-
Possible values for ``broad_phase_method`` are: ``BRUTE_FORCE`` (parallel brute force culling), ``HASH_GRID`` (default), ``SPATIAL_HASH`` (implementation from the original IPC codebase), ``SWEEP_AND_TINIEST_QUEUE`` (method of :cite:t:`Belgrod2023Time`), or ``SWEEP_AND_TINIEST_QUEUE_GPU`` (requires CUDA).
647+
Possible values for ``broad_phase_method`` are: ``BRUTE_FORCE`` (parallel brute force culling), ``HASH_GRID`` (default), ``SPATIAL_HASH`` (implementation from the original IPC codebase),
648+
``BVH`` (`SimpleBVH <https://github.com/geometryprocessing/SimpleBVH>`_), ``SWEEP_AND_TINIEST_QUEUE`` (method of :cite:t:`Belgrod2023Time`), or ``SWEEP_AND_TINIEST_QUEUE_GPU`` (requires CUDA).
646649

647650
Narrow-Phase
648651
^^^^^^^^^^^^
649652

650-
The narrow-phase computes the time of impact between two primitives (e.g., a point and a triangle or two edges in 3D). To do this we utilize the Tight Inclusion CCD method of :cite:t:`Wang2021TightInclusion` for the narrow phase as it is provably conservative (i.e., never misses collisions), accurate (i.e., rarely reports false positives), and efficient.
653+
The narrow phase computes the time of impact between two primitives (e.g., a point and a triangle or two edges in 3D). To do this we utilize the Tight Inclusion CCD method of :cite:t:`Wang2021TightInclusion` for the narrow phase as it is provably conservative (i.e., never misses collisions), accurate (i.e., rarely reports false positives), and efficient.
651654

652655
The following example shows how to use the narrow phase to determine if a point is colliding with a triangle (static in this case).
653656

docs/source/tutorial/misc.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ You can also set the log level:
6666
Multi-threading
6767
---------------
6868

69-
The IPC Toolkit utilizes `TBB <https://oneapi-src.github.io/oneTBB>`_ to enable multi-threading functionality. This is enabled by default, and significantly improves performance.
69+
The IPC Toolkit utilizes `oneTBB <https://oneapi-src.github.io/oneTBB>`_ to enable multi-threading functionality. This is enabled by default, and significantly improves performance.
7070
However, with multi-threading enabled, it is expected that the results can be non-deterministic because of rounding differences when adding numbers in different orders. To make the results deterministic you can limit TBB's maximum number of threads to one. The following code shows how to do this:
7171

7272
.. md-tab-set::

docs/source/tutorial/simulation.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ While IPC cannot directly handle nonlinear finite element bases and/or curved me
130130
collision_mesh = CollisionMesh(
131131
proxy_rest_positions, proxy_edges, proxy_faces, displacement_map)
132132
133-
We can then map the displacements using ``collision_mesh.map_displacement(fe_displacements)`` or directly get the displaced proxy mesh vertices using ``collision_mesh.displace_vertices(fe_displacements)``. Similarly, we can map forces/gradients using ``collision_mesh.to_full_dof(contact_forces)`` or force jacobians/potential hessians using ``collision_mesh.to_full_dof(potential_hessian)``.
133+
We can then map the displacements using ``collision_mesh.map_displacement(fe_displacements)`` or directly get the displaced proxy mesh vertices using ``collision_mesh.displace_vertices(fe_displacements)``. Similarly, we can map forces/gradients using ``collision_mesh.to_full_dof(contact_forces)`` or force Jacobians/potential Hessians using ``collision_mesh.to_full_dof(potential_hessian)``.
134134

135135
.. warning::
136136
The function ``CollisionMesh::vertices(full_positions)`` should not be used in this case because the rest positions used to construct the ``CollisionMesh`` are not the same as the finite element mesh's rest positions. Instead, use ``CollisionMesh::displace_vertices(fe_displacements)`` where ``fe_displacements`` is already the solution of the PDE or can be computed as ``fe_displacements = fe_positions - fe_rest_positions`` from deformed and rest positions.

0 commit comments

Comments
 (0)