From b34106b6f43f16ef1ad036d61fa2b215094c0cc5 Mon Sep 17 00:00:00 2001 From: graham Date: Thu, 3 Mar 2011 10:50:59 +0000 Subject: [PATCH 01/37] ENH: Rename incompressible -> ico, using CollidingCloud. --- .../Make/files | 3 + .../Make/options | 1 + .../icoUncoupledKinematicParcelDyMFoam.C} | 2 +- .../Make/files | 3 + .../Make/options | 0 .../createFields.H | 2 +- .../icoUncoupledKinematicParcelFoam.C} | 2 +- .../Make/files | 3 - .../createFields.H | 147 ------------------ .../Make/files | 3 - 10 files changed, 10 insertions(+), 156 deletions(-) create mode 100644 applications/solvers/lagrangian/icoUncoupledKinematicParcelDyMFoam/Make/files rename applications/solvers/lagrangian/{incompressibleUncoupledKinematicParcelDyMFoam => icoUncoupledKinematicParcelDyMFoam}/Make/options (96%) rename applications/solvers/lagrangian/{incompressibleUncoupledKinematicParcelDyMFoam/incompressibleUncoupledKinematicParcelDyMFoam.C => icoUncoupledKinematicParcelDyMFoam/icoUncoupledKinematicParcelDyMFoam.C} (98%) create mode 100644 applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/Make/files rename applications/solvers/lagrangian/{incompressibleUncoupledKinematicParcelFoam => icoUncoupledKinematicParcelFoam}/Make/options (100%) rename applications/solvers/lagrangian/{incompressibleUncoupledKinematicParcelFoam => icoUncoupledKinematicParcelFoam}/createFields.H (98%) rename applications/solvers/lagrangian/{incompressibleUncoupledKinematicParcelFoam/incompressibleUncoupledKinematicParcelFoam.C => icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelFoam.C} (98%) delete mode 100644 applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelDyMFoam/Make/files delete mode 100644 applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelDyMFoam/createFields.H delete mode 100644 applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelFoam/Make/files diff --git a/applications/solvers/lagrangian/icoUncoupledKinematicParcelDyMFoam/Make/files b/applications/solvers/lagrangian/icoUncoupledKinematicParcelDyMFoam/Make/files new file mode 100644 index 0000000000..2cce02e105 --- /dev/null +++ b/applications/solvers/lagrangian/icoUncoupledKinematicParcelDyMFoam/Make/files @@ -0,0 +1,3 @@ +icoUncoupledKinematicParcelDyMFoam.C + +EXE = $(FOAM_APPBIN)/icoUncoupledKinematicParcelDyMFoam diff --git a/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelDyMFoam/Make/options b/applications/solvers/lagrangian/icoUncoupledKinematicParcelDyMFoam/Make/options similarity index 96% rename from applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelDyMFoam/Make/options rename to applications/solvers/lagrangian/icoUncoupledKinematicParcelDyMFoam/Make/options index 34ba95f0dc..7b471b791a 100644 --- a/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelDyMFoam/Make/options +++ b/applications/solvers/lagrangian/icoUncoupledKinematicParcelDyMFoam/Make/options @@ -1,4 +1,5 @@ EXE_INC = \ + -I../icoUncoupledKinematicParcelFoam \ -I$(LIB_SRC)/lagrangian/basic/lnInclude \ -I$(LIB_SRC)/lagrangian/intermediate/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ diff --git a/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelDyMFoam/incompressibleUncoupledKinematicParcelDyMFoam.C b/applications/solvers/lagrangian/icoUncoupledKinematicParcelDyMFoam/icoUncoupledKinematicParcelDyMFoam.C similarity index 98% rename from applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelDyMFoam/incompressibleUncoupledKinematicParcelDyMFoam.C rename to applications/solvers/lagrangian/icoUncoupledKinematicParcelDyMFoam/icoUncoupledKinematicParcelDyMFoam.C index 40b642a284..3feff6db77 100644 --- a/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelDyMFoam/incompressibleUncoupledKinematicParcelDyMFoam.C +++ b/applications/solvers/lagrangian/icoUncoupledKinematicParcelDyMFoam/icoUncoupledKinematicParcelDyMFoam.C @@ -36,7 +36,7 @@ Description #include "dynamicFvMesh.H" #include "singlePhaseTransportModel.H" #include "turbulenceModel.H" -#include "basicKinematicCloud.H" +#include "basicKinematicCollidingCloud.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/Make/files b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/Make/files new file mode 100644 index 0000000000..95c98aff1d --- /dev/null +++ b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/Make/files @@ -0,0 +1,3 @@ +icoUncoupledKinematicParcelFoam.C + +EXE = $(FOAM_APPBIN)/icoUncoupledKinematicParcelFoam diff --git a/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelFoam/Make/options b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/Make/options similarity index 100% rename from applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelFoam/Make/options rename to applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/Make/options diff --git a/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelFoam/createFields.H b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/createFields.H similarity index 98% rename from applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelFoam/createFields.H rename to applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/createFields.H index 31be0cf8ee..169bf78172 100644 --- a/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelFoam/createFields.H +++ b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/createFields.H @@ -75,7 +75,7 @@ args.optionReadIfPresent("cloudName", kinematicCloudName); Info<< "Constructing kinematicCloud " << kinematicCloudName << endl; - basicKinematicCloud kinematicCloud + basicKinematicCollidingCloud kinematicCloud ( kinematicCloudName, rhoInf, diff --git a/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelFoam/incompressibleUncoupledKinematicParcelFoam.C b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelFoam.C similarity index 98% rename from applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelFoam/incompressibleUncoupledKinematicParcelFoam.C rename to applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelFoam.C index 34d1d3adaa..748e192dd2 100644 --- a/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelFoam/incompressibleUncoupledKinematicParcelFoam.C +++ b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelFoam.C @@ -35,7 +35,7 @@ Description #include "fvCFD.H" #include "singlePhaseTransportModel.H" #include "turbulenceModel.H" -#include "basicKinematicCloud.H" +#include "basicKinematicCollidingCloud.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelDyMFoam/Make/files b/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelDyMFoam/Make/files deleted file mode 100644 index e233a549b8..0000000000 --- a/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelDyMFoam/Make/files +++ /dev/null @@ -1,3 +0,0 @@ -incompressibleUncoupledKinematicParcelDyMFoam.C - -EXE = $(FOAM_APPBIN)/incompressibleUncoupledKinematicParcelDyMFoam diff --git a/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelDyMFoam/createFields.H b/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelDyMFoam/createFields.H deleted file mode 100644 index 31be0cf8ee..0000000000 --- a/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelDyMFoam/createFields.H +++ /dev/null @@ -1,147 +0,0 @@ - Info<< "\nReading transportProperties\n" << endl; - - IOdictionary transportProperties - ( - IOobject - ( - "transportProperties", - runTime.constant(), - mesh, - IOobject::MUST_READ_IF_MODIFIED, - IOobject::NO_WRITE - ) - ); - - dimensionedScalar rhoInfValue - ( - transportProperties.lookup("rhoInf") - ); - - volScalarField rhoInf - ( - IOobject - ( - "rho", - runTime.timeName(), - mesh, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - mesh, - rhoInfValue - ); - - Info<< "Reading field U\n" << endl; - volVectorField U - ( - IOobject - ( - "U", - runTime.timeName(), - mesh, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh - ); - - #include "createPhi.H" - - Info<< "Creating turbulence model\n" << endl; - - singlePhaseTransportModel laminarTransport(U, phi); - - const volScalarField nu(laminarTransport.nu()); - - autoPtr turbulence - ( - incompressible::turbulenceModel::New(U, phi, laminarTransport) - ); - - volScalarField mu - ( - IOobject - ( - "mu", - runTime.timeName(), - mesh, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - nu*rhoInfValue - ); - - word kinematicCloudName("kinematicCloud"); - args.optionReadIfPresent("cloudName", kinematicCloudName); - - Info<< "Constructing kinematicCloud " << kinematicCloudName << endl; - basicKinematicCloud kinematicCloud - ( - kinematicCloudName, - rhoInf, - U, - mu, - g - ); - - IOobject Hheader - ( - "H", - runTime.timeName(), - mesh, - IOobject::NO_READ - ); - - autoPtr HPtr_; - - if (Hheader.headerOk()) - { - Info<< "\nReading field H\n" << endl; - - HPtr_.reset - ( - new volVectorField - ( - IOobject - ( - "H", - runTime.timeName(), - mesh, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh - ) - ); - } - - IOobject HdotGradHheader - ( - "HdotGradH", - runTime.timeName(), - mesh, - IOobject::NO_READ - ); - - autoPtr HdotGradHPtr_; - - if (HdotGradHheader.headerOk()) - { - Info<< "Reading field HdotGradH" << endl; - - HdotGradHPtr_.reset - ( - new volVectorField - ( - IOobject - ( - "HdotGradH", - runTime.timeName(), - mesh, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh - ) - ); - } diff --git a/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelFoam/Make/files b/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelFoam/Make/files deleted file mode 100644 index 7a27f008c8..0000000000 --- a/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelFoam/Make/files +++ /dev/null @@ -1,3 +0,0 @@ -incompressibleUncoupledKinematicParcelFoam.C - -EXE = $(FOAM_APPBIN)/incompressibleUncoupledKinematicParcelFoam From 467eb90a7189df973234adbb053334379457582e Mon Sep 17 00:00:00 2001 From: graham Date: Thu, 3 Mar 2011 11:19:29 +0000 Subject: [PATCH 02/37] BUG: mass multiples both terms in SRF. --- .../submodels/Kinematic/ParticleForces/SRF/SRFForce.C | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/SRF/SRFForce.C b/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/SRF/SRFForce.C index 2f9ca986b4..e06789f3fb 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/SRF/SRFForce.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/SRF/SRFForce.C @@ -97,7 +97,7 @@ Foam::forceSuSp Foam::SRFForce::calcNonCoupled const vector r = p.position() - axis*(axis & p.position()); // Coriolis and centrifugal acceleration terms - value.Su() = mass*2.0*(p.U() ^ omega) + (omega ^ (r ^ omega)); + value.Su() = mass*(2.0*(p.U() ^ omega) + (omega ^ (r ^ omega))); return value; } From d7ff7c838134a9f45e544f7b93b18cb1c11227f3 Mon Sep 17 00:00:00 2001 From: andy Date: Thu, 3 Mar 2011 15:19:12 +0000 Subject: [PATCH 03/37] ENH: further updates to semi-implicit cloud source calcs --- .../clouds/Templates/KinematicCloud/KinematicCloud.C | 10 +++++----- .../clouds/Templates/KinematicCloud/KinematicCloudI.H | 8 ++++---- .../KinematicCloud/cloudSolution/cloudSolution.H | 5 ++++- .../KinematicCloud/cloudSolution/cloudSolutionI.H | 8 +++++++- .../clouds/Templates/ReactingCloud/ReactingCloudI.H | 10 +++++----- .../clouds/Templates/ThermoCloud/ThermoCloud.C | 2 +- .../clouds/Templates/ThermoCloud/ThermoCloudI.H | 8 +++++--- .../Templates/KinematicParcel/KinematicParcel.C | 2 +- .../parcels/Templates/ThermoParcel/ThermoParcel.C | 2 +- .../InjectionModel/InjectionModel/InjectionModel.C | 2 +- .../PatchInteractionModel/PatchInteractionModel.C | 4 ++-- 11 files changed, 36 insertions(+), 25 deletions(-) diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C index 3e49d29cd5..26cae658c6 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C @@ -218,10 +218,10 @@ void Foam::KinematicCloud::evolveCloud(TrackData& td) { // this->surfaceFilm().injectSteadyState(td); - this->injection().injectSteadyState(td, solution_.deltaT()); + this->injection().injectSteadyState(td, solution_.deltaTValue()); td.part() = TrackData::tpLinearTrack; - CloudType::move(td, solution_.deltaT()); + CloudType::move(td, solution_.deltaTValue()); } } @@ -353,7 +353,7 @@ Foam::KinematicCloud::KinematicCloud IOobject::AUTO_WRITE ), mesh_, - dimensionedScalar("zero", dimMass/dimTime, 0.0) + dimensionedScalar("zero", dimMass, 0.0) ) ) { @@ -504,7 +504,7 @@ void Foam::KinematicCloud::checkParcelProperties parcel.rho() = constProps_.rho0(); } - const scalar carrierDt = solution_.deltaT(); + const scalar carrierDt = solution_.deltaTValue(); parcel.stepFraction() = (carrierDt - lagrangianDt)/carrierDt; parcel.typeId() = constProps_.parcelTypeId(); } @@ -582,7 +582,7 @@ template void Foam::KinematicCloud::motion(TrackData& td) { td.part() = TrackData::tpLinearTrack; - CloudType::move(td, solution_.deltaT()); + CloudType::move(td, solution_.deltaTValue()); updateCellOccupancy(); } diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H index 681712f6e4..5987192bfd 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H @@ -332,10 +332,10 @@ Foam::KinematicCloud::SU(volVectorField& U) const { if (solution_.semiImplicit("U")) { - return - UTrans()/(mesh_.V()*this->db().time().deltaT()) - - fvm::Sp(UCoeff()/mesh_.V(), U) - + UCoeff()/mesh_.V()*U; + const DimensionedField + Vdt(mesh_.V()*this->db().time().deltaT()); + + return UTrans()/Vdt - fvm::Sp(UCoeff()/Vdt, U) + UCoeff()/Vdt*U; } else { diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.H index 1162df6506..cb1c8330b3 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.H +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.H @@ -169,7 +169,10 @@ public: inline label nextIter(); //- Return the time step - inline scalar deltaT() const; + inline scalar deltaTValue() const; + + //- Return the time step + inline const dimensionedScalar deltaT() const; //- Return const access to the coupled flag inline const Switch coupled() const; diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolutionI.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolutionI.H index 37aad4dbdf..a5da04150d 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolutionI.H +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolutionI.H @@ -95,12 +95,18 @@ inline Foam::label Foam::cloudSolution::nextIter() } -inline Foam::scalar Foam::cloudSolution::deltaT() const +inline Foam::scalar Foam::cloudSolution::deltaTValue() const { return deltaT_; } +inline const Foam::dimensionedScalar Foam::cloudSolution::deltaT() const +{ + return dimensionedScalar("cloudSolution::deltaT", dimTime, deltaT_); +} + + inline const Foam::Switch Foam::cloudSolution::coupled() const { return coupled_; diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloudI.H b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloudI.H index 79b66f87ff..52c33017f3 100644 --- a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloudI.H +++ b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloudI.H @@ -114,7 +114,7 @@ inline Foam::tmp Foam::ReactingCloud::SYi volScalarField& sourceField = trhoTrans(); sourceField.internalField() = - rhoTrans_[i]/(this->db().time().deltaT()*this->mesh().V()); + rhoTrans_[i]/(this->db().time().deltaTValue()*this->mesh().V()); const dimensionedScalar YiSMALL("YiSMALL", dimless, SMALL); @@ -127,7 +127,7 @@ inline Foam::tmp Foam::ReactingCloud::SYi tmp tfvm(new fvScalarMatrix(Yi, dimMass/dimTime)); fvScalarMatrix& fvm = tfvm(); - fvm.source() = -rhoTrans_[i]/this->db().time().deltaT(); + fvm.source() = -rhoTrans_[i]/this->db().time().deltaTValue(); return tfvm; } @@ -167,7 +167,7 @@ Foam::ReactingCloud::Srho(const label i) const if (this->solution().coupled()) { scalarField& rhoi = tRhoi(); - rhoi = rhoTrans_[i]/(this->db().time().deltaT()*this->mesh().V()); + rhoi = rhoTrans_[i]/(this->db().time().deltaTValue()*this->mesh().V()); } return tRhoi; @@ -209,7 +209,7 @@ Foam::ReactingCloud::Srho() const sourceField += rhoTrans_[i]; } - sourceField /= this->db().time().deltaT()*this->mesh().V(); + sourceField /= this->db().time().deltaTValue()*this->mesh().V(); } return trhoTrans; @@ -249,7 +249,7 @@ Foam::ReactingCloud::Srho(volScalarField& rho) const { sourceField += rhoTrans_[i]; } - sourceField /= this->db().time().deltaT()*this->mesh().V(); + sourceField /= this->db().time().deltaTValue()*this->mesh().V(); return fvm::SuSp(trhoTrans()/rho, rho); } diff --git a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C index 2dbe453580..e0365b54e2 100644 --- a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C +++ b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C @@ -127,7 +127,7 @@ Foam::ThermoCloud::ThermoCloud IOobject::AUTO_WRITE ), this->mesh(), - dimensionedScalar("zero", dimEnergy/dimTime/dimTemperature, 0.0) + dimensionedScalar("zero", dimEnergy/dimTemperature, 0.0) ) ) diff --git a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloudI.H b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloudI.H index c774133cb0..6889385431 100644 --- a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloudI.H +++ b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloudI.H @@ -138,11 +138,13 @@ Foam::ThermoCloud::Sh(volScalarField& hs) const if (this->solution().semiImplicit("hs")) { const volScalarField Cp(thermo_.thermo().Cp()); + const DimensionedField + Vdt(this->mesh().V()*this->db().time().deltaT()); return - hsTrans()/(this->mesh().V()*this->db().time().deltaT()) - - fvm::Sp(hsCoeff()/(Cp*this->mesh().V()), hs) - + hsCoeff()/(Cp*this->mesh().V())*hs; + hsTrans()/Vdt + - fvm::Sp(hsCoeff()/(Cp*Vdt), hs) + + hsCoeff()/(Cp*Vdt)*hs; } else { diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C index 0a3e05d200..40e3efcb73 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C @@ -202,7 +202,7 @@ const Foam::vector Foam::KinematicParcel::calcVelocity const vector abp = (Feff.Sp()*Uc_ + (Feff.Su() + Su))/mass; const scalar bp = Feff.Sp()/mass; - Spu = Feff.Sp()*dt/td.cloud().solution().deltaT(); + Spu = dt*Feff.Sp(); IntegrationScheme::integrationResult Ures = td.cloud().UIntegrator().integrate(U, dt, abp, bp); diff --git a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.C b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.C index 9df054c2d0..53a8e5545e 100644 --- a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.C +++ b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.C @@ -339,7 +339,7 @@ Foam::scalar Foam::ThermoParcel::calcHeatTransfer dhsTrans += dt*htc*As*(0.5*(T + Tnew) - Tc_); - Cuh = bp*dt/td.cloud().solution().deltaT(); + Cuh = dt*bp; return Tnew; } diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C index 5bf1c140c3..fb077dba51 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C @@ -520,7 +520,7 @@ void Foam::InjectionModel::inject(TrackData& td) } const scalar time = this->owner().db().time().value(); - const scalar carrierDt = this->owner().solution().deltaT(); + const scalar carrierDt = this->owner().solution().deltaTValue(); const polyMesh& mesh = this->owner().mesh(); // Prepare for next time step diff --git a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.C b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.C index 3236774c18..70e440b0c3 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.C @@ -290,7 +290,7 @@ void Foam::PatchInteractionModel::patchData } else { - Up = (Cf - Cf00)/this->owner().solution().deltaT(); + Up = (Cf - Cf00)/this->owner().time().deltaTValue(); } if (mag(dn) > SMALL) @@ -314,7 +314,7 @@ void Foam::PatchInteractionModel::patchData // angle/dt to give the correct angular velocity vector. omega *= Foam::asin(magOmega) - /(magOmega*this->owner().solution().deltaT()); + /(magOmega*this->owner().time().deltaTValue()); // Project position onto face and calculate this position // relative to the face centre. From 5504a2a4fc5738b40b72aaa9d7d5f66d324c7fcd Mon Sep 17 00:00:00 2001 From: andy Date: Thu, 3 Mar 2011 15:26:01 +0000 Subject: [PATCH 04/37] BUG: corrected pressure non-ortho loops when using correction(ddt(p)) --- .../solvers/combustion/rhoReactingFoam/pEqn.H | 18 ++++++++++++++---- .../heatTransfer/buoyantPimpleFoam/pEqn.H | 9 +++++++-- .../lagrangian/LTSReactingParcelFoam/pEqn.H | 4 ++-- .../pEqn.H | 15 ++++++++++----- 4 files changed, 33 insertions(+), 13 deletions(-) diff --git a/applications/solvers/combustion/rhoReactingFoam/pEqn.H b/applications/solvers/combustion/rhoReactingFoam/pEqn.H index f11c979224..ee03ece751 100644 --- a/applications/solvers/combustion/rhoReactingFoam/pEqn.H +++ b/applications/solvers/combustion/rhoReactingFoam/pEqn.H @@ -24,12 +24,17 @@ fvc::interpolate(thermo.psi())*phiv ); + fvScalarMatrix pDDtEqn + ( + fvc::ddt(rho) + fvc::div(phi) + + correction(fvm::ddt(psi, p) + fvm::div(phid, p)) + ); + for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { fvScalarMatrix pEqn ( - fvc::ddt(rho) + fvc::div(phi) - + correction(fvm::ddt(psi, p) + fvm::div(phid, p)) + pDDtEqn - fvm::laplacian(rho*rAU, p) ); @@ -63,12 +68,17 @@ + fvc::ddtPhiCorr(rAU, rho, U, phi) ); + fvScalarMatrix pDDtEqn + ( + fvc::ddt(rho) + psi*correction(fvm::ddt(p)) + + fvc::div(phi) + ); + for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { fvScalarMatrix pEqn ( - fvc::ddt(rho) + psi*correction(fvm::ddt(p)) - + fvc::div(phi) + pDDtEqn - fvm::laplacian(rho*rAU, p) ); diff --git a/applications/solvers/heatTransfer/buoyantPimpleFoam/pEqn.H b/applications/solvers/heatTransfer/buoyantPimpleFoam/pEqn.H index 768876c316..c6d1ad5e3c 100644 --- a/applications/solvers/heatTransfer/buoyantPimpleFoam/pEqn.H +++ b/applications/solvers/heatTransfer/buoyantPimpleFoam/pEqn.H @@ -19,12 +19,17 @@ surfaceScalarField buoyancyPhi(-rhorAUf*ghf*fvc::snGrad(rho)*mesh.magSf()); phi += buoyancyPhi; + fvScalarMatrix p_rghDDtEqn + ( + fvc::ddt(rho) + psi*correction(fvm::ddt(p_rgh)) + + fvc::div(phi) + ); + for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { fvScalarMatrix p_rghEqn ( - fvc::ddt(rho) + psi*correction(fvm::ddt(p_rgh)) - + fvc::div(phi) + p_rghDDtEqn - fvm::laplacian(rhorAUf, p_rgh) ); diff --git a/applications/solvers/lagrangian/LTSReactingParcelFoam/pEqn.H b/applications/solvers/lagrangian/LTSReactingParcelFoam/pEqn.H index fccb98c8cb..9fb91f1d36 100644 --- a/applications/solvers/lagrangian/LTSReactingParcelFoam/pEqn.H +++ b/applications/solvers/lagrangian/LTSReactingParcelFoam/pEqn.H @@ -23,7 +23,7 @@ ); } - fvScalarMatrix DrhoDtEqn + fvScalarMatrix pDDtEqn ( fvc::ddt(rho) + psi*correction(fvm::ddt(p)) + fvc::div(phi) @@ -36,7 +36,7 @@ { fvScalarMatrix pEqn ( - DrhoDtEqn + pDDtEqn - fvm::laplacian(rho*rAU, p) ); diff --git a/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/pEqn.H b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/pEqn.H index 4a28b0dd94..e173fa858b 100644 --- a/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/pEqn.H +++ b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/pEqn.H @@ -23,16 +23,21 @@ ); } + fvScalarMatrix pDDtEqn + ( + fvc::ddt(rho) + psi*correction(fvm::ddt(p)) + + fvc::div(phi) + == + parcels.Srho() + + massSource.SuTot() + ); + for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { fvScalarMatrix pEqn ( - fvc::ddt(rho) + psi*correction(fvm::ddt(p)) - + fvc::div(phi) + pDDtEqn - fvm::laplacian(rho*rAU, p) - == - parcels.Srho() - + massSource.SuTot() ); if (corr == nCorr-1 && nonOrth == nNonOrthCorr) From 7b7edab94947b6e8560422be3326643f1053f19c Mon Sep 17 00:00:00 2001 From: mattijs Date: Thu, 3 Mar 2011 18:28:28 +0000 Subject: [PATCH 05/37] ENH: triSurface: disable warning message if not verbose --- src/triSurface/triSurface/triSurface.C | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/triSurface/triSurface/triSurface.C b/src/triSurface/triSurface/triSurface.C index 538d10c0eb..ec82fddc88 100644 --- a/src/triSurface/triSurface/triSurface.C +++ b/src/triSurface/triSurface/triSurface.C @@ -327,7 +327,7 @@ void Foam::triSurface::checkEdges(const bool verbose) << " has no edgeFaces" << exit(FatalError); } - else if (myFaces.size() > 2) + else if (myFaces.size() > 2 && verbose) { WarningIn ( From 996b1bb5f55f587ba6f38716a0265fd94febb654 Mon Sep 17 00:00:00 2001 From: mattijs Date: Thu, 3 Mar 2011 18:31:23 +0000 Subject: [PATCH 06/37] BUG: fvMeshGeometry.C: not register fvMesh.Sf() ("S") --- src/finiteVolume/fvMesh/fvMeshGeometry.C | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/finiteVolume/fvMesh/fvMeshGeometry.C b/src/finiteVolume/fvMesh/fvMeshGeometry.C index f2007115c8..93d4efb212 100644 --- a/src/finiteVolume/fvMesh/fvMeshGeometry.C +++ b/src/finiteVolume/fvMesh/fvMeshGeometry.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -64,7 +64,10 @@ void fvMesh::makeSf() const "S", pointsInstance(), meshSubDir, - *this + *this, + IOobject::NO_READ, + IOobject::NO_WRITE, + false ), *this, dimArea, From 9ba2eb30b828c5265b5516927b0165b8d6540e3e Mon Sep 17 00:00:00 2001 From: mattijs Date: Thu, 3 Mar 2011 18:31:33 +0000 Subject: [PATCH 07/37] ENH: ReleaseNotes-dev: snappyHxMesh differences --- ReleaseNotes-dev | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ReleaseNotes-dev b/ReleaseNotes-dev index 7583a3d999..2e9a025ec8 100644 --- a/ReleaseNotes-dev +++ b/ReleaseNotes-dev @@ -240,6 +240,13 @@ + =snappyHexMesh=: + extrude across multi-processor boundaries + preserve faceZones during layering + + *Warning*: + - minMedianAxisAngle angle fixed w.r.t. 17x. Set to + 90 to get same behaviour as 130 in 17x. + - nGrow did not work in 17x. Set to 0 + to get same behaviour as 130 in 17x. + - new minTetQuality setting (see tracking). Disable for 17x + compatibility. * Post-processing + =paraFoam=, =foamToVTK=: full support for polyhedral cell type in recent Paraview versions. From a9d0a6d02b35e183116f91cf05cf0c31d8a7b58b Mon Sep 17 00:00:00 2001 From: graham Date: Fri, 4 Mar 2011 13:45:25 +0000 Subject: [PATCH 08/37] ENH: Non-inertial reference frame particle force. --- .../createFields.H | 44 +--- .../createNonInertialFrameFields.H | 110 ++++++++ .../UniformDimensionedField.C | 2 +- .../Templates/KinematicCloud/KinematicCloud.H | 2 + .../KinematicCloud/KinematicCloudI.H | 7 + .../parcels/include/makeParcelForces.H | 2 + .../parcels/include/makeThermoParcelForces.H | 2 + .../ParticleForces/Gravity/GravityForce.H | 2 +- .../NonInertialFrame/NonInertialFrameForce.C | 243 ++++++++++++++++++ .../NonInertialFrame/NonInertialFrameForce.H | 186 ++++++++++++++ .../NonInertialFrame/NonInertialFrameForceI.H | 73 ++++++ .../Kinematic/ParticleForces/SRF/SRFForce.H | 1 - 12 files changed, 637 insertions(+), 37 deletions(-) create mode 100644 applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/createNonInertialFrameFields.H create mode 100644 src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/NonInertialFrame/NonInertialFrameForce.C create mode 100644 src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/NonInertialFrame/NonInertialFrameForce.H create mode 100644 src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/NonInertialFrame/NonInertialFrameForceI.H diff --git a/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/createFields.H b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/createFields.H index 169bf78172..9ef9d6a1a0 100644 --- a/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/createFields.H +++ b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/createFields.H @@ -89,30 +89,17 @@ "H", runTime.timeName(), mesh, - IOobject::NO_READ + IOobject::MUST_READ, + IOobject::AUTO_WRITE ); - autoPtr HPtr_; + autoPtr HPtr; if (Hheader.headerOk()) { Info<< "\nReading field H\n" << endl; - HPtr_.reset - ( - new volVectorField - ( - IOobject - ( - "H", - runTime.timeName(), - mesh, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh - ) - ); + HPtr.reset(new volVectorField (Hheader, mesh)); } IOobject HdotGradHheader @@ -120,28 +107,17 @@ "HdotGradH", runTime.timeName(), mesh, - IOobject::NO_READ + IOobject::MUST_READ, + IOobject::AUTO_WRITE ); - autoPtr HdotGradHPtr_; + autoPtr HdotGradHPtr; if (HdotGradHheader.headerOk()) { Info<< "Reading field HdotGradH" << endl; - HdotGradHPtr_.reset - ( - new volVectorField - ( - IOobject - ( - "HdotGradH", - runTime.timeName(), - mesh, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh - ) - ); + HdotGradHPtr.reset(new volVectorField(HdotGradHheader, mesh)); } + + #include "createNonInertialFrameFields.H" diff --git a/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/createNonInertialFrameFields.H b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/createNonInertialFrameFields.H new file mode 100644 index 0000000000..42304ddcb8 --- /dev/null +++ b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/createNonInertialFrameFields.H @@ -0,0 +1,110 @@ + Info<< "Reading non-inertial frame fields" << endl; + + IOobject linearAccelerationHeader + ( + "linearAcceleration", + runTime.timeName(), + mesh, + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ); + + autoPtr linearAccelerationPtr; + + if (linearAccelerationHeader.headerOk()) + { + Info<< " Reading " << linearAccelerationHeader.name() << endl; + + linearAccelerationPtr.reset + ( + new uniformDimensionedVectorField(linearAccelerationHeader) + ); + } + + + IOobject angularVelocityMagHeader + ( + "angularVelocityMag", + runTime.timeName(), + mesh, + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ); + + autoPtr angularVelocityMagPtr; + + if (angularVelocityMagHeader.headerOk()) + { + Info<< " Reading " << angularVelocityMagHeader.name() << endl; + + angularVelocityMagPtr.reset + ( + new uniformDimensionedScalarField(angularVelocityMagHeader) + ); + } + + + IOobject angularAccelerationHeader + ( + "angularAcceleration", + runTime.timeName(), + mesh, + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ); + + autoPtr angularAccelerationPtr; + + if (angularAccelerationHeader.headerOk()) + { + Info<< " Reading " << angularAccelerationHeader.name() << endl; + + angularAccelerationPtr.reset + ( + new uniformDimensionedVectorField(angularAccelerationHeader) + ); + } + + + IOobject axisHeader + ( + "axis", + runTime.timeName(), + mesh, + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ); + + autoPtr axisPtr; + + if (axisHeader.headerOk()) + { + Info<< " Reading " << axisHeader.name() << endl; + + axisPtr.reset + ( + new uniformDimensionedVectorField(axisHeader) + ); + } + + + IOobject axisRefPointHeader + ( + "axisRefPoint", + runTime.timeName(), + mesh, + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ); + + autoPtr axisRefPointPtr; + + if (axisRefPointHeader.headerOk()) + { + Info<< " Reading " << axisRefPointHeader.name() << endl; + + axisRefPointPtr.reset + ( + new uniformDimensionedVectorField(axisRefPointHeader) + ); + } diff --git a/src/OpenFOAM/fields/UniformDimensionedFields/UniformDimensionedField.C b/src/OpenFOAM/fields/UniformDimensionedFields/UniformDimensionedField.C index 14ecb4bc3f..921a5976c3 100644 --- a/src/OpenFOAM/fields/UniformDimensionedFields/UniformDimensionedField.C +++ b/src/OpenFOAM/fields/UniformDimensionedFields/UniformDimensionedField.C @@ -61,7 +61,7 @@ Foam::UniformDimensionedField::UniformDimensionedField { dictionary dict(readStream(typeName)); this->dimensions().reset(dict.lookup("dimensions")); - this->value() = dict.lookup("value"); + dict.lookup("value") >> this->value(); } diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H index 5a124609f6..1ab7054e77 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H @@ -304,6 +304,8 @@ public: //- Return a reference to the cloud copy inline const KinematicCloud& cloudCopy() const; + inline bool hasWallImpactDistance() const; + // References to the mesh and databases diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H index 681712f6e4..2360b4ceab 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H @@ -35,6 +35,13 @@ Foam::KinematicCloud::cloudCopy() const } +template +inline bool Foam::KinematicCloud::hasWallImpactDistance() const +{ + return true; +} + + template inline const Foam::fvMesh& Foam::KinematicCloud::mesh() const { diff --git a/src/lagrangian/intermediate/parcels/include/makeParcelForces.H b/src/lagrangian/intermediate/parcels/include/makeParcelForces.H index 9ae02038aa..cc824fd038 100644 --- a/src/lagrangian/intermediate/parcels/include/makeParcelForces.H +++ b/src/lagrangian/intermediate/parcels/include/makeParcelForces.H @@ -32,6 +32,7 @@ License #include "NonSphereDragForce.H" #include "GravityForce.H" +#include "NonInertialFrameForce.H" #include "ParamagneticForce.H" #include "PressureGradientForce.H" #include "SRFForce.H" @@ -44,6 +45,7 @@ License makeParticleForceModelType(SphereDragForce, CloudType); \ makeParticleForceModelType(NonSphereDragForce, CloudType); \ makeParticleForceModelType(GravityForce, CloudType); \ + makeParticleForceModelType(NonInertialFrameForce, CloudType); \ makeParticleForceModelType(ParamagneticForce, CloudType); \ makeParticleForceModelType(PressureGradientForce, CloudType); \ makeParticleForceModelType(SRFForce, CloudType); diff --git a/src/lagrangian/intermediate/parcels/include/makeThermoParcelForces.H b/src/lagrangian/intermediate/parcels/include/makeThermoParcelForces.H index 45b4a86215..fd20d0191d 100644 --- a/src/lagrangian/intermediate/parcels/include/makeThermoParcelForces.H +++ b/src/lagrangian/intermediate/parcels/include/makeThermoParcelForces.H @@ -33,6 +33,7 @@ License #include "BrownianMotionForce.H" #include "GravityForce.H" +#include "NonInertialFrameForce.H" #include "ParamagneticForce.H" #include "PressureGradientForce.H" #include "SRFForce.H" @@ -46,6 +47,7 @@ License makeParticleForceModelType(NonSphereDragForce, CloudType); \ makeParticleForceModelType(BrownianMotionForce, CloudType); \ makeParticleForceModelType(GravityForce, CloudType); \ + makeParticleForceModelType(NonInertialFrameForce, CloudType); \ makeParticleForceModelType(ParamagneticForce, CloudType); \ makeParticleForceModelType(PressureGradientForce, CloudType); \ makeParticleForceModelType(SRFForce, CloudType); diff --git a/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/Gravity/GravityForce.H b/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/Gravity/GravityForce.H index a215d0ef66..1bc573df04 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/Gravity/GravityForce.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/Gravity/GravityForce.H @@ -98,7 +98,7 @@ public: // Access - //- Return the the acceleration due to gravity + //- Return the acceleration due to gravity inline const vector& g() const; diff --git a/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/NonInertialFrame/NonInertialFrameForce.C b/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/NonInertialFrame/NonInertialFrameForce.C new file mode 100644 index 0000000000..807a07aa16 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/NonInertialFrame/NonInertialFrameForce.C @@ -0,0 +1,243 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2011 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see . + +\*---------------------------------------------------------------------------*/ + +#include "NonInertialFrameForce.H" +#include "uniformDimensionedFields.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template +Foam::NonInertialFrameForce::NonInertialFrameForce +( + CloudType& owner, + const fvMesh& mesh, + const dictionary& dict, + const word& forceType +) +: + ParticleForce(owner, mesh, dict), + WName_ + ( + this->coeffs().template lookupOrDefault + ( + "linearAccelerationName", + "linearAcceleration" + ) + ), + W_(vector::zero), + omegaMagName_ + ( + this->coeffs().template lookupOrDefault + ( + "angularVelocityMagName", + "angularVelocityMag" + ) + ), + omegaMag_(0.0), + omegaDotName_ + ( + this->coeffs().template lookupOrDefault + ( + "angularAccelerationName", + "angularAcceleration" + ) + ), + omegaDot_(vector::zero), + axisName_ + ( + this->coeffs().template lookupOrDefault + ( + "axisName", + "axis" + ) + ), + axis_(vector::zero), + hasAxis_(false), + axisRefPointName_ + ( + this->coeffs().template lookupOrDefault + ( + "axisRefPointName", + "axisRefPoint" + ) + ), + axisRefPoint_(vector::zero) +{} + + +template +Foam::NonInertialFrameForce::NonInertialFrameForce +( + const NonInertialFrameForce& niff +) +: + ParticleForce(niff), + WName_(niff.WName_), + W_(niff.W_), + omegaMagName_(niff.omegaMagName_), + omegaMag_(niff.omegaMag_), + omegaDotName_(niff.omegaDotName_), + omegaDot_(niff.omegaDot_), + axisName_(niff.axisName_), + axis_(niff.axis_), + hasAxis_(niff.hasAxis_), + axisRefPointName_(niff.axisRefPointName_), + axisRefPoint_(niff.axisRefPoint_) +{} + + +// * * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * // + +template +Foam::NonInertialFrameForce::~NonInertialFrameForce() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template +void Foam::NonInertialFrameForce::cacheFields(const bool store) +{ + W_ = vector::zero; + omegaMag_ = 0.0; + omegaDot_ = vector::zero; + axis_ = vector::zero; + hasAxis_ = false; + axisRefPoint_ = vector::zero; + + if (store) + { + if + ( + this->mesh().template + foundObject(omegaMagName_) + ) + { + uniformDimensionedScalarField omegaMag = this->mesh().template + lookupObject(omegaMagName_); + + omegaMag_ = omegaMag.value(); + + // If omegaMag is found, require that the axis and axisRefPoint is + // found. + uniformDimensionedVectorField a = this->mesh().template + lookupObject(axisName_); + + axis_ = a.value(); + + hasAxis_ = true; + + scalar axisMag = mag(axis_); + + if (mag(axis_) < SMALL) + { + FatalErrorIn + ( + "void Foam::NonInertialFrameForce::" + "cacheFields(const bool store)" + ) << axisName_ << " " << axis_ << " too small." + << abort(FatalError); + } + + axis_ /= axisMag; + + uniformDimensionedVectorField axisRefPoint = this->mesh().template + lookupObject(axisRefPointName_); + + axisRefPoint_ = axisRefPoint.value(); + + // Only look for omegaDot is omegaMag is found, optional. + if + ( + this->mesh().template + foundObject(omegaDotName_) + ) + { + uniformDimensionedVectorField omegaDot = this->mesh().template + lookupObject(omegaDotName_); + + omegaDot_ = omegaDot.value(); + } + } + + if + ( + this->mesh().template + foundObject(WName_) + ) + { + uniformDimensionedVectorField W = this->mesh().template + lookupObject(WName_); + + W_ = W.value(); + } + else if (!hasAxis_) + { + WarningIn + ( + "void Foam::NonInertialFrameForce::" + "cacheFields(const bool store)" + ) << "No " << typeName << " variables found." << endl; + } + } +} + + +template +Foam::forceSuSp Foam::NonInertialFrameForce::calcNonCoupled +( + const typename CloudType::parcelType& p, + const scalar dt, + const scalar mass, + const scalar Re, + const scalar muc +) const +{ + forceSuSp value(vector::zero, 0.0); + + value.Su() += -mass*W_; + + if (hasAxis_) + { + const vector pRel = p.position() - axisRefPoint_; + + const vector r = pRel - axis_*(axis_ & pRel); + + vector omega = axis_*omegaMag_; + + value.Su() += + mass + *( + (r ^ omegaDot_) + + 2.0*(p.U() ^ omega) + + (omega ^ (r ^ omega)) + ); + } + + return value; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/NonInertialFrame/NonInertialFrameForce.H b/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/NonInertialFrame/NonInertialFrameForce.H new file mode 100644 index 0000000000..093be4520d --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/NonInertialFrame/NonInertialFrameForce.H @@ -0,0 +1,186 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2011 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see . + +Class + Foam::NonInertialFrameForce + +Description + Calculates particle non-inertial reference frame force. Variable names as + from Landau and Lifshitz, Mechanics, 3rd Ed, p126-129. + +SourceFiles + NonInertialFrameForce.C + +\*---------------------------------------------------------------------------*/ + +#ifndef NonInertialFrameForce_H +#define NonInertialFrameForce_H + +#include "ParticleForce.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +class fvMesh; + +/*---------------------------------------------------------------------------*\ + Class NonInertialFrameForce Declaration +\*---------------------------------------------------------------------------*/ + +template +class NonInertialFrameForce +: + public ParticleForce +{ + // Private data + + //- Name of the linear acceleration field + word WName_; + + //- The linear acceleration of the reference frame + vector W_; + + //- Name of the angular velocity magnitude field + word omegaMagName_; + + //- The magnitude of the angular velocity of the reference frame, + // combines with axis to give omega + scalar omegaMag_; + + //- Name of the angular acceleration field + word omegaDotName_; + + //- Pointer to the angular acceleration of the reference frame + vector omegaDot_; + + //- Name of the axis field + word axisName_; + + //- Pointer to the axis of rotation - assumed to be a unit vector. + // duplication of omega to allow situations where omega = 0 and + // omegaDot != 0. + vector axis_; + + // Boolean flag for whether rotational motion is active + bool hasAxis_; + + //- Name of the axisRefPoint field + word axisRefPointName_; + + //- Pointer to a point in non-inertial space on the axis of rotation + // (omega), used to calculate r. + vector axisRefPoint_; + + +public: + + //- Runtime type information + TypeName("nonInertialFrame"); + + + // Constructors + + //- Construct from mesh + NonInertialFrameForce + ( + CloudType& owner, + const fvMesh& mesh, + const dictionary& dict, + const word& forceType + ); + + //- Construct copy + NonInertialFrameForce(const NonInertialFrameForce& niff); + + //- Construct and return a clone + virtual autoPtr > clone() const + { + return autoPtr > + ( + new ParticleForce(*this) + ); + } + + + //- Destructor + virtual ~NonInertialFrameForce(); + + + // Member Functions + + // Access + + //- Return the linear acceleration of the reference frame + inline const vector& W() const; + + //- Return the angular velocity of the reference frame + inline const vector& omega() const; + + //- Return the angular acceleration of the reference frame + inline const vector& omegaDot() const; + + //- Return the axis of rotation + inline const vector& axis() const; + + //- Return bool stating if the frame is rotating + inline bool hasAxis() const; + + //- Return the point in non-inertial space on the axis of rotation + inline const vector& axisRefPoint() const; + + // Evaluation + + //- Cache fields + virtual void cacheFields(const bool store); + + //- Calculate the non-coupled force + virtual forceSuSp calcNonCoupled + ( + const typename CloudType::parcelType& p, + const scalar dt, + const scalar mass, + const scalar Re, + const scalar muc + ) const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "NonInertialFrameForceI.H" + +#ifdef NoRepository + #include "NonInertialFrameForce.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/NonInertialFrame/NonInertialFrameForceI.H b/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/NonInertialFrame/NonInertialFrameForceI.H new file mode 100644 index 0000000000..ae4ffc13a7 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/NonInertialFrame/NonInertialFrameForceI.H @@ -0,0 +1,73 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2011 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see . + +\*---------------------------------------------------------------------------*/ + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +template +inline const Foam::vector& Foam::NonInertialFrameForce::W() const +{ + return W_; +} + + +template +inline const Foam::vector& Foam::NonInertialFrameForce::omega() const +{ + return omegaMag_*axis_; +} + + +template +inline const Foam::vector& +Foam::NonInertialFrameForce::omegaDot() const +{ + return omegaDot_; +} + + +template +inline const Foam::vector& +Foam::NonInertialFrameForce::axis() const +{ + return axis_; +} + + +template +inline bool Foam::NonInertialFrameForce::hasAxis() const +{ + return hasAxis_; +} + + +template +inline const Foam::vector& +Foam::NonInertialFrameForce::axisRefPoint() const +{ + return axisRefPoint_; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/SRF/SRFForce.H b/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/SRF/SRFForce.H index 2e646a37d7..b8f10d0ea9 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/SRF/SRFForce.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/SRF/SRFForce.H @@ -28,7 +28,6 @@ Description Calculates particle SRF reference frame force SourceFiles - SRFForceI.H SRFForce.C \*---------------------------------------------------------------------------*/ From 77644def7a798a6f476c0843549c21b044619374 Mon Sep 17 00:00:00 2001 From: graham Date: Fri, 4 Mar 2011 14:06:07 +0000 Subject: [PATCH 09/37] ENH: Silencing particle tracking warnings by default. --- src/lagrangian/basic/Cloud/Cloud.C | 11 +++++---- src/lagrangian/basic/particle/particleI.H | 29 +++++++++++++---------- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/lagrangian/basic/Cloud/Cloud.C b/src/lagrangian/basic/Cloud/Cloud.C index 425c8221cd..6706a47f0e 100644 --- a/src/lagrangian/basic/Cloud/Cloud.C +++ b/src/lagrangian/basic/Cloud/Cloud.C @@ -334,11 +334,14 @@ void Foam::Cloud::move(TrackData& td, const scalar trackTime) } } - reduce(nTrackingRescues_, sumOp