From b34106b6f43f16ef1ad036d61fa2b215094c0cc5 Mon Sep 17 00:00:00 2001 From: graham Date: Thu, 3 Mar 2011 10:50:59 +0000 Subject: [PATCH 1/6] 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 2/6] 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 a9d0a6d02b35e183116f91cf05cf0c31d8a7b58b Mon Sep 17 00:00:00 2001 From: graham Date: Fri, 4 Mar 2011 13:45:25 +0000 Subject: [PATCH 3/6] 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 4/6] 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