/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2021-2022 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::KinematicSurfaceFilm
Group
grpLagrangianIntermediateSurfaceFilmSubModels
Description
Kinematic parcel surface film model.
Responsible for:
- injecting parcels from the film model into the cloud, e.g. for dripping
- parcel interaction with the film, e.g absorb, bounce, splash
SourceFiles
KinematicSurfaceFilm.C
KinematicSurfaceFilmI.H
\*---------------------------------------------------------------------------*/
#ifndef Foam_KinematicSurfaceFilm_H
#define Foam_KinematicSurfaceFilm_H
#include "SurfaceFilmModel.H"
#include "UPtrList.H"
#include "liquidMixtureProperties.H"
#include "Enum.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// Forward Declarations
namespace regionModels
{
namespace surfaceFilmModels
{
class surfaceFilmRegionModel;
}
namespace areaSurfaceFilmModels
{
class liquidFilmBase;
}
}
/*---------------------------------------------------------------------------*\
Class KinematicSurfaceFilm Declaration
\*---------------------------------------------------------------------------*/
template
class KinematicSurfaceFilm
:
public SurfaceFilmModel
{
public:
// Public Data
//- Options for the interaction types
enum class interactionType
{
absorb, //!< absorb
bounce, //!< bounce
splashBai //!< Bai splash model
};
//- Names for interactionType
static const Enum interactionTypeNames;
protected:
// Data Types
//- Convenience typedef to the cloud's parcel type
typedef typename CloudType::parcelType parcelType;
typedef typename
regionModels::areaSurfaceFilmModels::liquidFilmBase areaFilm;
typedef typename
regionModels::surfaceFilmModels::surfaceFilmRegionModel regionFilm;
// Protected Data
//- Reference to the cloud random number generator
Random& rndGen_;
// Region Film thermo
//- Region Film liquid thermo
liquidMixtureProperties* thermo_;
//- Region Film reference pressure
scalar pRef_;
//- Region Film reference temperature
scalar TRef_;
//- Pointer to filmModel
regionFilm* filmModel_;
// Area Films
//- UPointers to area films
UPtrList areaFilms_;
// Interaction model data
//- Interaction type enumeration
interactionType interactionType_;
//- Particle type IDs that can interact with the film
// If empty (default) all type IDs are included
labelList parcelTypes_;
//- Film thickness beyond which patch is assumed to be wet
scalar deltaWet_;
//- Splash parcel type label - id assigned to identify parcel for
// post-processing. If not specified, defaults to originating cloud
// type
label splashParcelType_;
//- Number of new parcels resulting from splash event
label parcelsPerSplash_;
//- Maximum splash particle diameter for Chi-square distribution
// Default is incident particle diameter
scalar dMaxSplash_;
//- Minimum splash particle diameter for Chi-square distribution
// Default is 0.1 dMaxSplash
scalar dMinSplash_;
// Surface roughness coefficient typically in the range 1300 - 5200
// and decreases with increasing surface roughness
//- Dry surface roughness coefficient
// = 2630 for dry interaction (ref. Bai)
scalar Adry_;
//- Wet surface roughness coefficient
// = 1320 for wet interaction (ref. Bai)
scalar Awet_;
//- Skin friction typically in the range 0.6 < Cf < 0.8
scalar Cf_;
//- Counter for number of new splash parcels
label nParcelsSplashed_;
// Protected Member Functions
//- Return a vector tangential to input vector, v
vector tangentVector(const vector& v) const;
//- Return splashed parcel direction
vector splashDirection
(
const vector& tanVec1,
const vector& tanVec2,
const vector& nf
) const;
//- Initialise thermo
void init(bool binitThermo);
//- Initialise pointers of films
void initFilmModels();
// Injection from sheet (ejection) helper functions
//- Cache the film fields in preparation for injection
virtual void cacheFilmFields(const areaFilm& film);
//- Cache the film fields in preparation for injection
virtual void cacheFilmFields
(
const label filmPatchi,
const label primaryPatchi,
const regionModels::surfaceFilmModels::surfaceFilmRegionModel&
);
//- Set the individual parcel properties
virtual void setParcelProperties
(
parcelType& p,
const label filmFacei
) const;
public:
//- Runtime type information
TypeName("kinematicSurfaceFilm");
// Constructors
//- Construct from components
KinematicSurfaceFilm
(
const dictionary& dict,
CloudType& owner,
const word& type = typeName,
bool initThermo = true
);
//- Construct copy
KinematicSurfaceFilm
(
const KinematicSurfaceFilm& sfm,
bool initThermo = true
);
//- Construct and return a clone using supplied owner cloud
virtual autoPtr> clone() const
{
return autoPtr>
(
new KinematicSurfaceFilm(*this)
);
}
//- Destructor
virtual ~KinematicSurfaceFilm() = default;
// Member Functions
// Interaction models
//- Absorb parcel into film
template
void absorbInteraction
(
filmType&,
const parcelType& p,
const polyPatch& pp,
const label facei,
const scalar mass,
bool& keepParticle
);
//- Bounce parcel (flip parcel normal velocity)
void bounceInteraction
(
parcelType& p,
const polyPatch& pp,
const label facei,
bool& keepParticle
) const;
//- Parcel interaction with dry surface
template
void drySplashInteraction
(
filmType&,
const scalar sigma,
const scalar mu,
const parcelType& p,
const polyPatch& pp,
const label facei,
bool& keepParticle
);
//- Parcel interaction with wetted surface
template
void wetSplashInteraction
(
filmType&,
const scalar sigma,
const scalar mu,
parcelType& p,
const polyPatch& pp,
const label facei,
bool& keepParticle
);
//- Bai parcel splash interaction model
template
void splashInteraction
(
filmType&,
const parcelType& p,
const polyPatch& pp,
const label facei,
const scalar mRatio,
const scalar We,
const scalar Wec,
const scalar sigma,
bool& keepParticle
);
// Evaluation
//- Transfer parcel from cloud to surface film
// Returns true if parcel is to be transferred
virtual bool transferParcel
(
parcelType& p,
const polyPatch& pp,
bool& keepParticle
);
// I-O
//- Write surface film info
virtual void info();
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#ifdef NoRepository
#include "KinematicSurfaceFilm.C"
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //