From 3c060421798a05412c4e982e2facee9c2192e61a Mon Sep 17 00:00:00 2001 From: graham Date: Tue, 13 Apr 2010 18:24:54 +0100 Subject: [PATCH 01/12] ENH: particleForces. Adding paramagnetic force. Adding d to calcCoupled/calcNonCoupled arguments and call. --- .../KinematicParcel/KinematicParcel.C | 25 +++++- .../particleForces/particleForces.C | 90 +++++++++++++++++-- .../particleForces/particleForces.H | 31 ++++++- 3 files changed, 133 insertions(+), 13 deletions(-) diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C index a381c9d431..e17e7138d6 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C @@ -160,10 +160,27 @@ const Foam::vector Foam::KinematicParcel::calcVelocity const scalar utc = td.cloud().drag().utc(Re, d, mu) + ROOTVSMALL; // Momentum source due to particle forces - const vector FCoupled = - mass*td.cloud().forces().calcCoupled(cellI, dt, rhoc_, rho, Uc_, U); - const vector FNonCoupled = - mass*td.cloud().forces().calcNonCoupled(cellI, dt, rhoc_, rho, Uc_, U); + const vector FCoupled = mass*td.cloud().forces().calcCoupled + ( + cellI, + dt, + rhoc_, + rho, + Uc_, + U, + d + ); + + const vector FNonCoupled = mass*td.cloud().forces().calcNonCoupled + ( + cellI, + dt, + rhoc_, + rho, + Uc_, + U, + d + ); // New particle velocity diff --git a/src/lagrangian/intermediate/particleForces/particleForces.C b/src/lagrangian/intermediate/particleForces/particleForces.C index 265f9b59ae..938549a734 100644 --- a/src/lagrangian/intermediate/particleForces/particleForces.C +++ b/src/lagrangian/intermediate/particleForces/particleForces.C @@ -27,6 +27,8 @@ License #include "fvMesh.H" #include "volFields.H" #include "fvcGrad.H" +#include "mathematicalConstants.H" +#include "electromagneticConstants.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -41,16 +43,25 @@ Foam::particleForces::particleForces dict_(dict.subDict("particleForces")), g_(g), gradUPtr_(NULL), + gradHPtr_(NULL), gravity_(dict_.lookup("gravity")), virtualMass_(dict_.lookup("virtualMass")), Cvm_(0.0), pressureGradient_(dict_.lookup("pressureGradient")), - UName_(dict_.lookupOrDefault("U", "U")) + paramagnetic_(dict_.lookup("paramagnetic")), + chi_(0.0), + UName_(dict_.lookupOrDefault("U", "U")), + HName_(dict_.lookupOrDefault("H", "H")) { if (virtualMass_) { dict_.lookup("Cvm") >> Cvm_; } + + if (paramagnetic_) + { + dict_.lookup("chi") >> chi_; + } } @@ -60,11 +71,15 @@ Foam::particleForces::particleForces(const particleForces& f) dict_(f.dict_), g_(f.g_), gradUPtr_(f.gradUPtr_), + gradHPtr_(f.gradHPtr_), gravity_(f.gravity_), virtualMass_(f.virtualMass_), Cvm_(f.Cvm_), pressureGradient_(f.pressureGradient_), - UName_(f.UName_) + paramagnetic_(f.paramagnetic_), + chi_(f.chi_), + UName_(f.UName_), + HName_(f.HName_) {} @@ -102,18 +117,42 @@ Foam::Switch Foam::particleForces::virtualMass() const } +Foam::scalar Foam::particleForces::Cvm() const +{ + return Cvm_; +} + + Foam::Switch Foam::particleForces::pressureGradient() const { return pressureGradient_; } +Foam::Switch Foam::particleForces::paramagnetic() const +{ + return paramagnetic_; +} + + +Foam::scalar Foam::particleForces::chi() const +{ + return chi_; +} + + const Foam::word& Foam::particleForces::UName() const { return UName_; } +const Foam::word& Foam::particleForces::HName() const +{ + return HName_; +} + + void Foam::particleForces::cacheFields(const bool store) { if (store && pressureGradient_) @@ -129,6 +168,20 @@ void Foam::particleForces::cacheFields(const bool store) gradUPtr_ = NULL; } } + + if (store && paramagnetic_) + { + const volVectorField& H = mesh_.lookupObject(HName_); + gradHPtr_ = fvc::grad(H).ptr(); + } + else + { + if (gradHPtr_) + { + delete gradHPtr_; + gradHPtr_ = NULL; + } + } } @@ -139,7 +192,8 @@ Foam::vector Foam::particleForces::calcCoupled const scalar rhoc, const scalar rho, const vector& Uc, - const vector& U + const vector& U, + const scalar d ) const { vector Ftot = vector::zero; @@ -172,7 +226,8 @@ Foam::vector Foam::particleForces::calcNonCoupled const scalar rhoc, const scalar rho, const vector& Uc, - const vector& U + const vector& U, + const scalar d ) const { vector Ftot = vector::zero; @@ -183,9 +238,34 @@ Foam::vector Foam::particleForces::calcNonCoupled Ftot += g_*(1.0 - rhoc/rho); } + // Magnetic field force + + if (paramagnetic_) + { + const volVectorField& H = mesh_.lookupObject(HName_); + + const volTensorField& gradH = *gradHPtr_; + + Ftot += + 3.0*constant::electromagnetic::mu0.value()/rho + *chi_/(chi_ + 3) + *(H[cellI] & gradH[cellI]); + + // force is: + + // 4.0 + // *constant::mathematical::pi + // *constant::electromagnetic::mu0.value() + // *pow3(d/2) + // *chi/(chi + 3) + // *(H[cellI] & gradH[cellI]); + + // which is divided by mass ((4/3)*pi*r^3*rho) to produce + // acceleration + } + return Ftot; } // ************************************************************************* // - diff --git a/src/lagrangian/intermediate/particleForces/particleForces.H b/src/lagrangian/intermediate/particleForces/particleForces.H index 87abf7a7d0..19c7b1b784 100644 --- a/src/lagrangian/intermediate/particleForces/particleForces.H +++ b/src/lagrangian/intermediate/particleForces/particleForces.H @@ -69,6 +69,9 @@ class particleForces //- Velocity gradient field const volTensorField* gradUPtr_; + //- Magnetic field strength gradient field + const volTensorField* gradHPtr_; + // Forces to include in particle motion evaluation @@ -84,12 +87,21 @@ class particleForces //- Pressure gradient Switch pressureGradient_; + //- Paramagnetic force + Switch paramagnetic_; + + //- Magnetic susceptibility of particle + scalar chi_; + // Additional info - //- Name of velucity field - default = "U" + //- Name of velocity field - default = "U" const word UName_; + //- Name of magnetic field strength field - default = "H" + const word HName_; + public: @@ -128,7 +140,7 @@ public: Switch virtualMass() const; //- Return virtual mass force coefficient - Switch Cvm() const; + scalar Cvm() const; //- Return pressure gradient force activate switch Switch pressureGradient() const; @@ -136,6 +148,15 @@ public: //- Return name of velocity field const word& UName() const; + //- Return paramagnetic force activate switch + Switch paramagnetic() const; + + //- Return magnetic susceptibility + scalar chi() const; + + //- Return name of velocity field + const word& HName() const; + // Evaluation @@ -150,7 +171,8 @@ public: const scalar rhoc, const scalar rho, const vector& Uc, - const vector& U + const vector& U, + const scalar d ) const; //- Calculate external forces applied to the particles @@ -161,7 +183,8 @@ public: const scalar rhoc, const scalar rho, const vector& Uc, - const vector& U + const vector& U, + const scalar d ) const; }; From 55cd7409d8d3565df68651546c3bae86ae49b7b5 Mon Sep 17 00:00:00 2001 From: graham Date: Wed, 14 Apr 2010 09:51:46 +0100 Subject: [PATCH 02/12] STYLE: particleForces. Rename variable chi -> magneticSusceptibility. --- .../intermediate/particleForces/particleForces.C | 14 +++++++------- .../intermediate/particleForces/particleForces.H | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/lagrangian/intermediate/particleForces/particleForces.C b/src/lagrangian/intermediate/particleForces/particleForces.C index 938549a734..a9c11aa81f 100644 --- a/src/lagrangian/intermediate/particleForces/particleForces.C +++ b/src/lagrangian/intermediate/particleForces/particleForces.C @@ -49,7 +49,7 @@ Foam::particleForces::particleForces Cvm_(0.0), pressureGradient_(dict_.lookup("pressureGradient")), paramagnetic_(dict_.lookup("paramagnetic")), - chi_(0.0), + magneticSusceptibility_(0.0), UName_(dict_.lookupOrDefault("U", "U")), HName_(dict_.lookupOrDefault("H", "H")) { @@ -60,7 +60,7 @@ Foam::particleForces::particleForces if (paramagnetic_) { - dict_.lookup("chi") >> chi_; + dict_.lookup("magneticSusceptibility") >> magneticSusceptibility_; } } @@ -77,7 +77,7 @@ Foam::particleForces::particleForces(const particleForces& f) Cvm_(f.Cvm_), pressureGradient_(f.pressureGradient_), paramagnetic_(f.paramagnetic_), - chi_(f.chi_), + magneticSusceptibility_(f.magneticSusceptibility_), UName_(f.UName_), HName_(f.HName_) {} @@ -135,9 +135,9 @@ Foam::Switch Foam::particleForces::paramagnetic() const } -Foam::scalar Foam::particleForces::chi() const +Foam::scalar Foam::particleForces::magneticSusceptibility() const { - return chi_; + return magneticSusceptibility_; } @@ -248,7 +248,7 @@ Foam::vector Foam::particleForces::calcNonCoupled Ftot += 3.0*constant::electromagnetic::mu0.value()/rho - *chi_/(chi_ + 3) + *magneticSusceptibility_/(magneticSusceptibility_ + 3) *(H[cellI] & gradH[cellI]); // force is: @@ -257,7 +257,7 @@ Foam::vector Foam::particleForces::calcNonCoupled // *constant::mathematical::pi // *constant::electromagnetic::mu0.value() // *pow3(d/2) - // *chi/(chi + 3) + // *magneticSusceptibility/(magneticSusceptibility + 3) // *(H[cellI] & gradH[cellI]); // which is divided by mass ((4/3)*pi*r^3*rho) to produce diff --git a/src/lagrangian/intermediate/particleForces/particleForces.H b/src/lagrangian/intermediate/particleForces/particleForces.H index 19c7b1b784..d7e891ab65 100644 --- a/src/lagrangian/intermediate/particleForces/particleForces.H +++ b/src/lagrangian/intermediate/particleForces/particleForces.H @@ -91,7 +91,7 @@ class particleForces Switch paramagnetic_; //- Magnetic susceptibility of particle - scalar chi_; + scalar magneticSusceptibility_; // Additional info @@ -152,7 +152,7 @@ public: Switch paramagnetic() const; //- Return magnetic susceptibility - scalar chi() const; + scalar magneticSusceptibility() const; //- Return name of velocity field const word& HName() const; From c948fadb10bb06282d786f0528515056660d84cc Mon Sep 17 00:00:00 2001 From: graham Date: Wed, 14 Apr 2010 13:59:58 +0100 Subject: [PATCH 03/12] ENH: particleForces. Not caching gradH field, looking up HdotGradH field directly. Renaming Ftot to accelTot to remind that the functions return accelerations. --- .../particleForces/particleForces.C | 53 +++++++------------ .../particleForces/particleForces.H | 12 ++--- 2 files changed, 24 insertions(+), 41 deletions(-) diff --git a/src/lagrangian/intermediate/particleForces/particleForces.C b/src/lagrangian/intermediate/particleForces/particleForces.C index a9c11aa81f..7778736683 100644 --- a/src/lagrangian/intermediate/particleForces/particleForces.C +++ b/src/lagrangian/intermediate/particleForces/particleForces.C @@ -43,7 +43,6 @@ Foam::particleForces::particleForces dict_(dict.subDict("particleForces")), g_(g), gradUPtr_(NULL), - gradHPtr_(NULL), gravity_(dict_.lookup("gravity")), virtualMass_(dict_.lookup("virtualMass")), Cvm_(0.0), @@ -51,7 +50,7 @@ Foam::particleForces::particleForces paramagnetic_(dict_.lookup("paramagnetic")), magneticSusceptibility_(0.0), UName_(dict_.lookupOrDefault("U", "U")), - HName_(dict_.lookupOrDefault("H", "H")) + HdotGradHName_(dict_.lookupOrDefault("HdotGradH", "HdotGradH")) { if (virtualMass_) { @@ -71,7 +70,6 @@ Foam::particleForces::particleForces(const particleForces& f) dict_(f.dict_), g_(f.g_), gradUPtr_(f.gradUPtr_), - gradHPtr_(f.gradHPtr_), gravity_(f.gravity_), virtualMass_(f.virtualMass_), Cvm_(f.Cvm_), @@ -79,7 +77,7 @@ Foam::particleForces::particleForces(const particleForces& f) paramagnetic_(f.paramagnetic_), magneticSusceptibility_(f.magneticSusceptibility_), UName_(f.UName_), - HName_(f.HName_) + HdotGradHName_(f.HdotGradHName_) {} @@ -147,9 +145,9 @@ const Foam::word& Foam::particleForces::UName() const } -const Foam::word& Foam::particleForces::HName() const +const Foam::word& Foam::particleForces::HdotGradHName() const { - return HName_; + return HdotGradHName_; } @@ -168,20 +166,6 @@ void Foam::particleForces::cacheFields(const bool store) gradUPtr_ = NULL; } } - - if (store && paramagnetic_) - { - const volVectorField& H = mesh_.lookupObject(HName_); - gradHPtr_ = fvc::grad(H).ptr(); - } - else - { - if (gradHPtr_) - { - delete gradHPtr_; - gradHPtr_ = NULL; - } - } } @@ -196,7 +180,7 @@ Foam::vector Foam::particleForces::calcCoupled const scalar d ) const { - vector Ftot = vector::zero; + vector accelTot = vector::zero; // Virtual mass force if (virtualMass_) @@ -205,17 +189,17 @@ Foam::vector Foam::particleForces::calcCoupled ( "Foam::particleForces::calcCoupled(...) - virtual mass force" ); -// Ftot += Cvm_*rhoc/rho*d(Uc - U)/dt; +// accelTot += Cvm_*rhoc/rho*d(Uc - U)/dt; } // Pressure gradient force if (pressureGradient_) { const volTensorField& gradU = *gradUPtr_; - Ftot += rhoc/rho*(U & gradU[cellI]); + accelTot += rhoc/rho*(U & gradU[cellI]); } - return Ftot; + return accelTot; } @@ -230,26 +214,27 @@ Foam::vector Foam::particleForces::calcNonCoupled const scalar d ) const { - vector Ftot = vector::zero; + vector accelTot = vector::zero; // Gravity force if (gravity_) { - Ftot += g_*(1.0 - rhoc/rho); + accelTot += g_*(1.0 - rhoc/rho); } // Magnetic field force if (paramagnetic_) { - const volVectorField& H = mesh_.lookupObject(HName_); + const volVectorField& HdotGradH = mesh_.lookupObject + ( + HdotGradHName_ + ); - const volTensorField& gradH = *gradHPtr_; - - Ftot += + accelTot += 3.0*constant::electromagnetic::mu0.value()/rho *magneticSusceptibility_/(magneticSusceptibility_ + 3) - *(H[cellI] & gradH[cellI]); + *HdotGradH[cellI]; // force is: @@ -257,14 +242,14 @@ Foam::vector Foam::particleForces::calcNonCoupled // *constant::mathematical::pi // *constant::electromagnetic::mu0.value() // *pow3(d/2) - // *magneticSusceptibility/(magneticSusceptibility + 3) - // *(H[cellI] & gradH[cellI]); + // *magneticSusceptibility_/(magneticSusceptibility_ + 3) + // *HdotGradH[cellI]; // which is divided by mass ((4/3)*pi*r^3*rho) to produce // acceleration } - return Ftot; + return accelTot; } diff --git a/src/lagrangian/intermediate/particleForces/particleForces.H b/src/lagrangian/intermediate/particleForces/particleForces.H index d7e891ab65..cc47366533 100644 --- a/src/lagrangian/intermediate/particleForces/particleForces.H +++ b/src/lagrangian/intermediate/particleForces/particleForces.H @@ -69,9 +69,6 @@ class particleForces //- Velocity gradient field const volTensorField* gradUPtr_; - //- Magnetic field strength gradient field - const volTensorField* gradHPtr_; - // Forces to include in particle motion evaluation @@ -99,8 +96,9 @@ class particleForces //- Name of velocity field - default = "U" const word UName_; - //- Name of magnetic field strength field - default = "H" - const word HName_; + //- Name of paramagnetic field strength field - default = + // "HdotGradH" + const word HdotGradHName_; public: @@ -154,8 +152,8 @@ public: //- Return magnetic susceptibility scalar magneticSusceptibility() const; - //- Return name of velocity field - const word& HName() const; + //- Return name of paramagnetic field strength field + const word& HdotGradHName() const; // Evaluation From 93a0172f038407709263c07be637f79ca2a374a5 Mon Sep 17 00:00:00 2001 From: mattijs Date: Wed, 14 Apr 2010 15:47:39 +0100 Subject: [PATCH 04/12] BUG: incorrect statistics in parallel. Also removed sign of magSf. --- .../field/fieldValues/cellSource/cellSource.C | 10 +++--- .../field/fieldValues/cellSource/cellSource.H | 3 ++ .../field/fieldValues/faceSource/faceSource.C | 31 +++++++++-------- .../field/fieldValues/faceSource/faceSource.H | 25 ++++++++++---- .../fieldValues/faceSource/faceSourceI.H | 4 +-- .../faceSource/faceSourceTemplates.C | 33 ++++++++++++++----- 6 files changed, 73 insertions(+), 33 deletions(-) diff --git a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.C b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.C index 9d65cefc57..97cd9393bd 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.C +++ b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.C @@ -80,10 +80,11 @@ void Foam::fieldValues::cellSource::setCellZoneCells() } cellId_.setSize(count); + nCells_ = returnReduce(cellId_.size(), sumOp