mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: lagrangian/intermediate Added new injection model list
This commit is contained in:
@ -0,0 +1,207 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2012 OpenFOAM Foundation
|
||||
\\/ 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 "InjectionModel.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
template<class CloudType>
|
||||
Foam::InjectionModelList<CloudType>::InjectionModelList(CloudType& owner)
|
||||
:
|
||||
PtrList<InjectionModel<CloudType> >()
|
||||
{}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
Foam::InjectionModelList<CloudType>::InjectionModelList
|
||||
(
|
||||
const dictionary& dict,
|
||||
CloudType& owner
|
||||
)
|
||||
:
|
||||
PtrList<InjectionModel<CloudType> >()
|
||||
{
|
||||
wordList modelNames(dict.toc());
|
||||
|
||||
Info<< "Constructing particle injection models" << endl;
|
||||
|
||||
if (modelNames.size() > 0)
|
||||
{
|
||||
this->setSize(modelNames.size());
|
||||
|
||||
label i = 0;
|
||||
forAllConstIter(IDLList<entry>, dict, iter)
|
||||
{
|
||||
const word& model = iter().keyword();
|
||||
Info<< "Creating injector: " << model << endl;
|
||||
const dictionary& props = iter().dict();
|
||||
|
||||
this->set
|
||||
(
|
||||
i++,
|
||||
InjectionModel<CloudType>::New
|
||||
(
|
||||
props,
|
||||
model,
|
||||
props.lookup("type"),
|
||||
owner
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
this->setSize(1);
|
||||
|
||||
this->set
|
||||
(
|
||||
0,
|
||||
InjectionModel<CloudType>::New
|
||||
(
|
||||
dict,
|
||||
"none",
|
||||
"none",
|
||||
owner
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
Foam::InjectionModelList<CloudType>::InjectionModelList
|
||||
(
|
||||
const InjectionModelList<CloudType>& iml
|
||||
)
|
||||
:
|
||||
PtrList<InjectionModel<CloudType> >(iml)
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
||||
template<class CloudType>
|
||||
Foam::InjectionModelList<CloudType>::~InjectionModelList()
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
template<class CloudType>
|
||||
Foam::scalar Foam::InjectionModelList<CloudType>::timeStart() const
|
||||
{
|
||||
scalar minTime = GREAT;
|
||||
forAll(*this, i)
|
||||
{
|
||||
minTime = min(minTime, this->operator[](i).timeStart());
|
||||
}
|
||||
|
||||
return minTime;
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
Foam::scalar Foam::InjectionModelList<CloudType>::timeEnd() const
|
||||
{
|
||||
scalar maxTime = -GREAT;
|
||||
forAll(*this, i)
|
||||
{
|
||||
maxTime = max(maxTime, this->operator[](i).timeEnd());
|
||||
}
|
||||
|
||||
return maxTime;
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
Foam::scalar Foam::InjectionModelList<CloudType>::volumeToInject
|
||||
(
|
||||
const scalar time0,
|
||||
const scalar time1
|
||||
)
|
||||
{
|
||||
scalar vol = 0.0;
|
||||
forAll(*this, i)
|
||||
{
|
||||
vol += this->operator[](i).volumeToInject(time0, time1);
|
||||
}
|
||||
|
||||
return vol;
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
Foam::scalar Foam::InjectionModelList<CloudType>::averageParcelMass()
|
||||
{
|
||||
scalar mass = 0.0;
|
||||
scalar massTotal = 0.0;
|
||||
forAll(*this, i)
|
||||
{
|
||||
scalar mt = this->operator[](i).massTotal();
|
||||
mass += mt*this->operator[](i).averageParcelMass();
|
||||
massTotal += mt;
|
||||
}
|
||||
|
||||
return mass/massTotal;
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
template<class TrackData>
|
||||
void Foam::InjectionModelList<CloudType>::inject(TrackData& td)
|
||||
{
|
||||
forAll(*this, i)
|
||||
{
|
||||
this->operator[](i).inject(td);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
template<class TrackData>
|
||||
void Foam::InjectionModelList<CloudType>::injectSteadyState
|
||||
(
|
||||
TrackData& td,
|
||||
const scalar trackTime
|
||||
)
|
||||
{
|
||||
forAll(*this, i)
|
||||
{
|
||||
this->operator[](i).injectSteadyState(td, trackTime);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
void Foam::InjectionModelList<CloudType>::info(Ostream& os)
|
||||
{
|
||||
forAll(*this, i)
|
||||
{
|
||||
this->operator[](i).info(os);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,133 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2012 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
|
||||
OpenFOAM is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Class
|
||||
Foam::InjectionModelList
|
||||
|
||||
Description
|
||||
List of injection models
|
||||
|
||||
SourceFiles
|
||||
InjectionModelListList.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef InjectionModelList_H
|
||||
#define InjectionModelList_H
|
||||
|
||||
#include "PtrList.H"
|
||||
#include "InjectionModel.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class InjectionModelList Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
template<class CloudType>
|
||||
class InjectionModelList
|
||||
:
|
||||
public PtrList<InjectionModel<CloudType> >
|
||||
{
|
||||
public:
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct null from owner
|
||||
InjectionModelList(CloudType& owner);
|
||||
|
||||
//- Construct from dictionary and cloud owner
|
||||
InjectionModelList(const dictionary& dict, CloudType& owner);
|
||||
|
||||
//- Construct copy
|
||||
InjectionModelList(const InjectionModelList<CloudType>& im);
|
||||
|
||||
//- Construct and return a clone
|
||||
virtual autoPtr<InjectionModelList<CloudType> > clone() const
|
||||
{
|
||||
return autoPtr<InjectionModelList<CloudType> >
|
||||
(
|
||||
new InjectionModelList<CloudType>(*this)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~InjectionModelList();
|
||||
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
// Access
|
||||
|
||||
//- Return the minimum start-of-injection time
|
||||
scalar timeStart() const;
|
||||
|
||||
//- Return the maximum end-of-injection time
|
||||
scalar timeEnd() const;
|
||||
|
||||
//- Volume of parcels to introduce relative to SOI
|
||||
scalar volumeToInject(const scalar time0, const scalar time1);
|
||||
|
||||
//- Return the average parcel mass
|
||||
scalar averageParcelMass();
|
||||
|
||||
|
||||
// Per-injection event functions
|
||||
|
||||
//- Main injection loop
|
||||
template<class TrackData>
|
||||
void inject(TrackData& td);
|
||||
|
||||
//- Main injection loop - steady-state
|
||||
template<class TrackData>
|
||||
void injectSteadyState(TrackData& td, const scalar trackTime);
|
||||
|
||||
|
||||
|
||||
// I-O
|
||||
|
||||
//- Write injection info to stream
|
||||
virtual void info(Ostream& os);
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#ifdef NoRepository
|
||||
# include "InjectionModelList.C"
|
||||
#endif
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
Reference in New Issue
Block a user