/*---------------------------------------------------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2020-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 "ReactingWeberNumber.H" #include "SLGThermo.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template Foam::ReactingWeberNumber::ReactingWeberNumber ( const dictionary& dict, CloudType& owner, const word& modelName ) : CloudFunctionObject(dict, owner, modelName, typeName) {} template Foam::ReactingWeberNumber::ReactingWeberNumber ( const ReactingWeberNumber& we ) : CloudFunctionObject(we) {} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template void Foam::ReactingWeberNumber::postEvolve ( const typename parcelType::trackingData& td ) { const 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()); const auto& thermo = c.db().template lookupObject("SLGThermo"); const auto& liquids = thermo.liquids(); const auto& UInterp = td.UInterp(); const auto& pInterp = td.pInterp(); const auto& rhoInterp = td.rhoInterp(); label parceli = 0; for (const parcelType& p : c) { const auto& coords = p.coordinates(); const auto& tetIs = p.currentTetIndices(); const vector Uc(UInterp.interpolate(coords, tetIs)); const scalar pc = max ( pInterp.interpolate(coords, tetIs), c.constProps().pMin() ); const scalar rhoc(rhoInterp.interpolate(coords, tetIs)); const scalarField X(liquids.X(p.YLiquid())); const scalar sigma = liquids.sigma(pc, p.T(), X); We[parceli++] = rhoc*magSqr(p.U() - Uc)*p.d()/sigma; } const bool haveParticles = c.size(); if (c.time().writeTime() && returnReduceOr(haveParticles)) { We.write(haveParticles); } } // ************************************************************************* //