Program Listing for File BoundaryModel_Akinci2012.h

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

#ifndef __BoundaryModel_Akinci2012_h__
#define __BoundaryModel_Akinci2012_h__

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

#include "BoundaryModel.h"
#include "SPHKernels.h"


namespace SPH
{
    class TimeStep;

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

        protected:
            bool m_sorted;
            unsigned int m_pointSetIndex;

            // values required for Akinci 2012 boundary handling
            std::vector<Vector3r> m_x0;
            std::vector<Vector3r> m_x;
            std::vector<Vector3r> m_v;
            std::vector<Real> m_V;

        public:
            unsigned int numberOfParticles() const { return static_cast<unsigned int>(m_x.size()); }
            unsigned int getPointSetIndex() const { return m_pointSetIndex; }
            bool isSorted() const { return m_sorted; }

            void computeBoundaryVolume();
            void resize(const unsigned int numBoundaryParticles);

            virtual void reset();

            virtual void performNeighborhoodSearchSort();

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

            void initModel(RigidBodyObject *rbo, const unsigned int numBoundaryParticles, Vector3r *boundaryParticles);

            FORCE_INLINE Vector3r &getPosition0(const unsigned int i)
            {
                return m_x0[i];
            }

            FORCE_INLINE const Vector3r &getPosition0(const unsigned int i) const
            {
                return m_x0[i];
            }

            FORCE_INLINE void setPosition0(const unsigned int i, const Vector3r &pos)
            {
                m_x0[i] = pos;
            }

            FORCE_INLINE Vector3r &getPosition(const unsigned int i)
            {
                return m_x[i];
            }

            FORCE_INLINE const Vector3r &getPosition(const unsigned int i) const
            {
                return m_x[i];
            }

            FORCE_INLINE void setPosition(const unsigned int i, const Vector3r &pos)
            {
                m_x[i] = pos;
            }

            FORCE_INLINE Vector3r &getVelocity(const unsigned int i)
            {
                return m_v[i];
            }

            FORCE_INLINE const Vector3r &getVelocity(const unsigned int i) const
            {
                return m_v[i];
            }

            FORCE_INLINE void setVelocity(const unsigned int i, const Vector3r &vel)
            {
                m_v[i] = vel;
            }

            FORCE_INLINE const Real& getVolume(const unsigned int i) const
            {
                return m_V[i];
            }

            FORCE_INLINE Real& getVolume(const unsigned int i)
            {
                return m_V[i];
            }

            FORCE_INLINE void setVolume(const unsigned int i, const Real &val)
            {
                m_V[i] = val;
            }
    };
}

#endif