9 #include "imstkDynamicalModel.h" 10 #include "imstkImplicitFunctionFiniteDifferenceFunctor.h" 12 #include <unordered_map> 23 bool m_useCurvature =
false;
25 double m_constantVelocity = 0.0;
44 void setTimeStep(
const double timeStep)
override { m_config->m_dt = timeStep; }
45 double getTimeStep()
const override {
return m_config->m_dt; }
48 std::shared_ptr<LevelSetModelConfig> getConfig()
const {
return m_config; }
53 bool initialize()
override;
58 void configure(std::shared_ptr<LevelSetModelConfig> config);
60 virtual void evolve();
66 void addImpulse(
const Vec3i& coord,
double f);
70 void setImpulse(
const Vec3i& coord,
double f);
72 std::shared_ptr<TaskNode> getQuantityEvolveNode(
size_t i)
const {
return m_evolveQuantitiesNodes[i]; }
73 std::shared_ptr<TaskNode> getGenerateVelocitiesBeginNode()
const {
return m_generateVelocitiesBegin; }
74 std::shared_ptr<TaskNode> getGenerateVelocitiesEndNode()
const {
return m_generateVelocitiesEnd; }
76 std::unordered_map<size_t, std::tuple<Vec3i, double>>& getNodesToUpdate() {
return m_nodesToUpdate; }
78 void resetToInitialState()
override;
84 void initGraphEdges(std::shared_ptr<TaskNode> source, std::shared_ptr<TaskNode> sink)
override;
86 std::shared_ptr<ImplicitGeometry> m_mesh =
nullptr;
88 std::vector<std::shared_ptr<TaskNode>> m_evolveQuantitiesNodes;
90 std::shared_ptr<TaskNode> m_generateVelocitiesBegin;
91 std::shared_ptr<TaskNode> m_generateVelocitiesEnd;
93 std::shared_ptr<LevelSetModelConfig> m_config;
95 std::unordered_map<size_t, std::tuple<Vec3i, double>> m_nodesToUpdate;
96 std::vector<std::tuple<size_t, Vec3i, double, Vec2d, double>> m_nodeUpdatePool;
97 size_t noteUpdatePoolSize;
98 size_t m_maxVelocitiesParallel = 100;
100 std::shared_ptr<ImageData> m_gradientMagnitudes =
nullptr;
101 std::shared_ptr<ImageData> m_velocities =
nullptr;
102 std::shared_ptr<ImageData> m_curvatures =
nullptr;
void setTimeStep(const double timeStep) override
Get/Set the time step size.
bool m_sparseUpdate
Only updates nodes that recieve force.
Abstract class for mathematical model of the physics governing the dynamic object.
This class implements a generic level set model, it requires both a forward and backward finite diffe...
Curvature given in structured coordinates.
double m_dt
Time step size.
double getTimeStep() const override
Returns the time step size.
Gradient given by backward finite differences.
Gradient given by forward finite differences.