/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2011 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
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::SprayParcel
Description
Reacing spray parcel, with added functionality for atomization and breakup
\*---------------------------------------------------------------------------*/
#ifndef SprayParcel_H
#define SprayParcel_H
#include "particle.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
template
class SprayParcel;
template
Ostream& operator<<
(
Ostream&,
const SprayParcel&
);
/*---------------------------------------------------------------------------*\
Class SprayParcel Declaration
\*---------------------------------------------------------------------------*/
template
class SprayParcel
:
public ParcelType
{
protected:
// Protected data
// Spray parcel properties
//- Initial droplet diameter
scalar d0_;
//- Injection position
vector position0_;
//- Part of liquid core ( >0.5=liquid, <0.5=droplet )
scalar liquidCore_;
//- Index for KH Breakup
scalar KHindex_;
//- Spherical deviation
scalar y_;
//- Rate of change of spherical deviation
scalar yDot_;
//- Characteristic time (used in atomization and/or breakup model)
scalar tc_;
//- Stripped parcel mass due to breakup
scalar ms_;
//- Injected from injector (needed e.g. for calculating distance
// from injector)
scalar injector_;
//- Momentum relaxation time (needed for calculating parcel acc.)
scalar tMom_;
//- Passive scalar (extra variable to be defined by user)
scalar user_;
public:
// Static data members
//- String representation of properties
static string propHeader;
//- Runtime type information
TypeName("SprayParcel");
// Constructors
//- Construct from owner, position, and cloud owner
// Other properties initialised as null
inline SprayParcel
(
const polyMesh& mesh,
const vector& position,
const label cellI,
const label tetFaceI,
const label tetPtI
);
//- Construct from components
inline SprayParcel
(
const polyMesh& mesh,
const vector& position,
const label cellI,
const label tetFaceI,
const label tetPtI,
const label typeId,
const scalar nParticle0,
const scalar d0,
const scalar dTarget0,
const vector& U0,
const vector& f0,
const vector& angularMomentum0,
const vector& torque0,
const scalarField& Y0,
const scalar liquidCore,
const scalar KHindex,
const scalar y,
const scalar yDot,
const scalar tc,
const scalar ms,
const scalar injector,
const scalar tMom,
const scalar user,
const typename ParcelType::constantProperties& constProps
);
//- Construct from Istream
SprayParcel
(
const polyMesh& mesh,
Istream& is,
bool readFields = true
);
//- Construct as a copy
SprayParcel
(
const SprayParcel& p,
const polyMesh& mesh
);
//- Construct as a copy
SprayParcel(const SprayParcel& p);
//- Construct and return a (basic particle) clone
virtual autoPtr clone() const
{
return autoPtr(new SprayParcel(*this));
}
//- Construct and return a (basic particle) clone
virtual autoPtr clone(const polyMesh& mesh) const
{
return autoPtr
(
new SprayParcel(*this, mesh)
);
}
//- Factory class to read-construct particles used for
// parallel transfer
class iNew
{
const polyMesh& mesh_;
public:
iNew(const polyMesh& mesh)
:
mesh_(mesh)
{}
autoPtr > operator()(Istream& is) const
{
return autoPtr >
(
new SprayParcel(mesh_, is, true)
);
}
};
// Member Functions
// Access
//- Return const access to initial droplet diameter
inline scalar d0() const;
//- Return const access to initial droplet position
inline const vector& position0() const;
//- Return const access to liquid core
inline scalar liquidCore() const;
//- Return const access to Kelvin-Helmholtz breakup index
inline scalar KHindex() const;
//- Return const access to spherical deviation
inline scalar y() const;
//- Return const access to rate of change of spherical deviation
inline scalar yDot() const;
//- Return const access to atomization characteristic time
inline scalar tc() const;
//- Return const access to stripped parcel mass
inline scalar ms() const;
//- Return const access to injector id
inline scalar injector() const;
//- Return const access to momentum relaxation time
inline scalar tMom() const;
//- Return const access to passive user scalar
inline scalar user() const;
// Edit
//- Return access to initial droplet diameter
inline scalar& d0();
//- Return access to initial droplet position
inline vector& position0();
//- Return access to liquid core
inline scalar& liquidCore();
//- Return access to Kelvin-Helmholtz breakup index
inline scalar& KHindex();
//- Return access to spherical deviation
inline scalar& y();
//- Return access to rate of change of spherical deviation
inline scalar& yDot();
//- Return access to atomization characteristic time
inline scalar& tc();
//- Return access to stripped parcel mass
inline scalar& ms();
//- Return access to injector id
inline scalar& injector();
//- Return access to momentum relaxation time
inline scalar& tMom();
//- Return access to passive user scalar
inline scalar& user();
// Main calculation loop
//- Set cell values
template
void setCellValues
(
TrackData& td,
const scalar dt,
const label cellI
);
//- Correct parcel properties according to atomization model
template
void calcAtomization
(
TrackData& td,
const scalar dt,
const label cellI
);
//- Correct parcel properties according to breakup model
template
void calcBreakup
(
TrackData& td,
const scalar dt,
const label cellI
);
//- Correct cell values using latest transfer information
template
void cellValueSourceCorrection
(
TrackData& td,
const scalar dt,
const label cellI
);
//- Correct surface values due to emitted species
template
void correctSurfaceValues
(
TrackData& td,
const label cellI,
const scalar T,
const scalarField& Cs,
scalar& rhos,
scalar& mus,
scalar& Pr,
scalar& kappa
);
//- Update parcel properties over the time interval
template
void calc
(
TrackData& td,
const scalar dt,
const label cellI
);
//- Calculate the chi-factor for flash-boiling for the
// atomization model
template
scalar chi
(
TrackData& td,
const scalarField& X
) const;
//- Solve the TAB equation
template
void solveTABEq
(
TrackData& td,
const scalar dt
);
// I-O
//- Read
template
static void readFields
(
CloudType& c,
const CompositionType& compModel
);
//- Read - no composition
template
static void readFields(CloudType& c);
//- Write
template
static void writeFields
(
const CloudType& c,
const CompositionType& compModel
);
//- Write - composition supplied
template
static void writeFields(const CloudType& c);
// Ostream Operator
friend Ostream& operator<<
(
Ostream&,
const SprayParcel&
);
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#include "SprayParcelI.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#ifdef NoRepository
#include "SprayParcel.C"
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //