diff --git a/src/functionObjects/field/Make/files b/src/functionObjects/field/Make/files index b4bbed1442..b36fbdfc42 100644 --- a/src/functionObjects/field/Make/files +++ b/src/functionObjects/field/Make/files @@ -65,7 +65,7 @@ streamFunction/streamFunction.C valueAverage/valueAverage.C fluxSummary/fluxSummary.C mapFields/mapFields.C -reactionSensitivityAnalysis/reactionsSensitivityAnalysisObjects.C +reactionSensitivityAnalysis/reactionsSensitivityAnalysisObjects.C DESModelRegions/DESModelRegions.C externalCoupled/externalCoupled.C @@ -73,6 +73,10 @@ externalCoupled/externalCoupledMixed/externalCoupledMixedFvPatchFields.C externalCoupled/externalCoupledTemperatureMixed/externalCoupledTemperatureMixedFvPatchScalarField.C extractEulerianParticles/extractEulerianParticles/extractEulerianParticles.C +extractEulerianParticles/eulerianParticle/eulerianParticle.C +extractEulerianParticles/injectedParticle/injectedParticleIO.C +extractEulerianParticles/injectedParticle/injectedParticleCloud.C + ddt2/ddt2.C zeroGradient/zeroGradient.C diff --git a/src/functionObjects/field/extractEulerianParticles/eulerianParticle/eulerianParticle.C b/src/functionObjects/field/extractEulerianParticles/eulerianParticle/eulerianParticle.C index 8bc18a3ce3..3d925f78d9 100644 --- a/src/functionObjects/field/extractEulerianParticles/eulerianParticle/eulerianParticle.C +++ b/src/functionObjects/field/extractEulerianParticles/eulerianParticle/eulerianParticle.C @@ -36,34 +36,39 @@ Foam::functionObjects::eulerianParticle::eulerianParticle() VC(vector::zero), VU(vector::zero), V(0), - time(0), - timeIndex(0) + time(0) {} // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // -Foam::Ostream& Foam::operator<<(Ostream& os, const eulerianParticle& p) +Foam::Ostream& Foam::operator<< +( + Ostream& os, + const functionObjects::eulerianParticle& p +) { os << p.globalFaceIHit << token::SPACE << p.VC << token::SPACE << p.VU << token::SPACE << p.V << token::SPACE - << p.time << token::SPACE - << p.timeIndex; + << p.time; return os; } -Foam::Istream& Foam::operator>>(Istream& is, eulerianParticle& p) +Foam::Istream& Foam::operator>> +( + Istream& is, + functionObjects::eulerianParticle& p +) { is >> p.globalFaceIHit >> p.VC >> p.VU >> p.V - >> p.time - >> p.timeIndex; + >> p.time; return is; } diff --git a/src/functionObjects/field/extractEulerianParticles/eulerianParticle/eulerianParticle.H b/src/functionObjects/field/extractEulerianParticles/eulerianParticle/eulerianParticle.H index e5d4bfc2b4..f90e83f122 100644 --- a/src/functionObjects/field/extractEulerianParticles/eulerianParticle/eulerianParticle.H +++ b/src/functionObjects/field/extractEulerianParticles/eulerianParticle/eulerianParticle.H @@ -92,9 +92,6 @@ public: //- Injection time - set at collection [s] scalar time; - //- Index of last output time - label timeIndex; - //- Constructor eulerianParticle(); @@ -122,8 +119,7 @@ public: && a.VC == b.VC && a.VU == b.VU && a.V == b.V - && a.time == b.time - && a.timeIndex == b.timeIndex; + && a.time == b.time; } friend bool operator!= diff --git a/src/functionObjects/field/extractEulerianParticles/extractEulerianParticles/extractEulerianParticles.C b/src/functionObjects/field/extractEulerianParticles/extractEulerianParticles/extractEulerianParticles.C index 60821e8092..9cd6ff46ab 100644 --- a/src/functionObjects/field/extractEulerianParticles/extractEulerianParticles/extractEulerianParticles.C +++ b/src/functionObjects/field/extractEulerianParticles/extractEulerianParticles/extractEulerianParticles.C @@ -101,7 +101,7 @@ void Foam::functionObjects::extractEulerianParticles::checkFaceZone() << exit(FatalError); } - Log << type() << " " << name() << " output:" << nl + Info<< type() << " " << name() << " output:" << nl << " faceZone : " << faceZoneName_ << nl << " faces : " << allFaces << nl << endl; @@ -154,27 +154,21 @@ void Foam::functionObjects::extractEulerianParticles::initialiseBins() { fineToCoarseAddr_ = ppa.restrictTopBottomAddressing(); nCoarseFaces = max(fineToCoarseAddr_) + 1; - coarseToFineAddr_ = invertOneToMany(nCoarseFaces, fineToCoarseAddr_); // Set coarse face centres as area average of fine face centres const vectorField& faceCentres = mesh_.faceCentres(); const vectorField& faceAreas = mesh_.faceAreas(); - coarsePosition_.setSize(coarseToFineAddr_.size()); - forAll(coarseToFineAddr_, coarsei) + coarsePosition_.setSize(nCoarseFaces); + scalarField coarseArea(nCoarseFaces); + forAll(coarsePosition_, i) { - const labelList& fineFaces = coarseToFineAddr_[coarsei]; - - scalar sumArea = 0; - vector averagePosition(vector::zero); - forAll(fineFaces, i) - { - label facei = fz[fineFaces[i]]; - scalar magSf = mag(faceAreas[facei]); - sumArea += magSf; - averagePosition += magSf*faceCentres[facei]; - } - coarsePosition_[coarsei] = averagePosition/sumArea; + const label facei = fz[i]; + const label coarseFacei = fineToCoarseAddr_[i]; + const scalar magSf = mag(faceAreas[facei]); + coarseArea[coarseFacei] += magSf; + coarsePosition_[coarseFacei] += magSf*faceCentres[facei]; } + coarsePosition_ /= coarseArea + ROOTVSMALL; } // Create global addressing for coarse face addressing @@ -198,7 +192,7 @@ Foam::functionObjects::extractEulerianParticles::phiU() const if (phi.dimensions() == dimMass/dimTime) { const volScalarField& rho = - obr_.lookupObject(rhoName_); + mesh_.lookupObject(rhoName_); return phi/fvc::interpolate(rho); } @@ -297,6 +291,13 @@ void Foam::functionObjects::extractEulerianParticles::collectParticles { // Particle on local processor p = particles_[iter()]; + + if (nInjectorLocations_) + { + // Use coarse face index and position for output + p.globalFaceIHit = fineToCoarseAddr_[p.globalFaceIHit]; + p.VC = p.V*coarsePosition_[p.globalFaceIHit]; + } } reduce(p, sumParticleOp()); @@ -304,21 +305,22 @@ void Foam::functionObjects::extractEulerianParticles::collectParticles if ((pDiameter > minDiameter_) && (pDiameter < maxDiameter_)) { - p.time = time; - p.timeIndex = outputTimes_.size() - 1; - - if (Pstream::master() && writeRawData_) + if (Pstream::master()) { - rawParticlesDictPtr_->add + const scalar d = cbrt(6*p.V/constant::mathematical::pi); + const point position = p.VC/(p.V + ROOTVSMALL); + const vector U = p.VU/(p.V + ROOTVSMALL); + + injectedParticle* ip = new injectedParticle ( - word("particle" + Foam::name(nCollectedParticles_)), - p.writeDict() + mesh_, + position, + time, + d, + U ); - } - if (globalFaces_.isLocal(p.globalFaceIHit)) - { - collectedParticles_.append(p); + cloud_.addParticle(ip); } nCollectedParticles_++; @@ -522,176 +524,6 @@ void Foam::functionObjects::extractEulerianParticles::accumulateParticleInfo } -void Foam::functionObjects::extractEulerianParticles::writeBinnedParticleData() -{ - DebugInFunction << endl; - - if (!createDistribution_) - { - // No need to store collected particles if not creating a distribution - collectedParticles_.clear(); - return; - } - - // Gather particles ready for collection from all procs - List > allProcParticles(Pstream::nProcs()); - allProcParticles[Pstream::myProcNo()] = collectedParticles_; - Pstream::gatherList(allProcParticles); - Pstream::scatterList(allProcParticles); - List allParticles = - ListListOps::combine > - ( - allProcParticles, - accessOp >() - ); - - - // Determine coarse face index (global) and position for each particle - label nCoarseFaces = globalCoarseFaces_.size(); - List