diff --git a/src/lagrangian/intermediate/parcels/include/makeParcelCloudFunctionObjects.H b/src/lagrangian/intermediate/parcels/include/makeParcelCloudFunctionObjects.H index 137e3ecb34..25647e25b4 100644 --- a/src/lagrangian/intermediate/parcels/include/makeParcelCloudFunctionObjects.H +++ b/src/lagrangian/intermediate/parcels/include/makeParcelCloudFunctionObjects.H @@ -45,6 +45,7 @@ License #include "RemoveParcels.H" #include "VoidFraction.H" #include "KinematicReynoldsNumber.H" +#include "KinematicWeberNumber.H" #include "ParticleDose.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -67,6 +68,7 @@ License makeCloudFunctionObjectType(RemoveParcels, CloudType); \ makeCloudFunctionObjectType(VoidFraction, CloudType); \ makeCloudFunctionObjectType(KinematicReynoldsNumber, CloudType); \ + makeCloudFunctionObjectType(KinematicWeberNumber, CloudType); \ makeCloudFunctionObjectType(ParticleDose, CloudType); diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/KinematicWeberNumber/KinematicWeberNumber.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/KinematicWeberNumber/KinematicWeberNumber.C new file mode 100644 index 0000000000..2c067d6923 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/KinematicWeberNumber/KinematicWeberNumber.C @@ -0,0 +1,105 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | www.openfoam.com + \\/ M anipulation | +------------------------------------------------------------------------------- + Copyright (C) 2023 OpenCFD Ltd. +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see . + +\*---------------------------------------------------------------------------*/ + +#include "KinematicWeberNumber.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template +Foam::KinematicWeberNumber::KinematicWeberNumber +( + const dictionary& dict, + CloudType& owner, + const word& modelName +) +: + CloudFunctionObject(dict, owner, modelName, typeName), + sigma_(dict.getScalar("sigma")) +{} + + +template +Foam::KinematicWeberNumber::KinematicWeberNumber +( + const KinematicWeberNumber& we +) +: + CloudFunctionObject(we), + sigma_(we.sigma_) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template +void Foam::KinematicWeberNumber::postEvolve +( + const typename parcelType::trackingData& td +) +{ + auto& c = this->owner(); + + auto* resultPtr = c.template getObjectPtr>("We"); + + if (!resultPtr) + { + resultPtr = new IOField + ( + IOobject + ( + "We", + c.time().timeName(), + c, + IOobject::NO_READ, + IOobject::NO_WRITE, + IOobject::REGISTER + ) + ); + + resultPtr->store(); + } + auto& We = *resultPtr; + + We.resize(c.size()); + + label parceli = 0; + forAllConstIters(c, parcelIter) + { + const parcelType& p = parcelIter(); + + We[parceli++] = p.We(td, sigma_); + } + + const bool haveParticles = c.size(); + if (c.time().writeTime() && returnReduceOr(haveParticles)) + { + We.write(haveParticles); + } +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/KinematicWeberNumber/KinematicWeberNumber.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/KinematicWeberNumber/KinematicWeberNumber.H new file mode 100644 index 0000000000..92eab4ac65 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/KinematicWeberNumber/KinematicWeberNumber.H @@ -0,0 +1,175 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | www.openfoam.com + \\/ M anipulation | +------------------------------------------------------------------------------- + Copyright (C) 2023 OpenCFD Ltd. +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see . + +Class + Foam::KinematicWeberNumber + +Group + grpLagrangianIntermediateFunctionObjects + +Description + Calculates and writes particle Weber number field on the cloud. + + \f[ + \mathrm{We}_p = + \frac{\rho_c \, | \mathbf{u}_\mathrm{rel} |^2 \, d_p }{\sigma} + \f] + + \vartable + \mathrm{We}_p | Particle Weber number + \rho_c | Density of carrier + d_p | Particle diameter + \mathbf{u}_\mathrm{rel} | Relative velocity between particle and carrier + \endvartable + + Operands: + \table + Operand | Type | Location + input | - | - + output file | - | - + output field | scalarField | \/lagrangian/\/We + \endtable + +Usage + Minimal example by using \c constant/\: + \verbatim + cloudFunctions + { + KinematicWeberNumber1 + { + // Mandatory entries + type WeberNumber; + sigma ; + } + } + \endverbatim + + where the entries mean: + \table + Property | Description | Type | Reqd | Deflt + type | Type name: WeberNumber | word | yes | - + sigma | Surface tension [N/m] | scalar | yes | - + \endtable + +See also + - Foam::ReactingWeberNumber + +SourceFiles + KinematicWeberNumber.C + +\*---------------------------------------------------------------------------*/ + +#ifndef KinematicWeberNumber_H +#define KinematicWeberNumber_H + +#include "CloudFunctionObject.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class KinematicWeberNumber Declaration +\*---------------------------------------------------------------------------*/ + +template +class KinematicWeberNumber +: + public CloudFunctionObject +{ + // Private Typedefs + + //- Convenience typedef for parcel type + typedef typename CloudType::parcelType parcelType; + + + // Private Data + + //- Surface tension [N/m] + scalar sigma_; + + +public: + + //- Runtime type information + TypeName("WeberNumber"); + + + // Generated Methods + + //- No copy assignment + void operator=(const KinematicWeberNumber&) = delete; + + + // Constructors + + //- Construct from dictionary + KinematicWeberNumber + ( + const dictionary& dict, + CloudType& owner, + const word& modelName + ); + + //- Copy construct + KinematicWeberNumber(const KinematicWeberNumber& vf); + + //- Construct and return a clone + virtual autoPtr> clone() const + { + return autoPtr> + ( + new KinematicWeberNumber(*this) + ); + } + + + //- Destructor + virtual ~KinematicWeberNumber() = default; + + + // Member Functions + + //- Post-evolve hook + virtual void postEvolve(const typename parcelType::trackingData& td); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository + #include "KinematicWeberNumber.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/tutorials/lagrangian/kinematicParcelFoam/spinningDisk/constant/kinematicCloudProperties b/tutorials/lagrangian/kinematicParcelFoam/spinningDisk/constant/kinematicCloudProperties index 0fc5b2d4bc..8d55e96cdc 100644 --- a/tutorials/lagrangian/kinematicParcelFoam/spinningDisk/constant/kinematicCloudProperties +++ b/tutorials/lagrangian/kinematicParcelFoam/spinningDisk/constant/kinematicCloudProperties @@ -102,7 +102,13 @@ subModels cloudFunctions -{} +{ + KinematicWeberNumber1 + { + type WeberNumber; + sigma 1.0; + } +} // ************************************************************************* //