mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: Overhaul of time activated explicit sources
- deprecated: - timeActivatedExplicitSource (old base type) - timeActivatedExplicitCellSource - timeActivatedExplicitMulticomponentPointSource - introduced timeActivatedExplicitSource - templated on primitive type - scalar, vector, tensor... - takes as input, either a cell set or list of points
This commit is contained in:
@ -341,10 +341,5 @@ $(SRF)/derivedFvPatchFields/SRFVelocityFvPatchVectorField/SRFVelocityFvPatchVect
|
|||||||
fieldSources = $(general)/fieldSources
|
fieldSources = $(general)/fieldSources
|
||||||
$(fieldSources)/pressureGradientExplicitSource/pressureGradientExplicitSource.C
|
$(fieldSources)/pressureGradientExplicitSource/pressureGradientExplicitSource.C
|
||||||
$(fieldSources)/timeActivatedExplicitSource/timeActivatedExplicitSource.C
|
$(fieldSources)/timeActivatedExplicitSource/timeActivatedExplicitSource.C
|
||||||
$(fieldSources)/timeActivatedExplicitCellSource/timeActivatedExplicitCellSource.C
|
|
||||||
|
|
||||||
$(fieldSources)/timeActivatedExplicitMulticomponentPointSource/timeActivatedExplicitMulticomponentPointSource.C
|
|
||||||
$(fieldSources)/timeActivatedExplicitMulticomponentPointSource/pointSourceProperties/pointSourceProperties.C
|
|
||||||
$(fieldSources)/timeActivatedExplicitMulticomponentPointSource/pointSourceProperties/pointSourcePropertiesIO.C
|
|
||||||
|
|
||||||
LIB = $(FOAM_LIBBIN)/libfiniteVolume
|
LIB = $(FOAM_LIBBIN)/libfiniteVolume
|
||||||
|
|||||||
@ -1,175 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
========= |
|
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
||||||
\\ / O peration |
|
|
||||||
\\ / A nd | Copyright (C) 1991-2009 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 "timeActivatedExplicitCellSource.H"
|
|
||||||
#include "volFields.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
|
||||||
|
|
||||||
void Foam::timeActivatedExplicitCellSource::updateCellSet()
|
|
||||||
{
|
|
||||||
cellSelector_->applyToSet(topoSetSource::NEW, selectedCellSet_);
|
|
||||||
|
|
||||||
Info<< " " << name_ << ": selected "
|
|
||||||
<< returnReduce(selectedCellSet_.size(), sumOp<label>())
|
|
||||||
<< " cells" << nl << endl;
|
|
||||||
|
|
||||||
V_ = scalarField(selectedCellSet_.size(), 1.0);
|
|
||||||
if (volumeType_ == vtAbsolute)
|
|
||||||
{
|
|
||||||
label i = 0;
|
|
||||||
forAllConstIter(cellSet, selectedCellSet_, iter)
|
|
||||||
{
|
|
||||||
V_[i++] = mesh_.V()[iter.key()];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
Foam::timeActivatedExplicitCellSource::timeActivatedExplicitCellSource
|
|
||||||
(
|
|
||||||
const word& name,
|
|
||||||
const fvMesh& mesh,
|
|
||||||
const dimensionSet& dims
|
|
||||||
)
|
|
||||||
:
|
|
||||||
timeActivatedExplicitSource(name, mesh, dims),
|
|
||||||
onValue_(readScalar(lookup("onValue"))),
|
|
||||||
offValue_(readScalar(lookup("offValue"))),
|
|
||||||
V_(0),
|
|
||||||
cellSource_(lookup("cellSource")),
|
|
||||||
cellSelector_
|
|
||||||
(
|
|
||||||
topoSetSource::New
|
|
||||||
(
|
|
||||||
cellSource_,
|
|
||||||
mesh,
|
|
||||||
subDict(cellSource_ + "Coeffs")
|
|
||||||
)
|
|
||||||
),
|
|
||||||
selectedCellSet_
|
|
||||||
(
|
|
||||||
mesh,
|
|
||||||
name + "SourceCellSet",
|
|
||||||
mesh.nCells()/10 + 1 // Reasonable size estimate.
|
|
||||||
)
|
|
||||||
{
|
|
||||||
// Create the cell set
|
|
||||||
updateCellSet();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
Foam::scalar Foam::timeActivatedExplicitCellSource::onValue() const
|
|
||||||
{
|
|
||||||
return onValue_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Foam::scalar Foam::timeActivatedExplicitCellSource::offValue() const
|
|
||||||
{
|
|
||||||
return offValue_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Foam::tmp<Foam::DimensionedField<Foam::scalar, Foam::volMesh> >
|
|
||||||
Foam::timeActivatedExplicitCellSource::Su()
|
|
||||||
{
|
|
||||||
tmp<DimensionedField<scalar, volMesh> > tSource
|
|
||||||
(
|
|
||||||
new DimensionedField<scalar, volMesh>
|
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
name_ + "Su",
|
|
||||||
runTime_.timeName(),
|
|
||||||
mesh_,
|
|
||||||
IOobject::NO_READ,
|
|
||||||
IOobject::NO_WRITE
|
|
||||||
),
|
|
||||||
mesh_,
|
|
||||||
dimensionedScalar("zero", dimensions_, 0.0)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
scalar value = offValue_;
|
|
||||||
if
|
|
||||||
(
|
|
||||||
active_
|
|
||||||
&& (runTime_.time().value() >= timeStart_)
|
|
||||||
&& (runTime_.time().value() <= timeStart_ + duration_)
|
|
||||||
)
|
|
||||||
{
|
|
||||||
// Update the cell set if the mesh is changing
|
|
||||||
if (mesh_.changing())
|
|
||||||
{
|
|
||||||
updateCellSet();
|
|
||||||
}
|
|
||||||
|
|
||||||
value = onValue_;
|
|
||||||
}
|
|
||||||
|
|
||||||
DimensionedField<scalar, volMesh>& sourceField = tSource();
|
|
||||||
|
|
||||||
label i = 0;
|
|
||||||
forAllConstIter(cellSet, selectedCellSet_, iter)
|
|
||||||
{
|
|
||||||
sourceField[iter.key()] = value/V_[i++];
|
|
||||||
}
|
|
||||||
|
|
||||||
return tSource;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool Foam::timeActivatedExplicitCellSource::read()
|
|
||||||
{
|
|
||||||
if (timeActivatedExplicitSource::read())
|
|
||||||
{
|
|
||||||
lookup("onValue") >> onValue_;
|
|
||||||
lookup("offValue") >> offValue_;
|
|
||||||
lookup("cellSource") >> cellSource_;
|
|
||||||
cellSelector_ =
|
|
||||||
topoSetSource::New
|
|
||||||
(
|
|
||||||
cellSource_,
|
|
||||||
mesh_,
|
|
||||||
subDict(cellSource_ + "Coeffs")
|
|
||||||
);
|
|
||||||
updateCellSet();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -1,143 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
========= |
|
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
||||||
\\ / O peration |
|
|
||||||
\\ / A nd | Copyright (C) 1991-2009 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::timeActivatedExplicitSourceNew
|
|
||||||
|
|
||||||
Description
|
|
||||||
Creates a cell set source that is activated at a given time, and remains
|
|
||||||
active for a specified duration. The source value is either in specific
|
|
||||||
(XX/m3) or absolute (XX) units.
|
|
||||||
|
|
||||||
SourceFiles
|
|
||||||
timeActivatedExplicitCellSource.C
|
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#ifndef timeActivatedExplicitCellSource_H
|
|
||||||
#define timeActivatedExplicitCellSource_H
|
|
||||||
|
|
||||||
#include "timeActivatedExplicitSource.H"
|
|
||||||
#include "topoSetSource.H"
|
|
||||||
#include "cellSet.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
namespace Foam
|
|
||||||
{
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
Class timeActivatedExplicitCellSource Declaration
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
class timeActivatedExplicitCellSource
|
|
||||||
:
|
|
||||||
public timeActivatedExplicitSource
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
|
|
||||||
// Private member functions
|
|
||||||
|
|
||||||
//- Update the cell set that the source is acting on
|
|
||||||
void updateCellSet();
|
|
||||||
|
|
||||||
|
|
||||||
// Private Member Functions
|
|
||||||
|
|
||||||
//- Disallow default bitwise copy construct
|
|
||||||
timeActivatedExplicitCellSource(const timeActivatedExplicitCellSource&);
|
|
||||||
|
|
||||||
//- Disallow default bitwise assignment
|
|
||||||
void operator=(const timeActivatedExplicitCellSource&);
|
|
||||||
|
|
||||||
|
|
||||||
protected:
|
|
||||||
|
|
||||||
// Protected data
|
|
||||||
|
|
||||||
// Source properties
|
|
||||||
|
|
||||||
//- Value when "on"
|
|
||||||
scalar onValue_;
|
|
||||||
|
|
||||||
//- Value when "off"
|
|
||||||
scalar offValue_;
|
|
||||||
|
|
||||||
|
|
||||||
// Cell set
|
|
||||||
|
|
||||||
//- Cell volumes
|
|
||||||
scalarList V_;
|
|
||||||
|
|
||||||
//- Name of cell source (XXXToCell)
|
|
||||||
word cellSource_;
|
|
||||||
|
|
||||||
//- Method by which the cells will be selected
|
|
||||||
autoPtr<topoSetSource> cellSelector_;
|
|
||||||
|
|
||||||
//- Set of selected cells
|
|
||||||
cellSet selectedCellSet_;
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
// Constructors
|
|
||||||
|
|
||||||
//- Construct from explicit source name and mesh
|
|
||||||
timeActivatedExplicitCellSource
|
|
||||||
(
|
|
||||||
const word&,
|
|
||||||
const fvMesh&,
|
|
||||||
const dimensionSet&
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
|
||||||
|
|
||||||
// Access
|
|
||||||
|
|
||||||
//- Return the "on" value
|
|
||||||
virtual scalar onValue() const;
|
|
||||||
|
|
||||||
//- Return the "off" value
|
|
||||||
virtual scalar offValue() const;
|
|
||||||
|
|
||||||
//- Return a tmp field of the source
|
|
||||||
virtual tmp<DimensionedField<scalar, volMesh> > Su();
|
|
||||||
|
|
||||||
|
|
||||||
//- Read properties dictionary
|
|
||||||
virtual bool read();
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
} // End namespace Foam
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -1,87 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
========= |
|
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
||||||
\\ / O peration |
|
|
||||||
\\ / A nd | Copyright (C) 1991-2009 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 "pointSourceProperties.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
Foam::pointSourceProperties::pointSourceProperties()
|
|
||||||
:
|
|
||||||
name_("unknownPointSourceName"),
|
|
||||||
timeStart_(0.0),
|
|
||||||
duration_(0.0),
|
|
||||||
location_(point::zero),
|
|
||||||
fieldData_()
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
Foam::pointSourceProperties::pointSourceProperties(const dictionary& dict)
|
|
||||||
:
|
|
||||||
name_(dict.name().name()),
|
|
||||||
timeStart_(readScalar(dict.lookup("timeStart"))),
|
|
||||||
duration_(readScalar(dict.lookup("duration"))),
|
|
||||||
location_(dict.lookup("location")),
|
|
||||||
fieldData_(dict.lookup("fieldData"))
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
Foam::pointSourceProperties::pointSourceProperties
|
|
||||||
(
|
|
||||||
const pointSourceProperties& psp
|
|
||||||
)
|
|
||||||
:
|
|
||||||
name_(psp.name_),
|
|
||||||
timeStart_(psp.timeStart_),
|
|
||||||
duration_(psp.duration_),
|
|
||||||
location_(psp.location_),
|
|
||||||
fieldData_(psp.fieldData_)
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
void Foam::pointSourceProperties::operator=(const pointSourceProperties& rhs)
|
|
||||||
{
|
|
||||||
// Check for assignment to self
|
|
||||||
if (this == &rhs)
|
|
||||||
{
|
|
||||||
FatalErrorIn
|
|
||||||
(
|
|
||||||
"pointSourceProperties::operator=(const pointSourceProperties&)"
|
|
||||||
) << "Attempted assignment to self" << nl
|
|
||||||
<< abort(FatalError);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set updated values
|
|
||||||
name_ = rhs.name_;
|
|
||||||
timeStart_ = rhs.timeStart_;
|
|
||||||
duration_ = rhs.duration_;
|
|
||||||
location_ = rhs.location_;
|
|
||||||
fieldData_ = rhs.fieldData_;}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -1,158 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
========= |
|
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
||||||
\\ / O peration |
|
|
||||||
\\ / A nd | Copyright (C) 1991-2009 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::pointSourceProperties
|
|
||||||
|
|
||||||
Description
|
|
||||||
Helper class to describe point source properties
|
|
||||||
|
|
||||||
SourceFiles
|
|
||||||
pointSourceProperties.C
|
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#ifndef pointSourceProperties_H
|
|
||||||
#define pointSourceProperties_H
|
|
||||||
|
|
||||||
#include "IOdictionary.H"
|
|
||||||
#include "fvMesh.H"
|
|
||||||
#include "Time.H"
|
|
||||||
#include "Tuple2.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
namespace Foam
|
|
||||||
{
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
Class pointSourceProperties Declaration
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
class pointSourceProperties
|
|
||||||
{
|
|
||||||
protected:
|
|
||||||
|
|
||||||
// Protected data
|
|
||||||
|
|
||||||
typedef Tuple2<word, scalar> fieldNameValuePair;
|
|
||||||
|
|
||||||
//- Source name
|
|
||||||
word name_;
|
|
||||||
|
|
||||||
//- Time start
|
|
||||||
scalar timeStart_;
|
|
||||||
|
|
||||||
//- Duration
|
|
||||||
scalar duration_;
|
|
||||||
|
|
||||||
//- Point location
|
|
||||||
point location_;
|
|
||||||
|
|
||||||
//- List of source field name vs value pairs
|
|
||||||
List<fieldNameValuePair> fieldData_;
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
// Constructors
|
|
||||||
|
|
||||||
//- Construct null
|
|
||||||
pointSourceProperties();
|
|
||||||
|
|
||||||
//- Construct from dictionary
|
|
||||||
pointSourceProperties(const dictionary& dict);
|
|
||||||
|
|
||||||
//- Construct from Istream
|
|
||||||
pointSourceProperties(Istream& is);
|
|
||||||
|
|
||||||
//- Copy constructor
|
|
||||||
pointSourceProperties(const pointSourceProperties&);
|
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
|
||||||
|
|
||||||
// Access
|
|
||||||
|
|
||||||
//- Return const access to the source name
|
|
||||||
inline const word& name() const;
|
|
||||||
|
|
||||||
//- Return const access to the time start
|
|
||||||
inline scalar timeStart() const;
|
|
||||||
|
|
||||||
//- Return const access to the time end
|
|
||||||
inline scalar timeEnd() const;
|
|
||||||
|
|
||||||
//- Return const access to the duration
|
|
||||||
inline scalar duration() const;
|
|
||||||
|
|
||||||
//- Return const access to the point location
|
|
||||||
inline const point& location() const;
|
|
||||||
|
|
||||||
//- Return const access to the source field name vs value pairs
|
|
||||||
inline const List<fieldNameValuePair>& fieldData() const;
|
|
||||||
|
|
||||||
|
|
||||||
// Edit
|
|
||||||
|
|
||||||
//- Return access to the source name
|
|
||||||
inline word& name();
|
|
||||||
|
|
||||||
//- Return access to the time start
|
|
||||||
inline scalar& timeStart();
|
|
||||||
|
|
||||||
//- Return access to the duration
|
|
||||||
inline scalar& duration();
|
|
||||||
|
|
||||||
//- Return access to the point location
|
|
||||||
inline point& location();
|
|
||||||
|
|
||||||
//- Return access to the source field name vs value pairs
|
|
||||||
inline List<fieldNameValuePair>& fieldData();
|
|
||||||
|
|
||||||
|
|
||||||
// Member Operators
|
|
||||||
|
|
||||||
void operator=(const pointSourceProperties&);
|
|
||||||
|
|
||||||
// IOstream operators
|
|
||||||
|
|
||||||
friend Istream& operator>>(Istream&, pointSourceProperties&);
|
|
||||||
friend Ostream& operator<<(Ostream&, const pointSourceProperties&);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
} // End namespace Foam
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
#include "pointSourcePropertiesI.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -1,99 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
========= |
|
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
||||||
\\ / O peration |
|
|
||||||
\\ / A nd | Copyright (C) 1991-2009 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 "pointSourceProperties.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
inline const Foam::word& Foam::pointSourceProperties::name() const
|
|
||||||
{
|
|
||||||
return name_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
inline Foam::scalar Foam::pointSourceProperties::timeStart() const
|
|
||||||
{
|
|
||||||
return timeStart_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
inline Foam::scalar Foam::pointSourceProperties::timeEnd() const
|
|
||||||
{
|
|
||||||
return timeStart_ + duration_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
inline Foam::scalar Foam::pointSourceProperties::duration() const
|
|
||||||
{
|
|
||||||
return duration_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
inline const Foam::point& Foam::pointSourceProperties::location() const
|
|
||||||
{
|
|
||||||
return location_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
inline const Foam::List<Foam::pointSourceProperties::fieldNameValuePair>&
|
|
||||||
Foam::pointSourceProperties::fieldData() const
|
|
||||||
{
|
|
||||||
return fieldData_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
inline Foam::word& Foam::pointSourceProperties::name()
|
|
||||||
{
|
|
||||||
return name_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
inline Foam::scalar& Foam::pointSourceProperties::timeStart()
|
|
||||||
{
|
|
||||||
return timeStart_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
inline Foam::scalar& Foam::pointSourceProperties::duration()
|
|
||||||
{
|
|
||||||
return duration_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
inline Foam::point& Foam::pointSourceProperties::location()
|
|
||||||
{
|
|
||||||
return location_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
inline Foam::List<Foam::pointSourceProperties::fieldNameValuePair>&
|
|
||||||
Foam::pointSourceProperties::fieldData()
|
|
||||||
{
|
|
||||||
return fieldData_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -1,88 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
========= |
|
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
||||||
\\ / O peration |
|
|
||||||
\\ / A nd | Copyright (C) 1991-2009 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 "pointSourceProperties.H"
|
|
||||||
#include "dictionaryEntry.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
Foam::pointSourceProperties::pointSourceProperties(Istream& is)
|
|
||||||
:
|
|
||||||
name_("unknownPointSourceName"),
|
|
||||||
timeStart_(0.0),
|
|
||||||
duration_(0.0),
|
|
||||||
location_(point::zero),
|
|
||||||
fieldData_()
|
|
||||||
{
|
|
||||||
is.check("pointSourceProperties(Istream&)");
|
|
||||||
|
|
||||||
const dictionaryEntry entry(dictionary::null, is);
|
|
||||||
|
|
||||||
name_ = entry.keyword();
|
|
||||||
entry.lookup("timeStart") >> timeStart_;
|
|
||||||
entry.lookup("duration") >> duration_;
|
|
||||||
entry.lookup("location") >> location_;
|
|
||||||
entry.lookup("fieldData") >> fieldData_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
Foam::Istream& Foam::operator>>(Istream& is, pointSourceProperties& psp)
|
|
||||||
{
|
|
||||||
is.check("Istream& operator>>(Istream&, pointSourceProperties&)");
|
|
||||||
|
|
||||||
const dictionaryEntry entry(dictionary::null, is);
|
|
||||||
|
|
||||||
psp.name_ = entry.keyword();
|
|
||||||
entry.lookup("timeStart") >> psp.timeStart_;
|
|
||||||
entry.lookup("duration") >> psp.duration_;
|
|
||||||
entry.lookup("location") >> psp.location_;
|
|
||||||
entry.lookup("fieldData") >> psp.fieldData_;
|
|
||||||
|
|
||||||
return is;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Foam::Ostream& Foam::operator<<(Ostream& os, const pointSourceProperties& psp)
|
|
||||||
{
|
|
||||||
os.check("Ostream& operator<<(Ostream&, const pointSourceProperties&)");
|
|
||||||
|
|
||||||
os << psp.name_ << nl << token::BEGIN_BLOCK << nl;
|
|
||||||
os.writeKeyword("timeStart") << psp.timeStart_ << token::END_STATEMENT << nl;
|
|
||||||
os.writeKeyword("duration") << psp.duration_ << token::END_STATEMENT << nl;
|
|
||||||
os.writeKeyword("location") << psp.location_ << token::END_STATEMENT << nl;
|
|
||||||
os.writeKeyword("fieldData") << psp.fieldData_ << token::END_STATEMENT << nl;
|
|
||||||
os << token::END_BLOCK << nl;
|
|
||||||
|
|
||||||
os.check("Ostream& operator<<(Ostream&, const pointSourceProperties&)");
|
|
||||||
|
|
||||||
return os;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -1,292 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
========= |
|
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
||||||
\\ / O peration |
|
|
||||||
\\ / A nd | Copyright (C) 1991-2009 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 "timeActivatedExplicitMulticomponentPointSource.H"
|
|
||||||
#include "volFields.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
|
||||||
|
|
||||||
Foam::label
|
|
||||||
Foam::timeActivatedExplicitMulticomponentPointSource::carrierFieldId
|
|
||||||
(
|
|
||||||
const word& fieldName
|
|
||||||
)
|
|
||||||
{
|
|
||||||
forAll(carrierFields_, fieldI)
|
|
||||||
{
|
|
||||||
if (carrierFields_[fieldI].name() == fieldName)
|
|
||||||
{
|
|
||||||
return fieldI;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::timeActivatedExplicitMulticomponentPointSource::updateAddressing()
|
|
||||||
{
|
|
||||||
forAll(pointSources_, sourceI)
|
|
||||||
{
|
|
||||||
const pointSourceProperties& psp = pointSources_[sourceI];
|
|
||||||
bool foundCell = false;
|
|
||||||
label cid = mesh_.findCell(psp.location());
|
|
||||||
if (cid >= 0)
|
|
||||||
{
|
|
||||||
foundCell = mesh_.pointInCell(psp.location(), cid);
|
|
||||||
}
|
|
||||||
reduce(foundCell, orOp<bool>());
|
|
||||||
if (!foundCell)
|
|
||||||
{
|
|
||||||
label cid = mesh_.findNearestCell(psp.location());
|
|
||||||
if (cid >= 0)
|
|
||||||
{
|
|
||||||
foundCell = mesh_.pointInCell(psp.location(), cid);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
reduce(foundCell, orOp<bool>());
|
|
||||||
|
|
||||||
if (!foundCell)
|
|
||||||
{
|
|
||||||
FatalErrorIn
|
|
||||||
(
|
|
||||||
"timeActivatedExplicitMulticomponentPointSource::"
|
|
||||||
"updateAddressing()"
|
|
||||||
) << "Unable to find location " << psp.location() << " in mesh "
|
|
||||||
<< "for source " << psp.name() << nl
|
|
||||||
<< exit(FatalError);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
cellOwners_[sourceI] = cid;
|
|
||||||
}
|
|
||||||
|
|
||||||
fieldIds_[sourceI].setSize(psp.fieldData().size());
|
|
||||||
forAll(psp.fieldData(), fieldI)
|
|
||||||
{
|
|
||||||
const word& fieldName = psp.fieldData()[fieldI].first();
|
|
||||||
label cfid = carrierFieldId(fieldName);
|
|
||||||
if (cfid < 0)
|
|
||||||
{
|
|
||||||
FatalErrorIn
|
|
||||||
(
|
|
||||||
"timeActivatedExplicitMulticomponentPointSource::"
|
|
||||||
"updateAddressing()"
|
|
||||||
) << "Unable to find field " << fieldName << " in carrier "
|
|
||||||
<< "fields for source " << psp.name() << nl
|
|
||||||
<< exit(FatalError);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
fieldIds_[sourceI][fieldI] = cfid;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
Foam::timeActivatedExplicitMulticomponentPointSource::
|
|
||||||
timeActivatedExplicitMulticomponentPointSource
|
|
||||||
(
|
|
||||||
const word& name,
|
|
||||||
const fvMesh& mesh,
|
|
||||||
const PtrList<volScalarField>& carrierFields,
|
|
||||||
const dimensionSet& dims
|
|
||||||
)
|
|
||||||
:
|
|
||||||
IOdictionary
|
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
name + "Properties",
|
|
||||||
mesh.time().constant(),
|
|
||||||
mesh,
|
|
||||||
IOobject::MUST_READ,
|
|
||||||
IOobject::NO_WRITE
|
|
||||||
)
|
|
||||||
),
|
|
||||||
name_(name),
|
|
||||||
mesh_(mesh),
|
|
||||||
runTime_(mesh.time()),
|
|
||||||
dimensions_(dims),
|
|
||||||
carrierFields_(carrierFields),
|
|
||||||
active_(lookup("active")),
|
|
||||||
pointSources_(lookup("pointSources")),
|
|
||||||
cellOwners_(pointSources_.size()),
|
|
||||||
fieldIds_(pointSources_.size())
|
|
||||||
{
|
|
||||||
// Initialise the field addressing
|
|
||||||
updateAddressing();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
Foam::tmp<Foam::DimensionedField<Foam::scalar, Foam::volMesh> >
|
|
||||||
Foam::timeActivatedExplicitMulticomponentPointSource::Su
|
|
||||||
(
|
|
||||||
const label fieldI
|
|
||||||
)
|
|
||||||
{
|
|
||||||
if (mesh_.changing())
|
|
||||||
{
|
|
||||||
updateAddressing();
|
|
||||||
}
|
|
||||||
|
|
||||||
tmp<DimensionedField<scalar, volMesh> > tSource
|
|
||||||
(
|
|
||||||
new DimensionedField<scalar, volMesh>
|
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
name_ + carrierFields_[fieldI].name() + "Su",
|
|
||||||
runTime_.timeName(),
|
|
||||||
mesh_,
|
|
||||||
IOobject::NO_READ,
|
|
||||||
IOobject::NO_WRITE
|
|
||||||
),
|
|
||||||
mesh_,
|
|
||||||
dimensionedScalar("zero", dimensions_, 0.0)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
if (active_)
|
|
||||||
{
|
|
||||||
DimensionedField<scalar, volMesh>& sourceField = tSource();
|
|
||||||
|
|
||||||
const scalarField& V = mesh_.V();
|
|
||||||
const scalar dt = runTime_.deltaTValue();
|
|
||||||
|
|
||||||
forAll(pointSources_, sourceI)
|
|
||||||
{
|
|
||||||
const pointSourceProperties& psp = pointSources_[sourceI];
|
|
||||||
|
|
||||||
forAll(fieldIds_[sourceI], i)
|
|
||||||
{
|
|
||||||
if
|
|
||||||
(
|
|
||||||
fieldIds_[sourceI][i] == fieldI
|
|
||||||
&& (runTime_.time().value() >= psp.timeStart())
|
|
||||||
&& (runTime_.time().value() <= psp.timeEnd())
|
|
||||||
)
|
|
||||||
{
|
|
||||||
const label cid = cellOwners_[sourceI];
|
|
||||||
if (cid >= 0)
|
|
||||||
{
|
|
||||||
sourceField[cid] +=
|
|
||||||
dt*psp.fieldData()[i].second()/V[cid];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return tSource;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Foam::tmp<Foam::DimensionedField<Foam::scalar, Foam::volMesh> >
|
|
||||||
Foam::timeActivatedExplicitMulticomponentPointSource::Su()
|
|
||||||
{
|
|
||||||
if (mesh_.changing())
|
|
||||||
{
|
|
||||||
updateAddressing();
|
|
||||||
}
|
|
||||||
|
|
||||||
tmp<DimensionedField<scalar, volMesh> > tSource
|
|
||||||
(
|
|
||||||
new DimensionedField<scalar, volMesh>
|
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
name_ + "TotalSu",
|
|
||||||
runTime_.timeName(),
|
|
||||||
mesh_,
|
|
||||||
IOobject::NO_READ,
|
|
||||||
IOobject::NO_WRITE
|
|
||||||
),
|
|
||||||
mesh_,
|
|
||||||
dimensionedScalar("zero", dimensions_, 0.0)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
if (active_)
|
|
||||||
{
|
|
||||||
DimensionedField<scalar, volMesh>& sourceField = tSource();
|
|
||||||
|
|
||||||
const scalarField& V = mesh_.V();
|
|
||||||
const scalar dt = runTime_.deltaTValue();
|
|
||||||
|
|
||||||
forAll(pointSources_, sourceI)
|
|
||||||
{
|
|
||||||
const pointSourceProperties& psp = pointSources_[sourceI];
|
|
||||||
|
|
||||||
forAll(fieldIds_[sourceI], i)
|
|
||||||
{
|
|
||||||
if
|
|
||||||
(
|
|
||||||
(runTime_.time().value() >= psp.timeStart())
|
|
||||||
&& (runTime_.time().value() <= psp.timeEnd())
|
|
||||||
)
|
|
||||||
{
|
|
||||||
const label cid = cellOwners_[sourceI];
|
|
||||||
if (cid >= 0)
|
|
||||||
{
|
|
||||||
sourceField[cid] +=
|
|
||||||
dt*psp.fieldData()[i].second()/V[cid];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return tSource;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool Foam::timeActivatedExplicitMulticomponentPointSource::read()
|
|
||||||
{
|
|
||||||
if (regIOobject::read())
|
|
||||||
{
|
|
||||||
lookup("active") >> active_;
|
|
||||||
lookup("pointSources") >> pointSources_;
|
|
||||||
|
|
||||||
cellOwners_.setSize(pointSources_.size());
|
|
||||||
|
|
||||||
updateAddressing();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -1,185 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
========= |
|
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
||||||
\\ / O peration |
|
|
||||||
\\ / A nd | Copyright (C) 1991-2009 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::timeActivatedExplicitMulticomponentPointSourceNew
|
|
||||||
|
|
||||||
Description
|
|
||||||
Provides a mechanism to introduce point sources to a set of carrier fields.
|
|
||||||
Carrier fields are supplied on consruction, and interrogated to provide the
|
|
||||||
field indices of the sources.
|
|
||||||
|
|
||||||
Source values are assumed to be in <quantity>/s, and divided through by the
|
|
||||||
cell volumes before being returned, e.g. for a kg/s source
|
|
||||||
|
|
||||||
Properties are described in a <name>Properties dictionary
|
|
||||||
|
|
||||||
active true; // are sources active (true/false)
|
|
||||||
|
|
||||||
pointSources
|
|
||||||
(
|
|
||||||
source1 // source name
|
|
||||||
{
|
|
||||||
timeStart 0.0;
|
|
||||||
duration 1.0;
|
|
||||||
location (0 0 0);
|
|
||||||
fieldData
|
|
||||||
(
|
|
||||||
(H2O 0.1) // kg/s
|
|
||||||
(O2 0.05) // kg/s
|
|
||||||
);
|
|
||||||
}
|
|
||||||
source2 // source name
|
|
||||||
{
|
|
||||||
timeStart 0.5;
|
|
||||||
duration 2.0;
|
|
||||||
location (1 1 1);
|
|
||||||
fieldData
|
|
||||||
(
|
|
||||||
(NO 0.1) // kg/s
|
|
||||||
(CO2 0.05) // kg/s
|
|
||||||
(H2 0.001) // kg/s
|
|
||||||
);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
SourceFiles
|
|
||||||
timeActivatedExplicitMulticomponentPointSourceNew.C
|
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#ifndef timeActivatedExplicitMulticomponentPointSource_H
|
|
||||||
#define timeActivatedExplicitMulticomponentPointSource_H
|
|
||||||
|
|
||||||
#include "IOdictionary.H"
|
|
||||||
#include "fvMesh.H"
|
|
||||||
#include "Time.H"
|
|
||||||
#include "pointSourceProperties.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
namespace Foam
|
|
||||||
{
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
Class timeActivatedExplicitMulitcomponentPointSource Declaration
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
class timeActivatedExplicitMulticomponentPointSource
|
|
||||||
:
|
|
||||||
public IOdictionary
|
|
||||||
{
|
|
||||||
protected:
|
|
||||||
|
|
||||||
// Protected data
|
|
||||||
|
|
||||||
//- Name of the source
|
|
||||||
word name_;
|
|
||||||
|
|
||||||
//- Reference to the mesh
|
|
||||||
const fvMesh& mesh_;
|
|
||||||
|
|
||||||
//- Reference to time database
|
|
||||||
const Time& runTime_;
|
|
||||||
|
|
||||||
//- Source dimensions
|
|
||||||
const dimensionSet& dimensions_;
|
|
||||||
|
|
||||||
//- Reference to the multicomponent carrier fields
|
|
||||||
const PtrList<volScalarField>& carrierFields_;
|
|
||||||
|
|
||||||
//- Active flag
|
|
||||||
Switch active_;
|
|
||||||
|
|
||||||
//- List of point source properties
|
|
||||||
List<pointSourceProperties> pointSources_;
|
|
||||||
|
|
||||||
//- List of cell owners for point source locations
|
|
||||||
List<label> cellOwners_;
|
|
||||||
|
|
||||||
//- List of field ids for each source
|
|
||||||
List<labelList> fieldIds_;
|
|
||||||
|
|
||||||
|
|
||||||
// Protected Member Functions
|
|
||||||
|
|
||||||
//- Return the id of field given its name
|
|
||||||
label carrierFieldId(const word& fieldName);
|
|
||||||
|
|
||||||
//- Update the addressing between source and carrier fields
|
|
||||||
void updateAddressing();
|
|
||||||
|
|
||||||
//- Disallow default bitwise copy construct
|
|
||||||
timeActivatedExplicitMulticomponentPointSource
|
|
||||||
(
|
|
||||||
const timeActivatedExplicitMulticomponentPointSource&
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Disallow default bitwise assignment
|
|
||||||
void operator=(const timeActivatedExplicitMulticomponentPointSource&);
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
// Constructors
|
|
||||||
|
|
||||||
//- Construct from components
|
|
||||||
timeActivatedExplicitMulticomponentPointSource
|
|
||||||
(
|
|
||||||
const word&,
|
|
||||||
const fvMesh&,
|
|
||||||
const PtrList<volScalarField>&,
|
|
||||||
const dimensionSet&
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
|
||||||
|
|
||||||
// Access
|
|
||||||
|
|
||||||
//- Return a tmp field of the source for field fieldI
|
|
||||||
virtual tmp<DimensionedField<scalar, volMesh> > Su
|
|
||||||
(
|
|
||||||
const label fieldI
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Return a tmp field of the total source
|
|
||||||
virtual tmp<DimensionedField<scalar, volMesh> > Su();
|
|
||||||
|
|
||||||
|
|
||||||
//- Read properties dictionary
|
|
||||||
virtual bool read();
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
} // End namespace Foam
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -0,0 +1,347 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / 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 "TimeActivatedExplicitSource.H"
|
||||||
|
#include "fvMesh.H"
|
||||||
|
#include "volFields.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
const Foam::wordList Foam::TimeActivatedExplicitSource<Type>::
|
||||||
|
selectionModeTypeNames_
|
||||||
|
(
|
||||||
|
IStringStream("(points cellSet)")()
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
const Foam::wordList Foam::TimeActivatedExplicitSource<Type>::
|
||||||
|
volumeModeTypeNames_
|
||||||
|
(
|
||||||
|
IStringStream("(absolute specific)")()
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
typename Foam::TimeActivatedExplicitSource<Type>::selectionModeType
|
||||||
|
Foam::TimeActivatedExplicitSource<Type>::wordToSelectionModeType
|
||||||
|
(
|
||||||
|
const word& smtName
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
forAll(selectionModeTypeNames_, i)
|
||||||
|
{
|
||||||
|
if (smtName == selectionModeTypeNames_[i])
|
||||||
|
{
|
||||||
|
return selectionModeType(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"TimeActivatedExplicitSource<Type>::selectionModeType"
|
||||||
|
"TimeActivatedExplicitSource<Type>::wordToSelectionModeType"
|
||||||
|
"("
|
||||||
|
"const word&"
|
||||||
|
")"
|
||||||
|
) << "Unknown selectionMode type " << smtName
|
||||||
|
<< ". Valid selectionMode types are:" << nl << selectionModeTypeNames_
|
||||||
|
<< exit(FatalError);
|
||||||
|
|
||||||
|
return selectionModeType(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
typename Foam::TimeActivatedExplicitSource<Type>::volumeModeType
|
||||||
|
Foam::TimeActivatedExplicitSource<Type>::wordToVolumeModeType
|
||||||
|
(
|
||||||
|
const word& vmtName
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
forAll(volumeModeTypeNames_, i)
|
||||||
|
{
|
||||||
|
if (vmtName == volumeModeTypeNames_[i])
|
||||||
|
{
|
||||||
|
return volumeModeType(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"TimeActivatedExplicitSource<Type>::volumeModeType"
|
||||||
|
"TimeActivatedExplicitSource<Type>::wordToVolumeModeType(const word&)"
|
||||||
|
) << "Unknown volumeMode type " << vmtName
|
||||||
|
<< ". Valid volumeMode types are:" << nl << volumeModeTypeNames_
|
||||||
|
<< exit(FatalError);
|
||||||
|
|
||||||
|
return volumeModeType(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
Foam::word Foam::TimeActivatedExplicitSource<Type>::selectionModeTypeToWord
|
||||||
|
(
|
||||||
|
const selectionModeType& smtType
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
if (smtType > selectionModeTypeNames_.size())
|
||||||
|
{
|
||||||
|
return "UNKNOWN";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return selectionModeTypeNames_[smtType];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
Foam::word Foam::TimeActivatedExplicitSource<Type>::volumeModeTypeToWord
|
||||||
|
(
|
||||||
|
const volumeModeType& vmtType
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
if (vmtType > volumeModeTypeNames_.size())
|
||||||
|
{
|
||||||
|
return "UNKNOWN";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return volumeModeTypeNames_[vmtType];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
void Foam::TimeActivatedExplicitSource<Type>::setSelection
|
||||||
|
(
|
||||||
|
const dictionary& dict
|
||||||
|
)
|
||||||
|
{
|
||||||
|
switch (selectionMode_)
|
||||||
|
{
|
||||||
|
case smPoints:
|
||||||
|
{
|
||||||
|
dict.lookup("points") >> points_;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case smCellSet:
|
||||||
|
{
|
||||||
|
dict.lookup("cellSet") >> cellSetName_;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"TimeActivatedExplicitSource::setSelection(const dictionary&)"
|
||||||
|
) << "Unknown selectionMode "
|
||||||
|
<< selectionModeTypeNames_[selectionMode_]
|
||||||
|
<< ". Valid selectionMode types are" << selectionModeTypeNames_
|
||||||
|
<< exit(FatalError);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
void Foam::TimeActivatedExplicitSource<Type>::setFieldData
|
||||||
|
(
|
||||||
|
const dictionary& dict,
|
||||||
|
const wordList& fieldNames
|
||||||
|
)
|
||||||
|
{
|
||||||
|
dict.lookup("fieldData") >> fieldData_;
|
||||||
|
labelList localFieldIds(fieldData_.size(), -1);
|
||||||
|
forAll(fieldNames, i)
|
||||||
|
{
|
||||||
|
forAll(fieldData_, j)
|
||||||
|
{
|
||||||
|
const word& fdName = fieldData_[j].first();
|
||||||
|
if (fdName == fieldNames[i])
|
||||||
|
{
|
||||||
|
fieldIds_[i] = j;
|
||||||
|
localFieldIds[j] = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
forAll(localFieldIds, i)
|
||||||
|
{
|
||||||
|
if (localFieldIds[i] < 0)
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"TimeActivatedExplicitSource<Type>::setFieldData"
|
||||||
|
"("
|
||||||
|
"const dictionary&, "
|
||||||
|
"const wordList&"
|
||||||
|
")"
|
||||||
|
) << "Field " << fieldData_[i].first() << " not found in "
|
||||||
|
<< "field list. Available fields are: " << nl << fieldNames
|
||||||
|
<< exit(FatalError);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
void Foam::TimeActivatedExplicitSource<Type>::setCellSet()
|
||||||
|
{
|
||||||
|
switch (selectionMode_)
|
||||||
|
{
|
||||||
|
case smPoints:
|
||||||
|
{
|
||||||
|
labelHashSet cellOwners;
|
||||||
|
forAll(points_, i)
|
||||||
|
{
|
||||||
|
label cellI = mesh_.findCell(points_[i]);
|
||||||
|
if (cellI >= 0)
|
||||||
|
{
|
||||||
|
cellOwners.insert(cellI);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cellsPtr_.reset(new cellSet(mesh_, "points", cellOwners));
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case smCellSet:
|
||||||
|
{
|
||||||
|
cellsPtr_.reset(new cellSet(mesh_, cellSetName_));
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
FatalErrorIn("TimeActivatedExplicitSource::setCellIds()")
|
||||||
|
<< "Unknown selectionMode "
|
||||||
|
<< selectionModeTypeNames_[selectionMode_]
|
||||||
|
<< ". Valid selectionMode types are" << selectionModeTypeNames_
|
||||||
|
<< exit(FatalError);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const cellSet& cSet = cellsPtr_();
|
||||||
|
|
||||||
|
// Set volume normalisation
|
||||||
|
V_ = scalarField(cSet.size(), 1.0);
|
||||||
|
if (volumeMode_ == vmAbsolute)
|
||||||
|
{
|
||||||
|
label i = 0;
|
||||||
|
forAllConstIter(cellSet, cSet, iter)
|
||||||
|
{
|
||||||
|
V_[i++] = mesh_.V()[iter.key()];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Info<< incrIndent << indent << name_ << ": selected "
|
||||||
|
<< returnReduce(cSet.size(), sumOp<label>())
|
||||||
|
<< " cell(s)" << nl << decrIndent << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
Foam::TimeActivatedExplicitSource<Type>::TimeActivatedExplicitSource
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const dictionary& dict,
|
||||||
|
const fvMesh& mesh,
|
||||||
|
const wordList& fieldNames
|
||||||
|
)
|
||||||
|
:
|
||||||
|
name_(name),
|
||||||
|
mesh_(mesh),
|
||||||
|
active_(dict.lookup("active")),
|
||||||
|
timeStart_(readScalar(dict.lookup("timeStart"))),
|
||||||
|
duration_(readScalar(dict.lookup("duration"))),
|
||||||
|
volumeMode_(wordToVolumeModeType(dict.lookup("volumeMode"))),
|
||||||
|
selectionMode_(wordToSelectionModeType(dict.lookup("selectionMode"))),
|
||||||
|
points_(),
|
||||||
|
cellSetName_("none"),
|
||||||
|
V_(),
|
||||||
|
cellsPtr_(),
|
||||||
|
fieldData_(),
|
||||||
|
fieldIds_(fieldNames.size(), -1)
|
||||||
|
{
|
||||||
|
setSelection(dict);
|
||||||
|
|
||||||
|
if (fieldNames.size() == 1)
|
||||||
|
{
|
||||||
|
fieldData_.setSize(1);
|
||||||
|
fieldData_[0].first() = fieldNames[0];
|
||||||
|
dict.lookup("fieldData") >> fieldData_[0].second();
|
||||||
|
fieldIds_[0] = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
setFieldData(dict, fieldNames);
|
||||||
|
}
|
||||||
|
|
||||||
|
setCellSet();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
void Foam::TimeActivatedExplicitSource<Type>::addToField
|
||||||
|
(
|
||||||
|
DimensionedField<Type, volMesh>& Su,
|
||||||
|
const label fieldI
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const label fid = fieldIds_[fieldI];
|
||||||
|
|
||||||
|
if
|
||||||
|
(
|
||||||
|
active_
|
||||||
|
&& (fid >= 0)
|
||||||
|
&& (mesh_.time().value() >= timeStart_)
|
||||||
|
&& (mesh_.time().value() <= timeEnd())
|
||||||
|
)
|
||||||
|
{
|
||||||
|
// Update the cell set if the mesh is changing
|
||||||
|
if (mesh_.changing())
|
||||||
|
{
|
||||||
|
setCellSet();
|
||||||
|
}
|
||||||
|
|
||||||
|
const cellSet& cSet = cellsPtr_();
|
||||||
|
|
||||||
|
label i = 0;
|
||||||
|
forAllConstIter(cellSet, cSet, iter)
|
||||||
|
{
|
||||||
|
Su[iter.key()] = fieldData_[fid].second()/V_[i++];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,368 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / 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::TimeActivatedExplicitSource
|
||||||
|
|
||||||
|
Description
|
||||||
|
Helper class to describe source properties
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
TimeActivatedExplicitSource.C
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef TimeActivatedExplicitSource_H
|
||||||
|
#define TimeActivatedExplicitSource_H
|
||||||
|
|
||||||
|
#include "Tuple2.H"
|
||||||
|
#include "cellSet.H"
|
||||||
|
#include "volFieldsFwd.H"
|
||||||
|
#include "DimensionedField.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
// Forward declaration of classes
|
||||||
|
|
||||||
|
class fvMesh;
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
class TimeActivatedExplicitSource;
|
||||||
|
|
||||||
|
// Forward declaration of friend functions
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
Ostream& operator<<
|
||||||
|
(
|
||||||
|
Ostream&,
|
||||||
|
const TimeActivatedExplicitSource<Type>&
|
||||||
|
);
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class TimeActivatedExplicitSource Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
class TimeActivatedExplicitSource
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
// Public data
|
||||||
|
|
||||||
|
//- Enumeration for selection mode types
|
||||||
|
enum selectionModeType
|
||||||
|
{
|
||||||
|
smPoints,
|
||||||
|
smCellSet
|
||||||
|
};
|
||||||
|
|
||||||
|
//- Word list of selection mode type names
|
||||||
|
static const wordList selectionModeTypeNames_;
|
||||||
|
|
||||||
|
//- Enumeration for volume types
|
||||||
|
enum volumeModeType
|
||||||
|
{
|
||||||
|
vmAbsolute,
|
||||||
|
vmSpecific
|
||||||
|
};
|
||||||
|
|
||||||
|
//- Word list of volume mode type names
|
||||||
|
static const wordList volumeModeTypeNames_;
|
||||||
|
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
// Protected data
|
||||||
|
|
||||||
|
typedef Tuple2<word, Type> fieldNameValuePair;
|
||||||
|
|
||||||
|
//- Source name
|
||||||
|
word name_;
|
||||||
|
|
||||||
|
//- Reference to the mesh database
|
||||||
|
const fvMesh& mesh_;
|
||||||
|
|
||||||
|
//- Source active flag
|
||||||
|
bool active_;
|
||||||
|
|
||||||
|
//- Time start
|
||||||
|
scalar timeStart_;
|
||||||
|
|
||||||
|
//- Duration
|
||||||
|
scalar duration_;
|
||||||
|
|
||||||
|
//- Volume mode
|
||||||
|
volumeModeType volumeMode_;
|
||||||
|
|
||||||
|
//- Cell selection mode
|
||||||
|
selectionModeType selectionMode_;
|
||||||
|
|
||||||
|
//- List of points for "points" selectionMode
|
||||||
|
List<point> points_;
|
||||||
|
|
||||||
|
//- Name of cell set for "cellSet" selectionMode
|
||||||
|
word cellSetName_;
|
||||||
|
|
||||||
|
//- Field of cell volumes according to cell set cells
|
||||||
|
scalarList V_;
|
||||||
|
|
||||||
|
//- Cell set
|
||||||
|
autoPtr<cellSet> cellsPtr_;
|
||||||
|
|
||||||
|
//- List of source field name vs value pairs
|
||||||
|
List<fieldNameValuePair> fieldData_;
|
||||||
|
|
||||||
|
//- Map of fields ids from supplied fields to local field source ids
|
||||||
|
labelList fieldIds_;
|
||||||
|
|
||||||
|
|
||||||
|
// Protected functions
|
||||||
|
|
||||||
|
//- Helper function to convert from a word to a selectionModeType
|
||||||
|
selectionModeType wordToSelectionModeType(const word& smtName) const;
|
||||||
|
|
||||||
|
//- Helper function to convert from a word to a volumeModeType
|
||||||
|
volumeModeType wordToVolumeModeType(const word& vtName) const;
|
||||||
|
|
||||||
|
//- Helper function to convert from a selectionModeType to a word
|
||||||
|
word selectionModeTypeToWord(const selectionModeType& smtType) const;
|
||||||
|
|
||||||
|
//- Helper function to convert from a volumeModeType to a word
|
||||||
|
word volumeModeTypeToWord(const volumeModeType& vtType) const;
|
||||||
|
|
||||||
|
//- Set the cellSet or points selection
|
||||||
|
void setSelection(const dictionary& dict);
|
||||||
|
|
||||||
|
//- Set the local field data
|
||||||
|
void setFieldData(const dictionary& dict, const wordList& fieldNames);
|
||||||
|
|
||||||
|
//- Set the cell set based on the user input selection mode
|
||||||
|
void setCellSet();
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from components
|
||||||
|
TimeActivatedExplicitSource
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const dictionary& dict,
|
||||||
|
const fvMesh& mesh,
|
||||||
|
const wordList& fieldNames
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Return clone
|
||||||
|
autoPtr<TimeActivatedExplicitSource> clone() const
|
||||||
|
{
|
||||||
|
notImplemented
|
||||||
|
(
|
||||||
|
"autoPtr<TimeActivatedExplicitSource> clone() const"
|
||||||
|
);
|
||||||
|
return autoPtr<TimeActivatedExplicitSource>(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return pointer to new TimeActivatedExplicitSource object created
|
||||||
|
// on the freestore from an Istream
|
||||||
|
class iNew
|
||||||
|
{
|
||||||
|
//- Reference to the mesh database
|
||||||
|
const fvMesh& mesh_;
|
||||||
|
|
||||||
|
//- List of field names
|
||||||
|
const wordList& fieldNames_;
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
iNew
|
||||||
|
(
|
||||||
|
const fvMesh& mesh,
|
||||||
|
const wordList& fieldNames
|
||||||
|
)
|
||||||
|
:
|
||||||
|
mesh_(mesh),
|
||||||
|
fieldNames_(fieldNames)
|
||||||
|
{}
|
||||||
|
|
||||||
|
autoPtr<TimeActivatedExplicitSource> operator()(Istream& is) const
|
||||||
|
{
|
||||||
|
const word name(is);
|
||||||
|
const dictionary dict(is);
|
||||||
|
|
||||||
|
return autoPtr<TimeActivatedExplicitSource>
|
||||||
|
(
|
||||||
|
new TimeActivatedExplicitSource
|
||||||
|
(
|
||||||
|
name,
|
||||||
|
dict,
|
||||||
|
mesh_,
|
||||||
|
fieldNames_
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Member Functions
|
||||||
|
|
||||||
|
// Access
|
||||||
|
|
||||||
|
//- Return const access to the source name
|
||||||
|
inline const word& name() const;
|
||||||
|
|
||||||
|
//- Return const access to the mesh database
|
||||||
|
inline const fvMesh& mesh() const;
|
||||||
|
|
||||||
|
//- Return const access to the source active flag
|
||||||
|
inline bool active() const;
|
||||||
|
|
||||||
|
//- Return const access to the time start
|
||||||
|
inline scalar timeStart() const;
|
||||||
|
|
||||||
|
//- Return const access to the duration
|
||||||
|
inline scalar duration() const;
|
||||||
|
|
||||||
|
//- Return const access to the time end
|
||||||
|
inline scalar timeEnd() const;
|
||||||
|
|
||||||
|
//- Return const access to the volume mode
|
||||||
|
inline const volumeModeType& volumeMode() const;
|
||||||
|
|
||||||
|
//- Return const access to the cell selection mode
|
||||||
|
inline const selectionModeType& selectionMode() const;
|
||||||
|
|
||||||
|
//- Return const access to the list of points for "points"
|
||||||
|
// selectionMode
|
||||||
|
inline const List<point>& points() const;
|
||||||
|
|
||||||
|
//- Return const access to the name of cell set for "cellSet"
|
||||||
|
// selectionMode
|
||||||
|
inline const word& cellSetName() const;
|
||||||
|
|
||||||
|
//- Return const access to the field of cell volumes according to
|
||||||
|
// cell set cells
|
||||||
|
inline const scalarList& V() const;
|
||||||
|
|
||||||
|
//- Return const access to the cell set
|
||||||
|
inline const cellSet& cells() const;
|
||||||
|
|
||||||
|
//- Return const access to the source field name vs value pairs
|
||||||
|
inline const List<fieldNameValuePair>& fieldData() const;
|
||||||
|
|
||||||
|
//- Return const access to the the map of fields ids from supplied
|
||||||
|
// fields to local field source ids
|
||||||
|
inline const labelList& fieldIds() const;
|
||||||
|
|
||||||
|
|
||||||
|
// Edit
|
||||||
|
|
||||||
|
//- Return access to the source name
|
||||||
|
inline word& name();
|
||||||
|
|
||||||
|
//- Return access to the source active flag
|
||||||
|
inline bool& active();
|
||||||
|
|
||||||
|
//- Return access to the time start
|
||||||
|
inline scalar& timeStart();
|
||||||
|
|
||||||
|
//- Return access to the duration
|
||||||
|
inline scalar& duration();
|
||||||
|
|
||||||
|
//- Return access to the volume mode
|
||||||
|
inline volumeModeType& volumeMode();
|
||||||
|
|
||||||
|
//- Return access to the cell selection mode
|
||||||
|
inline selectionModeType& selectionMode();
|
||||||
|
|
||||||
|
//- Return access to the list of points for "points" selectionMode
|
||||||
|
inline List<point>& points();
|
||||||
|
|
||||||
|
//- Return access to the name of cell set for "cellSet"
|
||||||
|
// selectionMode
|
||||||
|
inline word& cellSetName();
|
||||||
|
|
||||||
|
//- Return access to the field of cell volumes according to
|
||||||
|
// cell set cells
|
||||||
|
inline scalarList& V();
|
||||||
|
|
||||||
|
//- Return access to the cell set
|
||||||
|
inline cellSet& cells();
|
||||||
|
|
||||||
|
//- Return access to the source field name vs value pairs
|
||||||
|
inline List<fieldNameValuePair>& fieldData();
|
||||||
|
|
||||||
|
//- Return access to the the map of fields ids from supplied
|
||||||
|
// fields to local field source ids
|
||||||
|
inline labelList& fieldIds();
|
||||||
|
|
||||||
|
|
||||||
|
// Evaluation
|
||||||
|
|
||||||
|
//- Add the source contribution to field Su
|
||||||
|
void addToField
|
||||||
|
(
|
||||||
|
DimensionedField<Type, volMesh>& Su,
|
||||||
|
const label fieldI
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// I-O
|
||||||
|
|
||||||
|
//- Write the source properties
|
||||||
|
void writeData(Ostream&) const;
|
||||||
|
|
||||||
|
//- Ostream operator
|
||||||
|
friend Ostream& operator<< <Type>
|
||||||
|
(
|
||||||
|
Ostream& os,
|
||||||
|
const TimeActivatedExplicitSource& sp
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#ifdef NoRepository
|
||||||
|
# include "TimeActivatedExplicitSource.C"
|
||||||
|
# include "TimeActivatedExplicitSourceIO.C"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#include "TimeActivatedExplicitSourceI.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,227 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / 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 "TimeActivatedExplicitSource.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
inline const Foam::word& Foam::TimeActivatedExplicitSource<Type>::name() const
|
||||||
|
{
|
||||||
|
return name_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
inline const Foam::fvMesh& Foam::TimeActivatedExplicitSource<Type>::mesh() const
|
||||||
|
{
|
||||||
|
return mesh_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
inline bool Foam::TimeActivatedExplicitSource<Type>::active() const
|
||||||
|
{
|
||||||
|
return active_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
inline Foam::scalar Foam::TimeActivatedExplicitSource<Type>::timeStart() const
|
||||||
|
{
|
||||||
|
return timeStart_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
inline Foam::scalar Foam::TimeActivatedExplicitSource<Type>::duration() const
|
||||||
|
{
|
||||||
|
return duration_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
inline Foam::scalar Foam::TimeActivatedExplicitSource<Type>::timeEnd() const
|
||||||
|
{
|
||||||
|
return timeStart_ + duration_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
inline const typename Foam::TimeActivatedExplicitSource<Type>::volumeModeType&
|
||||||
|
Foam::TimeActivatedExplicitSource<Type>::volumeMode() const
|
||||||
|
{
|
||||||
|
return volumeMode_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
inline const typename Foam::TimeActivatedExplicitSource<Type>::
|
||||||
|
selectionModeType&
|
||||||
|
Foam::TimeActivatedExplicitSource<Type>::selectionMode() const
|
||||||
|
{
|
||||||
|
return selectionMode_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
inline const Foam::List<Foam::point>&
|
||||||
|
Foam::TimeActivatedExplicitSource<Type>::points() const
|
||||||
|
{
|
||||||
|
return points_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
inline const Foam::word&
|
||||||
|
Foam::TimeActivatedExplicitSource<Type>::cellSetName() const
|
||||||
|
{
|
||||||
|
return cellSetName_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
inline const Foam::scalarList&
|
||||||
|
Foam::TimeActivatedExplicitSource<Type>::V() const
|
||||||
|
{
|
||||||
|
return V_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
inline const Foam::cellSet&
|
||||||
|
Foam::TimeActivatedExplicitSource<Type>::cells() const
|
||||||
|
{
|
||||||
|
return cellsPtr_();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
inline const Foam::List<typename Foam::TimeActivatedExplicitSource<Type>::
|
||||||
|
fieldNameValuePair>&
|
||||||
|
Foam::TimeActivatedExplicitSource<Type>::fieldData() const
|
||||||
|
{
|
||||||
|
return fieldData_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
inline const Foam::labelList&
|
||||||
|
Foam::TimeActivatedExplicitSource<Type>::fieldIds() const
|
||||||
|
{
|
||||||
|
return fieldIds_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
inline Foam::word& Foam::TimeActivatedExplicitSource<Type>::name()
|
||||||
|
{
|
||||||
|
return name_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
inline bool& Foam::TimeActivatedExplicitSource<Type>::active()
|
||||||
|
{
|
||||||
|
return active_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
inline Foam::scalar& Foam::TimeActivatedExplicitSource<Type>::timeStart()
|
||||||
|
{
|
||||||
|
return timeStart_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
inline Foam::scalar& Foam::TimeActivatedExplicitSource<Type>::duration()
|
||||||
|
{
|
||||||
|
return duration_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
inline typename Foam::TimeActivatedExplicitSource<Type>::volumeModeType&
|
||||||
|
Foam::TimeActivatedExplicitSource<Type>::volumeMode()
|
||||||
|
{
|
||||||
|
return volumeMode_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
inline typename Foam::TimeActivatedExplicitSource<Type>::selectionModeType&
|
||||||
|
Foam::TimeActivatedExplicitSource<Type>::selectionMode()
|
||||||
|
{
|
||||||
|
return selectionMode_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
inline Foam::List<Foam::point>&
|
||||||
|
Foam::TimeActivatedExplicitSource<Type>::points()
|
||||||
|
{
|
||||||
|
return points_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
inline Foam::word& Foam::TimeActivatedExplicitSource<Type>::cellSetName()
|
||||||
|
{
|
||||||
|
return cellSetName_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
inline Foam::scalarList& Foam::TimeActivatedExplicitSource<Type>::V()
|
||||||
|
{
|
||||||
|
return V_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
inline Foam::cellSet& Foam::TimeActivatedExplicitSource<Type>::cells()
|
||||||
|
{
|
||||||
|
return cellsPtr_();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
inline Foam::List<typename Foam::TimeActivatedExplicitSource<Type>::fieldNameValuePair>&
|
||||||
|
Foam::TimeActivatedExplicitSource<Type>::fieldData()
|
||||||
|
{
|
||||||
|
return fieldData_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
inline Foam::labelList& Foam::TimeActivatedExplicitSource<Type>::fieldIds()
|
||||||
|
{
|
||||||
|
return fieldIds_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,102 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / 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 "TimeActivatedExplicitSource.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
void Foam::TimeActivatedExplicitSource<Type>::writeData(Ostream& os) const
|
||||||
|
{
|
||||||
|
os << indent << name_ << nl
|
||||||
|
<< indent << token::BEGIN_BLOCK << incrIndent << nl;
|
||||||
|
|
||||||
|
os.writeKeyword("active") << active_ << token::END_STATEMENT << nl;
|
||||||
|
os.writeKeyword("timeStart") << timeStart_ << token::END_STATEMENT << nl;
|
||||||
|
os.writeKeyword("duration") << duration_ << token::END_STATEMENT << nl;
|
||||||
|
os.writeKeyword("selectionMode") << selectionModeTypeToWord(selectionMode_)
|
||||||
|
<< token::END_STATEMENT << nl;
|
||||||
|
os.writeKeyword("volumeMode") << volumeModeTypeToWord(volumeMode_)
|
||||||
|
<< token::END_STATEMENT << nl;
|
||||||
|
|
||||||
|
if (fieldIds_.size() == 1)
|
||||||
|
{
|
||||||
|
os.writeKeyword("fieldData") << fieldData_[0].second()
|
||||||
|
<< token::END_STATEMENT << nl;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
os.writeKeyword("fieldData") << fieldData_ << nl;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (selectionMode_)
|
||||||
|
{
|
||||||
|
case smPoints:
|
||||||
|
{
|
||||||
|
os.writeKeyword("points") << nl << indent << points_
|
||||||
|
<< token::END_STATEMENT << nl;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case smCellSet:
|
||||||
|
{
|
||||||
|
os.writeKeyword("cellSet") << cellSetName_
|
||||||
|
<< token::END_STATEMENT << nl;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"TimeActivatedExplicitSource<Type>::writeDict"
|
||||||
|
"("
|
||||||
|
"Ostream&, "
|
||||||
|
"bool"
|
||||||
|
") const"
|
||||||
|
) << "Unknown selectionMode "
|
||||||
|
<< selectionModeTypeToWord(selectionMode_)
|
||||||
|
<< abort(FatalError);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
os << decrIndent << indent << token::END_BLOCK << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
Foam::Ostream& Foam::operator<<
|
||||||
|
(
|
||||||
|
Ostream& os,
|
||||||
|
const TimeActivatedExplicitSource<Type>& sp
|
||||||
|
)
|
||||||
|
{
|
||||||
|
sp.writeData(os);
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,223 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / 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 "TimeActivatedExplicitSourceList.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
Foam::TimeActivatedExplicitSourceList<Type>::TimeActivatedExplicitSourceList
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const fvMesh& mesh,
|
||||||
|
const dimensionSet& dimensions,
|
||||||
|
const wordList& fieldNames
|
||||||
|
)
|
||||||
|
:
|
||||||
|
IOPtrList<TimeActivatedExplicitSource<Type> >
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
name + "SourceProperties",
|
||||||
|
mesh.time().constant(),
|
||||||
|
mesh,
|
||||||
|
IOobject::MUST_READ,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
),
|
||||||
|
typename TimeActivatedExplicitSource<Type>::iNew(mesh, fieldNames)
|
||||||
|
),
|
||||||
|
name_(name),
|
||||||
|
mesh_(mesh),
|
||||||
|
dimensions_(dimensions),
|
||||||
|
fieldNames_(fieldNames)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
Foam::TimeActivatedExplicitSourceList<Type>::TimeActivatedExplicitSourceList
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const fvMesh& mesh,
|
||||||
|
const dimensionSet& dimensions,
|
||||||
|
const word& fieldName
|
||||||
|
)
|
||||||
|
:
|
||||||
|
IOPtrList<TimeActivatedExplicitSource<Type> >
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
name + "SourceProperties",
|
||||||
|
mesh.time().constant(),
|
||||||
|
mesh,
|
||||||
|
IOobject::MUST_READ,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
),
|
||||||
|
typename TimeActivatedExplicitSource<Type>::iNew
|
||||||
|
(
|
||||||
|
mesh,
|
||||||
|
IStringStream('(' + fieldName + ')')()
|
||||||
|
)
|
||||||
|
),
|
||||||
|
name_(name),
|
||||||
|
mesh_(mesh),
|
||||||
|
dimensions_(dimensions),
|
||||||
|
fieldNames_(1, fieldName)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
Foam::tmp<Foam::DimensionedField<Type, Foam::volMesh> >
|
||||||
|
Foam::TimeActivatedExplicitSourceList<Type>::Su(const label fieldI)
|
||||||
|
{
|
||||||
|
tmp<DimensionedField<Type, volMesh> > tSu
|
||||||
|
(
|
||||||
|
new DimensionedField<Type, volMesh>
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
name_ + "Source_" + fieldNames_[fieldI],
|
||||||
|
mesh_.time().timeName(),
|
||||||
|
mesh_,
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
),
|
||||||
|
mesh_,
|
||||||
|
dimensioned<Type>("zero", dimensions_, pTraits<Type>::zero)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
DimensionedField<Type, volMesh>& Su = tSu();
|
||||||
|
|
||||||
|
forAll(*this, i)
|
||||||
|
{
|
||||||
|
this->operator[](i).addToField(Su, fieldI);
|
||||||
|
}
|
||||||
|
|
||||||
|
return tSu;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
Foam::tmp<Foam::DimensionedField<Type, Foam::volMesh> >
|
||||||
|
Foam::TimeActivatedExplicitSourceList<Type>::SuTot()
|
||||||
|
{
|
||||||
|
tmp<DimensionedField<Type, volMesh> > tSuTot
|
||||||
|
(
|
||||||
|
new DimensionedField<Type, volMesh>
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
name_ + "TotalSource",
|
||||||
|
mesh_.time().timeName(),
|
||||||
|
mesh_,
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
),
|
||||||
|
mesh_,
|
||||||
|
dimensioned<Type>("zero", dimensions_, pTraits<Type>::zero)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
DimensionedField<Type, volMesh>& SuTot = tSuTot();
|
||||||
|
|
||||||
|
forAll(fieldNames_, fieldI)
|
||||||
|
{
|
||||||
|
forAll(*this, sourceI)
|
||||||
|
{
|
||||||
|
this->operator[](sourceI).addToField(SuTot, fieldI);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return tSuTot;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
bool Foam::TimeActivatedExplicitSourceList<Type>::readData(Istream& is)
|
||||||
|
{
|
||||||
|
this->clear();
|
||||||
|
|
||||||
|
IOPtrList<TimeActivatedExplicitSource<Type> > newSources
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
name_ + "TimeActivatedExplicitSource",
|
||||||
|
mesh_.time().constant(),
|
||||||
|
mesh_,
|
||||||
|
IOobject::MUST_READ,
|
||||||
|
IOobject::NO_WRITE,
|
||||||
|
false
|
||||||
|
),
|
||||||
|
typename TimeActivatedExplicitSource<Type>::iNew(mesh_, fieldNames_)
|
||||||
|
);
|
||||||
|
|
||||||
|
transfer(newSources);
|
||||||
|
|
||||||
|
return is.good();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
bool Foam::TimeActivatedExplicitSourceList<Type>::writeData(Ostream& os) const
|
||||||
|
{
|
||||||
|
// Write size of list
|
||||||
|
os << nl << this->size();
|
||||||
|
|
||||||
|
// Write beginning of contents
|
||||||
|
os << nl << token::BEGIN_LIST;
|
||||||
|
|
||||||
|
// Write list contents
|
||||||
|
forAll(*this, i)
|
||||||
|
{
|
||||||
|
os << nl;
|
||||||
|
this->operator[](i).writeData(os);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write end of contents
|
||||||
|
os << token::END_LIST << token::END_STATEMENT << nl;
|
||||||
|
|
||||||
|
// Check state of IOstream
|
||||||
|
return os.good();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
Foam::Ostream& Foam::operator<<
|
||||||
|
(
|
||||||
|
Ostream& os,
|
||||||
|
const TimeActivatedExplicitSourceList<Type>& spl
|
||||||
|
)
|
||||||
|
{
|
||||||
|
spl.writeData(os);
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,171 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / 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::TimeActivatedExplicitSourceList
|
||||||
|
|
||||||
|
Description
|
||||||
|
List of source properties
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
TimeActivatedExplicitSourceList.C
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef TimeActivatedExplicitSourceList_H
|
||||||
|
#define TimeActivatedExplicitSourceList_H
|
||||||
|
|
||||||
|
#include "IOPtrList.H"
|
||||||
|
#include "TimeActivatedExplicitSource.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
// Forward declaration of classes
|
||||||
|
class fvMesh;
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
class TimeActivatedExplicitSource;
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
class TimeActivatedExplicitSourceList;
|
||||||
|
|
||||||
|
// Forward declaration of friend functions
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
Ostream& operator<<
|
||||||
|
(
|
||||||
|
Ostream&,
|
||||||
|
const TimeActivatedExplicitSourceList<Type>&
|
||||||
|
);
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class TimeActivatedExplicitSourceList Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
class TimeActivatedExplicitSourceList
|
||||||
|
:
|
||||||
|
public IOPtrList<TimeActivatedExplicitSource<Type> >
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
|
||||||
|
// Private data
|
||||||
|
|
||||||
|
//- Name of source properties list
|
||||||
|
word name_;
|
||||||
|
|
||||||
|
//- Reference to the mesh database
|
||||||
|
const fvMesh& mesh_;
|
||||||
|
|
||||||
|
//- Dimensions of source properties
|
||||||
|
dimensionSet dimensions_;
|
||||||
|
|
||||||
|
wordList fieldNames_;
|
||||||
|
|
||||||
|
|
||||||
|
// Private member functions
|
||||||
|
|
||||||
|
//- Disallow default bitwise copy construct
|
||||||
|
TimeActivatedExplicitSourceList
|
||||||
|
(
|
||||||
|
const TimeActivatedExplicitSourceList<Type>&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Disallow default bitwise assignment
|
||||||
|
void operator=(const TimeActivatedExplicitSourceList<Type>&);
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from components with list of field names
|
||||||
|
TimeActivatedExplicitSourceList
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const fvMesh& mesh,
|
||||||
|
const dimensionSet& dimensions,
|
||||||
|
const wordList& fieldNames
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct from components with single field name
|
||||||
|
TimeActivatedExplicitSourceList
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const fvMesh& mesh,
|
||||||
|
const dimensionSet& dimensions,
|
||||||
|
const word& fieldName
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// Member Functions
|
||||||
|
|
||||||
|
// Evaluation
|
||||||
|
|
||||||
|
//- Return the source for field, fieldI
|
||||||
|
tmp<DimensionedField<Type, volMesh> > Su
|
||||||
|
(
|
||||||
|
const label fieldI = 0
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Return the total source for all fields
|
||||||
|
tmp<DimensionedField<Type, volMesh> > SuTot();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// I-O
|
||||||
|
|
||||||
|
//- Read data from Istream
|
||||||
|
bool readData(Istream& is);
|
||||||
|
|
||||||
|
//- Write data to Istream
|
||||||
|
bool writeData(Ostream& os) const;
|
||||||
|
|
||||||
|
//- Ostream operator
|
||||||
|
friend Ostream& operator<< <Type>
|
||||||
|
(
|
||||||
|
Ostream& os,
|
||||||
|
const TimeActivatedExplicitSourceList& sp
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#ifdef NoRepository
|
||||||
|
# include "TimeActivatedExplicitSourceList.C"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2010-2010 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -25,131 +25,21 @@ License
|
|||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "timeActivatedExplicitSource.H"
|
#include "timeActivatedExplicitSource.H"
|
||||||
#include "volFields.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<>
|
namespace Foam
|
||||||
const char* Foam::NamedEnum
|
|
||||||
<
|
|
||||||
Foam::timeActivatedExplicitSource::volumeType,
|
|
||||||
2
|
|
||||||
>::names[] =
|
|
||||||
{
|
{
|
||||||
"specific",
|
defineTemplateTypeNameAndDebug
|
||||||
"absolute"
|
|
||||||
};
|
|
||||||
|
|
||||||
const Foam::NamedEnum<Foam::timeActivatedExplicitSource::volumeType, 2>
|
|
||||||
Foam::timeActivatedExplicitSource::volumeTypeNames_;
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
Foam::timeActivatedExplicitSource::timeActivatedExplicitSource
|
|
||||||
(
|
|
||||||
const word& name,
|
|
||||||
const fvMesh& mesh,
|
|
||||||
const dimensionSet& dims
|
|
||||||
)
|
|
||||||
:
|
|
||||||
IOdictionary
|
|
||||||
(
|
(
|
||||||
IOobject
|
IOPtrList<scalarTimeActivatedExplicitSource>,
|
||||||
(
|
0
|
||||||
name + "Properties",
|
);
|
||||||
mesh.time().constant(),
|
defineTemplateTypeNameAndDebug
|
||||||
mesh,
|
(
|
||||||
IOobject::MUST_READ,
|
IOPtrList<vectorTimeActivatedExplicitSource>,
|
||||||
IOobject::NO_WRITE
|
0
|
||||||
)
|
);
|
||||||
),
|
|
||||||
mesh_(mesh),
|
|
||||||
runTime_(mesh.time()),
|
|
||||||
name_(name),
|
|
||||||
active_(lookup("active")),
|
|
||||||
dimensions_(dims),
|
|
||||||
volumeType_(volumeTypeNames_.read(lookup("volumeType"))),
|
|
||||||
timeStart_(readScalar(lookup("timeStart"))),
|
|
||||||
duration_(readScalar(lookup("duration")))
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
const Foam::fvMesh& Foam::timeActivatedExplicitSource::mesh() const
|
|
||||||
{
|
|
||||||
return mesh_;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const Foam::Time& Foam::timeActivatedExplicitSource::runTime() const
|
|
||||||
{
|
|
||||||
return runTime_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const Foam::word& Foam::timeActivatedExplicitSource::name() const
|
|
||||||
{
|
|
||||||
return name_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const Foam::Switch& Foam::timeActivatedExplicitSource::active() const
|
|
||||||
{
|
|
||||||
return active_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const Foam::dimensionSet& Foam::timeActivatedExplicitSource::dimensions() const
|
|
||||||
{
|
|
||||||
return dimensions_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const Foam::timeActivatedExplicitSource::volumeType&
|
|
||||||
Foam::timeActivatedExplicitSource::volume() const
|
|
||||||
{
|
|
||||||
return volumeType_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Foam::scalar Foam::timeActivatedExplicitSource::timeStart() const
|
|
||||||
{
|
|
||||||
return timeStart_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Foam::scalar Foam::timeActivatedExplicitSource::duration() const
|
|
||||||
{
|
|
||||||
return duration_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool Foam::timeActivatedExplicitSource::read()
|
|
||||||
{
|
|
||||||
if (regIOobject::read())
|
|
||||||
{
|
|
||||||
lookup("active") >> active_;
|
|
||||||
if (active_)
|
|
||||||
{
|
|
||||||
volumeType_ = volumeTypeNames_.read(lookup("volumeType"));
|
|
||||||
lookup("timeStart") >> duration_;
|
|
||||||
lookup("duration") >> duration_;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2010-2010 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -22,150 +22,43 @@ License
|
|||||||
along with OpenFOAM; if not, write to the Free Software Foundation,
|
along with OpenFOAM; if not, write to the Free Software Foundation,
|
||||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
Class
|
Typedef
|
||||||
Foam::timeActivatedExplicitSource
|
Foam::timeActivatedExplicitSource
|
||||||
|
|
||||||
Description
|
|
||||||
Base class for field sources. Provides:
|
|
||||||
- name
|
|
||||||
- references to mesh and time databases
|
|
||||||
- dimensions
|
|
||||||
- volume type
|
|
||||||
- startTime
|
|
||||||
- duration
|
|
||||||
- read (from <sourceName>Properties dictionary)
|
|
||||||
|
|
||||||
SourceFiles
|
|
||||||
timeActivatedExplicitSource.C
|
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#ifndef timeActivatedExplicitSource_H
|
#ifndef timeActivatedExplicitSource_H
|
||||||
#define timeActivatedExplicitSource_H
|
#define timeActivatedExplicitSource_H
|
||||||
|
|
||||||
#include "IOdictionary.H"
|
#include "TimeActivatedExplicitSource.H"
|
||||||
#include "autoPtr.H"
|
#include "TimeActivatedExplicitSourceList.H"
|
||||||
#include "fvMesh.H"
|
|
||||||
#include "Time.H"
|
|
||||||
#include "NamedEnum.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
|
typedef TimeActivatedExplicitSource<scalar>
|
||||||
|
scalarTimeActivatedExplicitSource;
|
||||||
|
typedef TimeActivatedExplicitSource<vector>
|
||||||
|
vectorTimeActivatedExplicitSource;
|
||||||
|
typedef TimeActivatedExplicitSource<sphericalTensor>
|
||||||
|
sphericalTensorTimeActivatedExplicitSource;
|
||||||
|
typedef TimeActivatedExplicitSource<symmTensor>
|
||||||
|
symmTensorTimeActivatedExplicitSource;
|
||||||
|
typedef TimeActivatedExplicitSource<tensor>
|
||||||
|
tensorTimeActivatedExplicitSource;
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
typedef TimeActivatedExplicitSourceList<scalar>
|
||||||
Class timeActivatedExplicitSource Declaration
|
scalarTimeActivatedExplicitSourceList;
|
||||||
\*---------------------------------------------------------------------------*/
|
typedef TimeActivatedExplicitSourceList<vector>
|
||||||
|
vectorTimeActivatedExplicitSourceList;
|
||||||
class timeActivatedExplicitSource
|
typedef TimeActivatedExplicitSourceList<sphericalTensor>
|
||||||
:
|
sphericalTensorTimeActivatedExplicitSourceList;
|
||||||
public IOdictionary
|
typedef TimeActivatedExplicitSourceList<symmTensor>
|
||||||
{
|
symmTensorTimeActivatedExplicitSourceList;
|
||||||
public:
|
typedef TimeActivatedExplicitSourceList<tensor>
|
||||||
|
tensorTimeActivatedExplicitSourceList;
|
||||||
enum volumeType
|
}
|
||||||
{
|
|
||||||
vtSpecific,
|
|
||||||
vtAbsolute
|
|
||||||
};
|
|
||||||
|
|
||||||
static const NamedEnum<volumeType, 2> volumeTypeNames_;
|
|
||||||
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
// Private Member Functions
|
|
||||||
|
|
||||||
//- Disallow default bitwise copy construct
|
|
||||||
timeActivatedExplicitSource(const timeActivatedExplicitSource&);
|
|
||||||
|
|
||||||
//- Disallow default bitwise assignment
|
|
||||||
void operator=(const timeActivatedExplicitSource&);
|
|
||||||
|
|
||||||
|
|
||||||
protected:
|
|
||||||
|
|
||||||
// Protected data
|
|
||||||
|
|
||||||
//- Reference to the mesh
|
|
||||||
const fvMesh& mesh_;
|
|
||||||
|
|
||||||
//- Reference to time database
|
|
||||||
const Time& runTime_;
|
|
||||||
|
|
||||||
|
|
||||||
// Source properties
|
|
||||||
|
|
||||||
//- Name of the source
|
|
||||||
word name_;
|
|
||||||
|
|
||||||
//- Active flag
|
|
||||||
Switch active_;
|
|
||||||
|
|
||||||
//- Dimensions
|
|
||||||
const dimensionSet dimensions_;
|
|
||||||
|
|
||||||
//- Volume type
|
|
||||||
volumeType volumeType_;
|
|
||||||
|
|
||||||
//- Time start [s]
|
|
||||||
scalar timeStart_;
|
|
||||||
|
|
||||||
//- Duration [s]
|
|
||||||
scalar duration_;
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
// Constructors
|
|
||||||
|
|
||||||
//- Construct from explicit source name and mesh
|
|
||||||
timeActivatedExplicitSource
|
|
||||||
(
|
|
||||||
const word&,
|
|
||||||
const fvMesh&,
|
|
||||||
const dimensionSet&
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
|
||||||
|
|
||||||
// Access
|
|
||||||
|
|
||||||
//- Return the reference to the mesh
|
|
||||||
virtual const fvMesh& mesh() const;
|
|
||||||
|
|
||||||
//- Return the reference to the time database
|
|
||||||
virtual const Time& runTime() const;
|
|
||||||
|
|
||||||
//- Return the source name
|
|
||||||
virtual const word& name() const;
|
|
||||||
|
|
||||||
//- Return the active flag
|
|
||||||
virtual const Switch& active() const;
|
|
||||||
|
|
||||||
//- Return the dimensions
|
|
||||||
virtual const dimensionSet& dimensions() const;
|
|
||||||
|
|
||||||
//- Return the volume type
|
|
||||||
virtual const volumeType& volume() const;
|
|
||||||
|
|
||||||
//- Return the start time
|
|
||||||
virtual scalar timeStart() const;
|
|
||||||
|
|
||||||
//- Return the duration
|
|
||||||
virtual scalar duration() const;
|
|
||||||
|
|
||||||
|
|
||||||
//- Read properties dictionary
|
|
||||||
virtual bool read();
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
} // End namespace Foam
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user