mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: Multiple updates to lagrangian/intermediate library
sub-models: - now derived from a common base class - copy/clone functionality added cloud: - makes use of cachedRandom class (instead of Random)
This commit is contained in:
@ -293,7 +293,11 @@ Foam::KinematicCloud<ParcelType>::KinematicCloud
|
|||||||
(
|
(
|
||||||
particleProperties_.lookup("cellValueSourceCorrection")
|
particleProperties_.lookup("cellValueSourceCorrection")
|
||||||
),
|
),
|
||||||
rndGen_(label(0)),
|
rndGen_
|
||||||
|
(
|
||||||
|
label(0),
|
||||||
|
readLabel(particleProperties_.lookup("randomSampleSize"))
|
||||||
|
),
|
||||||
cellOccupancyPtr_(),
|
cellOccupancyPtr_(),
|
||||||
rho_(rho),
|
rho_(rho),
|
||||||
U_(U),
|
U_(U),
|
||||||
|
|||||||
@ -49,7 +49,7 @@ SourceFiles
|
|||||||
#include "kinematicCloud.H"
|
#include "kinematicCloud.H"
|
||||||
#include "IOdictionary.H"
|
#include "IOdictionary.H"
|
||||||
#include "autoPtr.H"
|
#include "autoPtr.H"
|
||||||
#include "Random.H"
|
#include "cachedRandom.H"
|
||||||
#include "fvMesh.H"
|
#include "fvMesh.H"
|
||||||
#include "volFields.H"
|
#include "volFields.H"
|
||||||
#include "fvMatrices.H"
|
#include "fvMatrices.H"
|
||||||
@ -206,7 +206,7 @@ protected:
|
|||||||
const Switch cellValueSourceCorrection_;
|
const Switch cellValueSourceCorrection_;
|
||||||
|
|
||||||
//- Random number generator - used by some injection routines
|
//- Random number generator - used by some injection routines
|
||||||
Random rndGen_;
|
cachedRandom rndGen_;
|
||||||
|
|
||||||
//- Cell occupancy information for each parcel, (demand driven)
|
//- Cell occupancy information for each parcel, (demand driven)
|
||||||
autoPtr<List<DynamicList<ParcelType*> > > cellOccupancyPtr_;
|
autoPtr<List<DynamicList<ParcelType*> > > cellOccupancyPtr_;
|
||||||
@ -358,7 +358,7 @@ public:
|
|||||||
// Cloud data
|
// Cloud data
|
||||||
|
|
||||||
//- Return refernce to the random object
|
//- Return refernce to the random object
|
||||||
inline Random& rndGen();
|
inline cachedRandom& rndGen();
|
||||||
|
|
||||||
//- Return the cell occupancy information for each
|
//- Return the cell occupancy information for each
|
||||||
// parcel, non-const access, the caller is
|
// parcel, non-const access, the caller is
|
||||||
|
|||||||
@ -334,7 +334,7 @@ rotationalKineticEnergyOfSystem() const
|
|||||||
|
|
||||||
|
|
||||||
template<class ParcelType>
|
template<class ParcelType>
|
||||||
inline Foam::Random& Foam::KinematicCloud<ParcelType>::rndGen()
|
inline Foam::cachedRandom& Foam::KinematicCloud<ParcelType>::rndGen()
|
||||||
{
|
{
|
||||||
return rndGen_;
|
return rndGen_;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -30,9 +30,7 @@ License
|
|||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
Foam::CollisionModel<CloudType>::CollisionModel(CloudType& owner)
|
Foam::CollisionModel<CloudType>::CollisionModel(CloudType& owner)
|
||||||
:
|
:
|
||||||
dict_(dictionary::null),
|
SubModelBase<CloudType>(owner)
|
||||||
owner_(owner),
|
|
||||||
coeffDict_(dictionary::null)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -44,9 +42,14 @@ Foam::CollisionModel<CloudType>::CollisionModel
|
|||||||
const word& type
|
const word& type
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
dict_(dict),
|
SubModelBase<CloudType>(owner, dict, type)
|
||||||
owner_(owner),
|
{}
|
||||||
coeffDict_(dict.subDict(type + "Coeffs"))
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::CollisionModel<CloudType>::CollisionModel(CollisionModel<CloudType>& cm)
|
||||||
|
:
|
||||||
|
SubModelBase<CloudType>(cm)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -57,6 +60,36 @@ Foam::CollisionModel<CloudType>::~CollisionModel()
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::label Foam::CollisionModel<CloudType>::nSubCycles() const
|
||||||
|
{
|
||||||
|
notImplemented
|
||||||
|
(
|
||||||
|
"Foam::label Foam::CollisionModel<CloudType>::nSubCycles() const"
|
||||||
|
);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
bool Foam::CollisionModel<CloudType>::controlsWallInteraction() const
|
||||||
|
{
|
||||||
|
notImplemented
|
||||||
|
(
|
||||||
|
"bool Foam::CollisionModel<CloudType>::controlsWallInteraction()"
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
void Foam::CollisionModel<CloudType>::collide()
|
||||||
|
{
|
||||||
|
notImplemented("void Foam::CollisionModel<CloudType>::collide()");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
#include "CollisionModelNew.C"
|
#include "CollisionModelNew.C"
|
||||||
|
|||||||
@ -51,21 +51,9 @@ namespace Foam
|
|||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
class CollisionModel
|
class CollisionModel
|
||||||
|
:
|
||||||
|
public SubModelBase<CloudType>
|
||||||
{
|
{
|
||||||
// Private data
|
|
||||||
|
|
||||||
//- The cloud dictionary
|
|
||||||
const dictionary& dict_;
|
|
||||||
|
|
||||||
//- Reference to the owner cloud class
|
|
||||||
CloudType& owner_;
|
|
||||||
|
|
||||||
//- The coefficients dictionary
|
|
||||||
const dictionary coeffDict_;
|
|
||||||
|
|
||||||
|
|
||||||
protected:
|
|
||||||
|
|
||||||
// Protected data
|
// Protected data
|
||||||
|
|
||||||
//- Convenience typedef for parcel type
|
//- Convenience typedef for parcel type
|
||||||
@ -96,7 +84,7 @@ public:
|
|||||||
//- Construct null from owner
|
//- Construct null from owner
|
||||||
CollisionModel(CloudType& owner);
|
CollisionModel(CloudType& owner);
|
||||||
|
|
||||||
//- Construct from dictionary
|
//- Construct from components
|
||||||
CollisionModel
|
CollisionModel
|
||||||
(
|
(
|
||||||
const dictionary& dict,
|
const dictionary& dict,
|
||||||
@ -104,6 +92,18 @@ public:
|
|||||||
const word& type
|
const word& type
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
CollisionModel(CollisionModel<CloudType>& cm);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<CollisionModel<CloudType> > clone()
|
||||||
|
{
|
||||||
|
return autoPtr<CollisionModel<CloudType> >
|
||||||
|
(
|
||||||
|
new CollisionModel<CloudType>(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~CollisionModel();
|
virtual ~CollisionModel();
|
||||||
@ -117,36 +117,18 @@ public:
|
|||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
// Access
|
|
||||||
|
|
||||||
//- Return the owner cloud dictionary
|
|
||||||
inline const dictionary& dict() const;
|
|
||||||
|
|
||||||
//- Return const access the owner cloud object
|
|
||||||
inline const CloudType& owner() const;
|
|
||||||
|
|
||||||
//- Return non-const access the owner cloud object for manipulation
|
|
||||||
inline CloudType& owner();
|
|
||||||
|
|
||||||
//- Return the coefficients dictionary
|
|
||||||
inline const dictionary& coeffDict() const;
|
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Return the number of times to subcycle the current
|
//- Return the number of times to subcycle the current
|
||||||
// timestep to meet the criteria of the collision model
|
// timestep to meet the criteria of the collision model
|
||||||
virtual label nSubCycles() const = 0;
|
virtual label nSubCycles() const;
|
||||||
|
|
||||||
//- Flag to indicate whether model activates injection model
|
|
||||||
virtual bool active() const = 0;
|
|
||||||
|
|
||||||
//- Indicates whether model determines wall collisions or not,
|
//- Indicates whether model determines wall collisions or not,
|
||||||
// used to determine what value to use for wallImpactDistance
|
// used to determine what value to use for wallImpactDistance
|
||||||
virtual bool controlsWallInteraction() const = 0;
|
virtual bool controlsWallInteraction() const;
|
||||||
|
|
||||||
// Collision function
|
// Collision function
|
||||||
virtual void collide() = 0;
|
virtual void collide();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -172,10 +154,6 @@ public:
|
|||||||
add##SS##CloudType##ParcelType##ConstructorToTable_;
|
add##SS##CloudType##ParcelType##ConstructorToTable_;
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
#include "CollisionModelI.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
#ifdef NoRepository
|
#ifdef NoRepository
|
||||||
|
|||||||
@ -1,56 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
========= |
|
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
||||||
\\ / O peration |
|
|
||||||
\\ / A nd | Copyright (C) 2009-2010 OpenCFD Ltd.
|
|
||||||
\\/ M anipulation |
|
|
||||||
-------------------------------------------------------------------------------
|
|
||||||
License
|
|
||||||
This file is part of OpenFOAM.
|
|
||||||
|
|
||||||
OpenFOAM is free software: you can redistribute it and/or modify it
|
|
||||||
under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
||||||
for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#include "CollisionModel.H"
|
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
const Foam::dictionary& Foam::CollisionModel<CloudType>::dict() const
|
|
||||||
{
|
|
||||||
return dict_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
const CloudType& Foam::CollisionModel<CloudType>::owner() const
|
|
||||||
{
|
|
||||||
return owner_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
CloudType& Foam::CollisionModel<CloudType>::owner()
|
|
||||||
{
|
|
||||||
return owner_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
const Foam::dictionary& Foam::CollisionModel<CloudType>::coeffDict() const
|
|
||||||
{
|
|
||||||
return coeffDict_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -35,12 +35,12 @@ Foam::CollisionModel<CloudType>::New
|
|||||||
CloudType& owner
|
CloudType& owner
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
word CollisionModelType(dict.lookup("CollisionModel"));
|
word modelType(dict.lookup("CollisionModel"));
|
||||||
|
|
||||||
Info<< "Selecting CollisionModel " << CollisionModelType << endl;
|
Info<< "Selecting CollisionModel " << modelType << endl;
|
||||||
|
|
||||||
typename dictionaryConstructorTable::iterator cstrIter =
|
typename dictionaryConstructorTable::iterator cstrIter =
|
||||||
dictionaryConstructorTablePtr_->find(CollisionModelType);
|
dictionaryConstructorTablePtr_->find(modelType);
|
||||||
|
|
||||||
if (cstrIter == dictionaryConstructorTablePtr_->end())
|
if (cstrIter == dictionaryConstructorTablePtr_->end())
|
||||||
{
|
{
|
||||||
@ -51,8 +51,7 @@ Foam::CollisionModel<CloudType>::New
|
|||||||
"const dictionary&, "
|
"const dictionary&, "
|
||||||
"CloudType&"
|
"CloudType&"
|
||||||
")"
|
")"
|
||||||
) << "Unknown CollisionModelType type "
|
) << "Unknown CollisionModelType type " << modelType
|
||||||
<< CollisionModelType
|
|
||||||
<< ", constructor not in hash table" << nl << nl
|
<< ", constructor not in hash table" << nl << nl
|
||||||
<< " Valid CollisionModel types are:" << nl
|
<< " Valid CollisionModel types are:" << nl
|
||||||
<< dictionaryConstructorTablePtr_->sortedToc() << exit(FatalError);
|
<< dictionaryConstructorTablePtr_->sortedToc() << exit(FatalError);
|
||||||
|
|||||||
@ -38,6 +38,16 @@ Foam::NoCollision<CloudType>::NoCollision
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::NoCollision<CloudType>::NoCollision
|
||||||
|
(
|
||||||
|
NoCollision<CloudType>& cm
|
||||||
|
)
|
||||||
|
:
|
||||||
|
CollisionModel<CloudType>(cm)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
|
|||||||
@ -60,12 +60,20 @@ public:
|
|||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from dictionary
|
//- Construct from components
|
||||||
NoCollision
|
NoCollision(const dictionary& dict, CloudType& owner);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
NoCollision(NoCollision<CloudType>& cm);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<CollisionModel<CloudType> > clone()
|
||||||
|
{
|
||||||
|
return autoPtr<CollisionModel<CloudType> >
|
||||||
(
|
(
|
||||||
const dictionary& dict,
|
new NoCollision<CloudType>(*this)
|
||||||
CloudType& owner
|
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
|
|||||||
@ -564,6 +564,24 @@ Foam::PairCollision<CloudType>::PairCollision
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::PairCollision<CloudType>::PairCollision(PairCollision<CloudType>& cm)
|
||||||
|
:
|
||||||
|
CollisionModel<CloudType>(cm),
|
||||||
|
pairModel_(NULL),
|
||||||
|
wallModel_(NULL),
|
||||||
|
il_(cm.owner().mesh())
|
||||||
|
{
|
||||||
|
notImplemented
|
||||||
|
(
|
||||||
|
"Foam::PairCollision<CloudType>::PairCollision"
|
||||||
|
"("
|
||||||
|
"PairCollision<CloudType>& cm"
|
||||||
|
")"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
@ -602,13 +620,6 @@ Foam::label Foam::PairCollision<CloudType>::nSubCycles() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
bool Foam::PairCollision<CloudType>::active() const
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
bool Foam::PairCollision<CloudType>::controlsWallInteraction() const
|
bool Foam::PairCollision<CloudType>::controlsWallInteraction() const
|
||||||
{
|
{
|
||||||
|
|||||||
@ -147,12 +147,20 @@ public:
|
|||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from dictionary
|
//- Construct from components
|
||||||
PairCollision
|
PairCollision(const dictionary& dict, CloudType& owner);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
PairCollision(PairCollision<CloudType>& cm);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<CollisionModel<CloudType> > clone()
|
||||||
|
{
|
||||||
|
return autoPtr<CollisionModel<CloudType> >
|
||||||
(
|
(
|
||||||
const dictionary& dict,
|
new PairCollision<CloudType>(*this)
|
||||||
CloudType& owner
|
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
@ -165,9 +173,6 @@ public:
|
|||||||
// timestep to meet the criteria of the collision model.
|
// timestep to meet the criteria of the collision model.
|
||||||
virtual label nSubCycles() const;
|
virtual label nSubCycles() const;
|
||||||
|
|
||||||
//- Flag to indicate whether model activates injection model
|
|
||||||
virtual bool active() const;
|
|
||||||
|
|
||||||
//- Indicates whether model determines wall collisions or not,
|
//- Indicates whether model determines wall collisions or not,
|
||||||
// used to determine what value to use for wallImpactDistance
|
// used to determine what value to use for wallImpactDistance
|
||||||
virtual bool controlsWallInteraction() const;
|
virtual bool controlsWallInteraction() const;
|
||||||
|
|||||||
@ -30,8 +30,7 @@ License
|
|||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
Foam::DispersionModel<CloudType>::DispersionModel(CloudType& owner)
|
Foam::DispersionModel<CloudType>::DispersionModel(CloudType& owner)
|
||||||
:
|
:
|
||||||
dict_(dictionary::null),
|
SubModelBase<CloudType>(owner)
|
||||||
owner_(owner)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -39,11 +38,21 @@ template<class CloudType>
|
|||||||
Foam::DispersionModel<CloudType>::DispersionModel
|
Foam::DispersionModel<CloudType>::DispersionModel
|
||||||
(
|
(
|
||||||
const dictionary& dict,
|
const dictionary& dict,
|
||||||
CloudType& owner
|
CloudType& owner,
|
||||||
|
const word& type
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
dict_(dict),
|
SubModelBase<CloudType>(dict, owner, type)
|
||||||
owner_(owner)
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::DispersionModel<CloudType>::DispersionModel
|
||||||
|
(
|
||||||
|
DispersionModel<CloudType>& dm
|
||||||
|
)
|
||||||
|
:
|
||||||
|
SubModelBase<CloudType>(dm)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -57,23 +66,30 @@ Foam::DispersionModel<CloudType>::~DispersionModel()
|
|||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
const CloudType& Foam::DispersionModel<CloudType>::owner() const
|
Foam::vector Foam::DispersionModel<CloudType>::update
|
||||||
|
(
|
||||||
|
const scalar,
|
||||||
|
const label,
|
||||||
|
const vector&,
|
||||||
|
const vector& Uc,
|
||||||
|
vector&,
|
||||||
|
scalar&
|
||||||
|
)
|
||||||
{
|
{
|
||||||
return owner_;
|
notImplemented
|
||||||
}
|
(
|
||||||
|
"Foam::vector Foam::DispersionModel<CloudType>::update"
|
||||||
|
"("
|
||||||
|
"const scalar, "
|
||||||
|
"const label, "
|
||||||
|
"const vector&, "
|
||||||
|
"const vector&, "
|
||||||
|
"vector&, "
|
||||||
|
"scalar&"
|
||||||
|
")"
|
||||||
|
);
|
||||||
|
|
||||||
|
return Uc;
|
||||||
template<class CloudType>
|
|
||||||
CloudType& Foam::DispersionModel<CloudType>::owner()
|
|
||||||
{
|
|
||||||
return owner_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
const Foam::dictionary& Foam::DispersionModel<CloudType>::dict() const
|
|
||||||
{
|
|
||||||
return dict_;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -34,6 +34,7 @@ Description
|
|||||||
#include "IOdictionary.H"
|
#include "IOdictionary.H"
|
||||||
#include "autoPtr.H"
|
#include "autoPtr.H"
|
||||||
#include "runTimeSelectionTables.H"
|
#include "runTimeSelectionTables.H"
|
||||||
|
#include "SubModelBase.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -46,17 +47,9 @@ namespace Foam
|
|||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
class DispersionModel
|
class DispersionModel
|
||||||
|
:
|
||||||
|
public SubModelBase<CloudType>
|
||||||
{
|
{
|
||||||
|
|
||||||
// Private data
|
|
||||||
|
|
||||||
//- Cloud dictionary
|
|
||||||
const dictionary& dict_;
|
|
||||||
|
|
||||||
//- Reference to the owner cloud class
|
|
||||||
CloudType& owner_;
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//- Runtime type information
|
//- Runtime type information
|
||||||
@ -90,6 +83,26 @@ public:
|
|||||||
CloudType& owner
|
CloudType& owner
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Construct from components
|
||||||
|
DispersionModel
|
||||||
|
(
|
||||||
|
const dictionary& dict,
|
||||||
|
CloudType& owner,
|
||||||
|
const word& type
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
DispersionModel(DispersionModel<CloudType>& dm);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<DispersionModel<CloudType> > clone()
|
||||||
|
{
|
||||||
|
return autoPtr<DispersionModel<CloudType> >
|
||||||
|
(
|
||||||
|
new DispersionModel<CloudType>(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~DispersionModel();
|
virtual ~DispersionModel();
|
||||||
@ -103,26 +116,8 @@ public:
|
|||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
// Access
|
|
||||||
|
|
||||||
//- Return the owner cloud object
|
|
||||||
const CloudType& owner() const;
|
|
||||||
|
|
||||||
//- Return the owner cloud object
|
|
||||||
CloudType& owner();
|
|
||||||
|
|
||||||
//- Return the dictionary
|
|
||||||
const dictionary& dict() const;
|
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Flag to indicate whether model activates injection model
|
|
||||||
virtual bool active() const = 0;
|
|
||||||
|
|
||||||
//- Cache carrier fields
|
|
||||||
virtual void cacheFields(const bool store) = 0;
|
|
||||||
|
|
||||||
//- Update (disperse particles)
|
//- Update (disperse particles)
|
||||||
virtual vector update
|
virtual vector update
|
||||||
(
|
(
|
||||||
@ -132,7 +127,7 @@ public:
|
|||||||
const vector& Uc,
|
const vector& Uc,
|
||||||
vector& UTurb,
|
vector& UTurb,
|
||||||
scalar& tTurb
|
scalar& tTurb
|
||||||
) = 0;
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -24,17 +24,18 @@ License
|
|||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "DispersionRASModel.H"
|
#include "DispersionRASModel.H"
|
||||||
|
#include "demandDrivenData.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
Foam::DispersionRASModel<CloudType>::DispersionRASModel
|
Foam::DispersionRASModel<CloudType>::DispersionRASModel
|
||||||
(
|
(
|
||||||
const dictionary& dict,
|
const dictionary&,
|
||||||
CloudType& owner
|
CloudType& owner
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
DispersionModel<CloudType>(dict, owner),
|
DispersionModel<CloudType>(owner),
|
||||||
turbulence_
|
turbulence_
|
||||||
(
|
(
|
||||||
owner.mesh().objectRegistry::lookupObject<compressible::RASModel>
|
owner.mesh().objectRegistry::lookupObject<compressible::RASModel>
|
||||||
@ -49,6 +50,24 @@ Foam::DispersionRASModel<CloudType>::DispersionRASModel
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::DispersionRASModel<CloudType>::DispersionRASModel
|
||||||
|
(
|
||||||
|
DispersionRASModel<CloudType>& dm
|
||||||
|
)
|
||||||
|
:
|
||||||
|
DispersionModel<CloudType>(dm),
|
||||||
|
turbulence_(dm.turbulence_),
|
||||||
|
kPtr_(dm.kPtr_),
|
||||||
|
ownK_(dm.ownK_),
|
||||||
|
epsilonPtr_(dm.epsilonPtr_),
|
||||||
|
ownEpsilon_(dm.ownEpsilon_)
|
||||||
|
{
|
||||||
|
dm.ownK_ = false;
|
||||||
|
dm.ownEpsilon_ = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
@ -93,18 +112,27 @@ void Foam::DispersionRASModel<CloudType>::cacheFields(const bool store)
|
|||||||
{
|
{
|
||||||
if (ownK_ && kPtr_)
|
if (ownK_ && kPtr_)
|
||||||
{
|
{
|
||||||
delete kPtr_;
|
deleteDemandDrivenData(kPtr_);
|
||||||
kPtr_ = NULL;
|
|
||||||
ownK_ = false;
|
ownK_ = false;
|
||||||
}
|
}
|
||||||
if (ownEpsilon_ && epsilonPtr_)
|
if (ownEpsilon_ && epsilonPtr_)
|
||||||
{
|
{
|
||||||
delete epsilonPtr_;
|
deleteDemandDrivenData(epsilonPtr_);
|
||||||
epsilonPtr_ = NULL;
|
|
||||||
ownEpsilon_ = false;
|
ownEpsilon_ = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
void Foam::DispersionRASModel<CloudType>::write(Ostream& os) const
|
||||||
|
{
|
||||||
|
DispersionModel<CloudType>::write(os);
|
||||||
|
|
||||||
|
os.writeKeyword("ownK") << ownK_ << token::END_STATEMENT << endl;
|
||||||
|
os.writeKeyword("ownEpsilon") << ownEpsilon_ << token::END_STATEMENT
|
||||||
|
<< endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -80,11 +80,19 @@ public:
|
|||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from components
|
//- Construct from components
|
||||||
DispersionRASModel
|
DispersionRASModel(const dictionary& dict, CloudType& owner);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
DispersionRASModel(DispersionRASModel<CloudType>& dm);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<DispersionModel<CloudType> > clone()
|
||||||
|
{
|
||||||
|
return autoPtr<DispersionModel<CloudType> >
|
||||||
(
|
(
|
||||||
const dictionary& dict,
|
new DispersionRASModel<CloudType>(*this)
|
||||||
CloudType& owner
|
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
@ -101,6 +109,12 @@ public:
|
|||||||
{
|
{
|
||||||
return turbulence_;
|
return turbulence_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// I-O
|
||||||
|
|
||||||
|
//- Write
|
||||||
|
virtual void write(Ostream& os) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -24,6 +24,7 @@ License
|
|||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "GradientDispersionRAS.H"
|
#include "GradientDispersionRAS.H"
|
||||||
|
#include "demandDrivenData.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -35,10 +36,25 @@ Foam::GradientDispersionRAS<CloudType>::GradientDispersionRAS
|
|||||||
)
|
)
|
||||||
:
|
:
|
||||||
DispersionRASModel<CloudType>(dict, owner),
|
DispersionRASModel<CloudType>(dict, owner),
|
||||||
gradkPtr_(NULL)
|
gradkPtr_(NULL),
|
||||||
|
ownGradK_(false)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::GradientDispersionRAS<CloudType>::GradientDispersionRAS
|
||||||
|
(
|
||||||
|
GradientDispersionRAS<CloudType>& dm
|
||||||
|
)
|
||||||
|
:
|
||||||
|
DispersionRASModel<CloudType>(dm),
|
||||||
|
gradkPtr_(dm.gradkPtr_),
|
||||||
|
ownGradK_(dm.ownGradK_)
|
||||||
|
{
|
||||||
|
dm.ownGradK_ = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
@ -50,13 +66,6 @@ Foam::GradientDispersionRAS<CloudType>::~GradientDispersionRAS()
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
bool Foam::GradientDispersionRAS<CloudType>::active() const
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
void Foam::GradientDispersionRAS<CloudType>::cacheFields(const bool store)
|
void Foam::GradientDispersionRAS<CloudType>::cacheFields(const bool store)
|
||||||
{
|
{
|
||||||
@ -65,13 +74,15 @@ void Foam::GradientDispersionRAS<CloudType>::cacheFields(const bool store)
|
|||||||
if (store)
|
if (store)
|
||||||
{
|
{
|
||||||
gradkPtr_ = fvc::grad(*this->kPtr_).ptr();
|
gradkPtr_ = fvc::grad(*this->kPtr_).ptr();
|
||||||
|
ownGradK_ = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (gradkPtr_)
|
if (ownGradK_)
|
||||||
{
|
{
|
||||||
delete gradkPtr_;
|
deleteDemandDrivenData(gradkPtr_);
|
||||||
gradkPtr_ = NULL;
|
gradkPtr_ = NULL;
|
||||||
|
ownGradK_ = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -88,6 +99,8 @@ Foam::vector Foam::GradientDispersionRAS<CloudType>::update
|
|||||||
scalar& tTurb
|
scalar& tTurb
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
cachedRandom& rnd = this->owner().rndGen();
|
||||||
|
|
||||||
const scalar cps = 0.16432;
|
const scalar cps = 0.16432;
|
||||||
|
|
||||||
const volScalarField& k = *this->kPtr_;
|
const volScalarField& k = *this->kPtr_;
|
||||||
@ -120,8 +133,8 @@ Foam::vector Foam::GradientDispersionRAS<CloudType>::update
|
|||||||
scalar rsq = 10.0;
|
scalar rsq = 10.0;
|
||||||
while ((rsq > 1.0) || (rsq == 0.0))
|
while ((rsq > 1.0) || (rsq == 0.0))
|
||||||
{
|
{
|
||||||
x1 = 2.0*this->owner().rndGen().scalar01() - 1.0;
|
x1 = 2.0*rnd.sample01<scalar>() - 1.0;
|
||||||
x2 = 2.0*this->owner().rndGen().scalar01() - 1.0;
|
x2 = 2.0*rnd.sample01<scalar>() - 1.0;
|
||||||
rsq = x1*x1 + x2*x2;
|
rsq = x1*x1 + x2*x2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -52,11 +52,16 @@ class GradientDispersionRAS
|
|||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
// Locally cached turbulence fields
|
||||||
|
|
||||||
// Locally cached turbulence fields
|
// Locally cached turbulence fields
|
||||||
|
|
||||||
//- Gradient of k
|
//- Gradient of k
|
||||||
const volVectorField* gradkPtr_;
|
const volVectorField* gradkPtr_;
|
||||||
|
|
||||||
|
//- Take ownership of the grad(k)
|
||||||
|
bool ownGradK_;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -67,11 +72,19 @@ public:
|
|||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from components
|
//- Construct from components
|
||||||
GradientDispersionRAS
|
GradientDispersionRAS(const dictionary& dict, CloudType& owner);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
GradientDispersionRAS(GradientDispersionRAS<CloudType>& dm);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<DispersionModel<CloudType> > clone()
|
||||||
|
{
|
||||||
|
return autoPtr<DispersionModel<CloudType> >
|
||||||
(
|
(
|
||||||
const dictionary& dict,
|
new GradientDispersionRAS<CloudType>(*this)
|
||||||
CloudType& owner
|
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
@ -80,9 +93,6 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Flag to indicate whether model activates injection model
|
|
||||||
bool active() const;
|
|
||||||
|
|
||||||
//- Cache carrier fields
|
//- Cache carrier fields
|
||||||
virtual void cacheFields(const bool store);
|
virtual void cacheFields(const bool store);
|
||||||
|
|
||||||
|
|||||||
@ -28,16 +28,19 @@ License
|
|||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
Foam::NoDispersion<CloudType>::NoDispersion
|
Foam::NoDispersion<CloudType>::NoDispersion(const dictionary&, CloudType& owner)
|
||||||
(
|
|
||||||
const dictionary&,
|
|
||||||
CloudType& owner
|
|
||||||
)
|
|
||||||
:
|
:
|
||||||
DispersionModel<CloudType>(owner)
|
DispersionModel<CloudType>(owner)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::NoDispersion<CloudType>::NoDispersion(NoDispersion<CloudType>& dm)
|
||||||
|
:
|
||||||
|
DispersionModel<CloudType>(dm.owner_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
@ -54,13 +57,6 @@ bool Foam::NoDispersion<CloudType>::active() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
void Foam::NoDispersion<CloudType>::cacheFields(const bool)
|
|
||||||
{
|
|
||||||
// do nothing
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
Foam::vector Foam::NoDispersion<CloudType>::update
|
Foam::vector Foam::NoDispersion<CloudType>::update
|
||||||
(
|
(
|
||||||
|
|||||||
@ -57,11 +57,19 @@ public:
|
|||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from components
|
//- Construct from components
|
||||||
NoDispersion
|
NoDispersion(const dictionary& dict, CloudType& owner);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
NoDispersion(NoDispersion<CloudType>& dm);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<DispersionModel<CloudType> > clone()
|
||||||
|
{
|
||||||
|
return autoPtr<DispersionModel<CloudType> >
|
||||||
(
|
(
|
||||||
const dictionary& dict,
|
new NoDispersion<CloudType>(*this)
|
||||||
CloudType& owner
|
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
@ -73,9 +81,6 @@ public:
|
|||||||
//- Flag to indicate whether model activates injection model
|
//- Flag to indicate whether model activates injection model
|
||||||
virtual bool active() const;
|
virtual bool active() const;
|
||||||
|
|
||||||
//- Cache carrier fields
|
|
||||||
virtual void cacheFields(const bool store);
|
|
||||||
|
|
||||||
//- Update (disperse particles)
|
//- Update (disperse particles)
|
||||||
virtual vector update
|
virtual vector update
|
||||||
(
|
(
|
||||||
|
|||||||
@ -38,6 +38,16 @@ Foam::StochasticDispersionRAS<CloudType>::StochasticDispersionRAS
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::StochasticDispersionRAS<CloudType>::StochasticDispersionRAS
|
||||||
|
(
|
||||||
|
StochasticDispersionRAS<CloudType>& dm
|
||||||
|
)
|
||||||
|
:
|
||||||
|
DispersionRASModel<CloudType>(dm)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
@ -47,13 +57,6 @@ Foam::StochasticDispersionRAS<CloudType>::~StochasticDispersionRAS()
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
bool Foam::StochasticDispersionRAS<CloudType>::active() const
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
Foam::vector Foam::StochasticDispersionRAS<CloudType>::update
|
Foam::vector Foam::StochasticDispersionRAS<CloudType>::update
|
||||||
(
|
(
|
||||||
@ -65,6 +68,8 @@ Foam::vector Foam::StochasticDispersionRAS<CloudType>::update
|
|||||||
scalar& tTurb
|
scalar& tTurb
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
cachedRandom& rnd = this->owner().rndGen();
|
||||||
|
|
||||||
const scalar cps = 0.16432;
|
const scalar cps = 0.16432;
|
||||||
|
|
||||||
const volScalarField& k = *this->kPtr_;
|
const volScalarField& k = *this->kPtr_;
|
||||||
@ -88,7 +93,7 @@ Foam::vector Foam::StochasticDispersionRAS<CloudType>::update
|
|||||||
tTurb = 0.0;
|
tTurb = 0.0;
|
||||||
|
|
||||||
scalar sigma = sqrt(2.0*k[cellI]/3.0);
|
scalar sigma = sqrt(2.0*k[cellI]/3.0);
|
||||||
vector dir = 2.0*this->owner().rndGen().vector01() - vector::one;
|
vector dir = 2.0*rnd.sample01<vector>() - vector::one;
|
||||||
dir /= mag(dir) + SMALL;
|
dir /= mag(dir) + SMALL;
|
||||||
|
|
||||||
// Numerical Recipes... Ch. 7. Random Numbers...
|
// Numerical Recipes... Ch. 7. Random Numbers...
|
||||||
@ -97,8 +102,8 @@ Foam::vector Foam::StochasticDispersionRAS<CloudType>::update
|
|||||||
scalar rsq = 10.0;
|
scalar rsq = 10.0;
|
||||||
while ((rsq > 1.0) || (rsq == 0.0))
|
while ((rsq > 1.0) || (rsq == 0.0))
|
||||||
{
|
{
|
||||||
x1 = 2.0*this->owner().rndGen().scalar01() - 1.0;
|
x1 = 2.0*rnd.sample01<scalar>() - 1.0;
|
||||||
x2 = 2.0*this->owner().rndGen().scalar01() - 1.0;
|
x2 = 2.0*rnd.sample01<scalar>() - 1.0;
|
||||||
rsq = x1*x1 + x2*x2;
|
rsq = x1*x1 + x2*x2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -59,11 +59,19 @@ public:
|
|||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from components
|
//- Construct from components
|
||||||
StochasticDispersionRAS
|
StochasticDispersionRAS(const dictionary& dict, CloudType& owner);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
StochasticDispersionRAS(StochasticDispersionRAS<CloudType>& dm);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<DispersionModel<CloudType> > clone()
|
||||||
|
{
|
||||||
|
return autoPtr<DispersionModel<CloudType> >
|
||||||
(
|
(
|
||||||
const dictionary& dict,
|
new StochasticDispersionRAS<CloudType>(*this)
|
||||||
CloudType& owner
|
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
@ -72,9 +80,6 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Flag to indicate whether model activates injection model
|
|
||||||
virtual bool active() const;
|
|
||||||
|
|
||||||
//- Update (disperse particles)
|
//- Update (disperse particles)
|
||||||
virtual vector update
|
virtual vector update
|
||||||
(
|
(
|
||||||
|
|||||||
@ -30,9 +30,7 @@ License
|
|||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
Foam::DragModel<CloudType>::DragModel(CloudType& owner)
|
Foam::DragModel<CloudType>::DragModel(CloudType& owner)
|
||||||
:
|
:
|
||||||
dict_(dictionary::null),
|
SubModelBase<CloudType>(owner)
|
||||||
coeffDict_(dictionary::null),
|
|
||||||
owner_(owner)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -44,9 +42,14 @@ Foam::DragModel<CloudType>::DragModel
|
|||||||
const word& type
|
const word& type
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
dict_(dict),
|
SubModelBase<CloudType>(owner, dict, type)
|
||||||
coeffDict_(dict.subDict(type + "Coeffs")),
|
{}
|
||||||
owner_(owner)
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::DragModel<CloudType>::DragModel(const DragModel<CloudType>& dm)
|
||||||
|
:
|
||||||
|
SubModelBase<CloudType>(dm)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -60,23 +63,13 @@ Foam::DragModel<CloudType>::~DragModel()
|
|||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
const CloudType& Foam::DragModel<CloudType>::owner() const
|
Foam::scalar Foam::DragModel<CloudType>::Cd(const scalar) const
|
||||||
{
|
{
|
||||||
return owner_;
|
notImplemented
|
||||||
}
|
(
|
||||||
|
"Foam::scalar Foam::DragModel<CloudType>::Cd(const scalar) const"
|
||||||
|
);
|
||||||
template<class CloudType>
|
return 0.0;
|
||||||
const Foam::dictionary& Foam::DragModel<CloudType>::dict() const
|
|
||||||
{
|
|
||||||
return dict_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
const Foam::dictionary& Foam::DragModel<CloudType>::coeffDict() const
|
|
||||||
{
|
|
||||||
return coeffDict_;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -51,19 +51,9 @@ namespace Foam
|
|||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
class DragModel
|
class DragModel
|
||||||
|
:
|
||||||
|
public SubModelBase<CloudType>
|
||||||
{
|
{
|
||||||
// Private data
|
|
||||||
|
|
||||||
//- The cloud dictionary
|
|
||||||
const dictionary& dict_;
|
|
||||||
|
|
||||||
//- The model coefficients dictionary
|
|
||||||
const dictionary& coeffDict_;
|
|
||||||
|
|
||||||
//- Reference to the owner cloud class
|
|
||||||
CloudType& owner_;
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//- Runtime type information
|
//- Runtime type information
|
||||||
@ -96,6 +86,18 @@ public:
|
|||||||
const word& type
|
const word& type
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
DragModel(const DragModel<CloudType>& dm);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<DragModel<CloudType> > clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<DragModel<CloudType> >
|
||||||
|
(
|
||||||
|
new DragModel<CloudType>(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~DragModel();
|
virtual ~DragModel();
|
||||||
@ -109,25 +111,10 @@ public:
|
|||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
// Access
|
|
||||||
|
|
||||||
//- Return the owner cloud object
|
|
||||||
const CloudType& owner() const;
|
|
||||||
|
|
||||||
//- Return the dictionary
|
|
||||||
const dictionary& dict() const;
|
|
||||||
|
|
||||||
//- Return the coefficients dictionary
|
|
||||||
const dictionary& coeffDict() const;
|
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Flag to indicate whether model activates drag model
|
|
||||||
virtual bool active() const = 0;
|
|
||||||
|
|
||||||
//- Return drag coefficient
|
//- Return drag coefficient
|
||||||
virtual scalar Cd(const scalar Re) const = 0;
|
virtual scalar Cd(const scalar Re) const;
|
||||||
|
|
||||||
//- Return momentum transfer coefficient
|
//- Return momentum transfer coefficient
|
||||||
// Drag force per unit particle surface area = utc(U - Up)
|
// Drag force per unit particle surface area = utc(U - Up)
|
||||||
|
|||||||
@ -34,6 +34,13 @@ Foam::NoDrag<CloudType>::NoDrag(const dictionary& dict, CloudType& owner)
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::NoDrag<CloudType>::NoDrag(const NoDrag<CloudType>& dm)
|
||||||
|
:
|
||||||
|
DragModel<CloudType>(dm.owner_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template <class CloudType>
|
template <class CloudType>
|
||||||
|
|||||||
@ -56,11 +56,19 @@ public:
|
|||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from dictionary
|
//- Construct from dictionary
|
||||||
NoDrag
|
NoDrag(const dictionary&, CloudType&);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
NoDrag(const NoDrag<CloudType>& dm);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<DragModel<CloudType> > clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<DragModel<CloudType> >
|
||||||
(
|
(
|
||||||
const dictionary&,
|
new NoDrag<CloudType>(*this)
|
||||||
CloudType&
|
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
|
|||||||
@ -58,6 +58,21 @@ Foam::NonSphereDrag<CloudType>::NonSphereDrag
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::NonSphereDrag<CloudType>::NonSphereDrag
|
||||||
|
(
|
||||||
|
const NonSphereDrag<CloudType>& dm
|
||||||
|
)
|
||||||
|
:
|
||||||
|
DragModel<CloudType>(dm),
|
||||||
|
phi_(dm.phi_),
|
||||||
|
a_(dm.a_),
|
||||||
|
b_(dm.b_),
|
||||||
|
c_(dm.c_),
|
||||||
|
d_(dm.d_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
@ -67,13 +82,6 @@ Foam::NonSphereDrag<CloudType>::~NonSphereDrag()
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
bool Foam::NonSphereDrag<CloudType>::active() const
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
Foam::scalar Foam::NonSphereDrag<CloudType>::Cd(const scalar Re) const
|
Foam::scalar Foam::NonSphereDrag<CloudType>::Cd(const scalar Re) const
|
||||||
{
|
{
|
||||||
|
|||||||
@ -110,6 +110,18 @@ public:
|
|||||||
//- Construct from dictionary
|
//- Construct from dictionary
|
||||||
NonSphereDrag(const dictionary& dict, CloudType& owner);
|
NonSphereDrag(const dictionary& dict, CloudType& owner);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
NonSphereDrag(const NonSphereDrag<CloudType>& dm);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<DragModel<CloudType> > clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<DragModel<CloudType> >
|
||||||
|
(
|
||||||
|
new NonSphereDrag<CloudType>(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~NonSphereDrag();
|
virtual ~NonSphereDrag();
|
||||||
@ -117,9 +129,6 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Flag to indicate whether model activates drag model
|
|
||||||
bool active() const;
|
|
||||||
|
|
||||||
//- Return drag coefficient
|
//- Return drag coefficient
|
||||||
scalar Cd(const scalar Re) const;
|
scalar Cd(const scalar Re) const;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -38,6 +38,13 @@ Foam::SphereDrag<CloudType>::SphereDrag
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::SphereDrag<CloudType>::SphereDrag(const SphereDrag<CloudType>& dm)
|
||||||
|
:
|
||||||
|
DragModel<CloudType>(dm)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template <class CloudType>
|
template <class CloudType>
|
||||||
@ -47,13 +54,6 @@ Foam::SphereDrag<CloudType>::~SphereDrag()
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template <class CloudType>
|
|
||||||
bool Foam::SphereDrag<CloudType>::active() const
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template <class CloudType>
|
template <class CloudType>
|
||||||
Foam::scalar Foam::SphereDrag<CloudType>::Cd(const scalar Re) const
|
Foam::scalar Foam::SphereDrag<CloudType>::Cd(const scalar Re) const
|
||||||
{
|
{
|
||||||
|
|||||||
@ -56,11 +56,19 @@ public:
|
|||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from dictionary
|
//- Construct from dictionary
|
||||||
SphereDrag
|
SphereDrag(const dictionary& dict, CloudType& owner);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
SphereDrag(const SphereDrag<CloudType>& dm);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<DragModel<CloudType> > clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<DragModel<CloudType> >
|
||||||
(
|
(
|
||||||
const dictionary& dict,
|
new SphereDrag<CloudType>(*this)
|
||||||
CloudType& owner
|
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
@ -69,9 +77,6 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Flag to indicate whether model activates drag model
|
|
||||||
bool active() const;
|
|
||||||
|
|
||||||
//- Return drag coefficient
|
//- Return drag coefficient
|
||||||
scalar Cd(const scalar Re) const;
|
scalar Cd(const scalar Re) const;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -89,43 +89,14 @@ Foam::ConeInjection<CloudType>::ConeInjection
|
|||||||
),
|
),
|
||||||
flowRateProfile_
|
flowRateProfile_
|
||||||
(
|
(
|
||||||
DataEntry<scalar>::New
|
DataEntry<scalar>::New("flowRateProfile", this->coeffDict())
|
||||||
(
|
|
||||||
"flowRateProfile",
|
|
||||||
this->coeffDict()
|
|
||||||
)
|
|
||||||
),
|
|
||||||
Umag_
|
|
||||||
(
|
|
||||||
DataEntry<scalar>::New
|
|
||||||
(
|
|
||||||
"Umag",
|
|
||||||
this->coeffDict()
|
|
||||||
)
|
|
||||||
),
|
|
||||||
thetaInner_
|
|
||||||
(
|
|
||||||
DataEntry<scalar>::New
|
|
||||||
(
|
|
||||||
"thetaInner",
|
|
||||||
this->coeffDict()
|
|
||||||
)
|
|
||||||
),
|
|
||||||
thetaOuter_
|
|
||||||
(
|
|
||||||
DataEntry<scalar>::New
|
|
||||||
(
|
|
||||||
"thetaOuter",
|
|
||||||
this->coeffDict()
|
|
||||||
)
|
|
||||||
),
|
),
|
||||||
|
Umag_(DataEntry<scalar>::New("Umag", this->coeffDict())),
|
||||||
|
thetaInner_(DataEntry<scalar>::New("thetaInner", this->coeffDict())),
|
||||||
|
thetaOuter_(DataEntry<scalar>::New("thetaOuter", this->coeffDict())),
|
||||||
parcelPDF_
|
parcelPDF_
|
||||||
(
|
(
|
||||||
pdfs::pdf::New
|
pdfs::pdf::New(this->coeffDict().subDict("parcelPDF"), owner.rndGen())
|
||||||
(
|
|
||||||
this->coeffDict().subDict("parcelPDF"),
|
|
||||||
owner.rndGen()
|
|
||||||
)
|
|
||||||
),
|
),
|
||||||
tanVec1_(vector::zero),
|
tanVec1_(vector::zero),
|
||||||
tanVec2_(vector::zero)
|
tanVec2_(vector::zero)
|
||||||
@ -137,9 +108,10 @@ Foam::ConeInjection<CloudType>::ConeInjection
|
|||||||
vector tangent = vector::zero;
|
vector tangent = vector::zero;
|
||||||
scalar magTangent = 0.0;
|
scalar magTangent = 0.0;
|
||||||
|
|
||||||
|
cachedRandom& rnd = this->owner().rndGen();
|
||||||
while (magTangent < SMALL)
|
while (magTangent < SMALL)
|
||||||
{
|
{
|
||||||
vector v = this->owner().rndGen().vector01();
|
vector v = rnd.sample01<vector>();
|
||||||
|
|
||||||
tangent = v - (v & direction_)*direction_;
|
tangent = v - (v & direction_)*direction_;
|
||||||
magTangent = mag(tangent);
|
magTangent = mag(tangent);
|
||||||
@ -162,6 +134,30 @@ Foam::ConeInjection<CloudType>::ConeInjection
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::ConeInjection<CloudType>::ConeInjection
|
||||||
|
(
|
||||||
|
const ConeInjection<CloudType>& im
|
||||||
|
)
|
||||||
|
:
|
||||||
|
InjectionModel<CloudType>(im),
|
||||||
|
duration_(im.duration_),
|
||||||
|
position_(im.position_),
|
||||||
|
injectorCell_(im.injectorCell_),
|
||||||
|
injectorTetFace_(im.injectorTetFace_),
|
||||||
|
injectorTetPt_(im.injectorTetPt_),
|
||||||
|
direction_(im.direction_),
|
||||||
|
parcelsPerSecond_(im.parcelsPerSecond_),
|
||||||
|
flowRateProfile_(im.flowRateProfile_().clone().ptr()),
|
||||||
|
Umag_(im.Umag_().clone().ptr()),
|
||||||
|
thetaInner_(im.thetaInner_().clone().ptr()),
|
||||||
|
thetaOuter_(im.thetaOuter_().clone().ptr()),
|
||||||
|
parcelPDF_(im.parcelPDF_().clone().ptr()),
|
||||||
|
tanVec1_(im.tanVec1_),
|
||||||
|
tanVec2_(im.tanVec2_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
@ -171,13 +167,6 @@ Foam::ConeInjection<CloudType>::~ConeInjection()
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
bool Foam::ConeInjection<CloudType>::active() const
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
Foam::scalar Foam::ConeInjection<CloudType>::timeEnd() const
|
Foam::scalar Foam::ConeInjection<CloudType>::timeEnd() const
|
||||||
{
|
{
|
||||||
@ -207,24 +196,26 @@ void Foam::ConeInjection<CloudType>::setPositionAndCell
|
|||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
void Foam::ConeInjection<CloudType>::setProperties
|
void Foam::ConeInjection<CloudType>::setProperties
|
||||||
(
|
(
|
||||||
const label parcelI,
|
const label,
|
||||||
const label,
|
const label,
|
||||||
const scalar time,
|
const scalar time,
|
||||||
typename CloudType::parcelType& parcel
|
typename CloudType::parcelType& parcel
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
cachedRandom& rnd = this->owner().rndGen();
|
||||||
|
|
||||||
// set particle velocity
|
// set particle velocity
|
||||||
const scalar deg2Rad = pi/180.0;
|
const scalar deg2Rad = pi/180.0;
|
||||||
|
|
||||||
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);
|
||||||
scalar coneAngle = this->owner().rndGen().scalar01()*(to - ti) + ti;
|
scalar coneAngle = deg2Rad*rnd.position<scalar>(ti, to);
|
||||||
|
|
||||||
coneAngle *= deg2Rad;
|
coneAngle *= deg2Rad;
|
||||||
scalar alpha = sin(coneAngle);
|
scalar alpha = sin(coneAngle);
|
||||||
scalar dcorr = cos(coneAngle);
|
scalar dcorr = cos(coneAngle);
|
||||||
scalar beta = twoPi*this->owner().rndGen().scalar01();
|
scalar beta = twoPi*rnd.sample01<scalar>();
|
||||||
|
|
||||||
vector normal = alpha*(tanVec1_*cos(beta) + tanVec2_*sin(beta));
|
vector normal = alpha*(tanVec1_*cos(beta) + tanVec2_*sin(beta));
|
||||||
vector dirVec = dcorr*direction_;
|
vector dirVec = dcorr*direction_;
|
||||||
|
|||||||
@ -119,18 +119,10 @@ protected:
|
|||||||
// Protected Member Functions
|
// Protected Member Functions
|
||||||
|
|
||||||
//- Number of parcels to introduce over the time step relative to SOI
|
//- Number of parcels to introduce over the time step relative to SOI
|
||||||
label parcelsToInject
|
virtual label parcelsToInject(const scalar time0, const scalar time1);
|
||||||
(
|
|
||||||
const scalar time0,
|
|
||||||
const scalar time1
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Number of parcels to introduce over the time step relative to SOI
|
//- Number of parcels to introduce over the time step relative to SOI
|
||||||
scalar volumeToInject
|
virtual scalar volumeToInject(const scalar time0, const scalar time1);
|
||||||
(
|
|
||||||
const scalar time0,
|
|
||||||
const scalar time1
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -142,11 +134,19 @@ public:
|
|||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from dictionary
|
//- Construct from dictionary
|
||||||
ConeInjection
|
ConeInjection(const dictionary& dict, CloudType& owner);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
ConeInjection(const ConeInjection<CloudType>& im);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<InjectionModel<CloudType> > clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<InjectionModel<CloudType> >
|
||||||
(
|
(
|
||||||
const dictionary& dict,
|
new ConeInjection<CloudType>(*this)
|
||||||
CloudType& owner
|
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
@ -155,9 +155,6 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Flag to indicate whether model activates injection model
|
|
||||||
bool active() const;
|
|
||||||
|
|
||||||
//- Return the end-of-injection time
|
//- Return the end-of-injection time
|
||||||
scalar timeEnd() const;
|
scalar timeEnd() const;
|
||||||
|
|
||||||
|
|||||||
@ -120,43 +120,14 @@ Foam::ConeInjectionMP<CloudType>::ConeInjectionMP
|
|||||||
),
|
),
|
||||||
flowRateProfile_
|
flowRateProfile_
|
||||||
(
|
(
|
||||||
DataEntry<scalar>::New
|
DataEntry<scalar>::New("flowRateProfile", this->coeffDict())
|
||||||
(
|
|
||||||
"flowRateProfile",
|
|
||||||
this->coeffDict()
|
|
||||||
)
|
|
||||||
),
|
|
||||||
Umag_
|
|
||||||
(
|
|
||||||
DataEntry<scalar>::New
|
|
||||||
(
|
|
||||||
"Umag",
|
|
||||||
this->coeffDict()
|
|
||||||
)
|
|
||||||
),
|
|
||||||
thetaInner_
|
|
||||||
(
|
|
||||||
DataEntry<scalar>::New
|
|
||||||
(
|
|
||||||
"thetaInner",
|
|
||||||
this->coeffDict()
|
|
||||||
)
|
|
||||||
),
|
|
||||||
thetaOuter_
|
|
||||||
(
|
|
||||||
DataEntry<scalar>::New
|
|
||||||
(
|
|
||||||
"thetaOuter",
|
|
||||||
this->coeffDict()
|
|
||||||
)
|
|
||||||
),
|
),
|
||||||
|
Umag_(DataEntry<scalar>::New("Umag", this->coeffDict())),
|
||||||
|
thetaInner_(DataEntry<scalar>::New("thetaInner", this->coeffDict())),
|
||||||
|
thetaOuter_(DataEntry<scalar>::New("thetaOuter", this->coeffDict())),
|
||||||
parcelPDF_
|
parcelPDF_
|
||||||
(
|
(
|
||||||
pdfs::pdf::New
|
pdfs::pdf::New(this->coeffDict().subDict("parcelPDF"), owner.rndGen())
|
||||||
(
|
|
||||||
this->coeffDict().subDict("parcelPDF"),
|
|
||||||
owner.rndGen()
|
|
||||||
)
|
|
||||||
),
|
),
|
||||||
nInjected_(this->parcelsAddedTotal()),
|
nInjected_(this->parcelsAddedTotal()),
|
||||||
tanVec1_(positions_.size()),
|
tanVec1_(positions_.size()),
|
||||||
@ -171,9 +142,10 @@ Foam::ConeInjectionMP<CloudType>::ConeInjectionMP
|
|||||||
vector tangent = vector::zero;
|
vector tangent = vector::zero;
|
||||||
scalar magTangent = 0.0;
|
scalar magTangent = 0.0;
|
||||||
|
|
||||||
|
cachedRandom& rnd = this->owner().rndGen();
|
||||||
while (magTangent < SMALL)
|
while (magTangent < SMALL)
|
||||||
{
|
{
|
||||||
vector v = this->owner().rndGen().vector01();
|
vector v = rnd.sample01<vector>();
|
||||||
|
|
||||||
tangent = v - (v & axes_[i])*axes_[i];
|
tangent = v - (v & axes_[i])*axes_[i];
|
||||||
magTangent = mag(tangent);
|
magTangent = mag(tangent);
|
||||||
@ -200,6 +172,33 @@ Foam::ConeInjectionMP<CloudType>::ConeInjectionMP
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
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()),
|
||||||
|
parcelPDF_(im.parcelPDF_().clone().ptr()),
|
||||||
|
nInjected_(im.nInjected_),
|
||||||
|
tanVec1_(im.tanVec1_),
|
||||||
|
tanVec2_(im.tanVec2_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
@ -209,13 +208,6 @@ Foam::ConeInjectionMP<CloudType>::~ConeInjectionMP()
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
bool Foam::ConeInjectionMP<CloudType>::active() const
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
Foam::scalar Foam::ConeInjectionMP<CloudType>::timeEnd() const
|
Foam::scalar Foam::ConeInjectionMP<CloudType>::timeEnd() const
|
||||||
{
|
{
|
||||||
@ -253,6 +245,8 @@ void Foam::ConeInjectionMP<CloudType>::setProperties
|
|||||||
typename CloudType::parcelType& parcel
|
typename CloudType::parcelType& parcel
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
cachedRandom& rnd = this->owner().rndGen();
|
||||||
|
|
||||||
// set particle velocity
|
// set particle velocity
|
||||||
const label i = parcelI%positions_.size();
|
const label i = parcelI%positions_.size();
|
||||||
|
|
||||||
@ -261,17 +255,16 @@ void Foam::ConeInjectionMP<CloudType>::setProperties
|
|||||||
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);
|
||||||
scalar coneAngle = this->owner().rndGen().scalar01()*(to - ti) + ti;
|
scalar coneAngle = deg2Rad*rnd.position<scalar>(ti, to);
|
||||||
|
|
||||||
coneAngle *= deg2Rad;
|
coneAngle *= deg2Rad;
|
||||||
scalar alpha = sin(coneAngle);
|
scalar alpha = sin(coneAngle);
|
||||||
scalar dcorr = cos(coneAngle);
|
scalar dcorr = cos(coneAngle);
|
||||||
scalar beta = twoPi*this->owner().rndGen().scalar01();
|
scalar beta = twoPi*rnd.sample01<scalar>();
|
||||||
|
|
||||||
vector normal = alpha*(tanVec1_[i]*cos(beta) + tanVec2_[i]*sin(beta));
|
vector normal = alpha*(tanVec1_[i]*cos(beta) + tanVec2_[i]*sin(beta));
|
||||||
vector dirVec = dcorr*axes_[i];
|
vector dirVec = dcorr*axes_[i];
|
||||||
dirVec += normal;
|
dirVec += normal;
|
||||||
|
|
||||||
dirVec /= mag(dirVec);
|
dirVec /= mag(dirVec);
|
||||||
|
|
||||||
parcel.U() = Umag_().value(t)*dirVec;
|
parcel.U() = Umag_().value(t)*dirVec;
|
||||||
|
|||||||
@ -129,18 +129,10 @@ protected:
|
|||||||
// Protected Member Functions
|
// Protected Member Functions
|
||||||
|
|
||||||
//- Number of parcels to introduce over the time step
|
//- Number of parcels to introduce over the time step
|
||||||
label parcelsToInject
|
virtual label parcelsToInject(const scalar time0, const scalar time1);
|
||||||
(
|
|
||||||
const scalar time0,
|
|
||||||
const scalar time1
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Number of parcels to introduce over the time step
|
//- Number of parcels to introduce over the time step
|
||||||
scalar volumeToInject
|
virtual scalar volumeToInject(const scalar time0, const scalar time1);
|
||||||
(
|
|
||||||
const scalar time0,
|
|
||||||
const scalar time1
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -152,11 +144,19 @@ public:
|
|||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from dictionary
|
//- Construct from dictionary
|
||||||
ConeInjectionMP
|
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> >
|
||||||
(
|
(
|
||||||
const dictionary& dict,
|
new ConeInjectionMP<CloudType>(*this)
|
||||||
CloudType& owner
|
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
@ -165,9 +165,6 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Flag to indicate whether model activates injection model
|
|
||||||
bool active() const;
|
|
||||||
|
|
||||||
//- Return the end-of-injection time
|
//- Return the end-of-injection time
|
||||||
scalar timeEnd() const;
|
scalar timeEnd() const;
|
||||||
|
|
||||||
|
|||||||
@ -147,6 +147,29 @@ Foam::FieldActivatedInjection<CloudType>::FieldActivatedInjection
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::FieldActivatedInjection<CloudType>::FieldActivatedInjection
|
||||||
|
(
|
||||||
|
const FieldActivatedInjection<CloudType>& im
|
||||||
|
)
|
||||||
|
:
|
||||||
|
InjectionModel<CloudType>(im),
|
||||||
|
factor_(im.factor_),
|
||||||
|
referenceField_(im.referenceField_),
|
||||||
|
thresholdField_(im.thresholdField_),
|
||||||
|
positionsFile_(im.positionsFile_),
|
||||||
|
positions_(im.positions_),
|
||||||
|
injectorCells_(im.injectorCells_),
|
||||||
|
injectorTetFaces_(im.injectorTetFaces_),
|
||||||
|
injectorTetPts_(im.injectorTetPts_),
|
||||||
|
nParcelsPerInjector_(im.nParcelsPerInjector_),
|
||||||
|
nParcelsInjected_(im.nParcelsInjected_),
|
||||||
|
U0_(im.U0_),
|
||||||
|
diameters_(im.diameters_),
|
||||||
|
parcelPDF_(im.parcelPDF_().clone().ptr())
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
|
|||||||
@ -119,18 +119,10 @@ protected:
|
|||||||
// Protected Member Functions
|
// Protected Member Functions
|
||||||
|
|
||||||
//- Number of parcels to introduce over the time step relative to SOI
|
//- Number of parcels to introduce over the time step relative to SOI
|
||||||
label parcelsToInject
|
virtual label parcelsToInject(const scalar time0, const scalar time1);
|
||||||
(
|
|
||||||
const scalar time0,
|
|
||||||
const scalar time1
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Volume of parcels to introduce over the time step relative to SOI
|
//- Volume of parcels to introduce over the time step relative to SOI
|
||||||
scalar volumeToInject
|
virtual scalar volumeToInject(const scalar time0, const scalar time1);
|
||||||
(
|
|
||||||
const scalar time0,
|
|
||||||
const scalar time1
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -142,11 +134,19 @@ public:
|
|||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from dictionary
|
//- Construct from dictionary
|
||||||
FieldActivatedInjection
|
FieldActivatedInjection(const dictionary& dict, CloudType& owner);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
FieldActivatedInjection(const FieldActivatedInjection<CloudType>& im);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<InjectionModel<CloudType> > clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<InjectionModel<CloudType> >
|
||||||
(
|
(
|
||||||
const dictionary& dict,
|
new FieldActivatedInjection<CloudType>(*this)
|
||||||
CloudType& owner
|
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
|
|||||||
@ -71,7 +71,7 @@ Foam::label Foam::InflationInjection<CloudType>::parcelsToInject
|
|||||||
|
|
||||||
newParticles_.clear();
|
newParticles_.clear();
|
||||||
|
|
||||||
Random& rnd = this->owner().rndGen();
|
cachedRandom& rnd = this->owner().rndGen();
|
||||||
|
|
||||||
// Diameter factor, when splitting particles into 4, this is the
|
// Diameter factor, when splitting particles into 4, this is the
|
||||||
// factor that modifies the diameter.
|
// factor that modifies the diameter.
|
||||||
@ -118,7 +118,7 @@ Foam::label Foam::InflationInjection<CloudType>::parcelsToInject
|
|||||||
}
|
}
|
||||||
|
|
||||||
label cI =
|
label cI =
|
||||||
generationCells_[rnd.integer(0, generationCells_.size() - 1)];
|
generationCells_[rnd.position(0, generationCells_.size() - 1)];
|
||||||
|
|
||||||
// Pick a particle at random from the cell - if there are
|
// Pick a particle at random from the cell - if there are
|
||||||
// none, insert one at the cell centre. Otherwise, split an
|
// none, insert one at the cell centre. Otherwise, split an
|
||||||
@ -146,7 +146,7 @@ Foam::label Foam::InflationInjection<CloudType>::parcelsToInject
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
label cPI = rnd.integer(0, cellOccupancy[cI].size() - 1);
|
label cPI = rnd.position(0, cellOccupancy[cI].size() - 1);
|
||||||
|
|
||||||
// This has to be a reference to the pointer so that it
|
// This has to be a reference to the pointer so that it
|
||||||
// can be set to NULL when the particle is deleted.
|
// can be set to NULL when the particle is deleted.
|
||||||
@ -157,7 +157,7 @@ Foam::label Foam::InflationInjection<CloudType>::parcelsToInject
|
|||||||
scalar pD = pPtr->d();
|
scalar pD = pPtr->d();
|
||||||
|
|
||||||
// Select bigger particles by preference
|
// Select bigger particles by preference
|
||||||
if ((pD/pPtr->dTarget()) < rnd.scalar01())
|
if ((pD/pPtr->dTarget()) < rnd.sample01<scalar>())
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -390,6 +390,29 @@ Foam::InflationInjection<CloudType>::InflationInjection
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::InflationInjection<CloudType>::InflationInjection
|
||||||
|
(
|
||||||
|
const Foam::InflationInjection<CloudType>& im
|
||||||
|
)
|
||||||
|
:
|
||||||
|
InjectionModel<CloudType>(im),
|
||||||
|
generationSetName_(im.generationSetName_),
|
||||||
|
inflationSetName_(im.inflationSetName_),
|
||||||
|
generationCells_(im.generationCells_),
|
||||||
|
inflationCells_(im.inflationCells_),
|
||||||
|
duration_(im.duration_),
|
||||||
|
flowRateProfile_(im.flowRateProfile_().clone().ptr()),
|
||||||
|
growthRate_(im.growthRate_().clone().ptr()),
|
||||||
|
newParticles_(im.newParticles_),
|
||||||
|
volumeAccumulator_(im.volumeAccumulator_),
|
||||||
|
fraction_(im.fraction_),
|
||||||
|
selfSeed_(im.selfSeed_),
|
||||||
|
dSeed_(im.dSeed_),
|
||||||
|
parcelPDF_(im.parcelPDF_().clone().ptr())
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
@ -399,13 +422,6 @@ Foam::InflationInjection<CloudType>::~InflationInjection()
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
bool Foam::InflationInjection<CloudType>::active() const
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
Foam::scalar Foam::InflationInjection<CloudType>::timeEnd() const
|
Foam::scalar Foam::InflationInjection<CloudType>::timeEnd() const
|
||||||
{
|
{
|
||||||
|
|||||||
@ -116,18 +116,10 @@ protected:
|
|||||||
// Protected Member Functions
|
// Protected Member Functions
|
||||||
|
|
||||||
//- Number of parcels to introduce over the time step relative to SOI
|
//- Number of parcels to introduce over the time step relative to SOI
|
||||||
label parcelsToInject
|
virtual label parcelsToInject(const scalar time0, const scalar time1);
|
||||||
(
|
|
||||||
const scalar time0,
|
|
||||||
const scalar time1
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Volume of parcels to introduce over the time step relative to SOI
|
//- Volume of parcels to introduce over the time step relative to SOI
|
||||||
scalar volumeToInject
|
virtual scalar volumeToInject(const scalar time0, const scalar time1);
|
||||||
(
|
|
||||||
const scalar time0,
|
|
||||||
const scalar time1
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -139,11 +131,19 @@ public:
|
|||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from dictionary
|
//- Construct from dictionary
|
||||||
InflationInjection
|
InflationInjection(const dictionary& dict, CloudType& owner);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
InflationInjection(const InflationInjection<CloudType>& im);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<InjectionModel<CloudType> > clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<InjectionModel<CloudType> >
|
||||||
(
|
(
|
||||||
const dictionary& dict,
|
new InflationInjection<CloudType>(*this)
|
||||||
CloudType& owner
|
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
@ -152,9 +152,6 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Flag to indicate whether model activates injection model
|
|
||||||
bool active() const;
|
|
||||||
|
|
||||||
//- Return the end-of-injection time
|
//- Return the end-of-injection time
|
||||||
scalar timeEnd() const;
|
scalar timeEnd() const;
|
||||||
|
|
||||||
|
|||||||
@ -37,9 +37,9 @@ void Foam::InjectionModel<CloudType>::readProps()
|
|||||||
IOobject propsDictHeader
|
IOobject propsDictHeader
|
||||||
(
|
(
|
||||||
"injectionProperties",
|
"injectionProperties",
|
||||||
owner_.db().time().timeName(),
|
this->owner().db().time().timeName(),
|
||||||
"uniform"/cloud::prefix/owner_.name(),
|
"uniform"/cloud::prefix/this->owner().name(),
|
||||||
owner_.db(),
|
this->owner().db(),
|
||||||
IOobject::MUST_READ_IF_MODIFIED,
|
IOobject::MUST_READ_IF_MODIFIED,
|
||||||
IOobject::NO_WRITE,
|
IOobject::NO_WRITE,
|
||||||
false
|
false
|
||||||
@ -60,16 +60,16 @@ void Foam::InjectionModel<CloudType>::readProps()
|
|||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
void Foam::InjectionModel<CloudType>::writeProps()
|
void Foam::InjectionModel<CloudType>::writeProps()
|
||||||
{
|
{
|
||||||
if (owner_.db().time().outputTime())
|
if (this->owner().db().time().outputTime())
|
||||||
{
|
{
|
||||||
IOdictionary propsDict
|
IOdictionary propsDict
|
||||||
(
|
(
|
||||||
IOobject
|
IOobject
|
||||||
(
|
(
|
||||||
"injectionProperties",
|
"injectionProperties",
|
||||||
owner_.db().time().timeName(),
|
this->owner().db().time().timeName(),
|
||||||
"uniform"/cloud::prefix/owner_.name(),
|
"uniform"/cloud::prefix/this->owner().name(),
|
||||||
owner_.db(),
|
this->owner().db(),
|
||||||
IOobject::NO_READ,
|
IOobject::NO_READ,
|
||||||
IOobject::NO_WRITE,
|
IOobject::NO_WRITE,
|
||||||
false
|
false
|
||||||
@ -86,6 +86,58 @@ void Foam::InjectionModel<CloudType>::writeProps()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::label Foam::InjectionModel<CloudType>::parcelsToInject
|
||||||
|
(
|
||||||
|
const scalar time0,
|
||||||
|
const scalar time1
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
notImplemented
|
||||||
|
(
|
||||||
|
"Foam::label Foam::InjectionModel<CloudType>::parcelsToInject"
|
||||||
|
"("
|
||||||
|
"const scalar, "
|
||||||
|
"const scalar"
|
||||||
|
") const"
|
||||||
|
);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::scalar Foam::InjectionModel<CloudType>::volumeToInject
|
||||||
|
(
|
||||||
|
const scalar time0,
|
||||||
|
const scalar time1
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
notImplemented
|
||||||
|
(
|
||||||
|
"Foam::scalar Foam::InjectionModel<CloudType>::volumeToInject"
|
||||||
|
"("
|
||||||
|
"const scalar, "
|
||||||
|
"const scalar"
|
||||||
|
") const"
|
||||||
|
);
|
||||||
|
|
||||||
|
return 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
bool Foam::InjectionModel<CloudType>::validInjection(const label parcelI)
|
||||||
|
{
|
||||||
|
notImplemented
|
||||||
|
(
|
||||||
|
"bool Foam::InjectionModel<CloudType>::validInjection(const label)"
|
||||||
|
);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
void Foam::InjectionModel<CloudType>::prepareForNextTimeStep
|
void Foam::InjectionModel<CloudType>::prepareForNextTimeStep
|
||||||
(
|
(
|
||||||
@ -138,11 +190,11 @@ bool Foam::InjectionModel<CloudType>::findCellAtPosition
|
|||||||
bool errorOnNotFound
|
bool errorOnNotFound
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
const volVectorField& cellCentres = owner_.mesh().C();
|
const volVectorField& cellCentres = this->owner().mesh().C();
|
||||||
|
|
||||||
const vector p0 = position;
|
const vector p0 = position;
|
||||||
|
|
||||||
owner_.findCellFacePt
|
this->owner().findCellFacePt
|
||||||
(
|
(
|
||||||
position,
|
position,
|
||||||
cellI,
|
cellI,
|
||||||
@ -172,13 +224,13 @@ bool Foam::InjectionModel<CloudType>::findCellAtPosition
|
|||||||
// probably on an edge
|
// probably on an edge
|
||||||
if (procI == -1)
|
if (procI == -1)
|
||||||
{
|
{
|
||||||
cellI = owner_.mesh().findNearestCell(position);
|
cellI = this->owner().mesh().findNearestCell(position);
|
||||||
|
|
||||||
if (cellI >= 0)
|
if (cellI >= 0)
|
||||||
{
|
{
|
||||||
position += SMALL*(cellCentres[cellI] - position);
|
position += SMALL*(cellCentres[cellI] - position);
|
||||||
|
|
||||||
if (owner_.mesh().pointInCell(position, cellI))
|
if (this->owner().mesh().pointInCell(position, cellI))
|
||||||
{
|
{
|
||||||
procI = Pstream::myProcNo();
|
procI = Pstream::myProcNo();
|
||||||
}
|
}
|
||||||
@ -283,7 +335,7 @@ void Foam::InjectionModel<CloudType>::postInjectCheck
|
|||||||
if (allParcelsAdded > 0)
|
if (allParcelsAdded > 0)
|
||||||
{
|
{
|
||||||
Info<< nl
|
Info<< nl
|
||||||
<< "--> Cloud: " << owner_.name() << nl
|
<< "--> Cloud: " << this->owner().name() << nl
|
||||||
<< " Added " << allParcelsAdded << " new parcels" << nl << endl;
|
<< " Added " << allParcelsAdded << " new parcels" << nl << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -294,7 +346,7 @@ void Foam::InjectionModel<CloudType>::postInjectCheck
|
|||||||
massInjected_ += returnReduce(massAdded, sumOp<scalar>());
|
massInjected_ += returnReduce(massAdded, sumOp<scalar>());
|
||||||
|
|
||||||
// Update time for start of next injection
|
// Update time for start of next injection
|
||||||
time0_ = owner_.db().time().value();
|
time0_ = this->owner().db().time().value();
|
||||||
|
|
||||||
// Increment number of injections
|
// Increment number of injections
|
||||||
nInjections_++;
|
nInjections_++;
|
||||||
@ -309,9 +361,7 @@ void Foam::InjectionModel<CloudType>::postInjectCheck
|
|||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
Foam::InjectionModel<CloudType>::InjectionModel(CloudType& owner)
|
Foam::InjectionModel<CloudType>::InjectionModel(CloudType& owner)
|
||||||
:
|
:
|
||||||
dict_(dictionary::null),
|
SubModelBase<CloudType>(owner),
|
||||||
owner_(owner),
|
|
||||||
coeffDict_(dictionary::null),
|
|
||||||
SOI_(0.0),
|
SOI_(0.0),
|
||||||
volumeTotal_(0.0),
|
volumeTotal_(0.0),
|
||||||
massTotal_(0.0),
|
massTotal_(0.0),
|
||||||
@ -335,12 +385,10 @@ Foam::InjectionModel<CloudType>::InjectionModel
|
|||||||
const word& type
|
const word& type
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
dict_(dict),
|
SubModelBase<CloudType>(owner, dict, type),
|
||||||
owner_(owner),
|
SOI_(readScalar(this->coeffDict().lookup("SOI"))),
|
||||||
coeffDict_(dict.subDict(type + "Coeffs")),
|
|
||||||
SOI_(readScalar(coeffDict_.lookup("SOI"))),
|
|
||||||
volumeTotal_(0.0),
|
volumeTotal_(0.0),
|
||||||
massTotal_(dimensionedScalar(coeffDict_.lookup("massTotal")).value()),
|
massTotal_(readScalar(this->coeffDict().lookup("massTotal"))),
|
||||||
massInjected_(0.0),
|
massInjected_(0.0),
|
||||||
nInjections_(0),
|
nInjections_(0),
|
||||||
parcelsAddedTotal_(0),
|
parcelsAddedTotal_(0),
|
||||||
@ -355,7 +403,7 @@ Foam::InjectionModel<CloudType>::InjectionModel
|
|||||||
Info<< " Constructing " << owner.mesh().nGeometricD() << "-D injection"
|
Info<< " Constructing " << owner.mesh().nGeometricD() << "-D injection"
|
||||||
<< endl;
|
<< endl;
|
||||||
|
|
||||||
const word parcelBasisType = coeffDict_.lookup("parcelBasisType");
|
const word parcelBasisType = this->coeffDict().lookup("parcelBasisType");
|
||||||
|
|
||||||
if (parcelBasisType == "mass")
|
if (parcelBasisType == "mass")
|
||||||
{
|
{
|
||||||
@ -373,7 +421,7 @@ Foam::InjectionModel<CloudType>::InjectionModel
|
|||||||
<< "variable now does not determine anything."
|
<< "variable now does not determine anything."
|
||||||
<< endl;
|
<< endl;
|
||||||
|
|
||||||
nParticleFixed_ = readScalar(coeffDict_.lookup("nParticle"));
|
nParticleFixed_ = readScalar(this->coeffDict().lookup("nParticle"));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -393,6 +441,26 @@ Foam::InjectionModel<CloudType>::InjectionModel
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::InjectionModel<CloudType>::InjectionModel
|
||||||
|
(
|
||||||
|
const InjectionModel<CloudType>& im
|
||||||
|
)
|
||||||
|
:
|
||||||
|
SubModelBase<CloudType>(im),
|
||||||
|
SOI_(im.SOI_),
|
||||||
|
volumeTotal_(im.volumeTotal_),
|
||||||
|
massTotal_(im.massTotal_),
|
||||||
|
massInjected_(im.massInjected_),
|
||||||
|
nInjections_(im.nInjections_),
|
||||||
|
parcelsAddedTotal_(im.parcelsAddedTotal_),
|
||||||
|
parcelBasis_(im.parcelBasis_),
|
||||||
|
nParticleFixed_(im.nParticleFixed_),
|
||||||
|
time0_(im.time0_),
|
||||||
|
timeStep0_(im.timeStep0_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
@ -402,18 +470,30 @@ Foam::InjectionModel<CloudType>::~InjectionModel()
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::scalar Foam::InjectionModel<CloudType>::timeEnd() const
|
||||||
|
{
|
||||||
|
notImplemented
|
||||||
|
(
|
||||||
|
"Foam::scalar Foam::InjectionModel<CloudType>::timeEnd() const"
|
||||||
|
);
|
||||||
|
|
||||||
|
return 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
template<class TrackData>
|
template<class TrackData>
|
||||||
void Foam::InjectionModel<CloudType>::inject(TrackData& td)
|
void Foam::InjectionModel<CloudType>::inject(TrackData& td)
|
||||||
{
|
{
|
||||||
if (!active())
|
if (this->active())
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const scalar time = owner_.db().time().value();
|
const scalar time = this->owner().db().time().value();
|
||||||
const scalar carrierDt = owner_.db().time().deltaTValue();
|
const scalar carrierDt = this->owner().db().time().deltaTValue();
|
||||||
const polyMesh& mesh = owner_.mesh();
|
const polyMesh& mesh = this->owner().mesh();
|
||||||
|
|
||||||
// Prepare for next time step
|
// Prepare for next time step
|
||||||
label parcelsAdded = 0;
|
label parcelsAdded = 0;
|
||||||
@ -512,6 +592,68 @@ void Foam::InjectionModel<CloudType>::inject(TrackData& td)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
void Foam::InjectionModel<CloudType>::setPositionAndCell
|
||||||
|
(
|
||||||
|
const label parcelI,
|
||||||
|
const label nParcels,
|
||||||
|
const scalar time,
|
||||||
|
vector& position,
|
||||||
|
label& cellOwner,
|
||||||
|
label& tetFaceI,
|
||||||
|
label& tetPtI
|
||||||
|
)
|
||||||
|
{
|
||||||
|
notImplemented
|
||||||
|
(
|
||||||
|
"void Foam::InjectionModel<CloudType>::setPositionAndCell"
|
||||||
|
"("
|
||||||
|
"const label, "
|
||||||
|
"const label, "
|
||||||
|
"const scalar, "
|
||||||
|
"vector&, "
|
||||||
|
"label&, "
|
||||||
|
"label&, "
|
||||||
|
"label&"
|
||||||
|
")"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
void Foam::InjectionModel<CloudType>::setProperties
|
||||||
|
(
|
||||||
|
const label parcelI,
|
||||||
|
const label nParcels,
|
||||||
|
const scalar time,
|
||||||
|
typename CloudType::parcelType& parcel
|
||||||
|
)
|
||||||
|
{
|
||||||
|
notImplemented
|
||||||
|
(
|
||||||
|
"void Foam::InjectionModel<CloudType>::setProperties"
|
||||||
|
"("
|
||||||
|
"const label, "
|
||||||
|
"const label, "
|
||||||
|
"const scalar, "
|
||||||
|
"typename CloudType::parcelType&"
|
||||||
|
")"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
bool Foam::InjectionModel<CloudType>::fullyDescribed() const
|
||||||
|
{
|
||||||
|
notImplemented
|
||||||
|
(
|
||||||
|
"bool Foam::InjectionModel<CloudType>::fullyDescribed() const"
|
||||||
|
);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
void Foam::InjectionModel<CloudType>::info(Ostream& os) const
|
void Foam::InjectionModel<CloudType>::info(Ostream& os) const
|
||||||
{
|
{
|
||||||
|
|||||||
@ -51,6 +51,7 @@ SourceFiles
|
|||||||
#include "IOdictionary.H"
|
#include "IOdictionary.H"
|
||||||
#include "autoPtr.H"
|
#include "autoPtr.H"
|
||||||
#include "runTimeSelectionTables.H"
|
#include "runTimeSelectionTables.H"
|
||||||
|
#include "SubModelBase.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -63,6 +64,8 @@ namespace Foam
|
|||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
class InjectionModel
|
class InjectionModel
|
||||||
|
:
|
||||||
|
public SubModelBase<CloudType>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -80,18 +83,6 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
// Private data
|
|
||||||
|
|
||||||
//- The cloud dictionary
|
|
||||||
const dictionary& dict_;
|
|
||||||
|
|
||||||
//- Reference to the owner cloud class
|
|
||||||
CloudType& owner_;
|
|
||||||
|
|
||||||
//- The coefficients dictionary
|
|
||||||
const dictionary coeffDict_;
|
|
||||||
|
|
||||||
|
|
||||||
// Private Member Functions
|
// Private Member Functions
|
||||||
|
|
||||||
//- Read injector properties from previous run (if applicable)
|
//- Read injector properties from previous run (if applicable)
|
||||||
@ -156,18 +147,18 @@ protected:
|
|||||||
(
|
(
|
||||||
const scalar time0,
|
const scalar time0,
|
||||||
const scalar time1
|
const scalar time1
|
||||||
) = 0;
|
) const;
|
||||||
|
|
||||||
//- Volume of parcels to introduce over the time step relative to SOI
|
//- Volume of parcels to introduce over the time step relative to SOI
|
||||||
virtual scalar volumeToInject
|
virtual scalar volumeToInject
|
||||||
(
|
(
|
||||||
const scalar time0,
|
const scalar time0,
|
||||||
const scalar time1
|
const scalar time1
|
||||||
) = 0;
|
) const;
|
||||||
|
|
||||||
//- Additional flag to identify whether or not injection of parcelI is
|
//- Additional flag to identify whether or not injection of parcelI is
|
||||||
// permitted
|
// permitted
|
||||||
virtual bool validInjection(const label parcelI) = 0;
|
virtual bool validInjection(const label parcelI);
|
||||||
|
|
||||||
//- Determine properties for next time step/injection interval
|
//- Determine properties for next time step/injection interval
|
||||||
virtual void prepareForNextTimeStep
|
virtual void prepareForNextTimeStep
|
||||||
@ -238,6 +229,18 @@ public:
|
|||||||
const word& type
|
const word& type
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
InjectionModel(const InjectionModel<CloudType>& im);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<InjectionModel<CloudType> > clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<InjectionModel<CloudType> >
|
||||||
|
(
|
||||||
|
new InjectionModel<CloudType>(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~InjectionModel();
|
virtual ~InjectionModel();
|
||||||
@ -251,27 +254,8 @@ public:
|
|||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
// Access
|
|
||||||
|
|
||||||
//- Return the owner cloud dictionary
|
|
||||||
inline const dictionary& dict() const;
|
|
||||||
|
|
||||||
//- Return const access the owner cloud object
|
|
||||||
inline const CloudType& owner() const;
|
|
||||||
|
|
||||||
//- Return non-const access the owner cloud object for manipulation
|
|
||||||
inline CloudType& owner();
|
|
||||||
|
|
||||||
//- Return the coefficients dictionary
|
|
||||||
inline const dictionary& coeffDict() const;
|
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Flag to indicate whether model activates injection model
|
|
||||||
virtual bool active() const = 0;
|
|
||||||
|
|
||||||
|
|
||||||
// Global information
|
// Global information
|
||||||
|
|
||||||
//- Return the start-of-injection time
|
//- Return the start-of-injection time
|
||||||
@ -287,7 +271,7 @@ public:
|
|||||||
inline scalar massInjected() const;
|
inline scalar massInjected() const;
|
||||||
|
|
||||||
//- Return the end-of-injection time
|
//- Return the end-of-injection time
|
||||||
virtual scalar timeEnd() const = 0;
|
virtual scalar timeEnd() const;
|
||||||
|
|
||||||
// Counters
|
// Counters
|
||||||
|
|
||||||
@ -317,7 +301,7 @@ public:
|
|||||||
label& cellOwner,
|
label& cellOwner,
|
||||||
label& tetFaceI,
|
label& tetFaceI,
|
||||||
label& tetPtI
|
label& tetPtI
|
||||||
) = 0;
|
);
|
||||||
|
|
||||||
//- Set the parcel properties
|
//- Set the parcel properties
|
||||||
virtual void setProperties
|
virtual void setProperties
|
||||||
@ -326,15 +310,15 @@ public:
|
|||||||
const label nParcels,
|
const label nParcels,
|
||||||
const scalar time,
|
const scalar time,
|
||||||
typename CloudType::parcelType& parcel
|
typename CloudType::parcelType& parcel
|
||||||
) = 0;
|
);
|
||||||
|
|
||||||
//- Flag to identify whether model fully describes the parcel
|
//- Flag to identify whether model fully describes the parcel
|
||||||
virtual bool fullyDescribed() const = 0;
|
virtual bool fullyDescribed() const;
|
||||||
|
|
||||||
|
|
||||||
// I-O
|
// I-O
|
||||||
|
|
||||||
//- Write surface film info to stream
|
//- Write injection info to stream
|
||||||
virtual void info(Ostream& os) const;
|
virtual void info(Ostream& os) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -25,33 +25,7 @@ License
|
|||||||
|
|
||||||
#include "InjectionModel.H"
|
#include "InjectionModel.H"
|
||||||
|
|
||||||
template<class CloudType>
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
const Foam::dictionary& Foam::InjectionModel<CloudType>::dict() const
|
|
||||||
{
|
|
||||||
return dict_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
const CloudType& Foam::InjectionModel<CloudType>::owner() const
|
|
||||||
{
|
|
||||||
return owner_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
CloudType& Foam::InjectionModel<CloudType>::owner()
|
|
||||||
{
|
|
||||||
return owner_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
const Foam::dictionary& Foam::InjectionModel<CloudType>::coeffDict() const
|
|
||||||
{
|
|
||||||
return coeffDict_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
Foam::scalar Foam::InjectionModel<CloudType>::timeStart() const
|
Foam::scalar Foam::InjectionModel<CloudType>::timeStart() const
|
||||||
|
|||||||
@ -123,6 +123,23 @@ Foam::KinematicLookupTableInjection<CloudType>::KinematicLookupTableInjection
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::KinematicLookupTableInjection<CloudType>::KinematicLookupTableInjection
|
||||||
|
(
|
||||||
|
const KinematicLookupTableInjection<CloudType>& im
|
||||||
|
)
|
||||||
|
:
|
||||||
|
InjectionModel<CloudType>(im),
|
||||||
|
inputFileName_(im.inputFileName_),
|
||||||
|
duration_(im.duration_),
|
||||||
|
nParcelsPerSecond_(im.nParcelsPerSecond_),
|
||||||
|
injectors_(im.injectors_),
|
||||||
|
injectorCells_(im.injectorCells_),
|
||||||
|
injectorTetFaces_(im.injectorTetFaces_),
|
||||||
|
injectorTetPts_(im.injectorTetPts_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
@ -132,13 +149,6 @@ Foam::KinematicLookupTableInjection<CloudType>::~KinematicLookupTableInjection()
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
bool Foam::KinematicLookupTableInjection<CloudType>::active() const
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
Foam::scalar Foam::KinematicLookupTableInjection<CloudType>::timeEnd() const
|
Foam::scalar Foam::KinematicLookupTableInjection<CloudType>::timeEnd() const
|
||||||
{
|
{
|
||||||
|
|||||||
@ -96,18 +96,10 @@ protected:
|
|||||||
// Protected Member Functions
|
// Protected Member Functions
|
||||||
|
|
||||||
//- Number of parcels to introduce over the time step relative to SOI
|
//- Number of parcels to introduce over the time step relative to SOI
|
||||||
label parcelsToInject
|
virtual label parcelsToInject(const scalar time0, const scalar time1);
|
||||||
(
|
|
||||||
const scalar time0,
|
|
||||||
const scalar time1
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Volume of parcels to introduce over the time step relative to SOI
|
//- Volume of parcels to introduce over the time step relative to SOI
|
||||||
scalar volumeToInject
|
virtual scalar volumeToInject(const scalar time0, const scalar time1);
|
||||||
(
|
|
||||||
const scalar time0,
|
|
||||||
const scalar time1
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -119,12 +111,23 @@ public:
|
|||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from dictionary
|
//- Construct from dictionary
|
||||||
|
KinematicLookupTableInjection(const dictionary& dict, CloudType& owner);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
KinematicLookupTableInjection
|
KinematicLookupTableInjection
|
||||||
(
|
(
|
||||||
const dictionary& dict,
|
const KinematicLookupTableInjection<CloudType>& im
|
||||||
CloudType& owner
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<InjectionModel<CloudType> > clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<InjectionModel<CloudType> >
|
||||||
|
(
|
||||||
|
new KinematicLookupTableInjection<CloudType>(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~KinematicLookupTableInjection();
|
virtual ~KinematicLookupTableInjection();
|
||||||
@ -132,9 +135,6 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Flag to indicate whether model activates injection model
|
|
||||||
bool active() const;
|
|
||||||
|
|
||||||
//- Return the end-of-injection time
|
//- Return the end-of-injection time
|
||||||
scalar timeEnd() const;
|
scalar timeEnd() const;
|
||||||
|
|
||||||
|
|||||||
@ -157,6 +157,24 @@ Foam::ManualInjection<CloudType>::ManualInjection
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::ManualInjection<CloudType>::ManualInjection
|
||||||
|
(
|
||||||
|
const ManualInjection<CloudType>& im
|
||||||
|
)
|
||||||
|
:
|
||||||
|
InjectionModel<CloudType>(im),
|
||||||
|
positionsFile_(im.positionsFile_),
|
||||||
|
positions_(im.positions_),
|
||||||
|
diameters_(im.diameters_),
|
||||||
|
injectorCells_(im.injectorCells_),
|
||||||
|
injectorTetFaces_(im.injectorTetFaces_),
|
||||||
|
injectorTetPts_(im.injectorTetPts_),
|
||||||
|
U0_(im.U0_),
|
||||||
|
parcelPDF_(im.parcelPDF_().clone().ptr())
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
@ -166,13 +184,6 @@ Foam::ManualInjection<CloudType>::~ManualInjection()
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
bool Foam::ManualInjection<CloudType>::active() const
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
Foam::scalar Foam::ManualInjection<CloudType>::timeEnd() const
|
Foam::scalar Foam::ManualInjection<CloudType>::timeEnd() const
|
||||||
{
|
{
|
||||||
|
|||||||
@ -91,18 +91,10 @@ protected:
|
|||||||
// Protected Member Functions
|
// Protected Member Functions
|
||||||
|
|
||||||
//- Number of parcels to introduce over the time step relative to SOI
|
//- Number of parcels to introduce over the time step relative to SOI
|
||||||
label parcelsToInject
|
virtual label parcelsToInject(const scalar time0, const scalar time1);
|
||||||
(
|
|
||||||
const scalar time0,
|
|
||||||
const scalar time1
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Volume of parcels to introduce over the time step relative to SOI
|
//- Volume of parcels to introduce over the time step relative to SOI
|
||||||
scalar volumeToInject
|
virtual scalar volumeToInject(const scalar time0, const scalar time1);
|
||||||
(
|
|
||||||
const scalar time0,
|
|
||||||
const scalar time1
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -114,11 +106,19 @@ public:
|
|||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from dictionary
|
//- Construct from dictionary
|
||||||
ManualInjection
|
ManualInjection(const dictionary& dict, CloudType& owner);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
ManualInjection(const ManualInjection<CloudType>& im);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<InjectionModel<CloudType> > clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<InjectionModel<CloudType> >
|
||||||
(
|
(
|
||||||
const dictionary& dict,
|
new ManualInjection<CloudType>(*this)
|
||||||
CloudType& owner
|
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
@ -127,9 +127,6 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Flag to indicate whether model activates injection model
|
|
||||||
bool active() const;
|
|
||||||
|
|
||||||
//- Return the end-of-injection time
|
//- Return the end-of-injection time
|
||||||
scalar timeEnd() const;
|
scalar timeEnd() const;
|
||||||
|
|
||||||
|
|||||||
@ -63,6 +63,13 @@ Foam::NoInjection<CloudType>::NoInjection
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::NoInjection<CloudType>::NoInjection(const NoInjection<CloudType>& im)
|
||||||
|
:
|
||||||
|
InjectionModel<CloudType>(im.owner_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
|
|||||||
@ -56,18 +56,10 @@ protected:
|
|||||||
// Protected Member Functions
|
// Protected Member Functions
|
||||||
|
|
||||||
//- Number of parcels to introduce over the time step relative to SOI
|
//- Number of parcels to introduce over the time step relative to SOI
|
||||||
label parcelsToInject
|
virtual label parcelsToInject(const scalar, const scalar);
|
||||||
(
|
|
||||||
const scalar,
|
|
||||||
const scalar
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Volume of parcels to introduce over the time step relative to SOI
|
//- Volume of parcels to introduce over the time step relative to SOI
|
||||||
scalar volumeToInject
|
virtual scalar volumeToInject(const scalar, const scalar);
|
||||||
(
|
|
||||||
const scalar,
|
|
||||||
const scalar
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -79,11 +71,19 @@ public:
|
|||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from components
|
//- Construct from components
|
||||||
NoInjection
|
NoInjection(const dictionary&, CloudType&);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
NoInjection(const NoInjection<CloudType>& im);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<InjectionModel<CloudType> > clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<InjectionModel<CloudType> >
|
||||||
(
|
(
|
||||||
const dictionary&,
|
new NoInjection<CloudType>(*this)
|
||||||
CloudType&
|
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
|
|||||||
@ -76,6 +76,7 @@ Foam::PatchInjection<CloudType>::PatchInjection
|
|||||||
:
|
:
|
||||||
InjectionModel<CloudType>(dict, owner, typeName),
|
InjectionModel<CloudType>(dict, owner, typeName),
|
||||||
patchName_(this->coeffDict().lookup("patchName")),
|
patchName_(this->coeffDict().lookup("patchName")),
|
||||||
|
patchId_(owner.mesh().boundaryMesh().findPatchID(patchName_)),
|
||||||
duration_(readScalar(this->coeffDict().lookup("duration"))),
|
duration_(readScalar(this->coeffDict().lookup("duration"))),
|
||||||
parcelsPerSecond_
|
parcelsPerSecond_
|
||||||
(
|
(
|
||||||
@ -84,26 +85,16 @@ Foam::PatchInjection<CloudType>::PatchInjection
|
|||||||
U0_(this->coeffDict().lookup("U0")),
|
U0_(this->coeffDict().lookup("U0")),
|
||||||
flowRateProfile_
|
flowRateProfile_
|
||||||
(
|
(
|
||||||
DataEntry<scalar>::New
|
DataEntry<scalar>::New("flowRateProfile", this->coeffDict())
|
||||||
(
|
|
||||||
"flowRateProfile",
|
|
||||||
this->coeffDict()
|
|
||||||
)
|
|
||||||
),
|
),
|
||||||
parcelPDF_
|
parcelPDF_
|
||||||
(
|
(
|
||||||
pdfs::pdf::New
|
pdfs::pdf::New(this->coeffDict().subDict("parcelPDF"), owner.rndGen())
|
||||||
(
|
|
||||||
this->coeffDict().subDict("parcelPDF"),
|
|
||||||
owner.rndGen()
|
|
||||||
)
|
|
||||||
),
|
),
|
||||||
injectorCells_(),
|
cellOwners_(),
|
||||||
fraction_(1.0)
|
fraction_(1.0)
|
||||||
{
|
{
|
||||||
const label patchId = owner.mesh().boundaryMesh().findPatchID(patchName_);
|
if (patchId_ < 0)
|
||||||
|
|
||||||
if (patchId < 0)
|
|
||||||
{
|
{
|
||||||
FatalErrorIn
|
FatalErrorIn
|
||||||
(
|
(
|
||||||
@ -117,11 +108,11 @@ Foam::PatchInjection<CloudType>::PatchInjection
|
|||||||
<< nl << exit(FatalError);
|
<< nl << exit(FatalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
const polyPatch& patch = owner.mesh().boundaryMesh()[patchId];
|
const polyPatch& patch = owner.mesh().boundaryMesh()[patchId_];
|
||||||
|
|
||||||
injectorCells_ = patch.faceCells();
|
cellOwners_ = patch.faceCells();
|
||||||
|
|
||||||
label patchSize = injectorCells_.size();
|
label patchSize = cellOwners_.size();
|
||||||
label totalPatchSize = patchSize;
|
label totalPatchSize = patchSize;
|
||||||
reduce(totalPatchSize, sumOp<label>());
|
reduce(totalPatchSize, sumOp<label>());
|
||||||
fraction_ = scalar(patchSize)/totalPatchSize;
|
fraction_ = scalar(patchSize)/totalPatchSize;
|
||||||
@ -132,6 +123,25 @@ Foam::PatchInjection<CloudType>::PatchInjection
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::PatchInjection<CloudType>::PatchInjection
|
||||||
|
(
|
||||||
|
const PatchInjection<CloudType>& im
|
||||||
|
)
|
||||||
|
:
|
||||||
|
InjectionModel<CloudType>(im),
|
||||||
|
patchName_(im.patchName_),
|
||||||
|
patchId_(im.patchId_),
|
||||||
|
duration_(im.duration_),
|
||||||
|
parcelsPerSecond_(im.parcelsPerSecond_),
|
||||||
|
U0_(im.U0_),
|
||||||
|
flowRateProfile_(im.flowRateProfile_().clone().ptr()),
|
||||||
|
parcelPDF_(im.parcelPDF_().clone().ptr()),
|
||||||
|
cellOwners_(im.cellOwners_),
|
||||||
|
fraction_(im.fraction_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
@ -141,13 +151,6 @@ Foam::PatchInjection<CloudType>::~PatchInjection()
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
bool Foam::PatchInjection<CloudType>::active() const
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
Foam::scalar Foam::PatchInjection<CloudType>::timeEnd() const
|
Foam::scalar Foam::PatchInjection<CloudType>::timeEnd() const
|
||||||
{
|
{
|
||||||
@ -167,26 +170,29 @@ void Foam::PatchInjection<CloudType>::setPositionAndCell
|
|||||||
label& tetPtI
|
label& tetPtI
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (injectorCells_.size() > 0)
|
if (cellOwners_.size() > 0)
|
||||||
{
|
{
|
||||||
label cellI = this->owner().rndGen().integer
|
cachedRandom& rnd = this->owner().rndGen();
|
||||||
(
|
label cellI = rnd.position<label>(0, cellOwners_.size() - 1);
|
||||||
0,
|
|
||||||
injectorCells_.size() - 1
|
|
||||||
);
|
|
||||||
|
|
||||||
cellOwner = injectorCells_[cellI];
|
cellOwner = cellOwners_[cellI];
|
||||||
|
|
||||||
// The position is at the cell centre, which could be in any
|
// The position is between the face and cell centre, which could be
|
||||||
// tet of the decomposed cell, so arbitrarily choose the first
|
// in any tet of the decomposed cell, so arbitrarily choose the first
|
||||||
// face of the cell as the tetFace and the first point after
|
// face of the cell as the tetFace and the first point after the base
|
||||||
// the base point on the face as the tetPt. The tracking will
|
// point on the face as the tetPt. The tracking will pick the cell
|
||||||
// pick the cell consistent with the motion in the first
|
// consistent with the motion in the firsttracking step.
|
||||||
// tracking step.
|
|
||||||
tetFaceI = this->owner().mesh().cells()[cellOwner][0];
|
tetFaceI = this->owner().mesh().cells()[cellOwner][0];
|
||||||
tetPtI = 1;
|
tetPtI = 1;
|
||||||
|
|
||||||
position = this->owner().mesh().C()[cellOwner];
|
// position perturbed between cell and patch face centres
|
||||||
|
const vector& pc = this->owner().mesh().C()[cellOwner];
|
||||||
|
const vector& pf =
|
||||||
|
this->owner().mesh().Cf().boundaryField()[patchId_][cellI];
|
||||||
|
|
||||||
|
const scalar a = rnd.sample01<scalar>();
|
||||||
|
const vector d = pf - pc;
|
||||||
|
position = pc + 0.5*a*d;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@ -70,6 +70,9 @@ class PatchInjection
|
|||||||
//- Name of patch
|
//- Name of patch
|
||||||
const word patchName_;
|
const word patchName_;
|
||||||
|
|
||||||
|
//- Id of patch
|
||||||
|
const label patchId_;
|
||||||
|
|
||||||
//- Injection duration [s]
|
//- Injection duration [s]
|
||||||
const scalar duration_;
|
const scalar duration_;
|
||||||
|
|
||||||
@ -86,7 +89,7 @@ class PatchInjection
|
|||||||
const autoPtr<pdfs::pdf> parcelPDF_;
|
const autoPtr<pdfs::pdf> parcelPDF_;
|
||||||
|
|
||||||
//- List of cell labels corresponding to injector positions
|
//- List of cell labels corresponding to injector positions
|
||||||
labelList injectorCells_;
|
labelList cellOwners_;
|
||||||
|
|
||||||
//- Fraction of injection controlled by this processor
|
//- Fraction of injection controlled by this processor
|
||||||
scalar fraction_;
|
scalar fraction_;
|
||||||
@ -97,18 +100,10 @@ protected:
|
|||||||
// Protected Member Functions
|
// Protected Member Functions
|
||||||
|
|
||||||
//- Number of parcels to introduce over the time step relative to SOI
|
//- Number of parcels to introduce over the time step relative to SOI
|
||||||
label parcelsToInject
|
virtual label parcelsToInject(const scalar time0, const scalar time1);
|
||||||
(
|
|
||||||
const scalar time0,
|
|
||||||
const scalar time1
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Volume of parcels to introduce over the time step relative to SOI
|
//- Volume of parcels to introduce over the time step relative to SOI
|
||||||
scalar volumeToInject
|
virtual scalar volumeToInject(const scalar time0, const scalar time1);
|
||||||
(
|
|
||||||
const scalar time0,
|
|
||||||
const scalar time1
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -120,11 +115,19 @@ public:
|
|||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from dictionary
|
//- Construct from dictionary
|
||||||
PatchInjection
|
PatchInjection(const dictionary& dict, CloudType& owner);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
PatchInjection(const PatchInjection<CloudType>& im);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<InjectionModel<CloudType> > clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<InjectionModel<CloudType> >
|
||||||
(
|
(
|
||||||
const dictionary& dict,
|
new PatchInjection<CloudType>(*this)
|
||||||
CloudType& owner
|
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
@ -133,9 +136,6 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Flag to indicate whether model activates injection model
|
|
||||||
bool active() const;
|
|
||||||
|
|
||||||
//- Return the end-of-injection time
|
//- Return the end-of-injection time
|
||||||
scalar timeEnd() const;
|
scalar timeEnd() const;
|
||||||
|
|
||||||
|
|||||||
@ -55,16 +55,16 @@ Foam::LocalInteraction<CloudType>::LocalInteraction
|
|||||||
)
|
)
|
||||||
:
|
:
|
||||||
PatchInteractionModel<CloudType>(dict, cloud, typeName),
|
PatchInteractionModel<CloudType>(dict, cloud, typeName),
|
||||||
patchProperties_(this->coeffDict().lookup("patches")),
|
patchData_(this->coeffDict().lookup("patches")),
|
||||||
patchIds_(patchProperties_.size())
|
patchIds_(patchData_.size())
|
||||||
{
|
{
|
||||||
const polyMesh& mesh = cloud.mesh();
|
const polyMesh& mesh = cloud.mesh();
|
||||||
const polyBoundaryMesh& bMesh = mesh.boundaryMesh();
|
const polyBoundaryMesh& bMesh = mesh.boundaryMesh();
|
||||||
|
|
||||||
// check that user patches are valid region patches
|
// check that user patches are valid region patches
|
||||||
forAll(patchProperties_, patchI)
|
forAll(patchData_, patchI)
|
||||||
{
|
{
|
||||||
const word& patchName = patchProperties_[patchI].patchName();
|
const word& patchName = patchData_[patchI].patchName();
|
||||||
patchIds_[patchI] = bMesh.findPatchID(patchName);
|
patchIds_[patchI] = bMesh.findPatchID(patchName);
|
||||||
if (patchIds_[patchI] < 0)
|
if (patchIds_[patchI] < 0)
|
||||||
{
|
{
|
||||||
@ -97,16 +97,16 @@ Foam::LocalInteraction<CloudType>::LocalInteraction
|
|||||||
}
|
}
|
||||||
|
|
||||||
// check that interactions are valid/specified
|
// check that interactions are valid/specified
|
||||||
forAll(patchProperties_, patchI)
|
forAll(patchData_, patchI)
|
||||||
{
|
{
|
||||||
const word& interactionTypeName =
|
const word& interactionTypeName =
|
||||||
patchProperties_[patchI].interactionTypeName();
|
patchData_[patchI].interactionTypeName();
|
||||||
const typename PatchInteractionModel<CloudType>::interactionType& it =
|
const typename PatchInteractionModel<CloudType>::interactionType& it =
|
||||||
this->wordToInteractionType(interactionTypeName);
|
this->wordToInteractionType(interactionTypeName);
|
||||||
|
|
||||||
if (it == PatchInteractionModel<CloudType>::itOther)
|
if (it == PatchInteractionModel<CloudType>::itOther)
|
||||||
{
|
{
|
||||||
const word& patchName = patchProperties_[patchI].patchName();
|
const word& patchName = patchData_[patchI].patchName();
|
||||||
FatalErrorIn("LocalInteraction(const dictionary&, CloudType&)")
|
FatalErrorIn("LocalInteraction(const dictionary&, CloudType&)")
|
||||||
<< "Unknown patch interaction type "
|
<< "Unknown patch interaction type "
|
||||||
<< interactionTypeName << " for patch " << patchName
|
<< interactionTypeName << " for patch " << patchName
|
||||||
@ -118,6 +118,18 @@ Foam::LocalInteraction<CloudType>::LocalInteraction
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::LocalInteraction<CloudType>::LocalInteraction
|
||||||
|
(
|
||||||
|
const LocalInteraction<CloudType>& pim
|
||||||
|
)
|
||||||
|
:
|
||||||
|
PatchInteractionModel<CloudType>(pim),
|
||||||
|
patchData_(pim.patchData_),
|
||||||
|
patchIds_(pim.patchIds_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template <class CloudType>
|
template <class CloudType>
|
||||||
@ -127,13 +139,6 @@ Foam::LocalInteraction<CloudType>::~LocalInteraction()
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
bool Foam::LocalInteraction<CloudType>::active() const
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template <class CloudType>
|
template <class CloudType>
|
||||||
bool Foam::LocalInteraction<CloudType>::correct
|
bool Foam::LocalInteraction<CloudType>::correct
|
||||||
(
|
(
|
||||||
@ -155,7 +160,7 @@ bool Foam::LocalInteraction<CloudType>::correct
|
|||||||
typename PatchInteractionModel<CloudType>::interactionType it =
|
typename PatchInteractionModel<CloudType>::interactionType it =
|
||||||
this->wordToInteractionType
|
this->wordToInteractionType
|
||||||
(
|
(
|
||||||
patchProperties_[patchI].interactionTypeName()
|
patchData_[patchI].interactionTypeName()
|
||||||
);
|
);
|
||||||
|
|
||||||
switch (it)
|
switch (it)
|
||||||
@ -192,10 +197,10 @@ bool Foam::LocalInteraction<CloudType>::correct
|
|||||||
|
|
||||||
if (Un > 0)
|
if (Un > 0)
|
||||||
{
|
{
|
||||||
U -= (1.0 + patchProperties_[patchI].e())*Un*nw;
|
U -= (1.0 + patchData_[patchI].e())*Un*nw;
|
||||||
}
|
}
|
||||||
|
|
||||||
U -= patchProperties_[patchI].mu()*Ut;
|
U -= patchData_[patchI].mu()*Ut;
|
||||||
|
|
||||||
// Return velocity to global space
|
// Return velocity to global space
|
||||||
U += Up;
|
U += Up;
|
||||||
@ -208,15 +213,16 @@ bool Foam::LocalInteraction<CloudType>::correct
|
|||||||
(
|
(
|
||||||
"bool LocalInteraction<CloudType>::correct"
|
"bool LocalInteraction<CloudType>::correct"
|
||||||
"("
|
"("
|
||||||
|
"typename CloudType::parcelType&, "
|
||||||
"const polyPatch&, "
|
"const polyPatch&, "
|
||||||
"const label, "
|
|
||||||
"bool&, "
|
"bool&, "
|
||||||
"vector&"
|
"scalar&, "
|
||||||
|
"const tetIndices&"
|
||||||
") const"
|
") const"
|
||||||
) << "Unknown interaction type "
|
) << "Unknown interaction type "
|
||||||
<< patchProperties_[patchI].interactionTypeName()
|
<< patchData_[patchI].interactionTypeName()
|
||||||
<< "(" << it << ") for patch "
|
<< "(" << it << ") for patch "
|
||||||
<< patchProperties_[patchI].patchName()
|
<< patchData_[patchI].patchName()
|
||||||
<< ". Valid selections are:" << this->interactionTypeNames_
|
<< ". Valid selections are:" << this->interactionTypeNames_
|
||||||
<< endl << abort(FatalError);
|
<< endl << abort(FatalError);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -51,7 +51,7 @@ class LocalInteraction
|
|||||||
// Private data
|
// Private data
|
||||||
|
|
||||||
//- List of participating patches
|
//- List of participating patches
|
||||||
const List<patchInteractionData> patchProperties_;
|
const List<patchInteractionData> patchData_;
|
||||||
|
|
||||||
//- List of participating patch ids
|
//- List of participating patch ids
|
||||||
List<label> patchIds_;
|
List<label> patchIds_;
|
||||||
@ -73,7 +73,19 @@ public:
|
|||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from dictionary
|
//- Construct from dictionary
|
||||||
LocalInteraction(const dictionary& dict, CloudType& cloud);
|
LocalInteraction(const dictionary& dict, CloudType& owner);
|
||||||
|
|
||||||
|
//- Construct copy from owner cloud and patch interaction model
|
||||||
|
LocalInteraction(const LocalInteraction<CloudType>& pim);
|
||||||
|
|
||||||
|
//- Construct and return a clone using supplied owner cloud
|
||||||
|
virtual autoPtr<PatchInteractionModel<CloudType> > clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<PatchInteractionModel<CloudType> >
|
||||||
|
(
|
||||||
|
new LocalInteraction<CloudType>(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
@ -82,9 +94,6 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Flag to indicate whether model activates patch interaction model
|
|
||||||
virtual bool active() const;
|
|
||||||
|
|
||||||
//- Apply velocity correction
|
//- Apply velocity correction
|
||||||
// Returns true if particle remains in same cell
|
// Returns true if particle remains in same cell
|
||||||
virtual bool correct
|
virtual bool correct
|
||||||
|
|||||||
@ -103,46 +103,7 @@ public:
|
|||||||
Istream& is,
|
Istream& is,
|
||||||
patchInteractionData& pid
|
patchInteractionData& pid
|
||||||
);
|
);
|
||||||
/* {
|
};
|
||||||
is.check
|
|
||||||
(
|
|
||||||
"Istream& operator>>"
|
|
||||||
"(Istream&, patchInteractionData&)"
|
|
||||||
);
|
|
||||||
|
|
||||||
const dictionaryEntry entry(dictionary::null, is);
|
|
||||||
|
|
||||||
pid.patchName_ = entry.keyword();
|
|
||||||
entry.lookup("type") >> pid.interactionTypeName_;
|
|
||||||
pid.e_ = entry.lookupOrDefault<scalar>("e", 1.0);
|
|
||||||
pid.mu_ = entry.lookupOrDefault<scalar>("mu", 0.0);
|
|
||||||
|
|
||||||
if
|
|
||||||
(
|
|
||||||
PatchInteractionModel<CloudType>::wordToInteractionType
|
|
||||||
(
|
|
||||||
pid.interactionTypeName_
|
|
||||||
)
|
|
||||||
== PatchInteractionModel<CloudType>::itOther)
|
|
||||||
{
|
|
||||||
FatalErrorIn
|
|
||||||
(
|
|
||||||
"friend Istream& operator>>"
|
|
||||||
"("
|
|
||||||
"Istream&, "
|
|
||||||
"patchInteractionData&"
|
|
||||||
")"
|
|
||||||
) << "Unknown patch interaction type "
|
|
||||||
<< pid.interactionTypeName_
|
|
||||||
<< ". Valid selections are:"
|
|
||||||
<< PatchInteractionModel<CloudType>::
|
|
||||||
interactionTypeNames_
|
|
||||||
<< endl << abort(FatalError);
|
|
||||||
}
|
|
||||||
|
|
||||||
return is;
|
|
||||||
}
|
|
||||||
*/};
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -104,6 +104,17 @@ Foam::PatchInteractionModel<CloudType>::wordToInteractionType
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::PatchInteractionModel<CloudType>::PatchInteractionModel
|
||||||
|
(
|
||||||
|
CloudType& owner
|
||||||
|
)
|
||||||
|
:
|
||||||
|
SubModelBase<CloudType>(owner),
|
||||||
|
UName_("unknown_UName")
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
Foam::PatchInteractionModel<CloudType>::PatchInteractionModel
|
Foam::PatchInteractionModel<CloudType>::PatchInteractionModel
|
||||||
(
|
(
|
||||||
@ -112,10 +123,20 @@ Foam::PatchInteractionModel<CloudType>::PatchInteractionModel
|
|||||||
const word& type
|
const word& type
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
dict_(dict),
|
SubModelBase<CloudType>(owner, dict, type),
|
||||||
owner_(owner),
|
// UName_(this->coeffDict().lookupOrDefault<word>("UName", "U"))
|
||||||
coeffDict_(dict.subDict(type + "Coeffs")),
|
UName_(this->coeffDict().lookup("UName"))
|
||||||
UName_(coeffDict_.lookupOrDefault<word>("UName", "U"))
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::PatchInteractionModel<CloudType>::PatchInteractionModel
|
||||||
|
(
|
||||||
|
const PatchInteractionModel<CloudType>& pim
|
||||||
|
)
|
||||||
|
:
|
||||||
|
SubModelBase<CloudType>(pim),
|
||||||
|
UName_(pim.UName_)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -128,29 +149,6 @@ Foam::PatchInteractionModel<CloudType>::~PatchInteractionModel()
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
const CloudType&
|
|
||||||
Foam::PatchInteractionModel<CloudType>::owner() const
|
|
||||||
{
|
|
||||||
return owner_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
const Foam::dictionary& Foam::PatchInteractionModel<CloudType>::dict() const
|
|
||||||
{
|
|
||||||
return dict_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
const Foam::dictionary&
|
|
||||||
Foam::PatchInteractionModel<CloudType>::coeffDict() const
|
|
||||||
{
|
|
||||||
return coeffDict_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
const Foam::word& Foam::PatchInteractionModel<CloudType>::UName() const
|
const Foam::word& Foam::PatchInteractionModel<CloudType>::UName() const
|
||||||
{
|
{
|
||||||
@ -158,6 +156,31 @@ const Foam::word& Foam::PatchInteractionModel<CloudType>::UName() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
bool Foam::PatchInteractionModel<CloudType>::correct
|
||||||
|
(
|
||||||
|
typename CloudType::parcelType&,
|
||||||
|
const polyPatch&,
|
||||||
|
bool&,
|
||||||
|
const scalar,
|
||||||
|
const tetIndices&
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
notImplemented
|
||||||
|
(
|
||||||
|
"bool Foam::PatchInteractionModel<CloudType>::correct"
|
||||||
|
"("
|
||||||
|
"typename CloudType::parcelType&, "
|
||||||
|
"const polyPatch&, "
|
||||||
|
"bool&, "
|
||||||
|
"const scalar, "
|
||||||
|
"const tetIndices& "
|
||||||
|
") const"
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
void Foam::PatchInteractionModel<CloudType>::patchData
|
void Foam::PatchInteractionModel<CloudType>::patchData
|
||||||
(
|
(
|
||||||
|
|||||||
@ -42,6 +42,7 @@ SourceFiles
|
|||||||
#include "polyPatch.H"
|
#include "polyPatch.H"
|
||||||
#include "wallPolyPatch.H"
|
#include "wallPolyPatch.H"
|
||||||
#include "tetIndices.H"
|
#include "tetIndices.H"
|
||||||
|
#include "SubModelBase.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -54,6 +55,8 @@ namespace Foam
|
|||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
class PatchInteractionModel
|
class PatchInteractionModel
|
||||||
|
:
|
||||||
|
public SubModelBase<CloudType>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -75,15 +78,6 @@ private:
|
|||||||
|
|
||||||
// Private data
|
// Private data
|
||||||
|
|
||||||
//- The cloud dictionary
|
|
||||||
const dictionary& dict_;
|
|
||||||
|
|
||||||
//- Reference to the owner cloud class
|
|
||||||
CloudType& owner_;
|
|
||||||
|
|
||||||
//- The coefficients dictionary
|
|
||||||
const dictionary coeffDict_;
|
|
||||||
|
|
||||||
//- Name of velocity field - default = "U"
|
//- Name of velocity field - default = "U"
|
||||||
const word UName_;
|
const word UName_;
|
||||||
|
|
||||||
@ -109,6 +103,9 @@ public:
|
|||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct null from owner
|
||||||
|
PatchInteractionModel(CloudType& owner);
|
||||||
|
|
||||||
//- Construct from components
|
//- Construct from components
|
||||||
PatchInteractionModel
|
PatchInteractionModel
|
||||||
(
|
(
|
||||||
@ -117,6 +114,18 @@ public:
|
|||||||
const word& type
|
const word& type
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
PatchInteractionModel(const PatchInteractionModel<CloudType>& pim);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<PatchInteractionModel<CloudType> > clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<PatchInteractionModel<CloudType> >
|
||||||
|
(
|
||||||
|
new PatchInteractionModel<CloudType>(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~PatchInteractionModel();
|
virtual ~PatchInteractionModel();
|
||||||
@ -132,15 +141,6 @@ public:
|
|||||||
|
|
||||||
// Access
|
// Access
|
||||||
|
|
||||||
//- Return the owner cloud object
|
|
||||||
const CloudType& owner() const;
|
|
||||||
|
|
||||||
//- Return the dictionary
|
|
||||||
const dictionary& dict() const;
|
|
||||||
|
|
||||||
//- Return the coefficients dictionary
|
|
||||||
const dictionary& coeffDict() const;
|
|
||||||
|
|
||||||
//- Return name of velocity field
|
//- Return name of velocity field
|
||||||
const word& UName() const;
|
const word& UName() const;
|
||||||
|
|
||||||
@ -153,9 +153,6 @@ public:
|
|||||||
//- Convert word to interaction result
|
//- Convert word to interaction result
|
||||||
static interactionType wordToInteractionType(const word& itWord);
|
static interactionType wordToInteractionType(const word& itWord);
|
||||||
|
|
||||||
//- Flag to indicate whether model activates patch interaction model
|
|
||||||
virtual bool active() const = 0;
|
|
||||||
|
|
||||||
//- Apply velocity correction
|
//- Apply velocity correction
|
||||||
// Returns true if particle remains in same cell
|
// Returns true if particle remains in same cell
|
||||||
virtual bool correct
|
virtual bool correct
|
||||||
@ -165,7 +162,7 @@ public:
|
|||||||
bool& keepParticle,
|
bool& keepParticle,
|
||||||
const scalar trackFraction,
|
const scalar trackFraction,
|
||||||
const tetIndices& tetIs
|
const tetIndices& tetIs
|
||||||
) const = 0;
|
) const;
|
||||||
|
|
||||||
//- Calculate the patch normal and velocity to interact with,
|
//- Calculate the patch normal and velocity to interact with,
|
||||||
// accounting for patch motion if required.
|
// accounting for patch motion if required.
|
||||||
|
|||||||
@ -39,6 +39,14 @@ Foam::Rebound<CloudType>::Rebound
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::Rebound<CloudType>::Rebound(const Rebound<CloudType>& pim)
|
||||||
|
:
|
||||||
|
PatchInteractionModel<CloudType>(pim),
|
||||||
|
UFactor_(pim.UFactor_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
@ -48,13 +56,6 @@ Foam::Rebound<CloudType>::~Rebound()
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
bool Foam::Rebound<CloudType>::active() const
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
bool Foam::Rebound<CloudType>::correct
|
bool Foam::Rebound<CloudType>::correct
|
||||||
(
|
(
|
||||||
|
|||||||
@ -62,19 +62,28 @@ public:
|
|||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from dictionary
|
||||||
//- Construct from dictionary
|
//- Construct from dictionary
|
||||||
Rebound(const dictionary& dict, CloudType& cloud);
|
Rebound(const dictionary& dict, CloudType& cloud);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
Rebound(const Rebound<CloudType>& pim);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<PatchInteractionModel<CloudType> > clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<PatchInteractionModel<CloudType> >
|
||||||
|
(
|
||||||
|
new Rebound<CloudType>(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~Rebound();
|
virtual ~Rebound();
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Flag to indicate whether model activates patch interaction model
|
|
||||||
virtual bool active() const;
|
|
||||||
|
|
||||||
//- Apply velocity correction
|
//- Apply velocity correction
|
||||||
// Returns true if particle remains in same cell
|
// Returns true if particle remains in same cell
|
||||||
virtual bool correct
|
virtual bool correct
|
||||||
|
|||||||
@ -76,6 +76,19 @@ Foam::StandardWallInteraction<CloudType>::StandardWallInteraction
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::StandardWallInteraction<CloudType>::StandardWallInteraction
|
||||||
|
(
|
||||||
|
const StandardWallInteraction<CloudType>& pim
|
||||||
|
)
|
||||||
|
:
|
||||||
|
PatchInteractionModel<CloudType>(pim),
|
||||||
|
interactionType_(pim.interactionType_),
|
||||||
|
e_(pim.e_),
|
||||||
|
mu_(pim.mu_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template <class CloudType>
|
template <class CloudType>
|
||||||
@ -85,13 +98,6 @@ Foam::StandardWallInteraction<CloudType>::~StandardWallInteraction()
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
bool Foam::StandardWallInteraction<CloudType>::active() const
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template <class CloudType>
|
template <class CloudType>
|
||||||
bool Foam::StandardWallInteraction<CloudType>::correct
|
bool Foam::StandardWallInteraction<CloudType>::correct
|
||||||
(
|
(
|
||||||
|
|||||||
@ -85,6 +85,18 @@ public:
|
|||||||
//- Construct from dictionary
|
//- Construct from dictionary
|
||||||
StandardWallInteraction(const dictionary& dict, CloudType& cloud);
|
StandardWallInteraction(const dictionary& dict, CloudType& cloud);
|
||||||
|
|
||||||
|
//- Construct copy from owner cloud and patch interaction model
|
||||||
|
StandardWallInteraction(const StandardWallInteraction<CloudType>& pim);
|
||||||
|
|
||||||
|
//- Construct and return a clone using supplied owner cloud
|
||||||
|
virtual autoPtr<PatchInteractionModel<CloudType> > clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<PatchInteractionModel<CloudType> >
|
||||||
|
(
|
||||||
|
new StandardWallInteraction<CloudType>(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~StandardWallInteraction();
|
virtual ~StandardWallInteraction();
|
||||||
@ -92,9 +104,6 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Flag to indicate whether model activates patch interaction model
|
|
||||||
virtual bool active() const;
|
|
||||||
|
|
||||||
//- Apply velocity correction
|
//- Apply velocity correction
|
||||||
// Returns true if particle remains in same cell
|
// Returns true if particle remains in same cell
|
||||||
virtual bool correct
|
virtual bool correct
|
||||||
|
|||||||
@ -30,7 +30,7 @@ License
|
|||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
void Foam::NoPostProcessing<CloudType>::write()
|
void Foam::NoPostProcessing<CloudType>::write()
|
||||||
{
|
{
|
||||||
// do nothing
|
// do nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -47,6 +47,16 @@ Foam::NoPostProcessing<CloudType>::NoPostProcessing
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::NoPostProcessing<CloudType>::NoPostProcessing
|
||||||
|
(
|
||||||
|
const NoPostProcessing<CloudType>& ppm
|
||||||
|
)
|
||||||
|
:
|
||||||
|
PostProcessingModel<CloudType>(ppm.owner_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
@ -70,7 +80,17 @@ void Foam::NoPostProcessing<CloudType>::postPatch
|
|||||||
const label
|
const label
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
// do nothing
|
// do nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
void Foam::NoPostProcessing<CloudType>::postFace
|
||||||
|
(
|
||||||
|
const typename CloudType::parcelType&
|
||||||
|
)
|
||||||
|
{
|
||||||
|
// do nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -70,6 +70,18 @@ public:
|
|||||||
//- Construct from components
|
//- Construct from components
|
||||||
NoPostProcessing(const dictionary&, CloudType&);
|
NoPostProcessing(const dictionary&, CloudType&);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
NoPostProcessing(const NoPostProcessing<CloudType>& ppm);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<PostProcessingModel<CloudType> > clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<PostProcessingModel<CloudType> >
|
||||||
|
(
|
||||||
|
new NoPostProcessing<CloudType>(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~NoPostProcessing();
|
virtual ~NoPostProcessing();
|
||||||
@ -88,6 +100,9 @@ public:
|
|||||||
const typename CloudType::parcelType& p,
|
const typename CloudType::parcelType& p,
|
||||||
const label patchI
|
const label patchI
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Gather particle data when hit face
|
||||||
|
virtual void postFace(const typename CloudType::parcelType& p);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -61,20 +61,20 @@ void Foam::PatchPostProcessing<CloudType>::write()
|
|||||||
|
|
||||||
if (Pstream::master())
|
if (Pstream::master())
|
||||||
{
|
{
|
||||||
fileName outputDir;
|
fileName outputDir = this->owner().time().path();
|
||||||
|
|
||||||
if (Pstream::parRun())
|
if (Pstream::parRun())
|
||||||
{
|
{
|
||||||
// Put in undecomposed case (Note: gives problems for
|
// Put in undecomposed case (Note: gives problems for
|
||||||
// distributed data running)
|
// distributed data running)
|
||||||
outputDir =
|
outputDir =
|
||||||
mesh_.time().path()/".."/"postProcessing"/cloud::prefix/
|
outputDir/".."/"postProcessing"/cloud::prefix/
|
||||||
this->owner().name()/this->owner().time().timeName();
|
this->owner().name()/this->owner().time().timeName();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
outputDir =
|
outputDir =
|
||||||
mesh_.time().path()/"postProcessing"/cloud::prefix/
|
outputDir/"postProcessing"/cloud::prefix/
|
||||||
this->owner().name()/this->owner().time().timeName();
|
this->owner().name()/this->owner().time().timeName();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -86,7 +86,7 @@ void Foam::PatchPostProcessing<CloudType>::write()
|
|||||||
outputDir/patchNames_[patchI] + ".post",
|
outputDir/patchNames_[patchI] + ".post",
|
||||||
IOstream::ASCII,
|
IOstream::ASCII,
|
||||||
IOstream::currentVersion,
|
IOstream::currentVersion,
|
||||||
mesh_.time().writeCompression()
|
this->owner().time().writeCompression()
|
||||||
);
|
);
|
||||||
|
|
||||||
List<string> globalData;
|
List<string> globalData;
|
||||||
@ -120,15 +120,15 @@ Foam::PatchPostProcessing<CloudType>::PatchPostProcessing
|
|||||||
)
|
)
|
||||||
:
|
:
|
||||||
PostProcessingModel<CloudType>(dict, owner, typeName),
|
PostProcessingModel<CloudType>(dict, owner, typeName),
|
||||||
mesh_(owner.mesh()),
|
|
||||||
maxStoredParcels_(readLabel(this->coeffDict().lookup("maxStoredParcels"))),
|
maxStoredParcels_(readLabel(this->coeffDict().lookup("maxStoredParcels"))),
|
||||||
patchNames_(this->coeffDict().lookup("patches")),
|
patchNames_(this->coeffDict().lookup("patches")),
|
||||||
patchData_(patchNames_.size()),
|
patchData_(patchNames_.size()),
|
||||||
patchIds_(patchNames_.size())
|
patchIds_(patchNames_.size())
|
||||||
{
|
{
|
||||||
|
const polyBoundaryMesh& bMesh = this->owner().mesh().boundaryMesh();
|
||||||
forAll(patchNames_, patchI)
|
forAll(patchNames_, patchI)
|
||||||
{
|
{
|
||||||
const label id = mesh_.boundaryMesh().findPatchID(patchNames_[patchI]);
|
const label id = bMesh.findPatchID(patchNames_[patchI]);
|
||||||
if (id < 0)
|
if (id < 0)
|
||||||
{
|
{
|
||||||
FatalErrorIn
|
FatalErrorIn
|
||||||
@ -139,7 +139,7 @@ Foam::PatchPostProcessing<CloudType>::PatchPostProcessing
|
|||||||
"CloudType& owner"
|
"CloudType& owner"
|
||||||
")"
|
")"
|
||||||
)<< "Requested patch " << patchNames_[patchI] << " not found" << nl
|
)<< "Requested patch " << patchNames_[patchI] << " not found" << nl
|
||||||
<< "Available patches are: " << mesh_.boundaryMesh().names() << nl
|
<< "Available patches are: " << bMesh.names() << nl
|
||||||
<< exit(FatalError);
|
<< exit(FatalError);
|
||||||
}
|
}
|
||||||
patchIds_[patchI] = id;
|
patchIds_[patchI] = id;
|
||||||
@ -147,6 +147,20 @@ Foam::PatchPostProcessing<CloudType>::PatchPostProcessing
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::PatchPostProcessing<CloudType>::PatchPostProcessing
|
||||||
|
(
|
||||||
|
const PatchPostProcessing<CloudType>& ppm
|
||||||
|
)
|
||||||
|
:
|
||||||
|
PostProcessingModel<CloudType>(ppm),
|
||||||
|
maxStoredParcels_(ppm.maxStoredParcels_),
|
||||||
|
patchNames_(ppm.patchNames_),
|
||||||
|
patchData_(ppm.patchData_),
|
||||||
|
patchIds_(ppm.patchIds_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
@ -156,13 +170,6 @@ Foam::PatchPostProcessing<CloudType>::~PatchPostProcessing()
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
bool Foam::PatchPostProcessing<CloudType>::active() const
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
void Foam::PatchPostProcessing<CloudType>::postPatch
|
void Foam::PatchPostProcessing<CloudType>::postPatch
|
||||||
(
|
(
|
||||||
@ -180,4 +187,9 @@ void Foam::PatchPostProcessing<CloudType>::postPatch
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
void Foam::PatchPostProcessing<CloudType>::postFace(const parcelType&)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -55,9 +55,6 @@ class PatchPostProcessing
|
|||||||
|
|
||||||
typedef typename CloudType::parcelType parcelType;
|
typedef typename CloudType::parcelType parcelType;
|
||||||
|
|
||||||
//- Reference to the mesh
|
|
||||||
const polyMesh& mesh_;
|
|
||||||
|
|
||||||
//- Maximum number of parcels to store
|
//- Maximum number of parcels to store
|
||||||
label maxStoredParcels_;
|
label maxStoredParcels_;
|
||||||
|
|
||||||
@ -96,6 +93,18 @@ public:
|
|||||||
//- Construct from dictionary
|
//- Construct from dictionary
|
||||||
PatchPostProcessing(const dictionary& dict, CloudType& owner);
|
PatchPostProcessing(const dictionary& dict, CloudType& owner);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
PatchPostProcessing(const PatchPostProcessing<CloudType>& ppm);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<PostProcessingModel<CloudType> > clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<PostProcessingModel<CloudType> >
|
||||||
|
(
|
||||||
|
new PatchPostProcessing<CloudType>(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~PatchPostProcessing();
|
virtual ~PatchPostProcessing();
|
||||||
@ -105,9 +114,6 @@ public:
|
|||||||
|
|
||||||
// Access
|
// Access
|
||||||
|
|
||||||
//- Return const access to the mesh
|
|
||||||
inline const polyMesh& mesh() const;
|
|
||||||
|
|
||||||
//- Return maximum number of parcels to store per patch
|
//- Return maximum number of parcels to store per patch
|
||||||
inline label maxStoredParcels() const;
|
inline label maxStoredParcels() const;
|
||||||
|
|
||||||
@ -120,15 +126,11 @@ public:
|
|||||||
|
|
||||||
// Evaluation
|
// Evaluation
|
||||||
|
|
||||||
//- Flag to indicate whether model activates post-processing model
|
|
||||||
virtual bool active() const;
|
|
||||||
|
|
||||||
//- Gather post-processing info on patch
|
//- Gather post-processing info on patch
|
||||||
virtual void postPatch
|
virtual void postPatch(const parcelType& p, const label patchI);
|
||||||
(
|
|
||||||
const parcelType& p,
|
//- Gather particle data when hit face - not used
|
||||||
const label patchI
|
virtual void postFace(const parcelType& p);
|
||||||
);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -23,13 +23,6 @@ License
|
|||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
const Foam::polyMesh& Foam::PatchPostProcessing<CloudType>::mesh() const
|
|
||||||
{
|
|
||||||
return mesh_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
Foam::label Foam::PatchPostProcessing<CloudType>::maxStoredParcels() const
|
Foam::label Foam::PatchPostProcessing<CloudType>::maxStoredParcels() const
|
||||||
{
|
{
|
||||||
|
|||||||
@ -25,14 +25,21 @@ License
|
|||||||
|
|
||||||
#include "PostProcessingModel.H"
|
#include "PostProcessingModel.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
void Foam::PostProcessingModel<CloudType>::write()
|
||||||
|
{
|
||||||
|
notImplemented("void Foam::PostProcessingModel<CloudType>::write()");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
Foam::PostProcessingModel<CloudType>::PostProcessingModel(CloudType& owner)
|
Foam::PostProcessingModel<CloudType>::PostProcessingModel(CloudType& owner)
|
||||||
:
|
:
|
||||||
dict_(dictionary::null),
|
SubModelBase<CloudType>(owner)
|
||||||
owner_(owner),
|
|
||||||
coeffDict_(dictionary::null)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -44,9 +51,17 @@ Foam::PostProcessingModel<CloudType>::PostProcessingModel
|
|||||||
const word& type
|
const word& type
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
dict_(dict),
|
SubModelBase<CloudType>(owner, dict, type)
|
||||||
owner_(owner),
|
{}
|
||||||
coeffDict_(dict.subDict(type + "Coeffs"))
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::PostProcessingModel<CloudType>::PostProcessingModel
|
||||||
|
(
|
||||||
|
const PostProcessingModel<CloudType>& ppm
|
||||||
|
)
|
||||||
|
:
|
||||||
|
SubModelBase<CloudType>(ppm)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -62,13 +77,47 @@ Foam::PostProcessingModel<CloudType>::~PostProcessingModel()
|
|||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
void Foam::PostProcessingModel<CloudType>::post()
|
void Foam::PostProcessingModel<CloudType>::post()
|
||||||
{
|
{
|
||||||
if (owner_.time().outputTime())
|
if (this->owner().time().outputTime())
|
||||||
{
|
{
|
||||||
this->write();
|
this->write();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
void Foam::PostProcessingModel<CloudType>::postPatch
|
||||||
|
(
|
||||||
|
const typename CloudType::parcelType&,
|
||||||
|
const label
|
||||||
|
)
|
||||||
|
{
|
||||||
|
notImplemented
|
||||||
|
(
|
||||||
|
"void Foam::PostProcessingModel<CloudType>::postPatch"
|
||||||
|
"("
|
||||||
|
"const typename CloudType::parcelType&,"
|
||||||
|
"const label"
|
||||||
|
")"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
void Foam::PostProcessingModel<CloudType>::postFace
|
||||||
|
(
|
||||||
|
const typename CloudType::parcelType&
|
||||||
|
)
|
||||||
|
{
|
||||||
|
notImplemented
|
||||||
|
(
|
||||||
|
"void Foam::PostProcessingModel<CloudType>::postFace"
|
||||||
|
"("
|
||||||
|
"const typename CloudType::parcelType&"
|
||||||
|
")"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
#include "PostProcessingModelNew.C"
|
#include "PostProcessingModelNew.C"
|
||||||
|
|||||||
@ -39,6 +39,7 @@ SourceFiles
|
|||||||
#include "IOdictionary.H"
|
#include "IOdictionary.H"
|
||||||
#include "autoPtr.H"
|
#include "autoPtr.H"
|
||||||
#include "runTimeSelectionTables.H"
|
#include "runTimeSelectionTables.H"
|
||||||
|
#include "SubModelBase.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -51,25 +52,13 @@ namespace Foam
|
|||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
class PostProcessingModel
|
class PostProcessingModel
|
||||||
|
:
|
||||||
|
public SubModelBase<CloudType>
|
||||||
{
|
{
|
||||||
// Private data
|
|
||||||
|
|
||||||
//- The cloud dictionary
|
|
||||||
const dictionary& dict_;
|
|
||||||
|
|
||||||
//- Reference to the owner cloud class
|
|
||||||
CloudType& owner_;
|
|
||||||
|
|
||||||
//- The coefficients dictionary
|
|
||||||
const dictionary coeffDict_;
|
|
||||||
|
|
||||||
|
|
||||||
protected:
|
|
||||||
|
|
||||||
// Protected Member Functions
|
// Protected Member Functions
|
||||||
|
|
||||||
//- Write post-processing info
|
//- Write post-processing info
|
||||||
virtual void write() = 0;
|
virtual void write();
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -104,6 +93,18 @@ public:
|
|||||||
const word& type
|
const word& type
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
PostProcessingModel(const PostProcessingModel<CloudType>& ppm);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<PostProcessingModel<CloudType> > clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<PostProcessingModel<CloudType> >
|
||||||
|
(
|
||||||
|
new PostProcessingModel<CloudType>(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~PostProcessingModel();
|
virtual ~PostProcessingModel();
|
||||||
@ -119,35 +120,20 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
// Access
|
|
||||||
|
|
||||||
//- Return the owner cloud dictionary
|
|
||||||
inline const dictionary& dict() const;
|
|
||||||
|
|
||||||
//- Return const access the owner cloud object
|
|
||||||
inline const CloudType& owner() const;
|
|
||||||
|
|
||||||
//- Return non-const access the owner cloud object for manipulation
|
|
||||||
inline CloudType& owner();
|
|
||||||
|
|
||||||
//- Return the coefficients dictionary
|
|
||||||
inline const dictionary& coeffDict() const;
|
|
||||||
|
|
||||||
|
|
||||||
// Evaluation
|
// Evaluation
|
||||||
|
|
||||||
//- Main post-processing function
|
//- Main post-processing function
|
||||||
virtual void post();
|
virtual void post();
|
||||||
|
|
||||||
//- Flag to indicate whether model activates post-processing model
|
|
||||||
virtual bool active() const = 0;
|
|
||||||
|
|
||||||
//- Gather post-processing info on patch
|
//- Gather post-processing info on patch
|
||||||
virtual void postPatch
|
virtual void postPatch
|
||||||
(
|
(
|
||||||
const typename CloudType::parcelType& p,
|
const typename CloudType::parcelType& p,
|
||||||
const label patchI
|
const label patchI
|
||||||
) = 0;
|
);
|
||||||
|
|
||||||
|
//- Gather post-processing info on a face
|
||||||
|
virtual void postFace(const typename CloudType::parcelType& p);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -177,10 +163,6 @@ public:
|
|||||||
add##SS##CloudType##ParcelType##ConstructorToTable_;
|
add##SS##CloudType##ParcelType##ConstructorToTable_;
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
#include "PostProcessingModelI.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
#ifdef NoRepository
|
#ifdef NoRepository
|
||||||
|
|||||||
@ -1,54 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
========= |
|
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
||||||
\\ / O peration |
|
|
||||||
\\ / A nd | Copyright (C) 2008-2010 OpenCFD Ltd.
|
|
||||||
\\/ M anipulation |
|
|
||||||
-------------------------------------------------------------------------------
|
|
||||||
License
|
|
||||||
This file is part of OpenFOAM.
|
|
||||||
|
|
||||||
OpenFOAM is free software: you can redistribute it and/or modify it
|
|
||||||
under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
||||||
for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
const Foam::dictionary& Foam::PostProcessingModel<CloudType>::dict() const
|
|
||||||
{
|
|
||||||
return dict_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
const CloudType& Foam::PostProcessingModel<CloudType>::owner() const
|
|
||||||
{
|
|
||||||
return owner_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
CloudType& Foam::PostProcessingModel<CloudType>::owner()
|
|
||||||
{
|
|
||||||
return owner_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
const Foam::dictionary& Foam::PostProcessingModel<CloudType>::coeffDict() const
|
|
||||||
{
|
|
||||||
return coeffDict_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -40,6 +40,16 @@ Foam::NoSurfaceFilm<CloudType>::NoSurfaceFilm
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::NoSurfaceFilm<CloudType>::NoSurfaceFilm
|
||||||
|
(
|
||||||
|
const NoSurfaceFilm<CloudType>& sfm
|
||||||
|
)
|
||||||
|
:
|
||||||
|
SurfaceFilmModel<CloudType>(sfm.owner_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
|
|||||||
@ -67,13 +67,20 @@ public:
|
|||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from components
|
//- Construct from dictionary
|
||||||
NoSurfaceFilm
|
NoSurfaceFilm(const dictionary&, CloudType&, const dimensionedVector&);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
NoSurfaceFilm(const NoSurfaceFilm<CloudType>& dm);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<SurfaceFilmModel<CloudType> > clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<SurfaceFilmModel<CloudType> >
|
||||||
(
|
(
|
||||||
const dictionary&,
|
new NoSurfaceFilm<CloudType>(*this)
|
||||||
CloudType&,
|
|
||||||
const dimensionedVector&
|
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
|
|||||||
@ -35,11 +35,8 @@ using namespace Foam::constant;
|
|||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
Foam::SurfaceFilmModel<CloudType>::SurfaceFilmModel(CloudType& owner)
|
Foam::SurfaceFilmModel<CloudType>::SurfaceFilmModel(CloudType& owner)
|
||||||
:
|
:
|
||||||
dict_(dictionary::null),
|
SubModelBase<CloudType>(owner),
|
||||||
owner_(owner),
|
|
||||||
g_(dimensionedVector("zero", dimAcceleration, vector::zero)),
|
g_(dimensionedVector("zero", dimAcceleration, vector::zero)),
|
||||||
coeffDict_(dictionary::null),
|
|
||||||
active_(false),
|
|
||||||
massParcelPatch_(0),
|
massParcelPatch_(0),
|
||||||
diameterParcelPatch_(0),
|
diameterParcelPatch_(0),
|
||||||
UFilmPatch_(0),
|
UFilmPatch_(0),
|
||||||
@ -58,11 +55,8 @@ Foam::SurfaceFilmModel<CloudType>::SurfaceFilmModel
|
|||||||
const word& type
|
const word& type
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
dict_(dict),
|
SubModelBase<CloudType>(owner, dict, type),
|
||||||
owner_(owner),
|
|
||||||
g_(g),
|
g_(g),
|
||||||
coeffDict_(dict.subDict(type + "Coeffs")),
|
|
||||||
active_(true),
|
|
||||||
massParcelPatch_(0),
|
massParcelPatch_(0),
|
||||||
diameterParcelPatch_(0),
|
diameterParcelPatch_(0),
|
||||||
UFilmPatch_(0),
|
UFilmPatch_(0),
|
||||||
@ -72,6 +66,23 @@ Foam::SurfaceFilmModel<CloudType>::SurfaceFilmModel
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::SurfaceFilmModel<CloudType>::SurfaceFilmModel
|
||||||
|
(
|
||||||
|
const SurfaceFilmModel<CloudType>& sfm
|
||||||
|
)
|
||||||
|
:
|
||||||
|
SubModelBase<CloudType>(sfm),
|
||||||
|
g_(sfm.g_),
|
||||||
|
massParcelPatch_(sfm.massParcelPatch_),
|
||||||
|
diameterParcelPatch_(sfm.diameterParcelPatch_),
|
||||||
|
UFilmPatch_(sfm.UFilmPatch_),
|
||||||
|
rhoFilmPatch_(sfm.rhoFilmPatch_),
|
||||||
|
nParcelsTransferred_(sfm.nParcelsTransferred_),
|
||||||
|
nParcelsInjected_(sfm.nParcelsInjected_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
@ -81,11 +92,31 @@ Foam::SurfaceFilmModel<CloudType>::~SurfaceFilmModel()
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
bool Foam::SurfaceFilmModel<CloudType>::transferParcel
|
||||||
|
(
|
||||||
|
const parcelType& p,
|
||||||
|
const label patchI
|
||||||
|
)
|
||||||
|
{
|
||||||
|
notImplemented
|
||||||
|
(
|
||||||
|
"bool Foam::SurfaceFilmModel<CloudType>::transferParcel"
|
||||||
|
"("
|
||||||
|
"const parcelType&, "
|
||||||
|
"const label"
|
||||||
|
")"
|
||||||
|
);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
template<class TrackData>
|
template<class TrackData>
|
||||||
void Foam::SurfaceFilmModel<CloudType>::inject(TrackData& td)
|
void Foam::SurfaceFilmModel<CloudType>::inject(TrackData& td)
|
||||||
{
|
{
|
||||||
if (!active_)
|
if (!this->active())
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -201,6 +232,13 @@ void Foam::SurfaceFilmModel<CloudType>::setParcelProperties
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
void Foam::SurfaceFilmModel<CloudType>::info(Ostream& os) const
|
||||||
|
{
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
#include "SurfaceFilmModelNew.C"
|
#include "SurfaceFilmModelNew.C"
|
||||||
|
|||||||
@ -39,6 +39,7 @@ SourceFiles
|
|||||||
#include "IOdictionary.H"
|
#include "IOdictionary.H"
|
||||||
#include "autoPtr.H"
|
#include "autoPtr.H"
|
||||||
#include "runTimeSelectionTables.H"
|
#include "runTimeSelectionTables.H"
|
||||||
|
#include "SubModelBase.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -59,6 +60,8 @@ class mapDistribute;
|
|||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
class SurfaceFilmModel
|
class SurfaceFilmModel
|
||||||
|
:
|
||||||
|
public SubModelBase<CloudType>
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
@ -67,21 +70,9 @@ protected:
|
|||||||
//- Convenience typedef to the cloud's parcel type
|
//- Convenience typedef to the cloud's parcel type
|
||||||
typedef typename CloudType::parcelType parcelType;
|
typedef typename CloudType::parcelType parcelType;
|
||||||
|
|
||||||
//- The cloud dictionary
|
|
||||||
const dictionary& dict_;
|
|
||||||
|
|
||||||
//- Reference to the owner cloud class
|
|
||||||
CloudType& owner_;
|
|
||||||
|
|
||||||
//- Gravitational acceleration constant
|
//- Gravitational acceleration constant
|
||||||
const dimensionedVector& g_;
|
const dimensionedVector& g_;
|
||||||
|
|
||||||
//- The coefficients dictionary
|
|
||||||
const dictionary coeffDict_;
|
|
||||||
|
|
||||||
//- Active flag
|
|
||||||
bool active_;
|
|
||||||
|
|
||||||
|
|
||||||
// Cached injector fields per film patch
|
// Cached injector fields per film patch
|
||||||
|
|
||||||
@ -150,7 +141,7 @@ public:
|
|||||||
//- Construct null from owner
|
//- Construct null from owner
|
||||||
SurfaceFilmModel(CloudType& owner);
|
SurfaceFilmModel(CloudType& owner);
|
||||||
|
|
||||||
//- Construct from dictionary
|
//- Construct from components
|
||||||
SurfaceFilmModel
|
SurfaceFilmModel
|
||||||
(
|
(
|
||||||
const dictionary& dict,
|
const dictionary& dict,
|
||||||
@ -159,6 +150,18 @@ public:
|
|||||||
const word& type
|
const word& type
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
SurfaceFilmModel(const SurfaceFilmModel<CloudType>& sfm);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<SurfaceFilmModel<CloudType> > clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<SurfaceFilmModel<CloudType> >
|
||||||
|
(
|
||||||
|
new SurfaceFilmModel<CloudType>(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~SurfaceFilmModel();
|
virtual ~SurfaceFilmModel();
|
||||||
@ -177,21 +180,9 @@ public:
|
|||||||
|
|
||||||
// Access
|
// Access
|
||||||
|
|
||||||
//- Return the owner cloud dictionary
|
|
||||||
inline const dictionary& dict() const;
|
|
||||||
|
|
||||||
//- Return const access the owner cloud object
|
|
||||||
inline const CloudType& owner() const;
|
|
||||||
|
|
||||||
//- Return non-const access the owner cloud object for manipulation
|
|
||||||
inline CloudType& owner();
|
|
||||||
|
|
||||||
//- Return gravitational acceleration constant
|
//- Return gravitational acceleration constant
|
||||||
inline const dimensionedVector& g() const;
|
inline const dimensionedVector& g() const;
|
||||||
|
|
||||||
//- Return the coefficients dictionary
|
|
||||||
inline const dictionary& coeffDict() const;
|
|
||||||
|
|
||||||
//- Return const access to the number of parcels transferred to the
|
//- Return const access to the number of parcels transferred to the
|
||||||
// film model
|
// film model
|
||||||
inline label nParcelsTransferred() const;
|
inline label nParcelsTransferred() const;
|
||||||
@ -211,16 +202,13 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Flag to indicate whether model activates the surface film model
|
|
||||||
virtual bool active() const = 0;
|
|
||||||
|
|
||||||
//- Transfer parcel from cloud to surface film
|
//- Transfer parcel from cloud to surface film
|
||||||
// Returns true if parcel is to be transferred
|
// Returns true if parcel is to be transferred
|
||||||
virtual bool transferParcel
|
virtual bool transferParcel
|
||||||
(
|
(
|
||||||
const parcelType& p,
|
const parcelType& p,
|
||||||
const label patchI
|
const label patchI
|
||||||
) = 0;
|
);
|
||||||
|
|
||||||
//- Inject parcels into the cloud
|
//- Inject parcels into the cloud
|
||||||
template<class TrackData>
|
template<class TrackData>
|
||||||
@ -230,7 +218,7 @@ public:
|
|||||||
// I-O
|
// I-O
|
||||||
|
|
||||||
//- Write surface film info to stream
|
//- Write surface film info to stream
|
||||||
virtual void info(Ostream& os) const = 0;
|
virtual void info(Ostream& os) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -27,27 +27,6 @@ License
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
const Foam::dictionary& Foam::SurfaceFilmModel<CloudType>::dict() const
|
|
||||||
{
|
|
||||||
return dict_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
const CloudType& Foam::SurfaceFilmModel<CloudType>::owner() const
|
|
||||||
{
|
|
||||||
return owner_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
CloudType& Foam::SurfaceFilmModel<CloudType>::owner()
|
|
||||||
{
|
|
||||||
return owner_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
const Foam::dimensionedVector& Foam::SurfaceFilmModel<CloudType>::g() const
|
const Foam::dimensionedVector& Foam::SurfaceFilmModel<CloudType>::g() const
|
||||||
{
|
{
|
||||||
@ -55,13 +34,6 @@ const Foam::dimensionedVector& Foam::SurfaceFilmModel<CloudType>::g() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
const Foam::dictionary& Foam::SurfaceFilmModel<CloudType>::coeffDict() const
|
|
||||||
{
|
|
||||||
return coeffDict_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
Foam::label& Foam::SurfaceFilmModel<CloudType>::nParcelsTransferred()
|
Foam::label& Foam::SurfaceFilmModel<CloudType>::nParcelsTransferred()
|
||||||
{
|
{
|
||||||
|
|||||||
@ -27,6 +27,15 @@ License
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::CompositionModel<CloudType>::CompositionModel(CloudType& owner)
|
||||||
|
:
|
||||||
|
SubModelBase<CloudType>(owner),
|
||||||
|
thermo_(owner.thermo()),
|
||||||
|
phaseProps_()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
Foam::CompositionModel<CloudType>::CompositionModel
|
Foam::CompositionModel<CloudType>::CompositionModel
|
||||||
(
|
(
|
||||||
@ -35,13 +44,11 @@ Foam::CompositionModel<CloudType>::CompositionModel
|
|||||||
const word& type
|
const word& type
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
dict_(dict),
|
SubModelBase<CloudType>(owner, dict, type),
|
||||||
owner_(owner),
|
|
||||||
coeffDict_(dict.subDict(type + "Coeffs")),
|
|
||||||
thermo_(owner.thermo()),
|
thermo_(owner.thermo()),
|
||||||
phaseProps_
|
phaseProps_
|
||||||
(
|
(
|
||||||
coeffDict_.lookup("phases"),
|
this->coeffDict().lookup("phases"),
|
||||||
thermo_.carrier().species(),
|
thermo_.carrier().species(),
|
||||||
thermo_.liquids().components(),
|
thermo_.liquids().components(),
|
||||||
thermo_.solids().components()
|
thermo_.solids().components()
|
||||||
@ -49,6 +56,18 @@ Foam::CompositionModel<CloudType>::CompositionModel
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::CompositionModel<CloudType>::CompositionModel
|
||||||
|
(
|
||||||
|
const CompositionModel<CloudType>& cm
|
||||||
|
)
|
||||||
|
:
|
||||||
|
SubModelBase<CloudType>(cm),
|
||||||
|
thermo_(cm.thermo_),
|
||||||
|
phaseProps_(cm.phaseProps_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
@ -58,27 +77,6 @@ Foam::CompositionModel<CloudType>::~CompositionModel()
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
const CloudType& Foam::CompositionModel<CloudType>::owner() const
|
|
||||||
{
|
|
||||||
return owner_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
const Foam::dictionary& Foam::CompositionModel<CloudType>::dict() const
|
|
||||||
{
|
|
||||||
return dict_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
const Foam::dictionary& Foam::CompositionModel<CloudType>::coeffDict() const
|
|
||||||
{
|
|
||||||
return coeffDict_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
const Foam::SLGThermo& Foam::CompositionModel<CloudType>::thermo() const
|
const Foam::SLGThermo& Foam::CompositionModel<CloudType>::thermo() const
|
||||||
{
|
{
|
||||||
@ -328,6 +326,55 @@ Foam::scalarField Foam::CompositionModel<CloudType>::X
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
const Foam::scalarField& Foam::CompositionModel<CloudType>::YMixture0() const
|
||||||
|
{
|
||||||
|
notImplemented
|
||||||
|
(
|
||||||
|
"const scalarField& Foam::CompositionModel<CloudType>::YMixture0() "
|
||||||
|
"const"
|
||||||
|
);
|
||||||
|
|
||||||
|
return scalarField::null();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::label Foam::CompositionModel<CloudType>::idGas() const
|
||||||
|
{
|
||||||
|
notImplemented
|
||||||
|
(
|
||||||
|
"Foam::label Foam::CompositionModel<CloudType>::idGas() const"
|
||||||
|
);
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::label Foam::CompositionModel<CloudType>::idLiquid() const
|
||||||
|
{
|
||||||
|
notImplemented
|
||||||
|
(
|
||||||
|
"Foam::label Foam::CompositionModel<CloudType>::idLiquid() const"
|
||||||
|
);
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::label Foam::CompositionModel<CloudType>::idSolid() const
|
||||||
|
{
|
||||||
|
notImplemented
|
||||||
|
(
|
||||||
|
"Foam::label Foam::CompositionModel<CloudType>::idSolid() const"
|
||||||
|
);
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
Foam::scalar Foam::CompositionModel<CloudType>::H
|
Foam::scalar Foam::CompositionModel<CloudType>::H
|
||||||
(
|
(
|
||||||
|
|||||||
@ -58,18 +58,10 @@ namespace Foam
|
|||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
class CompositionModel
|
class CompositionModel
|
||||||
|
:
|
||||||
|
public SubModelBase<CloudType>
|
||||||
{
|
{
|
||||||
// Private data
|
// Private data
|
||||||
|
|
||||||
//- The cloud dictionary
|
|
||||||
const dictionary& dict_;
|
|
||||||
|
|
||||||
//- Reference to the owner injection class
|
|
||||||
CloudType& owner_;
|
|
||||||
|
|
||||||
//- The coefficients dictionary
|
|
||||||
const dictionary& coeffDict_;
|
|
||||||
|
|
||||||
//- Reference to the thermo database
|
//- Reference to the thermo database
|
||||||
const SLGThermo& thermo_;
|
const SLGThermo& thermo_;
|
||||||
|
|
||||||
@ -98,6 +90,9 @@ public:
|
|||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct null from owner
|
||||||
|
CompositionModel(CloudType& owner);
|
||||||
|
|
||||||
//- Construct from dictionary
|
//- Construct from dictionary
|
||||||
CompositionModel
|
CompositionModel
|
||||||
(
|
(
|
||||||
@ -106,6 +101,18 @@ public:
|
|||||||
const word& type
|
const word& type
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
CompositionModel(const CompositionModel<CloudType>& cm);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<CompositionModel<CloudType> > clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<CompositionModel<CloudType> >
|
||||||
|
(
|
||||||
|
new CompositionModel<CloudType>(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~CompositionModel();
|
virtual ~CompositionModel();
|
||||||
@ -123,15 +130,6 @@ public:
|
|||||||
|
|
||||||
// Access
|
// Access
|
||||||
|
|
||||||
//- Return the cloud object
|
|
||||||
const CloudType& owner() const;
|
|
||||||
|
|
||||||
//- Return the cloud dictionary
|
|
||||||
const dictionary& dict() const;
|
|
||||||
|
|
||||||
//- Return the coefficients dictionary
|
|
||||||
const dictionary& coeffDict() const;
|
|
||||||
|
|
||||||
//- Return the thermo database
|
//- Return the thermo database
|
||||||
const SLGThermo& thermo() const;
|
const SLGThermo& thermo() const;
|
||||||
|
|
||||||
@ -197,19 +195,19 @@ public:
|
|||||||
|
|
||||||
//- Return the list of mixture mass fractions
|
//- Return the list of mixture mass fractions
|
||||||
// If only 1 phase, return component fractions of that phase
|
// If only 1 phase, return component fractions of that phase
|
||||||
virtual const scalarField& YMixture0() const = 0;
|
virtual const scalarField& YMixture0() const;
|
||||||
|
|
||||||
// Indices of gas, liquid and solid phases in phase properties
|
// Indices of gas, liquid and solid phases in phase properties
|
||||||
// list - returns -1 if not applicable
|
// list - returns -1 if not applicable
|
||||||
|
|
||||||
//- Gas id
|
//- Gas id
|
||||||
virtual label idGas() const = 0;
|
virtual label idGas() const;
|
||||||
|
|
||||||
//- Liquid id
|
//- Liquid id
|
||||||
virtual label idLiquid() const = 0;
|
virtual label idLiquid() const;
|
||||||
|
|
||||||
//- Solid id
|
//- Solid id
|
||||||
virtual label idSolid() const = 0;
|
virtual label idSolid() const;
|
||||||
|
|
||||||
|
|
||||||
// Evaluation
|
// Evaluation
|
||||||
|
|||||||
@ -135,6 +135,20 @@ Foam::SingleMixtureFraction<CloudType>::SingleMixtureFraction
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::SingleMixtureFraction<CloudType>::SingleMixtureFraction
|
||||||
|
(
|
||||||
|
const SingleMixtureFraction<CloudType>& cm
|
||||||
|
)
|
||||||
|
:
|
||||||
|
CompositionModel<CloudType>(cm),
|
||||||
|
idGas_(cm.idGas_),
|
||||||
|
idLiquid_(cm.idLiquid_),
|
||||||
|
idSolid_(cm.idSolid_),
|
||||||
|
YMixture0_(cm.YMixture0_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
|
|||||||
@ -89,6 +89,18 @@ public:
|
|||||||
//- Construct from dictionary
|
//- Construct from dictionary
|
||||||
SingleMixtureFraction(const dictionary& dict, CloudType& owner);
|
SingleMixtureFraction(const dictionary& dict, CloudType& owner);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
SingleMixtureFraction(const SingleMixtureFraction<CloudType>& cm);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<CompositionModel<CloudType> > clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<CompositionModel<CloudType> >
|
||||||
|
(
|
||||||
|
new SingleMixtureFraction<CloudType>(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~SingleMixtureFraction();
|
virtual ~SingleMixtureFraction();
|
||||||
|
|||||||
@ -91,6 +91,19 @@ Foam::SinglePhaseMixture<CloudType>::SinglePhaseMixture
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::SinglePhaseMixture<CloudType>::SinglePhaseMixture
|
||||||
|
(
|
||||||
|
const SinglePhaseMixture<CloudType>& cm
|
||||||
|
)
|
||||||
|
:
|
||||||
|
CompositionModel<CloudType>(cm),
|
||||||
|
idGas_(cm.idGas_),
|
||||||
|
idLiquid_(cm.idLiquid_),
|
||||||
|
idSolid_(cm.idSolid_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
|
|||||||
@ -83,6 +83,18 @@ public:
|
|||||||
//- Construct from dictionary
|
//- Construct from dictionary
|
||||||
SinglePhaseMixture(const dictionary& dict, CloudType& owner);
|
SinglePhaseMixture(const dictionary& dict, CloudType& owner);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
SinglePhaseMixture(const SinglePhaseMixture<CloudType>& cm);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<CompositionModel<CloudType> > clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<CompositionModel<CloudType> >
|
||||||
|
(
|
||||||
|
new SinglePhaseMixture<CloudType>(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~SinglePhaseMixture();
|
virtual ~SinglePhaseMixture();
|
||||||
|
|||||||
@ -122,6 +122,23 @@ Foam::ReactingLookupTableInjection<CloudType>::ReactingLookupTableInjection
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::ReactingLookupTableInjection<CloudType>::ReactingLookupTableInjection
|
||||||
|
(
|
||||||
|
const ReactingLookupTableInjection<CloudType>& im
|
||||||
|
)
|
||||||
|
:
|
||||||
|
InjectionModel<CloudType>(im),
|
||||||
|
inputFileName_(im.inputFileName_),
|
||||||
|
duration_(im.duration_),
|
||||||
|
nParcelsPerSecond_(im.nParcelsPerSecond_),
|
||||||
|
injectors_(im.injectors_),
|
||||||
|
injectorCells_(im.injectorCells_),
|
||||||
|
injectorTetFaces_(im.injectorTetFaces_),
|
||||||
|
injectorTetPts_(im.injectorTetPts_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
@ -131,13 +148,6 @@ Foam::ReactingLookupTableInjection<CloudType>::~ReactingLookupTableInjection()
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
bool Foam::ReactingLookupTableInjection<CloudType>::active() const
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
Foam::scalar Foam::ReactingLookupTableInjection<CloudType>::timeEnd() const
|
Foam::scalar Foam::ReactingLookupTableInjection<CloudType>::timeEnd() const
|
||||||
{
|
{
|
||||||
|
|||||||
@ -99,18 +99,10 @@ protected:
|
|||||||
// Protected Member Functions
|
// Protected Member Functions
|
||||||
|
|
||||||
//- Number of parcels to introduce over the time step relative to SOI
|
//- Number of parcels to introduce over the time step relative to SOI
|
||||||
label parcelsToInject
|
virtual label parcelsToInject(const scalar time0, const scalar time1);
|
||||||
(
|
|
||||||
const scalar time0,
|
|
||||||
const scalar time1
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Volume of parcels to introduce over the time step relative to SOI
|
//- Volume of parcels to introduce over the time step relative to SOI
|
||||||
scalar volumeToInject
|
virtual scalar volumeToInject(const scalar time0, const scalar time1);
|
||||||
(
|
|
||||||
const scalar time0,
|
|
||||||
const scalar time1
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -128,6 +120,21 @@ public:
|
|||||||
CloudType& owner
|
CloudType& owner
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
ReactingLookupTableInjection
|
||||||
|
(
|
||||||
|
const ReactingLookupTableInjection<CloudType>& im
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<InjectionModel<CloudType> > clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<InjectionModel<CloudType> >
|
||||||
|
(
|
||||||
|
new ReactingLookupTableInjection<CloudType>(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~ReactingLookupTableInjection();
|
virtual ~ReactingLookupTableInjection();
|
||||||
@ -135,9 +142,6 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Flag to indicate whether model activates injection model
|
|
||||||
bool active() const;
|
|
||||||
|
|
||||||
//- Return the end-of-injection time
|
//- Return the end-of-injection time
|
||||||
scalar timeEnd() const;
|
scalar timeEnd() const;
|
||||||
|
|
||||||
|
|||||||
@ -106,6 +106,20 @@ Foam::LiquidEvaporation<CloudType>::LiquidEvaporation
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::LiquidEvaporation<CloudType>::LiquidEvaporation
|
||||||
|
(
|
||||||
|
const LiquidEvaporation<CloudType>& pcm
|
||||||
|
)
|
||||||
|
:
|
||||||
|
PhaseChangeModel<CloudType>(pcm),
|
||||||
|
liquids_(pcm.owner().thermo().liquids()),
|
||||||
|
activeLiquids_(pcm.activeLiquids_),
|
||||||
|
liqToCarrierMap_(pcm.liqToCarrierMap_),
|
||||||
|
liqToLiqMap_(pcm.liqToLiqMap_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template <class CloudType>
|
template <class CloudType>
|
||||||
@ -115,13 +129,6 @@ Foam::LiquidEvaporation<CloudType>::~LiquidEvaporation()
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
bool Foam::LiquidEvaporation<CloudType>::active() const
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
void Foam::LiquidEvaporation<CloudType>::calculate
|
void Foam::LiquidEvaporation<CloudType>::calculate
|
||||||
(
|
(
|
||||||
|
|||||||
@ -84,11 +84,19 @@ public:
|
|||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from dictionary
|
//- Construct from dictionary
|
||||||
LiquidEvaporation
|
LiquidEvaporation(const dictionary& dict, CloudType& cloud);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
LiquidEvaporation(const LiquidEvaporation<CloudType>& pcm);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<PhaseChangeModel<CloudType> > clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<PhaseChangeModel<CloudType> >
|
||||||
(
|
(
|
||||||
const dictionary& dict,
|
new LiquidEvaporation<CloudType>(*this)
|
||||||
CloudType& cloud
|
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
@ -97,9 +105,6 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Flag to indicate whether model activates phase change model
|
|
||||||
virtual bool active() const;
|
|
||||||
|
|
||||||
//- Update model
|
//- Update model
|
||||||
virtual void calculate
|
virtual void calculate
|
||||||
(
|
(
|
||||||
|
|||||||
@ -38,6 +38,16 @@ Foam::NoPhaseChange<CloudType>::NoPhaseChange
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::NoPhaseChange<CloudType>::NoPhaseChange
|
||||||
|
(
|
||||||
|
const NoPhaseChange<CloudType>& pcm
|
||||||
|
)
|
||||||
|
:
|
||||||
|
PhaseChangeModel<CloudType>(pcm.owner_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template <class CloudType>
|
template <class CloudType>
|
||||||
|
|||||||
@ -58,6 +58,18 @@ public:
|
|||||||
//- Construct from dictionary
|
//- Construct from dictionary
|
||||||
NoPhaseChange(const dictionary&, CloudType&);
|
NoPhaseChange(const dictionary&, CloudType&);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
NoPhaseChange(const NoPhaseChange<CloudType>& pcm);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<PhaseChangeModel<CloudType> > clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<PhaseChangeModel<CloudType> >
|
||||||
|
(
|
||||||
|
new NoPhaseChange<CloudType>(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~NoPhaseChange();
|
virtual ~NoPhaseChange();
|
||||||
|
|||||||
@ -75,13 +75,22 @@ Foam::PhaseChangeModel<CloudType>::PhaseChangeModel
|
|||||||
CloudType& owner
|
CloudType& owner
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
dict_(dictionary::null),
|
SubModelBase<CloudType>(owner),
|
||||||
owner_(owner),
|
|
||||||
coeffDict_(dictionary::null),
|
|
||||||
enthalpyTransfer_(etLatentHeat)
|
enthalpyTransfer_(etLatentHeat)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::PhaseChangeModel<CloudType>::PhaseChangeModel
|
||||||
|
(
|
||||||
|
const PhaseChangeModel<CloudType>& pcm
|
||||||
|
)
|
||||||
|
:
|
||||||
|
SubModelBase<CloudType>(pcm),
|
||||||
|
enthalpyTransfer_(pcm.enthalpyTransfer_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
Foam::PhaseChangeModel<CloudType>::PhaseChangeModel
|
Foam::PhaseChangeModel<CloudType>::PhaseChangeModel
|
||||||
(
|
(
|
||||||
@ -90,12 +99,10 @@ Foam::PhaseChangeModel<CloudType>::PhaseChangeModel
|
|||||||
const word& type
|
const word& type
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
dict_(dict),
|
SubModelBase<CloudType>(owner, dict, type),
|
||||||
owner_(owner),
|
|
||||||
coeffDict_(dict.subDict(type + "Coeffs")),
|
|
||||||
enthalpyTransfer_
|
enthalpyTransfer_
|
||||||
(
|
(
|
||||||
wordToEnthalpyTransfer(coeffDict_.lookup("enthalpyTransfer"))
|
wordToEnthalpyTransfer(this->coeffDict().lookup("enthalpyTransfer"))
|
||||||
)
|
)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@ -108,26 +115,6 @@ Foam::PhaseChangeModel<CloudType>::~PhaseChangeModel()
|
|||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
template<class CloudType>
|
|
||||||
const CloudType& Foam::PhaseChangeModel<CloudType>::owner() const
|
|
||||||
{
|
|
||||||
return owner_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
const Foam::dictionary& Foam::PhaseChangeModel<CloudType>::dict() const
|
|
||||||
{
|
|
||||||
return dict_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
const Foam::dictionary& Foam::PhaseChangeModel<CloudType>::coeffDict() const
|
|
||||||
{
|
|
||||||
return coeffDict_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
const typename Foam::PhaseChangeModel<CloudType>::enthalpyTransferType&
|
const typename Foam::PhaseChangeModel<CloudType>::enthalpyTransferType&
|
||||||
@ -137,6 +124,38 @@ Foam::PhaseChangeModel<CloudType>::enthalpyTransfer() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
void Foam::PhaseChangeModel<CloudType>::calculate
|
||||||
|
(
|
||||||
|
const scalar,
|
||||||
|
const label,
|
||||||
|
const scalar,
|
||||||
|
const scalar,
|
||||||
|
const scalar,
|
||||||
|
const scalar,
|
||||||
|
const scalar,
|
||||||
|
const scalar,
|
||||||
|
scalarField&
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
notImplemented
|
||||||
|
(
|
||||||
|
"void Foam::PhaseChangeModel<CloudType>::calculate"
|
||||||
|
"("
|
||||||
|
"const scalar, "
|
||||||
|
"const label, "
|
||||||
|
"const scalar, "
|
||||||
|
"const scalar, "
|
||||||
|
"const scalar, "
|
||||||
|
"const scalar, "
|
||||||
|
"const scalar, "
|
||||||
|
"const scalar, "
|
||||||
|
"scalarField&"
|
||||||
|
") const"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
#include "PhaseChangeModelNew.C"
|
#include "PhaseChangeModelNew.C"
|
||||||
|
|||||||
@ -39,6 +39,7 @@ SourceFiles
|
|||||||
#include "IOdictionary.H"
|
#include "IOdictionary.H"
|
||||||
#include "autoPtr.H"
|
#include "autoPtr.H"
|
||||||
#include "runTimeSelectionTables.H"
|
#include "runTimeSelectionTables.H"
|
||||||
|
#include "SubModelBase.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -51,6 +52,8 @@ namespace Foam
|
|||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
class PhaseChangeModel
|
class PhaseChangeModel
|
||||||
|
:
|
||||||
|
public SubModelBase<CloudType>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -71,15 +74,6 @@ protected:
|
|||||||
|
|
||||||
// Protected data
|
// Protected data
|
||||||
|
|
||||||
//- The cloud dictionary
|
|
||||||
const dictionary& dict_;
|
|
||||||
|
|
||||||
//- Reference to the owner cloud class
|
|
||||||
CloudType& owner_;
|
|
||||||
|
|
||||||
//- The coefficient dictionary
|
|
||||||
const dictionary coeffDict_;
|
|
||||||
|
|
||||||
//- Enthalpy transfer type enumeration
|
//- Enthalpy transfer type enumeration
|
||||||
enthalpyTransferType enthalpyTransfer_;
|
enthalpyTransferType enthalpyTransfer_;
|
||||||
|
|
||||||
@ -125,6 +119,18 @@ public:
|
|||||||
const word& type
|
const word& type
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
PhaseChangeModel(const PhaseChangeModel<CloudType>& pcm);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<PhaseChangeModel<CloudType> > clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<PhaseChangeModel<CloudType> >
|
||||||
|
(
|
||||||
|
new PhaseChangeModel<CloudType>(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~PhaseChangeModel();
|
virtual ~PhaseChangeModel();
|
||||||
@ -140,24 +146,12 @@ public:
|
|||||||
|
|
||||||
// Access
|
// Access
|
||||||
|
|
||||||
//- Return the owner cloud object
|
|
||||||
const CloudType& owner() const;
|
|
||||||
|
|
||||||
//- Return the cloud dictionary
|
|
||||||
const dictionary& dict() const;
|
|
||||||
|
|
||||||
//- Return the coefficient dictionary
|
|
||||||
const dictionary& coeffDict() const;
|
|
||||||
|
|
||||||
//- Return the enthalpy transfer type enumeration
|
//- Return the enthalpy transfer type enumeration
|
||||||
const enthalpyTransferType& enthalpyTransfer() const;
|
const enthalpyTransferType& enthalpyTransfer() const;
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Flag to indicate whether model activates phase change model
|
|
||||||
virtual bool active() const = 0;
|
|
||||||
|
|
||||||
//- Update model
|
//- Update model
|
||||||
virtual void calculate
|
virtual void calculate
|
||||||
(
|
(
|
||||||
@ -170,7 +164,7 @@ public:
|
|||||||
const scalar Ts,
|
const scalar Ts,
|
||||||
const scalar pc,
|
const scalar pc,
|
||||||
scalarField& dMassPC
|
scalarField& dMassPC
|
||||||
) const = 0;
|
) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -43,6 +43,18 @@ Foam::ConstantRateDevolatilisation<CloudType>::ConstantRateDevolatilisation
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
template <class CloudType>
|
||||||
|
Foam::ConstantRateDevolatilisation<CloudType>::ConstantRateDevolatilisation
|
||||||
|
(
|
||||||
|
const ConstantRateDevolatilisation<CloudType>& dm
|
||||||
|
)
|
||||||
|
:
|
||||||
|
DevolatilisationModel<CloudType>(dm),
|
||||||
|
A0_(dm.A0_),
|
||||||
|
volatileResidualCoeff_(dm.volatileResidualCoeff_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template <class CloudType>
|
template <class CloudType>
|
||||||
@ -52,13 +64,6 @@ Foam::ConstantRateDevolatilisation<CloudType>::~ConstantRateDevolatilisation()
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
bool Foam::ConstantRateDevolatilisation<CloudType>::active() const
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
Foam::scalar Foam::ConstantRateDevolatilisation<CloudType>::calculate
|
Foam::scalar Foam::ConstantRateDevolatilisation<CloudType>::calculate
|
||||||
(
|
(
|
||||||
|
|||||||
@ -70,12 +70,23 @@ public:
|
|||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from dictionary
|
//- Construct from dictionary
|
||||||
|
ConstantRateDevolatilisation(const dictionary& dict, CloudType& owner);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
ConstantRateDevolatilisation
|
ConstantRateDevolatilisation
|
||||||
(
|
(
|
||||||
const dictionary& dict,
|
const ConstantRateDevolatilisation<CloudType>& dm
|
||||||
CloudType& owner
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<DevolatilisationModel<CloudType> > clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<DevolatilisationModel<CloudType> >
|
||||||
|
(
|
||||||
|
new ConstantRateDevolatilisation<CloudType>(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~ConstantRateDevolatilisation();
|
virtual ~ConstantRateDevolatilisation();
|
||||||
@ -83,9 +94,6 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Flag to indicate whether model activates devolatilisation model
|
|
||||||
virtual bool active() const;
|
|
||||||
|
|
||||||
//- Update model
|
//- Update model
|
||||||
virtual scalar calculate
|
virtual scalar calculate
|
||||||
(
|
(
|
||||||
|
|||||||
@ -33,9 +33,7 @@ Foam::DevolatilisationModel<CloudType>::DevolatilisationModel
|
|||||||
CloudType& owner
|
CloudType& owner
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
dict_(dictionary::null),
|
SubModelBase<CloudType>(owner)
|
||||||
owner_(owner),
|
|
||||||
coeffDict_(dictionary::null)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -47,9 +45,17 @@ Foam::DevolatilisationModel<CloudType>::DevolatilisationModel
|
|||||||
const word& type
|
const word& type
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
dict_(dict),
|
SubModelBase<CloudType>(owner, dict, type)
|
||||||
owner_(owner),
|
{}
|
||||||
coeffDict_(dict.subDict(type + "Coeffs"))
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::DevolatilisationModel<CloudType>::DevolatilisationModel
|
||||||
|
(
|
||||||
|
const DevolatilisationModel<CloudType>& dm
|
||||||
|
)
|
||||||
|
:
|
||||||
|
SubModelBase<CloudType>(dm)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -61,25 +67,34 @@ Foam::DevolatilisationModel<CloudType>::~DevolatilisationModel()
|
|||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
template<class CloudType>
|
|
||||||
const CloudType& Foam::DevolatilisationModel<CloudType>::owner() const
|
|
||||||
{
|
|
||||||
return owner_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
const Foam::dictionary& Foam::DevolatilisationModel<CloudType>::dict() const
|
Foam::scalar Foam::DevolatilisationModel<CloudType>::calculate
|
||||||
|
(
|
||||||
|
const scalar,
|
||||||
|
const scalar,
|
||||||
|
const scalar,
|
||||||
|
const scalar,
|
||||||
|
const scalar,
|
||||||
|
const scalar,
|
||||||
|
bool&
|
||||||
|
) const
|
||||||
{
|
{
|
||||||
return dict_;
|
notImplemented
|
||||||
}
|
(
|
||||||
|
"void Foam::DevolatilisationModel<CloudType>::calculate"
|
||||||
|
"("
|
||||||
|
"const scalar, "
|
||||||
|
"const scalar, "
|
||||||
|
"const scalar, "
|
||||||
|
"const scalar, "
|
||||||
|
"const scalar, "
|
||||||
|
"const scalar, "
|
||||||
|
"bool&, "
|
||||||
|
") const"
|
||||||
|
);
|
||||||
|
|
||||||
|
return 0.0;
|
||||||
template<class CloudType>
|
|
||||||
const Foam::dictionary&
|
|
||||||
Foam::DevolatilisationModel<CloudType>::coeffDict() const
|
|
||||||
{
|
|
||||||
return coeffDict_;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -39,6 +39,7 @@ SourceFiles
|
|||||||
#include "IOdictionary.H"
|
#include "IOdictionary.H"
|
||||||
#include "autoPtr.H"
|
#include "autoPtr.H"
|
||||||
#include "runTimeSelectionTables.H"
|
#include "runTimeSelectionTables.H"
|
||||||
|
#include "SubModelBase.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -51,21 +52,9 @@ namespace Foam
|
|||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
class DevolatilisationModel
|
class DevolatilisationModel
|
||||||
|
:
|
||||||
|
public SubModelBase<CloudType>
|
||||||
{
|
{
|
||||||
protected:
|
|
||||||
|
|
||||||
// Protected data
|
|
||||||
|
|
||||||
//- The cloud dictionary
|
|
||||||
const dictionary& dict_;
|
|
||||||
|
|
||||||
//- Reference to the owner cloud class
|
|
||||||
CloudType& owner_;
|
|
||||||
|
|
||||||
//- The coefficient dictionary
|
|
||||||
const dictionary coeffDict_;
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//- Runtime type information
|
//- Runtime type information
|
||||||
@ -98,6 +87,18 @@ public:
|
|||||||
const word& type
|
const word& type
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
DevolatilisationModel(const DevolatilisationModel<CloudType>& dm);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<DevolatilisationModel<CloudType> > clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<DevolatilisationModel<CloudType> >
|
||||||
|
(
|
||||||
|
new DevolatilisationModel<CloudType>(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~DevolatilisationModel();
|
virtual ~DevolatilisationModel();
|
||||||
@ -111,23 +112,8 @@ public:
|
|||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
// Access
|
|
||||||
|
|
||||||
//- Return the owner cloud object
|
|
||||||
const CloudType& owner() const;
|
|
||||||
|
|
||||||
//- Return the cloud dictionary
|
|
||||||
const dictionary& dict() const;
|
|
||||||
|
|
||||||
//- Return the coefficient dictionary
|
|
||||||
const dictionary& coeffDict() const;
|
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Flag to indicate whether model activates devolatilisation model
|
|
||||||
virtual bool active() const = 0;
|
|
||||||
|
|
||||||
//- Update model
|
//- Update model
|
||||||
virtual scalar calculate
|
virtual scalar calculate
|
||||||
(
|
(
|
||||||
@ -138,7 +124,7 @@ public:
|
|||||||
const scalar YVolatile0,
|
const scalar YVolatile0,
|
||||||
const scalar YVolatile,
|
const scalar YVolatile,
|
||||||
bool& canCombust
|
bool& canCombust
|
||||||
) const = 0;
|
) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -38,6 +38,16 @@ Foam::NoDevolatilisation<CloudType>::NoDevolatilisation
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::NoDevolatilisation<CloudType>::NoDevolatilisation
|
||||||
|
(
|
||||||
|
const NoDevolatilisation<CloudType>& dm
|
||||||
|
)
|
||||||
|
:
|
||||||
|
DevolatilisationModel<CloudType>(dm.owner_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template <class CloudType>
|
template <class CloudType>
|
||||||
@ -69,7 +79,6 @@ Foam::scalar Foam::NoDevolatilisation<CloudType>::calculate
|
|||||||
// Model does not stop combustion taking place
|
// Model does not stop combustion taking place
|
||||||
canCombust = true;
|
canCombust = true;
|
||||||
|
|
||||||
// Nothing more to do...
|
|
||||||
return 0.0;
|
return 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -59,6 +59,18 @@ public:
|
|||||||
//- Construct from dictionary
|
//- Construct from dictionary
|
||||||
NoDevolatilisation(const dictionary&, CloudType& owner);
|
NoDevolatilisation(const dictionary&, CloudType& owner);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
NoDevolatilisation(const NoDevolatilisation<CloudType>& dm);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<DevolatilisationModel<CloudType> > clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<DevolatilisationModel<CloudType> >
|
||||||
|
(
|
||||||
|
new NoDevolatilisation<CloudType>(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~NoDevolatilisation();
|
virtual ~NoDevolatilisation();
|
||||||
|
|||||||
@ -45,6 +45,20 @@ SingleKineticRateDevolatilisation
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::SingleKineticRateDevolatilisation<CloudType>::
|
||||||
|
SingleKineticRateDevolatilisation
|
||||||
|
(
|
||||||
|
const SingleKineticRateDevolatilisation<CloudType>& dm
|
||||||
|
)
|
||||||
|
:
|
||||||
|
DevolatilisationModel<CloudType>(dm),
|
||||||
|
A1_(dm.A1_),
|
||||||
|
E_(dm.E_),
|
||||||
|
volatileResidualCoeff_(dm.volatileResidualCoeff_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template <class CloudType>
|
template <class CloudType>
|
||||||
@ -55,13 +69,6 @@ Foam::SingleKineticRateDevolatilisation<CloudType>::
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
bool Foam::SingleKineticRateDevolatilisation<CloudType>::active() const
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
Foam::scalar Foam::SingleKineticRateDevolatilisation<CloudType>::calculate
|
Foam::scalar Foam::SingleKineticRateDevolatilisation<CloudType>::calculate
|
||||||
(
|
(
|
||||||
|
|||||||
@ -78,6 +78,21 @@ public:
|
|||||||
CloudType& owner
|
CloudType& owner
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
SingleKineticRateDevolatilisation
|
||||||
|
(
|
||||||
|
const SingleKineticRateDevolatilisation<CloudType>& dm
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<DevolatilisationModel<CloudType> > clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<DevolatilisationModel<CloudType> >
|
||||||
|
(
|
||||||
|
new SingleKineticRateDevolatilisation<CloudType>(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~SingleKineticRateDevolatilisation();
|
virtual ~SingleKineticRateDevolatilisation();
|
||||||
@ -85,9 +100,6 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Flag to indicate whether model activates devolatilisation model
|
|
||||||
virtual bool active() const;
|
|
||||||
|
|
||||||
//- Update model
|
//- Update model
|
||||||
virtual scalar calculate
|
virtual scalar calculate
|
||||||
(
|
(
|
||||||
|
|||||||
@ -125,6 +125,24 @@ ReactingMultiphaseLookupTableInjection
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::ReactingMultiphaseLookupTableInjection<CloudType>::
|
||||||
|
ReactingMultiphaseLookupTableInjection
|
||||||
|
(
|
||||||
|
const ReactingMultiphaseLookupTableInjection<CloudType>& im
|
||||||
|
)
|
||||||
|
:
|
||||||
|
InjectionModel<CloudType>(im),
|
||||||
|
inputFileName_(im.inputFileName_),
|
||||||
|
duration_(im.duration_),
|
||||||
|
nParcelsPerSecond_(im.nParcelsPerSecond_),
|
||||||
|
injectors_(im.injectors_),
|
||||||
|
injectorCells_(im.injectorCells_),
|
||||||
|
injectorTetFaces_(im.injectorTetFaces_),
|
||||||
|
injectorTetPts_(im.injectorTetPts_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
@ -135,13 +153,6 @@ Foam::ReactingMultiphaseLookupTableInjection<CloudType>::
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
bool Foam::ReactingMultiphaseLookupTableInjection<CloudType>::active() const
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
Foam::scalar
|
Foam::scalar
|
||||||
Foam::ReactingMultiphaseLookupTableInjection<CloudType>::timeEnd() const
|
Foam::ReactingMultiphaseLookupTableInjection<CloudType>::timeEnd() const
|
||||||
|
|||||||
@ -102,18 +102,10 @@ protected:
|
|||||||
// Protected Member Functions
|
// Protected Member Functions
|
||||||
|
|
||||||
//- Number of parcels to introduce over the time step relative to SOI
|
//- Number of parcels to introduce over the time step relative to SOI
|
||||||
label parcelsToInject
|
virtual label parcelsToInject(const scalar time0, const scalar time1);
|
||||||
(
|
|
||||||
const scalar time0,
|
|
||||||
const scalar time1
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Volume of parcels to introduce over the time step relative to SOI
|
//- Volume of parcels to introduce over the time step relative to SOI
|
||||||
scalar volumeToInject
|
virtual scalar volumeToInject(const scalar time0, const scalar time1);
|
||||||
(
|
|
||||||
const scalar time0,
|
|
||||||
const scalar time1
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -131,6 +123,21 @@ public:
|
|||||||
CloudType& owner
|
CloudType& owner
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
ReactingMultiphaseLookupTableInjection
|
||||||
|
(
|
||||||
|
const ReactingMultiphaseLookupTableInjection<CloudType>& im
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<InjectionModel<CloudType> > clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<InjectionModel<CloudType> >
|
||||||
|
(
|
||||||
|
new ReactingMultiphaseLookupTableInjection<CloudType>(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~ReactingMultiphaseLookupTableInjection();
|
virtual ~ReactingMultiphaseLookupTableInjection();
|
||||||
@ -138,9 +145,6 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Flag to indicate whether model activates injection model
|
|
||||||
bool active() const;
|
|
||||||
|
|
||||||
//- Return the end-of-injection time
|
//- Return the end-of-injection time
|
||||||
scalar timeEnd() const;
|
scalar timeEnd() const;
|
||||||
|
|
||||||
|
|||||||
@ -27,7 +27,7 @@ License
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template <class CloudType>
|
template<class CloudType>
|
||||||
Foam::NoSurfaceReaction<CloudType>::NoSurfaceReaction
|
Foam::NoSurfaceReaction<CloudType>::NoSurfaceReaction
|
||||||
(
|
(
|
||||||
const dictionary&,
|
const dictionary&,
|
||||||
@ -38,6 +38,16 @@ Foam::NoSurfaceReaction<CloudType>::NoSurfaceReaction
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::NoSurfaceReaction<CloudType>::NoSurfaceReaction
|
||||||
|
(
|
||||||
|
const NoSurfaceReaction<CloudType>& srm
|
||||||
|
)
|
||||||
|
:
|
||||||
|
SurfaceReactionModel<CloudType>(srm.owner_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template <class CloudType>
|
template <class CloudType>
|
||||||
|
|||||||
@ -56,11 +56,19 @@ public:
|
|||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from dictionary
|
//- Construct from dictionary
|
||||||
NoSurfaceReaction
|
NoSurfaceReaction(const dictionary& dict, CloudType& owner);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
NoSurfaceReaction(const NoSurfaceReaction<CloudType>& srm);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<SurfaceReactionModel<CloudType> > clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<SurfaceReactionModel<CloudType> >
|
||||||
(
|
(
|
||||||
const dictionary& dict,
|
new NoSurfaceReaction<CloudType>(*this)
|
||||||
CloudType& owner
|
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
|
|||||||
@ -33,9 +33,7 @@ Foam::SurfaceReactionModel<CloudType>::SurfaceReactionModel
|
|||||||
CloudType& owner
|
CloudType& owner
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
dict_(dictionary::null),
|
SubModelBase<CloudType>(owner)
|
||||||
owner_(owner),
|
|
||||||
coeffDict_(dictionary::null)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -47,9 +45,17 @@ Foam::SurfaceReactionModel<CloudType>::SurfaceReactionModel
|
|||||||
const word& type
|
const word& type
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
dict_(dict),
|
SubModelBase<CloudType>(owner, dict, type)
|
||||||
owner_(owner),
|
{}
|
||||||
coeffDict_(dict.subDict(type + "Coeffs"))
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::SurfaceReactionModel<CloudType>::SurfaceReactionModel
|
||||||
|
(
|
||||||
|
const SurfaceReactionModel<CloudType>& srm
|
||||||
|
)
|
||||||
|
:
|
||||||
|
SubModelBase<CloudType>(srm)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -63,23 +69,52 @@ Foam::SurfaceReactionModel<CloudType>::~SurfaceReactionModel()
|
|||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
const CloudType& Foam::SurfaceReactionModel<CloudType>::owner() const
|
Foam::scalar Foam::SurfaceReactionModel<CloudType>::calculate
|
||||||
|
(
|
||||||
|
const scalar,
|
||||||
|
const label,
|
||||||
|
const scalar,
|
||||||
|
const scalar,
|
||||||
|
const scalar,
|
||||||
|
const scalar,
|
||||||
|
const scalar,
|
||||||
|
const scalar,
|
||||||
|
const scalarField&,
|
||||||
|
const scalarField&,
|
||||||
|
const scalarField&,
|
||||||
|
const scalarField&,
|
||||||
|
const scalar,
|
||||||
|
scalarField&,
|
||||||
|
scalarField&,
|
||||||
|
scalarField&,
|
||||||
|
scalarField&
|
||||||
|
) const
|
||||||
{
|
{
|
||||||
return owner_;
|
notImplemented
|
||||||
}
|
(
|
||||||
|
"Foam::scalar Foam::SurfaceReactionModel<CloudType>::calculate"
|
||||||
|
"("
|
||||||
|
"const scalar, "
|
||||||
|
"const label, "
|
||||||
|
"const scalar, "
|
||||||
|
"const scalar, "
|
||||||
|
"const scalar, "
|
||||||
|
"const scalar, "
|
||||||
|
"const scalar, "
|
||||||
|
"const scalar, "
|
||||||
|
"const scalarField&, "
|
||||||
|
"const scalarField&, "
|
||||||
|
"const scalarField&, "
|
||||||
|
"const scalarField&, "
|
||||||
|
"const scalar, "
|
||||||
|
"scalarField&, "
|
||||||
|
"scalarField&, "
|
||||||
|
"scalarField&, "
|
||||||
|
"scalarField&"
|
||||||
|
") const"
|
||||||
|
);
|
||||||
|
|
||||||
|
return 0.0;
|
||||||
template<class CloudType>
|
|
||||||
const Foam::dictionary& Foam::SurfaceReactionModel<CloudType>::dict() const
|
|
||||||
{
|
|
||||||
return dict_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class CloudType>
|
|
||||||
const Foam::dictionary& Foam::SurfaceReactionModel<CloudType>::coeffDict() const
|
|
||||||
{
|
|
||||||
return coeffDict_;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -39,7 +39,7 @@ SourceFiles
|
|||||||
#include "IOdictionary.H"
|
#include "IOdictionary.H"
|
||||||
#include "autoPtr.H"
|
#include "autoPtr.H"
|
||||||
#include "runTimeSelectionTables.H"
|
#include "runTimeSelectionTables.H"
|
||||||
|
#include "SubModelBase.H"
|
||||||
#include "scalarField.H"
|
#include "scalarField.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
@ -53,19 +53,9 @@ namespace Foam
|
|||||||
|
|
||||||
template<class CloudType>
|
template<class CloudType>
|
||||||
class SurfaceReactionModel
|
class SurfaceReactionModel
|
||||||
|
:
|
||||||
|
public SubModelBase<CloudType>
|
||||||
{
|
{
|
||||||
// Private data
|
|
||||||
|
|
||||||
//- The cloud dictionary
|
|
||||||
const dictionary& dict_;
|
|
||||||
|
|
||||||
//- Reference to the owner cloud class
|
|
||||||
CloudType& owner_;
|
|
||||||
|
|
||||||
//- The coefficients dictionary
|
|
||||||
const dictionary coeffDict_;
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//-Runtime type information
|
//-Runtime type information
|
||||||
@ -99,6 +89,18 @@ public:
|
|||||||
const word& type
|
const word& type
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Construct copy
|
||||||
|
SurfaceReactionModel(const SurfaceReactionModel<CloudType>& srm);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<SurfaceReactionModel<CloudType> > clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<SurfaceReactionModel<CloudType> >
|
||||||
|
(
|
||||||
|
new SurfaceReactionModel<CloudType>(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~SurfaceReactionModel();
|
virtual ~SurfaceReactionModel();
|
||||||
@ -112,23 +114,8 @@ public:
|
|||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
// Access
|
|
||||||
|
|
||||||
//- Return the owner cloud object
|
|
||||||
const CloudType& owner() const;
|
|
||||||
|
|
||||||
//- Return the cloud dictionary
|
|
||||||
const dictionary& dict() const;
|
|
||||||
|
|
||||||
//- Return the coefficients dictionary
|
|
||||||
const dictionary& coeffDict() const;
|
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Flag to indicate whether model activates surface reaction model
|
|
||||||
virtual bool active() const = 0;
|
|
||||||
|
|
||||||
//- Update surface reactions
|
//- Update surface reactions
|
||||||
// Returns the heat of reaction
|
// Returns the heat of reaction
|
||||||
virtual scalar calculate
|
virtual scalar calculate
|
||||||
@ -150,7 +137,7 @@ public:
|
|||||||
scalarField& dMassLiquid,
|
scalarField& dMassLiquid,
|
||||||
scalarField& dMassSolid,
|
scalarField& dMassSolid,
|
||||||
scalarField& dMassSRCarrier
|
scalarField& dMassSRCarrier
|
||||||
) const = 0;
|
) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
125
src/lagrangian/intermediate/submodels/SubModelBase.C
Normal file
125
src/lagrangian/intermediate/submodels/SubModelBase.C
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2010-2010 OpenCFD Ltd.
|
||||||
|
\\/ M anipulation |
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
License
|
||||||
|
This file is part of OpenFOAM.
|
||||||
|
|
||||||
|
OpenFOAM is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by the
|
||||||
|
Free Software Foundation; either version 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "SubModelBase.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::SubModelBase<CloudType>::SubModelBase(CloudType& owner)
|
||||||
|
:
|
||||||
|
owner_(owner),
|
||||||
|
dict_(dictionary::null),
|
||||||
|
coeffDict_(dictionary::null)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::SubModelBase<CloudType>::SubModelBase
|
||||||
|
(
|
||||||
|
CloudType& owner,
|
||||||
|
const dictionary& dict,
|
||||||
|
const word& name
|
||||||
|
)
|
||||||
|
:
|
||||||
|
owner_(owner),
|
||||||
|
dict_(dict),
|
||||||
|
coeffDict_(dict.subDict(name + "Coeffs"))
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::SubModelBase<CloudType>::SubModelBase(const SubModelBase<CloudType>& smb)
|
||||||
|
:
|
||||||
|
owner_(smb.owner_),
|
||||||
|
dict_(smb.dict_),
|
||||||
|
coeffDict_(smb.coeffDict_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
Foam::SubModelBase<CloudType>::~SubModelBase()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
const CloudType& Foam::SubModelBase<CloudType>::owner() const
|
||||||
|
{
|
||||||
|
return owner_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
const Foam::dictionary& Foam::SubModelBase<CloudType>::dict() const
|
||||||
|
{
|
||||||
|
return dict_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
const Foam::dictionary& Foam::SubModelBase<CloudType>::coeffDict() const
|
||||||
|
{
|
||||||
|
return coeffDict_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
CloudType& Foam::SubModelBase<CloudType>::owner()
|
||||||
|
{
|
||||||
|
return owner_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
bool Foam::SubModelBase<CloudType>::active() const
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
void Foam::SubModelBase<CloudType>::cacheFields(const bool)
|
||||||
|
{
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
void Foam::SubModelBase<CloudType>::write(Ostream& os) const
|
||||||
|
{
|
||||||
|
os.writeKeyword("owner") << owner_.name() << token::END_STATEMENT << nl;
|
||||||
|
|
||||||
|
// not writing complete cloud dictionary, only coeffs
|
||||||
|
// os << dict_;
|
||||||
|
os << coeffDict_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
142
src/lagrangian/intermediate/submodels/SubModelBase.H
Normal file
142
src/lagrangian/intermediate/submodels/SubModelBase.H
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2010-2010 OpenCFD Ltd.
|
||||||
|
\\/ M anipulation |
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
License
|
||||||
|
This file is part of OpenFOAM.
|
||||||
|
|
||||||
|
OpenFOAM is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by the
|
||||||
|
Free Software Foundation; either version 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Class
|
||||||
|
Foam::SubModelBase
|
||||||
|
|
||||||
|
Description
|
||||||
|
Base class for cloud sub-models
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
SubModelBase.C
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef SubModelBase_H
|
||||||
|
#define SubModelBase_H
|
||||||
|
|
||||||
|
#include "dictionary.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
// Forward declaration of classes
|
||||||
|
template<class CloudType>
|
||||||
|
class SubModelBase;
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class SubModelBase Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
template<class CloudType>
|
||||||
|
class SubModelBase
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
|
||||||
|
// Protected Data
|
||||||
|
|
||||||
|
//- Reference to the cloud
|
||||||
|
CloudType& owner_;
|
||||||
|
|
||||||
|
//- Reference to the cloud dictionary
|
||||||
|
const dictionary& dict_;
|
||||||
|
|
||||||
|
//- Reference to the coefficients dictionary
|
||||||
|
const dictionary& coeffDict_;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct null from owner cloud
|
||||||
|
SubModelBase(CloudType& owner);
|
||||||
|
|
||||||
|
//- Construct from owner cloud, dictionary, and model type name
|
||||||
|
SubModelBase
|
||||||
|
(
|
||||||
|
CloudType& owner,
|
||||||
|
const dictionary& dict,
|
||||||
|
const word& name
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct as copy
|
||||||
|
SubModelBase(const SubModelBase<CloudType>& smb);
|
||||||
|
|
||||||
|
|
||||||
|
//- Destructor
|
||||||
|
virtual ~SubModelBase();
|
||||||
|
|
||||||
|
|
||||||
|
// Member Functions
|
||||||
|
|
||||||
|
// Access
|
||||||
|
|
||||||
|
//- Return const access to the cloud dictionary
|
||||||
|
const dictionary& dict() const;
|
||||||
|
|
||||||
|
//- Return const access to the owner cloud
|
||||||
|
const CloudType& owner() const;
|
||||||
|
|
||||||
|
//- Return const access to the coefficients dictionary
|
||||||
|
const dictionary& coeffDict() const;
|
||||||
|
|
||||||
|
//- Return the model 'active' status - default active = true
|
||||||
|
virtual bool active() const;
|
||||||
|
|
||||||
|
//- Cache dependant sub-model fields
|
||||||
|
virtual void cacheFields(const bool store);
|
||||||
|
|
||||||
|
|
||||||
|
// Edit
|
||||||
|
|
||||||
|
//- Return non-const access to the owner cloud for manipulation
|
||||||
|
CloudType& owner();
|
||||||
|
|
||||||
|
|
||||||
|
// I-O
|
||||||
|
|
||||||
|
//- Write
|
||||||
|
virtual void write(Ostream& os) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#ifdef NoRepository
|
||||||
|
# include "SubModelBase.C"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user