Program Listing for File TimeStep.h

Return to documentation for file (SPlisHSPlasH/TimeStep.h)

#pragma once

#include "Common.h"
#include "ParameterObject.h"
#include "FluidModel.h"
#include "BoundaryModel.h"
#include "Discregrid/discrete_grid.hpp"

namespace SPH
{
    class TimeStep : public GenParam::ParameterObject
    {
    protected:
        void clearAccelerations(const unsigned int fluidModelIndex);

        virtual void initParameters();

        void approximateNormal(Discregrid::DiscreteGrid* map, const Eigen::Vector3d &x, Eigen::Vector3d &n, const unsigned int dim);
        void computeVolumeAndBoundaryX(const unsigned int fluidModelIndex, const unsigned int i, const Vector3r &xi);
        void computeVolumeAndBoundaryX();
        void computeDensityAndGradient(const unsigned int fluidModelIndex, const unsigned int i, const Vector3r &xi);
        void computeDensityAndGradient();

    public:
        TimeStep();
        virtual ~TimeStep(void);

        void computeDensities(const unsigned int fluidModelIndex);

        virtual std::string getMethodName() = 0;
        virtual void step() = 0;
        virtual void reset();

        virtual void init();
        virtual void resize() = 0;

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

        virtual void performNeighborhoodSearchSort() {};

        virtual void saveState(BinaryFileWriter &binWriter) {};
        virtual void loadState(BinaryFileReader &binReader) {};

        virtual int getNumIterations() = 0;

#ifdef USE_PERFORMANCE_OPTIMIZATION
        void precomputeValues();
#endif
    };
}