Program Listing for File DragForce_Macklin2014.cpp
↰ Return to documentation for file (SPlisHSPlasH/Drag/DragForce_Macklin2014.cpp)
#include "DragForce_Macklin2014.h"
#include "SPlisHSPlasH/TimeManager.h"
using namespace SPH;
using namespace GenParam;
std::string DragForce_Macklin2014::METHOD_NAME = "Macklin et al. 2014";
int DragForce_Macklin2014::DRAG_COEFFICIENT = -1;
DragForce_Macklin2014::DragForce_Macklin2014(FluidModel *model) :
NonPressureForceBase(model)
{
m_dragCoefficient = static_cast<Real>(0.01);
}
DragForce_Macklin2014::~DragForce_Macklin2014(void)
{
}
void DragForce_Macklin2014::initParameters()
{
NonPressureForceBase::initParameters();
DRAG_COEFFICIENT = createNumericParameter("drag", "Drag coefficient", &m_dragCoefficient);
setGroup(DRAG_COEFFICIENT, "Fluid Model|Drag force");
setDescription(DRAG_COEFFICIENT, "Coefficient for the drag force computation");
RealParameter* rparam = static_cast<RealParameter*>(getParameter(DRAG_COEFFICIENT));
rparam->setMinValue(0.0);
}
void DragForce_Macklin2014::step()
{
const Real density0 = m_model->getDensity0();
const unsigned int numParticles = m_model->numActiveParticles();
#pragma omp parallel default(shared)
{
#pragma omp for schedule(static)
for (int i = 0; i < (int)numParticles; i++)
{
Vector3r &ai = m_model->getAcceleration(i);
const Vector3r &vi = m_model->getVelocity(i);
ai -= m_dragCoefficient * static_cast<Real>(1.0) / m_model->getMass(i) * vi * (1.0 - m_model->getDensity(i) / density0);
}
}
}
void DragForce_Macklin2014::reset()
{
}