Program Listing for File BoundaryModel_Bender2019.h

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

#ifndef __BoundaryModel_Bender2019_h__
#define __BoundaryModel_Bender2019_h__

#include "Common.h"
#include <vector>

#include "SPHKernels.h"
#include "Discregrid/All"
#include "BoundaryModel.h"


namespace SPH
{
    class TimeStep;

    class BoundaryModel_Bender2019 : public BoundaryModel
    {
        public:
            BoundaryModel_Bender2019();
            virtual ~BoundaryModel_Bender2019();


    protected:
            // Density or volume map
            Discregrid::DiscreteGrid *m_map;
            // values required for volume maps
            std::vector<std::vector<Real>> m_boundaryVolume;
            std::vector<std::vector<Vector3r>> m_boundaryXj;
            // maxmimal distance of a mesh point to the center of mass (required for CFL)
            Real m_maxDist;
            Real m_maxVel;

        public:
            void initModel(RigidBodyObject *rbo);

            virtual void reset();

            Discregrid::DiscreteGrid *getMap() { return m_map; }
            void setMap(Discregrid::DiscreteGrid *map) { m_map = map; }

            Real getMaxDist() const { return m_maxDist; }
            void setMaxDist(Real val) { m_maxDist = val; }

            Real getMaxVel() const { return m_maxVel; }
            void setMaxVel(Real val) { m_maxVel = val; }

            FORCE_INLINE const Real& getBoundaryVolume(const unsigned int fluidIndex, const unsigned int i) const
            {
                return m_boundaryVolume[fluidIndex][i];
            }

            FORCE_INLINE Real& getBoundaryVolume(const unsigned int fluidIndex, const unsigned int i)
            {
                return m_boundaryVolume[fluidIndex][i];
            }

            FORCE_INLINE void setBoundaryVolume(const unsigned int fluidIndex, const unsigned int i, const Real &val)
            {
                m_boundaryVolume[fluidIndex][i] = val;
            }

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

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

            FORCE_INLINE void setBoundaryXj(const unsigned int fluidIndex, const unsigned int i, const Vector3r &val)
            {
                m_boundaryXj[fluidIndex][i] = val;
            }
    };
}

#endif