28#ifndef LB_DRAG_MODELS_HH
29#define LB_DRAG_MODELS_HH
36template<
typename T,
typename Lattice,
template<
typename V>
class Particle>
38 : _converter(converter)
44template<
typename T,
typename Lattice,
template<
typename V>
class Particle>
49template<
typename T,
typename Lattice,
template<
typename V>
class Particle>
51 Particle<T>* p, T latticeVelF[], T latticeVelP[],
int globicFull[], T continuousPhaseFraction )
59template<
typename T,
typename Lattice,
template<
typename V>
class Particle>
63 this->
_reP = std::make_shared<NewtonianParticleReynoldsNumber<T,Lattice,Particle> > (this->
_converter);
66template<
typename T,
typename Lattice,
template<
typename V>
class Particle>
68 Particle<T>* p, T latticeVelF[], T latticeVelP[],
int globicFull[], T continuousPhaseFraction )
70 T physVelRelative = this->_converter.getPhysVelocity (
72 util::pow(latticeVelF[1] - latticeVelP[1],2) +
73 util::pow(latticeVelF[2] - latticeVelP[2],2) ) );
75 T ReP = continuousPhaseFraction * this->_reP->operator() (p, physVelRelative, globicFull);
77 T a[3] = {T(), T(), T()};
88 else if (ReP < 10.0) {
93 else if (ReP < 100.0) {
98 else if (ReP < 1000.0) {
103 else if (ReP < 5000.0) {
108 else if (ReP < 10000.0) {
119 return ( a[0] + a[1]/ReP + a[2]/(ReP*ReP) );
125template<
typename T,
typename Lattice,
template<
typename V>
class Particle>
130 this->
_reP = std::make_shared<PowerLawParticleReynoldsNumber<T,Lattice,Particle> > (this->
_converter, sLattice);
136template<
typename T,
typename Lattice,
template<
typename V>
class Particle>
140 this->
_reP = std::make_shared<NewtonianParticleReynoldsNumber<T,Lattice,Particle> > (this->
_converter);
143template<
typename T,
typename Lattice,
template<
typename V>
class Particle>
145 Particle<T>* p, T latticeVelF[], T latticeVelP[],
int globicFull[], T continuousPhaseFraction )
147 T physVelRelative = this->_converter.getPhysVelocity (
149 util::pow(latticeVelF[1] - latticeVelP[1],2) +
150 util::pow(latticeVelF[2] - latticeVelP[2],2) ) );
152 T ReP = continuousPhaseFraction * this->_reP->operator() (p, physVelRelative, globicFull);
156 : ( 24. * (1. + 0.15 *
util::pow(ReP, 0.687)) / ReP );
162template<
typename T,
typename Lattice,
template<
typename V>
class Particle>
167 this->
_reP = std::make_shared<PowerLawParticleReynoldsNumber<T,Lattice,Particle> > (this->
_converter, sLattice);
173template<
typename T,
typename Lattice,
template<
typename V>
class Particle>
177 this->
_reP = std::make_shared<NewtonianParticleReynoldsNumber<T,Lattice,Particle> > (this->
_converter);
180template<
typename T,
typename Lattice,
template<
typename V>
class Particle>
182 Particle<T>* p, T latticeVelF[], T latticeVelP[],
int globicFull[], T continuousPhaseFraction )
184 T physVelRelative = this->_converter.getPhysVelocity (
186 util::pow(latticeVelF[1] - latticeVelP[1],2) +
187 util::pow(latticeVelF[2] - latticeVelP[2],2) ) );
189 T ReP = continuousPhaseFraction * this->_reP->operator() (p, physVelRelative, globicFull);
193 : ( 16./ReP * (1. + 0.173*
util::pow(ReP, 0.657)) + 0.413 / (1. + 16300*
util::pow(ReP, -1.09)) );
199template<
typename T,
typename Lattice,
template<
typename V>
class Particle>
204 this->
_reP = std::make_shared<PowerLawParticleReynoldsNumber<T,Lattice,Particle> > (this->
_converter, sLattice);
210template<
typename T,
typename Lattice,
template<
typename V>
class Particle>
214 this->
_reP = std::make_shared<NewtonianParticleReynoldsNumber<T,Lattice,Particle> > (this->
_converter);
217template<
typename T,
typename Lattice,
template<
typename V>
class Particle>
219 Particle<T>* p, T latticeVelF[], T latticeVelP[],
int globicFull[], T continuousPhaseFraction )
221 T physVelRelative = this->_converter.getPhysVelocity (
223 util::pow(latticeVelF[1] - latticeVelP[1],2) +
224 util::pow(latticeVelF[2] - latticeVelP[2],2) ) );
226 T ReP = continuousPhaseFraction * this->_reP->operator() (p, physVelRelative, globicFull);
229 return 1.2 * 24./ReP * ( 1. + 0.173*
util::pow(ReP, 0.675) );
231 else if (ReP <= 100. ) {
232 return 0.813 * 24./ReP * ( 1. + 24.*
util::pow(ReP, -1.125) );
235 return 1.07 * 24./ReP * ( -1. + 0.037*
util::pow(ReP, 0.825) );
242template<
typename T,
typename Lattice,
template<
typename V>
class Particle>
247 this->
_reP = std::make_shared<PowerLawParticleReynoldsNumber<T,Lattice,Particle> > (this->
_converter, sLattice);
Class to compute the drag coefficient for gas bubbles in a liquid fluid phase as in Dewsbury et al.
DewsburyDragModel(UnitConverter< T, Lattice > &converter)
Constructor.
virtual T operator()(Particle< T > *p, T latticeVelF[], T latticeVelP[], int globicFull[], T continuousPhaseFraction=1.) override
Returns the scalar drag coefficient. globicFull = { globic, latticeRoundedP[0, ......
Abstact class for all the drag models.
UnitConverter< T, Lattice > & _converter
Returns the scalar drag coefficient to overload.
DragModelBase(UnitConverter< T, Lattice > &converter)
Constructor.
std::shared_ptr< ParticleReynoldsNumber< T, Particle > > _reP
Functional to compute particle Reynolds number.
Class to compute the standard drag coefficient as in Morsi and Alexander (1972).
MorsiDragModel(UnitConverter< T, Lattice > &converter)
Constructor.
virtual T operator()(Particle< T > *p, T latticeVelF[], T latticeVelP[], int globicFull[], T continuousPhaseFraction=1.) override
Returns the scalar drag coefficient. globicFull = { globic, latticeRoundedP[0, ......
PowerLawDewsburyDragModel(UnitConverter< T, Lattice > &converter, SuperLattice< T, Lattice > &sLattice)
Constructor.
PowerLawMorsiDragModel(UnitConverter< T, Lattice > &converter, SuperLattice< T, Lattice > &sLattice)
Constructor.
PowerLawSchillerNaumannDragModel(UnitConverter< T, Lattice > &converter, SuperLattice< T, Lattice > &sLattice)
Constructor.
PowerLawSunDragModel(UnitConverter< T, Lattice > &converter, SuperLattice< T, Lattice > &sLattice)
Constructor.
Class to compute the standard drag coefficient as in Schiller and Naumann (1935).
SchillerNaumannDragModel(UnitConverter< T, Lattice > &converter)
Constructor.
virtual T operator()(Particle< T > *p, T latticeVelF[], T latticeVelP[], int globicFull[], T continuousPhaseFraction=1.) override
Returns the scalar drag coefficient. globicFull = { globic, latticeRoundedP[0, ......
StokesSimplifiedDragModel(UnitConverter< T, Lattice > &converter)
Constructor.
virtual T operator()(Particle< T > *p, T latticeVelF[], T latticeVelP[], int globicFull[], T continuousPhaseFraction=1.) override
Returns the scalar drag coefficient. globicFull = { globic, latticeRoundedP[0, ......
Class to compute the drag coefficient for gas bubbles in a liquid fluid phase as in Sun,...
virtual T operator()(Particle< T > *p, T latticeVelF[], T latticeVelP[], int globicFull[], T continuousPhaseFraction=1.) override
Returns the scalar drag coefficient. globicFull = { globic, latticeRoundedP[0, ......
SunDragModel(UnitConverter< T, Lattice > &converter)
Constructor.
Super class maintaining block lattices for a cuboid decomposition.
Conversion between physical and lattice units, as well as discretization.
cpu::simd::Pack< T > sqrt(cpu::simd::Pack< T > value)
cpu::simd::Pack< T > pow(cpu::simd::Pack< T > base, cpu::simd::Pack< T > exp)
Top level namespace for all of OpenLB.