mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
- 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.
211 lines
5.2 KiB
C++
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
|
|
|
|
// ************************************************************************* //
|