From 5e414f11467b803a7f29c86fcbd09832ec10ce52 Mon Sep 17 00:00:00 2001 From: graham <graham.macpherson@strath.ac.uk> Date: Mon, 2 Mar 2009 13:08:37 +0000 Subject: [PATCH] Added kinetic energy and momentum monitoring functions. --- .../clouds/Templates/DsmcCloud/DsmcCloud.C | 10 +++++ .../clouds/Templates/DsmcCloud/DsmcCloud.H | 6 +++ .../clouds/Templates/DsmcCloud/DsmcCloudI.H | 43 +++++++++++++++++++ 3 files changed, 59 insertions(+) diff --git a/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloud.C b/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloud.C index bfc251ba787..00164e4b518 100644 --- a/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloud.C +++ b/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloud.C @@ -477,11 +477,21 @@ void Foam::DsmcCloud<ParcelType>::evolve() template<class ParcelType> void Foam::DsmcCloud<ParcelType>::info() const { + vector linearMomentum = linearMomentumOfSystem(); + + reduce(linearMomentum, sumOp<vector>()); + Info<< "Cloud name: " << this->name() << nl << " Current number of parcels = " << returnReduce(this->size(), sumOp<label>()) << nl << " Current mass in system = " << returnReduce(massInSystem(), sumOp<scalar>()) << nl + << " Linear momentum = " + << linearMomentum << nl + << " Linear momentum magnitude = " + << mag(linearMomentum) << nl + << " Linear kinetic energy = " + << returnReduce(linearKineticEnergyOfSystem(), sumOp<scalar>()) << nl << endl; } diff --git a/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloud.H b/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloud.H index 0cbd4aecba8..63603ff302f 100644 --- a/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloud.H +++ b/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloud.H @@ -282,6 +282,12 @@ public: //- Total mass in system inline scalar massInSystem() const; + //- Total linear momentum of the system + inline vector linearMomentumOfSystem() const; + + //- Total linear kinetic energy in the system + inline scalar linearKineticEnergyOfSystem() const; + //- Print cloud information void info() const; diff --git a/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloudI.H b/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloudI.H index 91d8f9488b3..3cbc44e98b9 100644 --- a/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloudI.H +++ b/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloudI.H @@ -164,6 +164,49 @@ inline Foam::scalar Foam::DsmcCloud<ParcelType>::massInSystem() const } +template<class ParcelType> +inline Foam::vector Foam::DsmcCloud<ParcelType>::linearMomentumOfSystem() const +{ + vector linearMomentum(vector::zero); + + forAllConstIter(typename DsmcCloud<ParcelType>, *this, iter) + { + const ParcelType& p = iter(); + + const typename ParcelType::constantProperties& cP = constProps + ( + p.typeId() + ); + + linearMomentum += cP.mass()*p.U(); + } + + return nParticle_*linearMomentum; +} + + +template<class ParcelType> +inline Foam::scalar +Foam::DsmcCloud<ParcelType>::linearKineticEnergyOfSystem() const +{ + scalar linearKineticEnergy = 0.0; + + forAllConstIter(typename DsmcCloud<ParcelType>, *this, iter) + { + const ParcelType& p = iter(); + + const typename ParcelType::constantProperties& cP = constProps + ( + p.typeId() + ); + + linearKineticEnergy += 0.5*cP.mass()*(p.U() & p.U()); + } + + return nParticle_*linearKineticEnergy; +} + + template<class ParcelType> inline Foam::Random& Foam::DsmcCloud<ParcelType>::rndGen() { -- GitLab