CellModules
integrators.hpp
Go to the documentation of this file.
1#ifndef INTEGRATORS_HPP
2#define INTEGRATORS_HPP
4namespace MecaCell {
5struct Verlet {
6 template <typename C> static void updatePosition(C &c, const double &dt) {
7 // position
8 auto oldVel = c.getVelocity();
9 c.setVelocity(c.getVelocity() + c.getForce() * dt / c.getMass());
10 c.setPrevposition(c.getPosition());
11 c.setPosition(c.getPosition() + (c.getVelocity() + oldVel) * dt * 0.5);
12 }
13 template <typename C>
14 static void updateOrientation(C &c, double momentOfInertia, const double &dt) {
15 // orientation
16 auto oldVel = c.getAngularVelocity();
17 c.setAngularVelocity(c.getAngularVelocity() + c.getTorque() * dt / momentOfInertia);
18 c.setOrientationRotation(c.getOrientationRotation() +
19 (c.getAngularVelocity() + oldVel) * dt * 0.5);
20 c.updateCurrentOrientation();
21 }
22};
23
24struct Euler {
25 template <typename C> static void updatePosition(C &c, const double &dt) {
26 // position
27 c.setVelocity(c.getVelocity() + c.getForce() * dt / c.getMass());
28 c.setPrevposition(c.getPosition());
29 c.setPosition(c.getPosition() + c.getVelocity() * dt);
30 }
31
32 template <typename C>
33 static void updateOrientation(C &c, double momentOfInertia, const double &dt) {
34 // orientation
35 c.setAngularVelocity(c.getAngularVelocity() + c.getTorque() * dt / momentOfInertia);
36 c.setOrientationRotation(c.getOrientationRotation() + c.getAngularVelocity() * dt);
37 c.updateCurrentOrientation();
38 }
39};
40}
41#endif
this file contains various miscellanious utility functions & helpers *
static void updatePosition(C &c, const double &dt)
Definition: integrators.hpp:25
static void updateOrientation(C &c, double momentOfInertia, const double &dt)
Definition: integrators.hpp:33
static void updateOrientation(C &c, double momentOfInertia, const double &dt)
Definition: integrators.hpp:14
static void updatePosition(C &c, const double &dt)
Definition: integrators.hpp:6