diff --git a/bin/tools/foamConfigurePaths b/bin/tools/foamConfigurePaths index 6d77141d90ec11637763638f276d298f45330d73..a85cff83f8b3f68d20dd7ea2c4e7995fdcd326a9 100755 --- a/bin/tools/foamConfigurePaths +++ b/bin/tools/foamConfigurePaths @@ -4,7 +4,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. @@ -26,7 +26,7 @@ # foamConfigurePaths # # Description -# hardcode installation directory +# Adjust hardcoded installation paths and versions # #------------------------------------------------------------------------------ usage() { @@ -35,53 +35,103 @@ usage() { cat<<USAGE usage: ${0##*/} - --foamInstall dir specify installation directory (e.g. /opt) - --projectName name specify project name (e.g. openfoam220) - --projectVersion ver specify project version (e.g. 2.2.0) - --archOption arch specify architecture option (only 32 or 64 applicable) - --paraviewInstall dir specify ParaView_DIR (e.g. /opt/paraviewopenfoam3120) - --paraviewVersion ver specify ParaView_VERSION (e.g. 3.12.0) - --scotchArchPath dir specify SCOTCH_ARCH_PATH (e.g. /opt/OpenFOAM-scotch-6.0.0/) - --scotchVersion ver specify SCOTCH_VERSION (e.g. 6.0.0) + -foamInstall dir specify installation directory (e.g. /opt) + -projectName name specify project name (e.g. openfoam220) + -projectVersion ver specify project version (e.g. 2.2.0) + -archOption 32|64 specify architecture option + -label 32|64 specify label size + -system name specify 'system' compiler to be used + -thirdParty name specify 'ThirdParty' compiler to be used -* hardcode paths to installation + -boost ver specify boost_version + -boostArchPath dir specify BOOST_ARCH_PATH + -cgal ver specify cgal_version + -cgalArchPath dir specify CGAL_ARCH_PATH + -clang ver specify clang_version for ThirdParty Clang + -cmake ver specify cmake_version + -fftw ver specify fffw_version + -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/) + +* Adjust hardcoded installation paths and versions USAGE exit 1 } +# Report error and exit +die() +{ + exec 1>&2 + echo + echo "Error: see '${0##*/} -help' for usage" + while [ "$#" -ge 1 ]; do echo " $1"; shift; done + echo + exit 1 +} + # Function to do replacement on file. Checks if any replacement has been done. # _inlineSed <file> <regexp> <replacement> <msg> _inlineSed() { - file="$1" + local file="$1" + local regexp="$2" + local replacement="$3" + local msg="$4" + local cmd='/^[^#]/s@'"$regexp"'@'"$replacement"'@' [ -f "$file" ] || { echo "Missing file: $file" - exit 1 + exit 2 # Fatal } - regexp="$2" - replacement="$3" - msg="$4" + grep -q "$regexp" "$file" && sed -i -e "$cmd" "$file" || { \ + echo "Failed: $msg in $file" + return 1 + } - cmd='/^[^#]/s@'"$regexp"'@'"$replacement"'@' + echo "Okay: $msg in $file" + return 0 +} - grep -q "$regexp" "$file" && sed -i -e "$cmd" "$file" || \ - (echo "Failed: $msg in $file" && exit 1) - echo "Okay: $msg in $file" +# Standard <key> <val> type of replacements. +# replace <file> <key1> <val1> .. <keyN> <valN> +# looks for KEYWORD=.* +replace() +{ + local file="$1" + shift - return 0 + local key + local val + + while [ "$#" -ge 2 ] + do + key=$1 + val=$2 + shift 2 + + _inlineSed \ + $file \ + "$key=.*" \ + "$key=$val" \ + "Replacing $key setting by '$val'" + done } [ -f etc/bashrc ] || usage "Please run from top-level directory of installation" -unset foamInstDir projectName projectVersion archOption -unset paraviewInstall scotchArchPath +#------------------------------------------------------------------------------ +unset adjusted # Parse options while [ "$#" -gt 0 ] do @@ -89,131 +139,213 @@ do -h | -help | --help) usage ;; + -foamInstall | --foamInstall) - [ "$#" -ge 2 ] || usage "'$1' option requires an argument" - foamInstDir="$2" # Replace FOAM_INST_DIR=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + foamInstDir="$2" _inlineSed \ etc/bashrc \ '\(.*BASH_SOURCE.*\)' \ - '#\1' \ + '##\1' \ "Removing default FOAM_INST_DIR setting" _inlineSed \ etc/bashrc \ - '^export FOAM_INST_DIR=.*' \ - 'export FOAM_INST_DIR='"$foamInstDir" \ + '^ *FOAM_INST_DIR=.*' \ + 'FOAM_INST_DIR='"$foamInstDir" \ "Setting FOAM_INST_DIR to '$foamInstDir'" - shift 2 + + adjusted=true + shift ;; + -projectName | --projectName) - [ "$#" -ge 2 ] || usage "'$1' option requires an argument" + # Replace WM_PROJECT_DIR=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" projectName="$2" - # replace WM_PROJECT_DIR=... _inlineSed \ etc/bashrc \ 'WM_PROJECT_DIR=.*' \ 'WM_PROJECT_DIR=$WM_PROJECT_INST_DIR/'"$projectName" \ "Replacing WM_PROJECT_DIR setting by $projectName" - shift 2 + + adjusted=true + shift ;; - --projectVersion) - [ "$#" -ge 2 ] || usage "'$1' option requires an argument" - projectVersion="$2" - # replace WM_PROJECT_VERSION=... - echo "Replacing WM_PROJECT_VERSION setting by $projectVersion" - _inlineSed \ - etc/bashrc \ - 'WM_PROJECT_VERSION=.*' \ - 'WM_PROJECT_VERSION='"$projectVersion" \ - "Replacing WM_PROJECT_VERSION setting by $projectVersion" - shift 2 + -projectVersion | --projectVersion) + # Replace WM_PROJECT_VERSION=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + replace etc/bashrc WM_PROJECT_VERSION "$2" + adjusted=true + shift ;; + -archOption | --archOption) - [ "$#" -ge 2 ] || usage "'$1' option requires an argument" + # Replace WM_ARCH_OPTION=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" archOption="$2" - current_archOption=`grep WM_ARCH_OPTION= etc/bashrc | sed "s/export WM_ARCH_OPTION=//"` - if [ "$archOption" != "$current_archOption" ] + current="$(sed -ne '/^[^#]/s/^.* WM_ARCH_OPTION=//p' etc/bashrc)" + if [ "$archOption" = "$current" ] then - # replace WM_ARCH_OPTION=... - _inlineSed \ - etc/bashrc \ - 'WM_ARCH_OPTION=.*' \ - 'WM_ARCH_OPTION='"$archOption" \ - "Replacing WM_ARCH_OPTION setting by '$archOption'" - else echo "WM_ARCH_OPTION already set to $archOption" + else + replace etc/bashrc WM_ARCH_OPTION "$2" fi - shift 2 + adjusted=true + shift ;; + + -label) + # Replace WM_LABEL_SIZE=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + replace etc/bashrc WM_LABEL_SIZE "$2" + adjusted=true + shift + ;; + + -system) + # Replace WM_COMPILER_TYPE=... and WM_COMPILER=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + replace etc/bashrc WM_COMPILER_TYPE system WM_COMPILER "$2" + adjusted=true + shift + ;; + + -third[Pp]arty) + # 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" + adjusted=true + shift + ;; + + + -boost) + # Replace boost_version=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + replace etc/config.sh/CGAL boost_version "$2" + adjusted=true + shift + ;; + + -boostArchPath) + # Replace BOOST_ARCH_PATH=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + replace etc/config.sh/CGAL BOOST_ARCH_PATH "$2" + adjusted=true + shift + ;; + + -cgal) + # Replace cgal_version=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + replace etc/config.sh/CGAL cgal_version "$2" + adjusted=true + shift + ;; + + -cgalArchPath) + # Replace CGAL_ARCH_PATH=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + replace etc/config.sh/CGAL CGAL_ARCH_PATH "$2" + adjusted=true + shift + ;; + + -fftw) + # Replace fftw_version=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + replace etc/config.sh/FFTW fftw_version "$2" + adjusted=true + shift + ;; + + -fftwArchPath) + # Replace FFTW_ARCH_PATH=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + replace etc/config.sh/FFTW FFTW_ARCH_PATH "$2" + adjusted=true + shift + ;; + + -clang) + # Replace clang_version=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + replace etc/config.sh/compiler clang_version "$2" + adjusted=true + shift + ;; + + -cmake) + # Replace cmake_version=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + replace etc/config.sh/paraview cmake_version "$2" + adjusted=true + shift + ;; + + -paraview | -paraviewVersion | --paraviewVersion) + # Replace ParaView_VERSION=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + replace etc/config.sh/paraview ParaView_VERSION "$2" + adjusted=true + shift + ;; + -paraviewInstall | --paraviewInstall) - [ "$#" -ge 2 ] || usage "'$1' option requires an argument" - paraviewInstall="$2" - # replace ParaView_DIR=... - _inlineSed \ - etc/config.sh/paraview \ - 'ParaView_DIR=.*' \ - 'ParaView_DIR='"$paraviewInstall" \ - "Replacing ParaView_DIR setting by '$paraviewInstall'" - shift 2 + # Replace ParaView_DIR=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + replace etc/config.sh/paraview ParaView_DIR "$2" + adjusted=true + shift ;; - -paraviewVersion | --paraviewVersion) - [ "$#" -ge 2 ] || usage "'$1' option requires an argument" - paraviewVersion="$2" - # replace ParaView_VERSION=... - _inlineSed \ - etc/config.sh/paraview \ - 'ParaView_VERSION=.*' \ - 'ParaView_VERSION='"$paraviewVersion" \ - "Replacing ParaView_VERSION setting by '$paraviewVersion'" - shift 2 + + -metis) + # Replace METIS_VERSION=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + replace etc/config.sh/metis METIS_VERSION "$2" + adjusted=true + shift ;; - -scotchVersion | --scotchVersion) - [ "$#" -ge 2 ] || usage "'$1' option requires an argument" - scotchVersion="$2" - _inlineSed \ - etc/config.sh/scotch \ - 'SCOTCH_VERSION=.*' \ - 'SCOTCH_VERSION='"$scotchVersion" \ - "Replacing SCOTCH_VERSION setting by '$scotchVersion'" - shift 2 + + -metisArchPath) + # Replace METIS_ARCH_PATH=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + replace etc/config.sh/metis METIS_ARCH_PATH "$2" + adjusted=true + shift + ;; + + -scotch | -scotchVersion | --scotchVersion) + # Replace SCOTCH_VERSION=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + replace etc/config.sh/scotch SCOTCH_VERSION "$2" + adjusted=true + shift ;; + -scotchArchPath | --scotchArchPath) - [ "$#" -ge 2 ] || usage "'$1' option requires an argument" - scotchArchPath="$2" - _inlineSed \ - etc/config.sh/scotch \ - 'SCOTCH_ARCH_PATH=.*' \ - 'SCOTCH_ARCH_PATH='"$scotchArchPath" \ - "Replacing SCOTCH_ARCH_PATH setting by '$scotchArchPath'" - shift 2 + # Replace SCOTCH_ARCH_PATH=... + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + replace etc/config.sh/scotch SCOTCH_ARCH_PATH "$2" + adjusted=true + shift ;; + *) - usage "unknown option/argument: '$*'" + die "unknown option/argument: '$1'" ;; esac + shift done -[ -n "$foamInstDir" -o -n "$projectName" -o -n "$projectVersion" -o -n "$archOption" \ --o -n "$paraviewInstall" -o -n "$paraviewVersion" \ --o -n "$scotchVersion" -o -n "$scotchArchPath" \ -] || usage "Please specify at least one configure option" - -#echo "Replacing WM_PROJECT setting by '$projectName'" -#sed -i -e 's@WM_PROJECT=.*@WM_PROJECT='"$projectName@" etc/bashrc +[ -n "$adjusted" ] || die "Please specify at least one configure option" # Set WM_MPLIB=SYSTEMOPENMPI always -_inlineSed \ - etc/bashrc \ - 'export WM_MPLIB=.*' \ - 'export WM_MPLIB=SYSTEMOPENMPI' \ - "Replacing WM_MPLIB setting by 'SYSTEMOPENMPI'" - -## set WM_COMPILER_TYPE=system always -#_inlineSed \ -# etc/bashrc \ -# 'WM_COMPILER_TYPE=.*' \ -# 'WM_COMPILER_TYPE=system' \ -# "Replacing WM_COMPILER_TYPE setting by 'system'" +replace etc/bashrc WM_MPLIB SYSTEMOPENMPI + +## Set WM_COMPILER_TYPE=system always +# replace etc/bashrc WM_COMPILER_TYPE system #------------------------------------------------------------------------------ diff --git a/etc/config.sh/metis b/etc/config.sh/metis index 70260f97f06ffd0b6ffc24288569863cf2ba3eff..54ecba0466f1ca42f435a30cac6953f9c2e52d9d 100644 --- a/etc/config.sh/metis +++ b/etc/config.sh/metis @@ -28,13 +28,33 @@ # Setup file for metis include/libraries. # Sourced during wmake process only. # +# Normally used to specify the metis version and location for a +# ThirdParty installation. +# +# If using system-wide installations, use the following setting: +# +# METIS_VERSION=metis-system +# +# If the system metis is unusable (eg, too old) and you don't +# have or want a ThirdParty installation: +# +# METIS_VERSION=metis-none +# +# If using a central installation, but not located under ThirdParty: +# - specify metis-system +# - provide full paths for METIS_ARCH_PATH +# # Note # A csh version is not needed, since the values here are only sourced -# during the wmake process +# during the wmake process. +# +# Metis can also be entirely disabled, by either renaming this file or +# by creating an empty one with the same name at a user or site location. # #------------------------------------------------------------------------------ -export METIS_VERSION=metis-5.1.0 +METIS_VERSION=metis-5.1.0 + export METIS_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER$WM_PRECISION_OPTION$WM_LABEL_OPTION/$METIS_VERSION #------------------------------------------------------------------------------ diff --git a/etc/config.sh/scotch b/etc/config.sh/scotch index 7f9800965d8bbe9734700c74c5459bad503cf4a1..203f394eb930e2ed5caf77140b689c180543bae8 100644 --- a/etc/config.sh/scotch +++ b/etc/config.sh/scotch @@ -28,16 +28,33 @@ # Setup file for scotch include/libraries. # Sourced during wmake process only. # +# Normally used to specify the metis version and location for a +# ThirdParty installation. +# +# If using system-wide installations, use the following setting: +# +# SCOTCH_VERSION=scotch-system +# +# If the system scotch is unusable (eg, too old) and you don't +# have or want a ThirdParty installation: +# +# SCOTCH_VERSION=scotch-none +# +# If using a central installation, but not located under ThirdParty: +# - specify scotch-system +# - provide full path for SCOTCH_ARCH_PATH +# # Note # A csh version is not needed, since the values here are only sourced -# during the wmake process +# during the wmake process. # -# If Scotch is to be entirely disabled, either rename this file or create -# an empty one with the same name at a user or site location. +# Scotch can also be entirely disabled, by either renaming this file or +# by creating an empty one with the same name at a user or site location. # #------------------------------------------------------------------------------ -export SCOTCH_VERSION=scotch_6.0.3 +SCOTCH_VERSION=scotch_6.0.3 + export SCOTCH_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER$WM_PRECISION_OPTION$WM_LABEL_OPTION/$SCOTCH_VERSION #------------------------------------------------------------------------------ diff --git a/src/Pstream/Allwmake b/src/Pstream/Allwmake index a73b43cf0328962877b75544545502cf5683e634..d32bc5503d76e5013e50e96930b5a869903e7714 100755 --- a/src/Pstream/Allwmake +++ b/src/Pstream/Allwmake @@ -10,27 +10,26 @@ cd ${0%/*} || exit 1 # Run from this directory # use sentinel file to handle version changes wmakeMpiLib() { - set +x for libName do ( WM_OPTIONS="$WM_OPTIONS$WM_MPLIB" - whichmpi="$WM_PROJECT_DIR/platforms/$WM_OPTIONS/src/Pstream/$libName/using:$FOAM_MPI" + libDir="$WM_PROJECT_DIR/platforms/$WM_OPTIONS/src/Pstream/$libName" + whichmpi="$libDir/using:$FOAM_MPI" [ -e "$whichmpi" ] || wclean $libName echo "wmake $targetType $libName" wmake $targetType $libName + mkdir -p "$libDir" touch "$whichmpi" ) done - set -x } -set -x +echo "wmake $targetType dummy" wmake $targetType dummy case "$WM_MPLIB" in *MPI*) - set +x wmakeMpiLib mpi ;; esac diff --git a/src/parallel/decompose/Allwmake b/src/parallel/decompose/Allwmake index 9be81484758a98b4a90dcfd10a735bf4f1ee719b..cf42f4c0bee22fc4f174a8b167dadb60afc0258f 100755 --- a/src/parallel/decompose/Allwmake +++ b/src/parallel/decompose/Allwmake @@ -4,88 +4,196 @@ cd ${0%/*} || exit 1 # Run from this directory # Parse arguments for library compilation . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -unset METIS_ARCH_PATH SCOTCH_ARCH_PATH -# get METIS_VERSION, METIS_ARCH_PATH -if settings=$($WM_PROJECT_DIR/bin/foamEtcFile config.sh/metis) -then +# Extract an integer value from '#define NAME ...' +getIntDefine() +{ + local name="$1" + local file="$2" + local val=$(sed -ne \ + 's/^[ tab]*#[ tab]*define[ tab][ tab]*'"$name"'[ tab][ tab]*\([1-9][0-9]\).*/\1/p' \ + "$file") + echo "${val:-0}" +} + + +# Test for metis. +# - return 0 and export METIS_ARCH_PATH on success +hasMetis() +{ + echo + echo "Metis decomposition" + + unset METIS_ARCH_PATH METIS_VERSION + settings=$($WM_PROJECT_DIR/bin/foamEtcFile config.sh/metis) || { + echo + echo "Error: no config.sh/metis settings" + echo + return 1 + } + . $settings + if [ -z "$METIS_ARCH_PATH" -o "${METIS_ARCH_PATH##*-}" = none ] + then + echo " skipping - no metis" + echo + return 1 + fi + + # Header + local header=$METIS_ARCH_PATH/include/metis.h + if [ "${METIS_ARCH_PATH##*-}" = system ] + then + [ -f "$header" ] || header=/usr/include/metis.h + fi + [ -f "$header" ] || { + echo " skipping - no metis header" + echo + return 2 # file not found + } + + # Library + [ -r $FOAM_EXT_LIBBIN/libmetis.so ] || \ + [ -r $METIS_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH/libmetis.so ] || \ + [ "${METIS_ARCH_PATH##*-}" = system ] || { + echo " skipping - missing library" + echo + return 2 + } + + # Ensure consistent sizes between OpenFOAM and metis header + local label=$(getIntDefine IDXTYPEWIDTH $header) + local scalar=$(getIntDefine REALTYPEWIDTH $header) + + [ "$WM_LABEL_SIZE" = "$label" ] || { + echo " skipping - label=$WM_LABEL_SIZE, metis.h has '$label'" + echo + return 1 + } + + [ "$WM_PRECISION_OPTION" = SP -a "$scalar" = 32 ] || \ + [ "$WM_PRECISION_OPTION" = DP -a "$scalar" = 64 ] || { + echo " skipping - scalar='$WM_PRECISION_OPTION', metis.h has '$scalar'" + echo + return 1 + } + echo "using METIS_ARCH_PATH=$METIS_ARCH_PATH" -else + echo " label=$label, scalar=$scalar" echo - echo "Error: no config.sh/metis settings" + export METIS_ARCH_PATH + return 0 # success +} + + +# Test for scotch. +# - return 0 and export SCOTCH_ARCH_PATH, SCOTCH_VERSION on success +hasScotch() +{ echo -fi + echo "Scotch decomposition" + + unset SCOTCH_ARCH_PATH SCOTCH_VERSION + settings=$($WM_PROJECT_DIR/bin/foamEtcFile config.sh/scotch) || { + echo + echo "Error: no config.sh/scotch settings" + echo + return 1 + } -# get SCOTCH_VERSION, SCOTCH_ARCH_PATH -if settings=$($WM_PROJECT_DIR/bin/foamEtcFile config.sh/scotch) -then . $settings + if [ -z "$SCOTCH_ARCH_PATH" -o "${SCOTCH_ARCH_PATH##*-}" = none ] + then + echo " skipping - no scotch" + echo + return 1 + fi + + # Header + local header=$SCOTCH_ARCH_PATH/include/scotch.h + if [ "${SCOTCH_ARCH_PATH##*-}" = system ] + then + [ -f "$header" ] || header=/usr/include/scotch.h + fi + [ -f "$header" ] || { + echo " skipping - no scotch header" + echo + return 2 # file not found + } + + # Library + [ -r $FOAM_EXT_LIBBIN/libscotch.so ] || \ + [ -r $SCOTCH_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH/libscotch.so ] || \ + [ "${SCOTCH_ARCH_PATH##*-}" = system ] || { + echo " skipping - missing library" + echo + return 2 + } + + # Ensure consistent sizes between OpenFOAM and scotch header + # extract 'typedef int64_t SCOTCH_Num' or equivalent + local label=$(sed -ne \ + 's/^.*typedef *\([^ ]*\) *SCOTCH_Num.*/\1/ip' \ + "$header") + + : ${label:=unknown} + [ "$WM_LABEL_SIZE" = 32 -a \( "$label" = int32_t -o "$label" = int \) ] || \ + [ "$WM_LABEL_SIZE" = 64 -a \( "$label" = int64_t -o "$label" = long \) ] || { + echo " skipping - label='$WM_LABEL_SIZE', scotch.h has '$label'" + echo + return 1 + } + echo "using SCOTCH_ARCH_PATH=$SCOTCH_ARCH_PATH" -else + echo " label=$label ($WM_LABEL_SIZE)" echo - echo "Error: no config.sh/scotch settings" - echo -fi + export SCOTCH_ARCH_PATH SCOTCH_VERSION + return 0 # success +} # -# define how to create an mpi-versioned library of $targetType +# Define how to create an mpi-versioned library of $targetType # compile into qualified directory -# use sentinel file to handle version changes +# use sentinel file(s) to handle version changes # wmakeMpiLib() { - set +x + local decompName="$1" + shift for libName do ( WM_OPTIONS="$WM_OPTIONS$WM_MPLIB" libDir="$WM_PROJECT_DIR/platforms/$WM_OPTIONS/src/parallel/decompose/$libName" whichmpi="$libDir/using:$FOAM_MPI" - whichscotch="$libDir/using:$SCOTCH_VERSION" - [ -e "$whichmpi" -a -e "$whichscotch" ] || wclean $libName + whichdecomp="$libDir/using:$decompName" + [ -e "$whichmpi" -a -e "$whichdecomp" ] || wclean $libName echo "wmake $targetType $libName" wmake $targetType $libName mkdir -p "$libDir" - touch "$whichmpi" "$whichscotch" + touch "$whichdecomp" "$whichmpi" ) done - set -x } -set -x - wmakeLnInclude decompositionMethods -if [ -f $SCOTCH_ARCH_PATH/include/scotch.h \ - -a -r $FOAM_EXT_LIBBIN/libscotch.so ] +if hasScotch then wmake $targetType scotchDecomp if [ -d "$FOAM_LIBBIN/$FOAM_MPI" ] then - wmakeMpiLib ptscotchDecomp + wmakeMpiLib "$SCOTCH_VERSION" ptscotchDecomp fi -else - echo - echo "Skipping scotchDecomp (ptscotchDecomp)" - echo fi - -if [ -f $METIS_ARCH_PATH/include/metis.h \ - -a -r $FOAM_EXT_LIBBIN/libmetis.so ] +if hasMetis then wmake $targetType metisDecomp -else - echo - echo "Skipping metisDecomp: metis not installed" - echo fi - wmake $targetType decompositionMethods - wmake $targetType decompose #------------------------------------------------------------------------------ diff --git a/src/parallel/decompose/metisDecomp/Make/options b/src/parallel/decompose/metisDecomp/Make/options index fdb35bf1e2708ee79d78d32fa176b3c28e864d6f..b1cce000a224b0c26b948b45f8f2ff35b76083ba 100644 --- a/src/parallel/decompose/metisDecomp/Make/options +++ b/src/parallel/decompose/metisDecomp/Make/options @@ -3,6 +3,11 @@ EXE_INC = \ -I$(METIS_ARCH_PATH)/include \ -I../decompositionMethods/lnInclude +/* + * The $(METIS_ARCH_PATH)/lib$WM_COMPILER_LIB_ARCH path is provided + * to support central, non-thirdparty installations + */ LIB_LIBS = \ + -L$(METIS_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) \ -L$(FOAM_EXT_LIBBIN) \ -lmetis diff --git a/src/parallel/decompose/ptscotchDecomp/Make/options b/src/parallel/decompose/ptscotchDecomp/Make/options index 37286e91aa0141ba5cb8ca0dd7e918e583ce3d6d..9dab60dab532e6a17060875beb81a7fe6f6316a8 100644 --- a/src/parallel/decompose/ptscotchDecomp/Make/options +++ b/src/parallel/decompose/ptscotchDecomp/Make/options @@ -11,8 +11,12 @@ EXE_INC = \ /* * The '-lscotch' is a slight hack: * ptscotch 6 requires scotch linked in, but does not declare the dependency + * + * The $(SCOTCH_ARCH_PATH)/lib$WM_COMPILER_LIB_ARCH path is provided + * to support central, non-thirdparty installations */ LIB_LIBS = \ + -L$(SCOTCH_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) \ -L$(FOAM_EXT_LIBBIN) \ -L$(FOAM_EXT_LIBBIN)/$(FOAM_MPI) \ -lptscotch \ diff --git a/src/parallel/decompose/scotchDecomp/Make/options b/src/parallel/decompose/scotchDecomp/Make/options index 4bee67053c2708e0acf1a5f9626c526d1d15bc1e..5cc3e25d8c19332e66727b17a67ee5b1d7cacca3 100644 --- a/src/parallel/decompose/scotchDecomp/Make/options +++ b/src/parallel/decompose/scotchDecomp/Make/options @@ -11,7 +11,12 @@ EXE_INC = \ -I/usr/include/scotch \ -I../decompositionMethods/lnInclude +/* + * The $(SCOTCH_ARCH_PATH)/lib$WM_COMPILER_LIB_ARCH path is provided + * to support central, non-thirdparty installations + */ LIB_LIBS = \ + -L$(SCOTCH_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) \ -L$(FOAM_EXT_LIBBIN) \ -lscotch \ -lscotcherrexit \