Files
openfoam/etc/codeTemplates/dynamicCode/codedFvOptionTemplate.H
Mark Olesen fd82f3e47a ENH: distinguish between compressible/incompressible coded source
- previously had codeAddSup used for both incompressible and
  compressible source terms. However, it was not actually possible to
  use it for compressible sources since any references to the 'rho'
  parameter would cause a compilation error for the incompressible case.

  Added 'codeAddSupRho' to distinguish the compressible case.
  User must supply one or both of them on input.
2021-11-09 21:48:42 +01:00

211 lines
5.2 KiB
C++

/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2019-2021 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Description
Template for use with dynamic code generation of a finiteVolume source.
The hook functions take the following arguments:
\verbatim
codeCorrect
(
GeometricField<Type, fvPatchField, volMesh>& fld
)
codeAddSup
(
fvMatrix<Type>& eqn,
const label fieldi
)
codeAddSupRho
(
const volScalarField& rho,
fvMatrix<Type>& eqn,
const label fieldi
)
codeConstrain
(
fvMatrix<Type>& eqn,
const label fieldi
)
\endverbatim
where :
fieldi is the index in the fields entry
eqn is the fvMatrix
\verbatim
energySource
{
type scalarCodedSource;
active true;
selectionMode all;
scalarCodedSourceCoeffs
{
fields (h);
name sourceTime;
codeInclude
#{
#};
codeCorrect
#{
Pout<< "**codeCorrect**" << endl;
#};
codeAddSup
#{
const Time& time = mesh().time();
const scalarField& V = mesh_.V();
scalarField& heSource = eqn.source();
heSource -= 0.1*sqr(time.value())*V;
#};
codeConstrain
#{
Pout<< "**codeConstrain**" << endl;
#};
}
sourceTimeCoeffs
{
// Dummy entry
}
}
\endverbatim
SourceFiles
codedFvOptionTemplate.C
\*---------------------------------------------------------------------------*/
#ifndef codedFvOptionTemplate_H
#define codedFvOptionTemplate_H
#include "cellSetOption.H"
#include "dictionaryContent.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace fv
{
/*---------------------------------------------------------------------------*\
A templated CodedFvOption
\*---------------------------------------------------------------------------*/
class ${typeName}FvOption${SourceType}
:
public fv::cellSetOption,
public dictionaryContent
{
// Private Member Functions
//- Report a message with the SHA1sum
inline static void printMessage(const char* message)
{
Info<< message << " sha1: " << SHA1sum << '\n';
}
public:
//- SHA1 representation of the code content
static constexpr const char* const SHA1sum = "${SHA1sum}";
//- Runtime type information
TypeName("${typeName}");
// Constructors
//- Construct from mesh
${typeName}FvOption${SourceType}
(
const word& name,
const word& modelType,
const dictionary& dict,
const fvMesh& mesh
);
//- Destructor
virtual ~${typeName}FvOption${SourceType}();
// Member Functions
//- Code context as a dictionary
const dictionary& codeContext() const
{
return dictionaryContent::dict();
}
//- Correct field
virtual void correct
(
GeometricField<${TemplateType}, fvPatchField, volMesh>& fld
);
//- Explicit/implicit matrix contributions
virtual void addSup
(
fvMatrix<${TemplateType}>& eqn,
const label fieldi
);
//- Explicit/implicit matrix contributions for compressible equations
virtual void addSup
(
const volScalarField& rho,
fvMatrix<${TemplateType}>& eqn,
const label fieldi
);
//- Set value
virtual void constrain
(
fvMatrix<${TemplateType}>& eqn,
const label fieldi
);
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace fv
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //