Program Listing for File SimulationDataPF.h

Return to documentation for file (SPlisHSPlasH/PF/SimulationDataPF.h)

#ifndef __SimulationDataPF_h__
#define __SimulationDataPF_h__

#include "SPlisHSPlasH/Common.h"
#include "SPlisHSPlasH/FluidModel.h"

#include <vector>

namespace SPH
{
    class SimulationDataPF
    {
    public:
        SimulationDataPF();
        virtual ~SimulationDataPF();

    protected:
        std::vector<std::vector<Vector3r>> m_old_position;

        std::vector<std::vector<unsigned int>> m_num_fluid_neighbors;

        std::vector<std::vector<Vector3r>> m_s;

        std::vector<std::vector<Vector3r>> m_mat_diag;

        std::vector<unsigned int> m_particleOffset;

    public:

        virtual void init();

        virtual void cleanup();

        virtual void reset();

        void performNeighborhoodSearchSort();

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

        FORCE_INLINE const Vector3r getOldPosition(const unsigned int fluidIndex, const unsigned int i) const
        {
            return m_old_position[fluidIndex][i];
        }

        FORCE_INLINE Vector3r& getOldPosition(const unsigned int fluidIndex, const unsigned int i)
        {
            return m_old_position[fluidIndex][i];
        }

        FORCE_INLINE void setOldPosition(const unsigned int fluidIndex, const unsigned int i, const Vector3r p)
        {
            m_old_position[fluidIndex][i] = p;
        }

        FORCE_INLINE const unsigned int getNumFluidNeighbors(const unsigned int fluidIndex, const unsigned int i) const
        {
            return m_num_fluid_neighbors[fluidIndex][i];
        }

        FORCE_INLINE unsigned int& getNumFluidNeighbors(const unsigned int fluidIndex, const unsigned int i)
        {
            return m_num_fluid_neighbors[fluidIndex][i];
        }

        FORCE_INLINE void setNumFluidNeighbors(const unsigned int fluidIndex, const unsigned int i, const unsigned int n)
        {
            m_num_fluid_neighbors[fluidIndex][i] = n;
        }

        FORCE_INLINE const Vector3r& getS(const unsigned int fluidIndex, const unsigned int i) const
        {
            return m_s[fluidIndex][i];
        }

        FORCE_INLINE Vector3r& getS(const unsigned int fluidIndex, const unsigned int i)
        {
            return m_s[fluidIndex][i];
        }

        FORCE_INLINE void setS(const unsigned int fluidIndex, const unsigned int i, const Vector3r & s)
        {
            m_s[fluidIndex][i] = s;
        }

        FORCE_INLINE const Vector3r& getDiag(const unsigned int fluidIndex, const unsigned int i) const
        {
            return m_mat_diag[fluidIndex][i];
        }

        FORCE_INLINE Vector3r& getDiag(const unsigned int fluidIndex, const unsigned int i)
        {
            return m_mat_diag[fluidIndex][i];
        }

        FORCE_INLINE void setDiag(const unsigned int fluidIndex, const unsigned int i, const Vector3r & s)
        {
            m_mat_diag[fluidIndex][i] = s;
        }

        FORCE_INLINE const unsigned int & getParticleOffset(const unsigned int fluidIndex) const
        {
            return m_particleOffset[fluidIndex];
        }
    };
}

#endif