diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/BeetstraDrag/BeetstraDrag.C b/src/lagrangian/cfdemParticle/subModels/forceModel/BeetstraDrag/BeetstraDrag.C index e109976b..c24a85d0 100644 --- a/src/lagrangian/cfdemParticle/subModels/forceModel/BeetstraDrag/BeetstraDrag.C +++ b/src/lagrangian/cfdemParticle/subModels/forceModel/BeetstraDrag/BeetstraDrag.C @@ -57,26 +57,27 @@ BeetstraDrag::BeetstraDrag UsField_(sm.mesh().lookupObject (UsFieldName_)), scaleDia_(1.), scaleDrag_(1.), - polydisperse_(false), - dSauterFieldName_(propsDict_.lookup("dSauterFieldName")), - dSauterField_(sm.mesh().lookupObject (dSauterFieldName_)) + polydisperse_(propsDict_.lookupOrDefault("polydisperse",false)), + dSauterFieldName_(propsDict_.lookupOrDefault("dSauterFieldName",voidfractionFieldName_)), // use voidfractionField as a dummy to prevent lookup failure + dSauterField_(sm.mesh().lookupObject (dSauterFieldName_)) { - if(propsDict_.found("polydisperse")) + if(polydisperse_) { - polydisperse_ = readBool(propsDict_.lookup("polydisperse")); - if(polydisperse_) - { - Info << "Drag model: using polydisperse correction factor \n"; - } + Info << "Drag model: using polydisperse correction factor \n"; + if(!propsDict_.found("dSauterFieldName")) + FatalError << "dSauterFieldName must be specified when polydisperse = true"; } + + //Append the field names to be probed particleCloud_.probeM().initialize(typeName, typeName+".logDat"); particleCloud_.probeM().vectorFields_.append("dragForce"); //first entry must be the force - particleCloud_.probeM().vectorFields_.append("Urelsup"); + particleCloud_.probeM().vectorFields_.append("Urel"); particleCloud_.probeM().scalarFields_.append("Rep"); - particleCloud_.probeM().scalarFields_.append("betaP"); particleCloud_.probeM().scalarFields_.append("voidfraction"); + particleCloud_.probeM().scalarFields_.append("Fdrag"); + particleCloud_.probeM().scalarFields_.append("y_polydisperse"); particleCloud_.probeM().writeHeader(); // init force sub model @@ -124,18 +125,17 @@ void BeetstraDrag::setForce() const vector position(0,0,0); scalar voidfraction(1); vector Ufluid(0,0,0); - vector Ufluidsup(0,0,0); vector drag(0,0,0); label cellI = 0; vector Us(0,0,0); - vector Ursup(0,0,0); + vector Ur(0,0,0); scalar ds(0); scalar ds_scaled(0); scalar scaleDia3 = scaleDia_*scaleDia_*scaleDia_; scalar nuf(0); scalar rho(0); - scalar magUrsup(0); + scalar magUr(0); scalar Rep(0); scalar localPhiP(0); scalar Fdrag(0); @@ -146,8 +146,8 @@ void BeetstraDrag::setForce() const scalar dragCoefficient(0); interpolationCellPoint voidfractionInterpolator_(voidfraction_); - interpolationCellPoint dSauterInterpolator_(dSauterField_); interpolationCellPoint UInterpolator_(U_); + interpolationCellPoint dSauterInterpolator_(dSauterField_); #include "setupProbeModel.H" @@ -157,7 +157,6 @@ void BeetstraDrag::setForce() const drag = vector(0,0,0); dragExplicit = vector(0,0,0); Ufluid = vector(0,0,0); - Ufluidsup = vector(0,0,0); voidfraction = 0; dragCoefficient = 0; @@ -180,10 +179,9 @@ void BeetstraDrag::setForce() const Ufluid = U_[cellI]; } - Ufluidsup = Ufluid*voidfraction; Us = particleCloud_.velocity(index); - Ursup = Ufluidsup-Us; - magUrsup = mag(Ursup); + Ur = Ufluid-Us; + magUr = mag(Ur); ds = 2*particleCloud_.radius(index); ds_scaled = ds/scaleDia_; rho = rhoField[cellI]; @@ -191,7 +189,7 @@ void BeetstraDrag::setForce() const localPhiP = 1.0f-voidfraction+SMALL; // Ur is interstitial velocity, Beetstra uses superficial! - Rep = ds_scaled*magUrsup/nuf+SMALL; + Rep = ds_scaled*voidfraction*magUr/nuf+SMALL; // Beetstra et. al (2007), Eq. (21) Fdrag = 10.0*localPhiP/(voidfraction*voidfraction) @@ -213,23 +211,23 @@ void BeetstraDrag::setForce() const } // calc particle's drag - dragCoefficient = Fdrag*3.0*M_PI*ds_scaled*nuf*rho*scaleDrag_*scaleDia3; + dragCoefficient = Fdrag*3.0*M_PI*ds_scaled*nuf*rho*voidfraction*scaleDia3*scaleDrag_; if (modelType_=="B") dragCoefficient /= voidfraction; - drag = dragCoefficient * Ursup; + drag = dragCoefficient * Ur; // explicitCorr - forceSubM(0).explicitCorr(drag,dragExplicit,dragCoefficient,Ufluidsup,U_[cellI]*voidfraction_[cellI],Us,UsField_[cellI],forceSubM(0).verbose()); + forceSubM(0).explicitCorr(drag,dragExplicit,dragCoefficient,Ufluid,U_[cellI],Us,UsField_[cellI],forceSubM(0).verbose()); if(forceSubM(0).verbose() && index >=0 && index <2) { Pout << "cellI = " << cellI << endl; Pout << "index = " << index << endl; - Pout << "Ufluidsup = " << Ufluidsup << endl; + Pout << "Ufluid = " << Ufluid << endl; Pout << "Us = " << Us << endl; - Pout << "Ursup = " << Ursup << endl; + Pout << "Ur = " << Ur << endl; Pout << "ds = " << ds << endl; Pout << "ds/scale = " << ds/scaleDia_ << endl; Pout << "rho = " << rho << endl; @@ -244,15 +242,17 @@ void BeetstraDrag::setForce() const { #include "setupProbeModelfields.H" vValues.append(drag); //first entry must the be the force - vValues.append(Ursup); + vValues.append(Ur); sValues.append(Rep); sValues.append(voidfraction); + sValues.append(Fdrag); + sValues.append(yi); particleCloud_.probeM().writeProbe(index, sValues, vValues); } } // write particle based data to global array - forceSubM(0).partToArray(index,drag,dragExplicit,Ufluidsup,dragCoefficient); + forceSubM(0).partToArray(index,drag,dragExplicit,Ufluid,dragCoefficient); } } diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/MeiLift/MeiLift.C b/src/lagrangian/cfdemParticle/subModels/forceModel/MeiLift/MeiLift.C index 97cf6509..7472f791 100644 --- a/src/lagrangian/cfdemParticle/subModels/forceModel/MeiLift/MeiLift.C +++ b/src/lagrangian/cfdemParticle/subModels/forceModel/MeiLift/MeiLift.C @@ -81,35 +81,26 @@ MeiLift::MeiLift propsDict_(dict.subDict(typeName + "Props")), velFieldName_(propsDict_.lookup("velFieldName")), U_(sm.mesh().lookupObject (velFieldName_)), - useShearInduced_(true), - useSpinInduced_(false), - combineShearSpin_(false) + useShearInduced_(propsDict_.lookupOrDefault("useShearInduced",true)), + useSpinInduced_(propsDict_.lookupOrDefault("useSpinInduced",false)), + combineShearSpin_(propsDict_.lookupOrDefault("combineShearSpin",false)) { // read switches - if(propsDict_.found("useShearInduced")) - { - useShearInduced_ = readBool(propsDict_.lookup("useShearInduced")); - if(useShearInduced_) - Info << "Lift model: including shear-induced term.\n"; + + if(useShearInduced_) + Info << "Lift model: including shear-induced term.\n"; + + if(useSpinInduced_) + { + Info << "Lift model: including spin-induced term.\n"; + Info << "Make sure to use a rolling friction model in LIGGGHTS!\n"; } - if(propsDict_.found("useSpinInduced")) + + if(combineShearSpin_) { - useSpinInduced_ = readBool(propsDict_.lookup("useSpinInduced")); - if(useSpinInduced_) - { - Info << "Lift model: including spin-induced term.\n"; - Info << "Make sure to use a rolling friction model in LIGGGHTS!\n"; - } - } - if(propsDict_.found("combineShearSpin")) - { - combineShearSpin_ = readBool(propsDict_.lookup("combineShearSpin")); - if(combineShearSpin_) - { - Info << "Lift model: combining shear- and spin-terms by assuming equilibrium spin-rate.\n"; - if(!useShearInduced_ || !useSpinInduced_) - FatalError << "Shear- and spin-induced lift must be activated in order to combine.\n"; - } + Info << "Lift model: combining shear- and spin-terms by assuming equilibrium spin-rate.\n"; + if(!useShearInduced_ || !useSpinInduced_) + FatalError << "Shear- and spin-induced lift must be activated in order to combine.\n"; } // init force sub model diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/virtualMassForce/virtualMassForce.C b/src/lagrangian/cfdemParticle/subModels/forceModel/virtualMassForce/virtualMassForce.C index 3660fc9d..37badab6 100644 --- a/src/lagrangian/cfdemParticle/subModels/forceModel/virtualMassForce/virtualMassForce.C +++ b/src/lagrangian/cfdemParticle/subModels/forceModel/virtualMassForce/virtualMassForce.C @@ -74,9 +74,9 @@ virtualMassForce::virtualMassForce phiFieldName_(propsDict_.lookup("phiFieldName")), phi_(sm.mesh().lookupObject (phiFieldName_)), UrelOld_(NULL), - splitUrelCalculation_(false), - useUs_(false), - useFelderhof_(false), + splitUrelCalculation_(propsDict_.lookupOrDefault("splitUrelCalculation",false)), + useUs_(propsDict_.lookupOrDefault("useUs",false)), + useFelderhof_(propsDict_.lookupOrDefault("useFelderhof",false)), Cadd_(0.5) { @@ -94,37 +94,25 @@ virtualMassForce::virtualMassForce forceSubM(0).readSwitches(); //Extra switches/settings - if(propsDict_.found("splitUrelCalculation")) + if(splitUrelCalculation_) { - splitUrelCalculation_ = readBool(propsDict_.lookup("splitUrelCalculation")); - if(splitUrelCalculation_) - { - Info << "Virtual mass model: will split the Urel calculation\n"; - Info << "WARNING: be sure that LIGGGHTS integration takes ddtv_p implicitly into account! \n"; - } + Info << "Virtual mass model: will split the Urel calculation\n"; + Info << "WARNING: be sure that LIGGGHTS integration takes ddtv_p implicitly into account! \n"; } if(propsDict_.found("Cadd")) { Cadd_ = readScalar(propsDict_.lookup("Cadd")); Info << "Virtual mass model: using non-standard Cadd = " << Cadd_ << endl; } - if(propsDict_.found("useUs")) + if(useUs_) { - useUs_ = readBool(propsDict_.lookup("useUs")); - if(useUs_) - { - Info << "Virtual mass model: using averaged Us \n"; - Info << "WARNING: ignoring virtual mass of relative particle motion/collisions \n"; - } + Info << "Virtual mass model: using averaged Us \n"; + Info << "WARNING: ignoring virtual mass of relative particle motion/collisions \n"; } - if(propsDict_.found("useFelderhof")) + if(useFelderhof_) { - useFelderhof_ = readBool(propsDict_.lookup("useFelderhof")); - if(useFelderhof_) - { - Info << "Virtual mass model: using Cadd correlation by Felderhof \n"; - Info << "WARNING: ignoring user-set Cadd \n"; - } + Info << "Virtual mass model: using Cadd correlation by Felderhof \n"; + Info << "WARNING: ignoring user-set Cadd \n"; } particleCloud_.checkCG(true);