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
pbat::gpu::impl::vbd::Integrator Class Reference

VBD integrator [2]. More...

Inheritance diagram for pbat::gpu::impl::vbd::Integrator:
pbat::gpu::impl::vbd::AndersonIntegrator pbat::gpu::impl::vbd::ChebyshevIntegrator pbat::gpu::impl::vbd::TrustRegionIntegrator

Public Types

using EInitializationStrategy
 Enum type for initialization strategy.
 
using Data = pbat::sim::vbd::Data
 Data type for VBD.
 

Public Member Functions

 Integrator (Data const &data)
 Construct Integrator from data.
 
void Step (GpuScalar dt, GpuIndex iterations, GpuIndex substeps=GpuIndex{1})
 Execute one simulation step.
 
void TracedStep (GpuScalar dt, GpuIndex iterations, GpuIndex substeps, GpuIndex t, std::string_view dir=".")
 Execute one simulation step with tracing to disk.
 
void SetSceneBoundingBox (Eigen::Vector< GpuScalar, 3 > const &min, Eigen::Vector< GpuScalar, 3 > const &max)
 Set the bounding box over the scene used for spatial partitioning.
 
void SetBlockSize (GpuIndex blockSize)
 Set the number of threads per GPU block for per-vertex elastic energy computation.
 
void InitializeActiveSet (GpuScalar dt)
 Detect candidate contact pairs for the current time step.
 
void ComputeInertialTargets (GpuScalar sdt, GpuScalar sdt2)
 Compute the inertial target positions of the BDF1 objective.
 
void InitializeBcdSolution (GpuScalar sdt, GpuScalar sdt2)
 Compute starting point of BCD minimization.
 
void UpdateActiveSet ()
 Computes active contact pairs in the current configuration.
 
virtual void Solve (kernels::BackwardEulerMinimization &bdf, GpuIndex iterations)
 VBD to iterate on the BDF minimization problem.
 
void TracedSolve (kernels::BackwardEulerMinimization &bdf, GpuIndex iterations, GpuIndex t, GpuIndex s, std::string_view dir)
 VBD to iterate on the BDF minimization problem.
 
void RunVbdIteration (kernels::BackwardEulerMinimization &bdf)
 Run a single iteration of the VBD's BDF minimization.
 
void UpdateBdfState (GpuScalar sdt)
 Update the BDF state (i.e. positions and velocities) after solving the BDF minimization.
 
kernels::BackwardEulerMinimization BdfDeviceParameters (GpuScalar dt, GpuScalar dt2)
 Obtain Backward Euler time stepping minimization problem for device code.
 

Public Attributes

common::Buffer< GpuScalar, 3 > x
 Vertex positions.
 
common::Buffer< GpuIndex, 4 > T
 Tetrahedral mesh elements.
 
Eigen::Vector< GpuScalar, 3 > mWorldMin
 World AABB min.
 
Eigen::Vector< GpuScalar, 3 > mWorldMax
 World AABB max.
 
GpuIndex mActiveSetUpdateFrequency
 Active set update frequency.
 
contact::VertexTriangleMixedCcdDcd cd
 Collision detector.
 
common::Buffer< GpuIndexfc
 
common::Buffer< GpuScalarXVA
 |x.Size()| array of vertex areas for contact response
 
common::Buffer< GpuScalarFA
 |F.Size()| array of triangle areas for contact response
 
common::Buffer< GpuScalar, 3 > mPositionsAtT
 Previous vertex positions.
 
common::Buffer< GpuScalar, 3 > mInertialTargetPositions
 Inertial target for vertex positions.
 
common::Buffer< GpuScalar, 3 > xb
 Write buffer for positions which handles data races.
 
common::Buffer< GpuScalar, 3 > mVelocitiesAtT
 Previous vertex velocities.
 
common::Buffer< GpuScalar, 3 > mVelocities
 Current vertex velocities.
 
