ENH: lagrangian/intermediate Added new injection model list

This commit is contained in:
andy
2012-05-31 14:01:32 +01:00
parent ea54d3a184
commit 5ce74a271f
2 changed files with 340 additions and 0 deletions

View File

@ -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);
}
}
// ************************************************************************* //

View File

@ -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
// ************************************************************************* //