ENH: Updates to lagrangian/intermediate library to provide link to
surface film modelling - provides mechanism whereby particles can be re-introduced to a cloud - new injection models - new particle properties determined by pulling data from the surface film model
This commit is contained in:
@ -49,6 +49,9 @@ RADIATION=submodels/addOns/radiation
|
||||
$(RADIATION)/absorptionEmission/cloudAbsorptionEmission/cloudAbsorptionEmission.C
|
||||
$(RADIATION)/scatter/cloudScatter/cloudScatter.C
|
||||
|
||||
SURFACEFILM=submodels/addOns/surfaceFilmModel
|
||||
$(SURFACEFILM)/injection/cloudInjection/cloudInjection.C
|
||||
|
||||
submodels/Kinematic/PatchInteractionModel/LocalInteraction/patchInteractionData.C
|
||||
|
||||
KINEMATICINJECTION=submodels/Kinematic/InjectionModel
|
||||
|
||||
@ -15,9 +15,11 @@ EXE_INC = \
|
||||
-I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \
|
||||
-I$(LIB_SRC)/turbulenceModels/compressible/RAS/lnInclude \
|
||||
-I$(LIB_SRC)/turbulenceModels/LES/LESdeltas/lnInclude \
|
||||
-I$(LIB_SRC)/turbulenceModels/compressible/LES/lnInclude
|
||||
-I$(LIB_SRC)/turbulenceModels/compressible/LES/lnInclude \
|
||||
-I$(LIB_SRC)/surfaceFilmModels/lnInclude
|
||||
|
||||
LIB_LIBS = \
|
||||
-lsurfaceFilmModels \
|
||||
-lfiniteVolume \
|
||||
-lmeshTools \
|
||||
-llagrangian \
|
||||
|
||||
@ -32,6 +32,7 @@ License
|
||||
#include "InjectionModel.H"
|
||||
#include "PatchInteractionModel.H"
|
||||
#include "PostProcessingModel.H"
|
||||
#include "SurfaceFilmModel.H"
|
||||
|
||||
// * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * //
|
||||
|
||||
@ -77,6 +78,8 @@ void Foam::KinematicCloud<ParcelType>::evolveCloud()
|
||||
g_.value()
|
||||
);
|
||||
|
||||
this->surfaceFilm().inject(td);
|
||||
|
||||
this->injection().inject(td);
|
||||
|
||||
if (coupled_)
|
||||
@ -185,6 +188,15 @@ Foam::KinematicCloud<ParcelType>::KinematicCloud
|
||||
*this
|
||||
)
|
||||
),
|
||||
surfaceFilmModel_
|
||||
(
|
||||
SurfaceFilmModel<KinematicCloud<ParcelType> >::New
|
||||
(
|
||||
this->particleProperties_,
|
||||
*this,
|
||||
g
|
||||
)
|
||||
),
|
||||
UIntegrator_
|
||||
(
|
||||
vectorIntegrationScheme::New
|
||||
@ -270,14 +282,12 @@ template<class ParcelType>
|
||||
void Foam::KinematicCloud<ParcelType>::info() const
|
||||
{
|
||||
Info<< "Cloud: " << this->name() << nl
|
||||
<< " Total number of parcels added = "
|
||||
<< this->injection().parcelsAddedTotal() << nl
|
||||
<< " Total mass introduced = "
|
||||
<< this->injection().massInjected() << nl
|
||||
<< " Current number of parcels = "
|
||||
<< returnReduce(this->size(), sumOp<label>()) << nl
|
||||
<< " Current mass in system = "
|
||||
<< returnReduce(massInSystem(), sumOp<scalar>()) << nl;
|
||||
this->injection().info(Info);
|
||||
this->surfaceFilm().info(Info);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -31,7 +31,9 @@ Description
|
||||
- Dispersion model
|
||||
- Drag model
|
||||
- Injection model
|
||||
- Wall interaction model
|
||||
- Patch interaction model
|
||||
- Post-processing model
|
||||
- Surface film model
|
||||
|
||||
SourceFiles
|
||||
KinematicCloudI.H
|
||||
@ -70,11 +72,15 @@ class DragModel;
|
||||
template<class CloudType>
|
||||
class InjectionModel;
|
||||
|
||||
template<class CloudType>
|
||||
class PatchInteractionModel;
|
||||
|
||||
template<class CloudType>
|
||||
class PostProcessingModel;
|
||||
|
||||
template<class CloudType>
|
||||
class PatchInteractionModel;
|
||||
class SurfaceFilmModel;
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class KinematicCloud Declaration
|
||||
@ -173,6 +179,10 @@ protected:
|
||||
autoPtr<PostProcessingModel<KinematicCloud<ParcelType> > >
|
||||
postProcessingModel_;
|
||||
|
||||
//- Surface film model
|
||||
autoPtr<SurfaceFilmModel<KinematicCloud<ParcelType> > >
|
||||
surfaceFilmModel_;
|
||||
|
||||
|
||||
// Reference to the particle integration schemes
|
||||
|
||||
@ -315,6 +325,14 @@ public:
|
||||
inline PostProcessingModel<KinematicCloud<ParcelType> >&
|
||||
postProcessing();
|
||||
|
||||
//- Return const-access to the surface film model
|
||||
inline const SurfaceFilmModel<KinematicCloud<ParcelType> >&
|
||||
surfaceFilm() const;
|
||||
|
||||
//- Return reference to the surface film model
|
||||
inline SurfaceFilmModel<KinematicCloud<ParcelType> >&
|
||||
surfaceFilm();
|
||||
|
||||
|
||||
// Integration schemes
|
||||
|
||||
|
||||
@ -181,6 +181,22 @@ Foam::KinematicCloud<ParcelType>::postProcessing()
|
||||
}
|
||||
|
||||
|
||||
template<class ParcelType>
|
||||
inline const Foam::SurfaceFilmModel<Foam::KinematicCloud<ParcelType> >&
|
||||
Foam::KinematicCloud<ParcelType>::surfaceFilm() const
|
||||
{
|
||||
return surfaceFilmModel_();
|
||||
}
|
||||
|
||||
|
||||
template<class ParcelType>
|
||||
inline Foam::SurfaceFilmModel<Foam::KinematicCloud<ParcelType> >&
|
||||
Foam::KinematicCloud<ParcelType>::surfaceFilm()
|
||||
{
|
||||
return surfaceFilmModel_();
|
||||
}
|
||||
|
||||
|
||||
template<class ParcelType>
|
||||
inline const Foam::vectorIntegrationScheme&
|
||||
Foam::KinematicCloud<ParcelType>::UIntegrator() const
|
||||
|
||||
@ -120,6 +120,8 @@ void Foam::ReactingCloud<ParcelType>::evolveCloud()
|
||||
this->g().value()
|
||||
);
|
||||
|
||||
this->surfaceFilm().inject(td);
|
||||
|
||||
this->injection().inject(td);
|
||||
|
||||
if (this->coupled())
|
||||
|
||||
@ -93,6 +93,8 @@ void Foam::ReactingMultiphaseCloud<ParcelType>::evolveCloud()
|
||||
this->g().value()
|
||||
);
|
||||
|
||||
this->surfaceFilm().inject(td);
|
||||
|
||||
this->injection().inject(td);
|
||||
|
||||
if (this->coupled())
|
||||
|
||||
@ -86,6 +86,8 @@ void Foam::ThermoCloud<ParcelType>::evolveCloud()
|
||||
this->g().value()
|
||||
);
|
||||
|
||||
this->surfaceFilm().inject(td);
|
||||
|
||||
this->injection().inject(td);
|
||||
|
||||
if (this->coupled())
|
||||
|
||||
@ -283,15 +283,31 @@ bool Foam::KinematicParcel<ParcelType>::hitPatch
|
||||
)
|
||||
{
|
||||
ParcelType& p = static_cast<ParcelType&>(*this);
|
||||
|
||||
// Invoke poost-processing mdoel
|
||||
td.cloud().postProcessing().postPatch(p, patchI);
|
||||
|
||||
return td.cloud().patchInteraction().correct
|
||||
(
|
||||
pp,
|
||||
this->face(),
|
||||
td.keepParticle,
|
||||
U_
|
||||
);
|
||||
// Invoke surface film model
|
||||
if (td.cloud().surfaceFilm().transferParcel(p, patchI))
|
||||
{
|
||||
// Parcel transferred to the surface film
|
||||
td.keepParticle = false;
|
||||
|
||||
// All interactions done
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Invoke patch interaction model
|
||||
return
|
||||
td.cloud().patchInteraction().correct
|
||||
(
|
||||
pp,
|
||||
this->face(),
|
||||
td.keepParticle,
|
||||
U_
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -296,6 +296,9 @@ public:
|
||||
//- Return const access to specific heat capacity
|
||||
inline scalar cp() const;
|
||||
|
||||
//- Return the parcel sensible enthalpy
|
||||
inline scalar hs() const;
|
||||
|
||||
|
||||
// Edit
|
||||
|
||||
|
||||
@ -217,6 +217,13 @@ inline Foam::scalar Foam::ThermoParcel<ParcelType>::cp() const
|
||||
}
|
||||
|
||||
|
||||
template<class ParcelType>
|
||||
inline Foam::scalar Foam::ThermoParcel<ParcelType>::hs() const
|
||||
{
|
||||
return cp_*(T_ - 298.15);
|
||||
}
|
||||
|
||||
|
||||
template<class ParcelType>
|
||||
inline Foam::scalar& Foam::ThermoParcel<ParcelType>::T()
|
||||
{
|
||||
|
||||
@ -41,6 +41,7 @@ License
|
||||
|
||||
// Reacting multiphase
|
||||
#include "makeReactingMultiphaseParcelDevolatilisationModels.H"
|
||||
#include "makeReactingMultiphaseParcelSurfaceFilmModels.H"
|
||||
#include "makeReactingMultiphaseParcelSurfaceReactionModels.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
@ -66,6 +67,10 @@ namespace Foam
|
||||
(
|
||||
BasicReactingMultiphaseParcel
|
||||
);
|
||||
makeReactingMultiphaseSurfaceFilmModels
|
||||
(
|
||||
BasicReactingMultiphaseParcel
|
||||
);
|
||||
makeReactingMultiphaseSurfaceReactionModels
|
||||
(
|
||||
BasicReactingMultiphaseParcel
|
||||
|
||||
@ -38,6 +38,7 @@ License
|
||||
// Reacting
|
||||
#include "makeReactingParcelCompositionModels.H"
|
||||
#include "makeReactingParcelPhaseChangeModels.H"
|
||||
#include "makeReactingParcelSurfaceFilmModels.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
@ -56,6 +57,7 @@ namespace Foam
|
||||
// Reacting sub-models
|
||||
makeReactingCompositionModels(BasicReactingParcel);
|
||||
makeReactingPhaseChangeModels(BasicReactingParcel);
|
||||
makeReactingSurfaceFilmModels(BasicReactingParcel);
|
||||
};
|
||||
|
||||
|
||||
|
||||
@ -31,6 +31,7 @@ License
|
||||
#include "makeParcelInjectionModels.H"
|
||||
#include "makeParcelPatchInteractionModels.H"
|
||||
#include "makeParcelPostProcessingModels.H"
|
||||
#include "makeKinematicParcelSurfaceFilmModels.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
@ -42,6 +43,7 @@ namespace Foam
|
||||
makeParcelInjectionModels(basicKinematicParcel);
|
||||
makeParcelPatchInteractionModels(basicKinematicParcel);
|
||||
makeParcelPostProcessingModels(basicKinematicParcel);
|
||||
makeKinematicParcelSurfaceFilmModels(basicKinematicParcel);
|
||||
};
|
||||
|
||||
|
||||
|
||||
@ -34,6 +34,7 @@ License
|
||||
|
||||
// Thermodynamic
|
||||
#include "makeParcelHeatTransferModels.H"
|
||||
#include "makeThermoParcelSurfaceFilmModels.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
@ -48,6 +49,7 @@ namespace Foam
|
||||
|
||||
// Thermo sub-models
|
||||
makeParcelHeatTransferModels(basicThermoParcel);
|
||||
makeParcelSurfaceFilmModels(basicThermoParcel);
|
||||
};
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,51 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2009-2010 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef makeParcelSurfaceFilmModels_H
|
||||
#define makeParcelSurfaceFilmModels_H
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#include "KinematicCloud.H"
|
||||
#include "NoSurfaceFilm.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#define makeKinematicParcelSurfaceFilmModels(ParcelType) \
|
||||
\
|
||||
makeSurfaceFilmModel(KinematicCloud<ParcelType>); \
|
||||
\
|
||||
makeSurfaceFilmModelType \
|
||||
( \
|
||||
NoSurfaceFilm, \
|
||||
KinematicCloud, \
|
||||
ParcelType \
|
||||
);
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,74 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2009-2010 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef makeReactingMultiphaseParcelSurfaceFilmModels_H
|
||||
#define makeReactingMultiphaseParcelSurfaceFilmModels_H
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#include "thermoPhysicsTypes.H"
|
||||
#include "ReactingMultiphaseCloud.H"
|
||||
|
||||
#include "NoSurfaceFilm.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#define makeReactingMultiphaseSurfaceFilmModels(ParcelType) \
|
||||
\
|
||||
makeReactingMultiphaseSurfaceFilmModelThermoType \
|
||||
( \
|
||||
ParcelType, \
|
||||
constGasThermoPhysics \
|
||||
); \
|
||||
makeReactingMultiphaseSurfaceFilmModelThermoType \
|
||||
( \
|
||||
ParcelType, \
|
||||
gasThermoPhysics \
|
||||
); \
|
||||
makeReactingMultiphaseSurfaceFilmModelThermoType \
|
||||
( \
|
||||
ParcelType, \
|
||||
icoPoly8ThermoPhysics \
|
||||
);
|
||||
|
||||
|
||||
#define makeReactingMultiphaseSurfaceFilmModelThermoType(ParcelType, ThermoType)\
|
||||
\
|
||||
makeSurfaceFilmModel(KinematicCloud<ParcelType<ThermoType> >); \
|
||||
\
|
||||
makeSurfaceFilmModelThermoType \
|
||||
( \
|
||||
NoSurfaceFilm, \
|
||||
KinematicCloud, \
|
||||
ParcelType, \
|
||||
ThermoType \
|
||||
);
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,84 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2009-2010 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef makeReactingParcelSurfaceFilmModels_H
|
||||
#define makeReactingParcelSurfaceFilmModels_H
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#include "thermoPhysicsTypes.H"
|
||||
#include "KinematicCloud.H"
|
||||
|
||||
#include "NoSurfaceFilm.H"
|
||||
#include "ThermoSurfaceFilm.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#define makeReactingSurfaceFilmModels(ParcelType) \
|
||||
\
|
||||
makeReactingSurfaceFilmModelThermoType \
|
||||
( \
|
||||
ParcelType, \
|
||||
constGasThermoPhysics \
|
||||
); \
|
||||
\
|
||||
makeReactingSurfaceFilmModelThermoType \
|
||||
( \
|
||||
ParcelType, \
|
||||
gasThermoPhysics \
|
||||
); \
|
||||
\
|
||||
makeReactingSurfaceFilmModelThermoType \
|
||||
( \
|
||||
ParcelType, \
|
||||
icoPoly8ThermoPhysics \
|
||||
);
|
||||
|
||||
|
||||
#define makeReactingSurfaceFilmModelThermoType(ParcelType, ThermoType) \
|
||||
\
|
||||
makeSurfaceFilmModel(KinematicCloud<ParcelType<ThermoType> >); \
|
||||
\
|
||||
makeSurfaceFilmModelThermoType \
|
||||
( \
|
||||
NoSurfaceFilm, \
|
||||
KinematicCloud, \
|
||||
ParcelType, \
|
||||
ThermoType \
|
||||
); \
|
||||
makeSurfaceFilmModelThermoType \
|
||||
( \
|
||||
ThermoSurfaceFilm, \
|
||||
KinematicCloud, \
|
||||
ParcelType, \
|
||||
ThermoType \
|
||||
);
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,59 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2009-2010 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef makeThermoParcelSurfaceFilmModels_H
|
||||
#define makeThermoParcelSurfaceFilmModels_H
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#include "KinematicCloud.H"
|
||||
#include "NoSurfaceFilm.H"
|
||||
#include "ThermoSurfaceFilm.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#define makeParcelSurfaceFilmModels(ParcelType) \
|
||||
\
|
||||
makeSurfaceFilmModel(KinematicCloud<ParcelType>); \
|
||||
\
|
||||
makeSurfaceFilmModelType \
|
||||
( \
|
||||
NoSurfaceFilm, \
|
||||
KinematicCloud, \
|
||||
ParcelType \
|
||||
); \
|
||||
\
|
||||
makeSurfaceFilmModelType \
|
||||
( \
|
||||
ThermoSurfaceFilm, \
|
||||
KinematicCloud, \
|
||||
ParcelType \
|
||||
);
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -135,38 +135,46 @@ void Foam::InjectionModel<CloudType>::findCellAtPosition
|
||||
vector& position
|
||||
)
|
||||
{
|
||||
const vector p0 = position;
|
||||
const volVectorField& cellCentres = owner_.mesh().C();
|
||||
|
||||
bool foundCell = false;
|
||||
const vector p0 = position;
|
||||
|
||||
cellI = owner_.mesh().findCell(position);
|
||||
|
||||
label procI = -1;
|
||||
|
||||
if (cellI >= 0)
|
||||
{
|
||||
const vector& C = owner_.mesh().C()[cellI];
|
||||
position += SMALL*(C - position);
|
||||
|
||||
foundCell = owner_.mesh().pointInCell(position, cellI);
|
||||
procI = Pstream::myProcNo();
|
||||
}
|
||||
reduce(procI, maxOp<label>());
|
||||
if (procI != Pstream::myProcNo())
|
||||
{
|
||||
cellI = -1;
|
||||
}
|
||||
reduce(foundCell, orOp<bool>());
|
||||
|
||||
// Last chance - find nearest cell and try that one
|
||||
// - the point is probably on an edge
|
||||
if (!foundCell)
|
||||
if (procI == -1)
|
||||
{
|
||||
cellI = owner_.mesh().findNearestCell(position);
|
||||
|
||||
if (cellI >= 0)
|
||||
{
|
||||
const vector& C = owner_.mesh().C()[cellI];
|
||||
position += SMALL*(C - position);
|
||||
position += SMALL*(cellCentres[cellI] - position);
|
||||
|
||||
foundCell = owner_.mesh().pointInCell(position, cellI);
|
||||
if (owner_.mesh().pointInCell(position, cellI))
|
||||
{
|
||||
procI = Pstream::myProcNo();
|
||||
}
|
||||
}
|
||||
reduce(procI, maxOp<label>());
|
||||
if (procI != Pstream::myProcNo())
|
||||
{
|
||||
cellI = -1;
|
||||
}
|
||||
reduce(foundCell, orOp<bool>());
|
||||
}
|
||||
|
||||
if (!foundCell)
|
||||
if (procI == -1)
|
||||
{
|
||||
FatalErrorIn
|
||||
(
|
||||
@ -436,6 +444,14 @@ void Foam::InjectionModel<CloudType>::inject(TrackData& td)
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
void Foam::InjectionModel<CloudType>::info(Ostream& os) const
|
||||
{
|
||||
os << " Total number of parcels added = " << parcelsAddedTotal_ << nl
|
||||
<< " Total mass introduced = " << massInjected_ << nl;
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#include "NewInjectionModel.C"
|
||||
|
||||
@ -316,6 +316,12 @@ public:
|
||||
|
||||
//- Flag to identify whether model fully describes the parcel
|
||||
virtual bool fullyDescribed() const = 0;
|
||||
|
||||
|
||||
// I-O
|
||||
|
||||
//- Write surface film info to stream
|
||||
virtual void info(Ostream& os) const;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,88 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2009-2010 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "NoSurfaceFilm.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
template<class CloudType>
|
||||
Foam::NoSurfaceFilm<CloudType>::NoSurfaceFilm
|
||||
(
|
||||
const dictionary&,
|
||||
CloudType& owner,
|
||||
const dimensionedVector&
|
||||
)
|
||||
:
|
||||
SurfaceFilmModel<CloudType>(owner)
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
||||
template<class CloudType>
|
||||
Foam::NoSurfaceFilm<CloudType>::~NoSurfaceFilm()
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
template<class CloudType>
|
||||
bool Foam::NoSurfaceFilm<CloudType>::active() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
bool Foam::NoSurfaceFilm<CloudType>::transferParcel
|
||||
(
|
||||
const parcelType&,
|
||||
const label
|
||||
)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
void Foam::NoSurfaceFilm<CloudType>::setParcelProperties
|
||||
(
|
||||
parcelType&,
|
||||
const label
|
||||
)
|
||||
{
|
||||
// do nothing
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
void Foam::NoSurfaceFilm<CloudType>::info(Ostream&) const
|
||||
{
|
||||
// do nothing
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,127 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2009-2010 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
Class
|
||||
Foam::NoSurfaceFilm
|
||||
|
||||
Description
|
||||
Place holder for 'none' option
|
||||
|
||||
SourceFiles
|
||||
NoSurfaceFilm.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef NoSurfaceFilm_H
|
||||
#define NoSurfaceFilm_H
|
||||
|
||||
#include "SurfaceFilmModel.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class NoSurfaceFilm Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
template<class CloudType>
|
||||
class NoSurfaceFilm
|
||||
:
|
||||
public SurfaceFilmModel<CloudType>
|
||||
{
|
||||
protected:
|
||||
|
||||
// Protected data
|
||||
|
||||
//- Convenience typedef for parcel type
|
||||
typedef typename CloudType::parcelType parcelType;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("none");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from components
|
||||
NoSurfaceFilm
|
||||
(
|
||||
const dictionary&,
|
||||
CloudType&,
|
||||
const dimensionedVector&
|
||||
);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~NoSurfaceFilm();
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
// Evaluation
|
||||
|
||||
//- Flag to indicate whether model activates the surface film model
|
||||
virtual bool active() const;
|
||||
|
||||
//- Transfer parcel from cloud to surface film
|
||||
// Returns true if parcel is to be transferred
|
||||
virtual bool transferParcel
|
||||
(
|
||||
const parcelType& p,
|
||||
const label patchI
|
||||
);
|
||||
|
||||
//- Set parcel properties
|
||||
virtual void setParcelProperties
|
||||
(
|
||||
parcelType& p,
|
||||
const label filmCellI
|
||||
);
|
||||
|
||||
|
||||
// I-O
|
||||
|
||||
//- Write surface film info to stream
|
||||
virtual void info(Ostream& os) const;
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#ifdef NoRepository
|
||||
# include "NoSurfaceFilm.C"
|
||||
#endif
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,66 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2009-2010 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "SurfaceFilmModel.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
template<class CloudType>
|
||||
Foam::autoPtr<Foam::SurfaceFilmModel<CloudType> >
|
||||
Foam::SurfaceFilmModel<CloudType>::New
|
||||
(
|
||||
const dictionary& dict,
|
||||
CloudType& owner,
|
||||
const dimensionedVector& g
|
||||
)
|
||||
{
|
||||
word SurfaceFilmModelType(dict.lookup("SurfaceFilmModel"));
|
||||
|
||||
Info<< "Selecting SurfaceFilmModel " << SurfaceFilmModelType << endl;
|
||||
|
||||
typename dictionaryConstructorTable::iterator cstrIter =
|
||||
dictionaryConstructorTablePtr_->find(SurfaceFilmModelType);
|
||||
|
||||
if (cstrIter == dictionaryConstructorTablePtr_->end())
|
||||
{
|
||||
FatalErrorIn
|
||||
(
|
||||
"SurfaceFilmModel<CloudType>::New"
|
||||
"("
|
||||
"const dictionary&, "
|
||||
"CloudType&"
|
||||
")"
|
||||
) << "Unknown SurfaceFilmModel type "
|
||||
<< SurfaceFilmModelType
|
||||
<< ", constructor not in hash table" << nl << nl
|
||||
<< " Valid SurfaceFilmModel types are:" << nl
|
||||
<< dictionaryConstructorTablePtr_->sortedToc() << exit(FatalError);
|
||||
}
|
||||
|
||||
return autoPtr<SurfaceFilmModel<CloudType> >(cstrIter()(dict, owner, g));
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,184 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2009-2010 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "SurfaceFilmModel.H"
|
||||
#include "mathematicalConstants.H"
|
||||
#include "surfaceFilmModel.H"
|
||||
#include "directMappedWallPolyPatch.H"
|
||||
|
||||
using namespace Foam::constant;
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
template<class CloudType>
|
||||
Foam::SurfaceFilmModel<CloudType>::SurfaceFilmModel(CloudType& owner)
|
||||
:
|
||||
dict_(dictionary::null),
|
||||
owner_(owner),
|
||||
g_(dimensionedVector("zero", dimAcceleration, vector::zero)),
|
||||
coeffDict_(dictionary::null),
|
||||
injectorCellsPatch_(0),
|
||||
massParcelPatch_(0),
|
||||
diameterParcelPatch_(0),
|
||||
UFilmPatch_(0),
|
||||
rhoFilmPatch_(0),
|
||||
nParcelsTransferred_(0),
|
||||
nParcelsInjected_(0)
|
||||
{}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
Foam::SurfaceFilmModel<CloudType>::SurfaceFilmModel
|
||||
(
|
||||
const dictionary& dict,
|
||||
CloudType& owner,
|
||||
const dimensionedVector& g,
|
||||
const word& type
|
||||
)
|
||||
:
|
||||
dict_(dict),
|
||||
owner_(owner),
|
||||
g_(g),
|
||||
coeffDict_(dict.subDict(type + "Coeffs")),
|
||||
injectorCellsPatch_(0),
|
||||
massParcelPatch_(0),
|
||||
diameterParcelPatch_(0),
|
||||
UFilmPatch_(0),
|
||||
rhoFilmPatch_(0),
|
||||
nParcelsTransferred_(0),
|
||||
nParcelsInjected_(0)
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
||||
template<class CloudType>
|
||||
Foam::SurfaceFilmModel<CloudType>::~SurfaceFilmModel()
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
template<class CloudType>
|
||||
template<class TrackData>
|
||||
void Foam::SurfaceFilmModel<CloudType>::inject(TrackData& td)
|
||||
{
|
||||
// Retrieve the film model from the owner database
|
||||
const surfaceFilmModels::surfaceFilmModel& filmModel =
|
||||
this->owner().db().objectRegistry::lookupObject
|
||||
<surfaceFilmModels::surfaceFilmModel>
|
||||
(
|
||||
"surfaceFilmProperties"
|
||||
);
|
||||
|
||||
const labelList& filmPatches = filmModel.filmBottomPatchIDs();
|
||||
const labelList& primaryPatches = filmModel.primaryPatchIDs();
|
||||
|
||||
forAll(filmPatches, i)
|
||||
{
|
||||
const label primaryPatchI = primaryPatches[i];
|
||||
const directMappedWallPolyPatch& wpp =
|
||||
refCast<const directMappedWallPolyPatch>
|
||||
(
|
||||
this->owner().mesh().boundaryMesh()[primaryPatchI]
|
||||
);
|
||||
|
||||
injectorCellsPatch_ = wpp.faceCells();
|
||||
|
||||
const label filmPatchI = filmPatches[i];
|
||||
const mapDistribute& distMap = wpp.map();
|
||||
cacheFilmFields(filmPatchI, distMap, filmModel);
|
||||
|
||||
forAll(injectorCellsPatch_, j)
|
||||
{
|
||||
if (diameterParcelPatch_[j] > 0)
|
||||
{
|
||||
const label cellI = injectorCellsPatch_[j];
|
||||
const point& pos = this->owner().mesh().C()[cellI];
|
||||
|
||||
// Create a new parcel
|
||||
typename CloudType::parcelType* pPtr =
|
||||
new typename CloudType::parcelType(td.cloud(), pos, cellI);
|
||||
setParcelProperties(*pPtr, j);
|
||||
|
||||
// Check new parcel properties
|
||||
// td.cloud().checkParcelProperties(*pPtr, 0.0, true);
|
||||
td.cloud().checkParcelProperties(*pPtr, 0.0, false);
|
||||
|
||||
// Add the new parcel to the cloud
|
||||
td.cloud().addParticle(pPtr);
|
||||
|
||||
nParcelsInjected_++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
void Foam::SurfaceFilmModel<CloudType>::cacheFilmFields
|
||||
(
|
||||
const label filmPatchI,
|
||||
const mapDistribute& distMap,
|
||||
const surfaceFilmModels::surfaceFilmModel& filmModel
|
||||
)
|
||||
{
|
||||
massParcelPatch_ = filmModel.massForPrimary().boundaryField()[filmPatchI];
|
||||
distMap.distribute(massParcelPatch_);
|
||||
|
||||
diameterParcelPatch_ =
|
||||
filmModel.diametersForPrimary().boundaryField()[filmPatchI];
|
||||
distMap.distribute(diameterParcelPatch_);
|
||||
|
||||
UFilmPatch_ = filmModel.U().boundaryField()[filmPatchI];
|
||||
distMap.distribute(UFilmPatch_);
|
||||
|
||||
rhoFilmPatch_ = filmModel.rho().boundaryField()[filmPatchI];
|
||||
distMap.distribute(rhoFilmPatch_);
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
void Foam::SurfaceFilmModel<CloudType>::setParcelProperties
|
||||
(
|
||||
parcelType& p,
|
||||
const label filmFaceI
|
||||
) const
|
||||
{
|
||||
// Set parcel properties
|
||||
scalar vol = mathematical::pi/6.0*pow3(diameterParcelPatch_[filmFaceI]);
|
||||
p.d() = diameterParcelPatch_[filmFaceI];
|
||||
p.U() = UFilmPatch_[filmFaceI];
|
||||
p.rho() = rhoFilmPatch_[filmFaceI];
|
||||
|
||||
p.nParticle() = massParcelPatch_[filmFaceI]/p.rho()/vol;
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#include "NewSurfaceFilmModel.C"
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,292 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2009-2010 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
Class
|
||||
Foam::SurfaceFilmModel
|
||||
|
||||
Description
|
||||
Templated wall surface film model class.
|
||||
|
||||
SourceFiles
|
||||
SurfaceFilmModel.C
|
||||
NewSurfaceFilmModel.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef SurfaceFilmModel_H
|
||||
#define SurfaceFilmModel_H
|
||||
|
||||
#include "IOdictionary.H"
|
||||
#include "autoPtr.H"
|
||||
#include "runTimeSelectionTables.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
// Forward declaration of classes
|
||||
namespace surfaceFilmModels
|
||||
{
|
||||
class surfaceFilmModel;
|
||||
}
|
||||
|
||||
class mapDistribute;
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class SurfaceFilmModel Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
template<class CloudType>
|
||||
class SurfaceFilmModel
|
||||
{
|
||||
protected:
|
||||
|
||||
// Protected data
|
||||
|
||||
//- Convenience typedef to the cloud's parcel type
|
||||
typedef typename CloudType::parcelType parcelType;
|
||||
|
||||
//- The cloud dictionary
|
||||
const dictionary& dict_;
|
||||
|
||||
//- Reference to the owner cloud class
|
||||
CloudType& owner_;
|
||||
|
||||
//- Gravitational acceleration constant
|
||||
const dimensionedVector& g_;
|
||||
|
||||
//- The coefficients dictionary
|
||||
const dictionary coeffDict_;
|
||||
|
||||
|
||||
// Cached injector fields per film patch
|
||||
|
||||
//- Injector cell / patch face
|
||||
labelList injectorCellsPatch_;
|
||||
|
||||
//- Parcel mass / patch face
|
||||
scalarList massParcelPatch_;
|
||||
|
||||
//- Parcel diameter / patch face
|
||||
scalarList diameterParcelPatch_;
|
||||
|
||||
//- Film velocity / patch face
|
||||
List<vector> UFilmPatch_;
|
||||
|
||||
//- Film density / patch face
|
||||
scalarList rhoFilmPatch_;
|
||||
|
||||
|
||||
// Counters
|
||||
|
||||
//- Number of parcels transferred to the film model
|
||||
label nParcelsTransferred_;
|
||||
|
||||
//- Number of parcels injected from the film model
|
||||
label nParcelsInjected_;
|
||||
|
||||
|
||||
// Protected functions
|
||||
|
||||
//- Cache the film fields in preparation for injection
|
||||
virtual void cacheFilmFields
|
||||
(
|
||||
const label filmPatchI,
|
||||
const mapDistribute& distMap,
|
||||
const surfaceFilmModels::surfaceFilmModel& filmModel
|
||||
);
|
||||
|
||||
//- Set the individual parcel properties
|
||||
virtual void setParcelProperties
|
||||
(
|
||||
parcelType& p,
|
||||
const label filmFaceI
|
||||
) const;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("SurfaceFilmModel");
|
||||
|
||||
//- Declare runtime constructor selection table
|
||||
declareRunTimeSelectionTable
|
||||
(
|
||||
autoPtr,
|
||||
SurfaceFilmModel,
|
||||
dictionary,
|
||||
(
|
||||
const dictionary& dict,
|
||||
CloudType& owner,
|
||||
const dimensionedVector& g
|
||||
),
|
||||
(dict, owner, g)
|
||||
);
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct null from owner
|
||||
SurfaceFilmModel(CloudType& owner);
|
||||
|
||||
//- Construct from dictionary
|
||||
SurfaceFilmModel
|
||||
(
|
||||
const dictionary& dict,
|
||||
CloudType& owner,
|
||||
const dimensionedVector& g,
|
||||
const word& type
|
||||
);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~SurfaceFilmModel();
|
||||
|
||||
|
||||
//- Selector
|
||||
static autoPtr<SurfaceFilmModel<CloudType> > New
|
||||
(
|
||||
const dictionary& dict,
|
||||
CloudType& owner,
|
||||
const dimensionedVector& g
|
||||
);
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
// Access
|
||||
|
||||
//- Return the owner cloud dictionary
|
||||
inline const dictionary& dict() const;
|
||||
|
||||
//- Return const access the owner cloud object
|
||||
inline const CloudType& owner() const;
|
||||
|
||||
//- Return non-const access the owner cloud object for manipulation
|
||||
inline CloudType& owner();
|
||||
|
||||
//- Return gravitational acceleration constant
|
||||
inline const dimensionedVector& g() const;
|
||||
|
||||
//- Return the coefficients dictionary
|
||||
inline const dictionary& coeffDict() const;
|
||||
|
||||
//- Return const access to the number of parcels transferred to the
|
||||
// film model
|
||||
inline label nParcelsTransferred() const;
|
||||
|
||||
//- Return non-const access to the number of parcels transferred to
|
||||
// the film model
|
||||
inline label& nParcelsTransferred();
|
||||
|
||||
//- Return const access to the number of parcels injected from the
|
||||
// film model
|
||||
inline label nParcelsInjected() const;
|
||||
|
||||
//- Return non-const access to the number of parcels injected from
|
||||
// the film model
|
||||
inline label& nParcelsInjected();
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Flag to indicate whether model activates the surface film model
|
||||
virtual bool active() const = 0;
|
||||
|
||||
//- Transfer parcel from cloud to surface film
|
||||
// Returns true if parcel is to be transferred
|
||||
virtual bool transferParcel
|
||||
(
|
||||
const parcelType& p,
|
||||
const label patchI
|
||||
) = 0;
|
||||
|
||||
//- Inject parcels into the cloud
|
||||
template<class TrackData>
|
||||
void inject(TrackData& td);
|
||||
|
||||
|
||||
// I-O
|
||||
|
||||
//- Write surface film info to stream
|
||||
virtual void info(Ostream& os) const = 0;
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#define makeSurfaceFilmModel(CloudType) \
|
||||
\
|
||||
defineNamedTemplateTypeNameAndDebug(SurfaceFilmModel<CloudType>, 0); \
|
||||
\
|
||||
defineTemplateRunTimeSelectionTable \
|
||||
( \
|
||||
SurfaceFilmModel<CloudType>, \
|
||||
dictionary \
|
||||
);
|
||||
|
||||
|
||||
#define makeSurfaceFilmModelType(SS, CloudType, ParcelType) \
|
||||
\
|
||||
defineNamedTemplateTypeNameAndDebug(SS<CloudType<ParcelType> >, 0); \
|
||||
\
|
||||
SurfaceFilmModel<CloudType<ParcelType> >:: \
|
||||
adddictionaryConstructorToTable<SS<CloudType<ParcelType> > > \
|
||||
add##SS##CloudType##ParcelType##ConstructorToTable_;
|
||||
|
||||
|
||||
#define makeSurfaceFilmModelThermoType(SS, CloudType, ParcelType, ThermoType) \
|
||||
\
|
||||
defineNamedTemplateTypeNameAndDebug \
|
||||
( \
|
||||
SS<CloudType<ParcelType<ThermoType> > >, \
|
||||
0 \
|
||||
); \
|
||||
\
|
||||
SurfaceFilmModel<CloudType<ParcelType<ThermoType> > >:: \
|
||||
adddictionaryConstructorToTable \
|
||||
<SS<CloudType<ParcelType<ThermoType> > > > \
|
||||
add##SS##CloudType##ParcelType##ThermoType##ConstructorToTable_;
|
||||
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#include "SurfaceFilmModelI.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#ifdef NoRepository
|
||||
# include "SurfaceFilmModel.C"
|
||||
#endif
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,93 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2009-2010 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "SurfaceFilmModel.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
template<class CloudType>
|
||||
const Foam::dictionary& Foam::SurfaceFilmModel<CloudType>::dict() const
|
||||
{
|
||||
return dict_;
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
const CloudType& Foam::SurfaceFilmModel<CloudType>::owner() const
|
||||
{
|
||||
return owner_;
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
CloudType& Foam::SurfaceFilmModel<CloudType>::owner()
|
||||
{
|
||||
return owner_;
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
const Foam::dimensionedVector& Foam::SurfaceFilmModel<CloudType>::g() const
|
||||
{
|
||||
return g_;
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
const Foam::dictionary& Foam::SurfaceFilmModel<CloudType>::coeffDict() const
|
||||
{
|
||||
return coeffDict_;
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
Foam::label& Foam::SurfaceFilmModel<CloudType>::nParcelsTransferred()
|
||||
{
|
||||
return nParcelsTransferred_;
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
Foam::label Foam::SurfaceFilmModel<CloudType>::nParcelsTransferred() const
|
||||
{
|
||||
return nParcelsTransferred_;
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
Foam::label& Foam::SurfaceFilmModel<CloudType>::nParcelsInjected()
|
||||
{
|
||||
return nParcelsInjected_;
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
Foam::label Foam::SurfaceFilmModel<CloudType>::nParcelsInjected() const
|
||||
{
|
||||
return nParcelsInjected_;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,173 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2009-2010 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "ThermoSurfaceFilm.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
template<class CloudType>
|
||||
Foam::ThermoSurfaceFilm<CloudType>::ThermoSurfaceFilm
|
||||
(
|
||||
const dictionary& dict,
|
||||
CloudType& owner,
|
||||
const dimensionedVector& g
|
||||
)
|
||||
:
|
||||
SurfaceFilmModel<CloudType>(dict, owner, g, typeName),
|
||||
TFilmPatch_(0),
|
||||
cpFilmPatch_(0)
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
||||
template<class CloudType>
|
||||
Foam::ThermoSurfaceFilm<CloudType>::~ThermoSurfaceFilm()
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
template<class CloudType>
|
||||
bool Foam::ThermoSurfaceFilm<CloudType>::active() const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
bool Foam::ThermoSurfaceFilm<CloudType>::transferParcel
|
||||
(
|
||||
const parcelType& p,
|
||||
const label patchI
|
||||
)
|
||||
{
|
||||
// Retrieve the film model from the owner database
|
||||
surfaceFilmModels::surfaceFilmModel& filmModel =
|
||||
const_cast<surfaceFilmModels::surfaceFilmModel&>
|
||||
(
|
||||
this->owner().db().objectRegistry::
|
||||
lookupObject<surfaceFilmModels::surfaceFilmModel>
|
||||
(
|
||||
"surfaceFilmProperties"
|
||||
)
|
||||
);
|
||||
|
||||
if (filmModel.isFilmPatch(patchI))
|
||||
{
|
||||
const polyPatch& pp = this->owner().mesh().boundaryMesh()[patchI];
|
||||
|
||||
label faceI = pp.whichFace(p.face());
|
||||
|
||||
// Patch face normal
|
||||
const vector& nf = pp.faceNormals()[faceI];
|
||||
|
||||
// Relative parcel velocity
|
||||
const vector Urel =
|
||||
p.U() - this->owner().U().boundaryField()[patchI][faceI];
|
||||
|
||||
// Parcel mass
|
||||
const scalar m = p.nParticle()*p.mass();
|
||||
|
||||
// Add the particle properties as sources to the film model
|
||||
filmModel.addSources
|
||||
(
|
||||
patchI,
|
||||
faceI,
|
||||
m, // mass
|
||||
m*(Urel - nf*(Urel & nf)), // tangential momentum
|
||||
m*mag(Urel & nf), // impingement pressure
|
||||
m*p.hs() // energy
|
||||
);
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "ThermoSurfaceFilm<CloudType>::transferParcel:" << nl
|
||||
<< " Effective increase in film height = "
|
||||
<< p.nParticle()*p.volume()/mag(pp.faceAreas()[faceI]) << endl;
|
||||
}
|
||||
|
||||
this->nParcelsTransferred()++;
|
||||
|
||||
// Flag to remove parcel p from owner cloud
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
void Foam::ThermoSurfaceFilm<CloudType>::cacheFilmFields
|
||||
(
|
||||
const label filmPatchI,
|
||||
const mapDistribute& distMap,
|
||||
const surfaceFilmModels::surfaceFilmModel& filmModel
|
||||
)
|
||||
{
|
||||
SurfaceFilmModel<CloudType>::cacheFilmFields
|
||||
(
|
||||
filmPatchI,
|
||||
distMap,
|
||||
filmModel
|
||||
);
|
||||
|
||||
TFilmPatch_ = filmModel.T().boundaryField()[filmPatchI];
|
||||
distMap.distribute(TFilmPatch_);
|
||||
|
||||
cpFilmPatch_ = filmModel.cp().boundaryField()[filmPatchI];
|
||||
distMap.distribute(cpFilmPatch_);
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
void Foam::ThermoSurfaceFilm<CloudType>::setParcelProperties
|
||||
(
|
||||
parcelType& p,
|
||||
const label filmFaceI
|
||||
) const
|
||||
{
|
||||
SurfaceFilmModel<CloudType>::setParcelProperties(p, filmFaceI);
|
||||
|
||||
// Set parcel properties
|
||||
p.T() = TFilmPatch_[filmFaceI];
|
||||
p.cp() = cpFilmPatch_[filmFaceI];
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
void Foam::ThermoSurfaceFilm<CloudType>::info(Ostream& os) const
|
||||
{
|
||||
os << " Parcels transferred to film = "
|
||||
<< returnReduce(this->nParcelsTransferred(), sumOp<label>()) << nl
|
||||
<< " Number of film parcels added = "
|
||||
<< returnReduce(this->nParcelsInjected(), sumOp<label>()) << nl;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,148 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2009-2010 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
Class
|
||||
Foam::ThermoSurfaceFilm
|
||||
|
||||
Description
|
||||
Thermo parcel surface film model.
|
||||
|
||||
SourceFiles
|
||||
ThermoSurfaceFilm.C
|
||||
ThermoSurfaceFilmI.H
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef ThermoSurfaceFilm_H
|
||||
#define ThermoSurfaceFilm_H
|
||||
|
||||
#include "SurfaceFilmModel.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class ThermoSurfaceFilm Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
template<class CloudType>
|
||||
class ThermoSurfaceFilm
|
||||
:
|
||||
public SurfaceFilmModel<CloudType>
|
||||
{
|
||||
protected:
|
||||
|
||||
// Protected data
|
||||
|
||||
//- Convenience typedef to the cloud's parcel type
|
||||
typedef typename CloudType::parcelType parcelType;
|
||||
|
||||
|
||||
// Cached injector fields per film patch
|
||||
|
||||
//- Film temperature / patch face
|
||||
scalarList TFilmPatch_;
|
||||
|
||||
//- Film specific heat capacity / patch face
|
||||
scalarList cpFilmPatch_;
|
||||
|
||||
|
||||
// Protected functions
|
||||
|
||||
//- Cache the film fields in preparation for injection
|
||||
virtual void cacheFilmFields
|
||||
(
|
||||
const label filmPatchI,
|
||||
const mapDistribute& distMap,
|
||||
const surfaceFilmModels::surfaceFilmModel& filmModel
|
||||
);
|
||||
|
||||
//- Set the individual parcel properties
|
||||
virtual void setParcelProperties
|
||||
(
|
||||
parcelType& p,
|
||||
const label filmFaceI
|
||||
) const;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("ThermoSurfaceFilm");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from components
|
||||
ThermoSurfaceFilm
|
||||
(
|
||||
const dictionary& dict,
|
||||
CloudType& owner,
|
||||
const dimensionedVector& g
|
||||
);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~ThermoSurfaceFilm();
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
// Evaluation
|
||||
|
||||
//- Flag to indicate whether model activates surface film model
|
||||
virtual bool active() const;
|
||||
|
||||
//- Transfer parcel from cloud to surface film
|
||||
// Returns true if parcel is to be transferred
|
||||
virtual bool transferParcel
|
||||
(
|
||||
const parcelType& p,
|
||||
const label patchI
|
||||
);
|
||||
|
||||
|
||||
// I-O
|
||||
|
||||
//- Write surface film info to stream
|
||||
virtual void info(Ostream& os) const;
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#ifdef NoRepository
|
||||
# include "ThermoSurfaceFilm.C"
|
||||
#endif
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,135 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2009-2010 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "ThermoSurfaceFilm.H"
|
||||
#include "DimensionedFields.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
template<class CloudType>
|
||||
inline const Foam::word&
|
||||
Foam::ThermoSurfaceFilm<CloudType>::filmRegionName() const
|
||||
{
|
||||
return filmRegionName_;
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
inline const Foam::wordList&
|
||||
Foam::ThermoSurfaceFilm<CloudType>::patchNames() const
|
||||
{
|
||||
return patchNames_;
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
inline const Foam::polyMesh&
|
||||
Foam::ThermoSurfaceFilm<CloudType>::filmRegion() const
|
||||
{
|
||||
return filmRegion_;
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
inline const Foam::volScalarField&
|
||||
Foam::ThermoSurfaceFilm<CloudType>::hf() const
|
||||
{
|
||||
return hf_;
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
inline const Foam::volScalarField&
|
||||
Foam::ThermoSurfaceFilm<CloudType>::rho() const
|
||||
{
|
||||
return rho_;
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
inline const Foam::volVectorField&
|
||||
Foam::ThermoSurfaceFilm<CloudType>::U() const
|
||||
{
|
||||
return U_;
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
inline const Foam::volScalarField&
|
||||
Foam::ThermoSurfaceFilm<CloudType>::p() const
|
||||
{
|
||||
return p_;
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
inline const Foam::volScalarField&
|
||||
Foam::ThermoSurfaceFilm<CloudType>::h() const
|
||||
{
|
||||
return h_;
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
inline const Foam::volScalarField&
|
||||
Foam::ThermoSurfaceFilm<CloudType>::mu() const
|
||||
{
|
||||
return mu_;
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
inline Foam::DimensionedField<Foam::scalar, Foam::volMesh>&
|
||||
Foam::ThermoSurfaceFilm<CloudType>::rhoSp()
|
||||
{
|
||||
return rhoSp_;
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
inline Foam::DimensionedField<Foam::vector, Foam::volMesh>&
|
||||
Foam::ThermoSurfaceFilm<CloudType>::USp()
|
||||
{
|
||||
return USp_;
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
inline Foam::DimensionedField<Foam::scalar, Foam::volMesh>&
|
||||
Foam::ThermoSurfaceFilm<CloudType>::hSp()
|
||||
{
|
||||
return hSp_;
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
inline Foam::DimensionedField<Foam::scalar, Foam::volMesh>&
|
||||
Foam::ThermoSurfaceFilm<CloudType>::pSp()
|
||||
{
|
||||
return pSp_;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,118 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2009-2010 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "cloudInjection.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
#include "fvMesh.H"
|
||||
#include "Time.H"
|
||||
#include "mathematicalConstants.H"
|
||||
#include "Random.H"
|
||||
#include "volFields.H"
|
||||
|
||||
using namespace Foam::constant;
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace surfaceFilmModels
|
||||
{
|
||||
defineTypeNameAndDebug(cloudInjection, 0);
|
||||
addToRunTimeSelectionTable(injectionModel, cloudInjection, dictionary);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::surfaceFilmModels::cloudInjection::cloudInjection
|
||||
(
|
||||
const surfaceFilmModel& owner,
|
||||
const dictionary& dict
|
||||
)
|
||||
:
|
||||
injectionModel(type(), owner, dict),
|
||||
cloudName_(coeffs_.lookup("cloudName")),
|
||||
cloud_
|
||||
(
|
||||
const_cast<kinematicCloud&>
|
||||
(
|
||||
owner.mesh().lookupObject<kinematicCloud>(cloudName_)
|
||||
)
|
||||
),
|
||||
particlesPerParcel_(readScalar(coeffs_.lookup("particlesPerParcel"))),
|
||||
rndGen_(label(0)),
|
||||
parcelPDF_(pdfs::pdf::New(coeffs_.subDict("parcelPDF"), rndGen_)),
|
||||
diameter_(owner.film().nCells(), 0.0)
|
||||
{
|
||||
forAll(diameter_, faceI)
|
||||
{
|
||||
diameter_[faceI] = parcelPDF_->sample();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::surfaceFilmModels::cloudInjection::~cloudInjection()
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
|
||||
|
||||
void Foam::surfaceFilmModels::cloudInjection::correct
|
||||
(
|
||||
scalarField& massToInject,
|
||||
scalarField& diameterToInject
|
||||
)
|
||||
{
|
||||
const scalarField& rhoFilm = owner().rho();
|
||||
|
||||
// Collect the data to be transferred
|
||||
forAll(massToInject, cellI)
|
||||
{
|
||||
scalar rho = rhoFilm[cellI];
|
||||
scalar diam = diameter_[cellI];
|
||||
scalar minMass = particlesPerParcel_*rho*mathematical::pi/6*pow3(diam);
|
||||
|
||||
if (massToInject[cellI] > minMass)
|
||||
{
|
||||
// All mass can be injected - set particle diameter
|
||||
diameterToInject[cellI] = diameter_[cellI];
|
||||
|
||||
// Retrieve new particle diameter sample
|
||||
diameter_[cellI] = parcelPDF_->sample();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Mass below minimum threshold - cannot be injected
|
||||
massToInject[cellI] = 0.0;
|
||||
diameterToInject[cellI] = -1.0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,142 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2009-2010 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
Class
|
||||
Foam::cloudInjection
|
||||
|
||||
Description
|
||||
Cloud injection model
|
||||
|
||||
SourceFiles
|
||||
cloudInjection.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef cloudInjection_H
|
||||
#define cloudInjection_H
|
||||
|
||||
#include "injectionModel.H"
|
||||
#include "kinematicCloud.H"
|
||||
#include "pdf.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace surfaceFilmModels
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class cloudInjection Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class cloudInjection
|
||||
:
|
||||
public injectionModel
|
||||
{
|
||||
private:
|
||||
|
||||
// Private member functions
|
||||
|
||||
//- Disallow default bitwise copy construct
|
||||
cloudInjection(const cloudInjection&);
|
||||
|
||||
//- Disallow default bitwise assignment
|
||||
void operator=(const cloudInjection&);
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
// Protected data
|
||||
|
||||
//- Name of the cloud owner for newly ejected parcels
|
||||
word cloudName_;
|
||||
|
||||
//- Reference to the cloud
|
||||
kinematicCloud& cloud_;
|
||||
|
||||
//- Number of particles per parcel
|
||||
scalar particlesPerParcel_;
|
||||
|
||||
//- Random number generator
|
||||
Random rndGen_;
|
||||
|
||||
//- Parcel size PDF model
|
||||
const autoPtr<pdfs::pdf> parcelPDF_;
|
||||
|
||||
//- Diameters of particles to inject into the cloud
|
||||
scalarList diameter_;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("cloudInjection");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from surface film model
|
||||
cloudInjection(const surfaceFilmModel& owner, const dictionary& dict);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~cloudInjection();
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
// Access
|
||||
|
||||
//- Return the cloud name
|
||||
inline const word& cloudName() const;
|
||||
|
||||
//- Return a reference to the cloud
|
||||
inline const kinematicCloud& cloud() const;
|
||||
|
||||
|
||||
// Evolution
|
||||
|
||||
//- Correct
|
||||
virtual void correct
|
||||
(
|
||||
scalarField& massToInject,
|
||||
scalarField& diameterToInject
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace surfaceFilmModels
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#include "cloudInjectionI.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,44 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2009-2010 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "cloudInjection.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
inline const Foam::word&
|
||||
Foam::surfaceFilmModels::cloudInjection::cloudName() const
|
||||
{
|
||||
return cloudName_;
|
||||
}
|
||||
|
||||
|
||||
inline const Foam::kinematicCloud&
|
||||
Foam::surfaceFilmModels::cloudInjection::cloud() const
|
||||
{
|
||||
return cloud_;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
Reference in New Issue
Block a user