Merge branch 'master' of github.com-OpenFOAM:OpenFOAM/OpenFOAM-dev

This commit is contained in:
Henry Weller
2022-01-26 16:36:53 +00:00
2 changed files with 117 additions and 28 deletions

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org \\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2018-2021 OpenFOAM Foundation \\ / A nd | Copyright (C) 2018-2022 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -40,14 +40,14 @@ void Foam::PatchCollisionDensity<CloudType>::write()
( (
IOobject IOobject
( (
this->owner().name() + ":collisionDensity", this->owner().name() + ":numberCollisionDensity",
this->owner().mesh().time().timeName(), this->owner().mesh().time().timeName(),
this->owner().mesh() this->owner().mesh()
), ),
this->owner().mesh(), this->owner().mesh(),
dimless/dimArea, dimless/dimArea,
z, z,
collisionDensity_ numberCollisionDensity_
) )
.write(); .write();
@ -55,19 +55,51 @@ void Foam::PatchCollisionDensity<CloudType>::write()
( (
IOobject IOobject
( (
this->owner().name() + ":collisionDensityRate", this->owner().name() + ":numberCollisionDensityRate",
this->owner().mesh().time().timeName(), this->owner().mesh().time().timeName(),
this->owner().mesh() this->owner().mesh()
), ),
this->owner().mesh(), this->owner().mesh(),
dimless/dimArea/dimTime, dimless/dimArea/dimTime,
z, z,
(collisionDensity_ - collisionDensity0_) (numberCollisionDensity_ - numberCollisionDensity0_)
/(this->owner().mesh().time().value() - time0_) /(this->owner().mesh().time().value() - time0_)
) )
.write(); .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(); time0_ = this->owner().mesh().time().value();
} }
@ -84,13 +116,25 @@ Foam::PatchCollisionDensity<CloudType>::PatchCollisionDensity
: :
CloudFunctionObject<CloudType>(dict, owner, modelName, typeName), CloudFunctionObject<CloudType>(dict, owner, modelName, typeName),
minSpeed_(dict.lookupOrDefault<scalar>("minSpeed", -1)), minSpeed_(dict.lookupOrDefault<scalar>("minSpeed", -1)),
collisionDensity_ numberCollisionDensity_
( (
this->owner().mesh().boundary(), this->owner().mesh().boundary(),
volScalarField::Internal::null(), volScalarField::Internal::null(),
calculatedFvPatchField<scalar>::typeName calculatedFvPatchField<scalar>::typeName
), ),
collisionDensity0_ numberCollisionDensity0_
(
this->owner().mesh().boundary(),
volScalarField::Internal::null(),
calculatedFvPatchField<scalar>::typeName
),
massCollisionDensity_
(
this->owner().mesh().boundary(),
volScalarField::Internal::null(),
calculatedFvPatchField<scalar>::typeName
),
massCollisionDensity0_
( (
this->owner().mesh().boundary(), this->owner().mesh().boundary(),
volScalarField::Internal::null(), volScalarField::Internal::null(),
@ -98,23 +142,49 @@ Foam::PatchCollisionDensity<CloudType>::PatchCollisionDensity
), ),
time0_(this->owner().mesh().time().value()) time0_(this->owner().mesh().time().value())
{ {
collisionDensity_ == 0; numberCollisionDensity_ == 0;
collisionDensity0_ == 0; numberCollisionDensity0_ == 0;
massCollisionDensity_ == 0;
massCollisionDensity0_ == 0;
typeIOobject<volScalarField> io typeIOobject<volScalarField> numberIo
( (
this->owner().name() + ":collisionDensity", this->owner().name() + ":numberCollisionDensity",
this->owner().mesh().time().timeName(), this->owner().mesh().time().timeName(),
this->owner().mesh(), this->owner().mesh(),
IOobject::MUST_READ, IOobject::MUST_READ,
IOobject::NO_WRITE IOobject::NO_WRITE
); );
if (io.headerOk()) if (numberIo.headerOk())
{ {
const volScalarField collisionDensity(io, this->owner().mesh()); const volScalarField numberCollisionDensity
collisionDensity_ == collisionDensity.boundaryField(); (
collisionDensity0_ == collisionDensity.boundaryField(); numberIo,
this->owner().mesh()
);
numberCollisionDensity_ == numberCollisionDensity.boundaryField();
numberCollisionDensity0_ == numberCollisionDensity.boundaryField();
}
typeIOobject<volScalarField> 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<CloudType>::PatchCollisionDensity
: :
CloudFunctionObject<CloudType>(ppm), CloudFunctionObject<CloudType>(ppm),
minSpeed_(ppm.minSpeed_), minSpeed_(ppm.minSpeed_),
collisionDensity_ numberCollisionDensity_
( (
volScalarField::Internal::null(), volScalarField::Internal::null(),
ppm.collisionDensity_ ppm.numberCollisionDensity_
), ),
collisionDensity0_ numberCollisionDensity0_
( (
volScalarField::Internal::null(), volScalarField::Internal::null(),
ppm.collisionDensity0_ ppm.numberCollisionDensity0_
),
massCollisionDensity_
(
volScalarField::Internal::null(),
ppm.massCollisionDensity_
),
massCollisionDensity0_
(
volScalarField::Internal::null(),
ppm.massCollisionDensity0_
), ),
time0_(ppm.time0_) time0_(ppm.time0_)
{} {}
@ -167,8 +247,10 @@ void Foam::PatchCollisionDensity<CloudType>::postPatch
const scalar speed = (p.U() - Up) & nw; const scalar speed = (p.U() - Up) & nw;
if (speed > minSpeed_) if (speed > minSpeed_)
{ {
collisionDensity_[patchi][patchFacei] += const scalar magSf =
1/this->owner().mesh().magSf().boundaryField()[patchi][patchFacei]; this->owner().mesh().magSf().boundaryField()[patchi][patchFacei];
numberCollisionDensity_[patchi][patchFacei] += 1/magSf;
massCollisionDensity_[patchi][patchFacei] += p.mass()/magSf;
} }
} }

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org \\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2018-2020 OpenFOAM Foundation \\ / A nd | Copyright (C) 2018-2022 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -25,9 +25,9 @@ Class
Foam::PatchCollisionDensity Foam::PatchCollisionDensity
Description Description
Function object which generates fields of the number and rate of collisions Function object which generates fields of the number and mass and rates
per unit area on all patches. Can optionally take a minimum speed below thereof of collisions per unit area on all patches. Can optionally take a
which a collision is not counted. minimum speed below which a collision is not counted.
Example usage: Example usage:
\verbatim \verbatim
@ -70,11 +70,18 @@ class PatchCollisionDensity
const scalar minSpeed_; const scalar minSpeed_;
//- The field of the number of collisions per unit area //- 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 //- The field of the number of collisions per unit area at the last
// output // 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 //- The time at the last output
scalar time0_; scalar time0_;