From 885456f9a408417fa72a9289c709da090c700fdd Mon Sep 17 00:00:00 2001 From: Kutalmis Bercin <kutalmis.bercin@esi-group.com> Date: Tue, 6 Dec 2022 11:43:56 +0000 Subject: [PATCH] ENH: dynamicContactAngleForce: new finite-area contact-angle force model DEFEATURE: merge fa-perturbedTemperatureDependent into dynamicContactAngle --- src/regionFaModels/Make/files | 2 +- .../dynamicContactAngleForce.C} | 93 ++++++++++++------- .../dynamicContactAngleForce.H} | 88 ++++++++++++------ .../pimpleFoam/laminar/filmPanel0/0.orig/U | 6 +- .../pimpleFoam/laminar/inclinedPlaneFilm/0/U | 6 +- .../splashPanelFilm/0.orig/U | 6 +- 6 files changed, 131 insertions(+), 70 deletions(-) rename src/regionFaModels/liquidFilm/subModels/kinematic/force/contactAngleForces/{perturbedTemperatureDependent/perturbedTemperatureDependentContactAngleForce.C => dynamicContactAngleForce/dynamicContactAngleForce.C} (61%) rename src/regionFaModels/liquidFilm/subModels/kinematic/force/contactAngleForces/{perturbedTemperatureDependent/perturbedTemperatureDependentContactAngleForce.H => dynamicContactAngleForce/dynamicContactAngleForce.H} (57%) diff --git a/src/regionFaModels/Make/files b/src/regionFaModels/Make/files index 4e761c227dd..cd0717dbd83 100644 --- a/src/regionFaModels/Make/files +++ b/src/regionFaModels/Make/files @@ -30,7 +30,7 @@ liquidFilm/subModels/kinematic/force/forceList/forceList.C liquidFilm/subModels/kinematic/force/force/force.C liquidFilm/subModels/kinematic/force/force/forceNew.C liquidFilm/subModels/kinematic/force/contactAngleForces/contactAngleForce/contactAngleForce.C -liquidFilm/subModels/kinematic/force/contactAngleForces/perturbedTemperatureDependent/perturbedTemperatureDependentContactAngleForce.C +liquidFilm/subModels/kinematic/force/contactAngleForces/dynamicContactAngleForce/dynamicContactAngleForce.C liquidFilm/subModels/filmSubModelBase.C diff --git a/src/regionFaModels/liquidFilm/subModels/kinematic/force/contactAngleForces/perturbedTemperatureDependent/perturbedTemperatureDependentContactAngleForce.C b/src/regionFaModels/liquidFilm/subModels/kinematic/force/contactAngleForces/dynamicContactAngleForce/dynamicContactAngleForce.C similarity index 61% rename from src/regionFaModels/liquidFilm/subModels/kinematic/force/contactAngleForces/perturbedTemperatureDependent/perturbedTemperatureDependentContactAngleForce.C rename to src/regionFaModels/liquidFilm/subModels/kinematic/force/contactAngleForces/dynamicContactAngleForce/dynamicContactAngleForce.C index 85cf19f2c5d..4119e50a984 100644 --- a/src/regionFaModels/liquidFilm/subModels/kinematic/force/contactAngleForces/perturbedTemperatureDependent/perturbedTemperatureDependentContactAngleForce.C +++ b/src/regionFaModels/liquidFilm/subModels/kinematic/force/contactAngleForces/dynamicContactAngleForce/dynamicContactAngleForce.C @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2020 OpenCFD Ltd. + Copyright (C) 2020-2022 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -25,7 +25,7 @@ License \*---------------------------------------------------------------------------*/ -#include "perturbedTemperatureDependentContactAngleForce.H" +#include "dynamicContactAngleForce.H" #include "addToRunTimeSelectionTable.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -39,26 +39,44 @@ namespace areaSurfaceFilmModels // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // -defineTypeNameAndDebug(perturbedTemperatureDependentContactAngleForce, 0); +defineTypeNameAndDebug(dynamicContactAngleForce, 0); addToRunTimeSelectionTable ( force, - perturbedTemperatureDependentContactAngleForce, + dynamicContactAngleForce, dictionary ); // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -perturbedTemperatureDependentContactAngleForce:: -perturbedTemperatureDependentContactAngleForce +dynamicContactAngleForce::dynamicContactAngleForce ( liquidFilmBase& film, const dictionary& dict ) : contactAngleForce(typeName, film, dict), - thetaPtr_(Function1<scalar>::New("theta", coeffDict_, &film.primaryMesh())), + U_vs_thetaPtr_ + ( + Function1<scalar>::NewIfPresent + ( + "Utheta", + coeffDict_, + word::null, + &film.primaryMesh() + ) + ), + T_vs_thetaPtr_ + ( + Function1<scalar>::NewIfPresent + ( + "Ttheta", + coeffDict_, + word::null, + &film.primaryMesh() + ) + ), rndGen_(label(0)), distribution_ ( @@ -68,43 +86,53 @@ perturbedTemperatureDependentContactAngleForce rndGen_ ) ) -{} - - -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // - -perturbedTemperatureDependentContactAngleForce:: -~perturbedTemperatureDependentContactAngleForce() -{} +{ + if (U_vs_thetaPtr_ && T_vs_thetaPtr_) + { + FatalIOErrorInFunction(dict) + << "Entries Utheta and Ttheta could not be used together" + << abort(FatalIOError); + } +} // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // -tmp<areaScalarField> perturbedTemperatureDependentContactAngleForce:: -theta() const +tmp<areaScalarField> dynamicContactAngleForce::theta() const { - tmp<areaScalarField> ttheta + auto ttheta = tmp<areaScalarField>::New ( - new areaScalarField + IOobject ( - IOobject - ( - typeName + ":theta", - film().primaryMesh().time().timeName(), - film().primaryMesh() - ), - film().regionMesh(), - dimensionedScalar(dimless, Zero) - ) + IOobject::scopedName(typeName, "theta"), + film().primaryMesh().time().timeName(), + film().primaryMesh(), + IOobject::NO_READ, + IOobject::NO_WRITE, + IOobject::NO_REGISTER + ), + film().regionMesh(), + dimensionedScalar(dimless, Zero) ); - areaScalarField& theta = ttheta.ref(); scalarField& thetai = theta.ref(); - const areaScalarField& T = film().Tf(); - // Initialize with the function of temperature - thetai = thetaPtr_->value(T()); + if (U_vs_thetaPtr_) + { + // Initialize with the function of film speed + const areaVectorField& U = film().Uf(); + + thetai = U_vs_thetaPtr_->value(mag(U())); + } + + if (T_vs_thetaPtr_) + { + // Initialize with the function of film temperature + const areaScalarField& T = film().Tf(); + + thetai = T_vs_thetaPtr_->value(T()); + } // Add the stochastic perturbation forAll(thetai, facei) @@ -115,6 +143,7 @@ theta() const return ttheta; } + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace surfaceFilmModels diff --git a/src/regionFaModels/liquidFilm/subModels/kinematic/force/contactAngleForces/perturbedTemperatureDependent/perturbedTemperatureDependentContactAngleForce.H b/src/regionFaModels/liquidFilm/subModels/kinematic/force/contactAngleForces/dynamicContactAngleForce/dynamicContactAngleForce.H similarity index 57% rename from src/regionFaModels/liquidFilm/subModels/kinematic/force/contactAngleForces/perturbedTemperatureDependent/perturbedTemperatureDependentContactAngleForce.H rename to src/regionFaModels/liquidFilm/subModels/kinematic/force/contactAngleForces/dynamicContactAngleForce/dynamicContactAngleForce.H index ae165b90292..8f2ec84b881 100644 --- a/src/regionFaModels/liquidFilm/subModels/kinematic/force/contactAngleForces/perturbedTemperatureDependent/perturbedTemperatureDependentContactAngleForce.H +++ b/src/regionFaModels/liquidFilm/subModels/kinematic/force/contactAngleForces/dynamicContactAngleForce/dynamicContactAngleForce.H @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2020 OpenCFD Ltd. + Copyright (C) 2020-2022 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -24,31 +24,66 @@ License along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. Class - Foam::regionModels::areaSurfaceFilmModels:: - perturbedTemperatureDependentContactAngleForce + Foam::regionModels::areaSurfaceFilmModels::dynamicContactAngleForce Description - Temperature dependent contact angle force with a stochastic perturbation. + Film-speed or film-temperature dependent + contact-angle force with a stochastic perturbation. The contact angle in degrees is specified as a \c Foam::Function1 type, to enable the use of, e.g. \c constant, \c polynomial, \c table values and the stochastic perturbation obtained from a \c Foam::distributionModels::distributionModel. -See also - - Foam::regionModels::areaSurfaceFilmModels::contactAngleForce - - areaSurfaceFilmModels::temperatureDependentContactAngleForce - - Foam::regionModels::areaSurfaceFilmModels::distributionContactAngleForce - - Foam::Function1Types - - Foam::distributionModel +Usage + Minimal example: + \verbatim + forces + ( + dynamicContactAngle + ); + + dynamicContactAngleForceCoeffs + { + // Mandatory entries + distribution <subDict>; + + // Conditional entries + + // Option-1 + Utheta <Function1<scalar>>; + + // Option-2 + Ttheta <Function1<scalar>>; + + // Inherited entries + ... + } + \endverbatim + + where the entries mean: + \table + Property | Description | Type | Reqd | Deflt + dynamicContactAngle | Type name | word | yes | - + Utheta | Contact angle as a function of film speed <!-- + --> | \<Function1\<scalar\> | choice | - + Ttheta | Contact angle as a function of film temperature <!-- + --> | \<Function1\<scalar\> | choice | - + distribution | Probability distribution model | subDict | yes | - + \endtable + + The inherited entries are elaborated in: + - \link contactAngleForce.H \endlink + - \link Function1.H \endlink + - \link distributionModel.H \endlink SourceFiles - perturbedTemperatureDependentContactAngleForce.C + dynamicContactAngleForce.C \*---------------------------------------------------------------------------*/ -#ifndef perturbedTemperatureDependentContactAngleForce_H -#define perturbedTemperatureDependentContactAngleForce_H +#ifndef areaSurfaceFilmModels_dynamicContactAngleForce_H +#define areaSurfaceFilmModels_dynamicContactAngleForce_H #include "contactAngleForce.H" #include "Function1.H" @@ -65,17 +100,20 @@ namespace areaSurfaceFilmModels { /*---------------------------------------------------------------------------*\ - Class perturbedTemperatureDependentContactAngleForce Declaration + Class dynamicContactAngleForce Declaration \*---------------------------------------------------------------------------*/ -class perturbedTemperatureDependentContactAngleForce +class dynamicContactAngleForce : public contactAngleForce { // Private Data - //- Contact angle function - autoPtr<Function1<scalar>> thetaPtr_; + //- Contact angle as a function of film speed + autoPtr<Function1<scalar>> U_vs_thetaPtr_; + + //- Contact angle as a function of film temperature + autoPtr<Function1<scalar>> T_vs_thetaPtr_; //- Random number generator Random rndGen_; @@ -87,16 +125,10 @@ class perturbedTemperatureDependentContactAngleForce // Private Member Functions //- No copy construct - perturbedTemperatureDependentContactAngleForce - ( - const perturbedTemperatureDependentContactAngleForce& - ) = delete; + dynamicContactAngleForce(const dynamicContactAngleForce&) = delete; //- No copy assignment - void operator= - ( - const perturbedTemperatureDependentContactAngleForce& - ) = delete; + void operator=(const dynamicContactAngleForce&) = delete; protected: @@ -108,13 +140,13 @@ protected: public: //- Runtime type information - TypeName("perturbedTemperatureDependentContactAngle"); + TypeName("dynamicContactAngle"); // Constructors //- Construct from surface film model - perturbedTemperatureDependentContactAngleForce + dynamicContactAngleForce ( liquidFilmBase& film, const dictionary& dict @@ -122,7 +154,7 @@ public: //- Destructor - virtual ~perturbedTemperatureDependentContactAngleForce(); + virtual ~dynamicContactAngleForce() = default; }; diff --git a/tutorials/incompressible/pimpleFoam/laminar/filmPanel0/0.orig/U b/tutorials/incompressible/pimpleFoam/laminar/filmPanel0/0.orig/U index 820885bc360..c1d3599d0c1 100644 --- a/tutorials/incompressible/pimpleFoam/laminar/filmPanel0/0.orig/U +++ b/tutorials/incompressible/pimpleFoam/laminar/filmPanel0/0.orig/U @@ -68,12 +68,12 @@ boundaryField injectionModels (); - forces (perturbedTemperatureDependentContactAngle); + forces (dynamicContactAngle); - perturbedTemperatureDependentContactAngleCoeffs + dynamicContactAngleCoeffs { Ccf 0.4; - theta constant 0; + Ttheta constant 0; distribution { type normal; diff --git a/tutorials/incompressible/pimpleFoam/laminar/inclinedPlaneFilm/0/U b/tutorials/incompressible/pimpleFoam/laminar/inclinedPlaneFilm/0/U index d93910cbe5d..2c2f5c41226 100644 --- a/tutorials/incompressible/pimpleFoam/laminar/inclinedPlaneFilm/0/U +++ b/tutorials/incompressible/pimpleFoam/laminar/inclinedPlaneFilm/0/U @@ -59,12 +59,12 @@ boundaryField injectionModels (); - forces (perturbedTemperatureDependentContactAngle); + forces (dynamicContactAngle); - perturbedTemperatureDependentContactAngleCoeffs + dynamicContactAngleCoeffs { Ccf 0.085; - theta constant 45; + Ttheta constant 45; distribution { type normal; diff --git a/tutorials/lagrangian/reactingParcelFoam/splashPanelFilm/0.orig/U b/tutorials/lagrangian/reactingParcelFoam/splashPanelFilm/0.orig/U index 032780506ce..fbf0aa9b9d6 100644 --- a/tutorials/lagrangian/reactingParcelFoam/splashPanelFilm/0.orig/U +++ b/tutorials/lagrangian/reactingParcelFoam/splashPanelFilm/0.orig/U @@ -54,12 +54,12 @@ boundaryField injectionModels (); - forces (perturbedTemperatureDependentContactAngle); + forces (dynamicContactAngle); - perturbedTemperatureDependentContactAngleCoeffs + dynamicContactAngleCoeffs { Ccf 0.4; - theta constant 0; + Ttheta constant 0; distribution { type normal; -- GitLab