/*---------------------------------------------------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2017 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 . Class Foam::codedFixedValueFvPatchField Group grpGenericBoundaryConditions Description Constructs on-the-fly a new boundary condition (derived from fixedValueFvPatchField) which is then used to evaluate. The \c value entry (optional) is used for the initial values. Otherwise the code is executed. 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 { type codedFixedValue; value uniform 0; name rampedFixedValue; // name of generated BC codeContext { ... } code #{ operator==(min(10, 0.1*this->db().time().value())); #}; //codeInclude //#{ // #include "fvCFD.H" //#}; //codeOptions //#{ // -I$(LIB_SRC)/finiteVolume/lnInclude //#}; } \endverbatim A special form is if the 'code' section is not supplied. In this case the code is read from a (runTimeModifiable!) dictionary system/codeDict which would have a corresponding entry: \verbatim { code #{ operator==(min(10, 0.1*this->db().time().value())); #}; } \endverbatim Note The code context dictionary can be supplied separately as the \c codeContext entry. See also Foam::dynamicCode Foam::functionEntries::codeStream SourceFiles codedFixedValueFvPatchField.C \*---------------------------------------------------------------------------*/ #ifndef Foam_codedFixedValueFvPatchField_H #define Foam_codedFixedValueFvPatchField_H #include "fixedValueFvPatchFields.H" #include "codedBase.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { /*---------------------------------------------------------------------------*\ Class codedFixedValueFvPatchField Declaration \*---------------------------------------------------------------------------*/ template class codedFixedValueFvPatchField : public fixedValueFvPatchField, protected codedBase { //- The parent boundary condition type typedef fixedValueFvPatchField parent_bctype; // Private Data //- Dictionary contents for the boundary condition dictionary dict_; const word name_; mutable autoPtr> redirectPatchFieldPtr_; // Private Member Functions //- Mutable access to the loaded dynamic libraries virtual dlLibraryTable& libs() const; //- Description (type + name) for the output virtual string description() const; //- 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; //- Adapt the context for the current object virtual void prepare(dynamicCode&, const dynamicCodeContext&) const; public: // Static data members //- Name of the C code template to be used static constexpr const char* const codeTemplateC = "fixedValueFvPatchFieldTemplate.C"; //- Name of the H code template to be used static constexpr const char* const codeTemplateH = "fixedValueFvPatchFieldTemplate.H"; //- Runtime type information TypeName("codedFixedValue"); // Constructors //- Construct from patch and internal field codedFixedValueFvPatchField ( const fvPatch&, const DimensionedField& ); //- Construct from patch, internal field and dictionary codedFixedValueFvPatchField ( const fvPatch&, const DimensionedField&, const dictionary& ); //- Construct by mapping given codedFixedValueFvPatchField // onto a new patch codedFixedValueFvPatchField ( const codedFixedValueFvPatchField&, const fvPatch&, const DimensionedField&, const fvPatchFieldMapper& ); //- Construct as copy codedFixedValueFvPatchField ( const codedFixedValueFvPatchField& ); //- Construct as copy setting internal field reference codedFixedValueFvPatchField ( const codedFixedValueFvPatchField&, const DimensionedField& ); //- Return a clone virtual tmp> clone() const { return fvPatchField::Clone(*this); } //- Clone with an internal field reference virtual tmp> clone ( const DimensionedField& iF ) const { return fvPatchField::Clone(*this, iF); } // Member functions //- Get reference to the underlying patch const fvPatchField& redirectPatchField() const; //- Update the coefficients associated with the patch field virtual void updateCoeffs(); //- Evaluate the patch field, sets updated() to false virtual void evaluate ( const Pstream::commsTypes commsType=Pstream::commsTypes::buffered ); //- Write virtual void write(Ostream&) const; }; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #ifdef NoRepository #include "codedFixedValueFvPatchField.C" #endif // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #endif // ************************************************************************* //