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_VBD_DATA_H
2#define PBAT_SIM_VBD_DATA_H
3
4#include "Enums.h"
5#include "PhysicsBasedAnimationToolkitExport.h"
6#include "pbat/Aliases.h"
7#include "pbat/graph/Enums.h"
8
9namespace pbat::sim::vbd {
10
14struct Data
15{
16 public:
17 static auto constexpr kDims = 3;
27 PBAT_API Data&
28 WithVolumeMesh(Eigen::Ref<MatrixX const> const& X, Eigen::Ref<IndexMatrixX const> const& E);
36 PBAT_API Data& WithSurfaceMesh(
37 Eigen::Ref<IndexVectorX const> const& V,
38 Eigen::Ref<IndexMatrixX const> const& F);
44 PBAT_API Data& WithBodies(Eigen::Ref<IndexVectorX const> const& B);
50 PBAT_API Data& WithVelocity(Eigen::Ref<MatrixX const> const& v);
56 PBAT_API Data& WithAcceleration(Eigen::Ref<MatrixX const> const& aext);
64 PBAT_API Data& WithMaterial(
65 Eigen::Ref<VectorX const> const& rhoe,
66 Eigen::Ref<VectorX const> const& mue,
67 Eigen::Ref<VectorX const> const& lambdae);
76 IndexVectorX const& dbc,
77 Scalar muD = Scalar(1),
78 bool bDbcSorted = false);
117 PBAT_API Data& WithActiveSetUpdateFrequency(Index activeSetUpdateFrequency);
135 PBAT_API Data& WithAndersonAcceleration(Index window);
141 PBAT_API Data& WithBroydenMethod(Index window);
148 PBAT_API Data& WithNesterovAcceleration(Scalar L, Index start = 3);
163 PBAT_API Data& Construct(bool bValidate = true);
164
165 public:
166 // Simulation mesh
169
170 // Collision mesh
178
179 // Vertex data
184
188
189 // Element data
195
196 // Vertex-element adjacency graph
204
205 // Dirichlet boundary conditions
208
209 // Parallelization
212
215
220
221 // Time integration optimization parameters
223 EInitializationStrategy::AdaptivePbat};
225 Scalar muC{1e6};
226 Scalar muF{0.3};
227 Scalar epsv{1e-3};
231 EAccelerationStrategy eAcceleration{EAccelerationStrategy::None};
232
233 // Chebyshev acceleration
235
236 // Anderson acceleration
238
239 // Nesterov
242
243 // Trust Region acceleration
244 Scalar eta{0.2};
246 bool bCurved{true};
247};
248
249} // namespace pbat::sim::vbd
250
251#endif // PBAT_SIM_VBD_DATA_H
Enums for graph algorithms API.
EGreedyColorSelectionStrategy
Enumeration of color selection strategies for graph coloring algorithms.
Definition Enums.h:19
@ LeastUsed
Select the least used color from the color palette.
Definition Enums.h:20
EGreedyColorOrderingStrategy
Enumeration of vertex traversal ordering strategies for graph coloring algorithms.
Definition Enums.h:27
@ LargestDegree
Always visit the vertex with the largest degree next.
Definition Enums.h:30
PBAT's Vertex Block Descent (VBD) anka2024vbd API.
Definition AndersonIntegrator.cpp:10
EAccelerationStrategy
Acceleration strategies for the VBD time step minimization.
Definition Enums.h:21
EInitializationStrategy
Initialization strategies for the VBD time step minimization.
Definition Enums.h:9
Eigen::Vector< Index, Eigen::Dynamic > IndexVectorX
Dynamic-size index vector type.
Definition Aliases.h:49
Eigen::Vector< Scalar, Eigen::Dynamic > VectorX
Dynamic-size vector type.
Definition Aliases.h:33
Eigen::Matrix< Index, Rows, Cols > IndexMatrix
Fixed-size index matrix type.
Definition Aliases.h:47
std::ptrdiff_t Index
Index type.
Definition Aliases.h:17
double Scalar
Scalar type.
Definition Aliases.h:18
Eigen::Matrix< Scalar, Rows, Cols > Matrix
Fixed-size matrix type.
Definition Aliases.h:31
VBD simulation configuration.
Definition Data.h:15
Scalar epsv
Definition Data.h:227
PBAT_API Data & WithAcceleration(Eigen::Ref< MatrixX const > const &aext)
Vertex external accelerations.
Definition Data.cpp:68
IndexVectorX dbc
Dirichlet constrained vertices (sorted)
Definition Data.h:207
Matrix< kDims, Eigen::Dynamic > vt
3x|# verts| previous vertex velocities
Definition Data.h:187
Scalar muD
Dirichlet penalty coefficient.
Definition Data.h:206
PBAT_API Data & WithBroydenMethod(Index window)
Use Broyden method.
Definition Data.cpp:155
VectorX m
|# verts| vertex masses
Definition Data.h:183
IndexVectorX GVGp
|# verts+1| prefixes into GVGg
Definition Data.h:197
PBAT_API Data & WithTrustRegionAcceleration(Scalar eta, Scalar tau, bool bCurved=true)
Use Trust Region acceleration.
Definition Data.cpp:170
IndexVectorX Padj
|# verts| partition vertices
Definition Data.h:219
PBAT_API Data & WithSurfaceMesh(Eigen::Ref< IndexVectorX const > const &V, Eigen::Ref< IndexMatrixX const > const &F)
Collision mesh.
Definition Data.cpp:34
Scalar tau
Trust Region radius increase factor.
Definition Data.h:245
PBAT_API Data & WithVolumeMesh(Eigen::Ref< MatrixX const > const &X, Eigen::Ref< IndexMatrixX const > const &E)
Simulation mesh.
Definition Data.cpp:21
Scalar detHZero
Numerical zero for hessian pseudo-singularity check.
Definition Data.h:230
Matrix< kDims, Eigen::Dynamic > aext
3x|# verts| vertex external accelerations
Definition Data.h:182
Index mWindowSize
Anderson acceleration window size.
Definition Data.h:237
IndexVectorX V
Collision vertices.
Definition Data.h:172
IndexMatrix< 4, Eigen::Dynamic > E
4x|# elems| FEM linear tetrahedral elements
Definition Data.h:168
Matrix< kDims, Eigen::Dynamic > xt
3x|# verts| previous vertex positions
Definition Data.h:185
IndexVectorX Pptr
Definition Data.h:217
PBAT_API Data & WithRayleighDamping(Scalar kD)
Uniform damping coefficient.
Definition Data.cpp:115
graph::EGreedyColorSelectionStrategy eSelection
Definition Data.h:213
Scalar rho
Chebyshev acceleration estimated spectral radius.
Definition Data.h:234
PBAT_API Data & WithVertexColoringStrategy(graph::EGreedyColorOrderingStrategy eOrdering, graph::EGreedyColorSelectionStrategy eSelection)
Vertex graph coloring strategy to use.
Definition Data.cpp:100
Matrix< kDims, Eigen::Dynamic > x
3x|# verts| vertex positions
Definition Data.h:180
graph::EGreedyColorOrderingStrategy eOrdering
Definition Data.h:210
PBAT_API Data & WithChebyshevAcceleration(Scalar rho)
Use Chebyshev acceleration.
Definition Data.cpp:141
Scalar mNesterovLipschitzConstant
Nesterov acceleration Lipschitz constant.
Definition Data.h:240
PBAT_API Data & Construct(bool bValidate=true)
Construct the simulation data.
Definition Data.cpp:179
Index mNesterovAccelerationStart
Nesterov acceleration start iteration.
Definition Data.h:241
PBAT_API Data & WithBodies(Eigen::Ref< IndexVectorX const > const &B)
Multibody map.
Definition Data.cpp:56
IndexVectorX GVGe
Definition Data.h:198
static auto constexpr kDims
Number of spatial dimensions.
Definition Data.h:17
Matrix< 2, Eigen::Dynamic > lame
2x|# elems| Lame coefficients
Definition Data.h:194
VectorX rhoe
|# elems| mass densities
Definition Data.h:193
PBAT_API Data & WithNesterovAcceleration(Scalar L, Index start=3)
Use Nesterov acceleration.
Definition Data.cpp:162
Matrix< kDims, Eigen::Dynamic > X
3x|# verts| FEM nodal positions
Definition Data.h:167
EInitializationStrategy strategy
BCD optimization initialization strategy.
Definition Data.h:222
IndexVectorX B
|# verts| array of body indices
Definition Data.h:171
EAccelerationStrategy eAcceleration
Acceleration strategy.
Definition Data.h:231
Scalar muC
Uniform collision penalty.
Definition Data.h:225
PBAT_API Data & WithVelocity(Eigen::Ref< MatrixX const > const &v)
Vertex velocities.
Definition Data.cpp:62
Scalar eta
Trust Region energy reduction accuracy threshold.
Definition Data.h:244
PBAT_API Data & WithContactParameters(Scalar muC, Scalar muF, Scalar epsv)
Normal and frictional contact parameters.
Definition Data.cpp:121
PBAT_API Data & WithInitializationStrategy(EInitializationStrategy strategy)
BCD optimization initialization strategy.
Definition Data.cpp:109
VectorX XVA
Definition Data.h:175
Matrix< kDims, Eigen::Dynamic > v
3x|# verts| vertex velocities
Definition Data.h:181
Scalar muF
Uniform friction coefficient.
Definition Data.h:226
Matrix< 4, Eigen::Dynamic > GP
|# elem.nodes|x|# dims*# elems| shape function gradients at elems
Definition Data.h:192
PBAT_API Data & WithDirichletConstrainedVertices(IndexVectorX const &dbc, Scalar muD=Scalar(1), bool bDbcSorted=false)
Set Dirichlet constrained vertices.
Definition Data.cpp:86
Matrix< kDims, Eigen::Dynamic > xtilde
3x|# verts| inertial target positions
Definition Data.h:186
IndexVectorX colors
|# vertices| map of vertex colors
Definition Data.h:216
PBAT_API Data & WithMaterial(Eigen::Ref< VectorX const > const &rhoe, Eigen::Ref< VectorX const > const &mue, Eigen::Ref< VectorX const > const &lambdae)
Element material parameters.
Definition Data.cpp:74
Scalar kD
Uniform damping coefficient.
Definition Data.h:224
IndexVectorX GVGilocal
Definition Data.h:201
PBAT_API Data & WithAndersonAcceleration(Index window)
Use Anderson acceleration.
Definition Data.cpp:148
bool bCurved
Use curved accelerated path, otherwise use linear path.
Definition Data.h:246
Index mActiveSetUpdateFrequency
Active set update frequency.
Definition Data.h:229
PBAT_API Data & WithActiveSetUpdateFrequency(Index activeSetUpdateFrequency)
Active set update frequency.
Definition Data.cpp:129
VectorX wg
|# elems| quadrature weights
Definition Data.h:190
IndexMatrix< 3, Eigen::Dynamic > F
3x|#collision triangles| collision triangles (on the boundary of T)
Definition Data.h:174
VectorX FA
|# collision triangles| triangle areas
Definition Data.h:177
PBAT_API Data & WithHessianDeterminantZeroUnder(Scalar zero)
Numerical zero for hessian pseudo-singularity check.
Definition Data.cpp:135