Program Listing for File VorticityRefinement_Liu2021.h

Return to documentation for file (SPlisHSPlasH/Vorticity/VorticityRefinement_Liu2021.h)

#ifndef __VorticityRefinement_Liu2021_h__
#define __VorticityRefinement_Liu2021_h__

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

namespace SPH
{
    class VorticityRefinement_Liu2021 : public NonPressureForceBase
    {
    protected:
        std::vector<Vector3r> m_vorticity;          // vorticity at end of last time step
        std::vector<Vector3r> m_dissipatedVorticity;
        std::vector<Vector3r> m_streamFunction;

        Real m_vorticityCoeff;
        Real m_viscosityCoefficient;

        virtual void initParameters();

    public:
        static std::string METHOD_NAME;
        static int VORTICITY_COEFFICIENT;
        static int KINEMATIC_VISCOSITY;

        VorticityRefinement_Liu2021(FluidModel *model);
        virtual ~VorticityRefinement_Liu2021(void);

        static NonPressureForceBase* creator(FluidModel* model) { return new VorticityRefinement_Liu2021(model); }
        virtual std::string getMethodName() { return METHOD_NAME; }

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

        virtual void performNeighborhoodSearchSort();

        FORCE_INLINE const Vector3r& getVorticity(const unsigned int i) const
        {
            return m_vorticity[i];
        }

        FORCE_INLINE Vector3r& getVorticity(const unsigned int i)
        {
            return m_vorticity[i];
        }

        FORCE_INLINE void setVorticity(const unsigned int i, const Vector3r& val)
        {
            m_vorticity[i] = val;
        }

        FORCE_INLINE const Vector3r& getDissipatedVorticity(const unsigned int i) const
        {
            return m_dissipatedVorticity[i];
        }

        FORCE_INLINE Vector3r& getDissipatedVorticity(const unsigned int i)
        {
            return m_dissipatedVorticity[i];
        }

        FORCE_INLINE void setDissipatedVorticity(const unsigned int i, const Vector3r& val)
        {
            m_dissipatedVorticity[i] = val;
        }

        FORCE_INLINE const Vector3r& getStreamFunction(const unsigned int i) const
        {
            return m_streamFunction[i];
        }

        FORCE_INLINE Vector3r& getStreamFunction(const unsigned int i)
        {
            return m_streamFunction[i];
        }

        FORCE_INLINE void setStreamFunction(const unsigned int i, const Vector3r& val)
        {
            m_streamFunction[i] = val;
        }
    };
}

#endif