openfoam/bin/tools/foamExec
Mark Olesen b6eeaf5155 BUG: missing foamExec causes foamJob failure (#1309, #1411)
- foamExec was removed as part of commit 6c68c34e1a but
  overlooked the fact that it is partly still needed by foamJob.
  When running in parallel, it is used to source the etc/bashrc env.

  Reinstated a stripped down form, which has been relocated to
  bin/tools directory (it should not be directly called by the user).

  The previous version switching functionality has nonetheless be
  dropped since it only worked only when a rigid naming convention for
  OpenFOAM installations was followed.

ENH: add foamJob log=, -log-app, -no-log options, improved coding quality
2019-08-28 17:19:11 +02:00

121 lines
3.2 KiB
Bash
Executable File

#!/bin/bash
#------------------------------------------------------------------------------
# ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
# \\ / O peration |
# \\ / A nd | Copyright (C) 2019 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/>.
#
# Script
# foamExec <application> ...
#
# Description
# Runs an application (with arguments) after first sourcing the OpenFOAM
# etc/bashrc file from the project directory
#
# This script must exist in $WM_PROJECT_DIR/bin/tools
#
# Can useful for parallel runs. For example,
#
# mpirun -n <nProcs> \
# projectDir/bin/tools/foamExec <simpleFoam> ... -parallel
#
#------------------------------------------------------------------------------
usage() {
exec 1>&2
while [ "$#" -ge 1 ]; do echo "$1"; shift; done
cat<<USAGE
Usage: ${0##*/} [OPTION] <application> ...
options:
-help Print the usage
Runs an application (with arguments) after first sourcing the OpenFOAM
etc/bashrc file from the project directory
USAGE
exit 1
}
# Report error and exit
die()
{
exec 1>&2
echo
echo "Error encountered:"
while [ "$#" -ge 1 ]; do echo " $1"; shift; done
echo
echo "See '$0 -help' for usage"
echo
exit 1
}
#-------------------------------------------------------------------------------
toolsDir="${0%/*}" # The bin/tools dir
projectDir="${toolsDir%/bin/tools}" # Project dir
# Parse options
while [ "$#" -gt 0 ]
do
case "$1" in
-h | -help*)
usage
;;
--)
shift
break
;;
-*)
die "unknown option: '$1'"
;;
*)
break
;;
esac
shift
done
#-------------------------------------------------------------------------------
[ "$#" -ge 1 ] || die "No application specified"
[ -d "$projectDir" ] || {
echo "Error: no project dir: $projectDir" 1>&2
exit 2
}
[ -f "$projectDir/etc/bashrc" ] || {
echo "Error: file not found: $projectDir/etc/bashrc" 1>&2
exit 2
}
# Source bashrc within a function to preserve command-line arguments
# - this will not have aliases, but working non-interactively anyhow
sourceBashrc()
{
. "$projectDir/etc/bashrc" $FOAM_SETTINGS
}
sourceBashrc
exec "$@"
#------------------------------------------------------------------------------