diff --git a/.gitignore b/.gitignore index 1b8ce3cde3c2234cfe982189852129106303b871..e2c6f9b41f320800ffa96e192129bb90a8eab745 100644 --- a/.gitignore +++ b/.gitignore @@ -60,6 +60,8 @@ doc/[Dd]oxygen/man # untracked configuration files /etc/prefs.csh /etc/prefs.sh +/etc/config/*.csh +/etc/config/*.sh # source packages - anywhere *.tar.bz2 diff --git a/applications/utilities/miscellaneous/expandDictionary/expandDictionary.C b/applications/utilities/miscellaneous/expandDictionary/expandDictionary.C index b28d976832232f00b3f5685a51ca77edb9242dde..c8beecc361677e5ae805de86375a0f8e346caca1 100644 --- a/applications/utilities/miscellaneous/expandDictionary/expandDictionary.C +++ b/applications/utilities/miscellaneous/expandDictionary/expandDictionary.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -28,12 +28,33 @@ Description Read the dictionary provided as an argument, expand the macros etc. and write the resulting dictionary to standard output. +Usage + - expandDictionary inputDict [OPTION] + + \param -list \n + Report the #include/#includeIfPresent to stdout only. + +Note + The \c -list option can be useful when determining which files + are actually included by a directory. It can also be used to + determine which files may need to be copied when transferring + simulation to another environment. The following code snippet + could be a useful basis for such cases: + + \verbatim + for i in . 0 constant system + do + find $i -maxdepth 1 -type f -exec expandDictionary -list '{}' \; + done | sed -ne '/^"\//!{ s/^"//; s/"$//; p }' | sort | uniq + \endverbatim + \*---------------------------------------------------------------------------*/ #include "argList.H" #include "IFstream.H" #include "IOobject.H" #include "dictionary.H" +#include "includeEntry.H" using namespace Foam; @@ -48,6 +69,12 @@ int main(int argc, char *argv[]) "the resulting dictionary to standard output." ); + argList::addBoolOption + ( + "list", + "Report the #include/#includeIfPresent to stdout only" + ); + argList::noBanner(); argList::noParallel(); argList::validArgs.append("inputDict"); @@ -55,12 +82,22 @@ int main(int argc, char *argv[]) const string dictName = args[1]; - IOobject::writeBanner(Info) - <<"//\n// " << dictName << "\n//\n"; + const bool listOpt = args.optionFound("list"); + + if (listOpt) + { + Foam::functionEntries::includeEntry::report = true; + } - dictionary(IFstream(dictName)(), true).write(Info, false); + dictionary dict(IFstream(dictName)(), true); - IOobject::writeDivider(Info); + if (!listOpt) + { + IOobject::writeBanner(Info) + <<"//\n// " << dictName << "\n//\n"; + dict.write(Info, false); + IOobject::writeDivider(Info); + } return 0; } diff --git a/applications/utilities/surface/surfaceMeshInfo/Make/files b/applications/utilities/surface/surfaceMeshInfo/Make/files new file mode 100644 index 0000000000000000000000000000000000000000..a008b33fd2bd29a071cf5d6a9cf43bed995f29bb --- /dev/null +++ b/applications/utilities/surface/surfaceMeshInfo/Make/files @@ -0,0 +1,3 @@ +surfaceMeshInfo.C + +EXE = $(FOAM_APPBIN)/surfaceMeshInfo diff --git a/applications/utilities/surface/surfaceMeshInfo/Make/options b/applications/utilities/surface/surfaceMeshInfo/Make/options new file mode 100644 index 0000000000000000000000000000000000000000..42b30c86523f83efafbd2dbe5d52cc7487ec4101 --- /dev/null +++ b/applications/utilities/surface/surfaceMeshInfo/Make/options @@ -0,0 +1,5 @@ +EXE_INC = \ + -I$(LIB_SRC)/meshTools/lnInclude \ + -I$(LIB_SRC)/surfMesh/lnInclude + +EXE_LIBS = -lmeshTools -lsurfMesh diff --git a/applications/utilities/surface/surfaceMeshInfo/surfaceMeshInfo.C b/applications/utilities/surface/surfaceMeshInfo/surfaceMeshInfo.C new file mode 100644 index 0000000000000000000000000000000000000000..0e08e333fdbf02a43d877cbafbeffdea4c1034ba --- /dev/null +++ b/applications/utilities/surface/surfaceMeshInfo/surfaceMeshInfo.C @@ -0,0 +1,177 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2011 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 + surfaceMeshInfo + +Description + Miscellaneous information about surface meshes + +Usage + - surfaceMeshInfo surfaceFile [OPTION] + + \param -areas \n + Report area for each face. + + \param -scale \<scale\> \n + Specify a scaling factor when reading files. + + \param -xml \n + Write output in XML format. + +Note + The filename extensions are used to determine the file format type. + + The XML-like output can be useful for extraction with other tools, + but either output format can be easily extracted with a simple sed + command: + \verbatim + surfaceMeshInfo surfaceFile -areas | \ + sed -ne '/areas/,/:/{ /:/!p }' + + surfaceMeshInfo surfaceFile -areas -xml | \ + sed -ne '/<areas/,/</{ /</!p }' + \endverbatim + +\*---------------------------------------------------------------------------*/ + +#include "argList.H" +#include "timeSelector.H" +#include "Time.H" + +#include "UnsortedMeshedSurfaces.H" + +using namespace Foam; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// Main program: + +int main(int argc, char *argv[]) +{ + argList::addNote + ( + "information about surface meshes" + ); + + argList::noBanner(); + argList::noParallel(); + argList::validArgs.append("surfaceFile"); + + argList::addOption + ( + "scale", + "factor", + "geometry scaling factor - default is 1" + ); + argList::addBoolOption + ( + "areas", + "display area of each face" + ); + argList::addBoolOption + ( + "xml", + "write output in XML format" + ); + + argList args(argc, argv); + Time runTime(args.rootPath(), args.caseName()); + + const fileName importName = args[1]; + + // check that reading is supported + if (!UnsortedMeshedSurface<face>::canRead(importName, true)) + { + return 1; + } + + const bool writeXML = args.optionFound("xml"); + const bool writeAreas = args.optionFound("areas"); + + + // use UnsortedMeshedSurface, not MeshedSurface to maintain ordering + UnsortedMeshedSurface<face> surf(importName); + + scalar scaling = 0; + if (args.optionReadIfPresent("scale", scaling) && scaling > 0) + { + Info<< " -scale " << scaling << endl; + surf.scalePoints(scaling); + } + + scalar areaTotal = 0; + + if (writeXML) + { + Info<<"<?xml version='1.0' encoding='utf-8'?>" << nl + <<"<surfaceMeshInfo>" << nl + << "<npoints>" << surf.nPoints() << "</npoints>" << nl + << "<nfaces>" << surf.size() << "</nfaces>" << nl; + + if (writeAreas) + { + Info<<"<areas size='" << surf.size() << "'>" << nl; + } + } + else + { + Info<< "nPoints : " << surf.nPoints() << nl + << "nFaces : " << surf.size() << nl; + + if (writeAreas) + { + Info<< "areas : " << nl; + } + } + + forAll(surf, faceI) + { + const scalar fArea(surf[faceI].mag(surf.points())); + areaTotal += fArea; + + if (writeAreas) + { + Info<< fArea << nl; + } + } + + if (writeXML) + { + if (writeAreas) + { + Info<<"</areas>" << nl; + } + + Info<< "<area>" << areaTotal << "</area>" << nl + << "</surfaceMeshInfo>" << nl; + } + else + { + Info<< "area : " << areaTotal << nl; + } + + return 0; +} + +// ************************************************************************* // diff --git a/bin/foamEtcFile b/bin/foamEtcFile index a6859b6ae5a1a4f52e4b4084937acf8c1c0016de..8a1f5d97e627a1eed729cfb6d725f54a11f8cbf0 100755 --- a/bin/foamEtcFile +++ b/bin/foamEtcFile @@ -38,9 +38,13 @@ # && _foamSource $foamPrefs # \endcode # +# Note +# This script must exist in <foamInstall>/OpenFOAM-<VERSION>/bin/ +# or <foamInstall>/openfoam<VERSION>/bin/ (for the debian version) +# #------------------------------------------------------------------------------- usage() { - [ "$quietOpt" = true ] && exit 1 + [ "${quietOpt:-$silentOpt}" = true ] && exit 1 exec 1>&2 while [ "$#" -ge 1 ]; do echo "$1"; shift; done @@ -53,6 +57,7 @@ options: -mode <mode> any combination of u(user), g(group), o(other) -prefix <dir> specify an alternative installation prefix -quiet suppress all normal output + -silent suppress all stderr output -version <ver> specify an alternative OpenFOAM version in the form Maj.Min.Rev (eg, 1.7.0) -help print the usage @@ -72,13 +77,9 @@ USAGE exit 1 } -# -# This script must exist in <foamInstall>/OpenFOAM-<VERSION>/bin/ -# or <foamInstall>/openfoam<VERSION>/bin/ (for the debian version) -# #------------------------------------------------------------------------------- -# the bindir: +# the bin dir: binDir="${0%/*}" # the project dir: @@ -128,7 +129,7 @@ esac # default mode is 'ugo' mode=ugo -unset listOpt quietOpt +unset listOpt quietOpt silentOpt # parse options while [ "$#" -gt 0 ] @@ -162,6 +163,9 @@ do -q | -quiet) quietOpt=true ;; + -s | -silent) + silentOpt=true + ;; -v | -version) [ "$#" -ge 2 ] || usage "'$1' option requires an argument" version="$2" @@ -241,7 +245,7 @@ then # list directories, or potential file locations [ "$nArgs" -le 1 ] || usage - # a silly combination, but -quiet has precedence + # a silly combination, but -quiet does have precedence [ "$quietOpt" = true ] && exit 0 for dir diff --git a/bin/foamExec b/bin/foamExec index 26ad311349634023a0c9c17ddbfed2dc057f3f1b..fba65934cc9dbe55b91c3c810d46cadc9249f156 100755 --- a/bin/foamExec +++ b/bin/foamExec @@ -31,12 +31,21 @@ # Runs the <foamVersion> version of executable <foamCommand> # with the rest of the arguments. # -# Can also be used for parallel runs e.g. -# mpirun -np <nProcs> \ -# foamExec -v <foamVersion> <foamCommand> ... -parallel +# Can also be used for parallel runs. For example, +# \code +# mpirun -np <nProcs> \ +# foamExec -version <foamVersion> <foamCommand> ... -parallel +# \endcode +# +# Note +# This script must exist in <foamInstall>/OpenFOAM-<VERSION>/bin/ +# or <foamInstall>/openfoam<VERSION>/bin/ (for the debian version) +# +# foamEtcFile must be found in the same directory as this script # # SeeAlso # foamEtcFile +# #------------------------------------------------------------------------------ usage() { exec 1>&2 @@ -46,9 +55,11 @@ usage() { Usage: ${0##*/} [OPTION] <application> ... options: + -prefix <dir> specify an alternative installation prefix + pass through to foamEtcFile and set as FOAM_INST_DIR -version <ver> specify an alternative OpenFOAM version pass through to foamEtcFile - -help this usage + -help print the usage * run a particular OpenFOAM version of <application> @@ -56,13 +67,21 @@ USAGE exit 1 } -# -# This script must exist in <foamInstall>/OpenFOAM-<VERSION>/bin/ -# or <foamInstall>/openfoam<VERSION>/bin/ (for the debian version) -# -# foamEtcFile must be found in the same directory as this script #------------------------------------------------------------------------------- +# the bin dir: +binDir="${0%/*}" + +# the project dir: +projectDir="${binDir%/bin}" + +# the prefix dir (same as foamInstall): +prefixDir="${projectDir%/*}" + +# # the name used for the project directory +# projectDirName="${projectDir##*/}" + + unset etcOpts version # parse options while [ "$#" -gt 0 ] @@ -71,15 +90,21 @@ do -h | -help) usage ;; - -v | -version) + -m | -mode) + [ "$#" -ge 2 ] || usage "'$1' option requires an argument" + etcOpts="$etcOpts $1 $2" # pass-thru to foamEtcFile + shift + ;; + -p | -prefix) [ "$#" -ge 2 ] || usage "'$1' option requires an argument" - version="$2" etcOpts="$etcOpts $1 $2" # pass-thru to foamEtcFile + prefixDir="$2" shift ;; - -m | -mode | -p | -prefix) + -v | -version) [ "$#" -ge 2 ] || usage "'$1' option requires an argument" etcOpts="$etcOpts $1 $2" # pass-thru to foamEtcFile + version="$2" shift ;; --) @@ -96,22 +121,21 @@ do shift done - # # Find and source OpenFOAM settings (bashrc) # placed in function to preserve command-line arguments # sourceRc() { - # default is the current version - : ${version:=${WM_PROJECT_VERSION:-unknown}} - - foamDotFile="$(${0%/*}/foamEtcFile $etcOpts bashrc)" || { - echo "Error : bashrc file could not be found for OpenFOAM-$version" 1>&2 + foamDotFile="$($binDir/foamEtcFile $etcOpts bashrc)" || { + echo "Error : bashrc file could not be found for OpenFOAM-${version:-${WM_PROJECT_VERSION:-???}}" 1>&2 exit 1 } - . $foamDotFile + # set to consistent value before sourcing the bashrc + export FOAM_INST_DIR="$prefixDir" + + . $foamDotFile $FOAM_SETTINGS } diff --git a/bin/foamJob b/bin/foamJob index 4380b3e14731b0dbcfb816b23b337cb839564139..70e2c39f28489556edec25237512b703a7ff63fc 100755 --- a/bin/foamJob +++ b/bin/foamJob @@ -26,6 +26,8 @@ # foamJob # # Description +# Run an OpenFOAM job in background. +# Redirects the output to 'log' in the case directory. # #------------------------------------------------------------------------------ usage() { @@ -36,9 +38,9 @@ usage() { Usage: ${0##*/} [OPTION] <application> ... options: -case <dir> specify alternative case directory, default is the cwd - -p parallel run of processors - -s also sends output to screen - -v <ver> specify OpenFOAM version + -parallel parallel run of processors + -screen also sends output to screen + -version <ver> specify an alternative OpenFOAM version -help print the usage * run an OpenFOAM job in background. @@ -95,23 +97,22 @@ do usage ;; -case) - [ "$#" -ge 2 ] || usage "'-case' option requires an argument" - caseDir=$2 + [ "$#" -ge 2 ] || usage "'$1' option requires an argument" + cd "$2" 2>/dev/null || usage "directory does not exist: '$2'" shift 2 - cd "$caseDir" 2>/dev/null || usage "directory does not exist: '$caseDir'" ;; - -p) + -p | -parallel) parallelOpt=true shift ;; - -s) + -s | -screen) screenOpt=true shift ;; - -v) - shift - version=$1 - shift + -v | -version) + [ "$#" -ge 2 ] || usage "'$1' option requires an argument" + version="$2" + shift 2 ;; --) shift @@ -126,29 +127,32 @@ do esac done -if [ "$#" -lt 1 ] -then - usage "No application specified" -fi +[ "$#" -ge 1 ] || usage "No application specified" + -# use foamExec for a specified version and for remote (parallel) runs +# use foamExec for a specified version +# also need foamExec for remote (parallel) runs if [ -n "$version" -o "$parallelOpt" = true ] then - APPLICATION=`findExec foamExec` - if [ $? -ne 0 ] + # when possible, determine if application even exists + if [ -z "$version" ] then - usage "'foamExec' not found" + findExec $1 >/dev/null || usage "Application '$1' not found" fi - if [ -n "$version" ] + + # use foamExec for dispatching + APPLICATION=`findExec foamExec` || usage "'foamExec' not found" + + [ -n "$version" ] && APPLICATION="$APPLICATION -version $version" + + # attempt to preserve the installation directory 'FOAM_INST_DIR' + if [ -d "$FOAM_INST_DIR" ] then - APPLICATION="$APPLICATION -v $version" + APPLICATION="$APPLICATION -prefix $FOAM_INST_DIR" fi + else - APPLICATION=`findExec $1` - if [ $? -ne 0 ] - then - usage "Application '$1' executable not found" - fi + APPLICATION=`findExec $1` || usage "Application '$1' not found" echo "Application : $1" shift fi @@ -182,11 +186,7 @@ then # # locate mpirun # - mpirun=`findExec mpirun` - if [ $? -ne 0 ] - then - usage "'mpirun' not found" - fi + mpirun=`findExec mpirun` || usage "'mpirun' not found" mpiopts="-np $NPROCS" # @@ -217,10 +217,10 @@ then # if [ "$screenOpt" = true ] then - echo "Executing: mpirun $mpiopts $APPLICATION $@ -parallel | tee log" - $mpirun $mpiopts $APPLICATION $@ -parallel | tee log + echo "Executing: $mpirun $mpiopts $APPLICATION $@ -parallel | tee log" + $mpirun $mpiopts $APPLICATION $@ -parallel | tee log else - echo "Executing: mpirun $mpiopts $APPLICATION $@ -parallel > log 2>&1" + echo "Executing: $mpirun $mpiopts $APPLICATION $@ -parallel > log 2>&1" $mpirun $mpiopts $APPLICATION $@ -parallel > log 2>&1 & fi diff --git a/doc/changes/inotify.txt b/doc/changes/inotify.txt index 0f91d7c03b35140c3fa0f33656638165fe231e47..74e2fc7bb4adb50e007fd659817fbdeddae76661 100644 --- a/doc/changes/inotify.txt +++ b/doc/changes/inotify.txt @@ -55,15 +55,25 @@ timestamps as before or the (linux-specific) 'inotify' system framework - the slave processor directories have no system directory and the constant directory only contains the mesh. - start the job in distributed mode by specifying the slave roots - (so one less than the number of processors) with - the -roots command line option: + (so one fewer than the number of processors) with + the -roots command-line option: - mpirun -np 2 icoFoam -roots '("/tmp")' -parallel + mpirun -np 4 icoFoam -roots '("/tmp" "/tmp" "/tmp")' -parallel - the alternative to the -roots option is to have a cavity/system/decomposeParDict on the master with distributed yes; - roots ("/tmp"); + roots ("/tmp" "/tmp" "/tmp"); + + - as a convenience for cases when the slave roots are identical, + a single root entry is interpreted as being the same for all slaves. + With the -roots command-line option, this can take one of two forms: + + mpirun -np 4 icoFoam -roots '("/tmp")' -parallel + + or simply + + mpirun -np 4 icoFoam -roots '"/tmp"' -parallel Details: diff --git a/etc/apps/paraview3/bashrc b/etc/apps/paraview3/bashrc index e0e6122946c900da0f723fc35d0355ade480ffbe..1dd5386829359ddd134b8d74ee62f3eb157906f0 100644 --- a/etc/apps/paraview3/bashrc +++ b/etc/apps/paraview3/bashrc @@ -56,16 +56,22 @@ export ParaView_MAJOR=detect # Evaluate command-line parameters for ParaView -while [ $# -gt 0 ] -do - case "$1" in - ParaView*=*) - # name=value -> export name=value - eval "export $1" - ;; - esac - shift -done +_foamParaviewEval() +{ + while [ $# -gt 0 ] + do + case "$1" in + ParaView*=*) + # name=value -> export name=value + eval "export $1" + ;; + esac + shift + done +} + +# Evaluate command-line parameters +_foamParaviewEval $@ # set MAJOR version to correspond to VERSION @@ -108,6 +114,7 @@ else fi +unset _foamParaviewEval unset cleaned cmake paraviewInstDir paraviewPython # ----------------------------------------------------------------------------- diff --git a/etc/bashrc b/etc/bashrc index 2de27d05134c1c5fd6833c80ef383da814120287..d2539c5b5012bcf606366ef7d4d33bc24f617f1a 100644 --- a/etc/bashrc +++ b/etc/bashrc @@ -144,6 +144,10 @@ _foamEval() while [ $# -gt 0 ] do case "$1" in + -*) + # stray option (not meant for us here) -> get out + break + ;; *=) # name= -> unset name [ "$FOAM_VERBOSE" -a "$PS1" ] && echo "unset ${1%=}" @@ -160,7 +164,7 @@ _foamEval() then _foamSource "$1" else - _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile "$1"` + _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile -silent "$1"` fi ;; esac diff --git a/etc/config/compiler.csh-EXAMPLE b/etc/config/compiler.csh-EXAMPLE new file mode 100644 index 0000000000000000000000000000000000000000..6d54edbd479480932a8d0ddcb15d27529592e77b --- /dev/null +++ b/etc/config/compiler.csh-EXAMPLE @@ -0,0 +1,51 @@ +#----------------------------------*-sh-*-------------------------------------- +# ========= | +# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox +# \\ / O peration | +# \\ / A nd | Copyright (C) 2011-2011 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/>. +# +# File +# config/compiler.csh +# +# Description +# Fine tuning of ThirdParty compiler settings for OpenFOAM +# Sourced from OpenFOAM-<VERSION>/etc/settings.csh +# +#------------------------------------------------------------------------------ + +# Modified compiler settings +switch ("$WM_COMPILER") +case Gcc46: +case Gcc46++0x: + set gcc_version=gcc-4.6.0 + set gmp_version=gmp-5.0.1 + set mpfr_version=mpfr-2.4.2 + set mpc_version=mpc-0.8.1 + breaksw +case Gcc45: +case Gcc45++0x: + set gcc_version=gcc-4.5.2 + set gmp_version=gmp-5.0.1 + set mpfr_version=mpfr-2.4.2 + set mpc_version=mpc-0.8.1 + breaksw +endsw + +# ----------------------------------------------------------------- end-of-file diff --git a/etc/config/compiler.sh-EXAMPLE b/etc/config/compiler.sh-EXAMPLE new file mode 100644 index 0000000000000000000000000000000000000000..bc6aada36e279d1857642f9fcb062d9e359dd22a --- /dev/null +++ b/etc/config/compiler.sh-EXAMPLE @@ -0,0 +1,49 @@ +#----------------------------------*-sh-*-------------------------------------- +# ========= | +# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox +# \\ / O peration | +# \\ / A nd | Copyright (C) 2011-2011 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/>. +# +# File +# config/compiler.sh +# +# Description +# Fine tuning of ThirdParty compiler settings for OpenFOAM +# Sourced from OpenFOAM-<VERSION>/etc/settings.sh +# +#------------------------------------------------------------------------------ + +# Modified compiler settings +case "$WM_COMPILER" in +Gcc46 | Gcc46++0x) + gcc_version=gcc-4.6.0 + gmp_version=gmp-5.0.1 + mpfr_version=mpfr-2.4.2 + mpc_version=mpc-0.8.1 + ;; +Gcc45 | Gcc45++0x) + gcc_version=gcc-4.5.2 + gmp_version=gmp-5.0.1 + mpfr_version=mpfr-2.4.2 + mpc_version=mpc-0.8.1 + ;; +esac + +# ----------------------------------------------------------------- end-of-file diff --git a/etc/config/openmpi.csh-EXAMPLE b/etc/config/openmpi.csh-EXAMPLE new file mode 100644 index 0000000000000000000000000000000000000000..94be702e9d7c051524390808d288609d80a7dc01 --- /dev/null +++ b/etc/config/openmpi.csh-EXAMPLE @@ -0,0 +1,36 @@ +#----------------------------------*-sh-*-------------------------------------- +# ========= | +# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox +# \\ / O peration | +# \\ / A nd | Copyright (C) 2011-2011 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/>. +# +# File +# config/openmpi.csh +# +# Description +# Fine tuning of openmpi settings for OpenFOAM +# Sourced from OpenFOAM-<VERSION>/etc/settings.csh +# +#------------------------------------------------------------------------------ + +# Modified openmpi settings +setenv FOAM_MPI openmpi-1.4.3 + +# ----------------------------------------------------------------- end-of-file diff --git a/etc/config/openmpi.sh-EXAMPLE b/etc/config/openmpi.sh-EXAMPLE new file mode 100644 index 0000000000000000000000000000000000000000..b7c5035b0487fc65c9c29563772e5c7af0b9fd4e --- /dev/null +++ b/etc/config/openmpi.sh-EXAMPLE @@ -0,0 +1,36 @@ +#----------------------------------*-sh-*-------------------------------------- +# ========= | +# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox +# \\ / O peration | +# \\ / A nd | Copyright (C) 2011-2011 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/>. +# +# File +# config/openmpi.sh +# +# Description +# Fine tuning of openmpi settings for OpenFOAM +# Sourced from OpenFOAM-<VERSION>/etc/settings.sh +# +#------------------------------------------------------------------------------ + +# Modified openmpi settings +export FOAM_MPI=openmpi-1.4.3 + +# ----------------------------------------------------------------- end-of-file diff --git a/etc/cshrc b/etc/cshrc index a23a607fff1e0fc4c21bab62777bb2a77b935164..c2c1b12a9b7757074536e74a937a034b7e07ad58 100644 --- a/etc/cshrc +++ b/etc/cshrc @@ -142,6 +142,10 @@ _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile prefs.csh` setenv FOAM_SETTINGS "${*}" while ( $#argv > 0 ) switch ($argv[1]) + case -*: + # stray option (not meant for us here) -> get out + break + breaksw case *=: # name= -> unsetenv name if ($?FOAM_VERBOSE && $?prompt) echo "unsetenv $argv[1]:s/=//" @@ -157,7 +161,7 @@ while ( $#argv > 0 ) if ( -f "$1" ) then _foamSource "$1" else - _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile "$1"` + _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile -silent "$1"` endif breaksw endsw diff --git a/etc/settings.csh b/etc/settings.csh index 5b4c41df822789c03d1c2cb96f1aa1d7eebc41b2..b3daf1e2884c471bb3ff465c21f540dc43838b63 100644 --- a/etc/settings.csh +++ b/etc/settings.csh @@ -248,6 +248,9 @@ case ThirdParty: breaksw endsw + # optional configuration tweaks: + _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config/compiler.csh` + if ( $?gcc_version ) then set gccDir=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER_ARCH/$gcc_version set gmpDir=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER_ARCH/$gmp_version @@ -367,8 +370,10 @@ unsetenv MPI_ARCH_PATH MPI_HOME FOAM_MPI_LIBBIN switch ("$WM_MPLIB") case OPENMPI: - #setenv FOAM_MPI openmpi-1.4.3 setenv FOAM_MPI openmpi-1.5.3 + # optional configuration tweaks: + _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config/openmpi.csh` + setenv MPI_ARCH_PATH $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$FOAM_MPI # Tell OpenMPI where to find its install directory diff --git a/etc/settings.sh b/etc/settings.sh index 84c6fd0bc1a3f38aca695c570d5da8a510c33539..954868dad157e58c271ae94d02e808128bb1cb58 100644 --- a/etc/settings.sh +++ b/etc/settings.sh @@ -265,6 +265,9 @@ OpenFOAM | ThirdParty) ;; esac + # optional configuration tweaks: + _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config/compiler.sh` + if [ -n "$gcc_version" ] then gccDir=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER_ARCH/$gcc_version @@ -387,8 +390,10 @@ unset MPI_ARCH_PATH MPI_HOME FOAM_MPI_LIBBIN case "$WM_MPLIB" in OPENMPI) - #export FOAM_MPI=openmpi-1.4.3 export FOAM_MPI=openmpi-1.5.3 + # optional configuration tweaks: + _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config/openmpi.sh` + export MPI_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$FOAM_MPI # Tell OpenMPI where to find its install directory diff --git a/src/OpenFOAM/db/dictionary/functionEntries/includeEntry/includeEntry.C b/src/OpenFOAM/db/dictionary/functionEntries/includeEntry/includeEntry.C index ee20e33191c14bc05e5a780cee322ffbb631217f..c45ef4f29132f0315ae90d9bae4eae06a5ca19fd 100644 --- a/src/OpenFOAM/db/dictionary/functionEntries/includeEntry/includeEntry.C +++ b/src/OpenFOAM/db/dictionary/functionEntries/includeEntry/includeEntry.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -39,6 +39,9 @@ const Foam::word Foam::functionEntries::includeEntry::typeName // might include includeEntry int Foam::functionEntries::includeEntry::debug(0); +bool Foam::functionEntries::includeEntry::report(false); + + namespace Foam { namespace functionEntries @@ -89,10 +92,15 @@ bool Foam::functionEntries::includeEntry::execute Istream& is ) { - IFstream ifs(includeFileName(is)); + const fileName fName(includeFileName(is)); + IFstream ifs(fName); if (ifs) { + if (Foam::functionEntries::includeEntry::report) + { + Info<< fName << endl; + } parentDict.read(ifs); return true; } @@ -119,10 +127,15 @@ bool Foam::functionEntries::includeEntry::execute Istream& is ) { - IFstream ifs(includeFileName(is)); + const fileName fName(includeFileName(is)); + IFstream ifs(fName); if (ifs) { + if (Foam::functionEntries::includeEntry::report) + { + Info<< fName << endl; + } entry.read(parentDict, ifs); return true; } diff --git a/src/OpenFOAM/db/dictionary/functionEntries/includeEntry/includeEntry.H b/src/OpenFOAM/db/dictionary/functionEntries/includeEntry/includeEntry.H index 5145b742ae69ce331399881dc0151e17ce4aed9b..be99bf588afd91bae67f2ed5f4606165145dbec7 100644 --- a/src/OpenFOAM/db/dictionary/functionEntries/includeEntry/includeEntry.H +++ b/src/OpenFOAM/db/dictionary/functionEntries/includeEntry/includeEntry.H @@ -82,6 +82,12 @@ protected: public: + // Static data members + + //- Report which file is included to stdout + static bool report; + + //- Runtime type information ClassName("include"); diff --git a/src/OpenFOAM/db/dictionary/functionEntries/includeIfPresentEntry/includeIfPresentEntry.C b/src/OpenFOAM/db/dictionary/functionEntries/includeIfPresentEntry/includeIfPresentEntry.C index 86f16181637017f9b4fd3c2c69bf90473da846c9..8e1bc9b7f11f99df0778e688432bf37708d6a2c7 100644 --- a/src/OpenFOAM/db/dictionary/functionEntries/includeIfPresentEntry/includeIfPresentEntry.C +++ b/src/OpenFOAM/db/dictionary/functionEntries/includeIfPresentEntry/includeIfPresentEntry.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -69,10 +69,15 @@ bool Foam::functionEntries::includeIfPresentEntry::execute Istream& is ) { - IFstream ifs(includeFileName(is)); + const fileName fName(includeFileName(is)); + IFstream ifs(fName); if (ifs) { + if (Foam::functionEntries::includeEntry::report) + { + Info<< fName << endl; + } parentDict.read(ifs); } @@ -87,10 +92,15 @@ bool Foam::functionEntries::includeIfPresentEntry::execute Istream& is ) { - IFstream ifs(includeFileName(is)); + const fileName fName(includeFileName(is)); + IFstream ifs(fName); if (ifs) { + if (Foam::functionEntries::includeEntry::report) + { + Info<< fName << endl; + } entry.read(parentDict, ifs); } diff --git a/src/OpenFOAM/global/argList/argList.C b/src/OpenFOAM/global/argList/argList.C index f055011bce90f4de68a76783b2b0cc185bfb6652..a020f3e5bdca03111bb057e80410af55fec0d0f8 100644 --- a/src/OpenFOAM/global/argList/argList.C +++ b/src/OpenFOAM/global/argList/argList.C @@ -548,10 +548,14 @@ Foam::argList::argList if (options_.found("roots")) { - source = "'-roots' option"; - IStringStream str(options_["roots"]); - str >> roots; - dictNProcs = roots.size()+1; + source = "-roots"; + IStringStream is(options_["roots"]); + roots = readList<fileName>(is); + + if (roots.size() != 1) + { + dictNProcs = roots.size()+1; + } } else { @@ -579,6 +583,21 @@ Foam::argList::argList } } + // convenience: + // when a single root is specified, use it for all processes + if (roots.size() == 1) + { + const fileName rootName(roots[0]); + roots.setSize(Pstream::nProcs()-1, rootName); + + // adjust dictNProcs for command-line '-roots' option + if (dictNProcs < 0) + { + dictNProcs = roots.size()+1; + } + } + + // Check number of processors. // nProcs => number of actual procs // dictNProcs => number of procs specified in decompositionDict @@ -602,11 +621,6 @@ Foam::argList::argList // distributed data if (roots.size()) { - forAll(roots, i) - { - roots[i].expand(); - } - if (roots.size() != Pstream::nProcs()-1) { FatalError @@ -617,6 +631,11 @@ Foam::argList::argList << exit(FatalError); } + forAll(roots, i) + { + roots[i].expand(); + } + // Distribute the master's argument list (with new root) bool hadCaseOpt = options_.found("case"); for @@ -626,11 +645,7 @@ Foam::argList::argList slave++ ) { - options_.set - ( - "case", - fileName(roots[slave-1])/globalCase_ - ); + options_.set("case", roots[slave-1]/globalCase_); OPstream toSlave(Pstream::scheduled, slave); toSlave << args_ << options_; diff --git a/src/OpenFOAM/meshes/meshShapes/face/face.C b/src/OpenFOAM/meshes/meshShapes/face/face.C index 7dbd202335067831d33b8c138c903c2604a1d126..4060404af7e5e8323f2497a364368e4e0df247d0 100644 --- a/src/OpenFOAM/meshes/meshShapes/face/face.C +++ b/src/OpenFOAM/meshes/meshShapes/face/face.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -491,51 +491,52 @@ void Foam::face::flip() } -Foam::point Foam::face::centre(const pointField& meshPoints) const +Foam::point Foam::face::centre(const pointField& points) const { // Calculate the centre by breaking the face into triangles and // area-weighted averaging their centres + const label nPoints = size(); + // If the face is a triangle, do a direct calculation - if (size() == 3) + if (nPoints) { return (1.0/3.0) *( - meshPoints[operator[](0)] - + meshPoints[operator[](1)] - + meshPoints[operator[](2)] + points[operator[](0)] + + points[operator[](1)] + + points[operator[](2)] ); } - label nPoints = size(); point centrePoint = point::zero; - for (register label pI=0; pI<nPoints; pI++) + for (register label pI=0; pI<nPoints; ++pI) { - centrePoint += meshPoints[operator[](pI)]; + centrePoint += points[operator[](pI)]; } centrePoint /= nPoints; scalar sumA = 0; vector sumAc = vector::zero; - for (register label pI=0; pI<nPoints; pI++) + for (register label pI=0; pI<nPoints; ++pI) { - const point& nextPoint = meshPoints[operator[]((pI + 1) % nPoints)]; + const point& nextPoint = points[operator[]((pI + 1) % nPoints)]; // Calculate 3*triangle centre - vector ttc + const vector ttc ( - meshPoints[operator[](pI)] + points[operator[](pI)] + nextPoint + centrePoint ); // Calculate 2*triangle area - scalar ta = Foam::mag + const scalar ta = Foam::mag ( - (meshPoints[operator[](pI)] - centrePoint) + (points[operator[](pI)] - centrePoint) ^ (nextPoint - centrePoint) ); @@ -545,7 +546,7 @@ Foam::point Foam::face::centre(const pointField& meshPoints) const if (sumA > VSMALL) { - return sumAc/(3*sumA); + return sumAc/(3.0*sumA); } else { @@ -556,6 +557,8 @@ Foam::point Foam::face::centre(const pointField& meshPoints) const Foam::vector Foam::face::normal(const pointField& p) const { + const label nPoints = size(); + // Calculate the normal by summing the face triangle normals. // Changed to deal with small concavity by using a central decomposition // @@ -563,7 +566,7 @@ Foam::vector Foam::face::normal(const pointField& p) const // If the face is a triangle, do a direct calculation to avoid round-off // error-related problems // - if (size() == 3) + if (nPoints == 3) { return triPointRef ( @@ -573,12 +576,10 @@ Foam::vector Foam::face::normal(const pointField& p) const ).normal(); } - label nPoints = size(); - register label pI; point centrePoint = vector::zero; - for (pI = 0; pI < nPoints; pI++) + for (pI = 0; pI < nPoints; ++pI) { centrePoint += p[operator[](pI)]; } @@ -588,7 +589,7 @@ Foam::vector Foam::face::normal(const pointField& p) const point nextPoint = centrePoint; - for (pI = 0; pI < nPoints; pI++) + for (pI = 0; pI < nPoints; ++pI) { if (pI < nPoints - 1) { diff --git a/src/OpenFOAM/meshes/meshShapes/face/face.H b/src/OpenFOAM/meshes/meshShapes/face/face.H index 34a66b85242bf25d7a5d6c31bcc9a3bb46fec162..723d9bbfb70717641948e3c94533c0feaae8f818 100644 --- a/src/OpenFOAM/meshes/meshShapes/face/face.H +++ b/src/OpenFOAM/meshes/meshShapes/face/face.H @@ -178,7 +178,7 @@ public: void flip(); //- Return the points corresponding to this face - inline pointField points(const pointField& meshPoints) const; + inline pointField points(const pointField&) const; //- Centre point of face point centre(const pointField&) const; @@ -187,7 +187,7 @@ public: template<class Type> Type average(const pointField&, const Field<Type>&) const; - //- Scalar magnitude + //- Magnitude of face area inline scalar mag(const pointField&) const; //- Vector normal; magnitude is equal to area of face @@ -228,8 +228,8 @@ public: //- Return potential intersection with face with a ray starting // at p, direction n (does not need to be normalized) - // Does face-center decomposition and returns triangle intersection - // point closest to p. Face-center is calculated from point average. + // Does face-centre decomposition and returns triangle intersection + // point closest to p. Face-centre is calculated from point average. // For a hit, the distance is signed. Positive number // represents the point in front of triangle // In case of miss the point is the nearest point on the face @@ -242,20 +242,20 @@ public: ( const point& p, const vector& n, - const pointField& meshPoints, + const pointField&, const intersection::algorithm alg = intersection::FULL_RAY, const intersection::direction dir = intersection::VECTOR ) const; //- Fast intersection with a ray. - // Does face-center decomposition and returns triangle intersection + // Does face-centre decomposition and returns triangle intersection // point closest to p. See triangle::intersection for details. pointHit intersection ( const point& p, const vector& q, const point& ctr, - const pointField& meshPoints, + const pointField&, const intersection::algorithm alg, const scalar tol = 0.0 ) const; @@ -264,7 +264,7 @@ public: pointHit nearestPoint ( const point& p, - const pointField& meshPoints + const pointField& ) const; //- Return nearest point to face and classify it: @@ -276,7 +276,7 @@ public: pointHit nearestPointClassify ( const point& p, - const pointField& meshPoints, + const pointField&, label& nearType, label& nearLabel ) const; @@ -286,13 +286,13 @@ public: ( const point& p, const vector& n, - const pointField& meshPoints + const pointField& ) const; //- Return area in contact, given the displacement in vertices scalar areaInContact ( - const pointField& points, + const pointField&, const scalarField& v ) const; diff --git a/src/OpenFOAM/meshes/meshShapes/triFace/triFace.H b/src/OpenFOAM/meshes/meshShapes/triFace/triFace.H index 03e992575f3eebeabfa76968177236ec70eb1a44..933cb522391b253b8d03d7ec6ff28e8bed2e8a28 100644 --- a/src/OpenFOAM/meshes/meshShapes/triFace/triFace.H +++ b/src/OpenFOAM/meshes/meshShapes/triFace/triFace.H @@ -103,7 +103,7 @@ public: inline void flip(); //- Return the points corresponding to this face - inline pointField points(const pointField& meshPoints) const; + inline pointField points(const pointField&) const; //- Return triangle as a face inline face triFaceFace() const; @@ -118,10 +118,10 @@ public: template<class Type> Type average(const pointField&, const Field<Type>&) const; - //- Return scalar magnitude + //- Magnitude of face area inline scalar mag(const pointField&) const; - //- Return vector normal + //- Vector normal; magnitude is equal to area of face inline vector normal(const pointField&) const; //- Number of triangles after splitting diff --git a/src/OpenFOAM/meshes/meshShapes/triFace/triFaceI.H b/src/OpenFOAM/meshes/meshShapes/triFace/triFaceI.H index e12f17567524cbe10413a3e2b26c2dbd97a549fe..af62aa1aa323b211f5b8d645da65090081eaddc4 100644 --- a/src/OpenFOAM/meshes/meshShapes/triFace/triFaceI.H +++ b/src/OpenFOAM/meshes/meshShapes/triFace/triFaceI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -176,6 +176,7 @@ inline Foam::scalar Foam::triFace::mag(const pointField& points) const return ::Foam::mag(normal(points)); } + // could also delegate to triPointRef(...).normal() inline Foam::vector Foam::triFace::normal(const pointField& points) const { diff --git a/src/Pstream/Allwmake b/src/Pstream/Allwmake index 613263d7bc026a47d5907270b58e8137bea14252..50ccb5fe1d1e175dc705a861cf7fa7454c33839d 100755 --- a/src/Pstream/Allwmake +++ b/src/Pstream/Allwmake @@ -1,8 +1,31 @@ #!/bin/sh cd ${0%/*} || exit 1 # run from this directory makeType=${1:-libso} -set -x + +# +# define how to create an mpi-versioned library of $makeType +# compile into qualified directory +# use sentinel file to handle version changes +# +wmakeMpiLib() +{ + set +x + for libName + do + ( + WM_OPTIONS="$WM_OPTIONS$WM_MPLIB" + whichmpi="$libName/Make/$WM_OPTIONS/using:$FOAM_MPI" + [ -e "$whichmpi" ] || wclean $libName + echo "wmake $makeType $libName" + wmake $makeType $libName + touch "$whichmpi" + ) + done + set -x +} + +set -x wmake $makeType dummy case "$WM_MPLIB" in @@ -11,9 +34,7 @@ case "$WM_MPLIB" in echo echo "Note: ignore spurious warnings about missing mpicxx.h headers" echo - set -x - # force compilation into qualified directory - WM_OPTIONS=${WM_OPTIONS}$WM_MPLIB wmake $makeType mpi + wmakeMpiLib mpi ;; #GAMMA) diff --git a/src/parallel/decompose/Allwmake b/src/parallel/decompose/Allwmake index 38898b1ea310da0649bd9918ff1a42a894e2648b..cded295a7e274c66c4c11769013d0957e9beb42d 100755 --- a/src/parallel/decompose/Allwmake +++ b/src/parallel/decompose/Allwmake @@ -3,8 +3,7 @@ cd ${0%/*} || exit 1 # run from this directory makeType=${1:-libso} # get SCOTCH_VERSION, SCOTCH_ARCH_PATH -settings=`$WM_PROJECT_DIR/bin/foamEtcFile apps/scotch/bashrc` -if [ -f "$settings" ] +if settings=`$WM_PROJECT_DIR/bin/foamEtcFile apps/scotch/bashrc` then . $settings echo "using SCOTCH_ARCH_PATH=$SCOTCH_ARCH_PATH" @@ -13,21 +12,45 @@ else echo "Error: no apps/scotch/bashrc settings" echo fi + + +# +# define how to create an mpi-versioned library of $makeType +# compile into qualified directory +# use sentinel file to handle version changes +# +wmakeMpiLib() +{ + set +x + for libName + do + ( + WM_OPTIONS="$WM_OPTIONS$WM_MPLIB" + whichmpi="$libName/Make/$WM_OPTIONS/using:$FOAM_MPI" + whichscotch="$libName/Make/$WM_OPTIONS/using:$SCOTCH_VERSION" + [ -e "$whichmpi" -a -e "$whichscotch" ] || wclean $libName + echo "wmake $makeType $libName" + wmake $makeType $libName + touch "$whichmpi" "$whichscotch" + ) + done + set -x +} + set -x wmakeLnInclude decompositionMethods -wmake $makeType scotchDecomp - -if [ -d "$FOAM_LIBBIN/$FOAM_MPI" ] +if [ -n "$SCOTCH_ARCH_PATH" ] then -( - WM_OPTIONS=${WM_OPTIONS}$WM_MPLIB - wmake $makeType ptscotchDecomp -) + wmake $makeType scotchDecomp + [ -d "$FOAM_LIBBIN/$FOAM_MPI" ] && wmakeMpiLib ptscotchDecomp +else + echo + echo "Skipping scotchDecomp (ptscotchDecomp)" + echo fi wmake $makeType decompositionMethods - # ----------------------------------------------------------------- end-of-file diff --git a/src/parallel/decompose/scotchDecomp/Make/options b/src/parallel/decompose/scotchDecomp/Make/options index a198db40af8be9f9ca1d982920b3c2003f2822bc..b2f7015e2468f922d206bb5aae2fd650906c85d7 100644 --- a/src/parallel/decompose/scotchDecomp/Make/options +++ b/src/parallel/decompose/scotchDecomp/Make/options @@ -1,6 +1,7 @@ -# Note including of mplib compilation rules. This -# is purely to avoid scotch.h including mpicxx.h -# which causes problems. +/* + * Note including of mplib compilation rules. + * This is purely to avoid scotch.h including mpicxx.h, which causes problems. + */ sinclude $(GENERAL_RULES)/mplib$(WM_MPLIB) sinclude $(RULES)/mplib$(WM_MPLIB)