ENH: Consolidated ConeInjection and ConeInjectionMP into a single model

This commit is contained in:
andy
2011-02-07 16:48:06 +00:00
parent 84d577539d
commit 406bc09516
13 changed files with 108 additions and 695 deletions

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2008-2010 OpenCFD Ltd. \\ / A nd | Copyright (C) 2008-2011 OpenCFD Ltd.
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -31,7 +31,6 @@ License
#include "KinematicCloud.H" #include "KinematicCloud.H"
#include "ConeInjection.H" #include "ConeInjection.H"
#include "ConeInjectionMP.H"
#include "FieldActivatedInjection.H" #include "FieldActivatedInjection.H"
#include "InflationInjection.H" #include "InflationInjection.H"
#include "KinematicLookupTableInjection.H" #include "KinematicLookupTableInjection.H"
@ -53,12 +52,6 @@ License
ParcelType \ ParcelType \
); \ ); \
makeInjectionModelType \ makeInjectionModelType \
( \
ConeInjectionMP, \
KinematicCloud, \
ParcelType \
); \
makeInjectionModelType \
( \ ( \
FieldActivatedInjection, \ FieldActivatedInjection, \
KinematicCloud, \ KinematicCloud, \

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2008-2010 OpenCFD Ltd. \\ / A nd | Copyright (C) 2008-2011 OpenCFD Ltd.
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -32,7 +32,6 @@ License
#include "KinematicCloud.H" #include "KinematicCloud.H"
#include "ConeInjection.H" #include "ConeInjection.H"
#include "ConeInjectionMP.H"
#include "FieldActivatedInjection.H" #include "FieldActivatedInjection.H"
#include "ManualInjection.H" #include "ManualInjection.H"
#include "NoInjection.H" #include "NoInjection.H"
@ -52,12 +51,6 @@ License
ParcelType \ ParcelType \
); \ ); \
makeInjectionModelType \ makeInjectionModelType \
( \
ConeInjectionMP, \
KinematicCloud, \
ParcelType \
); \
makeInjectionModelType \
( \ ( \
FieldActivatedInjection, \ FieldActivatedInjection, \
KinematicCloud, \ KinematicCloud, \

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2008-2010 OpenCFD Ltd. \\ / A nd | Copyright (C) 2008-2011 OpenCFD Ltd.
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -31,7 +31,6 @@ License
#include "KinematicCloud.H" #include "KinematicCloud.H"
#include "ConeInjection.H" #include "ConeInjection.H"
#include "ConeInjectionMP.H"
#include "FieldActivatedInjection.H" #include "FieldActivatedInjection.H"
#include "ManualInjection.H" #include "ManualInjection.H"
#include "NoInjection.H" #include "NoInjection.H"
@ -51,12 +50,6 @@ License
ParcelType \ ParcelType \
); \ ); \
makeInjectionModelType \ makeInjectionModelType \
( \
ConeInjectionMP, \
KinematicCloud, \
ParcelType \
); \
makeInjectionModelType \
( \ ( \
FieldActivatedInjection, \ FieldActivatedInjection, \
KinematicCloud, \ KinematicCloud, \

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\ / A nd | Copyright (C) 2008-2011 OpenCFD Ltd.
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -41,7 +41,16 @@ Foam::label Foam::ConeInjection<CloudType>::parcelsToInject
{ {
if ((time0 >= 0.0) && (time0 < duration_)) if ((time0 >= 0.0) && (time0 < duration_))
{ {
return round((time1 - time0)*parcelsPerSecond_); const scalar targetVolume = flowRateProfile_().integrate(0, time1);
const label targetParcels =
parcelsPerInjector_*targetVolume/this->volumeTotal_;
const label nToInject = targetParcels - nInjected_;
nInjected_ += nToInject;
return positionAxis_.size()*nToInject;
} }
else else
{ {
@ -78,15 +87,14 @@ Foam::ConeInjection<CloudType>::ConeInjection
) )
: :
InjectionModel<CloudType>(dict, owner, typeName), InjectionModel<CloudType>(dict, owner, typeName),
positionAxis_(this->coeffDict().lookup("positionAxis")),
injectorCells_(positionAxis_.size()),
injectorTetFaces_(positionAxis_.size()),
injectorTetPts_(positionAxis_.size()),
duration_(readScalar(this->coeffDict().lookup("duration"))), duration_(readScalar(this->coeffDict().lookup("duration"))),
position_(this->coeffDict().lookup("position")), parcelsPerInjector_
injectorCell_(-1),
injectorTetFace_(-1),
injectorTetPt_(-1),
direction_(this->coeffDict().lookup("direction")),
parcelsPerSecond_
( (
readScalar(this->coeffDict().lookup("parcelsPerSecond")) readScalar(this->coeffDict().lookup("parcelsPerInjector"))
), ),
flowRateProfile_ flowRateProfile_
( (
@ -102,13 +110,18 @@ Foam::ConeInjection<CloudType>::ConeInjection
this->coeffDict().subDict("sizeDistribution"), owner.rndGen() this->coeffDict().subDict("sizeDistribution"), owner.rndGen()
) )
), ),
tanVec1_(vector::zero), nInjected_(this->parcelsAddedTotal()),
tanVec2_(vector::zero) tanVec1_(positionAxis_.size()),
tanVec2_(positionAxis_.size())
{ {
// Normalise direction vector // Normalise direction vector and determine direction vectors
direction_ /= mag(direction_); // tangential to injector axis direction
forAll(positionAxis_, i)
{
vector& axis = positionAxis_[i].second();
axis /= mag(axis);
// Determine direction vectors tangential to direction
vector tangent = vector::zero; vector tangent = vector::zero;
scalar magTangent = 0.0; scalar magTangent = 0.0;
@ -117,25 +130,29 @@ Foam::ConeInjection<CloudType>::ConeInjection
{ {
vector v = rnd.sample01<vector>(); vector v = rnd.sample01<vector>();
tangent = v - (v & direction_)*direction_; tangent = v - (v & axis)*axis;
magTangent = mag(tangent); magTangent = mag(tangent);
} }
tanVec1_ = tangent/magTangent; tanVec1_[i] = tangent/magTangent;
tanVec2_ = direction_^tanVec1_; tanVec2_[i] = axis^tanVec1_[i];
}
// Set total volume to inject // Set total volume to inject
this->volumeTotal_ = flowRateProfile_().integrate(0.0, duration_); this->volumeTotal_ = flowRateProfile_().integrate(0.0, duration_);
// Set/cache the injector cell // Set/cache the injector cells
forAll(positionAxis_, i)
{
this->findCellAtPosition this->findCellAtPosition
( (
injectorCell_, injectorCells_[i],
injectorTetFace_, injectorTetFaces_[i],
injectorTetPt_, injectorTetPts_[i],
position_ positionAxis_[i].first()
); );
} }
}
template<class CloudType> template<class CloudType>
@ -145,18 +162,18 @@ Foam::ConeInjection<CloudType>::ConeInjection
) )
: :
InjectionModel<CloudType>(im), InjectionModel<CloudType>(im),
positionAxis_(im.positionAxis_),
injectorCells_(im.injectorCells_),
injectorTetFaces_(im.injectorTetFaces_),
injectorTetPts_(im.injectorTetPts_),
duration_(im.duration_), duration_(im.duration_),
position_(im.position_), parcelsPerInjector_(im.parcelsPerInjector_),
injectorCell_(im.injectorCell_),
injectorTetFace_(im.injectorTetFace_),
injectorTetPt_(im.injectorTetPt_),
direction_(im.direction_),
parcelsPerSecond_(im.parcelsPerSecond_),
flowRateProfile_(im.flowRateProfile_().clone().ptr()), flowRateProfile_(im.flowRateProfile_().clone().ptr()),
Umag_(im.Umag_().clone().ptr()), Umag_(im.Umag_().clone().ptr()),
thetaInner_(im.thetaInner_().clone().ptr()), thetaInner_(im.thetaInner_().clone().ptr()),
thetaOuter_(im.thetaOuter_().clone().ptr()), thetaOuter_(im.thetaOuter_().clone().ptr()),
sizeDistribution_(im.sizeDistribution_().clone().ptr()), sizeDistribution_(im.sizeDistribution_().clone().ptr()),
nInjected_(im.nInjected_),
tanVec1_(im.tanVec1_), tanVec1_(im.tanVec1_),
tanVec2_(im.tanVec2_) tanVec2_(im.tanVec2_)
{} {}
@ -181,7 +198,7 @@ Foam::scalar Foam::ConeInjection<CloudType>::timeEnd() const
template<class CloudType> template<class CloudType>
void Foam::ConeInjection<CloudType>::setPositionAndCell void Foam::ConeInjection<CloudType>::setPositionAndCell
( (
const label, const label parcelI,
const label, const label,
const scalar, const scalar,
vector& position, vector& position,
@ -190,17 +207,19 @@ void Foam::ConeInjection<CloudType>::setPositionAndCell
label& tetPtI label& tetPtI
) )
{ {
position = position_; const label i = parcelI % positionAxis_.size();
cellOwner = injectorCell_;
tetFaceI = injectorTetFace_; position = positionAxis_[i].first();
tetPtI = injectorTetPt_; cellOwner = injectorCells_[i];
tetFaceI = injectorTetFaces_[i];
tetPtI = injectorTetPts_[i];
} }
template<class CloudType> template<class CloudType>
void Foam::ConeInjection<CloudType>::setProperties void Foam::ConeInjection<CloudType>::setProperties
( (
const label, const label parcelI,
const label, const label,
const scalar time, const scalar time,
typename CloudType::parcelType& parcel typename CloudType::parcelType& parcel
@ -208,6 +227,9 @@ void Foam::ConeInjection<CloudType>::setProperties
{ {
cachedRandom& rnd = this->owner().rndGen(); cachedRandom& rnd = this->owner().rndGen();
// set particle velocity
const label i = parcelI % positionAxis_.size();
scalar t = time - this->SOI_; scalar t = time - this->SOI_;
scalar ti = thetaInner_().value(t); scalar ti = thetaInner_().value(t);
scalar to = thetaOuter_().value(t); scalar to = thetaOuter_().value(t);
@ -217,8 +239,8 @@ void Foam::ConeInjection<CloudType>::setProperties
scalar dcorr = cos(coneAngle); scalar dcorr = cos(coneAngle);
scalar beta = twoPi*rnd.sample01<scalar>(); scalar beta = twoPi*rnd.sample01<scalar>();
vector normal = alpha*(tanVec1_*cos(beta) + tanVec2_*sin(beta)); vector normal = alpha*(tanVec1_[i]*cos(beta) + tanVec2_[i]*sin(beta));
vector dirVec = dcorr*direction_; vector dirVec = dcorr*positionAxis_[i].second();
dirVec += normal; dirVec += normal;
dirVec /= mag(dirVec); dirVec /= mag(dirVec);

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\ / A nd | Copyright (C) 2008-2011 OpenCFD Ltd.
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -25,14 +25,13 @@ Class
Foam::ConeInjection Foam::ConeInjection
Description Description
Cone injection Multi-point cone injection model
- User specifies - User specifies
- time of start of injection - time of start of injection
- injector position - list of injector positions and directions (along injection axes)
- direction (along injection axis) - number of parcels to inject per injector
- parcel flow rate - parcel velocities
- parcel velocity
- inner and outer cone angles - inner and outer cone angles
- Parcel diameters obtained by distribution model model - Parcel diameters obtained by distribution model model
@ -46,6 +45,7 @@ SourceFiles
#include "InjectionModel.H" #include "InjectionModel.H"
#include "distributionModel.H" #include "distributionModel.H"
#include "vectorList.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -68,26 +68,23 @@ class ConeInjection
{ {
// Private data // Private data
//- List of position and axis for each injector
List<Tuple2<vector, vector> > positionAxis_;
//- List of cell labels corresponding to injector positions
labelList injectorCells_;
//- List of tetFace labels corresponding to injector positions
labelList injectorTetFaces_;
//- List of tetPt labels corresponding to injector positions
labelList injectorTetPts_;
//- Injection duration [s] //- Injection duration [s]
const scalar duration_; const scalar duration_;
//- Injector position [m] //- Number of parcels to introduce per injector
vector position_; const label parcelsPerInjector_;
//- Cell containing injector position []
label injectorCell_;
//- tetFace of tet containing injector position []
label injectorTetFace_;
//- tetPt of tet containing injector position []
label injectorTetPt_;
//- Injector direction []
vector direction_;
//- Number of parcels to introduce per second []
const label parcelsPerSecond_;
//- Flow rate profile relative to SOI [] //- Flow rate profile relative to SOI []
const autoPtr<DataEntry<scalar> > flowRateProfile_; const autoPtr<DataEntry<scalar> > flowRateProfile_;
@ -104,14 +101,17 @@ class ConeInjection
//- Parcel size distribution model model //- Parcel size distribution model model
const autoPtr<distributionModels::distributionModel> sizeDistribution_; const autoPtr<distributionModels::distributionModel> sizeDistribution_;
//- Number of parcels per injector already injected
mutable label nInjected_;
// Tangential vectors to the direction vector // Tangential vectors to the direction vector
//- First tangential vector //- First tangential vector
vector tanVec1_; vectorList tanVec1_;
//- Second tangential vector //- Second tangential vector
vector tanVec2_; vectorList tanVec2_;
protected: protected:

View File

@ -1,292 +0,0 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2008-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 <http://www.gnu.org/licenses/>.
\*---------------------------------------------------------------------------*/
#include "ConeInjectionMP.H"
#include "DataEntry.H"
#include "mathematicalConstants.H"
#include "unitConversion.H"
using namespace Foam::constant::mathematical;
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
template<class CloudType>
Foam::label Foam::ConeInjectionMP<CloudType>::parcelsToInject
(
const scalar time0,
const scalar time1
)
{
if ((time0 >= 0.0) && (time0 < duration_))
{
const scalar targetVolume = flowRateProfile_().integrate(0, time1);
const label targetParcels =
parcelsPerInjector_*targetVolume/this->volumeTotal_;
const label nToInject = targetParcels - nInjected_;
nInjected_ += nToInject;
return positions_.size()*nToInject;
}
else
{
return 0;
}
}
template<class CloudType>
Foam::scalar Foam::ConeInjectionMP<CloudType>::volumeToInject
(
const scalar time0,
const scalar time1
)
{
if ((time0 >= 0.0) && (time0 < duration_))
{
return flowRateProfile_().integrate(time0, time1);
}
else
{
return 0.0;
}
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
template<class CloudType>
Foam::ConeInjectionMP<CloudType>::ConeInjectionMP
(
const dictionary& dict,
CloudType& owner
)
:
InjectionModel<CloudType>(dict, owner, typeName),
positionsFile_(this->coeffDict().lookup("positionsFile")),
positions_
(
IOobject
(
positionsFile_,
owner.db().time().constant(),
owner.mesh(),
IOobject::MUST_READ,
IOobject::NO_WRITE
)
),
injectorCells_(positions_.size()),
injectorTetFaces_(positions_.size()),
injectorTetPts_(positions_.size()),
axesFile_(this->coeffDict().lookup("axesFile")),
axes_
(
IOobject
(
axesFile_,
owner.db().time().constant(),
owner.mesh(),
IOobject::MUST_READ,
IOobject::NO_WRITE
)
),
duration_(readScalar(this->coeffDict().lookup("duration"))),
parcelsPerInjector_
(
readScalar(this->coeffDict().lookup("parcelsPerInjector"))
),
flowRateProfile_
(
DataEntry<scalar>::New("flowRateProfile", this->coeffDict())
),
Umag_(DataEntry<scalar>::New("Umag", this->coeffDict())),
thetaInner_(DataEntry<scalar>::New("thetaInner", this->coeffDict())),
thetaOuter_(DataEntry<scalar>::New("thetaOuter", this->coeffDict())),
sizeDistribution_
(
distributionModels::distributionModel::New
(
this->coeffDict().subDict("sizeDistribution"), owner.rndGen()
)
),
nInjected_(this->parcelsAddedTotal()),
tanVec1_(positions_.size()),
tanVec2_(positions_.size())
{
// Normalise direction vector and determine direction vectors
// tangential to direction
forAll(axes_, i)
{
axes_[i] /= mag(axes_[i]);
vector tangent = vector::zero;
scalar magTangent = 0.0;
cachedRandom& rnd = this->owner().rndGen();
while (magTangent < SMALL)
{
vector v = rnd.sample01<vector>();
tangent = v - (v & axes_[i])*axes_[i];
magTangent = mag(tangent);
}
tanVec1_[i] = tangent/magTangent;
tanVec2_[i] = axes_[i]^tanVec1_[i];
}
// Set total volume to inject
this->volumeTotal_ = flowRateProfile_().integrate(0.0, duration_);
// Set/cache the injector cells
forAll(positions_, i)
{
this->findCellAtPosition
(
injectorCells_[i],
injectorTetFaces_[i],
injectorTetPts_[i],
positions_[i]
);
}
}
template<class CloudType>
Foam::ConeInjectionMP<CloudType>::ConeInjectionMP
(
const ConeInjectionMP<CloudType>& im
)
:
InjectionModel<CloudType>(im),
positionsFile_(im.positionsFile_),
positions_(im.positions_),
injectorCells_(im.injectorCells_),
injectorTetFaces_(im.injectorTetFaces_),
injectorTetPts_(im.injectorTetPts_),
axesFile_(im.axesFile_),
axes_(im.axes_),
duration_(im.duration_),
parcelsPerInjector_(im.parcelsPerInjector_),
flowRateProfile_(im.flowRateProfile_().clone().ptr()),
Umag_(im.Umag_().clone().ptr()),
thetaInner_(im.thetaInner_().clone().ptr()),
thetaOuter_(im.thetaOuter_().clone().ptr()),
sizeDistribution_(im.sizeDistribution_().clone().ptr()),
nInjected_(im.nInjected_),
tanVec1_(im.tanVec1_),
tanVec2_(im.tanVec2_)
{}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
template<class CloudType>
Foam::ConeInjectionMP<CloudType>::~ConeInjectionMP()
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
template<class CloudType>
Foam::scalar Foam::ConeInjectionMP<CloudType>::timeEnd() const
{
return this->SOI_ + duration_;
}
template<class CloudType>
void Foam::ConeInjectionMP<CloudType>::setPositionAndCell
(
const label parcelI,
const label,
const scalar,
vector& position,
label& cellOwner,
label& tetFaceI,
label& tetPtI
)
{
const label i = parcelI % positions_.size();
position = positions_[i];
cellOwner = injectorCells_[i];
tetFaceI = injectorTetFaces_[i];
tetPtI = injectorTetPts_[i];
}
template<class CloudType>
void Foam::ConeInjectionMP<CloudType>::setProperties
(
const label parcelI,
const label,
const scalar time,
typename CloudType::parcelType& parcel
)
{
cachedRandom& rnd = this->owner().rndGen();
// set particle velocity
const label i = parcelI%positions_.size();
scalar t = time - this->SOI_;
scalar ti = thetaInner_().value(t);
scalar to = thetaOuter_().value(t);
scalar coneAngle = degToRad(rnd.position<scalar>(ti, to));
scalar alpha = sin(coneAngle);
scalar dcorr = cos(coneAngle);
scalar beta = twoPi*rnd.sample01<scalar>();
vector normal = alpha*(tanVec1_[i]*cos(beta) + tanVec2_[i]*sin(beta));
vector dirVec = dcorr*axes_[i];
dirVec += normal;
dirVec /= mag(dirVec);
parcel.U() = Umag_().value(t)*dirVec;
// set particle diameter
parcel.d() = sizeDistribution_().sample();
}
template<class CloudType>
bool Foam::ConeInjectionMP<CloudType>::fullyDescribed() const
{
return false;
}
template<class CloudType>
bool Foam::ConeInjectionMP<CloudType>::validInjection(const label)
{
return true;
}
// ************************************************************************* //

View File

@ -1,218 +0,0 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2008-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 <http://www.gnu.org/licenses/>.
Class
Foam::ConeInjectionMP
Description
Cone injection multi-point
- User specifies
- time of start of injection
- injector positions
- directions (along injection axes)
- parcel flow rate
- parcel velocities
- inner and outer cone angles
- Parcel diameters obtained by distribution model model
SourceFiles
ConeInjectionMP.C
\*---------------------------------------------------------------------------*/
#ifndef ConeInjectionMP_H
#define ConeInjectionMP_H
#include "InjectionModel.H"
#include "distributionModel.H"
#include "vectorList.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// Forward declaration of classes
template<class Type>
class DataEntry;
/*---------------------------------------------------------------------------*\
Class ConeInjectionMP Declaration
\*---------------------------------------------------------------------------*/
template<class CloudType>
class ConeInjectionMP
:
public InjectionModel<CloudType>
{
// Private data
//- Name of file containing positions data
const word positionsFile_;
//- Field of injector positions
vectorIOField positions_;
//- List of cell labels corresponding to injector positions
labelList injectorCells_;
//- List of tetFace labels corresponding to injector positions
labelList injectorTetFaces_;
//- List of tetPt labels corresponding to injector positions
labelList injectorTetPts_;
//- Name of file containing axes data
const word axesFile_;
//- Field of injector positions
vectorIOField axes_;
//- Injection duration [s]
const scalar duration_;
//- Number of parcels to introduce per injector
const label parcelsPerInjector_;
//- Flow rate profile relative to SOI []
const autoPtr<DataEntry<scalar> > flowRateProfile_;
//- Parcel velocity magnitude relative to SOI [m/s]
const autoPtr<DataEntry<scalar> > Umag_;
//- Inner cone angle relative to SOI [deg]
const autoPtr<DataEntry<scalar> > thetaInner_;
//- Outer cone angle relative to SOI [deg]
const autoPtr<DataEntry<scalar> > thetaOuter_;
//- Parcel size distribution model model
const autoPtr<distributionModels::distributionModel> sizeDistribution_;
//- Number of parcels per injector already injected
mutable label nInjected_;
// Tangential vectors to the direction vector
//- First tangential vector
vectorList tanVec1_;
//- Second tangential vector
vectorList tanVec2_;
protected:
// Protected Member Functions
//- Number of parcels to introduce over the time step relative to SOI
virtual label parcelsToInject(const scalar time0, const scalar time1);
//- Volume of parcels to introduce over the time step relative to SOI
virtual scalar volumeToInject(const scalar time0, const scalar time1);
public:
//- Runtime type information
TypeName("ConeInjectionMP");
// Constructors
//- Construct from dictionary
ConeInjectionMP(const dictionary& dict, CloudType& owner);
//- Construct copy
ConeInjectionMP(const ConeInjectionMP<CloudType>& im);
//- Construct and return a clone
virtual autoPtr<InjectionModel<CloudType> > clone() const
{
return autoPtr<InjectionModel<CloudType> >
(
new ConeInjectionMP<CloudType>(*this)
);
}
//- Destructor
virtual ~ConeInjectionMP();
// Member Functions
//- Return the end-of-injection time
scalar timeEnd() const;
// Injection geometry
//- Set the injection position and owner cell, tetFace and tetPt
virtual void setPositionAndCell
(
const label parcelI,
const label nParcels,
const scalar time,
vector& position,
label& cellOwner,
label& tetFaceI,
label& tetPtI
);
//- Set the parcel properties
virtual void setProperties
(
const label parcelI,
const label nParcels,
const scalar time,
typename CloudType::parcelType& parcel
);
//- Flag to identify whether model fully describes the parcel
virtual bool fullyDescribed() const;
//- Return flag to identify whether or not injection of parcelI is
// permitted
virtual bool validInjection(const label parcelI);
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#ifdef NoRepository
# include "ConeInjectionMP.C"
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -1,21 +0,0 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 1.6 |
| \\ / A nd | Web: http://www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class vectorField;
location "constant";
object reactingCloud1Axes;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
(
(0 0 -1)
(0 0 -1)
)
// ************************************************************************* //

View File

@ -1,21 +0,0 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 1.6 |
| \\ / A nd | Web: http://www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class vectorField;
location "constant";
object reactingCloud1Positions;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
(
(0.3 0.35 1.45)
(0.6 0.35 1.45)
)
// ************************************************************************* //

View File

@ -120,8 +120,11 @@ subModels
{ {
SOI 0.000; SOI 0.000;
duration 20.000; duration 20.000;
positionsFile "reactingCloud1Positions"; positionAxis
axesFile "reactingCloud1Axes"; (
(0.3 0.35 1.45) (0 0 -1)
(0.6 0.35 1.45) (0 0 -1)
);
massTotal 10; massTotal 10;
parcelsPerInjector 20000; parcelsPerInjector 20000;
parcelsPerSecond 500; parcelsPerSecond 500;

View File

@ -1,21 +0,0 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class vectorField;
location "constant";
object reactingCloud1Axes;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
(
(0 0 -1)
(0 0 -1)
)
// ************************************************************************* //

View File

@ -1,21 +0,0 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class vectorField;
location "constant";
object reactingCloud1Positions;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
(
(0.3 0.35 1.45)
(0.6 0.35 1.45)
)
// ************************************************************************* //

View File

@ -120,8 +120,11 @@ subModels
{ {
SOI 0.000; SOI 0.000;
duration 20.000; duration 20.000;
positionsFile "reactingCloud1Positions"; positionAxis
axesFile "reactingCloud1Axes"; (
(0.3 0.35 1.45) (0 0 -1)
(0.6 0.35 1.45) (0 0 -1)
);
massTotal 10; massTotal 10;
parcelsPerInjector 20000; parcelsPerInjector 20000;
parcelsPerSecond 500; parcelsPerSecond 500;