From d2e10bca402e0c8ca3866c3a602488ee38a87d68 Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Mon, 30 May 2022 13:27:22 +0200 Subject: [PATCH] ENH: support exprField specification for SemiImplicitSource - this allows more flexibility when defining the location or intensity of sources. For example, { type scalarSemiImplicitSource; volumeMode specific; selectionMode all; sources { tracer0 { explicit { type exprField; functions { square { type square; scale 0.0025; level 0.0025; frequency 10; } } expression #{ (hypot(pos().x() + 0.025, pos().y()) < 0.01) ? fn:square(time()) : 0 #}; } } } } ENH: SemiImplicitSource: handle "sources" with explicit/implicit entries - essentially the same as injectionRateSuSp with Su/Sp, but potentially clearer in purpose. ENH: add Function1 good() method to define if function can be evaluated - for example, provides a programmatic means of avoiding the 'none' function --- .../functions/Function1/Function1/Function1.H | 3 + .../functions/Function1/None/NoneFunction1.H | 9 +- src/faOptions/faOption/faOption.C | 19 +- src/faOptions/faOption/faOption.H | 6 +- .../cfdTools/general/fvOptions/fvOption.C | 2 +- .../cfdTools/general/fvOptions/fvOption.H | 6 +- .../solvers/scalarTransport/scalarTransport.H | 12 +- .../semiImplicitSource/SemiImplicitSource.C | 407 +++++++++++++++--- .../semiImplicitSource/SemiImplicitSource.H | 91 +++- .../PatchFunction1/PatchFunction1.H | 5 +- .../UniformValueField/UniformValueField.H | 8 +- .../RAS/mixerVessel2D/0.orig/tracer0 | 47 ++ .../RAS/mixerVessel2D/system/scalarTransport | 45 +- .../validation/WatersKing/createFields.H | 22 +- 14 files changed, 575 insertions(+), 107 deletions(-) create mode 100644 tutorials/compressible/rhoPimpleFoam/RAS/mixerVessel2D/0.orig/tracer0 diff --git a/src/OpenFOAM/primitives/functions/Function1/Function1/Function1.H b/src/OpenFOAM/primitives/functions/Function1/Function1/Function1.H index 121165fa05..33b10d3976 100644 --- a/src/OpenFOAM/primitives/functions/Function1/Function1/Function1.H +++ b/src/OpenFOAM/primitives/functions/Function1/Function1/Function1.H @@ -243,6 +243,9 @@ public: //- Is value constant (i.e. independent of x) virtual bool constant() const { return false; } + //- Can function be evaluated? + virtual bool good() const { return true; } + // Evaluation diff --git a/src/OpenFOAM/primitives/functions/Function1/None/NoneFunction1.H b/src/OpenFOAM/primitives/functions/Function1/None/NoneFunction1.H index 64ffd6e428..2faa535cfb 100644 --- a/src/OpenFOAM/primitives/functions/Function1/None/NoneFunction1.H +++ b/src/OpenFOAM/primitives/functions/Function1/None/NoneFunction1.H @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2021 OpenCFD Ltd. + Copyright (C) 2021-2022 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -34,8 +34,8 @@ Description \*---------------------------------------------------------------------------*/ -#ifndef Function1Types_None_H -#define Function1Types_None_H +#ifndef Foam_Function1Types_None_H +#define Foam_Function1Types_None_H #include "Function1.H" @@ -102,6 +102,9 @@ public: //- Value is independent of x virtual inline bool constant() const { return true; } + //- Function cannot be evaluated + virtual inline bool good() const { return false; } + //- Placeholder: generates an error if called virtual Type value(const scalar x) const; diff --git a/src/faOptions/faOption/faOption.C b/src/faOptions/faOption/faOption.C index 89632a88c0..e95fd30c44 100644 --- a/src/faOptions/faOption/faOption.C +++ b/src/faOptions/faOption/faOption.C @@ -44,7 +44,7 @@ namespace Foam void Foam::fa::option::resetApplied() { - applied_.resize(fieldNames_.size()); + applied_.resize_nocopy(fieldNames_.size()); applied_ = false; } @@ -91,7 +91,7 @@ Foam::autoPtr Foam::fa::option::New Info<< indent << "Selecting finite area options type " << modelType << endl; - const_cast(patch.boundaryMesh().mesh().time()).libs().open + patch.boundaryMesh().mesh().time().libs().open ( coeffs, "libs", @@ -102,15 +102,16 @@ Foam::autoPtr Foam::fa::option::New if (!ctorPtr) { - FatalErrorInFunction - << "Unknown faOption model type " - << modelType << nl << nl - << "Valid faOption types are:" << nl - << dictionaryConstructorTablePtr_->sortedToc() - << exit(FatalError); + FatalIOErrorInLookup + ( + coeffs, + "faOption", + modelType, + *dictionaryConstructorTablePtr_ + ) << exit(FatalIOError); } - return autoPtr