.. _program_listing_file_SPlisHSPlasH_Viscosity_Viscosity_Peer2015.h: Program Listing for File Viscosity_Peer2015.h ============================================= |exhale_lsh| :ref:`Return to documentation for file ` (``SPlisHSPlasH/Viscosity/Viscosity_Peer2015.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #ifndef __Viscosity_Peer2015_h__ #define __Viscosity_Peer2015_h__ #include "SPlisHSPlasH/Common.h" #include "SPlisHSPlasH/FluidModel.h" #include "ViscosityBase.h" #include "SPlisHSPlasH/Utilities/MatrixFreeSolver.h" namespace SPH { class Viscosity_Peer2015 : public ViscosityBase { protected: std::vector m_density; std::vector m_targetNablaV; typedef Eigen::ConjugateGradient Solver; Solver m_solver; unsigned int m_iterations; unsigned int m_maxIter; Real m_maxError; virtual void initParameters(); void computeDensities(); public: 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 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