Class Elasticity_Peer2018

Inheritance Relationships

Base Type

Class Documentation

class Elasticity_Peer2018 : public SPH::NonPressureForceBase

This class implements the implicit SPH formulation for incompressible linearly elastic solids introduced by Peer et al. [PGBT18].

References:

  • [PGBT18] Andreas Peer, Christoph Gissler, Stefan Band, and Matthias Teschner. An implicit SPH formulation for incompressible linearly elastic solids. Computer Graphics Forum, 2018. URL: http://dx.doi.org/10.1111/cgf.13317

Public Functions

Elasticity_Peer2018(FluidModel *model)
virtual ~Elasticity_Peer2018(void)
inline virtual std::string getMethodName()

returns the name of the method

virtual void step()
virtual void reset()
virtual void performNeighborhoodSearchSort()
virtual void saveState(BinaryFileWriter &binWriter)
virtual void loadState(BinaryFileReader &binReader)

Public Static Functions

static inline NonPressureForceBase *creator(FluidModel *model)
static void matrixVecProd(const Real *vec, Real *result, void *userData)

Public Static Attributes

static std::string METHOD_NAME = "Peer et al. 2018"
static int YOUNGS_MODULUS = -1
static int POISSON_RATIO = -1
static int FIXED_BOX_MIN = -1
static int FIXED_BOX_MAX = -1
static int ITERATIONS = -1
static int MAX_ITERATIONS = -1
static int MAX_ERROR = -1
static int ALPHA = -1
static int MAX_NEIGHBORS = -1

Protected Types

typedef Eigen::ConjugateGradient<MatrixReplacement, Eigen::Lower | Eigen::Upper, Eigen::IdentityPreconditioner> Solver

Protected Functions

void determineFixedParticles()

Mark all particles in the bounding box as fixed.

void initValues()
void computeMatrixL()
void computeRotations()
void computeRHS(VectorXr &rhs)
virtual void initParameters()
virtual void deferredInit()

This function is called after the simulation scene is loaded and all parameters are initialized. While reading a scene file several parameters can change. The deferred init function should initialize all values which depend on these parameters.

inline FORCE_INLINE void symMatTimesVec (const Vector6r &M, const Vector3r &v, Vector3r &res)
inline FORCE_INLINE void generateIndices (const unsigned int *map, const unsigned int *idx, std::array< unsigned int, 8 > &indices, const unsigned char count=8u)

Protected Attributes

Real m_youngsModulus
Real m_poissonRatio
Vector3r m_fixedBoxMin
Vector3r m_fixedBoxMax
std::vector<unsigned int> m_current_to_initial_index
std::vector<unsigned int> m_initial_to_current_index
std::vector<std::vector<unsigned int>> m_initialNeighbors
std::vector<Real> m_restVolumes
std::vector<Matrix3r> m_rotations
std::vector<Matrix3r> m_stress
std::vector<Matrix3r> m_L
std::vector<Matrix3r> m_RL
std::vector<Matrix3r> m_F
unsigned int m_iterations
unsigned int m_maxIter
Real m_maxError
Real m_alpha
int m_maxNeighbors
Solver m_solver