From a18c15a4cfdf7fbb90f992d65f6080ba023330fb Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Mon, 27 Jan 2025 10:25:15 +0100 Subject: [PATCH] ENH: add VectorSpace component fill() method - as per std::array and FixedList STYLE: rename Scalar.[CH] -> scalarImpl.[CH] (these are internal files) - added inclusion guards to protect against bad use --- applications/test/vectorTools/Test-vectorTools.C | 9 +++++++-- src/OpenFOAM/compat/Scalar.C | 1 + src/OpenFOAM/compat/Scalar.H | 1 + .../primitives/Scalar/doubleScalar/doubleScalar.C | 8 +++++--- .../primitives/Scalar/doubleScalar/doubleScalar.H | 6 +++++- src/OpenFOAM/primitives/Scalar/floatScalar/floatScalar.C | 7 +++++-- src/OpenFOAM/primitives/Scalar/floatScalar/floatScalar.H | 6 +++++- .../primitives/Scalar/{Scalar.C => scalarImpl.C} | 5 +++++ .../primitives/Scalar/{Scalar.H => scalarImpl.H} | 8 +++++++- src/OpenFOAM/primitives/VectorSpace/VectorSpace.H | 5 ++++- src/OpenFOAM/primitives/VectorSpace/VectorSpaceI.H | 9 ++++++++- 11 files changed, 53 insertions(+), 12 deletions(-) create mode 100644 src/OpenFOAM/compat/Scalar.C create mode 100644 src/OpenFOAM/compat/Scalar.H rename src/OpenFOAM/primitives/Scalar/{Scalar.C => scalarImpl.C} (97%) rename src/OpenFOAM/primitives/Scalar/{Scalar.H => scalarImpl.H} (98%) diff --git a/applications/test/vectorTools/Test-vectorTools.C b/applications/test/vectorTools/Test-vectorTools.C index 85d18ed989..24f17b5660 100644 --- a/applications/test/vectorTools/Test-vectorTools.C +++ b/applications/test/vectorTools/Test-vectorTools.C @@ -31,8 +31,9 @@ void test(const vector& a, const vector& b, const scalar tolerance) int main() { - vector a(1.0, 1.0, 1.0); - vector b(2.0, 2.0, 2.0); + vector a(vector::uniform(1)); + vector b; + b.fill(2); test(a, b, 0.0); test(a, b, VSMALL); @@ -67,5 +68,9 @@ int main() test(a, b, 1e-3); test(a, b, 1e-1); + Info<< "\nEnd\n" << nl; + return 0; } + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/OpenFOAM/compat/Scalar.C b/src/OpenFOAM/compat/Scalar.C new file mode 100644 index 0000000000..7cec1b4541 --- /dev/null +++ b/src/OpenFOAM/compat/Scalar.C @@ -0,0 +1 @@ +#warning File removed - left for old dependency check only diff --git a/src/OpenFOAM/compat/Scalar.H b/src/OpenFOAM/compat/Scalar.H new file mode 100644 index 0000000000..7cec1b4541 --- /dev/null +++ b/src/OpenFOAM/compat/Scalar.H @@ -0,0 +1 @@ +#warning File removed - left for old dependency check only diff --git a/src/OpenFOAM/primitives/Scalar/doubleScalar/doubleScalar.C b/src/OpenFOAM/primitives/Scalar/doubleScalar/doubleScalar.C index a50db2bad3..9ce62af909 100644 --- a/src/OpenFOAM/primitives/Scalar/doubleScalar/doubleScalar.C +++ b/src/OpenFOAM/primitives/Scalar/doubleScalar/doubleScalar.C @@ -31,12 +31,12 @@ License #include "parsing.H" #include "IOstreams.H" -#include +#include // For string -> floating point conversions #include // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -// Scalar.C is used for template-like substitution +// scalarImpl.C is used for template-like substitution (but using macros) #define Scalar doubleScalar #define ScalarVGREAT doubleScalarVGREAT @@ -47,7 +47,9 @@ License // Convert using larger representation to properly capture underflow #define ScalarConvert ::strtold -#include "Scalar.C" +#define Foam_use_scalarImpl_code +#include "scalarImpl.C" +#undef Foam_use_scalarImpl_code #undef Scalar #undef ScalarVGREAT diff --git a/src/OpenFOAM/primitives/Scalar/doubleScalar/doubleScalar.H b/src/OpenFOAM/primitives/Scalar/doubleScalar/doubleScalar.H index fba14df589..1ecae4dbac 100644 --- a/src/OpenFOAM/primitives/Scalar/doubleScalar/doubleScalar.H +++ b/src/OpenFOAM/primitives/Scalar/doubleScalar/doubleScalar.H @@ -144,7 +144,11 @@ inline Scalar func(const Scalar s) \ // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -#include "Scalar.H" +// scalarImpl.H is used for template-like substitution (but using macros) + +#define Foam_use_scalarImpl_header +#include "scalarImpl.H" +#undef Foam_use_scalarImpl_header #undef Scalar #undef ScalarVGREAT diff --git a/src/OpenFOAM/primitives/Scalar/floatScalar/floatScalar.C b/src/OpenFOAM/primitives/Scalar/floatScalar/floatScalar.C index 8f36aee0da..4bf5d83478 100644 --- a/src/OpenFOAM/primitives/Scalar/floatScalar/floatScalar.C +++ b/src/OpenFOAM/primitives/Scalar/floatScalar/floatScalar.C @@ -31,11 +31,12 @@ License #include "parsing.H" #include "IOstreams.H" +#include // For string -> floating point conversions #include // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -// Scalar.C is used for template-like substitution +// scalarImpl.C is used for template-like substitution (but using macros) #define Scalar floatScalar #define ScalarVGREAT floatScalarVGREAT @@ -46,7 +47,9 @@ License // Convert using larger representation to properly capture underflow #define ScalarConvert ::strtod -#include "Scalar.C" +#define Foam_use_scalarImpl_code +#include "scalarImpl.C" +#undef Foam_use_scalarImpl_code #undef Scalar #undef ScalarVGREAT diff --git a/src/OpenFOAM/primitives/Scalar/floatScalar/floatScalar.H b/src/OpenFOAM/primitives/Scalar/floatScalar/floatScalar.H index 8d041a0111..d8024a2315 100644 --- a/src/OpenFOAM/primitives/Scalar/floatScalar/floatScalar.H +++ b/src/OpenFOAM/primitives/Scalar/floatScalar/floatScalar.H @@ -157,7 +157,11 @@ inline Scalar func(const Scalar s) \ // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -#include "Scalar.H" +// scalarImpl.H is used for template-like substitution (but using macros) + +#define Foam_use_scalarImpl_header +#include "scalarImpl.H" +#undef Foam_use_scalarImpl_header #undef Scalar #undef ScalarVGREAT diff --git a/src/OpenFOAM/primitives/Scalar/Scalar.C b/src/OpenFOAM/primitives/Scalar/scalarImpl.C similarity index 97% rename from src/OpenFOAM/primitives/Scalar/Scalar.C rename to src/OpenFOAM/primitives/Scalar/scalarImpl.C index bba2f8fd12..37ebc9e840 100644 --- a/src/OpenFOAM/primitives/Scalar/Scalar.C +++ b/src/OpenFOAM/primitives/Scalar/scalarImpl.C @@ -26,6 +26,11 @@ License \*---------------------------------------------------------------------------*/ +// Could also check if 'Scalar' is defined... +#ifndef Foam_use_scalarImpl_code +#error "scalarImpl.C" is only to be included internally +#endif + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam diff --git a/src/OpenFOAM/primitives/Scalar/Scalar.H b/src/OpenFOAM/primitives/Scalar/scalarImpl.H similarity index 98% rename from src/OpenFOAM/primitives/Scalar/Scalar.H rename to src/OpenFOAM/primitives/Scalar/scalarImpl.H index fbd89c4308..2517aa0aef 100644 --- a/src/OpenFOAM/primitives/Scalar/Scalar.H +++ b/src/OpenFOAM/primitives/Scalar/scalarImpl.H @@ -51,10 +51,16 @@ Note \endcode SourceFiles - Scalar.C + scalarImpl.C \*---------------------------------------------------------------------------*/ +// Could also check if 'Scalar' is defined... +#ifndef Foam_use_scalarImpl_header +#error "scalarImpl.H" is only to be included internally +#endif + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam diff --git a/src/OpenFOAM/primitives/VectorSpace/VectorSpace.H b/src/OpenFOAM/primitives/VectorSpace/VectorSpace.H index 814769e795..048f49bb40 100644 --- a/src/OpenFOAM/primitives/VectorSpace/VectorSpace.H +++ b/src/OpenFOAM/primitives/VectorSpace/VectorSpace.H @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2016 OpenFOAM Foundation - Copyright (C) 2019-2021 OpenCFD Ltd. + Copyright (C) 2019-2025 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -191,6 +191,9 @@ public: //- Return pointer to the first data element inline Cmpt* data() noexcept; + //- Assign all components to given value + inline void fill(const Cmpt& s); + //- Return a VectorSpace with all elements = s inline static Form uniform(const Cmpt& s); diff --git a/src/OpenFOAM/primitives/VectorSpace/VectorSpaceI.H b/src/OpenFOAM/primitives/VectorSpace/VectorSpaceI.H index 812b369986..7f8bbd46dc 100644 --- a/src/OpenFOAM/primitives/VectorSpace/VectorSpaceI.H +++ b/src/OpenFOAM/primitives/VectorSpace/VectorSpaceI.H @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2016 OpenFOAM Foundation - Copyright (C) 2019-2022 OpenCFD Ltd. + Copyright (C) 2019-2025 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -160,6 +160,13 @@ inline void Foam::VectorSpace::replace } +template +inline void Foam::VectorSpace::fill(const Cmpt& s) +{ + VectorSpaceOps::eqOpS(*this, s, eqOp()); +} + + template inline Form Foam::VectorSpace::uniform(const Cmpt& s) {