- was PREFIX/site, now PROJECT/site This avoids several issues when installing OpenFOAM in clusters without an intermediate OpenFOAM-specific installation prefix. The 'site' directory may have a reserved meaning in these situations and it is undesirable to 'leak' upwards into the parent directory to look for configuration files. Placing the default within the project directory avoids this. Alternative locations can be given via the WM_PROJECT_SITE variable.
232 lines
5.6 KiB
Bash
Executable File
232 lines
5.6 KiB
Bash
Executable File
#!/bin/sh
|
|
#------------------------------------------------------------------------------
|
|
# ========= |
|
|
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
# \\ / O peration |
|
|
# \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
|
# \\/ 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
|
|
# foamNewCase
|
|
#
|
|
# Description
|
|
# Create a new case from a template for particular applications
|
|
# - requires rsync
|
|
#
|
|
#------------------------------------------------------------------------------
|
|
siteDir="${WM_PROJECT_SITE:-${WM_PROJECT_DIR:-<unknown>}/site}"
|
|
userDir="$HOME/.OpenFOAM"
|
|
version="${WM_PROJECT_VERSION:-unknown}"
|
|
|
|
templateDir="appTemplates"
|
|
|
|
#------------------------------------------------------------------------------
|
|
usage() {
|
|
exec 1>&2
|
|
while [ "$#" -ge 1 ]; do echo "$1"; shift; done
|
|
cat<<USAGE
|
|
|
|
Usage: ${0##*/} [OPTION]
|
|
options:
|
|
-app <name> specify the application to use
|
|
-case <dir> specify alternative case directory, default is the cwd
|
|
-list list the applications available
|
|
-version <ver> specify an alternative version (default: '$WM_PROJECT_VERSION')
|
|
|
|
clone initial application settings to the specified case from
|
|
$userDir/$templateDir/{$version,}/<APP>
|
|
$siteDir/$templateDir/{$version,}/<APP>
|
|
|
|
USAGE
|
|
exit 1
|
|
}
|
|
#------------------------------------------------------------------------------
|
|
unset appName caseName listOpt
|
|
|
|
# parse options
|
|
while [ "$#" -gt 0 ]
|
|
do
|
|
case "$1" in
|
|
-h | -help*)
|
|
usage
|
|
;;
|
|
-app)
|
|
[ "$#" -ge 2 ] || usage "'$1' option requires an argument"
|
|
appName="$2"
|
|
shift 2
|
|
;;
|
|
-case)
|
|
[ "$#" -ge 2 ] || usage "'$1' option requires an argument"
|
|
caseName="$2"
|
|
shift 2
|
|
;;
|
|
-l | -list)
|
|
listOpt=true
|
|
shift
|
|
;;
|
|
-v | -ver | -version)
|
|
[ "$#" -ge 2 ] || usage "'$1' option requires an argument"
|
|
version="$2"
|
|
shift 2
|
|
;;
|
|
-*)
|
|
usage "unknown option: '$*'"
|
|
;;
|
|
*)
|
|
usage "unexpected argument: '$*'"
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# need rsync, except for when listing
|
|
type rsync >/dev/null 2>&1 || [ "$listOpt" = true ] || usage "Error: 'rsync' seems to be missing"
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
|
|
[ -n "$version" ] || {
|
|
echo "Error: no -version specified and \$WM_PROJECT_VERSION is not set"
|
|
exit 1
|
|
}
|
|
|
|
#
|
|
# find apps in current directory
|
|
# considered an app if it has constant/ and system/ directories
|
|
#
|
|
findApps()
|
|
{
|
|
for app in $(/bin/ls -d * 2>/dev/null)
|
|
do
|
|
[ -d "$app/constant" -a -d "$app/system" ] && echo $app
|
|
done
|
|
}
|
|
|
|
|
|
appList=$(
|
|
for dir in $userDir/$templateDir $siteDir/$templateDir
|
|
do
|
|
if cd $dir 2>/dev/null
|
|
then
|
|
findApps ## generic
|
|
cd $version 2>/dev/null && findApps ## version-specific
|
|
fi
|
|
done | sort | uniq
|
|
)
|
|
|
|
|
|
listApps()
|
|
{
|
|
echo
|
|
echo "applications available:"
|
|
for i in $appList
|
|
do
|
|
echo " $i"
|
|
done
|
|
echo
|
|
}
|
|
|
|
|
|
if [ "$listOpt" = true ]
|
|
then
|
|
listApps
|
|
exit 0
|
|
elif [ "$(echo $appList | wc -w)" -eq 0 ]
|
|
then
|
|
echo "Error: no applications available"
|
|
exit 1
|
|
elif [ -z "$appName" ]
|
|
then
|
|
echo "Error: no -app specified"
|
|
listApps
|
|
exit 1
|
|
fi
|
|
|
|
|
|
# get the corresponding srcDir name
|
|
srcDir=$(
|
|
for dir in $userDir/$templateDir $siteDir/$templateDir
|
|
do
|
|
if [ -d $dir ]
|
|
then
|
|
for appDir in $dir/$version/$appName $dir/$appName
|
|
do
|
|
if [ -d $appDir -a -d $appDir/constant -a -d $appDir/system ]
|
|
then
|
|
echo "$appDir"
|
|
break 2
|
|
fi
|
|
done
|
|
fi
|
|
done
|
|
)
|
|
|
|
|
|
[ -d "$srcDir" ] || {
|
|
echo "Error: could not find template for $appName"
|
|
listApps
|
|
exit 1
|
|
}
|
|
|
|
|
|
# adjust for caseName as required
|
|
if [ -n "$caseName" ]
|
|
then
|
|
[ -d "$caseName" ] || mkdir -p "$caseName"
|
|
cd "$caseName" 2>/dev/null || usage "directory does not exist: '$caseName'"
|
|
fi
|
|
newDir=$PWD
|
|
|
|
|
|
[ -d "$newDir" -a -w "$newDir" ] || {
|
|
echo "Error: target directory does not exist or is unwritable"
|
|
echo " $newDir"
|
|
exit 1
|
|
}
|
|
|
|
# add some useful subdirs:
|
|
mkdir -p $newDir/postPro
|
|
|
|
|
|
echo " application $appName"
|
|
echo " source $srcDir"
|
|
echo " target $newDir"
|
|
|
|
echo " syncing ..."
|
|
# sync updated files only, itemize changes so we know what is going on
|
|
rsync -aui $srcDir/ $newDir
|
|
|
|
|
|
#
|
|
# reuse or create new FOAM_SETTINGS (useful for queuing systems)
|
|
#
|
|
if [ -e "$newDir/FOAM_SETTINGS" ]
|
|
then
|
|
echo " retaining FOAM_SETTINGS"
|
|
else
|
|
echo " creating FOAM_SETTINGS"
|
|
cat << SETTINGS > "$newDir/FOAM_SETTINGS"
|
|
APPLICATION=$appName
|
|
FOAM_VERSION=OpenFOAM-$version
|
|
SETTINGS
|
|
fi
|
|
|
|
echo Done
|
|
|
|
#------------------------------------------------------------------------------
|