From 0e1945268e3c7a26ae585a28fb99a3b68a40b4a2 Mon Sep 17 00:00:00 2001 From: andy Date: Tue, 15 Feb 2011 17:32:25 +0000 Subject: [PATCH] ENH: Added particle local interaction output stats --- .../Templates/KinematicCloud/KinematicCloud.C | 2 + .../Templates/KinematicCloud/KinematicCloud.H | 4 + .../KinematicCloud/KinematicCloudI.H | 8 ++ .../LocalInteraction/LocalInteraction.C | 125 +++++++++++++++++- .../LocalInteraction/LocalInteraction.H | 51 ++++++- .../NoInteraction/NoInteraction.C | 4 +- .../NoInteraction/NoInteraction.H | 4 +- .../PatchInteractionModel.C | 11 +- .../PatchInteractionModel.H | 10 +- .../PatchInteractionModel/Rebound/Rebound.C | 4 +- .../PatchInteractionModel/Rebound/Rebound.H | 4 +- .../StandardWallInteraction.C | 4 +- .../StandardWallInteraction.H | 4 +- 13 files changed, 213 insertions(+), 22 deletions(-) diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C index fd6fbfcdc7..abdaeb1c35 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C @@ -830,8 +830,10 @@ void Foam::KinematicCloud::info() const << linearKineticEnergy << nl << " Rotational kinetic energy = " << rotationalKineticEnergy << nl; + this->injection().info(Info); this->surfaceFilm().info(Info); + this->patchInteraction().info(Info); } diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H index a9244fa020..02d5320447 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H @@ -555,6 +555,10 @@ public: inline const PatchInteractionModel >& patchInteraction() const; + //- Return reference to the patch interaction model + inline PatchInteractionModel >& + patchInteraction(); + //- Return reference to post-processing model inline PostProcessingModel >& postProcessing(); diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H index 62128ef7ed..133f7ee1d4 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H @@ -312,6 +312,14 @@ Foam::KinematicCloud::patchInteraction() const } +template +inline Foam::PatchInteractionModel >& +Foam::KinematicCloud::patchInteraction() +{ + return patchInteractionModel_(); +} + + template inline Foam::InjectionModel >& Foam::KinematicCloud::injection() diff --git a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/LocalInteraction/LocalInteraction.C b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/LocalInteraction/LocalInteraction.C index 7348c146c7..465dd9b04f 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/LocalInteraction/LocalInteraction.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/LocalInteraction/LocalInteraction.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2008-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -45,6 +45,67 @@ Foam::label Foam::LocalInteraction::applyToPatch } +template +void Foam::LocalInteraction::readProps() +{ + IOobject propsDictHeader + ( + "localInteractionProperties", + this->owner().db().time().timeName(), + "uniform"/cloud::prefix/this->owner().name(), + this->owner().db(), + IOobject::MUST_READ, + IOobject::NO_WRITE, + false + ); + + if (propsDictHeader.headerOk()) + { + const IOdictionary propsDict(propsDictHeader); + + propsDict.readIfPresent("nEscape", nEscape0_); + propsDict.readIfPresent("massEscape", massEscape0_); + propsDict.readIfPresent("nStick", nStick0_); + propsDict.readIfPresent("massStick", massStick0_); + } +} + + +template +void Foam::LocalInteraction::writeProps +( + const labelList& nEscape, + const scalarList& massEscape, + const labelList& nStick, + const scalarList& massStick +) const +{ + if (this->owner().db().time().outputTime()) + { + IOdictionary propsDict + ( + IOobject + ( + "localInteractionProperties", + this->owner().db().time().timeName(), + "uniform"/cloud::prefix/this->owner().name(), + this->owner().db(), + IOobject::NO_READ, + IOobject::NO_WRITE, + false + ) + ); + + propsDict.add("nEscape", nEscape); + propsDict.add("massEscape", massEscape); + propsDict.add("nStick", nStick); + propsDict.add("massStick", massStick); + + propsDict.regIOobject::write(); + } +} + + // * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * * // template @@ -56,7 +117,15 @@ Foam::LocalInteraction::LocalInteraction : PatchInteractionModel(dict, cloud, typeName), patchData_(this->coeffDict().lookup("patches")), - patchIds_(patchData_.size()) + patchIds_(patchData_.size()), + nEscape0_(patchData_.size(), 0), + massEscape0_(patchData_.size(), 0.0), + nStick0_(patchData_.size(), 0), + massStick0_(patchData_.size(), 0.0), + nEscape_(patchData_.size(), 0), + massEscape_(patchData_.size(), 0.0), + nStick_(patchData_.size(), 0), + massStick_(patchData_.size(), 0.0) { const polyMesh& mesh = cloud.mesh(); const polyBoundaryMesh& bMesh = mesh.boundaryMesh(); @@ -115,6 +184,8 @@ Foam::LocalInteraction::LocalInteraction << nl << exit(FatalError); } } + + readProps(); } @@ -126,7 +197,15 @@ Foam::LocalInteraction::LocalInteraction : PatchInteractionModel(pim), patchData_(pim.patchData_), - patchIds_(pim.patchIds_) + patchIds_(pim.patchIds_), + nEscape0_(pim.nEscape0_), + massEscape0_(pim.massEscape0_), + nStick0_(pim.nStick0_), + massStick0_(pim.massStick0_), + nEscape_(pim.nEscape_), + massEscape_(pim.massEscape_), + nStick_(pim.nStick_), + massStick_(pim.massStick_) {} @@ -147,7 +226,7 @@ bool Foam::LocalInteraction::correct bool& keepParticle, const scalar trackFraction, const tetIndices& tetIs -) const +) { vector& U = p.U(); @@ -170,6 +249,8 @@ bool Foam::LocalInteraction::correct keepParticle = false; active = false; U = vector::zero; + nEscape_[patchI]++; + massEscape_[patchI] += p.mass()*p.nParticle(); break; } case PatchInteractionModel::itStick: @@ -177,6 +258,8 @@ bool Foam::LocalInteraction::correct keepParticle = true; active = false; U = vector::zero; + nStick_[patchI]++; + massStick_[patchI] += p.mass()*p.nParticle(); break; } case PatchInteractionModel::itRebound: @@ -235,4 +318,38 @@ bool Foam::LocalInteraction::correct } +template +void Foam::LocalInteraction::info(Ostream& os) const +{ + labelList npe(nEscape_); + Pstream::listCombineGather(npe, plusEqOp