diff --git a/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloud.C b/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloud.C index 10cec60dd2..23aa3dc478 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::collisions() // Temporary storage for subCells List > subCells(8); - scalar deltaT = mesh_.time().deltaT().value(); + scalar deltaT = cachedDeltaT(); label collisionCandidates = 0; @@ -778,6 +778,9 @@ Foam::DsmcCloud::~DsmcCloud() template void Foam::DsmcCloud::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 fc5cf53d68..76b1dd7e79 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 449650c0a8..3529702fdd 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::rndGen() } +template +inline void Foam::DsmcCloud::storeDeltaT() +{ + cachedDeltaT_ = mesh().time().deltaT().value(); +} + + +template +inline Foam::scalar Foam::DsmcCloud::cachedDeltaT() const +{ + return cachedDeltaT_; +} + + template inline const Foam::volScalarField& Foam::DsmcCloud::q() const { diff --git a/src/lagrangian/dsmc/parcels/Templates/DsmcParcel/DsmcParcel.C b/src/lagrangian/dsmc/parcels/Templates/DsmcParcel/DsmcParcel.C index fae05b0f2f..c52d92d20f 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::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::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 807337d7e0..0f0e135e4c 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::inflow() const polyMesh& mesh(cloud.mesh()); - const scalar deltaT = mesh.time().deltaT().value(); + const scalar deltaT = cloud.cachedDeltaT(); Random& rndGen(cloud.rndGen());