From 3f362fd7ec3314968440f55a6caf87f281498e16 Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Fri, 16 Dec 2016 08:17:29 +0100 Subject: [PATCH 1/3] CONFIG: add config files for VTK, MESA - sometimes used for off-screen rendering. Only add to library-path when they are actually available --- bin/tools/foamConfigurePaths | 35 ++++++++++++++---- etc/bashrc | 1 + etc/config.csh/unset | 2 + etc/config.csh/vtk | 67 +++++++++++++++++++++++++++++++++ etc/config.sh/paraview | 2 +- etc/config.sh/unset | 2 + etc/config.sh/vtk | 72 ++++++++++++++++++++++++++++++++++++ etc/cshrc | 1 + 8 files changed, 174 insertions(+), 8 deletions(-) create mode 100644 etc/config.csh/vtk create mode 100644 etc/config.sh/vtk diff --git a/bin/tools/foamConfigurePaths b/bin/tools/foamConfigurePaths index a85cff83f8..a27cb37219 100755 --- a/bin/tools/foamConfigurePaths +++ b/bin/tools/foamConfigurePaths @@ -53,13 +53,17 @@ usage: ${0##*/} -fftwArchPath dir specify FFTW_ARCH_PATH -metis ver specify METIS_VERSION -metisArchPath dir specify METIS_ARCH_PATH - -paraview ver specify ParaView_VERSION (e.g. 3.12.0) - -paraviewInstall dir specify ParaView_DIR (e.g. /opt/paraviewopenfoam3120) - -scotch ver specify SCOTCH_VERSION (e.g. 6.0.0) - -scotchArchPath dir specify SCOTCH_ARCH_PATH (e.g. /opt/OpenFOAM-scotch-6.0.0/) + -paraview ver specify ParaView_VERSION (eg, 5.0.1) + -paraviewInstall dir specify ParaView_DIR (eg, /opt/paraviewopenfoam3120) + -scotch ver specify SCOTCH_VERSION (eg, scotch_6.0.4) + -scotchArchPath dir specify SCOTCH_ARCH_PATH (eg, /opt/OpenFOAM-scotch_6.0.4) + -vtk ver specify vtk_version (eg, VTK-7.1.0) + -mesa ver specify mesa_version (eg, mesa-13.0.1) * Adjust hardcoded installation paths and versions +- unless otherwise specified, the default mpi is SYSTEMOPENMPI + USAGE exit 1 } @@ -69,9 +73,11 @@ die() { exec 1>&2 echo - echo "Error: see '${0##*/} -help' for usage" + echo "Error encountered:" while [ "$#" -ge 1 ]; do echo " $1"; shift; done echo + echo "See '${0##*/} -help' for usage" + echo exit 1 } @@ -212,7 +218,7 @@ do shift ;; - -third[Pp]arty) + -[Tt]hird[Pp]arty | -[Tt]hird) # Replace WM_COMPILER_TYPE=... and WM_COMPILER=... [ "$#" -ge 2 ] || die "'$1' option requires an argument" replace etc/bashrc WM_COMPILER_TYPE ThirdParty WM_COMPILER "$2" @@ -220,7 +226,6 @@ do shift ;; - -boost) # Replace boost_version=... [ "$#" -ge 2 ] || die "'$1' option requires an argument" @@ -333,6 +338,22 @@ do shift ;; + -vtk) + # Replace vtk_version=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + replace etc/config.sh/vtk vtk_version "$2" + adjusted=true + shift + ;; + + -mesa) + # Replace mesa_version=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + replace etc/config.sh/vtk mesa_version "$2" + adjusted=true + shift + ;; + *) die "unknown option/argument: '$1'" ;; diff --git a/etc/bashrc b/etc/bashrc index 0cdf4031ba..3f5d04e83b 100644 --- a/etc/bashrc +++ b/etc/bashrc @@ -170,6 +170,7 @@ _foamSource $WM_PROJECT_DIR/etc/config.sh/aliases # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.sh/mpi` _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.sh/paraview` +_foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.sh/vtk` _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.sh/ensight` _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.sh/gperftools` diff --git a/etc/config.csh/unset b/etc/config.csh/unset index 88bdd3454e..b423a53d98 100644 --- a/etc/config.csh/unset +++ b/etc/config.csh/unset @@ -124,6 +124,7 @@ unsetenv ParaView_INCLUDE_DIR unsetenv ParaView_MAJOR unsetenv ParaView_VERSION unsetenv PV_PLUGIN_PATH +unsetenv VTK_DIR #------------------------------------------------------------------------------ # unset other ThirdParty environment variables @@ -136,6 +137,7 @@ unsetenv FFTW_ARCH_PATH unsetenv GPERFTOOLS_ARCH_PATH unsetenv GMP_ARCH_PATH unsetenv MPFR_ARCH_PATH +unsetenv MESA_ARCH_PATH unsetenv METIS_ARCH_PATH unsetenv SCOTCH_ARCH_PATH diff --git a/etc/config.csh/vtk b/etc/config.csh/vtk new file mode 100644 index 0000000000..bd39d000ec --- /dev/null +++ b/etc/config.csh/vtk @@ -0,0 +1,67 @@ +#----------------------------------*-sh-*-------------------------------------- +# ========= | +# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox +# \\ / O peration | +# \\ / A nd | Copyright (C) 2016 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 . +# +# File +# etc/config.csh/vtk +# +# Description +# Setup file for VTK (and MESA) +# Sourced from OpenFOAM-/etc/cshrc +# +# The library path is not adjusted with the paths specified here do not exist +# +# Note +# When building OpenFOAM, any changes made here MUST be made in the +# equivalent config.sh version too, since that is the one which will +# be used during the build process. +# +#------------------------------------------------------------------------------ + +set vtk_version=VTK-7.1.0 +set mesa_version=mesa-13.0.1 + +setenv VTK_DIR $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$vtk_version +setenv MESA_ARCH_PATH $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$mesa_version + +#------------------------------------------------------------------------------ +if ($?FOAM_VERBOSE && $?prompt) then + echo "Using vtk ($vtk_version) -> $VTK_ARCH_PATH" + echo "Using mesa ($mesa_version) -> $MESA_ARCH_PATH" +endif + +# Set paths if binaries are present +if ( -r $VTK_DIR ) then + _foamAddLib $VTK_DIR/lib$WM_COMPILER_LIB_ARCH +else + unset VTK_DIR +endif + +if ( -r $MESA_ARCH_PATH ) then + _foamAddLib $MESA_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH +else + unset MESA_ARCH_PATH +endif + +unset vtk_version mesa_version + +#------------------------------------------------------------------------------ diff --git a/etc/config.sh/paraview b/etc/config.sh/paraview index a8df5e7d9c..188d505b0f 100644 --- a/etc/config.sh/paraview +++ b/etc/config.sh/paraview @@ -119,7 +119,7 @@ then export ParaView_DIR=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$pvName - # Set paths if binaries or source are present + # Set paths if binaries are present if [ -r $ParaView_DIR ] then pvLibDir=$ParaView_DIR/lib/$pvMajor diff --git a/etc/config.sh/unset b/etc/config.sh/unset index e7b834baeb..6bc4a517ab 100644 --- a/etc/config.sh/unset +++ b/etc/config.sh/unset @@ -120,6 +120,7 @@ unset ParaView_INCLUDE_DIR unset ParaView_MAJOR unset ParaView_VERSION unset PV_PLUGIN_PATH +unset VTK_DIR #------------------------------------------------------------------------------ # unset other ThirdParty environment variables @@ -132,6 +133,7 @@ unset FFTW_ARCH_PATH unset GPERFTOOLS_ARCH_PATH unset GMP_ARCH_PATH unset MPFR_ARCH_PATH +unset MESA_ARCH_PATH unset METIS_ARCH_PATH unset SCOTCH_ARCH_PATH diff --git a/etc/config.sh/vtk b/etc/config.sh/vtk new file mode 100644 index 0000000000..67ce07dfc7 --- /dev/null +++ b/etc/config.sh/vtk @@ -0,0 +1,72 @@ +#----------------------------------*-sh-*-------------------------------------- +# ========= | +# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox +# \\ / O peration | +# \\ / A nd | Copyright (C) 2016 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 . +# +# File +# etc/config.sh/vtk +# +# Description +# Setup file for VTK (and MESA) +# Sourced from OpenFOAM-/etc/bashrc +# +# The library path is not adjusted with the paths specified here do not exist +# +# Note +# When _foamAddLib is unset +# - the vtk_version, mesa_version variables are retained. +#------------------------------------------------------------------------------ + +vtk_version=VTK-7.1.0 +mesa_version=mesa-13.0.1 + +export VTK_DIR=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$vtk_version +export MESA_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$mesa_version + +#------------------------------------------------------------------------------ +if [ "$FOAM_VERBOSE" -a "$PS1" ] +then + echo "Using vtk ($vtk_version) -> $VTK_ARCH_PATH" 1>&2 + echo "Using mesa ($mesa_version) -> $MESA_ARCH_PATH" 1>&2 +fi + +if type _foamAddLib > /dev/null 2>&1 # normal sourcing +then + + # Set paths if binaries are present + if [ -r $VTK_DIR ] + then + _foamAddLib $VTK_DIR/lib$WM_COMPILER_LIB_ARCH + else + unset VTK_DIR + fi + + if [ -r $MESA_ARCH_PATH ] + then + _foamAddLib $MESA_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH + else + unset MESA_ARCH_PATH + fi + + unset vtk_version mesa_version +fi + +#------------------------------------------------------------------------------ diff --git a/etc/cshrc b/etc/cshrc index 54c74ad3f9..d5f315ee16 100644 --- a/etc/cshrc +++ b/etc/cshrc @@ -215,6 +215,7 @@ _foamSource $WM_PROJECT_DIR/etc/config.csh/aliases # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.csh/mpi` _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.csh/paraview` +_foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.csh/vtk` _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.csh/ensight` ##_foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.csh/ADIOS` From 9b1fcb0f7312a10d4b4db2e3995a50a3c90a5b7b Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Fri, 16 Dec 2016 08:17:38 +0100 Subject: [PATCH 2/3] ENH: increase coverage for foamConfigurePaths script - can adjust many more values --- bin/tools/foamConfigurePaths | 238 ++++++++++++++++++++++++++--------- 1 file changed, 178 insertions(+), 60 deletions(-) diff --git a/bin/tools/foamConfigurePaths b/bin/tools/foamConfigurePaths index a27cb37219..442eaf83e1 100755 --- a/bin/tools/foamConfigurePaths +++ b/bin/tools/foamConfigurePaths @@ -1,5 +1,5 @@ #!/bin/sh -#---------------------------------*- sh -*------------------------------------- +#------------------------------------------------------------------------------ # ========= | # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | @@ -26,7 +26,7 @@ # foamConfigurePaths # # Description -# Adjust hardcoded installation paths and versions +# Adjust hardcoded versions and installation paths (for bash, POSIX shell). # #------------------------------------------------------------------------------ usage() { @@ -35,39 +35,60 @@ usage() { cat< [... ] +# +_matches() +{ + local input="$1" + shift + local result + for regexp + do + result=$(echo "$input" | sed -n -e "/^$regexp"'$/p') + test -n "$result" && return 0 # successful match + done + return 1 +} + + # Function to do replacement on file. Checks if any replacement has been done. # _inlineSed _inlineSed() @@ -102,7 +142,7 @@ _inlineSed() return 1 } - echo "Okay: $msg in $file" + echo " $msg ($file)" return 0 } @@ -128,16 +168,13 @@ replace() $file \ "$key=.*" \ "$key=$val" \ - "Replacing $key setting by '$val'" + "Replaced $key setting by '$val'" done } - -[ -f etc/bashrc ] || usage "Please run from top-level directory of installation" - #------------------------------------------------------------------------------ -unset adjusted +unset adjusted optMpi # Parse options while [ "$#" -gt 0 ] do @@ -145,6 +182,9 @@ do -h | -help | --help) usage ;; + '') + # Discard empty arguments + ;; -foamInstall | --foamInstall) # Replace FOAM_INST_DIR=... @@ -154,7 +194,7 @@ do etc/bashrc \ '\(.*BASH_SOURCE.*\)' \ '##\1' \ - "Removing default FOAM_INST_DIR setting" + "Removed default FOAM_INST_DIR setting" _inlineSed \ etc/bashrc \ '^ *FOAM_INST_DIR=.*' \ @@ -173,13 +213,13 @@ do etc/bashrc \ 'WM_PROJECT_DIR=.*' \ 'WM_PROJECT_DIR=$WM_PROJECT_INST_DIR/'"$projectName" \ - "Replacing WM_PROJECT_DIR setting by $projectName" + "Replaced WM_PROJECT_DIR setting by $projectName" adjusted=true shift ;; - -projectVersion | --projectVersion) + -foamVersion | --projectVersion) # Replace WM_PROJECT_VERSION=... [ "$#" -ge 2 ] || die "'$1' option requires an argument" replace etc/bashrc WM_PROJECT_VERSION "$2" @@ -190,24 +230,32 @@ do -archOption | --archOption) # Replace WM_ARCH_OPTION=... [ "$#" -ge 2 ] || die "'$1' option requires an argument" - archOption="$2" - current="$(sed -ne '/^[^#]/s/^.* WM_ARCH_OPTION=//p' etc/bashrc)" - if [ "$archOption" = "$current" ] + _matches "$2" 32 64 || die "'$1' option has bad value: '$2'" + + optionValue="$2" + if [ "$optionValue" = "$(sed -ne '/^[^#]/s/^.* WM_ARCH_OPTION=//p' etc/bashrc)" ] then - echo "WM_ARCH_OPTION already set to $archOption" + echo "WM_ARCH_OPTION already set to $optionValue" + : ${adjusted:=false} else - replace etc/bashrc WM_ARCH_OPTION "$2" + replace etc/bashrc WM_ARCH_OPTION "$optionValue" + adjusted=true fi - adjusted=true shift ;; - -label) + -int32 | -int64) # Replace WM_LABEL_SIZE=... - [ "$#" -ge 2 ] || die "'$1' option requires an argument" - replace etc/bashrc WM_LABEL_SIZE "$2" + optionValue="${1#-int}" + replace etc/bashrc WM_LABEL_SIZE "$optionValue" + adjusted=true + ;; + + -SP | -DP) + # Replace WM_PRECISION_OPTION=... + optionValue="${1#-}" + replace etc/bashrc WM_PRECISION_OPTION "$optionValue" adjusted=true - shift ;; -system) @@ -218,7 +266,7 @@ do shift ;; - -[Tt]hird[Pp]arty | -[Tt]hird) + -third | -ThirdParty) # Replace WM_COMPILER_TYPE=... and WM_COMPILER=... [ "$#" -ge 2 ] || die "'$1' option requires an argument" replace etc/bashrc WM_COMPILER_TYPE ThirdParty WM_COMPILER "$2" @@ -234,7 +282,7 @@ do shift ;; - -boostArchPath) + -boost-path) # Replace BOOST_ARCH_PATH=... [ "$#" -ge 2 ] || die "'$1' option requires an argument" replace etc/config.sh/CGAL BOOST_ARCH_PATH "$2" @@ -250,7 +298,7 @@ do shift ;; - -cgalArchPath) + -cgal-path) # Replace CGAL_ARCH_PATH=... [ "$#" -ge 2 ] || die "'$1' option requires an argument" replace etc/config.sh/CGAL CGAL_ARCH_PATH "$2" @@ -266,7 +314,7 @@ do shift ;; - -fftwArchPath) + -fftw-path) # Replace FFTW_ARCH_PATH=... [ "$#" -ge 2 ] || die "'$1' option requires an argument" replace etc/config.sh/FFTW FFTW_ARCH_PATH "$2" @@ -290,15 +338,50 @@ do shift ;; + -openmpi) + # Replace FOAM_MPI=openmpi-.. and set to use third-party + # The edit is slightly fragile, but works + expected="openmpi-[1-9][.0-9]*" + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + optMpi="$2" + _matches "$optMpi" "$expected" || die "'$1' option has bad value: '$optMpi'" + + _inlineSed etc/config.sh/mpi \ + "FOAM_MPI=$expected" \ + "FOAM_MPI=$optMpi" \ + "Replaced 'FOAM_MPI=$expected' setting by 'FOAM_MPI=$optMpi'" + + replace etc/bashrc WM_MPLIB OPENMPI + adjusted=true + shift + ;; + + -openmpi-system) + # Explicitly set WM_MPLIB=SYSTEMOPENMPI + replace etc/bashrc WM_MPLIB SYSTEMOPENMPI + optMpi=system + adjusted=true + ;; + + -openmpi-third) + # Explicitly set WM_MPLIB=OPENMPI, using default setting for openmpi + replace etc/bashrc WM_MPLIB OPENMPI + optMpi=third + adjusted=true + ;; + -paraview | -paraviewVersion | --paraviewVersion) # Replace ParaView_VERSION=... + expected="[5-9][.0-9]*" [ "$#" -ge 2 ] || die "'$1' option requires an argument" + _matches "$2" "$expected" || die "'$1' option has bad value: '$2'" + replace etc/config.sh/paraview ParaView_VERSION "$2" adjusted=true shift ;; - -paraviewInstall | --paraviewInstall) + -paraview-path | -paraviewInstall | --paraviewInstall) # Replace ParaView_DIR=... [ "$#" -ge 2 ] || die "'$1' option requires an argument" replace etc/config.sh/paraview ParaView_DIR "$2" @@ -314,7 +397,7 @@ do shift ;; - -metisArchPath) + -metis-path) # Replace METIS_ARCH_PATH=... [ "$#" -ge 2 ] || die "'$1' option requires an argument" replace etc/config.sh/metis METIS_ARCH_PATH "$2" @@ -330,7 +413,7 @@ do shift ;; - -scotchArchPath | --scotchArchPath) + -scotch-path | -scotchArchPath | --scotchArchPath) # Replace SCOTCH_ARCH_PATH=... [ "$#" -ge 2 ] || die "'$1' option requires an argument" replace etc/config.sh/scotch SCOTCH_ARCH_PATH "$2" @@ -354,6 +437,40 @@ do shift ;; + gmp-[4-9]* | gmp-system) + # gcc-related package + replace etc/config.sh/compiler gmp_version "$1" + adjusted=true + ;; + + mpfr-[2-9]* | mpfr-system) + # gcc-related package + replace etc/config.sh/compiler mpfr_version "$1" + adjusted=true + ;; + + mpc-[0-9]* | mpc-system) + # gcc-related package + replace etc/config.sh/compiler mpc_version "$1" + adjusted=true + ;; + + -sigfpe) + # Enable FOAM_SIGFPE handling + _inlineSed etc/bashrc \ + "[a-z][a-z]* FOAM_SIGFPE.*" \ + "export FOAM_SIGFPE=" \ + "Activate FOAM_SIGFPE handling" + ;; + + -no-sigfpe) + # Disable FOAM_SIGFPE handling + _inlineSed etc/bashrc \ + "[a-z][a-z]* FOAM_SIGFPE.*" \ + "unset FOAM_SIGFPE" \ + "Deactivate FOAM_SIGFPE handling" + ;; + *) die "unknown option/argument: '$1'" ;; @@ -361,12 +478,13 @@ do shift done -[ -n "$adjusted" ] || die "Please specify at least one configure option" - -# Set WM_MPLIB=SYSTEMOPENMPI always -replace etc/bashrc WM_MPLIB SYSTEMOPENMPI - -## Set WM_COMPILER_TYPE=system always -# replace etc/bashrc WM_COMPILER_TYPE system +if [ "$adjusted" = false ] +then + echo "Nothing adjusted" + exit 0 +elif [ -z "$adjusted" ] +then + die "Please specify at least one configure option" +fi #------------------------------------------------------------------------------ From 7acef189cf21b09f379d93d45198a417b4def74d Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Sun, 18 Dec 2016 01:43:58 +0100 Subject: [PATCH 3/3] ENH: provide machine/OpenFOAM architecture hint in output files (issue #271) FoamFile { version 2.0; format binary; arch "LSB;label=32;scalar=64"; class vectorField; object points; } There is otherwise no simple indication in any of the files as to the sizes used (Int32 vs Int64, SP vs DP). This makes it difficult for the end-user and also for any third-party consumers. -- The architecture information contains three items in the following format: (LSB|MSB);label=(32|64);scalar=(32|64) - The endian value always appears first, without any leading space. This make it trivial to check later. Either the first 3 letters (LSB vs MSB) or even just the first letter ('L' vs 'M'). - Subsequent key=value pairs for 'label' and 'scalar' are separated by semicolons. The ordering of label vs scalar is not specified. Note that this 'arch' information is purely informational. It is currently not used by the OpenFOAM input mechanism itself. --- .../db/IOobject/IOobjectWriteHeader.C | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/OpenFOAM/db/IOobject/IOobjectWriteHeader.C b/src/OpenFOAM/db/IOobject/IOobjectWriteHeader.C index bb19caf668..82de72d3d2 100644 --- a/src/OpenFOAM/db/IOobject/IOobjectWriteHeader.C +++ b/src/OpenFOAM/db/IOobject/IOobjectWriteHeader.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -29,11 +29,30 @@ Description #include "IOobject.H" #include "objectRegistry.H" +#include "endian.H" +#include "label.H" +#include "scalar.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // bool Foam::IOobject::writeHeader(Ostream& os, const word& type) const { + static std::string archHint; + + // Hint about machine endian, OpenFOAM label and scalar sizes + if (archHint.empty()) + { + #ifdef WM_LITTLE_ENDIAN + archHint.append("LSB;"); + #elif defined (WM_BIG_ENDIAN) + archHint.append("MSB;"); + #endif + archHint.append("label="); + archHint.append(std::to_string(8*sizeof(label))); + archHint.append(";scalar="); + archHint.append(std::to_string(8*sizeof(scalar))); + } + if (!os.good()) { InfoInFunction @@ -47,6 +66,7 @@ bool Foam::IOobject::writeHeader(Ostream& os, const word& type) const << "FoamFile\n{\n" << " version " << os.version() << ";\n" << " format " << os.format() << ";\n" + << " arch " << archHint << ";\n" << " class " << type << ";\n"; if (note().size())