From ab6aa6b602df9aa5a8ec6e7e5a5b6f9b5f89be01 Mon Sep 17 00:00:00 2001 From: Will Bainbridge Date: Wed, 26 Jan 2022 15:51:24 +0000 Subject: [PATCH] PatchCollisionDensity: Write out both mass and number collision density --- .../PatchCollisionDensity.C | 126 +++++++++++++++--- .../PatchCollisionDensity.H | 19 ++- 2 files changed, 117 insertions(+), 28 deletions(-) diff --git a/src/lagrangian/parcel/submodels/CloudFunctionObjects/PatchCollisionDensity/PatchCollisionDensity.C b/src/lagrangian/parcel/submodels/CloudFunctionObjects/PatchCollisionDensity/PatchCollisionDensity.C index 58dd867ec1..6bc5f15dfe 100644 --- a/src/lagrangian/parcel/submodels/CloudFunctionObjects/PatchCollisionDensity/PatchCollisionDensity.C +++ b/src/lagrangian/parcel/submodels/CloudFunctionObjects/PatchCollisionDensity/PatchCollisionDensity.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2018-2021 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2018-2022 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -40,14 +40,14 @@ void Foam::PatchCollisionDensity::write() ( IOobject ( - this->owner().name() + ":collisionDensity", + this->owner().name() + ":numberCollisionDensity", this->owner().mesh().time().timeName(), this->owner().mesh() ), this->owner().mesh(), dimless/dimArea, z, - collisionDensity_ + numberCollisionDensity_ ) .write(); @@ -55,19 +55,51 @@ void Foam::PatchCollisionDensity::write() ( IOobject ( - this->owner().name() + ":collisionDensityRate", + this->owner().name() + ":numberCollisionDensityRate", this->owner().mesh().time().timeName(), this->owner().mesh() ), this->owner().mesh(), dimless/dimArea/dimTime, z, - (collisionDensity_ - collisionDensity0_) + (numberCollisionDensity_ - numberCollisionDensity0_) /(this->owner().mesh().time().value() - time0_) ) .write(); - collisionDensity0_ == collisionDensity_; + volScalarField + ( + IOobject + ( + this->owner().name() + ":massCollisionDensity", + this->owner().mesh().time().timeName(), + this->owner().mesh() + ), + this->owner().mesh(), + dimMass/dimArea, + z, + massCollisionDensity_ + ) + .write(); + + volScalarField + ( + IOobject + ( + this->owner().name() + ":massCollisionDensityRate", + this->owner().mesh().time().timeName(), + this->owner().mesh() + ), + this->owner().mesh(), + dimMass/dimArea/dimTime, + z, + (massCollisionDensity_ - massCollisionDensity0_) + /(this->owner().mesh().time().value() - time0_) + ) + .write(); + + numberCollisionDensity0_ == numberCollisionDensity_; + massCollisionDensity0_ == massCollisionDensity_; time0_ = this->owner().mesh().time().value(); } @@ -84,13 +116,25 @@ Foam::PatchCollisionDensity::PatchCollisionDensity : CloudFunctionObject(dict, owner, modelName, typeName), minSpeed_(dict.lookupOrDefault("minSpeed", -1)), - collisionDensity_ + numberCollisionDensity_ ( this->owner().mesh().boundary(), volScalarField::Internal::null(), calculatedFvPatchField::typeName ), - collisionDensity0_ + numberCollisionDensity0_ + ( + this->owner().mesh().boundary(), + volScalarField::Internal::null(), + calculatedFvPatchField::typeName + ), + massCollisionDensity_ + ( + this->owner().mesh().boundary(), + volScalarField::Internal::null(), + calculatedFvPatchField::typeName + ), + massCollisionDensity0_ ( this->owner().mesh().boundary(), volScalarField::Internal::null(), @@ -98,23 +142,49 @@ Foam::PatchCollisionDensity::PatchCollisionDensity ), time0_(this->owner().mesh().time().value()) { - collisionDensity_ == 0; - collisionDensity0_ == 0; + numberCollisionDensity_ == 0; + numberCollisionDensity0_ == 0; + massCollisionDensity_ == 0; + massCollisionDensity0_ == 0; - typeIOobject io + typeIOobject numberIo ( - this->owner().name() + ":collisionDensity", + this->owner().name() + ":numberCollisionDensity", this->owner().mesh().time().timeName(), this->owner().mesh(), IOobject::MUST_READ, IOobject::NO_WRITE ); - if (io.headerOk()) + if (numberIo.headerOk()) { - const volScalarField collisionDensity(io, this->owner().mesh()); - collisionDensity_ == collisionDensity.boundaryField(); - collisionDensity0_ == collisionDensity.boundaryField(); + const volScalarField numberCollisionDensity + ( + numberIo, + this->owner().mesh() + ); + numberCollisionDensity_ == numberCollisionDensity.boundaryField(); + numberCollisionDensity0_ == numberCollisionDensity.boundaryField(); + } + + typeIOobject massIo + ( + this->owner().name() + ":massCollisionDensity", + this->owner().mesh().time().timeName(), + this->owner().mesh(), + IOobject::MUST_READ, + IOobject::NO_WRITE + ); + + if (massIo.headerOk()) + { + const volScalarField massCollisionDensity + ( + massIo, + this->owner().mesh() + ); + massCollisionDensity_ == massCollisionDensity.boundaryField(); + massCollisionDensity0_ == massCollisionDensity.boundaryField(); } } @@ -127,15 +197,25 @@ Foam::PatchCollisionDensity::PatchCollisionDensity : CloudFunctionObject(ppm), minSpeed_(ppm.minSpeed_), - collisionDensity_ + numberCollisionDensity_ ( volScalarField::Internal::null(), - ppm.collisionDensity_ + ppm.numberCollisionDensity_ ), - collisionDensity0_ + numberCollisionDensity0_ ( volScalarField::Internal::null(), - ppm.collisionDensity0_ + ppm.numberCollisionDensity0_ + ), + massCollisionDensity_ + ( + volScalarField::Internal::null(), + ppm.massCollisionDensity_ + ), + massCollisionDensity0_ + ( + volScalarField::Internal::null(), + ppm.massCollisionDensity0_ ), time0_(ppm.time0_) {} @@ -167,8 +247,10 @@ void Foam::PatchCollisionDensity::postPatch const scalar speed = (p.U() - Up) & nw; if (speed > minSpeed_) { - collisionDensity_[patchi][patchFacei] += - 1/this->owner().mesh().magSf().boundaryField()[patchi][patchFacei]; + const scalar magSf = + this->owner().mesh().magSf().boundaryField()[patchi][patchFacei]; + numberCollisionDensity_[patchi][patchFacei] += 1/magSf; + massCollisionDensity_[patchi][patchFacei] += p.mass()/magSf; } } diff --git a/src/lagrangian/parcel/submodels/CloudFunctionObjects/PatchCollisionDensity/PatchCollisionDensity.H b/src/lagrangian/parcel/submodels/CloudFunctionObjects/PatchCollisionDensity/PatchCollisionDensity.H index 1a6e3a0bdf..c62c754d32 100644 --- a/src/lagrangian/parcel/submodels/CloudFunctionObjects/PatchCollisionDensity/PatchCollisionDensity.H +++ b/src/lagrangian/parcel/submodels/CloudFunctionObjects/PatchCollisionDensity/PatchCollisionDensity.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2018-2020 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2018-2022 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -25,9 +25,9 @@ Class Foam::PatchCollisionDensity Description - Function object which generates fields of the number and rate of collisions - per unit area on all patches. Can optionally take a minimum speed below - which a collision is not counted. + Function object which generates fields of the number and mass and rates + thereof of collisions per unit area on all patches. Can optionally take a + minimum speed below which a collision is not counted. Example usage: \verbatim @@ -70,11 +70,18 @@ class PatchCollisionDensity const scalar minSpeed_; //- The field of the number of collisions per unit area - volScalarField::Boundary collisionDensity_; + volScalarField::Boundary numberCollisionDensity_; //- The field of the number of collisions per unit area at the last // output - volScalarField::Boundary collisionDensity0_; + volScalarField::Boundary numberCollisionDensity0_; + + //- The field of the mass of collisions per unit area + volScalarField::Boundary massCollisionDensity_; + + //- The field of the mass of collisions per unit area at the last + // output + volScalarField::Boundary massCollisionDensity0_; //- The time at the last output scalar time0_;