diff --git a/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloud.C b/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloud.C index 10cec60dd27e5fc331d97c7c49428e6399bad2a9..23aa3dc47823a780110e71326cdab70b9cb066db 100644 --- a/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloud.C +++ b/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloud.C @@ -299,7 +299,7 @@ void Foam::DsmcCloud<ParcelType>::collisions() // Temporary storage for subCells List<DynamicList<label> > subCells(8); - scalar deltaT = mesh_.time().deltaT().value(); + scalar deltaT = cachedDeltaT(); label collisionCandidates = 0; @@ -778,6 +778,9 @@ Foam::DsmcCloud<ParcelType>::~DsmcCloud() template<class ParcelType> void Foam::DsmcCloud<ParcelType>::evolve() { + // cache the value of deltaT for this timestep + storeDeltaT(); + typename ParcelType::trackData td(*this); // Reset the surface data collection fields diff --git a/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloud.H b/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloud.H index fc5cf53d683be6ed9ec879578887f59c70d53718..76b1dd7e79046022dd7869178c84dbc612211abf 100644 --- a/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloud.H +++ b/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloud.H @@ -116,6 +116,10 @@ class DsmcCloud //- Random number generator Random rndGen_; + //- In-cloud cache of deltaT, lookup in submodels and parcel is + // expensive + scalar cachedDeltaT_; + // References to the macroscopic fields @@ -243,6 +247,12 @@ public: //- Return refernce to the random object inline Random& rndGen(); + //- Store (cache) the current value of deltaT + inline void storeDeltaT(); + + //- Return the cached value of deltaT + inline scalar cachedDeltaT() const; + // References to the surface data collection fields diff --git a/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloudI.H b/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloudI.H index 449650c0a8345d1fc3f14289eb39b4a27eb84521..3529702fdd6b5591a6c588a0890b0a417dbcae2d 100644 --- a/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloudI.H +++ b/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloudI.H @@ -120,6 +120,20 @@ inline Foam::Random& Foam::DsmcCloud<ParcelType>::rndGen() } +template<class ParcelType> +inline void Foam::DsmcCloud<ParcelType>::storeDeltaT() +{ + cachedDeltaT_ = mesh().time().deltaT().value(); +} + + +template<class ParcelType> +inline Foam::scalar Foam::DsmcCloud<ParcelType>::cachedDeltaT() const +{ + return cachedDeltaT_; +} + + template<class ParcelType> inline const Foam::volScalarField& Foam::DsmcCloud<ParcelType>::q() const { diff --git a/src/lagrangian/dsmc/parcels/Templates/DsmcParcel/DsmcParcel.C b/src/lagrangian/dsmc/parcels/Templates/DsmcParcel/DsmcParcel.C index fae05b0f2ffc2543046d449aef0dd2bcb7352de7..c52d92d20fef43858cfdd7075883003e6a043b76 100644 --- a/src/lagrangian/dsmc/parcels/Templates/DsmcParcel/DsmcParcel.C +++ b/src/lagrangian/dsmc/parcels/Templates/DsmcParcel/DsmcParcel.C @@ -44,7 +44,7 @@ bool Foam::DsmcParcel<ParcelType>::move const polyMesh& mesh = td.cloud().pMesh(); const polyBoundaryMesh& pbMesh = mesh.boundaryMesh(); - const scalar deltaT = mesh.time().deltaT().value(); + const scalar deltaT = td.cloud().cachedDeltaT(); scalar tEnd = (1.0 - p.stepFraction())*deltaT; const scalar dtMax = tEnd; @@ -145,7 +145,7 @@ void Foam::DsmcParcel<ParcelType>::hitWallPatch const scalar fA = mag(wpp.faceAreas()[wppLocalFace]); - const scalar deltaT = td.cloud().mesh().time().deltaT().value(); + const scalar deltaT = td.cloud().cachedDeltaT(); scalar deltaQ = td.cloud().nParticle()*(preIE - postIE)/(deltaT*fA); diff --git a/src/lagrangian/dsmc/submodels/InflowBoundaryModel/FreeStream/FreeStream.C b/src/lagrangian/dsmc/submodels/InflowBoundaryModel/FreeStream/FreeStream.C index 807337d7e01a6c734f5ac040db3a7acefad348ef..0f0e135e4c9ab1042852cd547c000c9a00c2ae3c 100644 --- a/src/lagrangian/dsmc/submodels/InflowBoundaryModel/FreeStream/FreeStream.C +++ b/src/lagrangian/dsmc/submodels/InflowBoundaryModel/FreeStream/FreeStream.C @@ -126,7 +126,7 @@ void Foam::FreeStream<CloudType>::inflow() const polyMesh& mesh(cloud.mesh()); - const scalar deltaT = mesh.time().deltaT().value(); + const scalar deltaT = cloud.cachedDeltaT(); Random& rndGen(cloud.rndGen());