diff --git a/src/finiteVolume/interpolation/interpolation/interpolation/interpolation.C b/src/finiteVolume/interpolation/interpolation/interpolation/interpolation.C index ea2e8270b1..d58b189f0b 100644 --- a/src/finiteVolume/interpolation/interpolation/interpolation/interpolation.C +++ b/src/finiteVolume/interpolation/interpolation/interpolation/interpolation.C @@ -28,7 +28,7 @@ License #include "polyMesh.H" #include "calculatedPointPatchFields.H" -// * * * * * * * * * * * * * * * * Constructor * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template Foam::interpolation::interpolation @@ -41,6 +41,14 @@ Foam::interpolation::interpolation {} +template +Foam::interpolation::interpolation(const interpolation& i) +: + psi_(i.psi_), + mesh_(i.mesh_) +{} + + // * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * * // template diff --git a/src/finiteVolume/interpolation/interpolation/interpolation/interpolation.H b/src/finiteVolume/interpolation/interpolation/interpolation/interpolation.H index a700253908..45bcfe4a2a 100644 --- a/src/finiteVolume/interpolation/interpolation/interpolation/interpolation.H +++ b/src/finiteVolume/interpolation/interpolation/interpolation/interpolation.H @@ -110,6 +110,13 @@ public: const VolField& psi ); + //- Copy constructor + interpolation(const interpolation& i); + + //- Clone + virtual autoPtr> clone() const = 0; + + //- Destructor virtual ~interpolation() diff --git a/src/finiteVolume/interpolation/interpolation/interpolationCell/interpolationCell.C b/src/finiteVolume/interpolation/interpolation/interpolationCell/interpolationCell.C index df459b6df3..3ceccb0609 100644 --- a/src/finiteVolume/interpolation/interpolation/interpolationCell/interpolationCell.C +++ b/src/finiteVolume/interpolation/interpolation/interpolationCell/interpolationCell.C @@ -38,6 +38,16 @@ Foam::interpolationCell::interpolationCell {} +template +Foam::interpolationCell::interpolationCell +( + const interpolationCell& i +) +: + fieldInterpolation>(i) +{} + + // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template diff --git a/src/finiteVolume/interpolation/interpolation/interpolationCell/interpolationCell.H b/src/finiteVolume/interpolation/interpolation/interpolationCell/interpolationCell.H index a63150d881..aef1b6d2ce 100644 --- a/src/finiteVolume/interpolation/interpolation/interpolationCell/interpolationCell.H +++ b/src/finiteVolume/interpolation/interpolation/interpolationCell/interpolationCell.H @@ -65,6 +65,19 @@ public: const VolField& psi ); + //- Copy construct + interpolationCell(const interpolationCell& i); + + //- Clone + virtual autoPtr> clone() const + { + return autoPtr> + ( + new interpolationCell(*this) + ); + } + + // Member Functions diff --git a/src/finiteVolume/interpolation/interpolation/interpolationCellPatchConstrained/interpolationCellPatchConstrained.C b/src/finiteVolume/interpolation/interpolation/interpolationCellPatchConstrained/interpolationCellPatchConstrained.C index 2a416106b4..3a32b02b5d 100644 --- a/src/finiteVolume/interpolation/interpolation/interpolationCellPatchConstrained/interpolationCellPatchConstrained.C +++ b/src/finiteVolume/interpolation/interpolation/interpolationCellPatchConstrained/interpolationCellPatchConstrained.C @@ -38,6 +38,16 @@ Foam::interpolationCellPatchConstrained::interpolationCellPatchConstrained {} +template +Foam::interpolationCellPatchConstrained::interpolationCellPatchConstrained +( + const interpolationCellPatchConstrained& i +) +: + fieldInterpolation>(i) +{} + + // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template diff --git a/src/finiteVolume/interpolation/interpolation/interpolationCellPatchConstrained/interpolationCellPatchConstrained.H b/src/finiteVolume/interpolation/interpolation/interpolationCellPatchConstrained/interpolationCellPatchConstrained.H index 3cecaa0c73..895adb1fde 100644 --- a/src/finiteVolume/interpolation/interpolation/interpolationCellPatchConstrained/interpolationCellPatchConstrained.H +++ b/src/finiteVolume/interpolation/interpolation/interpolationCellPatchConstrained/interpolationCellPatchConstrained.H @@ -67,6 +67,21 @@ public: const VolField& psi ); + //- Copy construct + interpolationCellPatchConstrained + ( + const interpolationCellPatchConstrained& i + ); + + //- Clone + virtual autoPtr> clone() const + { + return autoPtr> + ( + new interpolationCellPatchConstrained(*this) + ); + } + // Member Functions diff --git a/src/finiteVolume/interpolation/interpolation/interpolationCellPoint/interpolationCellPoint.C b/src/finiteVolume/interpolation/interpolation/interpolationCellPoint/interpolationCellPoint.C index eb84fdd274..5075d16ff0 100644 --- a/src/finiteVolume/interpolation/interpolation/interpolationCellPoint/interpolationCellPoint.C +++ b/src/finiteVolume/interpolation/interpolation/interpolationCellPoint/interpolationCellPoint.C @@ -42,6 +42,20 @@ Foam::interpolationCellPoint::interpolationCellPoint } +template +Foam::interpolationCellPoint::interpolationCellPoint +( + const interpolationCellPoint& i +) +: + fieldInterpolation>(i), + interpolationVolPointInterpolation(i) +{ + // Uses cellPointWeight to do interpolation which needs tet decomposition + (void)this->psi().mesh().tetBasePtIs(); +} + + template Foam::interpolationCellPoint::interpolationCellPoint ( diff --git a/src/finiteVolume/interpolation/interpolation/interpolationCellPoint/interpolationCellPoint.H b/src/finiteVolume/interpolation/interpolation/interpolationCellPoint/interpolationCellPoint.H index 2599ae3e2a..4b833249bc 100644 --- a/src/finiteVolume/interpolation/interpolation/interpolationCellPoint/interpolationCellPoint.H +++ b/src/finiteVolume/interpolation/interpolation/interpolationCellPoint/interpolationCellPoint.H @@ -65,6 +65,12 @@ public: const VolField& psi ); + //- Copy construct + interpolationCellPoint + ( + const interpolationCellPoint& i + ); + //- Construct from components interpolationCellPoint ( @@ -72,6 +78,15 @@ public: tmp> psip ); + //- Clone + virtual autoPtr> clone() const + { + return autoPtr> + ( + new interpolationCellPoint(*this) + ); + } + // Member Functions diff --git a/src/finiteVolume/interpolation/interpolation/interpolationCellPointFace/interpolationCellPointFace.C b/src/finiteVolume/interpolation/interpolation/interpolationCellPointFace/interpolationCellPointFace.C index 6a3b4e4d21..de08f3f454 100644 --- a/src/finiteVolume/interpolation/interpolation/interpolationCellPointFace/interpolationCellPointFace.C +++ b/src/finiteVolume/interpolation/interpolation/interpolationCellPointFace/interpolationCellPointFace.C @@ -45,6 +45,18 @@ Foam::interpolationCellPointFace::interpolationCellPointFace {} +template +Foam::interpolationCellPointFace::interpolationCellPointFace +( + const interpolationCellPointFace& i +) +: + fieldInterpolation>(i), + interpolationVolPointInterpolation(i), + psis_(i.psis_.clone()) +{} + + // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template diff --git a/src/finiteVolume/interpolation/interpolation/interpolationCellPointFace/interpolationCellPointFace.H b/src/finiteVolume/interpolation/interpolation/interpolationCellPointFace/interpolationCellPointFace.H index 60554a485d..ee2c771b6d 100644 --- a/src/finiteVolume/interpolation/interpolation/interpolationCellPointFace/interpolationCellPointFace.H +++ b/src/finiteVolume/interpolation/interpolation/interpolationCellPointFace/interpolationCellPointFace.H @@ -90,6 +90,21 @@ public: const VolField& psi ); + //- Copy construct + interpolationCellPointFace + ( + const interpolationCellPointFace& i + ); + + //- Clone + virtual autoPtr> clone() const + { + return autoPtr> + ( + new interpolationCellPointFace(*this) + ); + } + // Member Functions diff --git a/src/finiteVolume/interpolation/interpolation/interpolationCellPointWallModified/interpolationCellPointWallModified.C b/src/finiteVolume/interpolation/interpolation/interpolationCellPointWallModified/interpolationCellPointWallModified.C index 97af244ba0..5645337c8c 100644 --- a/src/finiteVolume/interpolation/interpolation/interpolationCellPointWallModified/interpolationCellPointWallModified.C +++ b/src/finiteVolume/interpolation/interpolation/interpolationCellPointWallModified/interpolationCellPointWallModified.C @@ -331,4 +331,15 @@ interpolationCellPointWallModified {} +template +Foam::interpolationCellPointWallModified:: +interpolationCellPointWallModified +( + const interpolationCellPointWallModified& i +) +: + interpolationCellPoint(i) +{} + + // ************************************************************************* // diff --git a/src/finiteVolume/interpolation/interpolation/interpolationCellPointWallModified/interpolationCellPointWallModified.H b/src/finiteVolume/interpolation/interpolation/interpolationCellPointWallModified/interpolationCellPointWallModified.H index 2f0df28657..adf3ce47c3 100644 --- a/src/finiteVolume/interpolation/interpolation/interpolationCellPointWallModified/interpolationCellPointWallModified.H +++ b/src/finiteVolume/interpolation/interpolation/interpolationCellPointWallModified/interpolationCellPointWallModified.H @@ -84,6 +84,21 @@ public: ( const VolField& psi ); + + //- Copy construct + interpolationCellPointWallModified + ( + const interpolationCellPointWallModified& i + ); + + //- Clone + virtual autoPtr> clone() const + { + return autoPtr> + ( + new interpolationCellPointWallModified(*this) + ); + } }; diff --git a/src/finiteVolume/interpolation/interpolation/interpolationPointMVC/interpolationPointMVC.C b/src/finiteVolume/interpolation/interpolation/interpolationPointMVC/interpolationPointMVC.C index 1331af61a2..35cde7b6f5 100644 --- a/src/finiteVolume/interpolation/interpolation/interpolationPointMVC/interpolationPointMVC.C +++ b/src/finiteVolume/interpolation/interpolation/interpolationPointMVC/interpolationPointMVC.C @@ -39,4 +39,15 @@ Foam::interpolationPointMVC::interpolationPointMVC {} +template +Foam::interpolationPointMVC::interpolationPointMVC +( + const interpolationPointMVC& i +) +: + fieldInterpolation>(i), + interpolationVolPointInterpolation(i) +{} + + // ************************************************************************* // diff --git a/src/finiteVolume/interpolation/interpolation/interpolationPointMVC/interpolationPointMVC.H b/src/finiteVolume/interpolation/interpolation/interpolationPointMVC/interpolationPointMVC.H index d24e2582b4..4c092028ac 100644 --- a/src/finiteVolume/interpolation/interpolation/interpolationPointMVC/interpolationPointMVC.H +++ b/src/finiteVolume/interpolation/interpolation/interpolationPointMVC/interpolationPointMVC.H @@ -65,6 +65,21 @@ public: const VolField& psi ); + //- Copy construct + interpolationPointMVC + ( + const interpolationPointMVC& i + ); + + //- Clone + virtual autoPtr> clone() const + { + return autoPtr> + ( + new interpolationPointMVC(*this) + ); + } + // Member Functions diff --git a/src/finiteVolume/interpolation/interpolation/interpolationVolPointInterpolation/interpolationVolPointInterpolation.C b/src/finiteVolume/interpolation/interpolation/interpolationVolPointInterpolation/interpolationVolPointInterpolation.C index 78ca17ceb5..06edbc9597 100644 --- a/src/finiteVolume/interpolation/interpolation/interpolationVolPointInterpolation/interpolationVolPointInterpolation.C +++ b/src/finiteVolume/interpolation/interpolation/interpolationVolPointInterpolation/interpolationVolPointInterpolation.C @@ -47,6 +47,17 @@ interpolationVolPointInterpolation {} +template +Foam::interpolationVolPointInterpolation:: +interpolationVolPointInterpolation +( + const interpolationVolPointInterpolation& i +) +: + psip_(i.psip_.clone()) +{} + + template Foam::interpolationVolPointInterpolation:: interpolationVolPointInterpolation diff --git a/src/finiteVolume/interpolation/interpolation/interpolationVolPointInterpolation/interpolationVolPointInterpolation.H b/src/finiteVolume/interpolation/interpolation/interpolationVolPointInterpolation/interpolationVolPointInterpolation.H index 0fb2ea6225..777297a2cf 100644 --- a/src/finiteVolume/interpolation/interpolation/interpolationVolPointInterpolation/interpolationVolPointInterpolation.H +++ b/src/finiteVolume/interpolation/interpolation/interpolationVolPointInterpolation/interpolationVolPointInterpolation.H @@ -70,6 +70,12 @@ public: const VolField& psi ); + //- Copy construct + interpolationVolPointInterpolation + ( + const interpolationVolPointInterpolation& i + ); + //- Construct from components interpolationVolPointInterpolation ( diff --git a/src/lagrangian/parcel/clouds/Templates/MPPICCloud/MPPICCloud.C b/src/lagrangian/parcel/clouds/Templates/MPPICCloud/MPPICCloud.C index 1a670d2375..bd4a49f7be 100644 --- a/src/lagrangian/parcel/clouds/Templates/MPPICCloud/MPPICCloud.C +++ b/src/lagrangian/parcel/clouds/Templates/MPPICCloud/MPPICCloud.C @@ -62,6 +62,17 @@ void Foam::MPPICCloud::setModels() } +template +void Foam::MPPICCloud::cloudReset(MPPICCloud& c) +{ + CloudType::cloudReset(c); + + packingModel_.reset(c.packingModel_.ptr()); + dampingModel_.reset(c.dampingModel_.ptr()); + isotropyModel_.reset(c.isotropyModel_.ptr()); +} + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template @@ -166,7 +177,8 @@ void Foam::MPPICCloud::storeState() template void Foam::MPPICCloud::restoreState() { - this->cloudReset(cloudCopyPtr_()); + cloudReset(cloudCopyPtr_()); + cloudCopyPtr_.clear(); } @@ -191,98 +203,104 @@ void Foam::MPPICCloud::motion typename parcelType::trackingData& td ) { - // Momentum - // ~~~~~~~~ + // Assign parcel ID-s + label i = 0; + forAllIter(typename MPPICCloud, *this, iter) + { + iter().id() = labelPair(Pstream::myProcNo(), i ++); + } - // force calculation and tracking - td.part() = parcelType::trackingData::tpPredictTrack; + // Create a copy of all parcels and sources to use as a predictor + autoPtr> predictorCloudPtr + ( + static_cast*> + ( + clone(this->name() + "Predictor").ptr() + ) + ); + MPPICCloud& predictorCloud = predictorCloudPtr(); + + // Predictor move + predictorCloud.CloudType::move(predictorCloud, td); + + // Calculate correction velocities + const scalar trackTime = td.trackTime(); + td.updateAverages(predictorCloud); + predictorCloud.dampingModel().cacheFields(true); + predictorCloud.packingModel().cacheFields(true); + vectorField UCorr(this->size(), Zero); + List> UCorrProc(Pstream::nProcs()); + List> IDProc(Pstream::nProcs()); + forAllIter(typename MPPICCloud, predictorCloud, iter) + { + const labelPair& id = iter().id(); + + const vector dU = + predictorCloud.packingModel().velocityCorrection(iter(), trackTime) + + predictorCloud.dampingModel().velocityCorrection(iter(), trackTime); + + if (id.first() == Pstream::myProcNo()) + { + UCorr[id.second()] = dU; + } + else + { + UCorrProc[id.first()].append(dU); + IDProc[id.first()].append(id.second()); + } + } + predictorCloud.dampingModel().cacheFields(false); + predictorCloud.packingModel().cacheFields(false); + + // Distribute the correction velocities + PstreamBuffers pBufs(Pstream::commsTypes::nonBlocking); + if (Pstream::parRun()) + { + forAll(UCorrProc, proci) + { + if (proci == Pstream::myProcNo()) continue; + + UOPstream os(proci, pBufs); + + os << UCorrProc[proci] << IDProc[proci]; + } + + pBufs.finishedSends(); + + forAll(UCorrProc, proci) + { + if (proci == Pstream::myProcNo()) continue; + + UIPstream is(proci, pBufs); + + is >> UCorrProc[proci] >> IDProc[proci]; + } + } + forAll(UCorrProc, proci) + { + if (proci == Pstream::myProcNo()) continue; + + forAll(UCorrProc[proci], i) + { + UCorr[IDProc[proci][i]] = UCorrProc[proci][i]; + } + } + + // Apply the correction velocities to the parcels + forAllIter(typename MPPICCloud, *this, iter) + { + iter().U() += UCorr[iter().id().second()]; + } + + // Corrector CloudType::move(cloud, td); + // Apply isotropy model + td.updateAverages(cloud); + isotropyModel_->calculate(); - // Preliminary - // ~~~~~~~~~~~ - - // switch forces off so they are not applied in corrector steps - this->forces().setCalcNonCoupled(false); - this->forces().setCalcCoupled(false); - - - // Damping - // ~~~~~~~ - - if (!isType>(dampingModel_())) - { - if (this->mesh().moving()) - { - FatalErrorInFunction - << "MPPIC damping modelling does not support moving meshes." - << exit(FatalError); - } - - // update averages - td.updateAverages(cloud); - - // memory allocation and eulerian calculations - dampingModel_->cacheFields(true); - - // calculate the damping velocity corrections without moving the parcels - td.part() = parcelType::trackingData::tpDampingNoTrack; - CloudType::move(cloud, td); - - // correct the parcel positions and velocities - td.part() = parcelType::trackingData::tpCorrectTrack; - CloudType::move(cloud, td); - - // finalise and free memory - dampingModel_->cacheFields(false); - } - - - // Packing - // ~~~~~~~ - - if (!isType>(packingModel_())) - { - if (this->mesh().moving()) - { - FatalErrorInFunction - << "MPPIC packing modelling does not support moving meshes." - << exit(FatalError); - } - - // same procedure as for damping - td.updateAverages(cloud); - packingModel_->cacheFields(true); - td.part() = parcelType::trackingData::tpPackingNoTrack; - CloudType::move(cloud, td); - td.part() = parcelType::trackingData::tpCorrectTrack; - CloudType::move(cloud, td); - packingModel_->cacheFields(false); - } - - - // Isotropy - // ~~~~~~~~ - - if (!isType>(isotropyModel_())) - { - // update averages - td.updateAverages(cloud); - - // apply isotropy model - isotropyModel_->calculate(); - } - - - // Final - // ~~~~~ - - // update cell occupancy + // Update cell occupancy this->updateCellOccupancy(); - - // switch forces back on - this->forces().setCalcNonCoupled(true); - this->forces().setCalcCoupled(this->solution().coupled()); } diff --git a/src/lagrangian/parcel/clouds/Templates/MPPICCloud/MPPICCloud.H b/src/lagrangian/parcel/clouds/Templates/MPPICCloud/MPPICCloud.H index b4e9a1ccd0..720100d388 100644 --- a/src/lagrangian/parcel/clouds/Templates/MPPICCloud/MPPICCloud.H +++ b/src/lagrangian/parcel/clouds/Templates/MPPICCloud/MPPICCloud.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2013-2021 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2022 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -123,6 +123,9 @@ protected: //- Set cloud sub-models void setModels(); + //- Reset state of cloud + void cloudReset(MPPICCloud& c); + public: diff --git a/src/lagrangian/parcel/parcels/Templates/MPPICParcel/MPPICParcel.C b/src/lagrangian/parcel/parcels/Templates/MPPICParcel/MPPICParcel.C index 76634417ff..e51126eb13 100644 --- a/src/lagrangian/parcel/parcels/Templates/MPPICParcel/MPPICParcel.C +++ b/src/lagrangian/parcel/parcels/Templates/MPPICParcel/MPPICParcel.C @@ -34,74 +34,10 @@ Foam::MPPICParcel::MPPICParcel ) : ParcelType(p), - UCorrect_(p.UCorrect_) + id_(p.id_) {} -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -template -template -bool Foam::MPPICParcel::move -( - TrackCloudType& cloud, - trackingData& td -) -{ - typename TrackCloudType::parcelType& p = - static_cast(*this); - - switch (td.part()) - { - case trackingData::tpPredictTrack: - { - ParcelType::move(cloud, td); - - break; - } - case trackingData::tpDampingNoTrack: - { - p.UCorrect() = - cloud.dampingModel().velocityCorrection(p, td.trackTime()); - - td.keepParticle = true; - td.sendToProc = -1; - - break; - } - case trackingData::tpPackingNoTrack: - { - p.UCorrect() = - cloud.packingModel().velocityCorrection(p, td.trackTime()); - - td.keepParticle = true; - td.sendToProc = -1; - - break; - } - case trackingData::tpCorrectTrack: - { - const scalar f = p.stepFraction(); - const scalar a = p.age(); - - Swap(p.U(), p.UCorrect()); - - ParcelType::move(cloud, td); - - Swap(p.U(), p.UCorrect()); - - p.U() += (p.stepFraction() - f)*p.UCorrect(); - - p.age() = a; - - break; - } - } - - return td.keepParticle; -} - - // * * * * * * * * * * * * * * IOStream operators * * * * * * * * * * * * * // #include "MPPICParcelIO.C" diff --git a/src/lagrangian/parcel/parcels/Templates/MPPICParcel/MPPICParcel.H b/src/lagrangian/parcel/parcels/Templates/MPPICParcel/MPPICParcel.H index f5398ba9c8..d1f79d15a9 100644 --- a/src/lagrangian/parcel/parcels/Templates/MPPICParcel/MPPICParcel.H +++ b/src/lagrangian/parcel/parcels/Templates/MPPICParcel/MPPICParcel.H @@ -93,18 +93,6 @@ public: : public ParcelType::trackingData { - - public: - - enum trackPart - { - tpPredictTrack, - tpDampingNoTrack, - tpPackingNoTrack, - tpCorrectTrack, - }; - - private: // Private Data @@ -114,7 +102,7 @@ public: //- Volume average autoPtr> volumeAverage_; - //- Radius average [ volume^(1/3) ] + //- Radius average autoPtr> radiusAverage_; //- Density average @@ -123,7 +111,7 @@ public: //- Velocity average autoPtr> uAverage_; - //- Magnitude velocity sqyuared average + //- Magnitude velocity squared average autoPtr> uSqrAverage_; //- Frequency average @@ -133,10 +121,6 @@ public: autoPtr> massAverage_; - //- Which part of the integration algorithm is taking place - trackPart part_; - - public: //- Constructors @@ -149,15 +133,6 @@ public: //- Update the MPPIC averages template inline void updateAverages(const TrackCloudType& cloud); - - - //- Access - - //- Const access to the tracking part - inline trackPart part() const; - - //- Non const access to the tracking part - inline trackPart& part(); }; @@ -165,8 +140,10 @@ protected: // Protected data - //- Velocity correction due to collisions [m/s] - vector UCorrect_; + //- Processor and particle ID at the start of a tracking step. Allows + // values calculated at the end of the step to be mapped back to the + // starting state, in order to initialise a second corrector step. + labelPair id_; public: @@ -174,11 +151,7 @@ public: // Static Data Members //- String representation of properties - AddToPropertyList - ( - ParcelType, - "(UCorrectx UCorrecty UCorrectz)" - ); + AddToPropertyList(ParcelType, ""); // Constructors @@ -227,18 +200,11 @@ public: // Access - //- Return const access to correction velocity - inline const vector& UCorrect() const; + //- Return const access to the identifier + inline const labelPair& id() const; - //- Return access to correction velocity - inline vector& UCorrect(); - - - // Tracking - - //- Move the parcel - template - bool move(TrackCloudType& cloud, trackingData& td); + //- Return access to the identifier + inline labelPair& id(); // Friend Functions diff --git a/src/lagrangian/parcel/parcels/Templates/MPPICParcel/MPPICParcelI.H b/src/lagrangian/parcel/parcels/Templates/MPPICParcel/MPPICParcelI.H index 5a25816942..a7fa1805fa 100644 --- a/src/lagrangian/parcel/parcels/Templates/MPPICParcel/MPPICParcelI.H +++ b/src/lagrangian/parcel/parcels/Templates/MPPICParcel/MPPICParcelI.H @@ -39,7 +39,7 @@ inline Foam::MPPICParcel::MPPICParcel ) : ParcelType(mesh, coordinates, celli, tetFacei, tetPti, facei), - UCorrect_(Zero) + id_(-1, -1) {} @@ -52,23 +52,23 @@ inline Foam::MPPICParcel::MPPICParcel ) : ParcelType(mesh, position, celli), - UCorrect_(Zero) + id_(-1, -1) {} // * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * * // template -inline const Foam::vector& Foam::MPPICParcel::UCorrect() const +inline const Foam::labelPair& Foam::MPPICParcel::id() const { - return UCorrect_; + return id_; } template -inline Foam::vector& Foam::MPPICParcel::UCorrect() +inline Foam::labelPair& Foam::MPPICParcel::id() { - return UCorrect_; + return id_; } diff --git a/src/lagrangian/parcel/parcels/Templates/MPPICParcel/MPPICParcelIO.C b/src/lagrangian/parcel/parcels/Templates/MPPICParcel/MPPICParcelIO.C index 4cf4215e0d..934745133d 100644 --- a/src/lagrangian/parcel/parcels/Templates/MPPICParcel/MPPICParcelIO.C +++ b/src/lagrangian/parcel/parcels/Templates/MPPICParcel/MPPICParcelIO.C @@ -46,17 +46,17 @@ template Foam::MPPICParcel::MPPICParcel(Istream& is, bool readFields) : ParcelType(is, readFields), - UCorrect_(Zero) + id_(-1, -1) { if (readFields) { if (is.format() == IOstream::ASCII) { - is >> UCorrect_; + is >> id_; } else { - is.read(reinterpret_cast(&UCorrect_), sizeofFields_); + is.read(reinterpret_cast(&id_), sizeofFields_); } } @@ -72,27 +72,7 @@ template template void Foam::MPPICParcel::readFields(CloudType& c) { - bool valid = c.size(); - ParcelType::readFields(c); - - IOField UCorrect - ( - c.fieldIOobject("UCorrect", IOobject::MUST_READ), - valid - ); - c.checkFieldIOobject(c, UCorrect); - - label i = 0; - - forAllIter(typename CloudType, c, iter) - { - MPPICParcel& p = iter(); - - p.UCorrect_ = UCorrect[i]; - - i++; - } } @@ -101,24 +81,6 @@ template void Foam::MPPICParcel::writeFields(const CloudType& c) { ParcelType::writeFields(c); - - label np = c.size(); - - IOField - UCorrect(c.fieldIOobject("UCorrect", IOobject::NO_READ), np); - - label i = 0; - - forAllConstIter(typename CloudType, c, iter) - { - const MPPICParcel& p = iter(); - - UCorrect[i] = p.UCorrect(); - - i++; - } - - UCorrect.write(np > 0); } @@ -134,14 +96,14 @@ Foam::Ostream& Foam::operator<< if (os.format() == IOstream::ASCII) { os << static_cast(p) - << token::SPACE << p.UCorrect(); + << token::SPACE << p.id(); } else { os << static_cast(p); os.write ( - reinterpret_cast(&p.UCorrect_), + reinterpret_cast(&p.id_), MPPICParcel::sizeofFields_ ); } diff --git a/src/lagrangian/parcel/parcels/Templates/MPPICParcel/MPPICParcelTrackingDataI.H b/src/lagrangian/parcel/parcels/Templates/MPPICParcel/MPPICParcelTrackingDataI.H index e979b02e06..3c6068cbe8 100644 --- a/src/lagrangian/parcel/parcels/Templates/MPPICParcel/MPPICParcelTrackingDataI.H +++ b/src/lagrangian/parcel/parcels/Templates/MPPICParcel/MPPICParcelTrackingDataI.H @@ -132,8 +132,7 @@ inline Foam::MPPICParcel::trackingData::trackingData cloud.solution().dict(), cloud.mesh() ) - ), - part_(tpPredictTrack) + ) {} @@ -244,20 +243,4 @@ inline void Foam::MPPICParcel::trackingData::updateAverages } -template -inline typename Foam::MPPICParcel::trackingData::trackPart -Foam::MPPICParcel::trackingData::part() const -{ - return part_; -} - - -template -inline typename Foam::MPPICParcel::trackingData::trackPart& -Foam::MPPICParcel::trackingData::part() -{ - return part_; -} - - // ************************************************************************* // diff --git a/src/lagrangian/parcel/submodels/MPPIC/DampingModels/DampingModel/DampingModel.C b/src/lagrangian/parcel/submodels/MPPIC/DampingModels/DampingModel/DampingModel.C index ef193202e0..da79422b3f 100644 --- a/src/lagrangian/parcel/submodels/MPPIC/DampingModels/DampingModel/DampingModel.C +++ b/src/lagrangian/parcel/submodels/MPPIC/DampingModels/DampingModel/DampingModel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2013-2020 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2022 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -59,7 +59,7 @@ template Foam::DampingModel::DampingModel(const DampingModel& cm) : CloudSubModelBase(cm), - timeScaleModel_(cm.timeScaleModel_) + timeScaleModel_(cm.timeScaleModel_, false) {} diff --git a/src/lagrangian/parcel/submodels/MPPIC/DampingModels/Relaxation/Relaxation.C b/src/lagrangian/parcel/submodels/MPPIC/DampingModels/Relaxation/Relaxation.C index 0d759d1770..539fb13b4f 100644 --- a/src/lagrangian/parcel/submodels/MPPIC/DampingModels/Relaxation/Relaxation.C +++ b/src/lagrangian/parcel/submodels/MPPIC/DampingModels/Relaxation/Relaxation.C @@ -48,7 +48,7 @@ Foam::DampingModels::Relaxation::Relaxation : DampingModel(cm), uAverage_(nullptr), - oneByTimeScaleAverage_(cm.oneByTimeScaleAverage_->clone()) + oneByTimeScaleAverage_(cm.oneByTimeScaleAverage_, false) {} diff --git a/src/lagrangian/parcel/submodels/MPPIC/IsotropyModels/IsotropyModel/IsotropyModel.C b/src/lagrangian/parcel/submodels/MPPIC/IsotropyModels/IsotropyModel/IsotropyModel.C index e5dae9b141..577bba3813 100644 --- a/src/lagrangian/parcel/submodels/MPPIC/IsotropyModels/IsotropyModel/IsotropyModel.C +++ b/src/lagrangian/parcel/submodels/MPPIC/IsotropyModels/IsotropyModel/IsotropyModel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2013-2020 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2022 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -63,7 +63,7 @@ Foam::IsotropyModel::IsotropyModel ) : CloudSubModelBase(cm), - timeScaleModel_(cm.timeScaleModel_) + timeScaleModel_(cm.timeScaleModel_->clone()) {} diff --git a/src/lagrangian/parcel/submodels/MPPIC/PackingModels/Explicit/Explicit.C b/src/lagrangian/parcel/submodels/MPPIC/PackingModels/Explicit/Explicit.C index 0d56fa65a9..0f5bcd6766 100644 --- a/src/lagrangian/parcel/submodels/MPPIC/PackingModels/Explicit/Explicit.C +++ b/src/lagrangian/parcel/submodels/MPPIC/PackingModels/Explicit/Explicit.C @@ -53,11 +53,8 @@ Foam::PackingModels::Explicit::Explicit ) : PackingModel(cm), - stressAverage_(cm.stressAverage_->clone()), - correctionLimiting_ - ( - cm.correctionLimiting_->clone() - ) + stressAverage_(cm.stressAverage_, false), + correctionLimiting_(cm.correctionLimiting_, false) {} diff --git a/src/lagrangian/parcel/submodels/MPPIC/PackingModels/Implicit/Implicit.C b/src/lagrangian/parcel/submodels/MPPIC/PackingModels/Implicit/Implicit.C index 2043d1e8ed..99b8c7ffd8 100644 --- a/src/lagrangian/parcel/submodels/MPPIC/PackingModels/Implicit/Implicit.C +++ b/src/lagrangian/parcel/submodels/MPPIC/PackingModels/Implicit/Implicit.C @@ -76,8 +76,18 @@ Foam::PackingModels::Implicit::Implicit : PackingModel(cm), alpha_(cm.alpha_), - phiCorrect_(cm.phiCorrect_()), - uCorrect_(cm.uCorrect_()), + phiCorrect_ + ( + cm.phiCorrect_.valid() + ? cm.phiCorrect_().clone() + : tmp(nullptr) + ), + uCorrect_ + ( + cm.uCorrect_.valid() + ? cm.uCorrect_().clone() + : tmp(nullptr) + ), applyLimiting_(cm.applyLimiting_), applyGravity_(cm.applyGravity_), alphaMin_(cm.alphaMin_), diff --git a/src/lagrangian/parcel/submodels/MPPIC/PackingModels/PackingModel/PackingModel.C b/src/lagrangian/parcel/submodels/MPPIC/PackingModels/PackingModel/PackingModel.C index 9a0f58770e..c3c15fb184 100644 --- a/src/lagrangian/parcel/submodels/MPPIC/PackingModels/PackingModel/PackingModel.C +++ b/src/lagrangian/parcel/submodels/MPPIC/PackingModels/PackingModel/PackingModel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2013-2020 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2022 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -61,7 +61,7 @@ template Foam::PackingModel::PackingModel(const PackingModel& cm) : CloudSubModelBase(cm), - particleStressModel_(cm.particleStressModel_) + particleStressModel_(cm.particleStressModel_, false) {} diff --git a/src/lagrangian/parcel/submodels/Momentum/ParticleForces/Drag/DenseDrag/DenseDragForce.C b/src/lagrangian/parcel/submodels/Momentum/ParticleForces/Drag/DenseDrag/DenseDragForce.C index 47295c68ce..086e36fce3 100644 --- a/src/lagrangian/parcel/submodels/Momentum/ParticleForces/Drag/DenseDrag/DenseDragForce.C +++ b/src/lagrangian/parcel/submodels/Momentum/ParticleForces/Drag/DenseDrag/DenseDragForce.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2019-2021 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2019-2022 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -53,8 +53,8 @@ Foam::DenseDragForce::DenseDragForce : ParticleForce(df), alphacName_(df.alphacName_), - alphacPtr_(nullptr), - alphacInterpPtr_(nullptr) + alphacPtr_(df.alphacPtr_, false), + alphacInterpPtr_(df.alphacInterpPtr_, false) {}