/*---------------------------------------------------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2024 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::filmSeparationModels::FriedrichModel Description Computes film-separation properties from sharp edges for full separation (Friedrich et al., 2008) and partial separation (Zhang et al., 2018). The governing equations for full separation (Friedrich et al., 2008): \f[ F_{ratio} = \frac{\rho \, |\vec{u}|^2 \, h \, sin(\theta)} {\sigma (1 + sin(\theta)) + \rho \, \mathbf{g}\, h\,L_b cos(\theta)} \f] with: \f[ L_b = 0.0388 h^{0.5} \mathrm{Re}^{0.6} \mathrm{We}^{-0.5} \f] \f[ \mathrm{Re} = \frac{h \, |\vec{u}| \, \rho}{\mu} \f] \f[ \mathrm{We} = \frac{h \, \rho_p (\vec{u}_p - \vec{u})^2}{2 \sigma} \f] where: \vartable F_{ratio} | Force ratio h | Film thickness \rho | Film density \rho_p | Primary-phase (gas) density \sigma | Film surface tension \mu | Film dynamic viscosity \mathbf{u} | Film velocity \mathbf{g} | Gravitational acceleration \theta | Sharp-corner angle L_b | Characteristic breakup length \endvartable The onset of film separation is triggered and the film is assumed fully separated when \f$F_{ratio}>1\f$; otherwise, it remains attached. The governing equations for partial separation (Zhang et al., 2018): \f[ m_{ratio} = C_0 + C_1 \, exp\left(-\frac{F_{ratio}}{C_2}\right) \f] where: \vartable m_{ratio} | Mass fraction of separated film mass C_0 | Empirical constant (0.882) C_1 | Empirical constant (-1.908) C_2 | Empirical constant (1.264) \endvartable With the above model modification, the film separation begins when \f$F_{ratio}>1\f$; however, only the portion with \f$m_{ratio}\f$ separates while the rest stays attached. Reference: \verbatim Governing equations for the full film-separation model (tag:FLW): Friedrich, M. A., Lan, H., Wegener, J. L., Drallmeier, J. A., & Armaly, B. F. (2008). A separation criterion with experimental validation for shear-driven films in separated flows. J. Fluids Eng. May 2008, 130(5): 051301. DOI:10.1115/1.2907405 Governing equations for the partial film-separation model (tag:ZJD): Zhang, Y., Jia, M., Duan, H., Wang, P., Wang, J., Liu, H., & Xie, M. (2018). Numerical and experimental study of spray impingement and liquid film separation during the spray/wall interaction at expanding corners. International Journal of Multiphase Flow, 107, 67-81. DOI:10.1016/j.ijmultiphaseflow.2018.05.016 \endverbatim Usage Minimal example in boundary-condition files: \verbatim filmSeparationCoeffs { // Mandatory entries model Friedrich; rhop ; // Optional entries separationType ; } \endverbatim where the entries mean: \table Property | Description | Type | Reqd | Deflt model | Model name: Friedrich | word | yes | - rhop | Primary-phase density | scalar | yes | - separationType | Film separation type | word | no | full \endtable Options for the \c separationType entry: \verbatim full | Full film separation (Friedrich et al., 2008) partial | Partial film separation (Zhang et al., 2018) \endverbatim SourceFiles FriedrichModel.C \*---------------------------------------------------------------------------*/ #ifndef Foam_filmSeparationModels_FriedrichModel_H #define Foam_filmSeparationModels_FriedrichModel_H #include "filmSeparationModel.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { namespace filmSeparationModels { /*---------------------------------------------------------------------------*\ Class FriedrichModel Declaration \*---------------------------------------------------------------------------*/ class FriedrichModel : public filmSeparationModel { // Private Enumerations //- Options for the film separation type enum separationType : char { FULL = 0, //!< "Full film separation" PARTIAL //!< "Partial film separation" }; //- Names for separationType static const Enum separationTypeNames; // Private Data //- Film separation type enum separationType separation_; //- Approximate uniform mass density of primary phase scalar rhop_; //- Magnitude of the gravitational acceleration scalar magG_; //- Empirical constant for the partial separation model scalar C0_; //- Empirical constant for the partial separation model scalar C1_; //- Empirical constant for the partial separation model scalar C2_; //- List of flags identifying sharp-corner edges where separation //- may occur bitSet cornerEdges_; //- Corner angles of sharp-corner edges where separation may occur scalarList cornerAngles_; // Private Member Functions //- Return Boolean list of identified sharp-corner edges bitSet calcCornerEdges() const; //- Return true if the given edge is identified as sharp bool isCornerEdgeSharp ( const vector& faceCentreO, const vector& faceCentreN, const vector& faceNormalO, const vector& faceNormalN ) const; //- Return the list of sharp-corner angles for each edge scalarList calcCornerAngles() const; //- Return the sharp-corner angle for a given edge scalar calcCornerAngle ( const vector& faceNormalO, const vector& faceNormalN ) const; //- Return Boolean list of identified separation faces bitSet calcSeparationFaces() const; //- Return true if the given face is identified as a separation face void isSeparationFace ( bitSet& separationFaces, const scalar phiEdge, const label faceO, const label faceN = -1 ) const; //- Return the list of sharp-corner angles for each face scalarList calcSeparationAngles(const bitSet& separationFaces) const; //- Return the film-separation force ratio per face tmp Fratio() const; public: //- Runtime type information TypeName("Friedrich"); // Constructors //- Construct from the base film model and dictionary FriedrichModel ( const regionModels::areaSurfaceFilmModels::liquidFilmBase& film, const dictionary& dict ); // Destructor virtual ~FriedrichModel() = default; // Member Functions // Evaluation //- Calculate the mass ratio of film separation virtual tmp separatedMassRatio() const; }; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace filmSeparationModels } // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #endif // ************************************************************************* //