mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
Merge branch 'feature-lagrangian-additions' into 'develop'
Lagrangian modelling updates/new features See merge request Development/openfoam!521
This commit is contained in:
@ -31,6 +31,7 @@ License
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#include "FaceInteraction.H"
|
||||
#include "FacePostProcessing.H"
|
||||
#include "ParticleCollector.H"
|
||||
#include "ParticleErosion.H"
|
||||
@ -50,6 +51,7 @@ License
|
||||
\
|
||||
makeCloudFunctionObject(CloudType); \
|
||||
\
|
||||
makeCloudFunctionObjectType(FaceInteraction, CloudType); \
|
||||
makeCloudFunctionObjectType(FacePostProcessing, CloudType); \
|
||||
makeCloudFunctionObjectType(ParticleCollector, CloudType); \
|
||||
makeCloudFunctionObjectType(ParticleErosion, CloudType); \
|
||||
|
||||
@ -31,6 +31,7 @@ License
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#include "FaceInteraction.H"
|
||||
#include "FacePostProcessing.H"
|
||||
#include "ParticleCollector.H"
|
||||
#include "ParticleErosion.H"
|
||||
@ -53,6 +54,7 @@ License
|
||||
\
|
||||
makeCloudFunctionObject(CloudType); \
|
||||
\
|
||||
makeCloudFunctionObjectType(FaceInteraction, CloudType); \
|
||||
makeCloudFunctionObjectType(FacePostProcessing, CloudType); \
|
||||
makeCloudFunctionObjectType(ParticleCollector, CloudType); \
|
||||
makeCloudFunctionObjectType(ParticleErosion, CloudType); \
|
||||
|
||||
@ -30,6 +30,7 @@ License
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#include "FaceInteraction.H"
|
||||
#include "FacePostProcessing.H"
|
||||
#include "ParticleCollector.H"
|
||||
#include "ParticleErosion.H"
|
||||
@ -51,6 +52,7 @@ License
|
||||
\
|
||||
makeCloudFunctionObject(CloudType); \
|
||||
\
|
||||
makeCloudFunctionObjectType(FaceInteraction, CloudType); \
|
||||
makeCloudFunctionObjectType(FacePostProcessing, CloudType); \
|
||||
makeCloudFunctionObjectType(ParticleCollector, CloudType); \
|
||||
makeCloudFunctionObjectType(ParticleErosion, CloudType); \
|
||||
|
||||
@ -0,0 +1,329 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | www.openfoam.com
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
Copyright (C) 2021 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
|
||||
OpenFOAM is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "FaceInteraction.H"
|
||||
#include "faceZoneMesh.H"
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
template<class CloudType>
|
||||
const Foam::Enum<typename Foam::FaceInteraction<CloudType>::interactionType>
|
||||
Foam::FaceInteraction<CloudType>::interactionTypeNames_
|
||||
({
|
||||
{ interactionType::STICK, "stick" },
|
||||
{ interactionType::ESCAPE, "escape" },
|
||||
{ interactionType::REBOUND, "rebound" },
|
||||
});
|
||||
|
||||
|
||||
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
||||
|
||||
template<class CloudType>
|
||||
bool Foam::FaceInteraction<CloudType>::processParticle
|
||||
(
|
||||
const parcelType& p,
|
||||
const label localZonei
|
||||
)
|
||||
{
|
||||
if (!faceZoneBBs_[localZonei].contains(p.position()))
|
||||
{
|
||||
// Quick reject if the particle is not in the face zone bound box
|
||||
return false;
|
||||
}
|
||||
|
||||
if ((p.d() > dMax_) || (p.d() < dMin_))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
void Foam::FaceInteraction<CloudType>::write()
|
||||
{
|
||||
const fvMesh& mesh = this->owner().mesh();
|
||||
const faceZoneMesh& fzm = mesh.faceZones();
|
||||
|
||||
Info<< type() << " output:" << nl;
|
||||
|
||||
// Retrieve any stored data
|
||||
const label nZones = faceZoneIDs_.size();
|
||||
labelList npe0(nZones, Zero);
|
||||
labelList nps0(nZones, Zero);
|
||||
labelList npr0(nZones, Zero);
|
||||
|
||||
this->getModelProperty("nEscape", npe0);
|
||||
this->getModelProperty("nStick", nps0);
|
||||
this->getModelProperty("nRebound", npr0);
|
||||
|
||||
// Accumulate current data
|
||||
labelList npe(returnReduce(nEscapeParticles_, sumOp<labelList>()));
|
||||
labelList nps(returnReduce(nStickParticles_, sumOp<labelList>()));
|
||||
labelList npr(returnReduce(nReboundParticles_, sumOp<labelList>()));
|
||||
forAll(npe, i)
|
||||
{
|
||||
npe[i] = npe[i] + npe0[i];
|
||||
nps[i] = nps[i] + nps0[i];
|
||||
npr[i] = npr[i] + npr0[i];
|
||||
}
|
||||
|
||||
|
||||
// Write to log/file
|
||||
forAll(faceZoneIDs_, i)
|
||||
{
|
||||
const label zonei = faceZoneIDs_[i];
|
||||
Info<< " Zone : " << fzm[zonei].name() << nl
|
||||
<< " Escape : " << npe[i] << nl
|
||||
<< " Stick : " << nps[i] << nl
|
||||
<< " Rebound : " << npr[i] << nl;
|
||||
|
||||
if (this->writeToFile())
|
||||
{
|
||||
auto& os = filePtrs_[i];
|
||||
|
||||
writeCurrentTime(os);
|
||||
|
||||
// Note - writing as scalar for better formatting
|
||||
os << tab << scalar(npe[i])
|
||||
<< tab << scalar(nps[i])
|
||||
<< tab << scalar(npr[i])
|
||||
<< endl;
|
||||
}
|
||||
}
|
||||
Info<< endl;
|
||||
|
||||
// Set restart data
|
||||
this->setModelProperty("nEscape", npe);
|
||||
this->setModelProperty("nStick", nps);
|
||||
this->setModelProperty("nRebound", npr);
|
||||
|
||||
nEscapeParticles_ = Zero;
|
||||
nStickParticles_ = Zero;
|
||||
nReboundParticles_ = Zero;
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
template<class CloudType>
|
||||
Foam::FaceInteraction<CloudType>::FaceInteraction
|
||||
(
|
||||
const dictionary& dict,
|
||||
CloudType& owner,
|
||||
const word& modelName
|
||||
)
|
||||
:
|
||||
CloudFunctionObject<CloudType>(dict, owner, modelName, typeName),
|
||||
functionObjects::writeFile
|
||||
(
|
||||
owner,
|
||||
this->localPath(),
|
||||
typeName,
|
||||
this->coeffDict()
|
||||
),
|
||||
faceZoneIDs_(),
|
||||
faceZoneBBs_(),
|
||||
faceZoneInteraction_(),
|
||||
filePtrs_(),
|
||||
nEscapeParticles_(),
|
||||
nStickParticles_(),
|
||||
nReboundParticles_(),
|
||||
dMin_(this->coeffDict().getOrDefault("dMin", -GREAT)),
|
||||
dMax_(this->coeffDict().getOrDefault("dMax", GREAT))
|
||||
{
|
||||
const List<Tuple2<word, word>> nameAndInteraction
|
||||
(
|
||||
this->coeffDict().lookup("faceZones")
|
||||
);
|
||||
|
||||
filePtrs_.setSize(nameAndInteraction.size());
|
||||
|
||||
faceZoneBBs_.setSize(nameAndInteraction.size());
|
||||
faceZoneInteraction_.setSize(nameAndInteraction.size());
|
||||
|
||||
DynamicList<label> zoneIDs;
|
||||
const faceZoneMesh& fzm = owner.mesh().faceZones();
|
||||
const auto& faces = this->owner().mesh().faces();
|
||||
const auto& points = this->owner().mesh().points();
|
||||
|
||||
label nZone = 0;
|
||||
for (const auto& zoneInfo : nameAndInteraction)
|
||||
{
|
||||
const word& zoneName = zoneInfo.first();
|
||||
const label zonei = fzm.findZoneID(zoneName);
|
||||
|
||||
if (zonei != -1)
|
||||
{
|
||||
zoneIDs.append(zonei);
|
||||
const faceZone& fz = fzm[zonei];
|
||||
|
||||
const label nFaces = returnReduce(fz.size(), sumOp<label>());
|
||||
Info<< " " << zoneName << " faces: " << nFaces << nl;
|
||||
|
||||
// Cache the particle action for this faceZone
|
||||
faceZoneInteraction_[nZone] =
|
||||
interactionTypeNames_[zoneInfo.second()];
|
||||
|
||||
// Cache faceZone bound box
|
||||
auto& bb = faceZoneBBs_[nZone];
|
||||
for (const label facei : fz)
|
||||
{
|
||||
for (const label fpi : faces[facei])
|
||||
{
|
||||
bb.add(points[fpi]);
|
||||
}
|
||||
}
|
||||
reduce(bb.min(), minOp<point>());
|
||||
reduce(bb.max(), maxOp<point>());
|
||||
bb.inflate(0.05);
|
||||
|
||||
// Create output file for zone
|
||||
if (this->writeToFile())
|
||||
{
|
||||
filePtrs_.set
|
||||
(
|
||||
nZone,
|
||||
this->createFile(modelName + '_' + zoneName)
|
||||
);
|
||||
|
||||
writeHeaderValue(filePtrs_[nZone], "Source", type());
|
||||
writeHeaderValue(filePtrs_[nZone], "Face zone", zoneName);
|
||||
writeHeaderValue(filePtrs_[nZone], "Faces", nFaces);
|
||||
writeCommented(filePtrs_[nZone], "Time");
|
||||
writeTabbed(filePtrs_[nZone], "Escape");
|
||||
writeTabbed(filePtrs_[nZone], "Stick");
|
||||
writeTabbed(filePtrs_[nZone], "Rebound");
|
||||
filePtrs_[nZone] << nl;
|
||||
}
|
||||
++nZone;
|
||||
}
|
||||
else
|
||||
{
|
||||
WarningInFunction
|
||||
<< "Unable to find faceZone " << zoneName
|
||||
<< " - removing" << endl;
|
||||
}
|
||||
}
|
||||
faceZoneIDs_.transfer(zoneIDs);
|
||||
|
||||
filePtrs_.setSize(nZone);
|
||||
faceZoneBBs_.setSize(nZone);
|
||||
faceZoneInteraction_.setSize(nZone);
|
||||
nEscapeParticles_.setSize(nZone, Zero);
|
||||
nStickParticles_.setSize(nZone, Zero);
|
||||
nReboundParticles_.setSize(nZone, Zero);
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
Foam::FaceInteraction<CloudType>::FaceInteraction
|
||||
(
|
||||
const FaceInteraction<CloudType>& pfi
|
||||
)
|
||||
:
|
||||
CloudFunctionObject<CloudType>(pfi),
|
||||
functionObjects::writeFile(pfi),
|
||||
faceZoneIDs_(pfi.faceZoneIDs_),
|
||||
faceZoneBBs_(pfi.faceZoneBBs_),
|
||||
filePtrs_(),
|
||||
nEscapeParticles_(pfi.nEscapeParticles_),
|
||||
nStickParticles_(pfi.nStickParticles_),
|
||||
nReboundParticles_(pfi.nReboundParticles_),
|
||||
dMin_(pfi.dMin_),
|
||||
dMax_(pfi.dMax_)
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
template<class CloudType>
|
||||
void Foam::FaceInteraction<CloudType>::postFace
|
||||
(
|
||||
const parcelType& p,
|
||||
bool& keepParticle
|
||||
)
|
||||
{
|
||||
const auto& fzm = this->owner().mesh().faceZones();
|
||||
|
||||
forAll(faceZoneIDs_, i)
|
||||
{
|
||||
if (!processParticle(p, i))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
const label zonei = faceZoneIDs_[i];
|
||||
|
||||
const label localFacei = fzm[zonei].find(p.face());
|
||||
|
||||
if (localFacei != -1)
|
||||
{
|
||||
const label facei = fzm[zonei][localFacei];
|
||||
|
||||
switch (faceZoneInteraction_[i])
|
||||
{
|
||||
case interactionType::ESCAPE:
|
||||
{
|
||||
keepParticle = false;
|
||||
++nEscapeParticles_[i];
|
||||
break;
|
||||
}
|
||||
case interactionType::STICK:
|
||||
{
|
||||
auto& pRef = const_cast<parcelType&>(p);
|
||||
pRef.active(false);
|
||||
pRef.U() = Zero;
|
||||
++nStickParticles_[i];
|
||||
break;
|
||||
}
|
||||
case interactionType::REBOUND:
|
||||
{
|
||||
const face& f = this->owner().mesh().faces()[facei];
|
||||
const auto n = f.unitNormal(this->owner().mesh().points());
|
||||
|
||||
auto& pRef = const_cast<parcelType&>(p);
|
||||
pRef.U() -= 2*n*(pRef.U() & n);
|
||||
++nReboundParticles_[i];
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
FatalErrorInFunction
|
||||
<< "Unhandled enumeration "
|
||||
<< interactionTypeNames_[faceZoneInteraction_[i]]
|
||||
<< abort(FatalError);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -0,0 +1,203 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | www.openfoam.com
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
Copyright (C) 2021 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
|
||||
OpenFOAM is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Class
|
||||
Foam::FaceInteraction
|
||||
|
||||
Group
|
||||
grpLagrangianIntermediateFunctionObjects
|
||||
|
||||
Description
|
||||
Face zone-based particle interactions.
|
||||
|
||||
\verbatim
|
||||
faceInteraction1
|
||||
{
|
||||
type faceInteraction;
|
||||
|
||||
// List of (faceZone interactionType)
|
||||
faceZones
|
||||
(
|
||||
(faceZone1 stick)
|
||||
(faceZone2 escape)
|
||||
(faceZone3 rebound)
|
||||
);
|
||||
|
||||
// Optional limiting to diameter range
|
||||
dMin 0;
|
||||
dMax 1;
|
||||
|
||||
writeToFile yes; // default = yes
|
||||
}
|
||||
\endverbatim
|
||||
|
||||
File written per faceZone as:
|
||||
|
||||
postProcessing/lagrangian/cloudName/modelName/time/modelName_faceZone.dat
|
||||
|
||||
SourceFiles
|
||||
FaceInteraction.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef FaceInteraction_H
|
||||
#define FaceInteraction_H
|
||||
|
||||
#include "CloudFunctionObject.H"
|
||||
#include "Enum.H"
|
||||
#include "boundBox.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class FaceInteraction Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
template<class CloudType>
|
||||
class FaceInteraction
|
||||
:
|
||||
public CloudFunctionObject<CloudType>,
|
||||
public functionObjects::writeFile
|
||||
{
|
||||
public:
|
||||
|
||||
// Public Data Types
|
||||
|
||||
//- Convenience typedef for parcel type
|
||||
typedef typename CloudType::parcelType parcelType;
|
||||
|
||||
//- Enumeration defining the interaction types
|
||||
enum class interactionType
|
||||
{
|
||||
ESCAPE, //!< particles escape/are removed
|
||||
STICK, //!< particles stick to the faceZone faces
|
||||
REBOUND //!< particles rebound from the faceZone faces
|
||||
};
|
||||
|
||||
//- Names for the interaction types
|
||||
static const Enum<interactionType> interactionTypeNames_;
|
||||
|
||||
|
||||
private:
|
||||
|
||||
// Private Data
|
||||
|
||||
//- Face zone IDs
|
||||
labelList faceZoneIDs_;
|
||||
|
||||
//- Face zone bounding boxes
|
||||
List<boundBox> faceZoneBBs_;
|
||||
|
||||
//- Face zone particle interaction type
|
||||
List<interactionType> faceZoneInteraction_;
|
||||
|
||||
//- File per zone
|
||||
PtrList<OFstream> filePtrs_;
|
||||
|
||||
//- Number of escape particles per zone
|
||||
labelList nEscapeParticles_;
|
||||
|
||||
//- Number of stick particles per zone
|
||||
labelList nStickParticles_;
|
||||
|
||||
//- Number of rebound particles per zone
|
||||
labelList nReboundParticles_;
|
||||
|
||||
//- Minimum diameter threshold
|
||||
scalar dMin_;
|
||||
|
||||
//- Maximum diameter threshold
|
||||
scalar dMax_;
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
// Protected Member Functions
|
||||
|
||||
//- Return true if this particle will be assessed
|
||||
bool processParticle(const parcelType& p, const label localZonei);
|
||||
|
||||
//- Write post-processing info
|
||||
void write();
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("faceInteraction");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from dictionary
|
||||
FaceInteraction
|
||||
(
|
||||
const dictionary& dict,
|
||||
CloudType& owner,
|
||||
const word& modelName
|
||||
);
|
||||
|
||||
//- Construct copy
|
||||
FaceInteraction(const FaceInteraction<CloudType>& ppm);
|
||||
|
||||
//- Construct and return a clone
|
||||
virtual autoPtr<CloudFunctionObject<CloudType>> clone() const
|
||||
{
|
||||
return autoPtr<CloudFunctionObject<CloudType>>
|
||||
(
|
||||
new FaceInteraction<CloudType>(*this)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~FaceInteraction() = default;
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Post-face hook
|
||||
virtual void postFace(const parcelType& p, bool& keepParticle);
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#ifdef NoRepository
|
||||
#include "FaceInteraction.C"
|
||||
#endif
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -43,7 +43,6 @@ Foam::ConeNozzleInjection<CloudType>::injectionMethodNames
|
||||
({
|
||||
{ injectionMethod::imPoint, "point" },
|
||||
{ injectionMethod::imDisc, "disc" },
|
||||
{ injectionMethod::imMovingPoint, "movingPoint" },
|
||||
});
|
||||
|
||||
template<class CloudType>
|
||||
@ -62,37 +61,52 @@ Foam::ConeNozzleInjection<CloudType>::flowTypeNames
|
||||
// * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
template<class CloudType>
|
||||
void Foam::ConeNozzleInjection<CloudType>::setInjectionMethod()
|
||||
{
|
||||
switch (injectionMethod_)
|
||||
{
|
||||
case injectionMethod::imPoint:
|
||||
case injectionMethod::imDisc:
|
||||
{
|
||||
this->coeffDict().readEntry("position", position_);
|
||||
break;
|
||||
}
|
||||
case injectionMethod::imMovingPoint:
|
||||
void Foam::ConeNozzleInjection<CloudType>::setInjectionGeometry()
|
||||
{
|
||||
const auto& mesh = this->owner().mesh();
|
||||
|
||||
// Position
|
||||
positionVsTime_.reset
|
||||
(
|
||||
Function1<vector>::New
|
||||
(
|
||||
"position",
|
||||
this->coeffDict(),
|
||||
&this->owner().mesh()
|
||||
)
|
||||
Function1<vector>::New("position", this->coeffDict(), &mesh)
|
||||
);
|
||||
|
||||
positionVsTime_->userTimeToTime(this->owner().time());
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
||||
if (positionVsTime_->constant())
|
||||
{
|
||||
FatalErrorInFunction
|
||||
<< "Unhandled injection method "
|
||||
<< injectionMethodNames[injectionMethod_]
|
||||
<< exit(FatalError);
|
||||
position_ = positionVsTime_->value(0);
|
||||
}
|
||||
|
||||
// Direction
|
||||
directionVsTime_.reset
|
||||
(
|
||||
Function1<vector>::New("direction", this->coeffDict(), &mesh)
|
||||
);
|
||||
|
||||
directionVsTime_->userTimeToTime(this->owner().time());
|
||||
|
||||
if (directionVsTime_->constant())
|
||||
{
|
||||
direction_ = directionVsTime_->value(0);
|
||||
direction_.normalise();
|
||||
|
||||
Random& rndGen = this->owner().rndGen();
|
||||
|
||||
// Determine direction vectors tangential to direction
|
||||
vector tangent = Zero;
|
||||
scalar magTangent = 0.0;
|
||||
|
||||
while(magTangent < SMALL)
|
||||
{
|
||||
vector v = rndGen.globalSample01<vector>();
|
||||
|
||||
tangent = v - (v & direction_)*direction_;
|
||||
magTangent = mag(tangent);
|
||||
}
|
||||
|
||||
tanVec1_ = tangent/magTangent;
|
||||
tanVec2_ = direction_^tanVec1_;
|
||||
}
|
||||
}
|
||||
|
||||
@ -170,7 +184,8 @@ Foam::ConeNozzleInjection<CloudType>::ConeNozzleInjection
|
||||
injectorCell_(-1),
|
||||
tetFacei_(-1),
|
||||
tetPti_(-1),
|
||||
direction_(this->coeffDict().lookup("direction")),
|
||||
directionVsTime_(nullptr),
|
||||
direction_(Zero),
|
||||
parcelsPerSecond_(this->coeffDict().getScalar("parcelsPerSecond")),
|
||||
flowRateProfile_
|
||||
(
|
||||
@ -231,29 +246,10 @@ Foam::ConeNozzleInjection<CloudType>::ConeNozzleInjection
|
||||
thetaInner_->userTimeToTime(time);
|
||||
thetaOuter_->userTimeToTime(time);
|
||||
|
||||
setInjectionMethod();
|
||||
setInjectionGeometry();
|
||||
|
||||
setFlowType();
|
||||
|
||||
Random& rndGen = this->owner().rndGen();
|
||||
|
||||
// Normalise direction vector
|
||||
direction_.normalise();
|
||||
|
||||
// Determine direction vectors tangential to direction
|
||||
vector tangent = Zero;
|
||||
scalar magTangent = 0.0;
|
||||
|
||||
while(magTangent < SMALL)
|
||||
{
|
||||
vector v = rndGen.globalSample01<vector>();
|
||||
|
||||
tangent = v - (v & direction_)*direction_;
|
||||
magTangent = mag(tangent);
|
||||
}
|
||||
|
||||
tanVec1_ = tangent/magTangent;
|
||||
tanVec2_ = direction_^tanVec1_;
|
||||
|
||||
// Set total volume to inject
|
||||
this->volumeTotal_ = flowRateProfile_->integrate(0.0, duration_);
|
||||
@ -279,6 +275,7 @@ Foam::ConeNozzleInjection<CloudType>::ConeNozzleInjection
|
||||
injectorCell_(im.injectorCell_),
|
||||
tetFacei_(im.tetFacei_),
|
||||
tetPti_(im.tetPti_),
|
||||
directionVsTime_(im.directionVsTime_.clone()),
|
||||
direction_(im.direction_),
|
||||
parcelsPerSecond_(im.parcelsPerSecond_),
|
||||
flowRateProfile_(im.flowRateProfile_.clone()),
|
||||
@ -294,24 +291,16 @@ Foam::ConeNozzleInjection<CloudType>::ConeNozzleInjection
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
||||
template<class CloudType>
|
||||
Foam::ConeNozzleInjection<CloudType>::~ConeNozzleInjection()
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
template<class CloudType>
|
||||
void Foam::ConeNozzleInjection<CloudType>::updateMesh()
|
||||
{
|
||||
// Set/cache the injector cell info for static methods
|
||||
if (positionVsTime_->constant())
|
||||
{
|
||||
position_ = positionVsTime_->value(0);
|
||||
|
||||
switch (injectionMethod_)
|
||||
{
|
||||
case injectionMethod::imPoint:
|
||||
{
|
||||
this->findCellAtPosition
|
||||
(
|
||||
injectorCell_,
|
||||
@ -319,12 +308,6 @@ void Foam::ConeNozzleInjection<CloudType>::updateMesh()
|
||||
tetPti_,
|
||||
position_
|
||||
);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
// Do nothing for the other methods
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -381,6 +364,28 @@ void Foam::ConeNozzleInjection<CloudType>::setPositionAndCell
|
||||
)
|
||||
{
|
||||
Random& rndGen = this->owner().rndGen();
|
||||
const scalar t = time - this->SOI_;
|
||||
|
||||
if (!directionVsTime_->constant())
|
||||
{
|
||||
direction_ = directionVsTime_->value(t);
|
||||
direction_.normalise();
|
||||
|
||||
// Determine direction vectors tangential to direction
|
||||
vector tangent = Zero;
|
||||
scalar magTangent = 0.0;
|
||||
|
||||
while(magTangent < SMALL)
|
||||
{
|
||||
vector v = rndGen.globalSample01<vector>();
|
||||
|
||||
tangent = v - (v & direction_)*direction_;
|
||||
magTangent = mag(tangent);
|
||||
}
|
||||
|
||||
tanVec1_ = tangent/magTangent;
|
||||
tanVec2_ = direction_^tanVec1_;
|
||||
}
|
||||
|
||||
scalar beta = mathematical::twoPi*rndGen.globalSample01<scalar>();
|
||||
normal_ = tanVec1_*cos(beta) + tanVec2_*sin(beta);
|
||||
@ -388,17 +393,17 @@ void Foam::ConeNozzleInjection<CloudType>::setPositionAndCell
|
||||
switch (injectionMethod_)
|
||||
{
|
||||
case injectionMethod::imPoint:
|
||||
{
|
||||
if (positionVsTime_->constant())
|
||||
{
|
||||
position = position_;
|
||||
cellOwner = injectorCell_;
|
||||
tetFacei = tetFacei_;
|
||||
tetPti = tetPti_;
|
||||
|
||||
break;
|
||||
}
|
||||
case injectionMethod::imMovingPoint:
|
||||
else
|
||||
{
|
||||
position = positionVsTime_->value(time - this->SOI_);
|
||||
position = positionVsTime_->value(t);
|
||||
|
||||
this->findCellAtPosition
|
||||
(
|
||||
@ -407,7 +412,7 @@ void Foam::ConeNozzleInjection<CloudType>::setPositionAndCell
|
||||
tetPti,
|
||||
position
|
||||
);
|
||||
|
||||
}
|
||||
break;
|
||||
}
|
||||
case injectionMethod::imDisc:
|
||||
@ -416,7 +421,7 @@ void Foam::ConeNozzleInjection<CloudType>::setPositionAndCell
|
||||
scalar dr = outerDiameter_ - innerDiameter_;
|
||||
scalar r = 0.5*(innerDiameter_ + frac*dr);
|
||||
|
||||
position = position_ + r*normal_;
|
||||
position = positionVsTime_->value(t) + r*normal_;
|
||||
|
||||
this->findCellAtPosition
|
||||
(
|
||||
|
||||
@ -97,8 +97,7 @@ public:
|
||||
enum class injectionMethod
|
||||
{
|
||||
imPoint,
|
||||
imDisc,
|
||||
imMovingPoint
|
||||
imDisc
|
||||
};
|
||||
|
||||
static const Enum<injectionMethod> injectionMethodNames;
|
||||
@ -136,19 +135,22 @@ private:
|
||||
//- Position relative to SOI []
|
||||
autoPtr<Function1<vector>> positionVsTime_;
|
||||
|
||||
//- Injector position [m]
|
||||
//- Static injector - position [m]
|
||||
vector position_;
|
||||
|
||||
//- Cell containing injector position []
|
||||
//- Static injector - cell containing injector position []
|
||||
label injectorCell_;
|
||||
|
||||
//- Index of tet face for injector cell
|
||||
//- Static injector - index of tet face for injector cell
|
||||
label tetFacei_;
|
||||
|
||||
//- Index of tet point for injector cell
|
||||
//- Static injector - index of tet point for injector cell
|
||||
label tetPti_;
|
||||
|
||||
//- Injector direction []
|
||||
autoPtr<Function1<vector>> directionVsTime_;
|
||||
|
||||
//- Cached direction vector
|
||||
vector direction_;
|
||||
|
||||
//- Number of parcels to introduce per second []
|
||||
@ -193,8 +195,8 @@ private:
|
||||
|
||||
// Private Member Functions
|
||||
|
||||
//- Set the injection type
|
||||
void setInjectionMethod();
|
||||
//- Set the injection position and direction
|
||||
void setInjectionGeometry();
|
||||
|
||||
//- Set the injection flow type
|
||||
void setFlowType();
|
||||
@ -230,7 +232,7 @@ public:
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~ConeNozzleInjection();
|
||||
virtual ~ConeNozzleInjection() = default;
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
@ -29,6 +29,17 @@ License
|
||||
#include "PatchInjection.H"
|
||||
#include "distributionModel.H"
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
template<class CloudType>
|
||||
const Foam::Enum<typename Foam::PatchInjection<CloudType>::velocityType>
|
||||
Foam::PatchInjection<CloudType>::velocityTypeNames_
|
||||
({
|
||||
{ vtFixedValue, "fixedValue" },
|
||||
{ vtPatchValue, "patchValue" },
|
||||
{ vtZeroGradient, "zeroGradient" },
|
||||
});
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
template<class CloudType>
|
||||
@ -46,7 +57,21 @@ Foam::PatchInjection<CloudType>::PatchInjection
|
||||
(
|
||||
this->coeffDict().getScalar("parcelsPerSecond")
|
||||
),
|
||||
U0_(this->coeffDict().lookup("U0")),
|
||||
velocityType_
|
||||
(
|
||||
velocityTypeNames_.getOrDefault
|
||||
(
|
||||
"velocityType",
|
||||
this->coeffDict(),
|
||||
vtFixedValue
|
||||
)
|
||||
),
|
||||
U0_
|
||||
(
|
||||
velocityType_ == vtFixedValue
|
||||
? this->coeffDict().template get<vector>("U0")
|
||||
: Zero
|
||||
),
|
||||
flowRateProfile_
|
||||
(
|
||||
Function1<scalar>::New
|
||||
@ -63,7 +88,9 @@ Foam::PatchInjection<CloudType>::PatchInjection
|
||||
this->coeffDict().subDict("sizeDistribution"),
|
||||
owner.rndGen()
|
||||
)
|
||||
)
|
||||
),
|
||||
currentParceli_(-1),
|
||||
currentFacei_(-1)
|
||||
{
|
||||
// Convert from user time to reduce the number of time conversion calls
|
||||
const Time& time = owner.db().time();
|
||||
@ -87,16 +114,12 @@ Foam::PatchInjection<CloudType>::PatchInjection
|
||||
patchInjectionBase(im),
|
||||
duration_(im.duration_),
|
||||
parcelsPerSecond_(im.parcelsPerSecond_),
|
||||
velocityType_(im.velocityType_),
|
||||
U0_(im.U0_),
|
||||
flowRateProfile_(im.flowRateProfile_.clone()),
|
||||
sizeDistribution_(im.sizeDistribution_.clone())
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
||||
template<class CloudType>
|
||||
Foam::PatchInjection<CloudType>::~PatchInjection()
|
||||
sizeDistribution_(im.sizeDistribution_.clone()),
|
||||
currentParceli_(im.currentParceli_),
|
||||
currentFacei_(im.currentFacei_)
|
||||
{}
|
||||
|
||||
|
||||
@ -167,16 +190,18 @@ Foam::scalar Foam::PatchInjection<CloudType>::volumeToInject
|
||||
template<class CloudType>
|
||||
void Foam::PatchInjection<CloudType>::setPositionAndCell
|
||||
(
|
||||
const label,
|
||||
const label,
|
||||
const scalar,
|
||||
const label parcelI,
|
||||
const label nParcels,
|
||||
const scalar time,
|
||||
vector& position,
|
||||
label& cellOwner,
|
||||
label& tetFacei,
|
||||
label& tetPti
|
||||
)
|
||||
{
|
||||
patchInjectionBase::setPositionAndCell
|
||||
currentParceli_ = parcelI;
|
||||
|
||||
currentFacei_ = patchInjectionBase::setPositionAndCell
|
||||
(
|
||||
this->owner().mesh(),
|
||||
this->owner().rndGen(),
|
||||
@ -191,16 +216,74 @@ void Foam::PatchInjection<CloudType>::setPositionAndCell
|
||||
template<class CloudType>
|
||||
void Foam::PatchInjection<CloudType>::setProperties
|
||||
(
|
||||
const label,
|
||||
const label,
|
||||
const scalar,
|
||||
const label parcelI,
|
||||
const label nParcels,
|
||||
const scalar time,
|
||||
typename CloudType::parcelType& parcel
|
||||
)
|
||||
{
|
||||
// set particle velocity
|
||||
// Set particle velocity
|
||||
switch (velocityType_)
|
||||
{
|
||||
case vtFixedValue:
|
||||
{
|
||||
parcel.U() = U0_;
|
||||
break;
|
||||
}
|
||||
case vtPatchValue:
|
||||
{
|
||||
if (parcelI != currentParceli_)
|
||||
{
|
||||
WarningInFunction
|
||||
<< "Synchronisation problem: "
|
||||
<< "attempting to set injected parcel " << parcelI
|
||||
<< " properties using cached parcel " << currentParceli_
|
||||
<< " properties" << endl;
|
||||
}
|
||||
|
||||
// set particle diameter
|
||||
const label patchFacei = currentFacei_;
|
||||
|
||||
if (patchFacei < 0)
|
||||
{
|
||||
FatalErrorInFunction
|
||||
<< "Unable to set parcel velocity using patch value "
|
||||
<< "due to missing face index: patchFacei=" << patchFacei
|
||||
<< abort(FatalError);
|
||||
}
|
||||
|
||||
const volVectorField& U = this->owner().U();
|
||||
const label patchi = this->patchId_;
|
||||
parcel.U() = U.boundaryField()[patchi][patchFacei];
|
||||
break;
|
||||
}
|
||||
case vtZeroGradient:
|
||||
{
|
||||
const label celli = parcel.cell();
|
||||
|
||||
if (celli < 0)
|
||||
{
|
||||
FatalErrorInFunction
|
||||
<< "Unable to set parcel velocity using zeroGradient "
|
||||
<< "due to missing cell index"
|
||||
<< abort(FatalError);
|
||||
}
|
||||
|
||||
const volVectorField& U = this->owner().U();
|
||||
parcel.U() = U[celli];
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
FatalErrorInFunction
|
||||
<< "Unhandled velocityType "
|
||||
<< velocityTypeNames_[velocityType_]
|
||||
<< ". Available options are:"
|
||||
<< velocityTypeNames_.sortedToc()
|
||||
<< abort(FatalError);
|
||||
}
|
||||
}
|
||||
|
||||
// Set particle diameter
|
||||
parcel.d() = sizeDistribution_->sample();
|
||||
}
|
||||
|
||||
|
||||
@ -72,6 +72,24 @@ class PatchInjection
|
||||
public InjectionModel<CloudType>,
|
||||
public patchInjectionBase
|
||||
{
|
||||
public:
|
||||
|
||||
// Public Data Types
|
||||
|
||||
//- Velocity type enumeration
|
||||
enum velocityType
|
||||
{
|
||||
vtFixedValue, //!< User supplied fixed value
|
||||
vtPatchValue, //!< Patch face values
|
||||
vtZeroGradient //!< Patch internal cell values
|
||||
};
|
||||
|
||||
//- Velocity type names
|
||||
static const Enum<velocityType> velocityTypeNames_;
|
||||
|
||||
|
||||
private:
|
||||
|
||||
// Private data
|
||||
|
||||
//- Injection duration [s]
|
||||
@ -80,7 +98,11 @@ class PatchInjection
|
||||
//- Number of parcels to introduce per second []
|
||||
const label parcelsPerSecond_;
|
||||
|
||||
//- Velocity type
|
||||
const velocityType velocityType_;
|
||||
|
||||
//- Initial parcel velocity [m/s]
|
||||
// Note: Only used for vtFixedValue
|
||||
const vector U0_;
|
||||
|
||||
//- Flow rate profile relative to SOI []
|
||||
@ -89,6 +111,12 @@ class PatchInjection
|
||||
//- Parcel size distribution model
|
||||
const autoPtr<distributionModel> sizeDistribution_;
|
||||
|
||||
//- Current parcel being processed
|
||||
label currentParceli_;
|
||||
|
||||
//- Current face being processed
|
||||
label currentFacei_;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
@ -120,7 +148,7 @@ public:
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~PatchInjection();
|
||||
virtual ~PatchInjection() = default;
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
@ -144,7 +144,7 @@ void Foam::patchInjectionBase::updateMesh(const polyMesh& mesh)
|
||||
}
|
||||
|
||||
|
||||
void Foam::patchInjectionBase::setPositionAndCell
|
||||
Foam::label Foam::patchInjectionBase::setPositionAndCell
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
const scalar fraction01,
|
||||
@ -155,6 +155,8 @@ void Foam::patchInjectionBase::setPositionAndCell
|
||||
label& tetPti
|
||||
)
|
||||
{
|
||||
label facei = -1;
|
||||
|
||||
if (cellOwners_.size() > 0)
|
||||
{
|
||||
// Determine which processor to inject from
|
||||
@ -177,7 +179,7 @@ void Foam::patchInjectionBase::setPositionAndCell
|
||||
}
|
||||
|
||||
// Set cellOwner
|
||||
label facei = triToFace_[trii];
|
||||
facei = triToFace_[trii];
|
||||
cellOwner = cellOwners_[facei];
|
||||
|
||||
// Find random point in triangle
|
||||
@ -261,10 +263,12 @@ void Foam::patchInjectionBase::setPositionAndCell
|
||||
// Dummy position
|
||||
position = pTraits<vector>::max;
|
||||
}
|
||||
|
||||
return facei;
|
||||
}
|
||||
|
||||
|
||||
void Foam::patchInjectionBase::setPositionAndCell
|
||||
Foam::label Foam::patchInjectionBase::setPositionAndCell
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
Random& rnd,
|
||||
@ -276,7 +280,7 @@ void Foam::patchInjectionBase::setPositionAndCell
|
||||
{
|
||||
scalar fraction01 = rnd.globalSample01<scalar>();
|
||||
|
||||
setPositionAndCell
|
||||
return setPositionAndCell
|
||||
(
|
||||
mesh,
|
||||
fraction01,
|
||||
|
||||
@ -118,7 +118,8 @@ public:
|
||||
|
||||
//- Set the injection position and owner cell, tetFace and tetPt
|
||||
// Supply the fraction used to determine the location on the patch
|
||||
void setPositionAndCell
|
||||
// Returns the seed patch face index
|
||||
label setPositionAndCell
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
const scalar fraction01,
|
||||
@ -130,7 +131,8 @@ public:
|
||||
);
|
||||
|
||||
//- Set the injection position and owner cell, tetFace and tetPt
|
||||
virtual void setPositionAndCell
|
||||
// Returns the seed patch face index
|
||||
virtual label setPositionAndCell
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
Random& rnd,
|
||||
|
||||
56
tutorials/lagrangian/kinematicParcelFoam/spinningDisk/0/U
Normal file
56
tutorials/lagrangian/kinematicParcelFoam/spinningDisk/0/U
Normal file
@ -0,0 +1,56 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class volVectorField;
|
||||
object U;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
dimensions [0 1 -1 0 0 0 0];
|
||||
|
||||
internalField uniform (0.1 0 0);
|
||||
|
||||
boundaryField
|
||||
{
|
||||
inlet
|
||||
{
|
||||
type fixedValue;
|
||||
value $internalField;
|
||||
}
|
||||
|
||||
outlet
|
||||
{
|
||||
type inletOutlet;
|
||||
inletValue uniform (0 0 0);
|
||||
value uniform (0 0 0);
|
||||
}
|
||||
|
||||
cylinder
|
||||
{
|
||||
type rotatingWallVelocity;
|
||||
origin (0 0 0);
|
||||
axis (0 0 1);
|
||||
omega 1;
|
||||
}
|
||||
|
||||
walls
|
||||
{
|
||||
type noSlip;
|
||||
}
|
||||
|
||||
frontAndBack
|
||||
{
|
||||
type empty;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
46
tutorials/lagrangian/kinematicParcelFoam/spinningDisk/0/p
Normal file
46
tutorials/lagrangian/kinematicParcelFoam/spinningDisk/0/p
Normal file
@ -0,0 +1,46 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class volScalarField;
|
||||
object p;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
dimensions [0 2 -2 0 0 0 0];
|
||||
|
||||
internalField uniform 0;
|
||||
|
||||
boundaryField
|
||||
{
|
||||
inlet
|
||||
{
|
||||
type zeroGradient;
|
||||
}
|
||||
|
||||
outlet
|
||||
{
|
||||
type fixedValue;
|
||||
value uniform 0;
|
||||
}
|
||||
|
||||
"(walls|cylinder)"
|
||||
{
|
||||
type zeroGradient;
|
||||
}
|
||||
|
||||
frontAndBack
|
||||
{
|
||||
type empty;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,21 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class uniformDimensionedVectorField;
|
||||
object g;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
dimensions [0 1 -2 0 0 0 0];
|
||||
value (0 0 -9.8);
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,108 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v1912 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class dictionary;
|
||||
object kinematicCloudProperties;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
solution
|
||||
{
|
||||
active true;
|
||||
coupled yes;
|
||||
transient yes;
|
||||
cellValueSourceCorrection no;
|
||||
maxCo 0.3;
|
||||
|
||||
sourceTerms
|
||||
{
|
||||
schemes
|
||||
{
|
||||
U semiImplicit 1;
|
||||
}
|
||||
}
|
||||
|
||||
interpolationSchemes
|
||||
{
|
||||
rho cell;
|
||||
U cellPoint;
|
||||
muc cell;
|
||||
p cell;
|
||||
}
|
||||
|
||||
integrationSchemes
|
||||
{
|
||||
U Euler;
|
||||
}
|
||||
}
|
||||
|
||||
constantProperties
|
||||
{
|
||||
rho0 1000;
|
||||
}
|
||||
|
||||
subModels
|
||||
{
|
||||
particleForces
|
||||
{
|
||||
sphereDrag;
|
||||
gravity;
|
||||
}
|
||||
|
||||
injectionModels
|
||||
{
|
||||
model1
|
||||
{
|
||||
type patchInjection;
|
||||
massTotal 1;
|
||||
SOI 0;
|
||||
parcelBasisType mass;
|
||||
patch cylinder;
|
||||
duration 10;
|
||||
parcelsPerSecond 100;
|
||||
velocityType patchValue;
|
||||
//velocityType zeroGradient;
|
||||
//U0 (-10 0 0);
|
||||
flowRateProfile constant 1;
|
||||
sizeDistribution
|
||||
{
|
||||
type normal;
|
||||
normalDistribution
|
||||
{
|
||||
expectation 1e-3;
|
||||
variance 1e-4;
|
||||
minValue 1e-5;
|
||||
maxValue 2e-3;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dispersionModel none;
|
||||
|
||||
patchInteractionModel standardWallInteraction;
|
||||
|
||||
stochasticCollisionModel none;
|
||||
|
||||
surfaceFilmModel none;
|
||||
|
||||
standardWallInteractionCoeffs
|
||||
{
|
||||
type rebound;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
cloudFunctions
|
||||
{}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,24 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class dictionary;
|
||||
object transportProperties;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
transportModel Newtonian;
|
||||
|
||||
nu 1e-05;
|
||||
|
||||
rhoInf 1.2;
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,20 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class dictionary;
|
||||
object turbulenceProperties;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
simulationType laminar;
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,114 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class dictionary;
|
||||
object blockMeshDict;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
scale 1;
|
||||
|
||||
r 1;
|
||||
a #eval{1./sqrt(2)*$r};
|
||||
b #eval{3*$r};
|
||||
|
||||
n 16;
|
||||
|
||||
vertices
|
||||
(
|
||||
(-$b -$b 0) // 0
|
||||
( $b -$b 0) // 1
|
||||
(-$a -$a 0) // 2
|
||||
( $a -$a 0) // 3
|
||||
(-$a $a 0) // 4
|
||||
( $a $a 0) // 5
|
||||
(-$b $b 0) // 6
|
||||
( $b $b 0) // 7
|
||||
|
||||
(-$b -$b 1) // 8
|
||||
( $b -$b 1) // 9
|
||||
(-$a -$a 1) // 10
|
||||
( $a -$a 1) // 11
|
||||
(-$a $a 1) // 12
|
||||
( $a $a 1) // 13
|
||||
(-$b $b 1) // 14
|
||||
( $b $b 1) // 15
|
||||
);
|
||||
|
||||
blocks
|
||||
(
|
||||
hex (0 1 3 2 8 9 11 10) ($n $n 1) simpleGrading (1 1 1)
|
||||
hex (1 7 5 3 9 15 13 11) ($n $n 1) simpleGrading (1 1 1)
|
||||
hex (7 6 4 5 15 14 12 13) ($n $n 1) simpleGrading (1 1 1)
|
||||
hex (6 0 2 4 14 8 10 12) ($n $n 1) simpleGrading (1 1 1)
|
||||
);
|
||||
|
||||
edges
|
||||
(
|
||||
arc 2 3 origin (0 0 0)
|
||||
arc 3 5 origin (0 0 0)
|
||||
arc 5 4 origin (0 0 0)
|
||||
arc 4 2 origin (0 0 0)
|
||||
|
||||
arc 10 11 origin (0 0 1)
|
||||
arc 11 13 origin (0 0 1)
|
||||
arc 13 12 origin (0 0 1)
|
||||
arc 12 10 origin (0 0 1)
|
||||
);
|
||||
|
||||
boundary
|
||||
(
|
||||
walls
|
||||
{
|
||||
type wall;
|
||||
faces
|
||||
(
|
||||
(0 2)
|
||||
(2 2)
|
||||
);
|
||||
}
|
||||
cylinder
|
||||
{
|
||||
type wall;
|
||||
faces
|
||||
(
|
||||
(0 3)
|
||||
(1 3)
|
||||
(2 3)
|
||||
(3 3)
|
||||
);
|
||||
}
|
||||
outlet
|
||||
{
|
||||
type patch;
|
||||
faces
|
||||
(
|
||||
(1 2)
|
||||
);
|
||||
}
|
||||
inlet
|
||||
{
|
||||
type patch;
|
||||
faces
|
||||
(
|
||||
(3 2)
|
||||
);
|
||||
}
|
||||
);
|
||||
|
||||
defaultPatch
|
||||
{
|
||||
type empty;
|
||||
name frontAndBack;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,54 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class dictionary;
|
||||
object controlDict;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
application kinematicParcelFoam;
|
||||
|
||||
startFrom startTime;
|
||||
|
||||
startTime 0;
|
||||
|
||||
stopAt endTime;
|
||||
|
||||
endTime 10;
|
||||
|
||||
deltaT 0.005;
|
||||
|
||||
writeControl adjustable;
|
||||
|
||||
writeInterval 0.25;
|
||||
|
||||
purgeWrite 0;
|
||||
|
||||
writeFormat binary;
|
||||
|
||||
writePrecision 6;
|
||||
|
||||
writeCompression off;
|
||||
|
||||
timeFormat general;
|
||||
|
||||
timePrecision 6;
|
||||
|
||||
runTimeModifiable yes;
|
||||
|
||||
adjustTimeStep yes;
|
||||
|
||||
maxCo 0.9;
|
||||
|
||||
maxDeltaT 0.1;
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,27 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class dictionary;
|
||||
object decomposeParDict;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
numberOfSubdomains 4;
|
||||
|
||||
method hierarchical;
|
||||
|
||||
coeffs
|
||||
{
|
||||
n ( 2 2 1 );
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,54 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class dictionary;
|
||||
object fvSchemes;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
ddtSchemes
|
||||
{
|
||||
default Euler;
|
||||
}
|
||||
|
||||
gradSchemes
|
||||
{
|
||||
default Gauss linear;
|
||||
grad(p) Gauss linear;
|
||||
grad(U) Gauss linear;
|
||||
}
|
||||
|
||||
divSchemes
|
||||
{
|
||||
default none;
|
||||
|
||||
div(phi,U) Gauss upwind;
|
||||
|
||||
div((nuEff*dev2(T(grad(U))))) Gauss linear;
|
||||
}
|
||||
|
||||
laplacianSchemes
|
||||
{
|
||||
default Gauss linear corrected;
|
||||
}
|
||||
|
||||
interpolationSchemes
|
||||
{
|
||||
default linear;
|
||||
}
|
||||
|
||||
snGradSchemes
|
||||
{
|
||||
default corrected;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,60 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class dictionary;
|
||||
object fvSolution;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
solvers
|
||||
{
|
||||
p
|
||||
{
|
||||
solver PBiCGStab;
|
||||
tolerance 0;
|
||||
relTol 0.1;
|
||||
smoother GaussSeidel;
|
||||
preconditioner DIC;
|
||||
}
|
||||
|
||||
pFinal
|
||||
{
|
||||
$p;
|
||||
tolerance 1e-06;
|
||||
relTol 0;
|
||||
}
|
||||
|
||||
U
|
||||
{
|
||||
solver smoothSolver;
|
||||
smoother GaussSeidel;
|
||||
tolerance 1e-05;
|
||||
relTol 0.01;
|
||||
}
|
||||
|
||||
UFinal
|
||||
{
|
||||
$U;
|
||||
tolerance 1e-06;
|
||||
relTol 0;
|
||||
}
|
||||
}
|
||||
|
||||
PIMPLE
|
||||
{
|
||||
momentumPredictor yes;
|
||||
nOuterCorrectors 1;
|
||||
nCorrectors 2;
|
||||
nNonOrthogonalCorrectors 0;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,53 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class volScalarField;
|
||||
location "0";
|
||||
object G;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
dimensions [1 0 -3 0 0 0 0];
|
||||
|
||||
internalField uniform 0;
|
||||
|
||||
boundaryField
|
||||
{
|
||||
back
|
||||
{
|
||||
type symmetryPlane;
|
||||
}
|
||||
front
|
||||
{
|
||||
type symmetryPlane;
|
||||
}
|
||||
walls
|
||||
{
|
||||
type MarshakRadiation;
|
||||
emissivityMode lookup;
|
||||
emissivity uniform 1.0;
|
||||
value uniform 0;
|
||||
}
|
||||
outlet
|
||||
{
|
||||
type zeroGradient;
|
||||
}
|
||||
inlet
|
||||
{
|
||||
type MarshakRadiation;
|
||||
emissivityMode lookup;
|
||||
emissivity uniform 1.0;
|
||||
value uniform 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,31 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class volScalarField;
|
||||
location "0";
|
||||
object H2O;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
dimensions [0 0 0 0 0 0 0];
|
||||
|
||||
internalField uniform 0.01;
|
||||
|
||||
boundaryField
|
||||
{
|
||||
walls
|
||||
{
|
||||
type zeroGradient;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,31 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class volScalarField;
|
||||
location "0";
|
||||
object T;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
dimensions [0 0 0 1 0 0 0];
|
||||
|
||||
internalField uniform 293.0;
|
||||
|
||||
boundaryField
|
||||
{
|
||||
walls
|
||||
{
|
||||
type zeroGradient;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,31 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class volVectorField;
|
||||
location "0";
|
||||
object U;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
dimensions [0 1 -1 0 0 0 0];
|
||||
|
||||
internalField uniform (0 0 0);
|
||||
|
||||
boundaryField
|
||||
{
|
||||
walls
|
||||
{
|
||||
type noSlip;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,31 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class volScalarField;
|
||||
location "0";
|
||||
object air;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
dimensions [0 0 0 0 0 0 0];
|
||||
|
||||
internalField uniform 0.99;
|
||||
|
||||
boundaryField
|
||||
{
|
||||
walls
|
||||
{
|
||||
type zeroGradient;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,32 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class volScalarField;
|
||||
location "0";
|
||||
object p;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
dimensions [1 -1 -2 0 0 0 0];
|
||||
|
||||
internalField uniform 100000;
|
||||
|
||||
boundaryField
|
||||
{
|
||||
walls
|
||||
{
|
||||
type calculated;
|
||||
value $internalField;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,31 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class volScalarField;
|
||||
location "0";
|
||||
object p_rgh;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
dimensions [1 -1 -2 0 0 0 0];
|
||||
|
||||
internalField uniform 100000;
|
||||
|
||||
boundaryField
|
||||
{
|
||||
walls
|
||||
{
|
||||
type fixedFluxPressure;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,27 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class dictionary;
|
||||
location "constant";
|
||||
object chemistryProperties;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
chemistryType
|
||||
{
|
||||
solver noChemistrySolver;
|
||||
}
|
||||
|
||||
chemistry off;
|
||||
|
||||
initialChemicalTimeStep 1e-7;
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,21 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class dictionary;
|
||||
location "constant";
|
||||
object combustionProperties;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
combustionModel none;
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,22 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class uniformDimensionedVectorField;
|
||||
location "constant";
|
||||
object g;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
dimensions [0 1 -2 0 0 0 0];
|
||||
value (0 0 0);
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,194 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class dictionary;
|
||||
location "constant";
|
||||
object reactingCloud1Properties;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
solution
|
||||
{
|
||||
active true;
|
||||
coupled false;
|
||||
transient yes;
|
||||
cellValueSourceCorrection off;
|
||||
maxCo 0.3;
|
||||
|
||||
sourceTerms
|
||||
{
|
||||
schemes
|
||||
{
|
||||
rho explicit 1;
|
||||
U explicit 1;
|
||||
Yi explicit 1;
|
||||
h explicit 1;
|
||||
radiation explicit 1;
|
||||
}
|
||||
}
|
||||
|
||||
interpolationSchemes
|
||||
{
|
||||
rho cell;
|
||||
U cellPoint;
|
||||
thermo:mu cell;
|
||||
T cell;
|
||||
Cp cell;
|
||||
kappa cell;
|
||||
p cell;
|
||||
}
|
||||
|
||||
integrationSchemes
|
||||
{
|
||||
U Euler;
|
||||
T Euler;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
constantProperties
|
||||
{
|
||||
rho0 1000;
|
||||
T0 293;
|
||||
Cp0 4100;
|
||||
|
||||
volumeUpdateMethod constantRho;
|
||||
}
|
||||
|
||||
|
||||
subModels
|
||||
{
|
||||
particleForces
|
||||
{
|
||||
sphereDrag;
|
||||
gravity;
|
||||
}
|
||||
|
||||
injectionModels
|
||||
{
|
||||
model1
|
||||
{
|
||||
type coneNozzleInjection;
|
||||
massTotal 0.0001;
|
||||
parcelBasisType mass;
|
||||
SOI 0;
|
||||
|
||||
injectionMethod point;
|
||||
flowType constantVelocity;
|
||||
UMag 20;
|
||||
outerDiameter 0.001;
|
||||
innerDiameter 0;
|
||||
duration 2;
|
||||
parcelsPerSecond 2000;
|
||||
flowRateProfile constant 1;
|
||||
thetaInner constant 0;
|
||||
thetaOuter constant 10;
|
||||
|
||||
position table
|
||||
(
|
||||
( 0 (0.1 0.5 0.5))
|
||||
(0.2 (0.5 0.9 0.5))
|
||||
(0.4 (0.9 0.5 0.5))
|
||||
(0.6 (0.5 0.1 0.5))
|
||||
|
||||
(0.8 (0.5 0.5 0.9))
|
||||
(1.0 (0.5 0.9 0.5))
|
||||
(1.2 (0.5 0.5 0.1))
|
||||
(1.4 (0.5 0.1 0.5))
|
||||
|
||||
(1.6 (0.1 0.5 0.5))
|
||||
(1.8 (0.5 0.5 0.9))
|
||||
(2.0 (0.9 0.5 0.5))
|
||||
(2.2 (0.5 0.5 0.1))
|
||||
);
|
||||
|
||||
direction table
|
||||
(
|
||||
( 0 ( 1 0 0))
|
||||
(0.2 ( 0 -1 0))
|
||||
(0.4 (-1 0 0))
|
||||
(0.6 ( 0 1 0))
|
||||
|
||||
(0.8 ( 0 0 -1))
|
||||
(1.0 ( 0 -1 0))
|
||||
(1.2 ( 0 0 1))
|
||||
(1.4 ( 0 1 0))
|
||||
|
||||
(1.6 ( 1 0 0))
|
||||
(1.8 ( 0 0 -1))
|
||||
(2.0 (-1 0 0))
|
||||
(2.2 ( 0 0 1))
|
||||
);
|
||||
|
||||
sizeDistribution
|
||||
{
|
||||
type uniform;
|
||||
uniformDistribution
|
||||
{
|
||||
minValue 100e-06;
|
||||
maxValue 100e-06;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dispersionModel none;
|
||||
|
||||
patchInteractionModel standardWallInteraction;
|
||||
|
||||
heatTransferModel none;
|
||||
|
||||
compositionModel singleMixtureFraction;
|
||||
|
||||
phaseChangeModel none;
|
||||
|
||||
devolatilisationModel none;
|
||||
|
||||
surfaceReactionModel none;
|
||||
|
||||
stochasticCollisionModel none;
|
||||
|
||||
surfaceFilmModel none;
|
||||
|
||||
radiation off;
|
||||
|
||||
standardWallInteractionCoeffs
|
||||
{
|
||||
type rebound;
|
||||
}
|
||||
|
||||
singleMixtureFractionCoeffs
|
||||
{
|
||||
phases
|
||||
(
|
||||
gas
|
||||
{
|
||||
}
|
||||
liquid
|
||||
{
|
||||
H2O 1;
|
||||
}
|
||||
solid
|
||||
{
|
||||
}
|
||||
);
|
||||
YGasTot0 0;
|
||||
YLiquidTot0 1;
|
||||
YSolidTot0 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
cloudFunctions
|
||||
{}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,8 @@
|
||||
species
|
||||
(
|
||||
air
|
||||
H2O
|
||||
);
|
||||
|
||||
reactions
|
||||
{}
|
||||
@ -0,0 +1,111 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class dictionary;
|
||||
location "constant";
|
||||
object thermo.incompressiblePoly;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
N2
|
||||
{
|
||||
specie
|
||||
{
|
||||
molWeight 28.0134;
|
||||
}
|
||||
equationOfState
|
||||
{
|
||||
rhoCoeffs<8> ( 3.8936 -0.016463 3.2101e-05 -2.9174e-08 9.9889e-12 0 0 0 );
|
||||
}
|
||||
thermodynamics
|
||||
{
|
||||
Hf 0;
|
||||
Sf 0;
|
||||
CpCoeffs<8> ( 979.08 0.41787 -0.0011761 1.6742e-06 -7.2559e-10 0 0 0 );
|
||||
}
|
||||
transport
|
||||
{
|
||||
muCoeffs<8> ( 1.5068e-06 6.1598e-08 -1.8188e-11 0 0 0 0 0 );
|
||||
kappaCoeffs<8> ( 0.0031494 8.4997e-05 -1.2621e-08 0 0 0 0 0 );
|
||||
}
|
||||
}
|
||||
|
||||
O2
|
||||
{
|
||||
specie
|
||||
{
|
||||
molWeight 31.9988;
|
||||
}
|
||||
equationOfState
|
||||
{
|
||||
rhoCoeffs<8> ( 4.4475 -0.018805 3.6667e-05 -3.3323e-08 1.141e-11 0 0 0 );
|
||||
}
|
||||
thermodynamics
|
||||
{
|
||||
Hf 0;
|
||||
Sf 0;
|
||||
CpCoeffs<8> ( 834.84 0.29297 -0.00014959 3.4143e-07 -2.2786e-10 0 0 0 );
|
||||
}
|
||||
transport
|
||||
{
|
||||
muCoeffs<8> ( 1.5068e-06 6.1598e-08 -1.8188e-11 0 0 0 0 0 );
|
||||
kappaCoeffs<8> ( 0.00016082 8.5301e-05 -1.4998e-08 0 0 0 0 0 );
|
||||
}
|
||||
}
|
||||
|
||||
H2O
|
||||
{
|
||||
specie
|
||||
{
|
||||
molWeight 18.0153;
|
||||
}
|
||||
equationOfState
|
||||
{
|
||||
rhoCoeffs<8> ( 2.5039 -0.010587 2.0643e-05 -1.8761e-08 6.4237e-12 0 0 0 );
|
||||
}
|
||||
thermodynamics
|
||||
{
|
||||
Hf -13423000;
|
||||
Sf 10482;
|
||||
CpCoeffs<8> ( 1563.1 1.604 -0.0029334 3.2168e-06 -1.1571e-09 0 0 0 );
|
||||
}
|
||||
transport
|
||||
{
|
||||
muCoeffs<8> ( 1.5068e-06 6.1598e-08 -1.8188e-11 0 0 0 0 0 );
|
||||
kappaCoeffs<8> ( 0.0037972 0.00015336 -1.1859e-08 0 0 0 0 0 );
|
||||
}
|
||||
}
|
||||
|
||||
air
|
||||
{
|
||||
specie
|
||||
{
|
||||
molWeight 28.85;
|
||||
}
|
||||
equationOfState
|
||||
{
|
||||
rhoCoeffs<8> ( 4.0097 -0.016954 3.3057e-05 -3.0042e-08 1.0286e-11 0 0 0 );
|
||||
}
|
||||
thermodynamics
|
||||
{
|
||||
Hf 0;
|
||||
Sf 0;
|
||||
CpCoeffs<8> ( 948.76 0.39171 -0.00095999 1.393e-06 -6.2029e-10 0 0 0 );
|
||||
}
|
||||
transport
|
||||
{
|
||||
muCoeffs<8> ( 1.5061e-06 6.16e-08 -1.819e-11 0 0 0 0 0 );
|
||||
kappaCoeffs<8> ( 0.0025219 8.506e-05 -1.312e-08 0 0 0 0 0 );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,48 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class dictionary;
|
||||
location "constant";
|
||||
object thermophysicalProperties;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
thermoType
|
||||
{
|
||||
type heRhoThermo;
|
||||
mixture reactingMixture;
|
||||
transport polynomial;
|
||||
thermo hPolynomial;
|
||||
energy sensibleEnthalpy;
|
||||
equationOfState icoPolynomial;
|
||||
specie specie;
|
||||
}
|
||||
|
||||
dpdt no;
|
||||
|
||||
chemistryReader foamChemistryReader;
|
||||
|
||||
foamChemistryFile "<constant>/reactions";
|
||||
|
||||
foamChemistryThermoFile "<constant>/thermo.incompressiblePoly";
|
||||
|
||||
inertSpecie air;
|
||||
|
||||
liquids
|
||||
{
|
||||
H2O;
|
||||
}
|
||||
|
||||
solids
|
||||
{}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,20 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class dictionary;
|
||||
object turbulenceProperties;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
simulationType laminar;
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,61 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class dictionary;
|
||||
object blockMeshDict;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
scale 1;
|
||||
|
||||
vertices
|
||||
(
|
||||
(0 0 0)
|
||||
(1 0 0)
|
||||
(1 1 0)
|
||||
(0 1 0)
|
||||
(0 0 1)
|
||||
(1 0 1)
|
||||
(1 1 1)
|
||||
(0 1 1)
|
||||
);
|
||||
|
||||
blocks
|
||||
(
|
||||
hex (0 1 2 3 4 5 6 7) (10 10 10) simpleGrading (1 1 1)
|
||||
);
|
||||
|
||||
edges
|
||||
(
|
||||
);
|
||||
|
||||
boundary
|
||||
(
|
||||
walls
|
||||
{
|
||||
type wall;
|
||||
faces
|
||||
(
|
||||
(3 7 6 2)
|
||||
(1 5 4 0)
|
||||
(0 4 7 3)
|
||||
(2 6 5 1)
|
||||
(0 3 2 1)
|
||||
(4 5 6 7)
|
||||
);
|
||||
}
|
||||
);
|
||||
|
||||
mergePatchPairs
|
||||
(
|
||||
);
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,55 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class dictionary;
|
||||
location "system";
|
||||
object controlDict;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
application reactingParcelFoam;
|
||||
|
||||
startFrom startTime;
|
||||
|
||||
startTime 0;
|
||||
|
||||
stopAt endTime;
|
||||
|
||||
endTime 3;
|
||||
|
||||
deltaT 1e-3;
|
||||
|
||||
writeControl adjustable;
|
||||
|
||||
writeInterval 0.05;
|
||||
|
||||
purgeWrite 0;
|
||||
|
||||
writeFormat ascii;
|
||||
|
||||
writePrecision 10;
|
||||
|
||||
writeCompression off;
|
||||
|
||||
timeFormat general;
|
||||
|
||||
timePrecision 6;
|
||||
|
||||
runTimeModifiable true;
|
||||
|
||||
adjustTimeStep yes;
|
||||
|
||||
maxCo 5;
|
||||
|
||||
maxDeltaT 1e-3;
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,49 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class dictionary;
|
||||
location "system";
|
||||
object fvSchemes;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
ddtSchemes
|
||||
{
|
||||
default Euler;
|
||||
}
|
||||
|
||||
gradSchemes
|
||||
{
|
||||
default none;
|
||||
}
|
||||
|
||||
divSchemes
|
||||
{
|
||||
default none;
|
||||
}
|
||||
|
||||
laplacianSchemes
|
||||
{
|
||||
default none;
|
||||
}
|
||||
|
||||
interpolationSchemes
|
||||
{
|
||||
default none;
|
||||
}
|
||||
|
||||
snGradSchemes
|
||||
{
|
||||
default none;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,29 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class dictionary;
|
||||
location "system";
|
||||
object fvSolution;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
solvers
|
||||
{}
|
||||
|
||||
PIMPLE
|
||||
{
|
||||
solvePrimaryRegion no;
|
||||
}
|
||||
|
||||
relaxationFactors
|
||||
{}
|
||||
|
||||
// ************************************************************************* //
|
||||
Reference in New Issue
Block a user