common::Buffer< GpuScalar, 3 > mExternalAcceleration
 External acceleration.
 
common::Buffer< GpuScalarmMass
 Lumped mass matrix diagonals.
 
common::Buffer< GpuScalarmQuadratureWeights
 
common::Buffer< GpuScalarmShapeFunctionGradients
 4x3x|# elements| shape function gradients
 
common::Buffer< GpuScalarmLameCoefficients
 2x|# elements| 1st and 2nd Lame parameters
 
GpuScalar mDetHZero
 Numerical zero for hessian determinant check.
 
common::Buffer< GpuIndexmVertexTetrahedronPrefix
 Vertex-tetrahedron adjacency list's prefix sum.
 
common::Buffer< GpuIndexmVertexTetrahedronNeighbours
 Vertex-tetrahedron adjacency list's neighbour list.
 
common::Buffer< GpuIndexmVertexTetrahedronLocalVertexIndices
 
GpuScalar mRayleighDamping
 Rayleigh damping coefficient.
 
GpuScalar mCollisionPenalty
 Collision penalty coefficient.
 
GpuScalar mFrictionCoefficient
 Coefficient of friction.
 
GpuScalar mSmoothFrictionRelativeVelocityThreshold
 
GpuIndexVectorX mPptr
 
common::Buffer< GpuIndexmPadj
 Partition vertices.
 
EInitializationStrategy mInitializationStrategy
 Strategy to use to determine the initial BCD iterate.
 
GpuIndex mGpuThreadBlockSize
 Number of threads per CUDA thread block.
 
cuda::stream_t mStream
 Cuda stream on which this VBD instance will run.
 

Detailed Description

VBD integrator [2].

Member Typedef Documentation

◆ EInitializationStrategy

Initial value:
EInitializationStrategy
Initialization strategies for the VBD time step minimization.
Definition Enums.h:9

Enum type for initialization strategy.

Constructor & Destructor Documentation

◆ Integrator()

pbat::gpu::impl::vbd::Integrator::Integrator ( Data const & data)

Construct Integrator from data.

Parameters
dataVBD simulation scenario

Member Function Documentation

◆ BdfDeviceParameters()

kernels::BackwardEulerMinimization pbat::gpu::impl::vbd::Integrator::BdfDeviceParameters ( GpuScalar dt,
GpuScalar dt2 )

Obtain Backward Euler time stepping minimization problem for device code.

Parameters
dtTime step
dt2Time step squared
Returns
Backward Euler minimization problem for device code

◆ ComputeInertialTargets()

void pbat::gpu::impl::vbd::Integrator::ComputeInertialTargets ( GpuScalar sdt,
GpuScalar sdt2 )

Compute the inertial target positions of the BDF1 objective.

Parameters
sdtTime step
sdt2Time step squared

◆ InitializeActiveSet()

void pbat::gpu::impl::vbd::Integrator::InitializeActiveSet ( GpuScalar dt)

Detect candidate contact pairs for the current time step.

Parameters
dtTime step

◆ InitializeBcdSolution()

void pbat::gpu::impl::vbd::Integrator::InitializeBcdSolution ( GpuScalar sdt,
GpuScalar sdt2 )

Compute starting point of BCD minimization.

Parameters
sdtTime step
sdt2Time step squared

◆ RunVbdIteration()

void pbat::gpu::impl::vbd::Integrator::RunVbdIteration ( kernels::BackwardEulerMinimization & bdf)

Run a single iteration of the VBD's BDF minimization.

Parameters
bdfDevice BDF minimization problem

◆ SetBlockSize()

void pbat::gpu::impl::vbd::Integrator::SetBlockSize ( GpuIndex blockSize)

Set the number of threads per GPU block for per-vertex elastic energy computation.

Parameters
blockSizeNumber of threads per block

◆ SetSceneBoundingBox()

