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
TrustRegionIntegrator.cuh
Go to the documentation of this file.
1
10
11#ifndef PBAT_GPU_IMPL_VBD_TRUSTREGIONINTEGRATOR_CUH
12#define PBAT_GPU_IMPL_VBD_TRUSTREGIONINTEGRATOR_CUH
13
14#include "Integrator.cuh"
15#include "pbat/math/linalg/mini/Matrix.h"
16
17namespace pbat::gpu::impl::vbd {
18
23{
24 public:
29 TrustRegionIntegrator(Data const& data);
35 virtual void Solve(kernels::BackwardEulerMinimization& bdf, GpuIndex iterations) override;
42 void
50 void
76 virtual ~TrustRegionIntegrator() = default;
77
82
91 void UpdateIterates();
162 void ConstructModel();
173 GpuScalar SquaredStepSize() const;
187 void TakeLinearStep(GpuScalar t);
203 void RollbackLinearStep(GpuScalar t);
204
205 using Matrix3 =
207 using Vector3 = pbat::math::linalg::mini::SVector<GpuScalar, 3>;
208 using Vector5 = pbat::math::linalg::mini::SVector<Scalar, 5>;
209
219 void ComputePolynomialConstraintCoefficients();
229 Scalar SolveCurvedTrustRegionConstraint(Scalar R2) const;
240 void ComputeCurvedPath();
245 void TakeCurvedStep(GpuScalar t);
249 void RollbackCurvedStep();
250
251 private:
252 GpuScalar eta;
253 GpuScalar tau;
256 GpuScalar fk, fkm1, fkm2;
258 GpuScalar tk, tkm1, tkm2;
259
260 Matrix3 Q;
261 Vector3 aQ;
262 GpuScalar am, bm;
263 Vector5 sigmax;
267 bool bUseCurvedPath;
268};
269
270} // namespace pbat::gpu::impl::vbd
271
272#endif // PBAT_GPU_IMPL_VBD_TRUSTREGIONINTEGRATOR_CUH
Definition Buffer.cuh:21
Integrator(Data const &data)
Construct Integrator from data.
Definition Integrator.cu:22
pbat::sim::vbd::Data Data
Data type for VBD.
Definition Integrator.cuh:43
TrustRegionIntegrator(Data const &data)
Construct a new Trust Region Integrator object.
Definition TrustRegionIntegrator.cu:18
void SolveWithCurvedAccelerationPath(kernels::BackwardEulerMinimization &bdf, GpuIndex iterations)
Solve the optimization problem using the Trust-Region accelerated VBD method with a curved accelerate...
Definition TrustRegionIntegrator.cu:167
void UpdateIterates()
Rotates .
Definition TrustRegionIntegrator.cu:366
GpuScalar ModelFunction(GpuScalar t) const
Compute the Trust-Region model function .
Definition TrustRegionIntegrator.cu:392
void SolveWithLinearAcceleratedPath(kernels::BackwardEulerMinimization &bdf, GpuIndex iterations)
Solve the optimization problem using the Trust-Region accelerated VBD method with a linear accelerate...
Definition TrustRegionIntegrator.cu:48
virtual void Solve(kernels::BackwardEulerMinimization &bdf, GpuIndex iterations) override
Solve the optimization problem using the Trust-Region accelerated VBD method.
Definition TrustRegionIntegrator.cu:36
GpuScalar ObjectiveFunction(GpuScalar dt, GpuScalar dt2)
Compute the objective function value at .
Definition TrustRegionIntegrator.cu:265
virtual ~TrustRegionIntegrator()=default
Destroy the Trust Region Integrator object.
GpuScalar ModelOptimalStep() const
Compute the model function's minimizer .
Definition TrustRegionIntegrator.cu:400
Definition Matrix.h:121
Vertex Block Descent (VBD) algorithms.
Definition AndersonIntegrator.cu:13
float GpuScalar
Scalar type for GPU code.
Definition Aliases.h:19
double Scalar
Scalar type.
Definition Aliases.h:18
std::int32_t GpuIndex
Index type for GPU code.
Definition Aliases.h:20
Device-side BFD1 minimization problem.
Definition Kernels.cuh:40
VBD integrator implementation.