Dear OpenLB developers,
I have a question regarding the implementation of the Schiller–Naumann drag model in:
AdvDiffSNDragForce3D
especially the following lines:
dragCoeff = (9.*converter_.getPhysViscosity()
*converter_.getPhysDensity()
*converter_.getConversionFactorTime())
/(2.*pRho_*pRadius_*pRadius_);
Re_pCoeff = 2.*pRadius_/converter_.getPhysViscosity();
and later:
T Re_p = Re_pCoeff * abs(magVelF – magVel);
My understanding is:
pRadius_ and getPhysViscosity() are physical quantities,
while computeU() usually returns lattice velocities.
Thank you very much for your help and for the excellent OpenLB framework.
Best regards
template<typename T, typename DESCRIPTOR,
typename ADLattice>
AdvDiffSNDragForce3D<T,DESCRIPTOR,ADLattice>::AdvDiffSNDragForce3D(UnitConverter<T,DESCRIPTOR> const& converter_, T pRadius_, T pRho_)
{
initArg = 8;
dragCoeff = (9.*converter_.getPhysViscosity()*converter_.getPhysDensity()*converter_.getConversionFactorTime()) / (2.*pRho_*pRadius_*pRadius_);
Re_pCoeff = 2.*pRadius_/converter_.getPhysViscosity();
}
template<typename T, typename DESCRIPTOR,
typename ADLattice>
void AdvDiffSNDragForce3D<T,DESCRIPTOR,ADLattice>::applyForce(T force[], Cell<T,DESCRIPTOR> *nsCell, Cell<T,ADLattice> *adCell, T vel[], int latticeR[])
{
T velF[3] = {0.,0.,0.};
nsCell->computeU(velF);
T magVelF = pow((pow(velF[0],2.)+pow(velF[1],2.)+pow(velF[2],2.)),0.5);
T magVel = pow((pow(vel[0],2.)+pow(vel[1],2.)+pow(vel[2],2.)),0.5);
T Re_p = Re_pCoeff*abs(magVelF – magVel);
for (int i=0; i < DESCRIPTOR::d; i++) {
force[i] += dragCoeff*(1. + 0.15*pow(Re_p,0.687))*(velF[i]-vel[i]);
}
}