diff --git a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterFilmFoam/VoFSolidificationMeltingSource/VoFSolidificationMeltingSource.C b/applications/solvers/multiphase/compressibleInterFoam/compressibleInterFilmFoam/VoFSolidificationMeltingSource/VoFSolidificationMeltingSource.C index 16eff5c6f917989350b682a99e9f74e644e3344f..864ebe11b99a00bede650855ad9aeecb5c5f7028 100644 --- a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterFilmFoam/VoFSolidificationMeltingSource/VoFSolidificationMeltingSource.C +++ b/applications/solvers/multiphase/compressibleInterFoam/compressibleInterFilmFoam/VoFSolidificationMeltingSource/VoFSolidificationMeltingSource.C @@ -144,10 +144,11 @@ Foam::fv::VoFSolidificationMeltingSource::VoFSolidificationMeltingSource ), curTimeIndex_(-1) { - fieldNames_.setSize(2); + fieldNames_.resize(2); fieldNames_[0] = "U"; fieldNames_[1] = "T"; - applied_.setSize(fieldNames_.size(), false); + + fv::option::resetApplied(); } diff --git a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterFilmFoam/VoFSolidificationMeltingSource/VoFSolidificationMeltingSourceIO.C b/applications/solvers/multiphase/compressibleInterFoam/compressibleInterFilmFoam/VoFSolidificationMeltingSource/VoFSolidificationMeltingSourceIO.C index d5c7979fff6878a487f2cde6f499f4b93433bbaa..069c34d6ba1ad54896261f217b9d896d6681b3ff 100644 --- a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterFilmFoam/VoFSolidificationMeltingSource/VoFSolidificationMeltingSourceIO.C +++ b/applications/solvers/multiphase/compressibleInterFoam/compressibleInterFilmFoam/VoFSolidificationMeltingSource/VoFSolidificationMeltingSourceIO.C @@ -41,10 +41,6 @@ bool Foam::fv::VoFSolidificationMeltingSource::read(const dictionary& dict) return true; } - else - { - return false; - } return false; } diff --git a/etc/codeTemplates/dynamicCode/codedFvOptionTemplate.C b/etc/codeTemplates/dynamicCode/codedFvOptionTemplate.C index 8ad03757984ae16768008f956f17113d4014cbfb..d6c4f935d6056b23b31715b6a8ac0d20f7d577ca 100644 --- a/etc/codeTemplates/dynamicCode/codedFvOptionTemplate.C +++ b/etc/codeTemplates/dynamicCode/codedFvOptionTemplate.C @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2019 OpenCFD Ltd. + Copyright (C) 2019-2021 OpenCFD Ltd. Copyright (C) YEAR AUTHOR, AFFILIATION ------------------------------------------------------------------------------- License @@ -95,11 +95,11 @@ ${typeName}FvOption${SourceType} const fvMesh& mesh ) : - cellSetOption(name, modelType, dict, mesh) + fv::cellSetOption(name, modelType, dict, mesh) { if (${verbose:-false}) { - printMessage("Construct ${typeName} from components"); + printMessage("Construct ${typeName} fvOption from dictionary"); } } @@ -118,14 +118,15 @@ ${typeName}FvOption${SourceType}:: // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void ${typeName}FvOption${SourceType}::correct +void +${typeName}FvOption${SourceType}::correct ( GeometricField<${TemplateType}, fvPatchField, volMesh>& fld ) { if (${verbose:-false}) { - Info<<"${typeName}FvOption${SourceType}::correct()\n"; + Info<< "${typeName}FvOption${SourceType}::correct()\n"; } //{{{ begin code @@ -134,7 +135,8 @@ void ${typeName}FvOption${SourceType}::correct } -void ${typeName}FvOption${SourceType}::addSup +void +${typeName}FvOption${SourceType}::addSup ( fvMatrix<${TemplateType}>& eqn, const label fieldi @@ -142,7 +144,7 @@ void ${typeName}FvOption${SourceType}::addSup { if (${verbose:-false}) { - Info<<"${typeName}FvOption${SourceType}::addSup()\n"; + Info<< "${typeName}FvOption${SourceType}::addSup()\n"; } //{{{ begin code @@ -151,7 +153,8 @@ void ${typeName}FvOption${SourceType}::addSup } -void ${typeName}FvOption${SourceType}::addSup +void +${typeName}FvOption${SourceType}::addSup ( const volScalarField& rho, fvMatrix<${TemplateType}>& eqn, @@ -160,7 +163,7 @@ void ${typeName}FvOption${SourceType}::addSup { if (${verbose:-false}) { - Info<<"${typeName}FvOption${SourceType}::addSup()\n"; + Info<< "${typeName}FvOption${SourceType}::addSup()\n"; } //{{{ begin code @@ -169,7 +172,8 @@ void ${typeName}FvOption${SourceType}::addSup } -void ${typeName}FvOption${SourceType}::constrain +void +${typeName}FvOption${SourceType}::constrain ( fvMatrix<${TemplateType}>& eqn, const label fieldi @@ -177,7 +181,7 @@ void ${typeName}FvOption${SourceType}::constrain { if (${verbose:-false}) { - Info<<"${typeName}FvOption${SourceType}::constrain()\n"; + Info<< "${typeName}FvOption${SourceType}::constrain()\n"; } //{{{ begin code diff --git a/etc/codeTemplates/dynamicCode/codedFvOptionTemplate.H b/etc/codeTemplates/dynamicCode/codedFvOptionTemplate.H index cafab99cdb0bbf922ee9536ca5477a231409576c..e252336236c1c987bb1964631eadb3df3c00255d 100644 --- a/etc/codeTemplates/dynamicCode/codedFvOptionTemplate.H +++ b/etc/codeTemplates/dynamicCode/codedFvOptionTemplate.H @@ -5,8 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2019 OpenCFD Ltd. - Copyright (C) YEAR AUTHOR, AFFILIATION + Copyright (C) 2019-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -25,7 +24,7 @@ License along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. Description - Template for use with dynamic code generation of a source. + Template for use with dynamic code generation of a finiteVolume source. The hook functions take the following arguments: \verbatim @@ -103,6 +102,7 @@ SourceFiles #define codedFvOptionTemplate_H #include "cellSetOption.H" +#include "dictionaryContent.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -117,7 +117,8 @@ namespace fv class ${typeName}FvOption${SourceType} : - public cellSetOption + public fv::cellSetOption, + public dictionaryContent { // Private Member Functions @@ -138,7 +139,7 @@ public: // Constructors - //- Construct from patch and internal field + //- Construct from mesh ${typeName}FvOption${SourceType} ( const word& name, @@ -147,12 +148,19 @@ public: 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 ( diff --git a/etc/codeTemplates/dynamicCode/codedPatchFunction1Template.C b/etc/codeTemplates/dynamicCode/codedPatchFunction1Template.C index 06e5eb00d750ed4eadee99ae2c9036581694b89d..ffce21acf361b7fadd2f43047816d7dab33e70b5 100644 --- a/etc/codeTemplates/dynamicCode/codedPatchFunction1Template.C +++ b/etc/codeTemplates/dynamicCode/codedPatchFunction1Template.C @@ -5,6 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- + Copyright (C) 2021 OpenCFD Ltd. Copyright (C) YEAR AUTHOR,AFFILIATION ------------------------------------------------------------------------------- License @@ -37,6 +38,7 @@ License ${codeInclude} //}}} end codeInclude +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { @@ -96,25 +98,15 @@ ${typeName}PatchFunction1${FieldType} const bool faceValues ) : - PatchFunction1<${TemplateType}>(pp, entryName, dict, faceValues) + parent_bctype(pp, entryName, dict, faceValues) { if (${verbose:-false}) { - printMessage("Construct ${typeName} from components"); + printMessage("Construct ${typeName} PatchFunction1 from dictionary"); } } -${typeName}PatchFunction1${FieldType}:: -${typeName}PatchFunction1${FieldType} -( - const ${typeName}PatchFunction1${FieldType}& rhs -) -: - PatchFunction1<${TemplateType}>(rhs) -{} - - ${typeName}PatchFunction1${FieldType}:: ${typeName}PatchFunction1${FieldType} ( @@ -122,13 +114,13 @@ ${typeName}PatchFunction1${FieldType} const polyPatch& pp ) : - PatchFunction1<${TemplateType}>(rhs, pp) + parent_bctype(rhs, pp) {} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -tmp<Field<${TemplateType}>> +Foam::tmp<Foam::Field<Foam::${TemplateType}>> ${typeName}PatchFunction1${FieldType}::value ( const scalar x diff --git a/etc/codeTemplates/dynamicCode/codedPatchFunction1Template.H b/etc/codeTemplates/dynamicCode/codedPatchFunction1Template.H index 0aeaf7059e01ccc2e903fb61cf646826f0148310..8e53867c038fce129b6c025ef2ceeee3a8deb844 100644 --- a/etc/codeTemplates/dynamicCode/codedPatchFunction1Template.H +++ b/etc/codeTemplates/dynamicCode/codedPatchFunction1Template.H @@ -5,8 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2020 OpenCFD Ltd. - Copyright (C) YEAR AUTHOR, AFFILIATION + Copyright (C) 2020-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -36,6 +35,7 @@ SourceFiles #define codedPatchFunction1Template${FieldType}_H #include "PatchFunction1.H" +#include "dictionaryContent.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -50,8 +50,12 @@ namespace PatchFunction1Types class ${typeName}PatchFunction1${FieldType} : - public PatchFunction1<${TemplateType}> + public PatchFunction1<${TemplateType}>, + public dictionaryContent { + //- The parent PatchFunction1 type + typedef PatchFunction1<${TemplateType}> parent_bctype; + // Private Member Functions //- Report a message with the SHA1sum @@ -85,7 +89,7 @@ public: ${typeName}PatchFunction1${FieldType} ( const ${typeName}PatchFunction1${FieldType}& rhs - ); + ) = default; //- Copy construct, resetting patch ${typeName}PatchFunction1${FieldType} diff --git a/etc/codeTemplates/dynamicCode/codedPoints0MotionSolverTemplate.C b/etc/codeTemplates/dynamicCode/codedPoints0MotionSolverTemplate.C index 386b870923fbe58e78e918be9db216c657c41f6d..d38ef18c97e0dd18e288cbbf2701f78bd7b2d244 100644 --- a/etc/codeTemplates/dynamicCode/codedPoints0MotionSolverTemplate.C +++ b/etc/codeTemplates/dynamicCode/codedPoints0MotionSolverTemplate.C @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2018-2019 OpenCFD Ltd. + Copyright (C) 2018-2021 OpenCFD Ltd. Copyright (C) YEAR AUTHOR, AFFILIATION ------------------------------------------------------------------------------- License @@ -27,6 +27,7 @@ License \*---------------------------------------------------------------------------*/ #include "codedPoints0MotionSolverTemplate.H" +#define namespaceFoam // Suppress <using namespace Foam;> #include "fvCFD.H" #include "unitConversion.H" #include "addToRunTimeSelectionTable.H" diff --git a/etc/codeTemplates/dynamicCode/codedPoints0MotionSolverTemplate.H b/etc/codeTemplates/dynamicCode/codedPoints0MotionSolverTemplate.H index 8bcca47ad374f8202dcc742747428ba8c360e06d..8a2a70fcf8d4786ea3cd511d7062232654cd393b 100644 --- a/etc/codeTemplates/dynamicCode/codedPoints0MotionSolverTemplate.H +++ b/etc/codeTemplates/dynamicCode/codedPoints0MotionSolverTemplate.H @@ -5,8 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2018-2019 OpenCFD Ltd. - Copyright (C) YEAR AUTHOR, AFFILIATION + Copyright (C) 2018-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -37,6 +36,7 @@ SourceFiles #define codedPoints0MotionSolverTemplate_H #include "points0MotionSolver.H" +#include "dictionaryContent.H" //{{{ begin codeInclude ${codeInclude} @@ -53,7 +53,8 @@ namespace Foam class ${typeName}Points0MotionSolver : - public points0MotionSolver + public points0MotionSolver, + public dictionaryContent { // Private Member Functions @@ -70,7 +71,10 @@ class ${typeName}Points0MotionSolver ) = delete; //- No copy assignment - void operator=(const ${typeName}Points0MotionSolver&) = delete; + void operator= + ( + const ${typeName}Points0MotionSolver& + ) = delete; public: @@ -98,6 +102,12 @@ public: // Member Functions + //- Code context as a dictionary + const dictionary& codeContext() const + { + return dictionaryContent::dict(); + } + //- Provide current points for motion. Uses current motion field virtual tmp<pointField> curPoints() const; diff --git a/etc/codeTemplates/dynamicCode/fixedValueFvPatchFieldTemplate.C b/etc/codeTemplates/dynamicCode/fixedValueFvPatchFieldTemplate.C index 71494cf806e25ab5587f542eacd0819a59823bec..a9db42f5fdeaea490582d29d20e006628a170473 100644 --- a/etc/codeTemplates/dynamicCode/fixedValueFvPatchFieldTemplate.C +++ b/etc/codeTemplates/dynamicCode/fixedValueFvPatchFieldTemplate.C @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2019 OpenCFD Ltd. + Copyright (C) 2019-2021 OpenCFD Ltd. Copyright (C) YEAR AUTHOR, AFFILIATION ------------------------------------------------------------------------------- License @@ -32,6 +32,7 @@ License #include "volFields.H" #include "surfaceFields.H" #include "unitConversion.H" +#include "PatchFunction1.H" //{{{ begin codeInclude ${codeInclude} @@ -87,7 +88,7 @@ ${typeName}FixedValueFvPatch${FieldType} const DimensionedField<${TemplateType}, volMesh>& iF ) : - fixedValueFvPatchField<${TemplateType}>(p, iF) + parent_bctype(p, iF) { if (${verbose:-false}) { @@ -99,13 +100,13 @@ ${typeName}FixedValueFvPatch${FieldType} ${typeName}FixedValueFvPatch${FieldType}:: ${typeName}FixedValueFvPatch${FieldType} ( - const ${typeName}FixedValueFvPatch${FieldType}& ptf, + const ${typeName}FixedValueFvPatch${FieldType}& rhs, const fvPatch& p, const DimensionedField<${TemplateType}, volMesh>& iF, const fvPatchFieldMapper& mapper ) : - fixedValueFvPatchField<${TemplateType}>(ptf, p, iF, mapper) + parent_bctype(rhs, p, iF, mapper) { if (${verbose:-false}) { @@ -122,7 +123,7 @@ ${typeName}FixedValueFvPatch${FieldType} const dictionary& dict ) : - fixedValueFvPatchField<${TemplateType}>(p, iF, dict) + parent_bctype(p, iF, dict) { if (${verbose:-false}) { @@ -134,10 +135,10 @@ ${typeName}FixedValueFvPatch${FieldType} ${typeName}FixedValueFvPatch${FieldType}:: ${typeName}FixedValueFvPatch${FieldType} ( - const ${typeName}FixedValueFvPatch${FieldType}& ptf + const ${typeName}FixedValueFvPatch${FieldType}& rhs ) : - fixedValueFvPatchField<${TemplateType}>(ptf) + parent_bctype(rhs) { if (${verbose:-false}) { @@ -149,11 +150,11 @@ ${typeName}FixedValueFvPatch${FieldType} ${typeName}FixedValueFvPatch${FieldType}:: ${typeName}FixedValueFvPatch${FieldType} ( - const ${typeName}FixedValueFvPatch${FieldType}& ptf, + const ${typeName}FixedValueFvPatch${FieldType}& rhs, const DimensionedField<${TemplateType}, volMesh>& iF ) : - fixedValueFvPatchField<${TemplateType}>(ptf, iF) + parent_bctype(rhs, iF) { if (${verbose:-false}) { @@ -176,7 +177,8 @@ ${typeName}FixedValueFvPatch${FieldType}:: // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void ${typeName}FixedValueFvPatch${FieldType}::updateCoeffs() +void +${typeName}FixedValueFvPatch${FieldType}::updateCoeffs() { if (this->updated()) { @@ -192,7 +194,7 @@ void ${typeName}FixedValueFvPatch${FieldType}::updateCoeffs() ${code} //}}} end code - this->fixedValueFvPatchField<${TemplateType}>::updateCoeffs(); + this->parent_bctype::updateCoeffs(); } diff --git a/etc/codeTemplates/dynamicCode/fixedValueFvPatchFieldTemplate.H b/etc/codeTemplates/dynamicCode/fixedValueFvPatchFieldTemplate.H index 4be5ca0425cecb8e66ba323b2214842bf5d4e971..5c345838d9ebbd73d90311db9f93e5aba75e587b 100644 --- a/etc/codeTemplates/dynamicCode/fixedValueFvPatchFieldTemplate.H +++ b/etc/codeTemplates/dynamicCode/fixedValueFvPatchFieldTemplate.H @@ -5,8 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2019 OpenCFD Ltd. - Copyright (C) YEAR AUTHOR, AFFILIATION + Copyright (C) 2019-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -39,6 +38,7 @@ SourceFiles #define fixedValueFvPatchTemplate${FieldType}_H #include "fixedValueFvPatchFields.H" +#include "dictionaryContent.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -51,8 +51,13 @@ namespace Foam class ${typeName}FixedValueFvPatch${FieldType} : - public fixedValueFvPatchField<${TemplateType}> + public fixedValueFvPatchField<${TemplateType}>, + public dictionaryContent { + //- The parent boundary condition type + typedef fixedValueFvPatchField<${TemplateType}> parent_bctype; + + // Private Member Functions //- Report a message with the SHA1sum @@ -137,6 +142,12 @@ public: // Member Functions + //- Code context as a dictionary + const dictionary& codeContext() const + { + return dictionaryContent::dict(); + } + //- Update the coefficients associated with the patch field virtual void updateCoeffs(); }; diff --git a/etc/codeTemplates/dynamicCode/fixedValuePointPatchFieldTemplate.C b/etc/codeTemplates/dynamicCode/fixedValuePointPatchFieldTemplate.C index d09326872663648bf017558819887bb2ab42784d..c91a478c6210fcf78c5baad2d751e5508e4b8fe7 100644 --- a/etc/codeTemplates/dynamicCode/fixedValuePointPatchFieldTemplate.C +++ b/etc/codeTemplates/dynamicCode/fixedValuePointPatchFieldTemplate.C @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2019 OpenCFD Ltd. + Copyright (C) 2019-2021 OpenCFD Ltd. Copyright (C) YEAR AUTHOR, AFFILIATION ------------------------------------------------------------------------------- License @@ -31,6 +31,7 @@ License #include "pointPatchFieldMapper.H" #include "pointFields.H" #include "unitConversion.H" +#include "PatchFunction1.H" //{{{ begin codeInclude ${codeInclude} @@ -86,7 +87,7 @@ ${typeName}FixedValuePointPatch${FieldType} const DimensionedField<${TemplateType}, pointMesh>& iF ) : - fixedValuePointPatchField<${TemplateType}>(p, iF) + parent_bctype(p, iF) { if (${verbose:-false}) { @@ -98,13 +99,13 @@ ${typeName}FixedValuePointPatch${FieldType} ${typeName}FixedValuePointPatch${FieldType}:: ${typeName}FixedValuePointPatch${FieldType} ( - const ${typeName}FixedValuePointPatch${FieldType}& ptf, + const ${typeName}FixedValuePointPatch${FieldType}& rhs, const pointPatch& p, const DimensionedField<${TemplateType}, pointMesh>& iF, const pointPatchFieldMapper& mapper ) : - fixedValuePointPatchField<${TemplateType}>(ptf, p, iF, mapper) + parent_bctype(rhs, p, iF, mapper) { if (${verbose:-false}) { @@ -122,7 +123,7 @@ ${typeName}FixedValuePointPatch${FieldType} const bool valueRequired ) : - fixedValuePointPatchField<${TemplateType}>(p, iF, dict, valueRequired) + parent_bctype(p, iF, dict, valueRequired) { if (${verbose:-false}) { @@ -134,10 +135,10 @@ ${typeName}FixedValuePointPatch${FieldType} ${typeName}FixedValuePointPatch${FieldType}:: ${typeName}FixedValuePointPatch${FieldType} ( - const ${typeName}FixedValuePointPatch${FieldType}& ptf + const ${typeName}FixedValuePointPatch${FieldType}& rhs ) : - fixedValuePointPatchField<${TemplateType}>(ptf) + parent_bctype(rhs) { if (${verbose:-false}) { @@ -149,11 +150,11 @@ ${typeName}FixedValuePointPatch${FieldType} ${typeName}FixedValuePointPatch${FieldType}:: ${typeName}FixedValuePointPatch${FieldType} ( - const ${typeName}FixedValuePointPatch${FieldType}& ptf, + const ${typeName}FixedValuePointPatch${FieldType}& rhs, const DimensionedField<${TemplateType}, pointMesh>& iF ) : - fixedValuePointPatchField<${TemplateType}>(ptf, iF) + parent_bctype(rhs, iF) { if (${verbose:-false}) { @@ -176,7 +177,8 @@ ${typeName}FixedValuePointPatch${FieldType}:: // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void ${typeName}FixedValuePointPatch${FieldType}::updateCoeffs() +void +${typeName}FixedValuePointPatch${FieldType}::updateCoeffs() { if (this->updated()) { @@ -192,7 +194,7 @@ void ${typeName}FixedValuePointPatch${FieldType}::updateCoeffs() ${code} //}}} end code - this->fixedValuePointPatchField<${TemplateType}>::updateCoeffs(); + this->parent_bctype::updateCoeffs(); } diff --git a/etc/codeTemplates/dynamicCode/fixedValuePointPatchFieldTemplate.H b/etc/codeTemplates/dynamicCode/fixedValuePointPatchFieldTemplate.H index cf412c02d0d53522db3189fbfe92510052c91949..9fd6198afbf9d9f75e0e82747a782575a1447fde 100644 --- a/etc/codeTemplates/dynamicCode/fixedValuePointPatchFieldTemplate.H +++ b/etc/codeTemplates/dynamicCode/fixedValuePointPatchFieldTemplate.H @@ -5,8 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2019 OpenCFD Ltd. - Copyright (C) YEAR AUTHOR, AFFILIATION + Copyright (C) 2019-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -35,10 +34,11 @@ SourceFiles \*---------------------------------------------------------------------------*/ -#ifndef fixedValuePointPatchTemplate${FieldType}_H -#define fixedValuePointPatchTemplate${FieldType}_H +#ifndef coded_fixedValuePointPatchTemplate${FieldType}_H +#define coded_fixedValuePointPatchTemplate${FieldType}_H #include "fixedValuePointPatchFields.H" +#include "dictionaryContent.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -51,8 +51,13 @@ namespace Foam class ${typeName}FixedValuePointPatch${FieldType} : - public fixedValuePointPatchField<${TemplateType}> + public fixedValuePointPatchField<${TemplateType}>, + public dictionaryContent { + //- The parent boundary condition type + typedef fixedValuePointPatchField<${TemplateType}> parent_bctype; + + // Private Member Functions //- Report a message with the SHA1sum @@ -138,6 +143,12 @@ public: // Member Functions + //- Code context as a dictionary + const dictionary& codeContext() const + { + return dictionaryContent::dict(); + } + //- Update the coefficients associated with the patch field virtual void updateCoeffs(); }; diff --git a/etc/codeTemplates/dynamicCode/functionObjectTemplate.C b/etc/codeTemplates/dynamicCode/functionObjectTemplate.C index 207e2dc3c95b370d551d410eba6a845f3142f432..274fd29f7c22042723e60a7a148e86e70526087e 100644 --- a/etc/codeTemplates/dynamicCode/functionObjectTemplate.C +++ b/etc/codeTemplates/dynamicCode/functionObjectTemplate.C @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2019 OpenCFD Ltd. + Copyright (C) 2019-2021 OpenCFD Ltd. Copyright (C) YEAR AUTHOR, AFFILIATION ------------------------------------------------------------------------------- License @@ -27,6 +27,7 @@ License \*---------------------------------------------------------------------------*/ #include "functionObjectTemplate.H" +#define namespaceFoam // Suppress <using namespace Foam;> #include "fvCFD.H" #include "unitConversion.H" #include "addToRunTimeSelectionTable.H" @@ -106,7 +107,8 @@ ${typeName}FunctionObject::~${typeName}FunctionObject() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -bool ${typeName}FunctionObject::read(const dictionary& dict) +bool +${typeName}FunctionObject::read(const dictionary& dict) { if (${verbose:-false}) { @@ -121,7 +123,8 @@ bool ${typeName}FunctionObject::read(const dictionary& dict) } -bool ${typeName}FunctionObject::execute() +bool +${typeName}FunctionObject::execute() { if (${verbose:-false}) { @@ -136,7 +139,8 @@ bool ${typeName}FunctionObject::execute() } -bool ${typeName}FunctionObject::write() +bool +${typeName}FunctionObject::write() { if (${verbose:-false}) { @@ -151,7 +155,8 @@ bool ${typeName}FunctionObject::write() } -bool ${typeName}FunctionObject::end() +bool +${typeName}FunctionObject::end() { if (${verbose:-false}) { diff --git a/etc/codeTemplates/dynamicCode/functionObjectTemplate.H b/etc/codeTemplates/dynamicCode/functionObjectTemplate.H index e56ae69538546eaaef99618e1db454ccbe37a40b..8cb7aaaca4d25620a9aa20e11d7c65434027ad97 100644 --- a/etc/codeTemplates/dynamicCode/functionObjectTemplate.H +++ b/etc/codeTemplates/dynamicCode/functionObjectTemplate.H @@ -36,6 +36,7 @@ SourceFiles #define functionObjectTemplate_H #include "regionFunctionObject.H" +#include "dictionaryContent.H" //{{{ begin codeInclude ${codeInclude} @@ -55,7 +56,8 @@ class fvMesh; class ${typeName}FunctionObject : - public functionObjects::regionFunctionObject + public functionObjects::regionFunctionObject, + public dictionaryContent { // Private Data @@ -76,10 +78,16 @@ class ${typeName}FunctionObject const fvMesh& mesh() const; //- No copy construct - ${typeName}FunctionObject(const ${typeName}FunctionObject&) = delete; + ${typeName}FunctionObject + ( + const ${typeName}FunctionObject& + ) = delete; //- No copy assignment - void operator=(const ${typeName}FunctionObject&) = delete; + void operator= + ( + const ${typeName}FunctionObject& + ) = delete; public: @@ -97,7 +105,7 @@ public: ( const word& name, const Time& runTime, - const dictionary& + const dictionary& dict ); @@ -107,7 +115,13 @@ public: // Member Functions - //- Read the dictionary + //- Code context as a dictionary + const dictionary& codeContext() const + { + return dictionaryContent::dict(); + } + + //- Read optional controls virtual bool read(const dictionary& dict); //- Execute (at time-step) diff --git a/etc/codeTemplates/dynamicCode/mixedFvPatchFieldTemplate.C b/etc/codeTemplates/dynamicCode/mixedFvPatchFieldTemplate.C index d7658f52b5e9c803da53dfc78da512f3edee6faf..8602b151bec78cafecf7a64be848e35c87465eb4 100644 --- a/etc/codeTemplates/dynamicCode/mixedFvPatchFieldTemplate.C +++ b/etc/codeTemplates/dynamicCode/mixedFvPatchFieldTemplate.C @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2019 OpenCFD Ltd. + Copyright (C) 2019-2021 OpenCFD Ltd. Copyright (C) YEAR AUTHOR, AFFILIATION ------------------------------------------------------------------------------- License @@ -32,6 +32,7 @@ License #include "volFields.H" #include "surfaceFields.H" #include "unitConversion.H" +#include "PatchFunction1.H" //{{{ begin codeInclude ${codeInclude} @@ -86,7 +87,7 @@ ${typeName}MixedValueFvPatch${FieldType} const DimensionedField<${TemplateType}, volMesh>& iF ) : - mixedFvPatchField<${TemplateType}>(p, iF) + parent_bctype(p, iF) { if (${verbose:-false}) { @@ -98,13 +99,13 @@ ${typeName}MixedValueFvPatch${FieldType} ${typeName}MixedValueFvPatch${FieldType}:: ${typeName}MixedValueFvPatch${FieldType} ( - const ${typeName}MixedValueFvPatch${FieldType}& ptf, + const ${typeName}MixedValueFvPatch${FieldType}& rhs, const fvPatch& p, const DimensionedField<${TemplateType}, volMesh>& iF, const fvPatchFieldMapper& mapper ) : - mixedFvPatchField<${TemplateType}>(ptf, p, iF, mapper) + parent_bctype(rhs, p, iF, mapper) { if (${verbose:-false}) { @@ -121,7 +122,7 @@ ${typeName}MixedValueFvPatch${FieldType} const dictionary& dict ) : - mixedFvPatchField<${TemplateType}>(p, iF, dict) + parent_bctype(p, iF, dict) { if (${verbose:-false}) { @@ -133,10 +134,10 @@ ${typeName}MixedValueFvPatch${FieldType} ${typeName}MixedValueFvPatch${FieldType}:: ${typeName}MixedValueFvPatch${FieldType} ( - const ${typeName}MixedValueFvPatch${FieldType}& ptf + const ${typeName}MixedValueFvPatch${FieldType}& rhs ) : - mixedFvPatchField<${TemplateType}>(ptf) + parent_bctype(rhs) { if (${verbose:-false}) { @@ -148,11 +149,11 @@ ${typeName}MixedValueFvPatch${FieldType} ${typeName}MixedValueFvPatch${FieldType}:: ${typeName}MixedValueFvPatch${FieldType} ( - const ${typeName}MixedValueFvPatch${FieldType}& ptf, + const ${typeName}MixedValueFvPatch${FieldType}& rhs, const DimensionedField<${TemplateType}, volMesh>& iF ) : - mixedFvPatchField<${TemplateType}>(ptf, iF) + parent_bctype(rhs, iF) { if (${verbose:-false}) { @@ -175,7 +176,8 @@ ${typeName}MixedValueFvPatch${FieldType}:: // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void ${typeName}MixedValueFvPatch${FieldType}::updateCoeffs() +void +${typeName}MixedValueFvPatch${FieldType}::updateCoeffs() { if (this->updated()) { @@ -191,7 +193,7 @@ void ${typeName}MixedValueFvPatch${FieldType}::updateCoeffs() ${code} //}}} end code - this->mixedFvPatchField<${TemplateType}>::updateCoeffs(); + this->parent_bctype::updateCoeffs(); } diff --git a/etc/codeTemplates/dynamicCode/mixedFvPatchFieldTemplate.H b/etc/codeTemplates/dynamicCode/mixedFvPatchFieldTemplate.H index 7588639539c41ce3819489f7c4581efc900e6900..83ef277870caa6c8e47ee592b4e9df8c483262c1 100644 --- a/etc/codeTemplates/dynamicCode/mixedFvPatchFieldTemplate.H +++ b/etc/codeTemplates/dynamicCode/mixedFvPatchFieldTemplate.H @@ -5,8 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2019 OpenCFD Ltd. - Copyright (C) YEAR AUTHOR, AFFILIATION + Copyright (C) 2019-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -35,10 +34,11 @@ SourceFiles \*---------------------------------------------------------------------------*/ -#ifndef mixedFvPatchTemplate${FieldType}_H -#define mixedFvPatchTemplate${FieldType}_H +#ifndef coded_mixedFvPatchTemplate${FieldType}_H +#define coded_mixedFvPatchTemplate${FieldType}_H #include "mixedFvPatchFields.H" +#include "dictionaryContent.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -51,8 +51,13 @@ namespace Foam class ${typeName}MixedValueFvPatch${FieldType} : - public mixedFvPatchField<${TemplateType}> + public mixedFvPatchField<${TemplateType}>, + public dictionaryContent { + //- The parent boundary condition type + typedef mixedFvPatchField<${TemplateType}> parent_bctype; + + // Private Member Functions //- Report a message with the SHA1sum @@ -137,6 +142,12 @@ public: // Member Functions + //- Code context as a dictionary + const dictionary& codeContext() const + { + return dictionaryContent::dict(); + } + //- Update the coefficients associated with the patch field virtual void updateCoeffs(); }; diff --git a/src/OpenFOAM/fields/pointPatchFields/derived/codedFixedValue/codedFixedValuePointPatchField.C b/src/OpenFOAM/fields/pointPatchFields/derived/codedFixedValue/codedFixedValuePointPatchField.C index 1d6e60bd79d51e5d7e7f2736bac605d73059956b..ae21366c0f6f7709f2633e1005b376576b577aa3 100644 --- a/src/OpenFOAM/fields/pointPatchFields/derived/codedFixedValue/codedFixedValuePointPatchField.C +++ b/src/OpenFOAM/fields/pointPatchFields/derived/codedFixedValue/codedFixedValuePointPatchField.C @@ -60,6 +60,15 @@ void Foam::codedFixedValuePointPatchField<Type>::clearRedirect() const } +template<class Type> +const Foam::dictionary& +Foam::codedFixedValuePointPatchField<Type>::codeContext() const +{ + const dictionary* ptr = dict_.findDict("codeContext", keyType::LITERAL); + return (ptr ? *ptr : dictionary::null); +} + + template<class Type> const Foam::dictionary& Foam::codedFixedValuePointPatchField<Type>::codeDict() const @@ -124,7 +133,7 @@ Foam::codedFixedValuePointPatchField<Type>::codedFixedValuePointPatchField const DimensionedField<Type, pointMesh>& iF ) : - fixedValuePointPatchField<Type>(p, iF), + parent_bctype(p, iF), codedBase(), redirectPatchFieldPtr_(nullptr) {} @@ -133,17 +142,17 @@ Foam::codedFixedValuePointPatchField<Type>::codedFixedValuePointPatchField template<class Type> Foam::codedFixedValuePointPatchField<Type>::codedFixedValuePointPatchField ( - const codedFixedValuePointPatchField<Type>& ptf, + const codedFixedValuePointPatchField<Type>& rhs, const pointPatch& p, const DimensionedField<Type, pointMesh>& iF, const pointPatchFieldMapper& mapper ) : - fixedValuePointPatchField<Type>(ptf, p, iF, mapper), + parent_bctype(rhs, p, iF, mapper), codedBase(), - dict_(ptf.dict_), - name_(ptf.name_), - redirectPatchFieldPtr_() + dict_(rhs.dict_), + name_(rhs.name_), + redirectPatchFieldPtr_(nullptr) {} @@ -156,7 +165,7 @@ Foam::codedFixedValuePointPatchField<Type>::codedFixedValuePointPatchField const bool valueRequired ) : - fixedValuePointPatchField<Type>(p, iF, dict, valueRequired), + parent_bctype(p, iF, dict, valueRequired), codedBase(), dict_ ( @@ -182,29 +191,29 @@ Foam::codedFixedValuePointPatchField<Type>::codedFixedValuePointPatchField template<class Type> Foam::codedFixedValuePointPatchField<Type>::codedFixedValuePointPatchField ( - const codedFixedValuePointPatchField<Type>& ptf + const codedFixedValuePointPatchField<Type>& rhs ) : - fixedValuePointPatchField<Type>(ptf), + parent_bctype(rhs), codedBase(), - dict_(ptf.dict_), - name_(ptf.name_), - redirectPatchFieldPtr_() + dict_(rhs.dict_), + name_(rhs.name_), + redirectPatchFieldPtr_(nullptr) {} template<class Type> Foam::codedFixedValuePointPatchField<Type>::codedFixedValuePointPatchField ( - const codedFixedValuePointPatchField<Type>& ptf, + const codedFixedValuePointPatchField<Type>& rhs, const DimensionedField<Type, pointMesh>& iF ) : - fixedValuePointPatchField<Type>(ptf, iF), + parent_bctype(rhs, iF), codedBase(), - dict_(ptf.dict_), - name_(ptf.name_), - redirectPatchFieldPtr_() + dict_(rhs.dict_), + name_(rhs.name_), + redirectPatchFieldPtr_(nullptr) {} @@ -220,10 +229,11 @@ Foam::codedFixedValuePointPatchField<Type>::redirectPatchField() const // Make sure to construct the patchfield with up-to-date value OStringStream os; - os.writeEntry("type", name_); static_cast<const Field<Type>&>(*this).writeEntry("value", os); IStringStream is(os.str()); - dictionary dict(is); + dictionary constructDict(is); + + constructDict.set("type", name_); redirectPatchFieldPtr_.reset ( @@ -231,9 +241,25 @@ Foam::codedFixedValuePointPatchField<Type>::redirectPatchField() const ( this->patch(), this->internalField(), - dict + constructDict ).ptr() ); + + + // Forward copy of codeContext to the code template + auto* contentPtr = + dynamic_cast<dictionaryContent*>(redirectPatchFieldPtr_.get()); + + if (contentPtr) + { + contentPtr->dict(this->codeContext()); + } + else + { + WarningInFunction + << name_ << " Did not derive from dictionaryContent" + << nl << nl; + } } return *redirectPatchFieldPtr_; } @@ -257,7 +283,7 @@ void Foam::codedFixedValuePointPatchField<Type>::updateCoeffs() // Copy through value this->operator==(fvp); - fixedValuePointPatchField<Type>::updateCoeffs(); + parent_bctype::updateCoeffs(); } @@ -274,14 +300,14 @@ void Foam::codedFixedValuePointPatchField<Type>::evaluate const_cast<pointPatchField<Type>&>(fvp).evaluate(commsType); - fixedValuePointPatchField<Type>::evaluate(commsType); + parent_bctype::evaluate(commsType); } template<class Type> void Foam::codedFixedValuePointPatchField<Type>::write(Ostream& os) const { - fixedValuePointPatchField<Type>::write(os); + this->parent_bctype::write(os); os.writeEntry("name", name_); codedBase::writeCodeDict(os, dict_); diff --git a/src/OpenFOAM/fields/pointPatchFields/derived/codedFixedValue/codedFixedValuePointPatchField.H b/src/OpenFOAM/fields/pointPatchFields/derived/codedFixedValue/codedFixedValuePointPatchField.H index 927bde50bf3af46ff0ada42394476e475dd7aa1a..6d79944f12cba203074b702a30a06a4759126457 100644 --- a/src/OpenFOAM/fields/pointPatchFields/derived/codedFixedValue/codedFixedValuePointPatchField.H +++ b/src/OpenFOAM/fields/pointPatchFields/derived/codedFixedValue/codedFixedValuePointPatchField.H @@ -31,6 +31,16 @@ Description Constructs on-the-fly a new boundary condition (derived from fixedValuePointPatchField) which is then used to evaluate. + The code entries: + \plaintable + codeInclude | include files + codeOptions | compiler line: added to EXE_INC (Make/options) + codeLibs | linker line: added to LIB_LIBS (Make/options) + localCode | c++; local static functions + code | c++; patch value assignment + codeContext | additional dictionary context for the code + \endplaintable + Example: \verbatim movingWall @@ -47,6 +57,11 @@ Description ); #}; + codeContext + { + ... + } + //codeInclude //#{ // #include "fvCFD.H" @@ -73,6 +88,10 @@ Description } \endverbatim +Note + The code context dictionary can be supplied separately as the + \c codeContext entry. + See also codedFixedValueFvPatchField @@ -102,6 +121,10 @@ class codedFixedValuePointPatchField public fixedValuePointPatchField<Type>, protected codedBase { + //- The parent boundary condition type + typedef fixedValuePointPatchField<Type> parent_bctype; + + // Private Data //- Dictionary contents for the boundary condition @@ -123,6 +146,9 @@ class codedFixedValuePointPatchField //- Clear redirected object(s) virtual void clearRedirect() const; + //- Additional 'codeContext' dictionary to pass through + virtual const dictionary& codeContext() const; + //- The code dictionary. Inline "code" or from system/codeDict virtual const dictionary& codeDict() const; diff --git a/src/atmosphericModels/fvOptions/atmAmbientTurbSource/atmAmbientTurbSource.C b/src/atmosphericModels/fvOptions/atmAmbientTurbSource/atmAmbientTurbSource.C index 932942adc73f224238e91c5872071a70745ea97d..8f8b5e0ffca70a79cce3c42135ddda3622269cf6 100644 --- a/src/atmosphericModels/fvOptions/atmAmbientTurbSource/atmAmbientTurbSource.C +++ b/src/atmosphericModels/fvOptions/atmAmbientTurbSource/atmAmbientTurbSource.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2020 ENERCON GmbH - Copyright (C) 2020 OpenCFD Ltd. + Copyright (C) 2020-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -107,7 +107,7 @@ Foam::fv::atmAmbientTurbSource::atmAmbientTurbSource << abort(FatalError); } - fieldNames_.setSize(2, "undefined"); + fieldNames_.resize(2); tmp<volScalarField> tepsilon = turbPtr->epsilon(); tmp<volScalarField> tomega = turbPtr->omega(); @@ -140,7 +140,7 @@ Foam::fv::atmAmbientTurbSource::atmAmbientTurbSource fieldNames_[1] = turbPtr->k()().name(); - applied_.setSize(fieldNames_.size(), false); + fv::option::resetApplied(); Log << " Applying atmAmbientTurbSource to: " << fieldNames_[0] << " and " << fieldNames_[1] diff --git a/src/atmosphericModels/fvOptions/atmBuoyancyTurbSource/atmBuoyancyTurbSource.C b/src/atmosphericModels/fvOptions/atmBuoyancyTurbSource/atmBuoyancyTurbSource.C index 4cbbffc2d6b93af0daa9a925e82285227371bb5e..111bafe6b2ea57053e571848a66639a4f5554e5a 100644 --- a/src/atmosphericModels/fvOptions/atmBuoyancyTurbSource/atmBuoyancyTurbSource.C +++ b/src/atmosphericModels/fvOptions/atmBuoyancyTurbSource/atmBuoyancyTurbSource.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2020 ENERCON GmbH - Copyright (C) 2020 OpenCFD Ltd. + Copyright (C) 2020-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -198,7 +198,7 @@ Foam::fv::atmBuoyancyTurbSource::atmBuoyancyTurbSource << abort(FatalError); } - fieldNames_.setSize(2, "undefined"); + fieldNames_.resize(2); tmp<volScalarField> tepsilon = turbPtr->epsilon(); tmp<volScalarField> tomega = turbPtr->omega(); @@ -232,7 +232,7 @@ Foam::fv::atmBuoyancyTurbSource::atmBuoyancyTurbSource fieldNames_[1] = turbPtr->k()().name(); - applied_.setSize(fieldNames_.size(), false); + fv::option::resetApplied(); Log << " Applying atmBuoyancyTurbSource to: " << fieldNames_[0] << " and " << fieldNames_[1] diff --git a/src/atmosphericModels/fvOptions/atmCoriolisUSource/atmCoriolisUSource.C b/src/atmosphericModels/fvOptions/atmCoriolisUSource/atmCoriolisUSource.C index 04e6c1cf3bb6f79cda14193f1e1efec57389c734..d53653d5ad7ea00005c58a39e5a5734d55b08f71 100644 --- a/src/atmosphericModels/fvOptions/atmCoriolisUSource/atmCoriolisUSource.C +++ b/src/atmosphericModels/fvOptions/atmCoriolisUSource/atmCoriolisUSource.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2020 CENER - Copyright (C) 2020 OpenCFD Ltd. + Copyright (C) 2020-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -109,9 +109,9 @@ Foam::fv::atmCoriolisUSource::atmCoriolisUSource << endl; } - fieldNames_.setSize(1, "U"); + fieldNames_.resize(1, "U"); - applied_.setSize(fieldNames_.size(), false); + fv::option::resetApplied(); Log << " Applying atmCoriolisUSource to: " << fieldNames_[0] << endl; } diff --git a/src/atmosphericModels/fvOptions/atmLengthScaleTurbSource/atmLengthScaleTurbSource.C b/src/atmosphericModels/fvOptions/atmLengthScaleTurbSource/atmLengthScaleTurbSource.C index f22c8886f2b26713fa068eca44fbd0e9fdf5ccba..c45ab84f1d75fdb8e30174c842246086fb47f187 100644 --- a/src/atmosphericModels/fvOptions/atmLengthScaleTurbSource/atmLengthScaleTurbSource.C +++ b/src/atmosphericModels/fvOptions/atmLengthScaleTurbSource/atmLengthScaleTurbSource.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2020 ENERCON GmbH - Copyright (C) 2020 OpenCFD Ltd. + Copyright (C) 2020-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -134,7 +134,7 @@ Foam::fv::atmLengthScaleTurbSource::atmLengthScaleTurbSource << abort(FatalError); } - fieldNames_.setSize(1, "undefined"); + fieldNames_.resize(1); tmp<volScalarField> tepsilon = turbPtr->epsilon(); tmp<volScalarField> tomega = turbPtr->omega(); @@ -165,7 +165,7 @@ Foam::fv::atmLengthScaleTurbSource::atmLengthScaleTurbSource << abort(FatalError); } - applied_.setSize(fieldNames_.size(), false); + fv::option::resetApplied(); Log << " Applying atmLengthScaleTurbSource to: " << fieldNames_[0] << endl; diff --git a/src/atmosphericModels/fvOptions/atmNutSource/atmNutSource.C b/src/atmosphericModels/fvOptions/atmNutSource/atmNutSource.C index 4a558d9678107cae05f602e7c1a502fb6d10b656..b67ce2ab739e78769c1b1e8ffe523a1b95462098 100644 --- a/src/atmosphericModels/fvOptions/atmNutSource/atmNutSource.C +++ b/src/atmosphericModels/fvOptions/atmNutSource/atmNutSource.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2020 ENERCON GmbH - Copyright (C) 2020 OpenCFD Ltd. + Copyright (C) 2020-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -88,7 +88,7 @@ Foam::fv::atmNutSource::atmNutSource << abort(FatalError); } - fieldNames_.setSize(1, "undefined"); + fieldNames_.resize(1); const tmp<volScalarField>& tnut = turbPtr->nut(); @@ -104,7 +104,7 @@ Foam::fv::atmNutSource::atmNutSource << abort(FatalError); } - applied_.setSize(fieldNames_.size(), false); + fv::option::resetApplied(); Log << " Applying atmNutSource to: " << fieldNames_[0] << endl; } diff --git a/src/atmosphericModels/fvOptions/atmPlantCanopyTSource/atmPlantCanopyTSource.C b/src/atmosphericModels/fvOptions/atmPlantCanopyTSource/atmPlantCanopyTSource.C index ae907dc9bd93fada68810c74d794fe0e7e5085cc..5faebf5973d4a12846a8793fdf22dbeff206a828 100644 --- a/src/atmosphericModels/fvOptions/atmPlantCanopyTSource/atmPlantCanopyTSource.C +++ b/src/atmosphericModels/fvOptions/atmPlantCanopyTSource/atmPlantCanopyTSource.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2020 ENERCON GmbH - Copyright (C) 2020 OpenCFD Ltd. + Copyright (C) 2020-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -79,9 +79,9 @@ Foam::fv::atmPlantCanopyTSource::atmPlantCanopyTSource mesh ) { - fieldNames_.setSize(1, "T"); + fieldNames_.resize(1, "T"); - applied_.setSize(fieldNames_.size(), false); + fv::option::resetApplied(); Log << " Applying atmPlantCanopyTSource to: " << fieldNames_[0] << endl; } diff --git a/src/atmosphericModels/fvOptions/atmPlantCanopyTurbSource/atmPlantCanopyTurbSource.C b/src/atmosphericModels/fvOptions/atmPlantCanopyTurbSource/atmPlantCanopyTurbSource.C index 548b4dff83c05920ef36d7f6c5d1768b642a9fa2..b137b8ae947b089457f6eaca9cde78c8f787c5b9 100644 --- a/src/atmosphericModels/fvOptions/atmPlantCanopyTurbSource/atmPlantCanopyTurbSource.C +++ b/src/atmosphericModels/fvOptions/atmPlantCanopyTurbSource/atmPlantCanopyTurbSource.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2020 ENERCON GmbH - Copyright (C) 2020 OpenCFD Ltd. + Copyright (C) 2020-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -108,7 +108,7 @@ Foam::fv::atmPlantCanopyTurbSource::atmPlantCanopyTurbSource << abort(FatalError); } - fieldNames_.setSize(1, "undefined"); + fieldNames_.resize(1); tmp<volScalarField> tepsilon = turbPtr->epsilon(); tmp<volScalarField> tomega = turbPtr->omega(); @@ -138,7 +138,7 @@ Foam::fv::atmPlantCanopyTurbSource::atmPlantCanopyTurbSource << abort(FatalError); } - applied_.setSize(fieldNames_.size(), false); + fv::option::resetApplied(); Log << " Applying atmPlantCanopyTurbSource to: " << fieldNames_[0] << endl; diff --git a/src/atmosphericModels/fvOptions/atmPlantCanopyUSource/atmPlantCanopyUSource.C b/src/atmosphericModels/fvOptions/atmPlantCanopyUSource/atmPlantCanopyUSource.C index 4ad1fdc3c610a51fb7983565183121a05451ad58..cefd8f877651b0e9d5c0037b10cce70ecee320ed 100644 --- a/src/atmosphericModels/fvOptions/atmPlantCanopyUSource/atmPlantCanopyUSource.C +++ b/src/atmosphericModels/fvOptions/atmPlantCanopyUSource/atmPlantCanopyUSource.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2020 ENERCON GmbH - Copyright (C) 2020 OpenCFD Ltd. + Copyright (C) 2020-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -78,9 +78,9 @@ Foam::fv::atmPlantCanopyUSource::atmPlantCanopyUSource mesh ) { - fieldNames_.setSize(1, "U"); + fieldNames_.resize(1, "U"); - applied_.setSize(fieldNames_.size(), false); + fv::option::resetApplied(); Log << " Applying atmPlantCanopyUSource to: " << fieldNames_[0] << endl; } diff --git a/src/dynamicMesh/motionSolvers/displacement/codedPoints0/codedPoints0MotionSolver.H b/src/dynamicMesh/motionSolvers/displacement/codedPoints0/codedPoints0MotionSolver.H index e99e5434419b0807e3d5217b396be6de8f3fe9c6..7cc0c374affd1d0467035fd823cd0c5d2106256b 100644 --- a/src/dynamicMesh/motionSolvers/displacement/codedPoints0/codedPoints0MotionSolver.H +++ b/src/dynamicMesh/motionSolvers/displacement/codedPoints0/codedPoints0MotionSolver.H @@ -35,10 +35,10 @@ Description The entries are: \plaintable codeInclude | include files - codeOptions | include paths; inserted into EXE_INC in Make/options - codeLibs | link line; inserted into LIB_LIBS in Make/options - localCode | c++; local static functions; - code | c++; upon motionSolver::curPoints(); + codeOptions | compiler line: added to EXE_INC (Make/options) + codeLibs | linker line: added to LIB_LIBS (Make/options) + localCode | c++; local static functions + code | c++; upon motionSolver::curPoints() \endplaintable Note that the dynamically generated motionSolver is an points0MotionSolver, diff --git a/src/faOptions/faOption/faOption.C b/src/faOptions/faOption/faOption.C index 9f98da33fe5691a5e9ae556d20a2024ed863d34b..b043867f818328483bc3bf3367d40af4cffc2da2 100644 --- a/src/faOptions/faOption/faOption.C +++ b/src/faOptions/faOption/faOption.C @@ -40,6 +40,15 @@ namespace Foam } +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + +void Foam::fa::option::resetApplied() +{ + applied_.resize(fieldNames_.size()); + applied_ = false; +} + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::fa::option::option diff --git a/src/faOptions/faOption/faOption.H b/src/faOptions/faOption/faOption.H index c8d69e473f999b9de9a202f7fbda15599033aee5..e7bddf348fb4d9b0947a5e38ac1b1e801ae056d1 100644 --- a/src/faOptions/faOption/faOption.H +++ b/src/faOptions/faOption/faOption.H @@ -132,6 +132,13 @@ protected: //- Region name (finite-area) word regionName_; + + // Protected Member Functions + + //- Resize/reset applied flag list for all fieldNames_ entries + void resetApplied(); + + private: // Private Data diff --git a/src/faOptions/faOption/faOptionList.C b/src/faOptions/faOption/faOptionList.C index b722e457a6f91031ec4e6ca79f3b3fcd5b4ee342..2c312807e7e73706412c2b1c097d000bd831e0f6 100644 --- a/src/faOptions/faOption/faOptionList.C +++ b/src/faOptions/faOption/faOptionList.C @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2019-2020 OpenCFD Ltd. + Copyright (C) 2019-2021 OpenCFD Ltd. ------------------------------------------------------------------------------ License This file is part of OpenFOAM. @@ -38,33 +38,27 @@ namespace fa } -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * // const Foam::dictionary& Foam::fa::optionList::optionsDict ( const dictionary& dict -) const +) { - if (dict.found("options")) - { - return dict.subDict("options"); - } - else - { - return dict; - } + return dict.optionalSubDict("options", keyType::LITERAL); } +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + bool Foam::fa::optionList::readOptions(const dictionary& dict) { checkTimeIndex_ = mesh_.time().timeIndex() + 2; bool allOk = true; - forAll(*this, i) + for (fa::option& opt : *this) { - option& bs = this->operator[](i); - bool ok = bs.read(dict.subDict(bs.name())); + bool ok = opt.read(dict.subDict(opt.name())); allOk = (allOk && ok); } return allOk; @@ -75,10 +69,9 @@ void Foam::fa::optionList::checkApplied() const { if (mesh_.time().timeIndex() == checkTimeIndex_) { - forAll(*this, i) + for (const fa::option& opt : *this) { - const option& bs = this->operator[](i); - bs.checkApplied(); + opt.checkApplied(); } } } @@ -144,6 +137,22 @@ void Foam::fa::optionList::reset(const dictionary& dict) } +bool Foam::fa::optionList::appliesToField(const word& fieldName) const +{ + for (const fa::option& source : *this) + { + const label fieldi = source.applyToField(fieldName); + + if (fieldi != -1) + { + return true; + } + } + + return false; +} + + bool Foam::fa::optionList::read(const dictionary& dict) { return readOptions(optionsDict(dict)); @@ -153,12 +162,12 @@ bool Foam::fa::optionList::read(const dictionary& dict) bool Foam::fa::optionList::writeData(Ostream& os) const { // Write list contents - forAll(*this, i) + for (const fa::option& opt : *this) { os << nl; - this->operator[](i).writeHeader(os); - this->operator[](i).writeData(os); - this->operator[](i).writeFooter(os); + opt.writeHeader(os); + opt.writeData(os); + opt.writeFooter(os); } // Check state of IOstream diff --git a/src/faOptions/faOption/faOptionList.H b/src/faOptions/faOption/faOptionList.H index a479c9719667fea3bebc34f301462b6db50bfd72..18b3b535ab4344833855f25e5d0654ca59f9a295 100644 --- a/src/faOptions/faOption/faOptionList.H +++ b/src/faOptions/faOption/faOptionList.H @@ -83,8 +83,8 @@ protected: // Protected Member Functions - //- Return the "options" sub-dictionary if present otherwise return dict - const dictionary& optionsDict(const dictionary& dict) const; + //- Return "options" sub-dictionary (if present) or return dict + static const dictionary& optionsDict(const dictionary& dict); //- Read options dictionary bool readOptions(const dictionary& dict); @@ -117,11 +117,11 @@ public: // Constructors - //- Construct from patch - optionList(const fvPatch& p); + //- Default construct from patch + explicit optionList(const fvPatch& p); - //- Construct from mesh and dictionary - optionList(const fvPatch&, const dictionary& ); + //- Construct from patch and dictionary + optionList(const fvPatch& p, const dictionary&); //- Destructor @@ -133,6 +133,9 @@ public: //- Reset the source list void reset(const dictionary& dict); + //- Return whether there is something to apply to the field + bool appliesToField(const word& fieldName) const; + // Sources diff --git a/src/faOptions/faOption/faOptionListTemplates.C b/src/faOptions/faOption/faOptionListTemplates.C index 96a266e5a38105d20979dbfbf8f88d55b4e5c5ac..b71f49588007f30fb80ab31f06db1faafeffb6d6 100644 --- a/src/faOptions/faOption/faOptionListTemplates.C +++ b/src/faOptions/faOption/faOptionListTemplates.C @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2019-2020 OpenCFD Ltd. + Copyright (C) 2019-2021 OpenCFD Ltd. ------------------------------------------------------------------------------ License This file is part of OpenFOAM. @@ -44,11 +44,9 @@ Foam::tmp<Foam::faMatrix<Type>> Foam::fa::optionList::source tmp<faMatrix<Type>> tmtx(new faMatrix<Type>(field, ds)); faMatrix<Type>& mtx = tmtx.ref(); - forAll(*this, i) + for (fa::option& source : *this) { - option& source = this->operator[](i); - - label fieldi = source.applyToField(fieldName); + const label fieldi = source.applyToField(fieldName); if (fieldi != -1) { @@ -56,14 +54,24 @@ Foam::tmp<Foam::faMatrix<Type>> Foam::fa::optionList::source source.setApplied(fieldi); - if (source.isActive()) + const bool ok = source.isActive(); + + if (debug) { - if (debug) + if (ok) + { + Info<< "Apply"; + } + else { - Info<< "Applying source " << source.name() << " to field " - << fieldName << endl; + Info<< "(Inactive)"; } + Info<< " source " << source.name() + << " for field " << fieldName << endl; + } + if (ok) + { source.addSup(h, mtx, fieldi); } } @@ -127,11 +135,9 @@ Foam::tmp<Foam::faMatrix<Type>> Foam::fa::optionList::operator() tmp<faMatrix<Type>> tmtx(new faMatrix<Type>(field, ds)); faMatrix<Type>& mtx = tmtx.ref(); - forAll(*this, i) + for (fa::option& source : *this) { - option& source = this->operator[](i); - - label fieldi = source.applyToField(fieldName); + const label fieldi = source.applyToField(fieldName); if (fieldi != -1) { @@ -139,14 +145,24 @@ Foam::tmp<Foam::faMatrix<Type>> Foam::fa::optionList::operator() source.setApplied(fieldi); - if (source.isActive()) + const bool ok = source.isActive(); + + if (debug) { - if (debug) + if (ok) { - Info<< "Applying source " << source.name() << " to field " - << fieldName << endl; + Info<< "Apply"; } + else + { + Info<< "(Inactive)"; + } + Info<< " source " << source.name() + << " for field " << fieldName << endl; + } + if (ok) + { source.addSup(h, rho, mtx, fieldi); } } @@ -171,11 +187,9 @@ Foam::tmp<Foam::faMatrix<Type>> Foam::fa::optionList::operator() tmp<faMatrix<Type>> tmtx(new faMatrix<Type>(field, dsMat)); faMatrix<Type>& mtx = tmtx.ref(); - forAll(*this, i) + for (fa::option& source : *this) { - option& source = this->operator[](i); - - label fieldi = source.applyToField(field.name()); + const label fieldi = source.applyToField(field.name()); if (fieldi != -1) { @@ -183,14 +197,24 @@ Foam::tmp<Foam::faMatrix<Type>> Foam::fa::optionList::operator() source.setApplied(fieldi); - if (source.isActive()) + const bool ok = source.isActive(); + + if (debug) { - if (debug) + if (ok) + { + Info<< "Apply"; + } + else { - Info<< "Applying source " << source.name() << " to field " - << field.name() << endl; + Info<< "(Inactive)"; } + Info<< " source " << source.name() + << " for field " << field.name() << endl; + } + if (ok) + { source.addSup(rho, mtx, fieldi); } } @@ -226,11 +250,9 @@ void Foam::fa::optionList::constrain(faMatrix<Type>& eqn) { checkApplied(); - forAll(*this, i) + for (fa::option& source : *this) { - option& source = this->operator[](i); - - label fieldi = source.applyToField(eqn.psi().name()); + const label fieldi = source.applyToField(eqn.psi().name()); if (fieldi != -1) { @@ -238,14 +260,24 @@ void Foam::fa::optionList::constrain(faMatrix<Type>& eqn) source.setApplied(fieldi); - if (source.isActive()) + const bool ok = source.isActive(); + + if (debug) { - if (debug) + if (ok) + { + Info<< "Constrain"; + } + else { - Info<< "Applying constraint " << source.name() - << " to field " << eqn.psi().name() << endl; + Info<< "(Inactive constrain)"; } + Info<< " source " << source.name() + << " for field " << eqn.psi().name() << endl; + } + if (ok) + { source.constrain(eqn, fieldi); } } @@ -261,11 +293,9 @@ void Foam::fa::optionList::correct { const word& fieldName = field.name(); - forAll(*this, i) + for (fa::option& source : *this) { - option& source = this->operator[](i); - - label fieldi = source.applyToField(fieldName); + const label fieldi = source.applyToField(fieldName); if (fieldi != -1) { @@ -273,14 +303,24 @@ void Foam::fa::optionList::correct source.setApplied(fieldi); - if (source.isActive()) + const bool ok = source.isActive(); + + if (debug) { - if (debug) + if (ok) { - Info<< "Correcting source " << source.name() - << " for field " << fieldName << endl; + Info<< "Correct"; } + else + { + Info<< "(Inactive correct)"; + } + Info<< " source " << source.name() + << " for field " << fieldName << endl; + } + if (ok) + { source.correct(field); } } diff --git a/src/faOptions/faceSetOption/faceSetOption.C b/src/faOptions/faceSetOption/faceSetOption.C index 24e176e56da0fc8c7bc15396e46137342d9a7b28..04eefeb2ff3a704c91db4a78dbdb74c0346cbbe5 100644 --- a/src/faOptions/faceSetOption/faceSetOption.C +++ b/src/faOptions/faceSetOption/faceSetOption.C @@ -204,7 +204,7 @@ Foam::fa::faceSetOption::faceSetOption bool Foam::fa::faceSetOption::isActive() { - if (option::isActive() && inTimeLimits(mesh_.time().value())) + if (fa::option::isActive() && inTimeLimits(mesh_.time().value())) { // Update the face set if the mesh is changing if (mesh_.changing()) @@ -229,7 +229,7 @@ bool Foam::fa::faceSetOption::isActive() bool Foam::fa::faceSetOption::read(const dictionary& dict) { - if (option::read(dict)) + if (fa::option::read(dict)) { if (coeffs_.readIfPresent("timeStart", timeStart_)) { diff --git a/src/faOptions/sources/derived/contactHeatFluxSource/contactHeatFluxSource.C b/src/faOptions/sources/derived/contactHeatFluxSource/contactHeatFluxSource.C index e9a4133d7a9f1b67f40f3742e1880e14e474b5e9..883027340772dc66ddf7a1fd919566ad03b425d0 100644 --- a/src/faOptions/sources/derived/contactHeatFluxSource/contactHeatFluxSource.C +++ b/src/faOptions/sources/derived/contactHeatFluxSource/contactHeatFluxSource.C @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2019-2020 OpenCFD Ltd. + Copyright (C) 2019-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -78,9 +78,9 @@ Foam::fa::contactHeatFluxSource::contactHeatFluxSource contactRes_(0), curTimeIndex_(-1) { - fieldNames_.setSize(1, TName_); + fieldNames_.resize(1, TName_); - applied_.setSize(fieldNames_.size(), false); + fa::option::resetApplied(); read(dict); } diff --git a/src/faOptions/sources/derived/externalFileSource/externalFileSource.C b/src/faOptions/sources/derived/externalFileSource/externalFileSource.C index 81e93caa40eae7e80f831d807f34bacf220e1c1b..cc6da002216da1d629b42e00f4a2afb80a0463f3 100644 --- a/src/faOptions/sources/derived/externalFileSource/externalFileSource.C +++ b/src/faOptions/sources/derived/externalFileSource/externalFileSource.C @@ -83,9 +83,9 @@ Foam::fa::externalFileSource::externalFileSource ), curTimeIndex_(-1) { - fieldNames_.setSize(1, fieldName_); + fieldNames_.resize(1, fieldName_); - applied_.setSize(fieldNames_.size(), false); + fa::option::resetApplied(); read(dict); } diff --git a/src/faOptions/sources/derived/externalHeatFluxSource/externalHeatFluxSource.C b/src/faOptions/sources/derived/externalHeatFluxSource/externalHeatFluxSource.C index 22c8404e198428af53acfc82d9ebccfb070b372a..2a559f0fe70a835ee5f062cf6662f5e5aed563e0 100644 --- a/src/faOptions/sources/derived/externalHeatFluxSource/externalHeatFluxSource.C +++ b/src/faOptions/sources/derived/externalHeatFluxSource/externalHeatFluxSource.C @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2019-2020 OpenCFD Ltd. + Copyright (C) 2019-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -77,9 +77,9 @@ Foam::fa::externalHeatFluxSource::externalHeatFluxSource Ta_(), emissivity_(dict.getOrDefault<scalar>("emissivity", 0)) { - fieldNames_.setSize(1, TName_); + fieldNames_.resize(1, TName_); - applied_.setSize(fieldNames_.size(), false); + fa::option::resetApplied(); read(dict); } diff --git a/src/faOptions/sources/derived/jouleHeatingSource/jouleHeatingSource.C b/src/faOptions/sources/derived/jouleHeatingSource/jouleHeatingSource.C index a752b74eff6e023ebf017e61a149c28a141ba05b..583fd34ecd97fecb226a5c36878ed2d019c1917e 100644 --- a/src/faOptions/sources/derived/jouleHeatingSource/jouleHeatingSource.C +++ b/src/faOptions/sources/derived/jouleHeatingSource/jouleHeatingSource.C @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2019-2020 OpenCFD Ltd. + Copyright (C) 2019-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -72,9 +72,9 @@ Foam::fa::jouleHeatingSource::jouleHeatingSource nIter_(1), anisotropicElectricalConductivity_(false) { - fieldNames_.setSize(1, TName_); + fieldNames_.resize(1, TName_); - applied_.setSize(fieldNames_.size(), false); + fa::option::resetApplied(); if (anisotropicElectricalConductivity_) { diff --git a/src/finiteVolume/cfdTools/general/fvOptions/fvOption.C b/src/finiteVolume/cfdTools/general/fvOptions/fvOption.C index 4614b1b8acc5e09e524e107598b20f406648883e..a3aa2f6dadd5d835bcd54b57d9804a13da56a9fd 100644 --- a/src/finiteVolume/cfdTools/general/fvOptions/fvOption.C +++ b/src/finiteVolume/cfdTools/general/fvOptions/fvOption.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2017 OpenFOAM Foundation - Copyright (C) 2019-2020 OpenCFD Ltd. + Copyright (C) 2019-2021 OpenCFD Ltd. Copyright (C) 2020 PCOpt/NTUA Copyright (C) 2020 FOSS GP ------------------------------------------------------------------------------- @@ -43,6 +43,15 @@ namespace Foam } +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + +void Foam::fv::option::resetApplied() +{ + applied_.resize(fieldNames_.size()); + applied_ = false; +} + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::fv::option::option diff --git a/src/finiteVolume/cfdTools/general/fvOptions/fvOption.H b/src/finiteVolume/cfdTools/general/fvOptions/fvOption.H index 84539964ac498733f4724d67f547b3546ecc9aef..f7a7408b84c1198010e7ef55a33d4ab073c76ee7 100644 --- a/src/finiteVolume/cfdTools/general/fvOptions/fvOption.H +++ b/src/finiteVolume/cfdTools/general/fvOptions/fvOption.H @@ -123,6 +123,12 @@ protected: bool active_; + // Protected Member Functions + + //- Resize/reset applied flag list for all fieldNames_ entries + void resetApplied(); + + public: //- Switch write log to Info diff --git a/src/finiteVolume/cfdTools/general/fvOptions/fvOptionList.C b/src/finiteVolume/cfdTools/general/fvOptions/fvOptionList.C index 2fe08194b560182ac3ab1f444adb89351243fba1..45d114ca11ea8c23a7d891fc4daa2e6f8041db3c 100644 --- a/src/finiteVolume/cfdTools/general/fvOptions/fvOptionList.C +++ b/src/finiteVolume/cfdTools/general/fvOptions/fvOptionList.C @@ -6,6 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2015 OpenFOAM Foundation + Copyright (C) 2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -39,33 +40,27 @@ namespace fv } -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * // const Foam::dictionary& Foam::fv::optionList::optionsDict ( const dictionary& dict -) const +) { - if (dict.found("options")) - { - return dict.subDict("options"); - } - else - { - return dict; - } + return dict.optionalSubDict("options", keyType::LITERAL); } +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + bool Foam::fv::optionList::readOptions(const dictionary& dict) { checkTimeIndex_ = mesh_.time().timeIndex() + 2; bool allOk = true; - forAll(*this, i) + for (fv::option& opt : *this) { - option& bs = this->operator[](i); - bool ok = bs.read(dict.subDict(bs.name())); + bool ok = opt.read(dict.subDict(opt.name())); allOk = (allOk && ok); } return allOk; @@ -76,10 +71,9 @@ void Foam::fv::optionList::checkApplied() const { if (mesh_.time().timeIndex() == checkTimeIndex_) { - forAll(*this, i) + for (const fv::option& opt : *this) { - const option& bs = this->operator[](i); - bs.checkApplied(); + opt.checkApplied(); } } } @@ -141,11 +135,9 @@ void Foam::fv::optionList::reset(const dictionary& dict) bool Foam::fv::optionList::appliesToField(const word& fieldName) const { - forAll(*this, i) + for (const fv::option& source : *this) { - const option& source = this->operator[](i); - - label fieldi = source.applyToField(fieldName); + const label fieldi = source.applyToField(fieldName); if (fieldi != -1) { @@ -166,12 +158,12 @@ bool Foam::fv::optionList::read(const dictionary& dict) bool Foam::fv::optionList::writeData(Ostream& os) const { // Write list contents - forAll(*this, i) + for (const fv::option& opt : *this) { os << nl; - this->operator[](i).writeHeader(os); - this->operator[](i).writeData(os); - this->operator[](i).writeFooter(os); + opt.writeHeader(os); + opt.writeData(os); + opt.writeFooter(os); } // Check state of IOstream diff --git a/src/finiteVolume/cfdTools/general/fvOptions/fvOptionList.H b/src/finiteVolume/cfdTools/general/fvOptions/fvOptionList.H index 1cbca46098bc8e6a50a2f3a905e3197bb4e39f26..14b8ea08c92c8c8455221093b6615882498eedd1 100644 --- a/src/finiteVolume/cfdTools/general/fvOptions/fvOptionList.H +++ b/src/finiteVolume/cfdTools/general/fvOptions/fvOptionList.H @@ -84,8 +84,8 @@ protected: // Protected Member Functions - //- Return the "options" sub-dictionary if present otherwise return dict - const dictionary& optionsDict(const dictionary& dict) const; + //- Return "options" sub-dictionary (if present) or return dict + static const dictionary& optionsDict(const dictionary& dict); //- Read options dictionary bool readOptions(const dictionary& dict); @@ -117,8 +117,8 @@ public: // Constructors - //- Construct null - optionList(const fvMesh& mesh); + //- Default construct from mesh + explicit optionList(const fvMesh& mesh); //- Construct from mesh and dictionary optionList(const fvMesh& mesh, const dictionary& dict); diff --git a/src/finiteVolume/cfdTools/general/fvOptions/fvOptionListTemplates.C b/src/finiteVolume/cfdTools/general/fvOptions/fvOptionListTemplates.C index 8e76688319ca378d1f35866d1dcff2a7d73e3367..374cc5ab25744927549534c2af6cd278de147c7e 100644 --- a/src/finiteVolume/cfdTools/general/fvOptions/fvOptionListTemplates.C +++ b/src/finiteVolume/cfdTools/general/fvOptions/fvOptionListTemplates.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2017 OpenFOAM Foundation - Copyright (C) 2016 OpenCFD Ltd. + Copyright (C) 2016-2021 OpenCFD Ltd. Copyright (C) 2020 PCOpt/NTUA Copyright (C) 2020 FOSS GP ------------------------------------------------------------------------------- @@ -45,11 +45,9 @@ Foam::tmp<Foam::fvMatrix<Type>> Foam::fv::optionList::source tmp<fvMatrix<Type>> tmtx(new fvMatrix<Type>(field, ds)); fvMatrix<Type>& mtx = tmtx.ref(); - forAll(*this, i) + for (fv::option& source : *this) { - option& source = this->operator[](i); - - label fieldi = source.applyToField(fieldName); + const label fieldi = source.applyToField(fieldName); if (fieldi != -1) { @@ -57,14 +55,24 @@ Foam::tmp<Foam::fvMatrix<Type>> Foam::fv::optionList::source source.setApplied(fieldi); - if (source.isActive()) + const bool ok = source.isActive(); + + if (debug) { - if (debug) + if (ok) { - Info<< "Applying source " << source.name() << " to field " - << fieldName << endl; + Info<< "Apply"; } + else + { + Info<< "(Inactive)"; + } + Info<< " source " << source.name() + << " for field " << fieldName << endl; + } + if (ok) + { source.addSup(mtx, fieldi); } } @@ -124,11 +132,9 @@ Foam::tmp<Foam::fvMatrix<Type>> Foam::fv::optionList::operator() tmp<fvMatrix<Type>> tmtx(new fvMatrix<Type>(field, ds)); fvMatrix<Type>& mtx = tmtx.ref(); - forAll(*this, i) + for (fv::option& source : *this) { - option& source = this->operator[](i); - - label fieldi = source.applyToField(fieldName); + const label fieldi = source.applyToField(fieldName); if (fieldi != -1) { @@ -136,14 +142,24 @@ Foam::tmp<Foam::fvMatrix<Type>> Foam::fv::optionList::operator() source.setApplied(fieldi); - if (source.isActive()) + const bool ok = source.isActive(); + + if (debug) { - if (debug) + if (ok) + { + Info<< "Apply"; + } + else { - Info<< "Applying source " << source.name() << " to field " - << fieldName << endl; + Info<< "(Inactive)"; } + Info<< " source " << source.name() + << " for field " << fieldName << endl; + } + if (ok) + { source.addSup(rho, mtx, fieldi); } } @@ -185,11 +201,9 @@ Foam::tmp<Foam::fvMatrix<Type>> Foam::fv::optionList::operator() tmp<fvMatrix<Type>> tmtx(new fvMatrix<Type>(field, ds)); fvMatrix<Type>& mtx = tmtx.ref(); - forAll(*this, i) + for (fv::option& source : *this) { - option& source = this->operator[](i); - - label fieldi = source.applyToField(fieldName); + const label fieldi = source.applyToField(fieldName); if (fieldi != -1) { @@ -197,14 +211,24 @@ Foam::tmp<Foam::fvMatrix<Type>> Foam::fv::optionList::operator() source.setApplied(fieldi); - if (source.isActive()) + const bool ok = source.isActive(); + + if (debug) { - if (debug) + if (ok) { - Info<< "Applying source " << source.name() << " to field " - << fieldName << endl; + Info<< "Apply"; } + else + { + Info<< "(Inactive)"; + } + Info<< " source " << source.name() + << " for field " << fieldName << endl; + } + if (ok) + { source.addSup(alpha, rho, mtx, fieldi); } } @@ -291,11 +315,9 @@ void Foam::fv::optionList::constrain(fvMatrix<Type>& eqn) { checkApplied(); - forAll(*this, i) + for (fv::option& source : *this) { - option& source = this->operator[](i); - - label fieldi = source.applyToField(eqn.psi().name()); + const label fieldi = source.applyToField(eqn.psi().name()); if (fieldi != -1) { @@ -303,14 +325,24 @@ void Foam::fv::optionList::constrain(fvMatrix<Type>& eqn) source.setApplied(fieldi); - if (source.isActive()) + const bool ok = source.isActive(); + + if (debug) { - if (debug) + if (ok) { - Info<< "Applying constraint " << source.name() - << " to field " << eqn.psi().name() << endl; + Info<< "Constrain"; } + else + { + Info<< "(Inactive constrain)"; + } + Info<< " source " << source.name() + << " for field " << eqn.psi().name() << endl; + } + if (ok) + { source.constrain(eqn, fieldi); } } @@ -326,11 +358,9 @@ void Foam::fv::optionList::correct { const word& fieldName = field.name(); - forAll(*this, i) + for (fv::option& source : *this) { - option& source = this->operator[](i); - - label fieldi = source.applyToField(fieldName); + const label fieldi = source.applyToField(fieldName); if (fieldi != -1) { @@ -338,14 +368,24 @@ void Foam::fv::optionList::correct source.setApplied(fieldi); - if (source.isActive()) + const bool ok = source.isActive(); + + if (debug) { - if (debug) + if (ok) + { + Info<< "Correct"; + } + else { - Info<< "Correcting source " << source.name() - << " for field " << fieldName << endl; + Info<< "(Inactive correct)"; } + Info<< " source " << source.name() + << " for field " << fieldName << endl; + } + if (ok) + { source.correct(field); } } @@ -361,25 +401,24 @@ void Foam::fv::optionList::postProcessSens const word& designVariablesName ) { - forAll(*this, i) + for (fv::option& source : *this) { - option& source = this->operator[](i); - - label fieldi = source.applyToField(fieldName); + const label fieldi = source.applyToField(fieldName); if (fieldi != -1) { addProfiling(fvopt, "fvOption::postProcessSens." + source.name()); - if (source.isActive()) + const bool ok = source.isActive(); + + if (debug && ok) { - if (debug) - { - Info<< "Post processing sensitivity from source " - << source.name() - << " for field " << fieldName << endl; - } + Info<< "Post processing sensitivity source " + << source.name() << " for field " << fieldName << endl; + } + if (ok) + { source.postProcessSens ( sensField, diff --git a/src/finiteVolume/fields/fvPatchFields/derived/codedFixedValue/codedFixedValueFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/derived/codedFixedValue/codedFixedValueFvPatchField.C index 2a3a1702f7990a343d4f907a6aeca0016fdabc0c..73f1e3600412094a60a02c46a869e467f07184af 100644 --- a/src/finiteVolume/fields/fvPatchFields/derived/codedFixedValue/codedFixedValueFvPatchField.C +++ b/src/finiteVolume/fields/fvPatchFields/derived/codedFixedValue/codedFixedValueFvPatchField.C @@ -60,6 +60,15 @@ void Foam::codedFixedValueFvPatchField<Type>::clearRedirect() const } +template<class Type> +const Foam::dictionary& +Foam::codedFixedValueFvPatchField<Type>::codeContext() const +{ + const dictionary* ptr = dict_.findDict("codeContext", keyType::LITERAL); + return (ptr ? *ptr : dictionary::null); +} + + template<class Type> const Foam::dictionary& Foam::codedFixedValueFvPatchField<Type>::codeDict() const @@ -124,7 +133,7 @@ Foam::codedFixedValueFvPatchField<Type>::codedFixedValueFvPatchField const DimensionedField<Type, volMesh>& iF ) : - fixedValueFvPatchField<Type>(p, iF), + parent_bctype(p, iF), codedBase(), redirectPatchFieldPtr_(nullptr) {} @@ -133,17 +142,17 @@ Foam::codedFixedValueFvPatchField<Type>::codedFixedValueFvPatchField template<class Type> Foam::codedFixedValueFvPatchField<Type>::codedFixedValueFvPatchField ( - const codedFixedValueFvPatchField<Type>& ptf, + const codedFixedValueFvPatchField<Type>& rhs, const fvPatch& p, const DimensionedField<Type, volMesh>& iF, const fvPatchFieldMapper& mapper ) : - fixedValueFvPatchField<Type>(ptf, p, iF, mapper), + parent_bctype(rhs, p, iF, mapper), codedBase(), - dict_(ptf.dict_), - name_(ptf.name_), - redirectPatchFieldPtr_() + dict_(rhs.dict_), + name_(rhs.name_), + redirectPatchFieldPtr_(nullptr) {} @@ -155,7 +164,7 @@ Foam::codedFixedValueFvPatchField<Type>::codedFixedValueFvPatchField const dictionary& dict ) : - fixedValueFvPatchField<Type>(p, iF, dict), + parent_bctype(p, iF, dict), codedBase(), dict_ ( @@ -181,29 +190,29 @@ Foam::codedFixedValueFvPatchField<Type>::codedFixedValueFvPatchField template<class Type> Foam::codedFixedValueFvPatchField<Type>::codedFixedValueFvPatchField ( - const codedFixedValueFvPatchField<Type>& ptf + const codedFixedValueFvPatchField<Type>& rhs ) : - fixedValueFvPatchField<Type>(ptf), + parent_bctype(rhs), codedBase(), - dict_(ptf.dict_), - name_(ptf.name_), - redirectPatchFieldPtr_() + dict_(rhs.dict_), + name_(rhs.name_), + redirectPatchFieldPtr_(nullptr) {} template<class Type> Foam::codedFixedValueFvPatchField<Type>::codedFixedValueFvPatchField ( - const codedFixedValueFvPatchField<Type>& ptf, + const codedFixedValueFvPatchField<Type>& rhs, const DimensionedField<Type, volMesh>& iF ) : - fixedValueFvPatchField<Type>(ptf, iF), + parent_bctype(rhs, iF), codedBase(), - dict_(ptf.dict_), - name_(ptf.name_), - redirectPatchFieldPtr_() + dict_(rhs.dict_), + name_(rhs.name_), + redirectPatchFieldPtr_(nullptr) {} @@ -219,10 +228,11 @@ Foam::codedFixedValueFvPatchField<Type>::redirectPatchField() const // Make sure to construct the patchfield with up-to-date value OStringStream os; - os.writeEntry("type", name_); static_cast<const Field<Type>&>(*this).writeEntry("value", os); IStringStream is(os.str()); - dictionary dict(is); + dictionary constructDict(is); + + constructDict.set("type", name_); redirectPatchFieldPtr_.reset ( @@ -230,9 +240,25 @@ Foam::codedFixedValueFvPatchField<Type>::redirectPatchField() const ( this->patch(), this->internalField(), - dict + constructDict ).ptr() ); + + + // Forward copy of codeContext to the code template + auto* contentPtr = + dynamic_cast<dictionaryContent*>(redirectPatchFieldPtr_.get()); + + if (contentPtr) + { + contentPtr->dict(this->codeContext()); + } + else + { + WarningInFunction + << name_ << " Did not derive from dictionaryContent" + << nl << nl; + } } return *redirectPatchFieldPtr_; } @@ -256,7 +282,7 @@ void Foam::codedFixedValueFvPatchField<Type>::updateCoeffs() // Copy through value this->operator==(fvp); - fixedValueFvPatchField<Type>::updateCoeffs(); + parent_bctype::updateCoeffs(); } @@ -273,14 +299,14 @@ void Foam::codedFixedValueFvPatchField<Type>::evaluate const_cast<fvPatchField<Type>&>(fvp).evaluate(commsType); - fixedValueFvPatchField<Type>::evaluate(commsType); + parent_bctype::evaluate(commsType); } template<class Type> void Foam::codedFixedValueFvPatchField<Type>::write(Ostream& os) const { - fixedValueFvPatchField<Type>::write(os); + this->parent_bctype::write(os); os.writeEntry("name", name_); codedBase::writeCodeDict(os, dict_); diff --git a/src/finiteVolume/fields/fvPatchFields/derived/codedFixedValue/codedFixedValueFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/derived/codedFixedValue/codedFixedValueFvPatchField.H index 9f2c91e0721fc62a28e8f4d9dfbf8733597c7247..19201b6b43cd1bac45b547ec818c989c57646aaf 100644 --- a/src/finiteVolume/fields/fvPatchFields/derived/codedFixedValue/codedFixedValueFvPatchField.H +++ b/src/finiteVolume/fields/fvPatchFields/derived/codedFixedValue/codedFixedValueFvPatchField.H @@ -34,6 +34,16 @@ Description Constructs on-the-fly a new boundary condition (derived from fixedValueFvPatchField) which is then used to evaluate. + The code entries: + \plaintable + codeInclude | include files + codeOptions | compiler line: added to EXE_INC (Make/options) + codeLibs | linker line: added to LIB_LIBS (Make/options) + localCode | c++; local static functions + code | c++; patch value assignment + codeContext | additional dictionary context for the code + \endplaintable + Usage Example: \verbatim @@ -43,6 +53,11 @@ Usage value uniform 0; name rampedFixedValue; // name of generated BC + codeContext + { + ... + } + code #{ operator==(min(10, 0.1*this->db().time().value())); @@ -74,6 +89,10 @@ Usage } \endverbatim +Note + The code context dictionary can be supplied separately as the + \c codeContext entry. + See also Foam::dynamicCode Foam::functionEntries::codeStream @@ -104,6 +123,10 @@ class codedFixedValueFvPatchField public fixedValueFvPatchField<Type>, protected codedBase { + //- The parent boundary condition type + typedef fixedValueFvPatchField<Type> parent_bctype; + + // Private Data //- Dictionary contents for the boundary condition @@ -125,6 +148,9 @@ class codedFixedValueFvPatchField //- Clear redirected object(s) virtual void clearRedirect() const; + //- Additional 'codeContext' dictionary to pass through + virtual const dictionary& codeContext() const; + //- The code dictionary. Inline "code" or from system/codeDict virtual const dictionary& codeDict() const; diff --git a/src/finiteVolume/fields/fvPatchFields/derived/codedMixed/codedMixedFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/derived/codedMixed/codedMixedFvPatchField.C index 1bb9e078ad7837c937ae745add15971042febeee..e294c6474d5f614f55e8fd96435df057a53e02e0 100644 --- a/src/finiteVolume/fields/fvPatchFields/derived/codedMixed/codedMixedFvPatchField.C +++ b/src/finiteVolume/fields/fvPatchFields/derived/codedMixed/codedMixedFvPatchField.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2016 OpenFOAM Foundation - Copyright (C) 2016-2020 OpenCFD Ltd. + Copyright (C) 2016-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -60,6 +60,15 @@ void Foam::codedMixedFvPatchField<Type>::clearRedirect() const } +template<class Type> +const Foam::dictionary& +Foam::codedMixedFvPatchField<Type>::codeContext() const +{ + const dictionary* ptr = dict_.findDict("codeContext", keyType::LITERAL); + return (ptr ? *ptr : dictionary::null); +} + + template<class Type> const Foam::dictionary& Foam::codedMixedFvPatchField<Type>::codeDict() const @@ -124,7 +133,7 @@ Foam::codedMixedFvPatchField<Type>::codedMixedFvPatchField const DimensionedField<Type, volMesh>& iF ) : - mixedFvPatchField<Type>(p, iF), + parent_bctype(p, iF), codedBase(), redirectPatchFieldPtr_(nullptr) {} @@ -133,17 +142,17 @@ Foam::codedMixedFvPatchField<Type>::codedMixedFvPatchField template<class Type> Foam::codedMixedFvPatchField<Type>::codedMixedFvPatchField ( - const codedMixedFvPatchField<Type>& ptf, + const codedMixedFvPatchField<Type>& rhs, const fvPatch& p, const DimensionedField<Type, volMesh>& iF, const fvPatchFieldMapper& mapper ) : - mixedFvPatchField<Type>(ptf, p, iF, mapper), + parent_bctype(rhs, p, iF, mapper), codedBase(), - dict_(ptf.dict_), - name_(ptf.name_), - redirectPatchFieldPtr_() + dict_(rhs.dict_), + name_(rhs.name_), + redirectPatchFieldPtr_(nullptr) {} @@ -155,7 +164,7 @@ Foam::codedMixedFvPatchField<Type>::codedMixedFvPatchField const dictionary& dict ) : - mixedFvPatchField<Type>(p, iF, dict), + parent_bctype(p, iF, dict), codedBase(), dict_ ( @@ -181,29 +190,29 @@ Foam::codedMixedFvPatchField<Type>::codedMixedFvPatchField template<class Type> Foam::codedMixedFvPatchField<Type>::codedMixedFvPatchField ( - const codedMixedFvPatchField<Type>& ptf + const codedMixedFvPatchField<Type>& rhs ) : - mixedFvPatchField<Type>(ptf), + parent_bctype(rhs), codedBase(), - dict_(ptf.dict_), - name_(ptf.name_), - redirectPatchFieldPtr_() + dict_(rhs.dict_), + name_(rhs.name_), + redirectPatchFieldPtr_(nullptr) {} template<class Type> Foam::codedMixedFvPatchField<Type>::codedMixedFvPatchField ( - const codedMixedFvPatchField<Type>& ptf, + const codedMixedFvPatchField<Type>& rhs, const DimensionedField<Type, volMesh>& iF ) : - mixedFvPatchField<Type>(ptf, iF), + parent_bctype(rhs, iF), codedBase(), - dict_(ptf.dict_), - name_(ptf.name_), - redirectPatchFieldPtr_() + dict_(rhs.dict_), + name_(rhs.name_), + redirectPatchFieldPtr_(nullptr) {} @@ -220,27 +229,41 @@ Foam::codedMixedFvPatchField<Type>::redirectPatchField() const // Write the data from the mixed b.c. OStringStream os; - mixedFvPatchField<Type>::write(os); + this->parent_bctype::write(os); IStringStream is(os.str()); // Construct dictionary from it. - dictionary dict(is); + dictionary constructDict(is); - // Override the type to enforce the fvPatchField::New constructor - // to choose our type - dict.set("type", name_); + // Override type + constructDict.set("type", name_); redirectPatchFieldPtr_.reset ( - dynamic_cast<mixedFvPatchField<Type>*> + dynamic_cast<parent_bctype*> ( fvPatchField<Type>::New ( this->patch(), this->internalField(), - dict + constructDict ).ptr() ) ); + + // Forward copy of dictionary content to the code template + auto* contentPtr = + dynamic_cast<dictionaryContent*>(redirectPatchFieldPtr_.get()); + + if (contentPtr) + { + contentPtr->dict(this->codeContext()); + } + else + { + WarningInFunction + << name_ << " Did not derive from dictionaryContent" + << nl << nl; + } } return *redirectPatchFieldPtr_; } @@ -257,16 +280,15 @@ void Foam::codedMixedFvPatchField<Type>::updateCoeffs() // Make sure library containing user-defined fvPatchField is up-to-date updateLibrary(name_); - const mixedFvPatchField<Type>& fvp = redirectPatchField(); - - const_cast<mixedFvPatchField<Type>&>(fvp).updateCoeffs(); + const parent_bctype& fvp = redirectPatchField(); + const_cast<parent_bctype&>(fvp).updateCoeffs(); // Copy through coefficients this->refValue() = fvp.refValue(); this->refGrad() = fvp.refGrad(); this->valueFraction() = fvp.valueFraction(); - mixedFvPatchField<Type>::updateCoeffs(); + this->parent_bctype::updateCoeffs(); } @@ -279,21 +301,21 @@ void Foam::codedMixedFvPatchField<Type>::evaluate // Make sure library containing user-defined fvPatchField is up-to-date updateLibrary(name_); - const mixedFvPatchField<Type>& fvp = redirectPatchField(); + const parent_bctype& fvp = redirectPatchField(); // - updates the value of fvp (though not used) // - resets the updated() flag - const_cast<mixedFvPatchField<Type>&>(fvp).evaluate(commsType); + const_cast<parent_bctype&>(fvp).evaluate(commsType); // Update the value (using the coefficients) locally - mixedFvPatchField<Type>::evaluate(commsType); + parent_bctype::evaluate(commsType); } template<class Type> void Foam::codedMixedFvPatchField<Type>::write(Ostream& os) const { - mixedFvPatchField<Type>::write(os); + this->parent_bctype::write(os); os.writeEntry("name", name_); codedBase::writeCodeDict(os, dict_); diff --git a/src/finiteVolume/fields/fvPatchFields/derived/codedMixed/codedMixedFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/derived/codedMixed/codedMixedFvPatchField.H index 2ca033652ec9b7c10055a86d023a16d83be5f01f..89bbc2320d1868e6a704446f1e9495a37ad83d0a 100644 --- a/src/finiteVolume/fields/fvPatchFields/derived/codedMixed/codedMixedFvPatchField.H +++ b/src/finiteVolume/fields/fvPatchFields/derived/codedMixed/codedMixedFvPatchField.H @@ -31,8 +31,18 @@ Group grpGenericBoundaryConditions Description - Constructs on-the-fly a new boundary condition (derived from - mixedFvPatchField) which is then used to evaluate. + Constructs on-the-fly a new boundary condition + (derived from mixedFvPatchField) which is then used to evaluate. + + The code entries: + \plaintable + codeInclude | include files + codeOptions | compiler line: added to EXE_INC (Make/options) + codeLibs | linker line: added to LIB_LIBS (Make/options) + localCode | c++; local static functions; + code | c++; patch value assignment + codeContext | additional dictionary context for the code + \endplaintable Usage Example: @@ -84,6 +94,10 @@ Usage } \endverbatim +Note + The code context dictionary can be supplied separately as the + \c codeContext entry. + See also Foam::dynamicCode Foam::functionEntries::codeStream @@ -114,6 +128,10 @@ class codedMixedFvPatchField public mixedFvPatchField<Type>, public codedBase { + //- The parent boundary condition type + typedef mixedFvPatchField<Type> parent_bctype; + + // Private Data //- Dictionary contents for the boundary condition @@ -137,6 +155,9 @@ protected: //- Clear redirected object(s) virtual void clearRedirect() const; + //- Additional 'codeContext' dictionary to pass through + virtual const dictionary& codeContext() const; + //- The code dictionary. Inline "code" or from system/codeDict virtual const dictionary& codeDict() const; diff --git a/src/functionObjects/utilities/codedFunctionObject/codedFunctionObject.C b/src/functionObjects/utilities/codedFunctionObject/codedFunctionObject.C index 829df548684e5916f6595d7a601f82e931d33535..cc8ab31bc89e83f76fb0212dbe05ed8b94d5d06d 100644 --- a/src/functionObjects/utilities/codedFunctionObject/codedFunctionObject.C +++ b/src/functionObjects/utilities/codedFunctionObject/codedFunctionObject.C @@ -32,6 +32,7 @@ License #include "Time.H" #include "dynamicCode.H" #include "dynamicCodeContext.H" +#include "dictionaryContent.H" #include "addToRunTimeSelectionTable.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -47,8 +48,8 @@ namespace functionObjects codedFunctionObject, dictionary ); -} -} +} // End namespace functionObjects +} // End namespace Foam // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // @@ -71,6 +72,14 @@ void Foam::functionObjects::codedFunctionObject::clearRedirect() const } +const Foam::dictionary& +Foam::functionObjects::codedFunctionObject::codeContext() const +{ + const dictionary* ptr = dict_.findDict("codeContext", keyType::LITERAL); + return (ptr ? *ptr : dictionary::null); +} + + const Foam::dictionary& Foam::functionObjects::codedFunctionObject::codeDict() const { @@ -156,6 +165,22 @@ Foam::functionObjects::codedFunctionObject::redirectFunctionObject() const time_, constructDict ); + + + // Forward copy of codeContext to the code template + auto* contentPtr = + dynamic_cast<dictionaryContent*>(redirectFunctionObjectPtr_.get()); + + if (contentPtr) + { + contentPtr->dict(this->codeContext()); + } + else + { + WarningInFunction + << name_ << " Did not derive from dictionaryContent" + << nl << nl; + } } return *redirectFunctionObjectPtr_; } diff --git a/src/functionObjects/utilities/codedFunctionObject/codedFunctionObject.H b/src/functionObjects/utilities/codedFunctionObject/codedFunctionObject.H index 0ef530cb9979a21605096da739399c8e74abc8e2..8508c4a408722b78decaab5620b65ca0a7a46348 100644 --- a/src/functionObjects/utilities/codedFunctionObject/codedFunctionObject.H +++ b/src/functionObjects/utilities/codedFunctionObject/codedFunctionObject.H @@ -36,14 +36,15 @@ Description The entries are: \plaintable codeInclude | include files - codeOptions | include paths; inserted into EXE_INC in Make/options - codeLibs | link line; inserted into LIB_LIBS in Make/options - codeData | c++; local member data (default constructed); - localCode | c++; local static functions; - codeRead | c++; upon functionObject::read(); - codeExecute | c++; upon functionObject::execute(); + codeOptions | compiler line: added to EXE_INC (Make/options) + codeLibs | linker line: added to LIB_LIBS (Make/options) + codeData | c++; local member data (default constructed) + localCode | c++; local static functions + codeRead | c++; upon functionObject::read() + codeExecute | c++; upon functionObject::execute() codeWrite | c++; upon functionObject::write() - codeEnd | c++; upon functionObject::end(); + codeEnd | c++; upon functionObject::end() + codeContext | additional dictionary context for the code \endplaintable Usage @@ -67,6 +68,10 @@ Usage } \endverbatim +Note + The code context dictionary can be supplied separately as the + \c codeContext entry. + See also Foam::functionObject Foam::codedBase @@ -128,6 +133,9 @@ protected: //- Clear redirected object(s) virtual void clearRedirect() const; + //- Additional 'codeContext' dictionary to pass through + virtual const dictionary& codeContext() const; + //- The code dictionary virtual const dictionary& codeDict() const; diff --git a/src/fvOptions/Make/files b/src/fvOptions/Make/files index da81bfc3068c131b16900180a057e5fc6e0739f9..01e2288baa989398506b1631562248105872dca3 100644 --- a/src/fvOptions/Make/files +++ b/src/fvOptions/Make/files @@ -4,7 +4,7 @@ interRegionOption/interRegionOption.C /* Sources */ generalSources=sources/general -$(generalSources)/codedSource/codedSource.C +$(generalSources)/codedSource/codedFvSources.C $(generalSources)/semiImplicitSource/semiImplicitSource.C derivedSources=sources/derived diff --git a/src/fvOptions/constraints/derived/fixedTemperatureConstraint/fixedTemperatureConstraint.C b/src/fvOptions/constraints/derived/fixedTemperatureConstraint/fixedTemperatureConstraint.C index 3bfa919f9ed68681191a3c628fccdf5d17853d08..1142b18bba3a8eb09389031deb4433be677ee323 100644 --- a/src/fvOptions/constraints/derived/fixedTemperatureConstraint/fixedTemperatureConstraint.C +++ b/src/fvOptions/constraints/derived/fixedTemperatureConstraint/fixedTemperatureConstraint.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2012-2016 OpenFOAM Foundation - Copyright (C) 2020 OpenCFD Ltd. + Copyright (C) 2020-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -101,9 +101,9 @@ Foam::fv::fixedTemperatureConstraint::fixedTemperatureConstraint const auto& thermo = mesh_.lookupObject<basicThermo>(basicThermo::dictName); - fieldNames_.setSize(1, thermo.he().name()); + fieldNames_.resize(1, thermo.he().name()); - applied_.setSize(1, false); + fv::option::resetApplied(); } diff --git a/src/fvOptions/constraints/derived/velocityDampingConstraint/velocityDampingConstraint.C b/src/fvOptions/constraints/derived/velocityDampingConstraint/velocityDampingConstraint.C index a9eeea31b3592f78a7dbd9508958534d7ce56ed7..9e96727a5280c4a4714ecc292e3eca1f303af086 100644 --- a/src/fvOptions/constraints/derived/velocityDampingConstraint/velocityDampingConstraint.C +++ b/src/fvOptions/constraints/derived/velocityDampingConstraint/velocityDampingConstraint.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2015 OpenFOAM Foundation - Copyright (C) 2015 OpenCFD Ltd. + Copyright (C) 2015-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -132,7 +132,7 @@ bool Foam::fv::velocityDampingConstraint::read(const dictionary& dict) fieldNames_.first() = coeffs_.getOrDefault<word>("U", "U"); } - applied_.setSize(fieldNames_.size(), false); + fv::option::resetApplied(); return true; } diff --git a/src/fvOptions/constraints/general/fixedValueConstraint/FixedValueConstraint.C b/src/fvOptions/constraints/general/fixedValueConstraint/FixedValueConstraint.C index 34ac46c490f8edf07580d9712fdcd00c560e879a..30681d5891d976afcffc2382e0c03d82f2ea50e7 100644 --- a/src/fvOptions/constraints/general/fixedValueConstraint/FixedValueConstraint.C +++ b/src/fvOptions/constraints/general/fixedValueConstraint/FixedValueConstraint.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2016 OpenFOAM Foundation - Copyright (C) 2020 OpenCFD Ltd. + Copyright (C) 2020-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -59,9 +59,10 @@ bool Foam::fv::FixedValueConstraint<Type>::read(const dictionary& dict) label count = fieldValuesDict.size(); - fieldNames_.setSize(count); - fieldValues_.setSize(count); - applied_.setSize(count, false); + fieldNames_.resize(count); + fieldValues_.resize(count); + + fv::option::resetApplied(); count = 0; for (const entry& dEntry : fieldValuesDict) diff --git a/src/fvOptions/corrections/limitTemperature/limitTemperature.C b/src/fvOptions/corrections/limitTemperature/limitTemperature.C index 7d07a3218871fd09714d92c2d88f02113434428c..627e69cdeb0024367f1e42a06debac67a22f682e 100644 --- a/src/fvOptions/corrections/limitTemperature/limitTemperature.C +++ b/src/fvOptions/corrections/limitTemperature/limitTemperature.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2012-2017 OpenFOAM Foundation - Copyright (C) 2018-2020 OpenCFD Ltd. + Copyright (C) 2018-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -66,9 +66,9 @@ Foam::fv::limitTemperature::limitTemperature IOobject::groupName(basicThermo::dictName, phase_) ); - fieldNames_.setSize(1, thermo.he().name()); + fieldNames_.resize(1, thermo.he().name()); - applied_.setSize(1, false); + fv::option::resetApplied(); } diff --git a/src/fvOptions/corrections/limitVelocity/limitVelocity.C b/src/fvOptions/corrections/limitVelocity/limitVelocity.C index 9ac693e5ed4a0ba4e7f9de20a9e6b50d7ffda5bc..445869598432c32096063c18290a7e9687ae91af 100644 --- a/src/fvOptions/corrections/limitVelocity/limitVelocity.C +++ b/src/fvOptions/corrections/limitVelocity/limitVelocity.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2016-2017 OpenFOAM Foundation - Copyright (C) 2018-2020 OpenCFD Ltd. + Copyright (C) 2018-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -56,8 +56,8 @@ Foam::fv::limitVelocity::limitVelocity UName_(coeffs_.getOrDefault<word>("U", "U")), max_(coeffs_.get<scalar>("max")) { - fieldNames_.setSize(1, UName_); - applied_.setSize(1, false); + fieldNames_.resize(1, UName_); + fv::option::resetApplied(); } diff --git a/src/fvOptions/sources/derived/acousticDampingSource/acousticDampingSource.C b/src/fvOptions/sources/derived/acousticDampingSource/acousticDampingSource.C index 428e6026940c9ab6afef638dbbe8f76ce60be069..d9bfb7e95df697c3ff758e39c969aba1263953fc 100644 --- a/src/fvOptions/sources/derived/acousticDampingSource/acousticDampingSource.C +++ b/src/fvOptions/sources/derived/acousticDampingSource/acousticDampingSource.C @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2016-2020 OpenCFD Ltd. + Copyright (C) 2016-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -182,7 +182,7 @@ bool Foam::fv::acousticDampingSource::read(const dictionary& dict) fieldNames_.first() = coeffs_.getOrDefault<word>("U", "U"); } - applied_.setSize(fieldNames_.size(), false); + fv::option::resetApplied(); coeffs_.readEntry("frequency", frequency_.value()); coeffs_.readEntry("URef", URefName_); diff --git a/src/fvOptions/sources/derived/actuationDiskSource/actuationDiskSource.C b/src/fvOptions/sources/derived/actuationDiskSource/actuationDiskSource.C index aee210098fd412e28a64e4cfee421651199cad39..4c4995e801f43e42623fcaa8127e2d0e7aab6a93 100644 --- a/src/fvOptions/sources/derived/actuationDiskSource/actuationDiskSource.C +++ b/src/fvOptions/sources/derived/actuationDiskSource/actuationDiskSource.C @@ -7,7 +7,7 @@ ------------------------------------------------------------------------------- Copyright (C) 2011-2016 OpenFOAM Foundation Copyright (C) 2020 ENERCON GmbH - Copyright (C) 2018-2020 OpenCFD Ltd + Copyright (C) 2018-2021 OpenCFD Ltd ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -219,9 +219,9 @@ Foam::fv::actuationDiskSource::actuationDiskSource { setMonitorCells(coeffs_); - fieldNames_.setSize(1, "U"); + fieldNames_.resize(1, "U"); - applied_.setSize(fieldNames_.size(), false); + fv::option::resetApplied(); Info<< " - creating actuation disk zone: " << this->name() << endl; diff --git a/src/fvOptions/sources/derived/buoyancyEnergy/buoyancyEnergy.C b/src/fvOptions/sources/derived/buoyancyEnergy/buoyancyEnergy.C index ee3e5d13128cd581f411c710ec085dc6aebfb0d0..92d0cb41d51d3e5ef0b403a2650d661a553d6c68 100644 --- a/src/fvOptions/sources/derived/buoyancyEnergy/buoyancyEnergy.C +++ b/src/fvOptions/sources/derived/buoyancyEnergy/buoyancyEnergy.C @@ -64,7 +64,7 @@ Foam::fv::buoyancyEnergy::buoyancyEnergy << "settings are:" << fieldNames_ << exit(FatalError); } - applied_.setSize(fieldNames_.size(), false); + fv::option::resetApplied(); } diff --git a/src/fvOptions/sources/derived/buoyancyForce/buoyancyForce.C b/src/fvOptions/sources/derived/buoyancyForce/buoyancyForce.C index 72fa97cfd4da1db22554962bd42468b0994836aa..1debb34aaed92ef073d9c14fead388b6d916ca3f 100644 --- a/src/fvOptions/sources/derived/buoyancyForce/buoyancyForce.C +++ b/src/fvOptions/sources/derived/buoyancyForce/buoyancyForce.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2015-2017 OpenFOAM Foundation - Copyright (C) 2018-2020 OpenCFD Ltd. + Copyright (C) 2018-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -64,7 +64,7 @@ Foam::fv::buoyancyForce::buoyancyForce << "settings are:" << fieldNames_ << exit(FatalError); } - applied_.setSize(fieldNames_.size(), false); + fv::option::resetApplied(); } diff --git a/src/fvOptions/sources/derived/buoyancyTurbSource/buoyancyTurbSource.C b/src/fvOptions/sources/derived/buoyancyTurbSource/buoyancyTurbSource.C index a262664637040c7a298be31480eee0eb8ec3858b..b2b8be4bab405b0f21332159e14193430fb95fb3 100644 --- a/src/fvOptions/sources/derived/buoyancyTurbSource/buoyancyTurbSource.C +++ b/src/fvOptions/sources/derived/buoyancyTurbSource/buoyancyTurbSource.C @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2020 OpenCFD Ltd. + Copyright (C) 2020-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -178,7 +178,7 @@ Foam::fv::buoyancyTurbSource::buoyancyTurbSource << exit(FatalError); } - fieldNames_.setSize(2, "undefined"); + fieldNames_.resize(2); tmp<volScalarField> tepsilon = turbPtr->epsilon(); tmp<volScalarField> tomega = turbPtr->omega(); @@ -202,7 +202,8 @@ Foam::fv::buoyancyTurbSource::buoyancyTurbSource } fieldNames_[1] = turbPtr->k()().name(); - applied_.setSize(fieldNames_.size(), false); + + fv::option::resetApplied(); Log << " Applying buoyancyTurbSource to: " << fieldNames_[0] << " and " << fieldNames_[1] diff --git a/src/fvOptions/sources/derived/directionalPressureGradientExplicitSource/directionalPressureGradientExplicitSource.C b/src/fvOptions/sources/derived/directionalPressureGradientExplicitSource/directionalPressureGradientExplicitSource.C index ef9866c4340ccec5dc0244ddb8e03068ef18cb50..6f1d97e559e8089e83dfcfbceb6c1e0d39032a28 100644 --- a/src/fvOptions/sources/derived/directionalPressureGradientExplicitSource/directionalPressureGradientExplicitSource.C +++ b/src/fvOptions/sources/derived/directionalPressureGradientExplicitSource/directionalPressureGradientExplicitSource.C @@ -223,7 +223,7 @@ directionalPressureGradientExplicitSource << exit(FatalError); } - applied_.setSize(fieldNames_.size(), false); + fv::option::resetApplied(); // Read the initial pressure gradient from file if it exists IFstream propsFile diff --git a/src/fvOptions/sources/derived/effectivenessHeatExchangerSource/effectivenessHeatExchangerSource.C b/src/fvOptions/sources/derived/effectivenessHeatExchangerSource/effectivenessHeatExchangerSource.C index 807a3bc67cda6daeb84af616bc263a578c18d0de..e2d9b56fd4dbdb1e2913c0c91cd7df8bf5da2f1c 100644 --- a/src/fvOptions/sources/derived/effectivenessHeatExchangerSource/effectivenessHeatExchangerSource.C +++ b/src/fvOptions/sources/derived/effectivenessHeatExchangerSource/effectivenessHeatExchangerSource.C @@ -160,9 +160,9 @@ Foam::fv::effectivenessHeatExchangerSource::effectivenessHeatExchangerSource const auto& thermo = mesh_.lookupObject<basicThermo>(basicThermo::dictName); - fieldNames_.setSize(1, thermo.he().name()); + fieldNames_.resize(1, thermo.he().name()); - applied_.setSize(1, false); + fv::option::resetApplied(); eTable_.reset(new interpolation2DTable<scalar>(coeffs_)); diff --git a/src/fvOptions/sources/derived/explicitPorositySource/explicitPorositySource.C b/src/fvOptions/sources/derived/explicitPorositySource/explicitPorositySource.C index b5ee9b738abc02f46e0f50cd02e0d972bdc9dd61..d52cd09b5f9335d503ebe044cb63d7717d5455e0 100644 --- a/src/fvOptions/sources/derived/explicitPorositySource/explicitPorositySource.C +++ b/src/fvOptions/sources/derived/explicitPorositySource/explicitPorositySource.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2012-2018 OpenFOAM Foundation - Copyright (C) 2020 OpenCFD Ltd. + Copyright (C) 2020-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -123,7 +123,7 @@ bool Foam::fv::explicitPorositySource::read(const dictionary& dict) fieldNames_.first() = coeffs_.getOrDefault<word>("U", "U"); } - applied_.setSize(fieldNames_.size(), false); + fv::option::resetApplied(); return true; } diff --git a/src/fvOptions/sources/derived/jouleHeatingSource/jouleHeatingSource.C b/src/fvOptions/sources/derived/jouleHeatingSource/jouleHeatingSource.C index ff661db956b9a6e5bab3f392b9c181dffc998067..5b59cfbfc80d648b9ad1c53e01a64332f5054c1a 100644 --- a/src/fvOptions/sources/derived/jouleHeatingSource/jouleHeatingSource.C +++ b/src/fvOptions/sources/derived/jouleHeatingSource/jouleHeatingSource.C @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2016-2020 OpenCFD Ltd. + Copyright (C) 2016-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -134,9 +134,9 @@ Foam::fv::jouleHeatingSource::jouleHeatingSource const auto& thermo = mesh_.lookupObject<basicThermo>(basicThermo::dictName); - fieldNames_.setSize(1, thermo.he().name()); + fieldNames_.resize(1, thermo.he().name()); - applied_.setSize(fieldNames_.size(), false); + fv::option::resetApplied(); read(dict); } diff --git a/src/fvOptions/sources/derived/meanVelocityForce/meanVelocityForce.C b/src/fvOptions/sources/derived/meanVelocityForce/meanVelocityForce.C index 00c9a8f1e12ac45b658edd96057574ba13442526..f10e8d8d9780251e802179e29384f18bf7884e90 100644 --- a/src/fvOptions/sources/derived/meanVelocityForce/meanVelocityForce.C +++ b/src/fvOptions/sources/derived/meanVelocityForce/meanVelocityForce.C @@ -98,7 +98,7 @@ Foam::fv::meanVelocityForce::meanVelocityForce << "settings are:" << fieldNames_ << exit(FatalError); } - applied_.setSize(fieldNames_.size(), false); + fv::option::resetApplied(); // Read the initial pressure gradient from file if it exists IFstream propsFile diff --git a/src/fvOptions/sources/derived/multiphaseStabilizedTurbulence/multiphaseStabilizedTurbulence.C b/src/fvOptions/sources/derived/multiphaseStabilizedTurbulence/multiphaseStabilizedTurbulence.C index 96a399d2be084a7bf96e7b20e185ff55432979f3..b88e7161630a9d3679781fd5c70abb7295087284 100644 --- a/src/fvOptions/sources/derived/multiphaseStabilizedTurbulence/multiphaseStabilizedTurbulence.C +++ b/src/fvOptions/sources/derived/multiphaseStabilizedTurbulence/multiphaseStabilizedTurbulence.C @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2019-2020 OpenCFD Ltd. + Copyright (C) 2019-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -96,7 +96,7 @@ Foam::fv::multiphaseStabilizedTurbulence::multiphaseStabilizedTurbulence ) ) { - fieldNames_.setSize(2, "undefined"); + fieldNames_.resize(2); // Note: incompressible only const auto* turbPtr = @@ -123,7 +123,7 @@ Foam::fv::multiphaseStabilizedTurbulence::multiphaseStabilizedTurbulence << exit(FatalError); } - applied_.setSize(fieldNames_.size(), false); + fv::option::resetApplied(); } diff --git a/src/fvOptions/sources/derived/phaseLimitStabilization/PhaseLimitStabilization.C b/src/fvOptions/sources/derived/phaseLimitStabilization/PhaseLimitStabilization.C index 69df18ba5ea244fed8f85241a514f207b7afd625..7d90715a32ecab858dd8bc864047818a018795f2 100644 --- a/src/fvOptions/sources/derived/phaseLimitStabilization/PhaseLimitStabilization.C +++ b/src/fvOptions/sources/derived/phaseLimitStabilization/PhaseLimitStabilization.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2017 OpenFOAM Foundation - Copyright (C) 2020 OpenCFD Ltd. + Copyright (C) 2020-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -47,8 +47,8 @@ Foam::fv::PhaseLimitStabilization<Type>::PhaseLimitStabilization rateName_(coeffs_.get<word>("rate")), residualAlpha_(coeffs_.get<scalar>("residualAlpha")) { - fieldNames_.setSize(1, fieldName_); - applied_.setSize(1, false); + fieldNames_.resize(1, fieldName_); + fv::option::resetApplied(); } diff --git a/src/fvOptions/sources/derived/rotorDiskSource/rotorDiskSource.C b/src/fvOptions/sources/derived/rotorDiskSource/rotorDiskSource.C index 509b5e16953abe998e1cc8a7f635a54337161115..2094eb71700581a0436cecdb10eb4a5086a38951 100644 --- a/src/fvOptions/sources/derived/rotorDiskSource/rotorDiskSource.C +++ b/src/fvOptions/sources/derived/rotorDiskSource/rotorDiskSource.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2016 OpenFOAM Foundation - Copyright (C) 2018-2020 OpenCFD Ltd. + Copyright (C) 2018-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -548,7 +548,7 @@ bool Foam::fv::rotorDiskSource::read(const dictionary& dict) if (cellSetOption::read(dict)) { coeffs_.readEntry("fields", fieldNames_); - applied_.setSize(fieldNames_.size(), false); + fv::option::resetApplied(); // Read coordinate system/geometry invariant properties omega_ = rpmToRads(coeffs_.get<scalar>("rpm")); diff --git a/src/fvOptions/sources/derived/solidificationMeltingSource/solidificationMeltingSource.C b/src/fvOptions/sources/derived/solidificationMeltingSource/solidificationMeltingSource.C index e2d464b8c5754b6c22f986debce6f9e9c55051eb..ca9deb582714b12fc9a6a0b6680bbac693977e1f 100644 --- a/src/fvOptions/sources/derived/solidificationMeltingSource/solidificationMeltingSource.C +++ b/src/fvOptions/sources/derived/solidificationMeltingSource/solidificationMeltingSource.C @@ -192,7 +192,7 @@ Foam::fv::solidificationMeltingSource::solidificationMeltingSource curTimeIndex_(-1), deltaT_(cells_.size(), 0) { - fieldNames_.setSize(2); + fieldNames_.resize(2); fieldNames_[0] = UName_; switch (mode_) @@ -218,7 +218,7 @@ Foam::fv::solidificationMeltingSource::solidificationMeltingSource } } - applied_.setSize(fieldNames_.size(), false); + fv::option::resetApplied(); } diff --git a/src/fvOptions/sources/derived/tabulatedAccelerationSource/tabulatedAccelerationSource.C b/src/fvOptions/sources/derived/tabulatedAccelerationSource/tabulatedAccelerationSource.C index 7daf9d27a6164454cc5c7aacf17b49924ada0506..eafb5d8dc7e480fb978d109b8ae6e1a29082c923 100644 --- a/src/fvOptions/sources/derived/tabulatedAccelerationSource/tabulatedAccelerationSource.C +++ b/src/fvOptions/sources/derived/tabulatedAccelerationSource/tabulatedAccelerationSource.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2015-2016 OpenFOAM Foundation - Copyright (C) 2020 OpenCFD Ltd. + Copyright (C) 2020-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -59,8 +59,8 @@ Foam::fv::tabulatedAccelerationSource::tabulatedAccelerationSource UName_(coeffs_.getOrDefault<word>("U", "U")), g0_("g0", dimAcceleration, Zero) { - fieldNames_.setSize(1, UName_); - applied_.setSize(1, false); + fieldNames_.resize(1, UName_); + fv::option::resetApplied(); if (mesh.time().foundObject<uniformDimensionedVectorField>("g")) { diff --git a/src/fvOptions/sources/derived/viscousDissipation/viscousDissipation.C b/src/fvOptions/sources/derived/viscousDissipation/viscousDissipation.C index c3c4b71a794fd42ce3eb91b7e10c2104ded1d434..79673faffa84f073e87b208bcbb907fa037d1a6e 100644 --- a/src/fvOptions/sources/derived/viscousDissipation/viscousDissipation.C +++ b/src/fvOptions/sources/derived/viscousDissipation/viscousDissipation.C @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2017-2020 OpenCFD Ltd. + Copyright (C) 2017-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -106,7 +106,7 @@ Foam::fv::viscousDissipation::viscousDissipation if (thermoPtr) { - fieldNames_.setSize(1, thermoPtr->he().name()); + fieldNames_.resize(1, thermoPtr->he().name()); } if (fieldNames_.empty()) @@ -120,7 +120,7 @@ Foam::fv::viscousDissipation::viscousDissipation << "settings are:" << fieldNames_ << exit(FatalError); } - applied_.setSize(fieldNames_.size(), false); + fv::option::resetApplied(); } diff --git a/src/fvOptions/sources/general/codedSource/CodedSource.C b/src/fvOptions/sources/general/codedSource/CodedFvSource.C similarity index 76% rename from src/fvOptions/sources/general/codedSource/CodedSource.C rename to src/fvOptions/sources/general/codedSource/CodedFvSource.C index 07bb792d99b93a21196ead5d9369bdabf3cd1457..969cb7937424b043b56f03c1940cd3e028c8629f 100644 --- a/src/fvOptions/sources/general/codedSource/CodedSource.C +++ b/src/fvOptions/sources/general/codedSource/CodedFvSource.C @@ -26,7 +26,7 @@ License \*---------------------------------------------------------------------------*/ -#include "CodedSource.H" +#include "CodedFvSource.H" #include "fvMesh.H" #include "fvMatrices.H" #include "dynamicCode.H" @@ -52,7 +52,7 @@ Foam::string Foam::fv::CodedSource<Type>::description() const template<class Type> void Foam::fv::CodedSource<Type>::clearRedirect() const { - redirectFvOptionPtr_.reset(nullptr); + redirectOptionPtr_.reset(nullptr); } @@ -124,7 +124,7 @@ Foam::fv::CodedSource<Type>::CodedSource const fvMesh& mesh ) : - cellSetOption(name, modelType, dict, mesh) + fv::cellSetOption(name, modelType, dict, mesh) { read(dict); } @@ -133,22 +133,62 @@ Foam::fv::CodedSource<Type>::CodedSource // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template<class Type> -Foam::fv::option& Foam::fv::CodedSource<Type>::redirectFvOption() const +bool Foam::fv::CodedSource<Type>::read(const dictionary& dict) { - if (!redirectFvOptionPtr_) + codedBase::setCodeContext(coeffs_); + + if (!fv::cellSetOption::read(dict)) + { + return false; + } + + coeffs_.readEntry("fields", fieldNames_); + + fv::option::resetApplied(); + + dict.readCompat<word>("name", {{"redirectType", 1706}}, name_); + + + // Code context chunks + + auto& ctx = codedBase::codeContext(); + + ctx.readEntry("codeCorrect", codeCorrect_); + ctx.readEntry("codeAddSup", codeAddSup_); + + // ctx.readEntry("codeConstrain", codeConstrain_); + ctx.readEntry // Compatibility + ( + coeffs_.lookupEntryCompat + ( + "codeConstrain", + {{ "codeSetValue", 1812 }}, + keyType::LITERAL + ).keyword(), + codeConstrain_ + ); + + return true; +} + + +template<class Type> +Foam::fv::option& Foam::fv::CodedSource<Type>::redirectOption() const +{ + if (!redirectOptionPtr_) { dictionary constructDict(dict_); constructDict.set("type", name_); constructDict.changeKeyword(modelType_ & "Coeffs", name_ & "Coeffs"); - redirectFvOptionPtr_ = fv::option::New + redirectOptionPtr_ = fv::option::New ( name_, constructDict, mesh_ ); } - return *redirectFvOptionPtr_; + return *redirectOptionPtr_; } @@ -159,11 +199,11 @@ void Foam::fv::CodedSource<Type>::correct ) { DebugInfo - << "CodedSource<" << pTraits<Type>::typeName + << "fv::CodedSource<" << pTraits<Type>::typeName << ">::correct for source " << name_ << endl; updateLibrary(name_); - redirectFvOption().correct(field); + redirectOption().correct(field); } @@ -175,11 +215,11 @@ void Foam::fv::CodedSource<Type>::addSup ) { DebugInfo - << "CodedSource<" << pTraits<Type>::typeName + << "fv::CodedSource<" << pTraits<Type>::typeName << ">::addSup for source " << name_ << endl; updateLibrary(name_); - redirectFvOption().addSup(eqn, fieldi); + redirectOption().addSup(eqn, fieldi); } @@ -192,11 +232,11 @@ void Foam::fv::CodedSource<Type>::addSup ) { DebugInfo - << "CodedSource<" << pTraits<Type>::typeName + << "fv::CodedSource<" << pTraits<Type>::typeName << ">::addSup for source " << name_ << endl; updateLibrary(name_); - redirectFvOption().addSup(rho, eqn, fieldi); + redirectOption().addSup(rho, eqn, fieldi); } @@ -208,11 +248,11 @@ void Foam::fv::CodedSource<Type>::constrain ) { DebugInfo - << "CodedSource<" << pTraits<Type>::typeName + << "fv::CodedSource<" << pTraits<Type>::typeName << ">::constrain for source " << name_ << endl; updateLibrary(name_); - redirectFvOption().constrain(eqn, fieldi); + redirectOption().constrain(eqn, fieldi); } diff --git a/src/fvOptions/sources/general/codedSource/CodedSource.H b/src/fvOptions/sources/general/codedSource/CodedFvSource.H similarity index 91% rename from src/fvOptions/sources/general/codedSource/CodedSource.H rename to src/fvOptions/sources/general/codedSource/CodedFvSource.H index 0da0e711c7c3a3728697f40282aaa34c87676d06..2f1606df9614db77d37d3e77a33e41361570a963 100644 --- a/src/fvOptions/sources/general/codedSource/CodedSource.H +++ b/src/fvOptions/sources/general/codedSource/CodedFvSource.H @@ -58,6 +58,14 @@ Description field is the name of the field in the fields list eqn is the fvMatrix + These are in addition to the usual code entries: + \plaintable + codeInclude | include files + codeOptions | compiler line: added to EXE_INC (Make/options) + codeLibs | linker line: added to LIB_LIBS (Make/options) + localCode | c++; local static functions + \endplaintable + Usage Example usage in controlDict: \verbatim @@ -89,7 +97,7 @@ Usage heSource -= 0.1*sqr(time.value())*V; #}; - codeContrain + codeConstrain #{ Pout<< "**codeConstrain**" << endl; #}; @@ -97,14 +105,13 @@ Usage } \endverbatim - SourceFiles codedSource.C \*---------------------------------------------------------------------------*/ -#ifndef CodedSource_H -#define CodedSource_H +#ifndef fv_CodedFvSource_H +#define fv_CodedFvSource_H #include "cellSetOption.H" #include "codedBase.H" @@ -137,7 +144,7 @@ protected: string codeConstrain_; //- Underlying code - mutable autoPtr<fv::option> redirectFvOptionPtr_; + mutable autoPtr<fv::option> redirectOptionPtr_; // Protected Member Functions @@ -190,7 +197,7 @@ public: // Member Functions //- Dynamically compiled fvOption - option& redirectFvOption() const; + fv::option& redirectOption() const; // Evaluation @@ -239,8 +246,7 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #ifdef NoRepository - #include "CodedSource.C" - #include "CodedSourceIO.C" + #include "CodedFvSource.C" #endif // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/fvOptions/sources/general/codedSource/CodedSourceIO.C b/src/fvOptions/sources/general/codedSource/CodedSourceIO.C deleted file mode 100644 index 02a1232f437bc0fd32eb4736d1a4b6a15bb1fe22..0000000000000000000000000000000000000000 --- a/src/fvOptions/sources/general/codedSource/CodedSourceIO.C +++ /dev/null @@ -1,72 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | www.openfoam.com - \\/ M anipulation | -------------------------------------------------------------------------------- - Copyright (C) 2012-2016 OpenFOAM Foundation - 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/>. - -\*---------------------------------------------------------------------------*/ - -#include "CodedSource.H" - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -template<class Type> -bool Foam::fv::CodedSource<Type>::read(const dictionary& dict) -{ - codedBase::setCodeContext(coeffs_); - - if (!cellSetOption::read(dict)) - { - return false; - } - - coeffs_.readEntry("fields", fieldNames_); - applied_.resize(fieldNames_.size(), false); - - dict.readCompat<word>("name", {{"redirectType", 1706}}, name_); - - - // Code context chunks - - auto& ctx = codedBase::codeContext(); - - ctx.readEntry("codeCorrect", codeCorrect_); - ctx.readEntry("codeAddSup", codeAddSup_); - - // ctx.readEntry("codeConstrain", codeConstrain_); - ctx.readEntry // Compatibility - ( - coeffs_.lookupEntryCompat - ( - "codeConstrain", - {{ "codeSetValue", 1812 }}, - keyType::LITERAL - ).keyword(), - codeConstrain_ - ); - - return true; -} - - -// ************************************************************************* // diff --git a/src/fvOptions/sources/general/codedSource/codedSource.C b/src/fvOptions/sources/general/codedSource/codedFvSources.C similarity index 98% rename from src/fvOptions/sources/general/codedSource/codedSource.C rename to src/fvOptions/sources/general/codedSource/codedFvSources.C index 0b0a7bc1ccb5a5ebcef5fc06c9bb1a81fb1646ca..f07d55e4b16e98b4a9ea0f5d9d76c1b8ecad8106 100644 --- a/src/fvOptions/sources/general/codedSource/codedSource.C +++ b/src/fvOptions/sources/general/codedSource/codedFvSources.C @@ -26,7 +26,7 @@ License \*---------------------------------------------------------------------------*/ #include "makeFvOption.H" -#include "CodedSource.H" +#include "CodedFvSource.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/fvOptions/sources/general/semiImplicitSource/SemiImplicitSource.C b/src/fvOptions/sources/general/semiImplicitSource/SemiImplicitSource.C index 2a3739f1731a012668805d74af7494e0ce83e9b8..f6053011394303555eb55acb904fd165e741d705 100644 --- a/src/fvOptions/sources/general/semiImplicitSource/SemiImplicitSource.C +++ b/src/fvOptions/sources/general/semiImplicitSource/SemiImplicitSource.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2016 OpenFOAM Foundation - Copyright (C) 2020 OpenCFD Ltd. + Copyright (C) 2020-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -54,10 +54,10 @@ void Foam::fv::SemiImplicitSource<Type>::setFieldData(const dictionary& dict) label count = dict.size(); fieldNames_.resize(count); - Su_.resize(count); - Sp_.resize(count); + Su_.resize(fieldNames_.size()); + Sp_.resize(fieldNames_.size()); - applied_.resize(count, false); + fv::option::resetApplied(); count = 0; for (const entry& dEntry : dict) diff --git a/src/fvOptions/sources/interRegion/interRegionExplicitPorositySource/interRegionExplicitPorositySource.C b/src/fvOptions/sources/interRegion/interRegionExplicitPorositySource/interRegionExplicitPorositySource.C index e4b815b68b3f9985acf1af34ccb5fa0992da9f4d..4e00e9b2251340d6c53ed795c07b298a87bd8395 100644 --- a/src/fvOptions/sources/interRegion/interRegionExplicitPorositySource/interRegionExplicitPorositySource.C +++ b/src/fvOptions/sources/interRegion/interRegionExplicitPorositySource/interRegionExplicitPorositySource.C @@ -126,8 +126,8 @@ Foam::fv::interRegionExplicitPorositySource::interRegionExplicitPorositySource { if (active_) { - fieldNames_.setSize(1, UName_); - applied_.setSize(1, false); + fieldNames_.resize(1, UName_); + fv::option::resetApplied(); } } diff --git a/src/fvOptions/sources/interRegion/interRegionHeatTransfer/interRegionHeatTransferModel/interRegionHeatTransferModel.C b/src/fvOptions/sources/interRegion/interRegionHeatTransfer/interRegionHeatTransferModel/interRegionHeatTransferModel.C index 5cf4aff0360dc693ac4f2397a81a21d77a9ea359..ea1d6f4d171cb0acd3c2d9218951cd25b539cbef 100644 --- a/src/fvOptions/sources/interRegion/interRegionHeatTransfer/interRegionHeatTransferModel/interRegionHeatTransferModel.C +++ b/src/fvOptions/sources/interRegion/interRegionHeatTransfer/interRegionHeatTransferModel/interRegionHeatTransferModel.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2016 OpenFOAM Foundation - Copyright (C) 2020 OpenCFD Ltd. + Copyright (C) 2020-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -147,9 +147,8 @@ Foam::fv::interRegionHeatTransferModel::interRegionHeatTransferModel if (active()) { coeffs_.readEntry("fields", fieldNames_); - applied_.setSize(fieldNames_.size(), false); - coeffs_.readEntry("semiImplicit", semiImplicit_); + fv::option::resetApplied(); } } diff --git a/src/meshTools/PatchFunction1/CodedField/CodedField.C b/src/meshTools/PatchFunction1/CodedField/CodedField.C index 40c0c4588b219fd789b0b87df057bddc4d701fde..60ca1ecca878d2ecbd20e205bcb6dd3f9a801c6b 100644 --- a/src/meshTools/PatchFunction1/CodedField/CodedField.C +++ b/src/meshTools/PatchFunction1/CodedField/CodedField.C @@ -27,6 +27,7 @@ License #include "dynamicCode.H" #include "dynamicCodeContext.H" +#include "dictionaryContent.H" // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // @@ -53,6 +54,15 @@ void Foam::PatchFunction1Types::CodedField<Type>::clearRedirect() const } +template<class Type> +const Foam::dictionary& +Foam::PatchFunction1Types::CodedField<Type>::codeContext() const +{ + // What else would make sense? + return dict_; +} + + template<class Type> const Foam::dictionary& Foam::PatchFunction1Types::CodedField<Type>::codeDict @@ -147,6 +157,10 @@ Foam::PatchFunction1Types::CodedField<Type>::CodedField dict_(dict), name_(dict.getOrDefault<word>("name", entryName)) { + this->codedBase::setCodeContext(dict_); + + // No additional code chunks... + updateLibrary(name_); } @@ -183,15 +197,13 @@ Foam::PatchFunction1Types::CodedField<Type>::redirectFunction() const { if (!redirectFunctionPtr_) { - // Construct a PatchFunction1 containing the input code - dictionary completeDict(dict_); + dictionary constructDict; + // Force 'name_' sub-dictionary into existence + dictionary& coeffs = constructDict.subDictOrAdd(name_); - // Override the type to enforce the PatchFunction1::New constructor - // to choose our type - completeDict.set("type", name_); - - dictionary dict; - dict.add(name_, completeDict); + coeffs = dict_; // Copy input code and coefficients + coeffs.remove("name"); // Redundant + coeffs.set("type", name_); // Specify our new (redirect) type redirectFunctionPtr_.reset ( @@ -199,10 +211,25 @@ Foam::PatchFunction1Types::CodedField<Type>::redirectFunction() const ( this->patch(), name_, - dict, + constructDict, this->faceValues() ) ); + + // Forward copy of codeContext to the code template + auto* contentPtr = + dynamic_cast<dictionaryContent*>(redirectFunctionPtr_.get()); + + if (contentPtr) + { + contentPtr->dict(this->codeContext()); + } + else + { + WarningInFunction + << name_ << " Did not derive from dictionaryContent" + << nl << nl; + } } return *redirectFunctionPtr_; } diff --git a/src/meshTools/PatchFunction1/CodedField/CodedField.H b/src/meshTools/PatchFunction1/CodedField/CodedField.H index d034c5337e3740fe40c42a9f98b7431af1def821..a4dd238c8d6e30ac4d7d0357eec47e1f43f68d24 100644 --- a/src/meshTools/PatchFunction1/CodedField/CodedField.H +++ b/src/meshTools/PatchFunction1/CodedField/CodedField.H @@ -30,6 +30,15 @@ Description PatchFunction1 with the code supplied by an on-the-fly compiled C++ expression. + The code entries: + \plaintable + codeInclude | include files + codeOptions | compiler line: added to EXE_INC (Make/options) + codeLibs | linker line: added to LIB_LIBS (Make/options) + localCode | c++; local static functions + code | c++; return the patch values at (scalar x) + \endplaintable + Usage Example: \verbatim @@ -38,11 +47,8 @@ Usage type uniformFixedValue; uniformValue { - type coded; - // Explictly supply name of generated PatchFunction1. Only needed - // if entryname ('uniformValue') would clash with existing - // runtime selection tables. - name myExpression; + type coded; + name myExpression; // Name of generated PatchFunction1 code #{ @@ -50,20 +56,24 @@ Usage Pout<< "** Patch size:" << pp.size() << endl; return tmp<vectorField>::New(pp.size(), vector(1, 0, 0)) #}; - } - //codeInclude - //#{ - // #include "fvCFD.H" - //#}; + //codeInclude + //#{ + // #include "volFields.H" + //#}; - //codeOptions - //#{ - // -I$(LIB_SRC)/finiteVolume/lnInclude - //#}; + //codeOptions + //#{ + // -I$(LIB_SRC)/finiteVolume/lnInclude + //#}; + } } \endverbatim +Note + The code context dictionary is simply the dictionary used to specify + the PatchFunction1 coefficients. + See also Foam::dynamicCode Foam::codedFixedValue @@ -126,6 +136,9 @@ protected: //- Clear redirected object(s) virtual void clearRedirect() const; + //- Additional 'codeContext' dictionary to pass through + virtual const dictionary& codeContext() const; + // Get the code (sub)dictionary virtual const dictionary& codeDict(const dictionary& dict) const; diff --git a/src/thermophysicalModels/radiation/fvOptions/radiation/radiation.C b/src/thermophysicalModels/radiation/fvOptions/radiation/radiation.C index 93f8eb8bfde7b2567f9e88964a45e47a49fd7f69..e9f8993233e9baf5c86fdb4e381919c05e141105 100644 --- a/src/thermophysicalModels/radiation/fvOptions/radiation/radiation.C +++ b/src/thermophysicalModels/radiation/fvOptions/radiation/radiation.C @@ -57,9 +57,9 @@ Foam::fv::radiation::radiation { const auto& thermo = mesh_.lookupObject<basicThermo>(basicThermo::dictName); - fieldNames_.setSize(1); + fieldNames_.resize(1); fieldNames_[0] = thermo.he().name(); - applied_.setSize(fieldNames_.size(), false); + fv::option::resetApplied(); radiation_ = Foam::radiation::radiationModel::New(thermo.T()); } diff --git a/src/waveModels/fvOptions/multiphaseMangrovesSource/multiphaseMangrovesSource.C b/src/waveModels/fvOptions/multiphaseMangrovesSource/multiphaseMangrovesSource.C index c7cb5844d5f40ec1127d0cc65dc8dffda5e5b9a2..b0e7d64fe615b551129c3cbce6cad6beb37d3a75 100644 --- a/src/waveModels/fvOptions/multiphaseMangrovesSource/multiphaseMangrovesSource.C +++ b/src/waveModels/fvOptions/multiphaseMangrovesSource/multiphaseMangrovesSource.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2017 IH-Cantabria - Copyright (C) 2017-2020 OpenCFD Ltd. + Copyright (C) 2017-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -213,8 +213,7 @@ bool Foam::fv::multiphaseMangrovesSource::read(const dictionary& dict) fieldNames_.resize(1); fieldNames_.first() = coeffs_.getOrDefault<word>("U", "U"); } - - applied_.setSize(fieldNames_.size(), false); + fv::option::resetApplied(); // Create the Mangroves models - 1 per region const dictionary& regionsDict(coeffs_.subDict("regions")); diff --git a/src/waveModels/fvOptions/multiphaseMangrovesTurbulenceModel/multiphaseMangrovesTurbulenceModel.C b/src/waveModels/fvOptions/multiphaseMangrovesTurbulenceModel/multiphaseMangrovesTurbulenceModel.C index fb754cafbc59c5ad7f17e8723cf37319b572eff7..5cda1d1da8c276fd10f5a27f01e33b79dde61b01 100644 --- a/src/waveModels/fvOptions/multiphaseMangrovesTurbulenceModel/multiphaseMangrovesTurbulenceModel.C +++ b/src/waveModels/fvOptions/multiphaseMangrovesTurbulenceModel/multiphaseMangrovesTurbulenceModel.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2017 IH-Cantabria - Copyright (C) 2017-2018 OpenCFD Ltd. + Copyright (C) 2017-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -243,8 +243,7 @@ bool Foam::fv::multiphaseMangrovesTurbulenceModel::read(const dictionary& dict) fieldNames_[1] = "k"; } } - - applied_.setSize(fieldNames_.size(), false); + fv::option::resetApplied(); // Create the Mangroves models - 1 per region const dictionary& regionsDict(coeffs_.subDict("regions")); diff --git a/tutorials/compressible/overRhoPimpleDyMFoam/twoSimpleRotors/system/controlDict b/tutorials/compressible/overRhoPimpleDyMFoam/twoSimpleRotors/system/controlDict index fa36ef03622002f73d8afae3f39e132d6213034c..47912f4c9b03b2b9f48c88522c123ba1c5402228 100644 --- a/tutorials/compressible/overRhoPimpleDyMFoam/twoSimpleRotors/system/controlDict +++ b/tutorials/compressible/overRhoPimpleDyMFoam/twoSimpleRotors/system/controlDict @@ -1,7 +1,7 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: v2012 | +| \\ / O peration | Version: v2106 | | \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ @@ -59,7 +59,6 @@ maxCo 1.2; functions { - // #include "catalyst" probes { type probes; @@ -82,7 +81,6 @@ functions ( (0.015 0.005 0.005) ); - } mass @@ -114,12 +112,10 @@ functions codeWrite #{ - const volScalarField& rho = mesh().lookupObject<volScalarField>("rho"); Info<< "rho volume = " << rho.weightedAverage(mesh().Vsc()) << endl; - #}; } } diff --git a/tutorials/compressible/rhoPimpleAdiabaticFoam/rutlandVortex2D/system/preProcess b/tutorials/compressible/rhoPimpleAdiabaticFoam/rutlandVortex2D/system/preProcess index f0c0ed10cfb4b41e4f9fbaabdd960d8a09baffa9..18112454bc3450929d068aa99d7a0b533e4e51f7 100644 --- a/tutorials/compressible/rhoPimpleAdiabaticFoam/rutlandVortex2D/system/preProcess +++ b/tutorials/compressible/rhoPimpleAdiabaticFoam/rutlandVortex2D/system/preProcess @@ -1,7 +1,7 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: v2012 | +| \\ / O peration | Version: v2106 | | \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ @@ -24,19 +24,14 @@ functions libs (utilityFunctionObjects); enabled yes; - codeInclude - #{ - #include "volFields.H" - #}; - codeWrite #{ - scalar D = 0.57; - scalar UInf = 50; - scalar pInf = 101325; - scalar TInf = 224; - scalar gamma = 1.4; - scalar A = -0.3*D*UInf; + const scalar D = 0.57; + const scalar UInf = 50; + const scalar pInf = 101325; + const scalar TInf = 224; + const scalar gamma = 1.4; + const scalar A = -0.3*D*UInf; const dimensionedScalar rhoRef("rhoRef", dimDensity, 1); const auto& rho = mesh().lookupObject<volScalarField>("rho"); diff --git a/tutorials/incompressible/pimpleFoam/RAS/rotatingFanInRoom/system/controlDict b/tutorials/incompressible/pimpleFoam/RAS/rotatingFanInRoom/system/controlDict index 58b7d5222ec749778ee20df37abf08564530cfc0..a417bf71a5cc8725216c58b205df479260fe020c 100644 --- a/tutorials/incompressible/pimpleFoam/RAS/rotatingFanInRoom/system/controlDict +++ b/tutorials/incompressible/pimpleFoam/RAS/rotatingFanInRoom/system/controlDict @@ -51,4 +51,9 @@ maxCo 1; maxDeltaT 1; +functions +{ + #include "relVelocity" +} + // ************************************************************************* // diff --git a/tutorials/incompressible/pimpleFoam/RAS/rotatingFanInRoom/system/relVelocity b/tutorials/incompressible/pimpleFoam/RAS/rotatingFanInRoom/system/relVelocity new file mode 100644 index 0000000000000000000000000000000000000000..5d0eb1e1e6c3f3eab58870a566db321f57ac378a --- /dev/null +++ b/tutorials/incompressible/pimpleFoam/RAS/rotatingFanInRoom/system/relVelocity @@ -0,0 +1,118 @@ +// --------------------------------*- C++ -*-------------------------------- // +// +// File +// OpenFOAM coded function object +// +// Description +// Write relative rotational speed +// +// ------------------------------------------------------------------------- // + +relVelocity +{ + type coded; + name relVelocity; + libs ( utilityFunctionObjects ); + + coeffs + { + // User input (duplicate of constant/dynamicMeshDict) + // origin (-3 2 2.6); + // axis (0 0 1); + // omega 10; + // zones ( rotatingZone ); + + #sinclude "<constant>/dynamicMeshDict" + } + + // Additional context for code execute/write + codeContext + { + verbose true; + } + + codeData + #{ + vector origin; + vector omega; + wordRes zoneNames; + #}; + + codeRead + #{ + const dictionary& coeffs = dict.optionalSubDict("coeffs"); + const dictionary& context = this->codeContext(); + + origin = coeffs.get<vector>("origin"); + + omega = + ( + // speed + ( + coeffs.found("rpm") + ? degToRad(coeffs.get<scalar>("rpm") / 60.0) + : coeffs.get<scalar>("omega") + ) + // axis + * normalised(coeffs.getOrDefault<vector>("axis", vector(0,0,1))) + ); + + if (!coeffs.readIfPresent("zones", zoneNames)) + { + if (coeffs.found("cellZone")) + { + zoneNames.resize(1); + coeffs.readEntry("cellZone", zoneNames[0]); + } + } + + if (context.getOrDefault<bool>("verbose", false)) + { + Log<< "Relative velocity at origin " << origin << "\n"; + } + #}; + + codeExecute // codeWrite + #{ + const dictionary& context = this->codeContext(); + + if (context.getOrDefault<bool>("verbose", false)) + { + Log<< "Calculate relative velocity\n"; + } + + const auto& cc = mesh().C(); + const auto& U = mesh().lookupObject<volVectorField>("U"); + + auto trelVel = volVectorField::New + ( + "relVelocity", + mesh(), + dimensionedVector(dimVelocity, Zero), + "zeroGradient" + ); + auto& relVel = trelVel.ref(); + auto& relVelField = relVel.primitiveFieldRef(); + + if (zoneNames.empty()) + { + for (label celli = 0; celli < mesh().nCells(); ++celli) + { + relVelField[celli] = U[celli] - (omega ^ (cc[celli] - origin)); + } + } + else + { + for (const label celli : mesh().cellZones().selection(zoneNames)) + { + relVelField[celli] = U[celli] - (omega ^ (cc[celli] - origin)); + } + } + + relVel.correctBoundaryConditions(); + relVel.write(); + #}; +} + + +// ************************************************************************* // diff --git a/tutorials/multiphase/MPPICInterFoam/twoPhasePachuka/0.orig/U b/tutorials/multiphase/MPPICInterFoam/twoPhasePachuka/0.orig/U index 3b184908a796cd3382d4e25601ae0d9173b24c63..d6bb5b1805683d7fe21e77a4777fe1b0b828e787 100644 --- a/tutorials/multiphase/MPPICInterFoam/twoPhasePachuka/0.orig/U +++ b/tutorials/multiphase/MPPICInterFoam/twoPhasePachuka/0.orig/U @@ -1,14 +1,14 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: v2012 | +| \\ / O peration | Version: v2106 | | \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; - format binary; + format ascii; class volVectorField; object U; } @@ -25,13 +25,82 @@ boundaryField type uniformFixedValue; value $internalField; - uniformValue table - ( - (0 (0 0 0.1)) - (1 (0 0 0.1)) - (4 (0 0 0.3)) - (14 (0 0 0.5)) - ); + uniformValue + { + type coded; + name examplePatchFunction1; + + // Example code to combine/adapt Function1 to PatchFunction1 + + // User inputs + + /// verbose true; + + timeFunction + { + type table; + + values + ( + (0 0.1) + (1 0.1) + (4 0.3) + (14 0.5) + ); + } + + // ... or a function of time + directionFunction (0 0 1); + + // Code implementation. + code + #{ + // Persistent (Member) Data + static autoPtr<Function1<scalar>> baseVel; + static autoPtr<Function1<vector>> baseDir; + + // Base settings + const dictionary& dict = this->dictionaryContent::dict(); + + const polyPatch& pp = this->patch(); + + vector velDir(0, 0, 1); + + if (!baseVel) + { + baseVel = Function1<scalar>::New("timeFunction", dict); + } + + const bool verbose = dict.getOrDefault<bool>("verbose", false); + + if (!baseDir && dict.found("directionFunction")) + { + // ie, NewIfPresent + baseDir = Function1<vector>::New("directionFunction", dict); + + InfoErr + << "Function1 for direction" << nl; + } + + if (baseDir) + { + velDir = normalised(baseDir->value(x)); + } + + if (verbose) + { + InfoErr + << "vel: " << baseVel->value(x) + << " dir:" << velDir << nl; + } + + return tmp<vectorField>::New + ( + pp.size(), + baseVel->value(x) * velDir + ); + #}; + } } outlet diff --git a/tutorials/multiphase/icoReactingMultiPhaseInterFoam/poolEvaporation/0.orig/T b/tutorials/multiphase/icoReactingMultiPhaseInterFoam/poolEvaporation/0.orig/T index 9ba5c45f94f61cc5184d81e100e8bc1067f375e3..acce5d6b0ed7caac125242ed53cbff7f001cba10 100644 --- a/tutorials/multiphase/icoReactingMultiPhaseInterFoam/poolEvaporation/0.orig/T +++ b/tutorials/multiphase/icoReactingMultiPhaseInterFoam/poolEvaporation/0.orig/T @@ -1,7 +1,7 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: v2012 | +| \\ / O peration | Version: v2106 | | \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ @@ -29,11 +29,6 @@ boundaryField { type coded; - codeInclude - #{ - #include "volFields.H" - #}; - code #{ const auto& T =