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.h
1#ifndef PBAT_SIM_VBD_INTEGRATOR_H
2#define PBAT_SIM_VBD_INTEGRATOR_H
3
4#include "Data.h"
5#include "PhysicsBasedAnimationToolkitExport.h"
6#include "pbat/Aliases.h"
7
8#include <string>
9#include <vector>
10
11namespace pbat {
12namespace sim {
13namespace vbd {
14
15class Integrator
16{
17 public:
18 PBAT_API Integrator(Data data);
19
20 PBAT_API void Step(Scalar dt, Index iterations, Index substeps = Index{1});
27 PBAT_API void TraceNextStep(std::string const& path = ".", Index t = -1);
28
29 Data data;
30
31 PBAT_API virtual ~Integrator() = default;
32
33 protected:
34 PBAT_API void InitializeSolve(Scalar sdt, Scalar sdt2);
35 PBAT_API void RunVbdIteration(Scalar sdt, Scalar sdt2);
36 PBAT_API virtual void Solve(Scalar sdt, Scalar sdt2, Index iterations);
37 PBAT_API void SolveVertex(Index i, Scalar sdt, Scalar sdt2);
38
42 public:
44 Eigen::Ref<MatrixX const> const& xk,
45 Eigen::Ref<MatrixX const> const& xtilde,
46 Scalar dt);
47 PBAT_API VectorX ObjectiveFunctionGradient(
48 Eigen::Ref<MatrixX const> const& xk,
49 Eigen::Ref<MatrixX const> const& xtilde,
50 Scalar dt);
51
52 protected:
53 PBAT_API void ExportTrace(Scalar sdt, Index substep);
54 PBAT_API void TryTraceIteration(Scalar sdt);
55
56 private:
57 bool mTraceIterates{false};
58 std::string mTracePath{"."};
59 Index mTimeStep{-1};
60 std::vector<Scalar> mTracedObjectives;
61 std::vector<VectorX> mTracedGradients;
62 std::vector<MatrixX> mTracedPositions;
63};
64
65} // namespace vbd
66} // namespace sim
67} // namespace pbat
68
69#endif // PBAT_SIM_VBD_INTEGRATOR_H
PBAT_API Scalar ObjectiveFunction(Eigen::Ref< MatrixX const > const &xk, Eigen::Ref< MatrixX const > const &xtilde, Scalar dt)
The following methods are made public for debugging purposes (generally).
Definition Integrator.cpp:138
PBAT_API void TraceNextStep(std::string const &path=".", Index t=-1)
Mark next time step for optimization tracing.
Definition Integrator.cpp:47
PBAT's Vertex Block Descent (VBD) anka2024vbd API.
Definition AndersonIntegrator.cpp:10
PBAT simulation algorithms.
The main namespace of the library.
Definition Aliases.h:15
Eigen::Vector< Scalar, Eigen::Dynamic > VectorX
Dynamic-size vector type.
Definition Aliases.h:33
std::ptrdiff_t Index
Index type.
Definition Aliases.h:17
double Scalar
Scalar type.
Definition Aliases.h:18
VBD simulation configuration.
Definition Data.h:15