From eddccf3ec3f7cc2b681249b49a66dd83facf424d Mon Sep 17 00:00:00 2001 From: graham Date: Tue, 23 Nov 2010 12:49:29 +0000 Subject: [PATCH] ENH: SRF non-inertial frame acceleration terms for particle motion. --- .../general/SRF/SRFModel/SRFModel/SRFModel.H | 1 - .../include/makeParcelSurfaceFilmModels.H | 2 - .../particleForces/particleForces.C | 42 +++++++++++++++++++ .../particleForces/particleForces.H | 10 +++++ .../NoSurfaceFilm/NoSurfaceFilm.C | 5 ++- .../NoSurfaceFilm/NoSurfaceFilm.H | 5 ++- 6 files changed, 58 insertions(+), 7 deletions(-) diff --git a/src/finiteVolume/cfdTools/general/SRF/SRFModel/SRFModel/SRFModel.H b/src/finiteVolume/cfdTools/general/SRF/SRFModel/SRFModel/SRFModel.H index 8056e9ac93..d10c5adda3 100644 --- a/src/finiteVolume/cfdTools/general/SRF/SRFModel/SRFModel/SRFModel.H +++ b/src/finiteVolume/cfdTools/general/SRF/SRFModel/SRFModel/SRFModel.H @@ -185,4 +185,3 @@ public: #endif // ************************************************************************* // - diff --git a/src/lagrangian/intermediate/parcels/include/makeParcelSurfaceFilmModels.H b/src/lagrangian/intermediate/parcels/include/makeParcelSurfaceFilmModels.H index b150710a4f..045d26612e 100644 --- a/src/lagrangian/intermediate/parcels/include/makeParcelSurfaceFilmModels.H +++ b/src/lagrangian/intermediate/parcels/include/makeParcelSurfaceFilmModels.H @@ -51,5 +51,3 @@ License #endif // ************************************************************************* // - - diff --git a/src/lagrangian/intermediate/particleForces/particleForces.C b/src/lagrangian/intermediate/particleForces/particleForces.C index 3b3e1ec1e6..be189ba3e1 100644 --- a/src/lagrangian/intermediate/particleForces/particleForces.C +++ b/src/lagrangian/intermediate/particleForces/particleForces.C @@ -29,6 +29,7 @@ License #include "fvcGrad.H" #include "mathematicalConstants.H" #include "electromagneticConstants.H" +#include "SRFModel.H" // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // @@ -63,6 +64,7 @@ Foam::particleForces::particleForces(const fvMesh& mesh) pressureGradient_(false), paramagnetic_(false), magneticSusceptibility_(0.0), + refFrame_(rfInertial), UName_("undefined_UName"), HdotGradHName_("undefined_HdotGradHName") {} @@ -86,6 +88,7 @@ Foam::particleForces::particleForces pressureGradient_(dict_.lookup("pressureGradient")), paramagnetic_(dict_.lookup("paramagnetic")), magneticSusceptibility_(0.0), + refFrame_(rfInertial), UName_(dict_.lookupOrDefault("UName", "U")), HdotGradHName_(dict_.lookupOrDefault("HdotGradHName", "HdotGradH")) { @@ -98,6 +101,30 @@ Foam::particleForces::particleForces { dict_.lookup("magneticSusceptibility") >> magneticSusceptibility_; } + + if (dict_.found("referenceFrame")) + { + word rf(dict_.lookup("referenceFrame")); + + if (rf == "SRF") + { + refFrame_ = rfSRF; + } + else if (rf != "inertial") + { + FatalErrorIn + ( + "Foam::particleForces::particleForces" + "(" + "const fvMesh& mesh," + "const dictionary& dict," + "const vector& g" + ")" + ) + << "Unknown referenceFrame, options are inertial and SRF." + << abort(FatalError); + } + } } @@ -114,6 +141,7 @@ Foam::particleForces::particleForces(const particleForces& f) pressureGradient_(f.pressureGradient_), paramagnetic_(f.paramagnetic_), magneticSusceptibility_(f.magneticSusceptibility_), + refFrame_(f.refFrame_), UName_(f.UName_), HdotGradHName_(f.HdotGradHName_) {} @@ -305,6 +333,20 @@ Foam::vector Foam::particleForces::calcNonCoupled // acceleration } + if (refFrame_ == rfSRF) + { + const SRF::SRFModel& srf = + mesh_.lookupObject("SRFProperties"); + + const vector& omega = srf.omega().value(); + const vector& axis = srf.axis(); + + vector r = position - axis*(axis & position); + + // Coriolis and centrifugal acceleration terms + accelTot += 2*(U ^ omega) + (omega ^ (r ^ omega)); + } + return accelTot; } diff --git a/src/lagrangian/intermediate/particleForces/particleForces.H b/src/lagrangian/intermediate/particleForces/particleForces.H index efbba75b64..5c537ff540 100644 --- a/src/lagrangian/intermediate/particleForces/particleForces.H +++ b/src/lagrangian/intermediate/particleForces/particleForces.H @@ -59,6 +59,13 @@ class particleForces { // Private data + //- Reference frame type + enum refFrame + { + rfInertial, + rfSRF + }; + //- Reference to the mesh database const fvMesh& mesh_; @@ -95,6 +102,9 @@ class particleForces //- Magnetic susceptibility of particle scalar magneticSusceptibility_; + //- Reference frame accelerations + refFrame refFrame_; + // Additional info diff --git a/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/NoSurfaceFilm/NoSurfaceFilm.C b/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/NoSurfaceFilm/NoSurfaceFilm.C index 651648ee64..30be8e1577 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/NoSurfaceFilm/NoSurfaceFilm.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/NoSurfaceFilm/NoSurfaceFilm.C @@ -69,8 +69,9 @@ bool Foam::NoSurfaceFilm::active() const template bool Foam::NoSurfaceFilm::transferParcel ( - const parcelType&, - const label + parcelType&, + const polyPatch&, + bool& ) { return false; diff --git a/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/NoSurfaceFilm/NoSurfaceFilm.H b/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/NoSurfaceFilm/NoSurfaceFilm.H index 9ef7814f82..1cc6fc2e92 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/NoSurfaceFilm/NoSurfaceFilm.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/NoSurfaceFilm/NoSurfaceFilm.H @@ -98,8 +98,9 @@ public: // Returns true if parcel is to be transferred virtual bool transferParcel ( - const parcelType& p, - const label patchI + parcelType& p, + const polyPatch& pp, + bool& keepParticle ); //- Set parcel properties