void pbat::gpu::impl::vbd::Integrator::SetSceneBoundingBox ( Eigen::Vector< GpuScalar, 3 > const & min,
Eigen::Vector< GpuScalar, 3 > const & max )

Set the bounding box over the scene used for spatial partitioning.

Parameters
minMinimum corner
maxMaximum corner

◆ Solve()

void pbat::gpu::impl::vbd::Integrator::Solve ( kernels::BackwardEulerMinimization & bdf,
GpuIndex iterations )
virtual

VBD to iterate on the BDF minimization problem.

Override this method to implement different VBD optimization strategies

Parameters
bdfDevice BDF minimization problem
iterationsNumber of iterations

Reimplemented in pbat::gpu::impl::vbd::AndersonIntegrator, pbat::gpu::impl::vbd::ChebyshevIntegrator, and pbat::gpu::impl::vbd::TrustRegionIntegrator.

◆ Step()

void pbat::gpu::impl::vbd::Integrator::Step ( GpuScalar dt,
GpuIndex iterations,
GpuIndex substeps = GpuIndex{1} )

Execute one simulation step.

Parameters
dtTime step
iterationsNumber of optimization iterations per substep
substepsNumber of substeps

◆ TracedSolve()

void pbat::gpu::impl::vbd::Integrator::TracedSolve ( kernels::BackwardEulerMinimization & bdf,
GpuIndex iterations,
GpuIndex t,
GpuIndex s,
std::string_view dir )

VBD to iterate on the BDF minimization problem.

Saves all iterates to disk.

Parameters
bdfDevice BDF minimization problem
iterationsNumber of iterations
tCurrent time step
sCurrent substep
dirDirectory to save matrix market files

◆ TracedStep()

void pbat::gpu::impl::vbd::Integrator::TracedStep ( GpuScalar dt,
GpuIndex iterations,
GpuIndex substeps,
GpuIndex t,
std::string_view dir = "." )

Execute one simulation step with tracing to disk.

Saves matrix market files which follow the pattern {variable}.t.{timestep}.s.{substep}[.k.{iteration}].mtx

Parameters
dtTime step
iterationsNumber of optimization iterations per substep
substepsNumber of substeps
tCurrent time step
dirDirectory to save matrix market files

◆ UpdateBdfState()

void pbat::gpu::impl::vbd::Integrator::UpdateBdfState ( GpuScalar sdt)

Update the BDF state (i.e. positions and velocities) after solving the BDF minimization.

Parameters
sdtTime step

Member Data Documentation

◆ fc

common::Buffer<GpuIndex> pbat::gpu::impl::vbd::Integrator::fc

|# verts * kMaxCollidingTrianglesPerVertex| array of vertex-triangle contact pairs (i,f), s.t. f = fc[i*kMaxCollidingTrianglesPerVertex+c] for 0 <= c < /< kMaxCollidingTrianglesPerVertex. If f(c) < 0, there is no contact, and f(c+j) < /< 0 is also true, for j > 0.

◆ mPptr

GpuIndexVectorX pbat::gpu::impl::vbd::Integrator::mPptr

|#partitions+1| partition pointers, s.t. the range [Pptr[p], /< Pptr[p+1]) indexes into Padj vertices from partition p

◆ mQuadratureWeights

common::Buffer<GpuScalar> pbat::gpu::impl::vbd::Integrator::mQuadratureWeights

|# elements| array of quadrature weights (i.e. tetrahedron volumes for order 1)

◆ mSmoothFrictionRelativeVelocityThreshold

GpuScalar pbat::gpu::impl::vbd::Integrator::mSmoothFrictionRelativeVelocityThreshold

IPC smooth friction transition function's relative velocity threshold

◆ mVertexTetrahedronLocalVertexIndices

common::Buffer<GpuIndex> pbat::gpu::impl::vbd::Integrator::mVertexTetrahedronLocalVertexIndices

Vertex-tetrahedron adjacency list's ilocal property


The documentation for this class was generated from the following files: