From 48d003675abd8c4f9128fafdfed4850b59c3d55b Mon Sep 17 00:00:00 2001 From: andy <a.heather@opencfd.co.uk> Date: Tue, 26 May 2009 11:25:15 +0100 Subject: [PATCH] using new setProperties method for new particles --- .../ConeInjection/ConeInjection.C | 24 ++-- .../ConeInjection/ConeInjection.H | 24 ++-- .../FieldActivatedInjection.C | 22 ++-- .../FieldActivatedInjection.H | 24 ++-- .../InjectionModel/InjectionModel.C | 103 ++++++++++-------- .../InjectionModel/InjectionModel.H | 20 +++- .../ManualInjection/ManualInjection.C | 24 ++-- .../ManualInjection/ManualInjection.H | 24 ++-- .../InjectionModel/NoInjection/NoInjection.C | 22 ++-- .../InjectionModel/NoInjection/NoInjection.H | 22 ++-- 10 files changed, 151 insertions(+), 158 deletions(-) diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.C index a812eb91897..9eb74d585f8 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.C @@ -186,12 +186,14 @@ void Foam::ConeInjection<CloudType>::setPositionAndCell template<class CloudType> -Foam::vector Foam::ConeInjection<CloudType>::velocity +void Foam::ConeInjection<CloudType>::setProperties ( - const label, - const scalar time + const label parcelI, + const scalar time, + typename CloudType::parcelType* pPtr ) { + // set particle velocity const scalar deg2Rad = mathematicalConstant::pi/180.0; scalar t = time - this->SOI_; @@ -210,23 +212,15 @@ Foam::vector Foam::ConeInjection<CloudType>::velocity dirVec += normal; dirVec /= mag(dirVec); - return Umag_().value(t)*dirVec; -} - + pPtr->U() = Umag_().value(t)*dirVec; -template<class CloudType> -Foam::scalar Foam::ConeInjection<CloudType>::d0 -( - const label, - const scalar -) const -{ - return parcelPDF_().sample(); + // set particle diameter + pPtr->d() = parcelPDF_().sample(); } template<class CloudType> -bool Foam::ConeInjection<CloudType>::validInjection(const label parcelI) +bool Foam::ConeInjection<CloudType>::validInjection(const label) { return true; } diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.H index b65a6b58988..b60c1377aee 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.H @@ -108,14 +108,14 @@ protected: // Protected member functions - //- Number of parcels to introduce over the time step + //- Number of parcels to introduce over the time step relative to SOI label parcelsToInject ( const scalar time0, const scalar time1 ) const; - //- Number of parcels to introduce over the time step + //- Number of parcels to introduce over the time step relative to SOI scalar volumeToInject ( const scalar time0, @@ -155,7 +155,7 @@ public: // Injection geometry //- Set the injection position and owner cell - void setPositionAndCell + virtual void setPositionAndCell ( const label parcelI, const scalar time, @@ -163,23 +163,21 @@ public: label& cellOwner ); - //- Return the velocity of the parcel to introduce at a time - vector velocity + virtual void setProperties ( const label parcelI, - const scalar time + const scalar time, + typename CloudType::parcelType* pPtr ); - //- Return the diameter of the parcel to introduce at a time - scalar d0 - ( - const label parcelI, - const scalar time - ) const; + virtual bool fullyDescribed() const + { + return false; + } //- Return flag to identify whether or not injection in cellI is // permitted - bool validInjection(const label parcelI); + virtual bool validInjection(const label parcelI); }; diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/FieldActivatedInjection/FieldActivatedInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/FieldActivatedInjection/FieldActivatedInjection.C index 3110de5c3e3..b3340351438 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/FieldActivatedInjection/FieldActivatedInjection.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/FieldActivatedInjection/FieldActivatedInjection.C @@ -181,24 +181,18 @@ void Foam::FieldActivatedInjection<CloudType>::setPositionAndCell template<class CloudType> -Foam::vector Foam::FieldActivatedInjection<CloudType>::velocity +void Foam::FieldActivatedInjection<CloudType>::setProperties ( - const label, - const scalar + const label parcelI, + const scalar, + typename CloudType::parcelType* pPtr ) { - return U0_; -} + // set particle velocity + pPtr->U() = U0_; - -template<class CloudType> -Foam::scalar Foam::FieldActivatedInjection<CloudType>::d0 -( - const label parcelI, - const scalar -) const -{ - return diameters_[parcelI]; + // set particle diameter + pPtr->d() = diameters_[parcelI]; } diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/FieldActivatedInjection/FieldActivatedInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/FieldActivatedInjection/FieldActivatedInjection.H index 0fec8998159..88d9c8302f6 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/FieldActivatedInjection/FieldActivatedInjection.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/FieldActivatedInjection/FieldActivatedInjection.H @@ -113,14 +113,14 @@ protected: // Protected member functions - //- Number of parcels to introduce over the time step + //- Number of parcels to introduce over the time step relative to SOI label parcelsToInject ( const scalar time0, const scalar time1 ) const; - //- Volume of parcels to introduce over the time step + //- Volume of parcels to introduce over the time step relative to SOI scalar volumeToInject ( const scalar time0, @@ -160,7 +160,7 @@ public: // Injection geometry //- Set the injection position and owner cell - void setPositionAndCell + virtual void setPositionAndCell ( const label parcelI, const scalar time, @@ -168,23 +168,21 @@ public: label& cellOwner ); - //- Return the velocity of the parcel to introduce at a time - vector velocity + virtual void setProperties ( const label parcelI, - const scalar time + const scalar time, + typename CloudType::parcelType* pPtr ); - //- Return the diameter of the parcel to introduce at a time - scalar d0 - ( - const label parcelI, - const scalar time - ) const; + virtual bool fullyDescribed() const + { + return false; + } //- Return flag to identify whether or not injection in cellI is // permitted - bool validInjection(const label parcelI); + virtual bool validInjection(const label parcelI); }; diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C index 6a0ba9544bc..d73859de150 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C @@ -88,8 +88,7 @@ void Foam::InjectionModel<CloudType>::writeProps() template<class CloudType> void Foam::InjectionModel<CloudType>::prepareForNextTimeStep ( - const scalar time0, - const scalar time1, + const scalar time, label& newParcels, scalar& newVolume ) @@ -99,15 +98,15 @@ void Foam::InjectionModel<CloudType>::prepareForNextTimeStep newVolume = 0.0; // Return if not started injection event - if (time1 < SOI_) + if (time < SOI_) { - timeStep0_ = time1; + timeStep0_ = time; return; } // Make times relative to SOI scalar t0 = timeStep0_ - SOI_; - scalar t1 = time1 - SOI_; + scalar t1 = time - SOI_; // Number of parcels to inject newParcels = parcelsToInject(t0, t1); @@ -123,7 +122,7 @@ void Foam::InjectionModel<CloudType>::prepareForNextTimeStep else { // advance value of timeStep0_ - timeStep0_ = time1; + timeStep0_ = time; } } @@ -348,13 +347,22 @@ void Foam::InjectionModel<CloudType>::inject(TrackData& td) } const scalar time = owner_.db().time().value(); - const scalar continuousDt = owner_.db().time().deltaT().value(); +/* + // Return if not started injection event + if (time < SOI_) + { + timeStep0_ = time; + postInjectCheck(0); + return; + } +*/ + const scalar carrierDt = owner_.db().time().deltaT().value(); const polyMesh& mesh = owner_.mesh(); // Prepare for next time step label newParcels = 0; scalar newVolume = 0.0; - prepareForNextTimeStep(time0_, time, newParcels, newVolume); + prepareForNextTimeStep(time, newParcels, newVolume); // Return if no parcels are required if (newParcels == 0) @@ -363,18 +371,11 @@ void Foam::InjectionModel<CloudType>::inject(TrackData& td) return; } - // Particle density given by constant properties - const scalar rho = td.constProps().rho0(); - // Volume fraction to introduce during this timestep const scalar volFraction = volumeFraction(newVolume); // Duration of injection period during this timestep - const scalar deltaT = min - ( - continuousDt, - min(time - SOI_, timeEnd() - time0_) - ); + const scalar deltaT = min(carrierDt, min(time - SOI_, timeEnd() - time0_)); // Pad injection time if injection starts during this timestep const scalar padTime = max(0.0, SOI_ - time0_); @@ -383,44 +384,56 @@ void Foam::InjectionModel<CloudType>::inject(TrackData& td) label parcelsAdded = 0; for (label parcelI=0; parcelI<newParcels; parcelI++) { - // Calculate the pseudo time of injection for parcel 'parcelI' - scalar timeInj = time0_ + padTime + deltaT*parcelI/newParcels; - - // Determine the injection position and owner cell - label cellI = -1; - vector pos = vector::zero; - setPositionAndCell(parcelI, timeInj, pos, cellI); - - if (cellI > -1) + if (validInjection(parcelI)) { - if (validInjection(parcelI)) - { - // Diameter of parcels - scalar d = d0(parcelI, timeInj); + // Calculate the pseudo time of injection for parcel 'parcelI' + scalar timeInj = time0_ + padTime + deltaT*parcelI/newParcels; - // Number of particles per parcel - scalar nP = setNumberOfParticles - ( - newParcels, - newVolume, - volFraction, - d, - rho - ); - - // Velocity of parcels - vector U = velocity(parcelI, timeInj); + // Determine the injection position and owner cell + label cellI = -1; + vector pos = vector::zero; + setPositionAndCell(parcelI, timeInj, pos, cellI); + if (cellI > -1) + { // Lagrangian timestep scalar dt = time - timeInj; - // Apply corrections for 2-D cases + // Apply corrections to position for 2-D cases meshTools::constrainToMeshCentre(mesh, pos); - meshTools::constrainDirection(mesh, mesh.solutionD(), U); + + // Create a new parcel + parcelType* pPtr = new parcelType(td.cloud(), pos, cellI); + + // Assign new parcel properties in injection model + setProperties(parcelI, timeInj, pPtr); + + // Check new parcel properties + td.cloud().checkParcelProperties(pPtr, dt, fullyDescribed()); + + // Apply correction to velocity for 2-D cases + meshTools::constrainDirection + ( + mesh, + mesh.solutionD(), + pPtr->U() + ); + + // Number of particles per parcel + pPtr->nParticle() = + setNumberOfParticles + ( + newParcels, + newVolume, + volFraction, + pPtr->d(), + pPtr->rho() + ); // Add the new parcel - td.cloud().addNewParcel(pos, cellI, d, U, nP, dt); - massInjected_ += nP*rho*mathematicalConstant::pi*pow3(d)/6.0; + td.cloud().addParticle(pPtr); + + massInjected_ += pPtr->nParticle()*pPtr->mass(); parcelsAdded++; } } diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H index b18f1b0dceb..6e612194e3a 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H @@ -93,6 +93,9 @@ protected: // Protected data + //- Convenience typedef for parcel type + typedef typename CloudType::parcelType parcelType; + // Global injection properties //- Start of injection [s] @@ -132,14 +135,14 @@ protected: // Protected member functions - //- Number of parcels to introduce over the time step + //- Number of parcels to introduce over the time step relative to SOI virtual label parcelsToInject ( const scalar time0, const scalar time1 ) const = 0; - //- Volume of parcels to introduce over the time step + //- Volume of parcels to introduce over the time step relative to SOI virtual scalar volumeToInject ( const scalar time0, @@ -153,8 +156,7 @@ protected: //- Determine properties for next time step/injection interval virtual void prepareForNextTimeStep ( - const scalar time0, - const scalar time1, + const scalar time, label& newParcels, scalar& newVolume ); @@ -291,6 +293,15 @@ public: label& cellOwner ) = 0; + virtual void setProperties + ( + const label parcelI, + const scalar time, + typename CloudType::parcelType* pPtr + ) = 0; + + virtual bool fullyDescribed() const = 0; +/* //- Return the velocity of the parcel to introduce at a time virtual vector velocity ( @@ -304,6 +315,7 @@ public: const label parcelI, const scalar time ) const = 0; +*/ }; diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.C index 6d71828c237..f7da4915a24 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.C @@ -130,7 +130,7 @@ template<class CloudType> Foam::scalar Foam::ManualInjection<CloudType>::timeEnd() const { // Not used - return 0.0; + return this->SOI_; } @@ -149,24 +149,18 @@ void Foam::ManualInjection<CloudType>::setPositionAndCell template<class CloudType> -Foam::vector Foam::ManualInjection<CloudType>::velocity +void Foam::ManualInjection<CloudType>::setProperties ( - const label, - const scalar + const label parcelI, + const scalar, + typename CloudType::parcelType* pPtr ) { - return U0_; -} + // set particle velocity + pPtr->U() = U0_; - -template<class CloudType> -Foam::scalar Foam::ManualInjection<CloudType>::d0 -( - const label parcelI, - const scalar -) const -{ - return diameters_[parcelI]; + // set particle diameter + pPtr->d() = diameters_[parcelI]; } diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.H index 6b3988abcaa..327ec83ce23 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.H @@ -85,14 +85,14 @@ protected: // Protected member functions - //- Number of parcels to introduce over the time step + //- Number of parcels to introduce over the time step relative to SOI label parcelsToInject ( const scalar time0, const scalar time1 ) const; - //- Volume of parcels to introduce over the time step + //- Volume of parcels to introduce over the time step relative to SOI scalar volumeToInject ( const scalar time0, @@ -132,7 +132,7 @@ public: // Injection geometry //- Set the injection position and owner cell - void setPositionAndCell + virtual void setPositionAndCell ( const label parcelI, const scalar time, @@ -140,23 +140,21 @@ public: label& cellOwner ); - //- Return the velocity of the parcel to introduce at a time - vector velocity + virtual void setProperties ( const label parcelI, - const scalar time + const scalar time, + typename CloudType::parcelType* pPtr ); - //- Return the diameter of the parcel to introduce at a time - scalar d0 - ( - const label parcelI, - const scalar time - ) const; + virtual bool fullyDescribed() const + { + return false; + } //- Return flag to identify whether or not injection in cellI is // permitted - bool validInjection(const label parcelI); + virtual bool validInjection(const label parcelI); }; diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.C index 5e51bc26a9e..d2936b3cbec 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.C @@ -99,24 +99,18 @@ void Foam::NoInjection<CloudType>::setPositionAndCell template<class CloudType> -Foam::vector Foam::NoInjection<CloudType>::velocity +void Foam::NoInjection<CloudType>::setProperties ( - const label, - const scalar + const label parcelI, + const scalar, + typename CloudType::parcelType* pPtr ) { - return vector::zero; -} - + // set particle velocity + pPtr->U() = vector::zero; -template<class CloudType> -Foam::scalar Foam::NoInjection<CloudType>::d0 -( - const label, - const scalar -) const -{ - return 0.0; + // set particle diameter + pPtr->d() = 0.0; } diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.H index e05790a64e9..fef47e00b33 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.H @@ -56,14 +56,14 @@ protected: // Protected member functions - //- Number of parcels to introduce over the time step + //- Number of parcels to introduce over the time step relative to SOI label parcelsToInject ( const scalar, const scalar ) const; - //- Volume of parcels to introduce over the time step + //- Volume of parcels to introduce over the time step relative to SOI scalar volumeToInject ( const scalar, @@ -103,7 +103,7 @@ public: // Injection geometry //- Set the injection position and owner cell - void setPositionAndCell + virtual void setPositionAndCell ( const label parcelI, const scalar time, @@ -111,19 +111,17 @@ public: label& cellOwner ); - //- Return the velocity of the parcel to introduce at a time - vector velocity + virtual void setProperties ( const label parcelI, - const scalar time + const scalar time, + typename CloudType::parcelType* pPtr ); - //- Return the diameter of the parcel to introduce at a time - scalar d0 - ( - const label parcelI, - const scalar time - ) const; + virtual bool fullyDescribed() const + { + return false; + } //- Return flag to identify whether or not injection in cellI is // permitted -- GitLab