Program Listing for File Viscosity_Peer2015.h
↰ Return to documentation for file (SPlisHSPlasH/Viscosity/Viscosity_Peer2015.h)
#ifndef __Viscosity_Peer2015_h__
#define __Viscosity_Peer2015_h__
#include "SPlisHSPlasH/Common.h"
#include "SPlisHSPlasH/FluidModel.h"
#include "SPlisHSPlasH/NonPressureForceBase.h"
#include "SPlisHSPlasH/Utilities/MatrixFreeSolver.h"
namespace SPH
{
class Viscosity_Peer2015 : public NonPressureForceBase
{
protected:
std::vector<Real> m_density;
std::vector<Matrix3r> m_targetNablaV;
typedef Eigen::ConjugateGradient<MatrixReplacement, Eigen::Lower | Eigen::Upper, JacobiPreconditioner1D> Solver;
Solver m_solver;
Real m_viscosity;
unsigned int m_iterations;
unsigned int m_maxIter;
Real m_maxError;
virtual void initParameters();
void computeDensities();
public:
static std::string METHOD_NAME;
static int VISCOSITY_COEFFICIENT;
static int ITERATIONS;
static int MAX_ITERATIONS;
static int MAX_ERROR;
Viscosity_Peer2015(FluidModel *model);
virtual ~Viscosity_Peer2015(void);
static NonPressureForceBase* creator(FluidModel* model) { return new Viscosity_Peer2015(model); }
virtual std::string getMethodName() { return METHOD_NAME; }
virtual void step();
virtual void reset();
virtual void performNeighborhoodSearchSort();
static void matrixVecProd(const Real* vec, Real *result, void *userData);
FORCE_INLINE static void diagonalMatrixElement(const unsigned int row, Real &result, void *userData);
FORCE_INLINE const Matrix3r& getTargetNablaV(const unsigned int i) const
{
return m_targetNablaV[i];
}
FORCE_INLINE Matrix3r& getTargetNablaV(const unsigned int i)
{
return m_targetNablaV[i];
}
FORCE_INLINE void setTargetNablaV(const unsigned int i, const Matrix3r &val)
{
m_targetNablaV[i] = val;
}
};
}
#endif