Program Listing for File BoundaryModel_Koschier2017.cpp

Return to documentation for file (SPlisHSPlasH/BoundaryModel_Koschier2017.cpp)

#include "BoundaryModel_Koschier2017.h"
#include "SPHKernels.h"
#include <iostream>
#include "TimeManager.h"
#include "TimeStep.h"
#include "Utilities/Logger.h"
#include "NeighborhoodSearch.h"
#include "Simulation.h"

using namespace SPH;


BoundaryModel_Koschier2017::BoundaryModel_Koschier2017() :
    m_boundaryDensity(),
    m_boundaryDensityGradient(),
    m_boundaryXj()
{
    m_map = nullptr;
    m_maxDist = 0.0;
    m_maxVel = 0.0;
}

BoundaryModel_Koschier2017::~BoundaryModel_Koschier2017(void)
{
    Simulation *sim = Simulation::getCurrent();
    const unsigned int nModels = sim->numberOfFluidModels();
    for (unsigned int i = 0; i < nModels; i++)
    {
        m_boundaryDensity[i].clear();
        m_boundaryDensityGradient[i].clear();
        m_boundaryXj[i].clear();
    }
    m_boundaryDensity.clear();
    m_boundaryDensityGradient.clear();
    m_boundaryXj.clear();
    delete m_map;
}


void BoundaryModel_Koschier2017::initModel(RigidBodyObject *rbo)
{
    Simulation *sim = Simulation::getCurrent();

    const unsigned int nModels = sim->numberOfFluidModels();
    m_boundaryDensity.resize(nModels);
    m_boundaryDensityGradient.resize(nModels);
    m_boundaryXj.resize(nModels);
    for (unsigned int i = 0; i < nModels; i++)
    {
        FluidModel *fm = sim->getFluidModel(i);
        m_boundaryDensity[i].resize(fm->numParticles(), 0.0);
        m_boundaryDensityGradient[i].resize(fm->numParticles(), Vector3r::Zero());
        m_boundaryXj[i].resize(fm->numParticles(), Vector3r::Zero());
    }

    if (rbo->isDynamic())
    {
#ifdef _OPENMP
        const int maxThreads = omp_get_max_threads();
#else
        const int maxThreads = 1;
#endif
        m_forcePerThread.resize(maxThreads, Vector3r::Zero());
        m_torquePerThread.resize(maxThreads, Vector3r::Zero());
    }
    m_rigidBody = rbo;
}

void BoundaryModel_Koschier2017::reset()
{
    BoundaryModel::reset();

    m_maxDist = 0.0;
    m_maxVel = 0.0;
}