Program Listing for File TimeStepDFSPH.h

Return to documentation for file (SPlisHSPlasH/DFSPH/TimeStepDFSPH.h)

#ifndef __TimeStepDFSPH_h__
#define __TimeStepDFSPH_h__

#include "SPlisHSPlasH/Common.h"
#include "SPlisHSPlasH/TimeStep.h"
#include "SimulationDataDFSPH.h"
#include "SPlisHSPlasH/SPHKernels.h"

#define USE_WARMSTART
#define USE_WARMSTART_V

namespace SPH
{
    class SimulationDataDFSPH;

    class TimeStepDFSPH : public TimeStep
    {
    protected:
        SimulationDataDFSPH m_simulationData;
        const Real m_eps = static_cast<Real>(1.0e-5);
        unsigned int m_iterations;
        Real m_maxError;
        unsigned int m_minIterations;
        unsigned int m_maxIterations;
        bool m_enableDivergenceSolver;
        unsigned int m_iterationsV;
        Real m_maxErrorV;
        unsigned int m_maxIterationsV;

        void computeDFSPHFactor(const unsigned int fluidModelIndex);
        void pressureSolve();
        void pressureSolveIteration(const unsigned int fluidModelIndex, Real &avg_density_err);
        void divergenceSolve();
        void divergenceSolveIteration(const unsigned int fluidModelIndex, Real &avg_density_err);
        void computeDensityAdv(const unsigned int fluidModelIndex, const unsigned int index, const Real h, const Real density0);
        void computeDensityChange(const unsigned int fluidModelIndex, const unsigned int index, const Real h);

        void computePressureAccel(const unsigned int fluidModelIndex, const unsigned int i, const Real density0, std::vector<std::vector<Real>>& pressure_rho2, const bool applyBoundaryForces = false);
        Real compute_aij_pj(const unsigned int fluidModelIndex, const unsigned int i);

        virtual void performNeighborhoodSearchSort();
        virtual void emittedParticles(FluidModel *model, const unsigned int startIndex);

        virtual void initParameters();

    public:
        static std::string METHOD_NAME;
        static int SOLVER_ITERATIONS;
        static int MIN_ITERATIONS;
        static int MAX_ITERATIONS;
        static int MAX_ERROR;
        static int SOLVER_ITERATIONS_V;
        static int MAX_ITERATIONS_V;
        static int MAX_ERROR_V;
        static int USE_DIVERGENCE_SOLVER;

        TimeStepDFSPH();
        virtual ~TimeStepDFSPH(void);

        virtual void step();
        virtual void reset();

        virtual void resize();
        virtual std::string getMethodName() { return METHOD_NAME; }
        virtual int getNumIterations() { return m_iterations; }
    };
}

#endif