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
Data.h
1#ifndef PBAT_SIM_XPBD_DATA_H
2#define PBAT_SIM_XPBD_DATA_H
3
4#include "Enums.h"
5#include "PhysicsBasedAnimationToolkitExport.h"
6#include "pbat/Aliases.h"
7
8#include <array>
9
10namespace pbat {
11namespace sim {
12namespace xpbd {
13
14struct Data
15{
16 public:
17 PBAT_API Data&
18 WithVolumeMesh(Eigen::Ref<MatrixX const> const& V, Eigen::Ref<IndexMatrixX const> const& E);
19 PBAT_API Data& WithSurfaceMesh(
20 Eigen::Ref<IndexVectorX const> const& V,
21 Eigen::Ref<IndexMatrixX const> const& F);
22 PBAT_API Data& WithBodies(Eigen::Ref<IndexVectorX const> const& BV);
23 PBAT_API Data& WithVelocity(Eigen::Ref<MatrixX const> const& v);
24 PBAT_API Data& WithAcceleration(Eigen::Ref<MatrixX const> const& aext);
25 PBAT_API Data& WithMassInverse(Eigen::Ref<VectorX const> const& minv);
26 PBAT_API Data& WithElasticMaterial(Eigen::Ref<MatrixX const> const& lame);
27 PBAT_API Data& WithCollisionPenalties(Eigen::Ref<VectorX const> const& muV);
28 PBAT_API Data& WithFrictionCoefficients(Scalar muS, Scalar muD);
29 PBAT_API Data& WithActiveSetUpdateFrequency(Index frequency);
30 PBAT_API Data& WithDamping(Eigen::Ref<VectorX> const& beta, EConstraint constraint);
31 PBAT_API Data& WithCompliance(Eigen::Ref<VectorX> const& alpha, EConstraint constraint);
32 PBAT_API Data& WithPartitions(std::vector<Index> const& Pptr, std::vector<Index> const& Padj);
45 std::vector<Index> const& SGptr,
46 std::vector<Index> const& SGadj,
47 std::vector<Index> const& Cptr,
48 std::vector<Index> const& Cadj);
49 PBAT_API Data& WithDirichletConstrainedVertices(IndexVectorX const& dbc);
50 PBAT_API Data& Construct(bool bValidate = true);
51
52 public:
57
59
64
67
71
73 Scalar muS{0.3};
74 Scalar muD{0.2};
76
77 std::array<VectorX, static_cast<int>(EConstraint::NumberOfConstraintTypes)>
81 std::array<VectorX, static_cast<int>(EConstraint::NumberOfConstraintTypes)>
85 std::array<VectorX, static_cast<int>(EConstraint::NumberOfConstraintTypes)>
89
91
92 std::vector<Index> Pptr;
93 std::vector<Index> Padj;
94
95 std::vector<Index> SGptr;
96 std::vector<Index> SGadj;
97 std::vector<Index> Cptr;
99 std::vector<Index> Cadj;
100};
101
102} // namespace xpbd
103} // namespace sim
104} // namespace pbat
105
106#endif // PBAT_SIM_XPBD_DATA_H
PBAT's (Extended) Position-Based Dynamics (XPBD) bender2015position API.
Definition Data.cpp:13
PBAT simulation algorithms.
The main namespace of the library.
Definition Aliases.h:15
Eigen::Vector< Index, Eigen::Dynamic > IndexVectorX
Dynamic-size index vector type.
Definition Aliases.h:49
Eigen::Matrix< Scalar, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic-size matrix type.
Definition Aliases.h:34
Eigen::Vector< Scalar, Eigen::Dynamic > VectorX
Dynamic-size vector type.
Definition Aliases.h:33
std::ptrdiff_t Index
Index type.
Definition Aliases.h:17
Eigen::Matrix< Index, Eigen::Dynamic, Eigen::Dynamic > IndexMatrixX
Dynamic-size index matrix type.
Definition Aliases.h:50
double Scalar
Scalar type.
Definition Aliases.h:18
Definition Data.h:15
std::vector< Index > SGadj
Supernodal constraint graph's partition adjacency.
Definition Data.h:96
VectorX minv
Vertex mass inverses.
Definition Data.h:63
std::vector< Index > Cptr
Definition Data.h:97
IndexMatrixX T
Tetrahedra.
Definition Data.h:56
MatrixX xb
Vertex positions buffer for contact.
Definition Data.h:66
VectorX gammaSNH
Definition Data.h:70
IndexMatrixX F
Definition Data.h:54
MatrixX lame
2x|#quad.pts.| Lame coefficients
Definition Data.h:68
std::array< VectorX, static_cast< int >(EConstraint::NumberOfConstraintTypes)> alpha
Definition Data.h:78
std::vector< Index > Padj
Compressed sparse storage's edges for constraint indices.
Definition Data.h:93
VectorX muV
|#collision vertices| array of collision penalties
Definition Data.h:72
IndexVectorX V
|#collision vertices| array of indices into columns of x
Definition Data.h:53
std::vector< Index > Pptr
Compressed sparse storage's pointers for constraint partitions.
Definition Data.h:92
MatrixX v
Vertex velocities.
Definition Data.h:61
Scalar muS
Static friction coefficient.
Definition Data.h:73
MatrixX x
Vertex positions.
Definition Data.h:60
IndexVectorX BV
|#particles| array of body indices
Definition Data.h:58
std::vector< Index > SGptr
Supernodal constraint graph's partition pointers.
Definition Data.h:95
MatrixX aext
Vertex external accelerations.
Definition Data.h:62
MatrixX xt
Vertex positions at time t.
Definition Data.h:65
IndexVectorX dbc
Dirichlet constrained vertices.
Definition Data.h:90
PBAT_API Data & WithClusterPartitions(std::vector< Index > const &SGptr, std::vector< Index > const &SGadj, std::vector< Index > const &Cptr, std::vector< Index > const &Cadj)
See Ton-That et al. 2023 tonthat2023parallel for more details.
Definition Data.cpp:102
MatrixX DmInv
3x3x|#elements| array of material shape matrix inverses
Definition Data.h:69
std::array< VectorX, static_cast< int >(EConstraint::NumberOfConstraintTypes)> beta
Definition Data.h:82
Scalar muD
Dynamic friction coefficient.
Definition Data.h:74
Index mActiveSetUpdateFrequency
Contact active set update frequency.
Definition Data.h:75
std::array< VectorX, static_cast< int >(EConstraint::NumberOfConstraintTypes)> lambda
Definition Data.h:86
std::vector< Index > Cadj
Constraint indices in each cluster.
Definition Data.h:99