From a0d36e3f90a88a1f30b0eea86594a883c34ce89b Mon Sep 17 00:00:00 2001 From: andy Date: Fri, 27 Mar 2009 13:15:06 +0000 Subject: [PATCH] further dev on coupling, bits of restructuring --- .../Templates/KinematicCloud/KinematicCloud.C | 4 +- .../Templates/ReactingCloud/ReactingCloud.C | 4 +- .../ReactingMultiphaseCloud.C | 6 +- .../Templates/ThermoCloud/ThermoCloud.C | 4 +- .../KinematicParcel/KinematicParcel.C | 30 ++- .../KinematicParcel/KinematicParcel.H | 77 ++++--- .../KinematicParcel/KinematicParcelI.H | 195 ++++++++++------- .../KinematicParcel/KinematicParcelIO.C | 27 +-- .../ReactingMultiphaseParcel.C | 207 ++++++++++++------ .../ReactingMultiphaseParcel.H | 56 +++-- .../ReactingMultiphaseParcelI.H | 51 ++--- .../ReactingMultiphaseParcelIO.C | 8 +- .../Templates/ReactingParcel/ReactingParcel.C | 62 ++++-- .../Templates/ReactingParcel/ReactingParcel.H | 28 +-- .../ReactingParcel/ReactingParcelI.H | 12 +- .../ReactingParcel/ReactingParcelIO.C | 6 +- .../Templates/ThermoParcel/ThermoParcel.C | 58 +++-- .../Templates/ThermoParcel/ThermoParcel.H | 19 +- .../Templates/ThermoParcel/ThermoParcelI.H | 16 +- .../Templates/ThermoParcel/ThermoParcelIO.C | 4 +- .../basicKinematicParcel.C | 8 +- .../basicKinematicParcel.H | 9 +- .../basicReactingMultiphaseParcel.C | 8 +- .../basicReactingMultiphaseParcel.H | 6 +- .../basicReactingParcel/basicReactingParcel.C | 8 +- .../basicReactingParcel/basicReactingParcel.H | 4 +- .../basicThermoParcel/basicThermoParcel.C | 8 +- .../basicThermoParcel/basicThermoParcel.H | 11 +- .../IO/DataEntry/polynomial/polynomial.H | 2 +- .../CompositionModel/CompositionModel.C | 2 +- .../CompositionModel/CompositionModel.H | 2 +- .../LiquidEvaporation/LiquidEvaporation.C | 6 +- .../LiquidEvaporation/LiquidEvaporation.H | 6 +- .../NoPhaseChange/NoPhaseChange.C | 2 +- .../NoPhaseChange/NoPhaseChange.H | 4 +- .../PhaseChangeModel/PhaseChangeModel.H | 4 +- .../NoSurfaceReaction/NoSurfaceReaction.C | 6 +- .../NoSurfaceReaction/NoSurfaceReaction.H | 6 +- .../SurfaceReactionModel.H | 7 +- 39 files changed, 592 insertions(+), 391 deletions(-) diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C index f60f69261c..eeee670009 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C @@ -50,12 +50,12 @@ void Foam::KinematicCloud::addNewParcel ParcelType* pPtr = new ParcelType ( *this, - parcelTypeId_, position, cellId, + parcelTypeId_, + nParticles, d, U, - nParticles, constProps_ ); diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C index b14fcc17cd..4fec0e0666 100644 --- a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C +++ b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C @@ -45,12 +45,12 @@ void Foam::ReactingCloud::addNewParcel ParcelType* pPtr = new ParcelType ( *this, - this->parcelTypeId(), position, cellId, + this->parcelTypeId(), + nParticles, d, U, - nParticles, composition().YMixture0(), constProps_ ); diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.C b/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.C index 29936f328c..7936ddea40 100644 --- a/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.C +++ b/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.C @@ -49,16 +49,16 @@ void Foam::ReactingMultiphaseCloud::addNewParcel ParcelType* pPtr = new ParcelType ( *this, - this->parcelTypeId(), position, cellId, + this->parcelTypeId(), + nParticles, d, U, - nParticles, + this->composition().YMixture0(), this->composition().Y0(idGas), this->composition().Y0(idLiquid), this->composition().Y0(idSolid), - this->composition().YMixture0(), constProps_ ); diff --git a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C index 40731ec254..6872f2428e 100644 --- a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C +++ b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C @@ -46,12 +46,12 @@ void Foam::ThermoCloud::addNewParcel ParcelType* pPtr = new ParcelType ( *this, - this->parcelTypeId(), position, cellId, + this->parcelTypeId(), + nParticles, d, U, - nParticles, constProps_ ); diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C index 70adc771b1..007e5aac47 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C @@ -79,6 +79,10 @@ void Foam::KinematicParcel::calc { // Define local properties at beginning of time step // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + const scalar np0 = nParticle_; + const scalar d0 = d_; + const scalar U0 = U_; + const scalar rho0 = rho_; const scalar mass0 = mass(); @@ -97,7 +101,8 @@ void Foam::KinematicParcel::calc // Calculate new particle velocity scalar Cud = 0.0; - vector U1 = calcVelocity(td, dt, cellI, Fx, mass0, Cud, dUTrans); + vector U1 = + calcVelocity(td, dt, cellI, d0, U0, rho0, mass0, Fx, Cud, dUTrans); // Accumulate carrier phase source terms @@ -105,10 +110,10 @@ void Foam::KinematicParcel::calc if (td.cloud().coupled()) { // Update momentum transfer - td.cloud().UTrans()[cellI] += nParticle_*dUTrans; + td.cloud().UTrans()[cellI] += np0*dUTrans; // Coefficient to be applied in carrier phase momentum coupling - td.cloud().UCoeff()[cellI] += nParticle_*mass0*Cud; + td.cloud().UCoeff()[cellI] += np0*mass0*Cud; } @@ -125,14 +130,17 @@ const Foam::vector Foam::KinematicParcel::calcVelocity TrackData& td, const scalar dt, const label cellI, - const vector& Fx, + const scalar d, + const vector& U, + const scalar rho, const scalar mass, + const vector& Fx, scalar& Cud, vector& dUTrans ) const { // Return linearised term from drag model - Cud = td.cloud().drag().Cu(U_ - Uc_, d_, rhoc_, rho_, muc_); + Cud = td.cloud().drag().Cu(U - Uc_, d, rhoc_, rho, muc_); // Initialise total force (per unit mass) vector Ftot = vector::zero; @@ -140,20 +148,20 @@ const Foam::vector Foam::KinematicParcel::calcVelocity // Gravity force if (td.cloud().forceGravity()) { - Ftot += td.g()*(1 - rhoc_/rho_); + Ftot += td.g()*(1 - rhoc_/rho); } // Virtual mass force if (td.cloud().forceVirtualMass()) { -// Ftot += td.constProps().Cvm()*rhoc_/rho_*d(Uc - U_)/dt; +// Ftot += td.constProps().Cvm()*rhoc_/rho*d(Uc - U)/dt; } // Pressure gradient force if (td.cloud().forcePressureGradient()) { - const vector& d = this->mesh().deltaCoeffs()[cellI]; - Ftot += rhoc_/rho_*(U_ & (d^Uc_)); +// const vector& delta = td.cloud().mesh().deltaCoeffs()[cellI]; +// Ftot += rhoc_/rho*(U & (delta^Uc_)); } @@ -164,11 +172,11 @@ const Foam::vector Foam::KinematicParcel::calcVelocity const vector ap = Uc_ + (Ftot + Fx)/(Cud + VSMALL); const scalar bp = Cud; - vector Unew = td.cloud().UIntegrator().integrate(U_, dt, ap, bp).value(); + vector Unew = td.cloud().UIntegrator().integrate(U, dt, ap, bp).value(); // Calculate the momentum transfer to the continuous phase // - do not include gravity impulse - dUTrans = -mass*(Unew - U_ - dt*td.g()); + dUTrans = -mass*(Unew - U - dt*td.g()); return Unew; } diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H index 35b46329dc..1717ee1feb 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H @@ -31,7 +31,7 @@ Description Sub-models include: - drag - - break-up + - turbulent dispersion - wall interactions SourceFiles @@ -193,15 +193,15 @@ protected: //- Parcel type id label typeId_; + //- Number of particles in Parcel + scalar nParticle_; + //- Diameter [m] scalar d_; //- Velocity of Parcel [m/s] vector U_; - //- Number of particles in Parcel - scalar nParticle_; - //- Density [kg/m3] scalar rho_; @@ -214,13 +214,13 @@ protected: // Cell-based quantities - // - Density [kg/m3] + //- Density [kg/m3] scalar rhoc_; - // - Velocity [m/s] + //- Velocity [m/s] vector Uc_; - // - Viscosity [Pa.s] + //- Viscosity [Pa.s] scalar muc_; @@ -231,12 +231,15 @@ protected: const vector calcVelocity ( TrackData& td, - const scalar dt, - const label cellI, - const vector& Fx, - const scalar mass, - scalar& Cud, - vector& dUTrans + const scalar dt, // timestep + const label cellI, // owner cell + const scalar d, // diameter + const vector& U, // velocity + const scalar rho, // density + const scalar mass, // mass + const vector& Fx, // additional forces + scalar& Cud, // linearised drag term coeff + vector& dUTrans // momentum transfer to carrier phase ) const; @@ -254,12 +257,12 @@ public: inline KinematicParcel ( KinematicCloud& owner, - const label typeId, const vector& position, const label cellI, + const label typeId, + const scalar nParticle0, const scalar d0, const vector& U0, - const scalar nParticle0, const constantProperties& constProps ); @@ -282,21 +285,18 @@ public: // Access - //- Return type id + //- Return const access to type id inline label typeId() const; + //- Return const access to number of particles + inline scalar nParticle() const; + //- Return const access to diameter inline scalar d() const; //- Return const access to velocity inline const vector& U() const; - //- Return const access to relative velocity - inline const vector& Ur() const; - - //- Return const access to number of particles - inline scalar nParticle() const; - //- Return const access to density inline scalar rho() const; @@ -306,25 +306,21 @@ public: //- Return const access to turbulent velocity fluctuation inline const vector& UTurb() const; - //- The nearest distance to a wall that - // the particle can be in the n direction - inline scalar wallImpactDistance(const vector& n) const; - // Edit + //- Return access to type id + inline label typeId(); + + //- Return access to number of particles + inline scalar& nParticle(); + //- Return access to diameter inline scalar& d(); //- Return access to velocity inline vector& U(); - //- Return access to relative velocity - inline vector& Ur(); - - //- Return access to number of particles - inline scalar& nParticle(); - //- Return access to density inline scalar& rho(); @@ -337,22 +333,35 @@ public: // Helper functions + //- The nearest distance to a wall that + // the particle can be in the n direction + inline scalar wallImpactDistance(const vector& n) const; + //- Return the index of the face to be used in the interpolation // routine inline label faceInterpolation() const; + //- Particle mass + inline scalar mass() const; + //- Particle volume inline scalar volume() const; - //- Particle mass - inline scalar mass() const; + //- Particle volume for a given diameter + inline scalar volume(const scalar d) const; //- Particle projected area inline scalar areaP() const; + //- Projected area for given diameter + inline scalar areaP(const scalar d) const; + //- Particle surface area inline scalar areaS() const; + //- Surface area for given diameter + inline scalar areaS(const scalar d) const; + // Main calculation loop diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelI.H b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelI.H index 4a6be04a97..8582792460 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelI.H +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelI.H @@ -63,20 +63,20 @@ template inline Foam::KinematicParcel::KinematicParcel ( KinematicCloud& owner, - const label typeId, const vector& position, const label cellI, + const label typeId, + const scalar nParticle0, const scalar d0, const vector& U0, - const scalar nParticle0, const constantProperties& constProps ) : Particle(owner, position, cellI), typeId_(typeId), + nParticle_(nParticle0), d_(d0), U_(U0), - nParticle_(nParticle0), rho_(constProps.rho0()), tTurb_(0.0), UTurb_(vector::zero), @@ -171,6 +171,13 @@ inline Foam::label Foam::KinematicParcel::typeId() const } +template +inline Foam::scalar Foam::KinematicParcel::nParticle() const +{ + return nParticle_; +} + + template inline Foam::scalar Foam::KinematicParcel::d() const { @@ -178,6 +185,48 @@ inline Foam::scalar Foam::KinematicParcel::d() const } +template +inline const Foam::vector& Foam::KinematicParcel::U() const +{ + return U_; +} + + +template +inline Foam::scalar Foam::KinematicParcel::rho() const +{ + return rho_; +} + + +template +inline Foam::scalar Foam::KinematicParcel::tTurb() const +{ + return tTurb_; +} + + +template +inline const Foam::vector& Foam::KinematicParcel::UTurb() const +{ + return UTurb_; +} + + +template +inline Foam::label Foam::KinematicParcel::typeId() +{ + return typeId_; +} + + +template +inline Foam::scalar& Foam::KinematicParcel::nParticle() +{ + return nParticle_; +} + + template inline Foam::scalar& Foam::KinematicParcel::d() { @@ -185,6 +234,34 @@ inline Foam::scalar& Foam::KinematicParcel::d() } +template +inline Foam::vector& Foam::KinematicParcel::U() +{ + return U_; +} + + +template +inline Foam::scalar& Foam::KinematicParcel::rho() +{ + return rho_; +} + + +template +inline Foam::scalar& Foam::KinematicParcel::tTurb() +{ + return tTurb_; +} + + +template +inline Foam::vector& Foam::KinematicParcel::UTurb() +{ + return UTurb_; +} + + template inline Foam::scalar Foam::KinematicParcel::wallImpactDistance ( @@ -210,83 +287,6 @@ inline Foam::label Foam::KinematicParcel::faceInterpolation() const } -template -inline const Foam::vector& Foam::KinematicParcel::U() const -{ - return U_; -} - - -template -inline Foam::vector& Foam::KinematicParcel::U() -{ - return U_; -} - - -template -inline Foam::scalar Foam::KinematicParcel::nParticle() const -{ - return nParticle_; -} - - -template -inline Foam::scalar& Foam::KinematicParcel::nParticle() -{ - return nParticle_; -} - - -template -inline Foam::scalar Foam::KinematicParcel::rho() const -{ - return rho_; -} - - -template -inline Foam::scalar& Foam::KinematicParcel::rho() -{ - return rho_; -} - - -template -inline Foam::scalar Foam::KinematicParcel::tTurb() const -{ - return tTurb_; -} - - -template -inline Foam::scalar& Foam::KinematicParcel::tTurb() -{ - return tTurb_; -} - - -template -inline const Foam::vector& Foam::KinematicParcel::UTurb() const -{ - return UTurb_; -} - - -template -inline Foam::vector& Foam::KinematicParcel::UTurb() -{ - return UTurb_; -} - - -template -inline Foam::scalar Foam::KinematicParcel::volume() const -{ - return mathematicalConstant::pi/6.0*pow3(d_); -} - - template inline Foam::scalar Foam::KinematicParcel::mass() const { @@ -294,17 +294,48 @@ inline Foam::scalar Foam::KinematicParcel::mass() const } +template +inline Foam::scalar Foam::KinematicParcel::volume() const +{ + return volume(d_); +} + + +template +inline Foam::scalar +Foam::KinematicParcel::volume(const scalar d) const +{ + return mathematicalConstant::pi/6.0*pow3(d); +} + + template inline Foam::scalar Foam::KinematicParcel::areaP() const { - return 0.25*areaS(); + return areaP(d_); +} + + +template +inline Foam::scalar +Foam::KinematicParcel::areaP(const scalar d) const +{ + return 0.25*areaS(d); } template inline Foam::scalar Foam::KinematicParcel::areaS() const { - return mathematicalConstant::pi*d_*d_; + return areaS(d_); +} + + +template +inline Foam::scalar +Foam::KinematicParcel::areaS(const scalar d) const +{ + return mathematicalConstant::pi*d*d; } diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelIO.C b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelIO.C index 36535ab6a0..ae96d25a14 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelIO.C +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelIO.C @@ -41,9 +41,9 @@ Foam::KinematicParcel::KinematicParcel : Particle(cloud, is, readFields), typeId_(0), + nParticle_(0.0), d_(0.0), U_(vector::zero), - nParticle_(0.0), rho_(0.0), tTurb_(0.0), UTurb_(vector::zero), @@ -56,9 +56,9 @@ Foam::KinematicParcel::KinematicParcel if (is.format() == IOstream::ASCII) { typeId_ = readLabel(is); + nParticle_ = readScalar(is); d_ = readScalar(is); is >> U_; - nParticle_ = readScalar(is); rho_ = readScalar(is); tTurb_ = readScalar(is); is >> UTurb_; @@ -69,9 +69,9 @@ Foam::KinematicParcel::KinematicParcel ( reinterpret_cast(&typeId_), sizeof(typeId_) + + sizeof(nParticle_) + sizeof(d_) + sizeof(U_) - + sizeof(nParticle_) + sizeof(rho_) + sizeof(tTurb_) + sizeof(UTurb_) @@ -108,7 +108,8 @@ void Foam::KinematicParcel::readFields IOField U(c.fieldIOobject("U", IOobject::MUST_READ)); c.checkFieldIOobject(c, U); - IOField nParticle(c.fieldIOobject("nParticle", IOobject::MUST_READ)); + IOField + nParticle(c.fieldIOobject("nParticle", IOobject::MUST_READ)); c.checkFieldIOobject(c, nParticle); IOField rho(c.fieldIOobject("rho", IOobject::MUST_READ)); @@ -126,9 +127,9 @@ void Foam::KinematicParcel::readFields ParcelType& p = iter(); p.typeId_ = typeId[i]; + p.nParticle_ = nParticle[i]; p.d_ = d[i]; p.U_ = U[i]; - p.nParticle_ = nParticle[i]; p.rho_ = rho[i]; p.tTurb_ = tTurb[i]; p.UTurb_ = UTurb[i]; @@ -148,13 +149,13 @@ void Foam::KinematicParcel::writeFields label np = c.size(); IOField