diff --git a/src/functionObjects/field/components/components.C b/src/functionObjects/field/components/components.C index 0ceb92d74306e317a7d6059d7c8c6852dbba372c..408a28fe4206f3f4ea0f190f80f3a34247026b0d 100644 --- a/src/functionObjects/field/components/components.C +++ b/src/functionObjects/field/components/components.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2016 OpenFOAM Foundation - Copyright (C) 2019 OpenCFD Ltd. + Copyright (C) 2019-2022 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -41,18 +41,23 @@ namespace functionObjects } +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// Implementation +#include "componentsImpl.C" + + // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // bool Foam::functionObjects::components::calc() { - bool processed = false; - - processed = processed || calcComponents<vector>(); - processed = processed || calcComponents<sphericalTensor>(); - processed = processed || calcComponents<symmTensor>(); - processed = processed || calcComponents<tensor>(); - - return processed; + return + ( + calcComponents<vector>() + || calcComponents<sphericalTensor>() + || calcComponents<symmTensor>() + || calcComponents<tensor>() + ); } diff --git a/src/functionObjects/field/components/components.H b/src/functionObjects/field/components/components.H index a594cdb99aa91061a024ebc492637e1baf1aa62d..0d6281a2eee3ca4b9893edb4eb61de7e30fa390d 100644 --- a/src/functionObjects/field/components/components.H +++ b/src/functionObjects/field/components/components.H @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2016 OpenFOAM Foundation - Copyright (C) 2019-2020 OpenCFD Ltd. + Copyright (C) 2019-2022 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -103,8 +103,8 @@ SourceFiles \*---------------------------------------------------------------------------*/ -#ifndef functionObjects_components_H -#define functionObjects_components_H +#ifndef Foam_functionObjects_components_H +#define Foam_functionObjects_components_H #include "fieldExpression.H" @@ -134,14 +134,15 @@ class components //- Calculate the components of the field with the specified type //- and register the result template<class GeoFieldType> - bool calcFieldComponents(); + bool calcComponents(const GeoFieldType& field); //- Calculate the components of the field with the specified //- element type and register the result template<class Type> bool calcComponents(); - //- Calculate the components of the field and return true if successful + //- Calculate the components of the field + // \return True if successful virtual bool calc(); @@ -189,12 +190,6 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -#ifdef NoRepository - #include "componentsTemplates.C" -#endif - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - #endif // ************************************************************************* // diff --git a/src/functionObjects/field/components/componentsTemplates.C b/src/functionObjects/field/components/componentsImpl.C similarity index 72% rename from src/functionObjects/field/components/componentsTemplates.C rename to src/functionObjects/field/components/componentsImpl.C index 64f152e6f4af3d1b3a2951e72d2814efba3b646e..5821580a29c39f149fa5c5efb14297fe2e3d1ce4 100644 --- a/src/functionObjects/field/components/componentsTemplates.C +++ b/src/functionObjects/field/components/componentsImpl.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2016 OpenFOAM Foundation - Copyright (C) 2019-2020 OpenCFD Ltd. + Copyright (C) 2019-2022 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -32,19 +32,20 @@ License // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template<class GeoFieldType> -bool Foam::functionObjects::components::calcFieldComponents() +bool Foam::functionObjects::components::calcComponents +( + const GeoFieldType& field +) { typedef typename GeoFieldType::value_type Type; - const GeoFieldType& field = lookupObject<GeoFieldType>(fieldName_); - - resultNames_.setSize(Type::nComponents); + resultNames_.resize(pTraits<Type>::nComponents); bool stored = true; - for (direction i = 0; i < Type::nComponents; ++i) + for (direction i = 0; i < pTraits<Type>::nComponents; ++i) { - resultName_ = fieldName_ + word(Type::componentNames[i]); + resultName_ = fieldName_ + word(pTraits<Type>::componentNames[i]); resultNames_[i] = resultName_; stored = stored && store(resultName_, field.component(i)); @@ -57,16 +58,16 @@ bool Foam::functionObjects::components::calcFieldComponents() template<class Type> bool Foam::functionObjects::components::calcComponents() { - typedef GeometricField<Type, fvPatchField, volMesh> VolFieldType; - typedef GeometricField<Type, fvsPatchField, surfaceMesh> SurfaceFieldType; - - if (foundObject<VolFieldType>(fieldName_, false)) + const auto* vfield = cfindObject<VolumeField<Type>>(fieldName_); + if (vfield) { - return calcFieldComponents<VolFieldType>(); + return calcComponents(*vfield); } - else if (foundObject<SurfaceFieldType>(fieldName_, false)) + + const auto* sfield = cfindObject<SurfaceField<Type>>(fieldName_); + if (sfield) { - return calcFieldComponents<SurfaceFieldType>(); + return calcComponents(*sfield); } return false; diff --git a/src/surfMesh/writers/raw/rawSurfaceWriter.C b/src/surfMesh/writers/raw/rawSurfaceWriter.C index 787d733afe8a04928027c815af117ec67d255d44..e06a9547d8bb26049ff7d2313e067421784010fd 100644 --- a/src/surfMesh/writers/raw/rawSurfaceWriter.C +++ b/src/surfMesh/writers/raw/rawSurfaceWriter.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2016 OpenFOAM Foundation - Copyright (C) 2015-2021 OpenCFD Ltd. + Copyright (C) 2015-2022 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -158,7 +158,7 @@ Foam::fileName Foam::surfaceWriters::rawWriter::write() // Header { os << "# geometry NO_DATA " << faces.size() << nl; - writeHeaderXYZ(os); + os << "# x y z"; if (withFaceNormal) { writeHeaderArea(os); diff --git a/src/surfMesh/writers/raw/rawSurfaceWriterImpl.C b/src/surfMesh/writers/raw/rawSurfaceWriterImpl.C index 928f421231bad60a3d67f39e3f5b1d75b68b12a4..ae1247796d1e93b271520ed2769a2a68641bb331 100644 --- a/src/surfMesh/writers/raw/rawSurfaceWriterImpl.C +++ b/src/surfMesh/writers/raw/rawSurfaceWriterImpl.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2014 OpenFOAM Foundation - Copyright (C) 2015-2021 OpenCFD Ltd. + Copyright (C) 2015-2022 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -44,62 +44,38 @@ namespace Foam template<class Type> static inline void writeData(Ostream& os, const Type& val) { - for (direction i=0; i < pTraits<Type>::nComponents; ++i) + for (direction d = 0; d < pTraits<Type>::nComponents; ++d) { - os << ' ' << component(val, i); + os << ' ' << component(val, d); } } - // Write x/y/z header. Must be called first - static inline void writeHeaderXYZ(Ostream& os) - { - os << "# x y z"; - } - // Write area header static inline void writeHeaderArea(Ostream& os) { os << " area_x area_y area_z"; } + // Write field name, use named components for VectorSpace template<class Type> static inline void writeHeader(Ostream& os, const word& fieldName) - { - os << " " << fieldName; - } - - template<class Type> - void writeHeaderComponents(Ostream& os, const word& fieldName) { os << ' '; - for (direction i=0; i < pTraits<Type>::nComponents; ++i) - { - os << ' ' << fieldName << '_' << Type::componentNames[i]; - } - } - - template<> - void writeHeader<vector>(Ostream& os, const word& fieldName) - { - writeHeaderComponents<vector>(os, fieldName); - } - template<> - void writeHeader<sphericalTensor>(Ostream& os, const word& fieldName) - { - writeHeaderComponents<sphericalTensor>(os, fieldName); - } + const auto nCmpts(pTraits<Type>::nComponents); - template<> - void writeHeader<symmTensor>(Ostream& os, const word& fieldName) - { - writeHeaderComponents<symmTensor>(os, fieldName); - } - - template<> - void writeHeader<tensor>(Ostream& os, const word& fieldName) - { - writeHeaderComponents<tensor>(os, fieldName); + if (pTraits<Type>::rank || nCmpts > 1) + { + for (direction d = 0; d < nCmpts; ++d) + { + os << ' ' << fieldName + << '_' << pTraits<Type>::componentNames[d]; + } + } + else + { + os << ' ' << fieldName; + } } } // End namespace Foam @@ -184,13 +160,13 @@ Foam::fileName Foam::surfaceWriters::rawWriter::writeTemplate } os << values.size() << nl; - writeHeaderXYZ(os); + os << "# x y z"; writeHeader<Type>(os, fieldName); if (withFaceNormal) { writeHeaderArea(os); } - os << nl; + os << nl; }