mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: Consolidated ConeInjection and ConeInjectionMP into a single model
This commit is contained in:
@ -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, \
|
||||||
|
|||||||
@ -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, \
|
||||||
|
|||||||
@ -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, \
|
||||||
|
|||||||
@ -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,24 +130,28 @@ 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()
|
||||||
);
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -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);
|
||||||
|
|
||||||
|
|||||||
@ -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:
|
||||||
|
|||||||
@ -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;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -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
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -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)
|
|
||||||
)
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -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)
|
|
||||||
)
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -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;
|
||||||
|
|||||||
@ -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)
|
|
||||||
)
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -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)
|
|
||||||
)
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user