PhysicsBasedAnimationToolkit 0.0.10
Cross-platform C++20 library of algorithms and data structures commonly used in computer graphics research on physically-based simulation.
Loading...
Searching...
No Matches
Integrator.cuh
1#ifndef PBAT_GPU_IMPL_XPBD_INTEGRATOR_H
2#define PBAT_GPU_IMPL_XPBD_INTEGRATOR_H
3
4#include "pbat/Aliases.h"
5#include "pbat/gpu/Aliases.h"
6#include "pbat/gpu/impl/common/Buffer.cuh"
7#include "pbat/gpu/impl/contact/VertexTriangleMixedCcdDcd.cuh"
8#include "pbat/gpu/impl/geometry/Bvh.cuh"
9#include "pbat/sim/xpbd/Data.h"
10#include "pbat/sim/xpbd/Enums.h"
11
12#include <array>
13#include <vector>
14
15namespace pbat {
16namespace gpu {
17namespace impl {
18namespace xpbd {
19
21{
22 public:
23 using EConstraint = pbat::sim::xpbd::EConstraint;
24 static auto constexpr kConstraintTypes = static_cast<int>(EConstraint::NumberOfConstraintTypes);
25
26 using Data = pbat::sim::xpbd::Data;
27
33 Integrator(Data const& data);
40 void Step(GpuScalar dt, GpuIndex iterations, GpuIndex substeps);
46 void SetCompliance(Eigen::Ref<GpuMatrixX const> const& alpha, EConstraint eConstraint);
59 Eigen::Vector<GpuScalar, 3> const& min,
60 Eigen::Vector<GpuScalar, 3> const& max);
66 common::Buffer<GpuScalar> const& GetLagrangeMultiplier(EConstraint eConstraint) const;
72 common::Buffer<GpuScalar> const& GetCompliance(EConstraint eConstraint) const;
73
74 // Ideally, these would not be public, but nvcc will otherwise report that
75 // "The enclosing parent function ("[...]") for an extended __device__ lambda
76 // cannot have private or protected access within its class"
77 void ProjectBlockNeoHookeanConstraints(GpuScalar dt, GpuScalar dt2);
78 void ProjectClusteredBlockNeoHookeanConstraints(GpuScalar dt, GpuScalar dt2);
79 void ProjectCollisionConstraints(GpuScalar dt, GpuScalar dt2);
80
81 public:
84
86
95 std::array<common::Buffer<GpuScalar>, kConstraintTypes>
99 std::array<common::Buffer<GpuScalar>, kConstraintTypes>
103 std::array<common::Buffer<GpuScalar>, kConstraintTypes>
107
108 std::vector<Index> Pptr;
110
111 std::vector<Index> SGptr;
115
119 Eigen::Vector<GpuScalar, 3> Smin, Smax;
121};
122
123} // namespace xpbd
124} // namespace impl
125} // namespace gpu
126} // namespace pbat
127
128#endif // PBAT_GPU_IMPL_XPBD_INTEGRATOR_H
Definition Buffer.cuh:21
Vertex-triangle contact detection using a mixed CCD/DCD approach.
Definition VertexTriangleMixedCcdDcd.cuh:18
common::Buffer< Index > Cptr
Cluster -> constraint map pointers.
Definition Integrator.cuh:113
GpuScalar muS
Coulomb static friction coefficient.
Definition Integrator.cuh:117
std::vector< Index > SGptr
Clustered constraint partitions' pointers.
Definition Integrator.cuh:111
common::Buffer< GpuScalar > DmInv
3x3x|#elements| array of material shape matrix inverses
Definition Integrator.cuh:93
contact::VertexTriangleMixedCcdDcd cd
Contact detection system.
Definition Integrator.cuh:85
Eigen::Vector< GpuScalar, 3 > Smax
Scene bounding box.
Definition Integrator.cuh:119
common::Buffer< GpuScalar > gamma
Definition Integrator.cuh:94
GpuScalar muK
Coulomb dynamic friction coefficient.
Definition Integrator.cuh:118
common::Buffer< GpuIndex > Cadj
Cluster -> constraint map constraints.
Definition Integrator.cuh:114
common::Buffer< GpuIndex, 4 > T
Tetrahedral simplices.
Definition Integrator.cuh:83
common::Buffer< GpuScalar, 3 > x
Vertex/particle positions.
Definition Integrator.cuh:82
common::Buffer< GpuScalar, 3 > xb
Vertex/particle positions buffer.
Definition Integrator.cuh:88
void SetFrictionCoefficients(GpuScalar muS, GpuScalar muK)
Definition Integrator.cu:198
common::Buffer< GpuScalar > muC
Collision vertex penalties.
Definition Integrator.cuh:116
common::Buffer< GpuScalar > lame
Lame coefficients.
Definition Integrator.cuh:92
Integrator(Data const &data)
Construct a new Integrator Impl object.
Definition Integrator.cu:21
void SetSceneBoundingBox(Eigen::Vector< GpuScalar, 3 > const &min, Eigen::Vector< GpuScalar, 3 > const &max)
Definition Integrator.cu:204
std::vector< Index > Pptr
Constraint partitions' pointers.
Definition Integrator.cuh:108
common::Buffer< GpuScalar > const & GetCompliance(EConstraint eConstraint) const
Definition Integrator.cu:217
void SetCompliance(Eigen::Ref< GpuMatrixX const > const &alpha, EConstraint eConstraint)
Definition Integrator.cu:193
common::Buffer< GpuScalar, 3 > xt
Vertex/particle positions at time t.
Definition Integrator.cuh:87
common::Buffer< GpuScalar, 3 > v
Vertex/particle velocities.
Definition Integrator.cuh:89
common::Buffer< GpuIndex > SGadj
Clustered constraint partitions' constraints.
Definition Integrator.cuh:112
common::Buffer< GpuScalar > minv
Vertex/particle mass inverses.
Definition Integrator.cuh:91
std::array< common::Buffer< GpuScalar >, kConstraintTypes > lagrange
Definition Integrator.cuh:96
GpuIndex mActiveSetUpdateFrequency
Active set update frequency.
Definition Integrator.cuh:120
common::Buffer< GpuScalar > const & GetLagrangeMultiplier(EConstraint eConstraint) const
Definition Integrator.cu:212
void Step(GpuScalar dt, GpuIndex iterations, GpuIndex substeps)
Definition Integrator.cu:88
std::array< common::Buffer< GpuScalar >, kConstraintTypes > beta
Definition Integrator.cuh:104
common::Buffer< GpuIndex > Padj
Constraint partitions' constraints.
Definition Integrator.cuh:109
std::array< common::Buffer< GpuScalar >, kConstraintTypes > alpha
Definition Integrator.cuh:100
common::Buffer< GpuScalar, 3 > aext
Vertex/particle external forces.
Definition Integrator.cuh:90
Type aliases for GPU code.
GPU algorithm implementations.
Definition VertexTriangleMixedCcdDcd.h:21
GPU related public functionality.
Definition Buffer.cu:16
The main namespace of the library.
Definition Aliases.h:15
float GpuScalar
Scalar type for GPU code.
Definition Aliases.h:19
std::int32_t GpuIndex
Index type for GPU code.
Definition Aliases.h:20
Definition Data.h:15