From 8752120ad55552510c48416f53531d6a1b7135dd Mon Sep 17 00:00:00 2001 From: Mark Olesen <Mark.Olesen@esi-group.com> Date: Mon, 12 Nov 2018 16:39:55 +0100 Subject: [PATCH] COMP: use hard-coded values for fieldTypes (issue #1068) - this seems to be the only reliable means of obtaining the values. Using typeName_() yields the wrong value. Using the typeName causes initialization issues (segfault when executing on some systems). --- applications/test/fieldTypes/Make/files | 3 + applications/test/fieldTypes/Make/options | 9 +++ .../test/fieldTypes/Test-fieldTypes.C | 63 +++++++++++++++++++ src/OpenFOAM/fields/Fields/fieldTypes.C | 20 +++--- .../GeometricFields/pointFields/pointFields.C | 12 ++-- src/finiteArea/fields/areaFields/areaFields.C | 12 ++-- src/finiteVolume/fields/volFields/volFields.C | 22 ++++--- 7 files changed, 109 insertions(+), 32 deletions(-) create mode 100644 applications/test/fieldTypes/Make/files create mode 100644 applications/test/fieldTypes/Make/options create mode 100644 applications/test/fieldTypes/Test-fieldTypes.C diff --git a/applications/test/fieldTypes/Make/files b/applications/test/fieldTypes/Make/files new file mode 100644 index 00000000000..03262d28e46 --- /dev/null +++ b/applications/test/fieldTypes/Make/files @@ -0,0 +1,3 @@ +Test-fieldTypes.C + +EXE = $(FOAM_USER_APPBIN)/Test-fieldTypes diff --git a/applications/test/fieldTypes/Make/options b/applications/test/fieldTypes/Make/options new file mode 100644 index 00000000000..3a7088aeeac --- /dev/null +++ b/applications/test/fieldTypes/Make/options @@ -0,0 +1,9 @@ +EXE_INC = \ + -I$(LIB_SRC)/finiteArea/lnInclude \ + -I${LIB_SRC}/finiteVolume/lnInclude \ + -I${LIB_SRC}/meshTools/lnInclude \ + +EXE_LIBS = \ + -lfiniteArea \ + -lfiniteVolume \ + -lmeshTools diff --git a/applications/test/fieldTypes/Test-fieldTypes.C b/applications/test/fieldTypes/Test-fieldTypes.C new file mode 100644 index 00000000000..f46f936c567 --- /dev/null +++ b/applications/test/fieldTypes/Test-fieldTypes.C @@ -0,0 +1,63 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2018 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +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/>. + +Application + Test-fieldTypes + +Description + Print fieldTypes + +\*---------------------------------------------------------------------------*/ + +#include "fvCFD.H" +#include "argList.H" +#include "IOobject.H" +#include "IOstreams.H" + +#include "areaFields.H" +#include "fieldTypes.H" +#include "pointFields.H" +#include "volFields.H" + +using namespace Foam; + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// Main program: + +int main(int argc, char *argv[]) +{ + argList::noParallel(); + + Info<< "basic: " << flatOutput(fieldTypes::basic) << nl + << "area: " << flatOutput(fieldTypes::area) << nl + << "volume: " << flatOutput(fieldTypes::volume) << nl + << "internal: " << flatOutput(fieldTypes::internal) << nl + << "point: " << flatOutput(fieldTypes::point) << nl + << endl; + + Info<< "\nEnd\n" << endl; + return 0; +} + + +// ************************************************************************* // diff --git a/src/OpenFOAM/fields/Fields/fieldTypes.C b/src/OpenFOAM/fields/Fields/fieldTypes.C index 9c1a8a55469..207aff1af08 100644 --- a/src/OpenFOAM/fields/Fields/fieldTypes.C +++ b/src/OpenFOAM/fields/Fields/fieldTypes.C @@ -24,23 +24,19 @@ License \*---------------------------------------------------------------------------*/ #include "fieldTypes.H" -#include "labelIOField.H" -#include "scalarIOField.H" -#include "vectorIOField.H" -#include "sphericalTensorIOField.H" -#include "symmTensorIOField.H" -#include "tensorIOField.H" // * * * * * * * * * * * * * * * * Global Data * * * * * * * * * * * * * * * // +// Note hard-coded values are more reliable than other alternatives + const Foam::wordList Foam::fieldTypes::basic ({ - Foam::labelIOField::typeName_(), - Foam::scalarIOField::typeName_(), - Foam::vectorIOField::typeName_(), - Foam::sphericalTensorIOField::typeName_(), - Foam::symmTensorIOField::typeName_(), - Foam::tensorIOField::typeName_() + "labelField", //< labelIOField + "scalarField", //< scalarIOField + "vectorField", //< vectorOField + "sphericalTensorField", //< sphericalTensorIOField + "symmTensorField", //< symmTensorIOField + "tensorField" //< tensorIOField }); diff --git a/src/OpenFOAM/fields/GeometricFields/pointFields/pointFields.C b/src/OpenFOAM/fields/GeometricFields/pointFields/pointFields.C index c115a066fc2..16e0dabef5b 100644 --- a/src/OpenFOAM/fields/GeometricFields/pointFields/pointFields.C +++ b/src/OpenFOAM/fields/GeometricFields/pointFields/pointFields.C @@ -56,13 +56,15 @@ namespace Foam // * * * * * * * * * * * * * * * * Global Data * * * * * * * * * * * * * * * // +// Note hard-coded values are more reliable than other alternatives + const Foam::wordList Foam::fieldTypes::point ({ - Foam::pointScalarField::typeName_(), - Foam::pointVectorField::typeName_(), - Foam::pointSphericalTensorField::typeName_(), - Foam::pointSymmTensorField::typeName_(), - Foam::pointTensorField::typeName_() + "pointScalarField", + "pointVectorField", + "pointSphericalTensorField", + "pointSymmTensorField", + "pointTensorField" }); diff --git a/src/finiteArea/fields/areaFields/areaFields.C b/src/finiteArea/fields/areaFields/areaFields.C index 2090d7bb461..4f4705c2d29 100644 --- a/src/finiteArea/fields/areaFields/areaFields.C +++ b/src/finiteArea/fields/areaFields/areaFields.C @@ -79,13 +79,15 @@ void GeometricField<scalar, faPatchField, areaMesh>::replace // * * * * * * * * * * * * * * * * Global Data * * * * * * * * * * * * * * * // +// Note hard-coded values are more reliable than other alternatives + const Foam::wordList Foam::fieldTypes::area ({ - Foam::areaScalarField::typeName_(), - Foam::areaVectorField::typeName_(), - Foam::areaSphericalTensorField::typeName_(), - Foam::areaSymmTensorField::typeName_(), - Foam::areaTensorField::typeName_() + "areaScalarField", + "areaVectorField", + "areaSphericalTensorField", + "areaSymmTensorField", + "areaTensorField" }); diff --git a/src/finiteVolume/fields/volFields/volFields.C b/src/finiteVolume/fields/volFields/volFields.C index 30b1de4c45c..3ee98c4de7a 100644 --- a/src/finiteVolume/fields/volFields/volFields.C +++ b/src/finiteVolume/fields/volFields/volFields.C @@ -85,23 +85,25 @@ void GeometricField<scalar, fvPatchField, volMesh>::replace // * * * * * * * * * * * * * * * * Global Data * * * * * * * * * * * * * * * // +// Note hard-coded values are more reliable than other alternatives + const Foam::wordList Foam::fieldTypes::internal ({ - Foam::volScalarField::Internal::typeName_(), - Foam::volVectorField::Internal::typeName_(), - Foam::volSphericalTensorField::Internal::typeName_(), - Foam::volSymmTensorField::Internal::typeName_(), - Foam::volTensorField::Internal::typeName_() + "volScalarField::Internal", + "volVectorField::Internal", + "volSphericalTensorField::Internal", + "volSymmTensorField::Internal", + "volTensorField::Internal" }); const Foam::wordList Foam::fieldTypes::volume ({ - Foam::volScalarField::typeName_(), - Foam::volVectorField::typeName_(), - Foam::volSphericalTensorField::typeName_(), - Foam::volSymmTensorField::typeName_(), - Foam::volTensorField::typeName_() + "volScalarField", + "volVectorField", + "volSphericalTensorField", + "volSymmTensorField", + "volTensorField" }); -- GitLab