diff --git a/bin/tools/foamConfigurePaths b/bin/tools/foamConfigurePaths index a85cff83f8..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,47 +35,93 @@ usage() { cat<&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 } +# Check if argument matches the expected input. Respects case. +# Uses sed for consistency with the replacement routines. +# +# _matches [... ] +# +_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() @@ -96,7 +142,7 @@ _inlineSed() return 1 } - echo "Okay: $msg in $file" + echo " $msg ($file)" return 0 } @@ -122,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 @@ -139,6 +182,9 @@ do -h | -help | --help) usage ;; + '') + # Discard empty arguments + ;; -foamInstall | --foamInstall) # Replace FOAM_INST_DIR=... @@ -148,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=.*' \ @@ -167,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" @@ -184,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) @@ -212,7 +266,7 @@ do shift ;; - -third[Pp]arty) + -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" @@ -220,7 +274,6 @@ do shift ;; - -boost) # Replace boost_version=... [ "$#" -ge 2 ] || die "'$1' option requires an argument" @@ -229,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" @@ -245,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" @@ -261,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" @@ -285,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" @@ -309,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" @@ -325,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" @@ -333,6 +421,56 @@ 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 + ;; + + 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'" ;; @@ -340,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 #------------------------------------------------------------------------------ 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` 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())