- removed reliance on ParaView_INCLUDE_DIR variable for conveying the major.minor version information when compiling. This can be somewhat fragile and also adds variable that is an unnecessary when running (only used when compiling). Instead use `have_pvplugin_support` function in paraviewFunctions wmake script to determine the maj.min from the PV_PLUGIN_PATH since we have already defined the output path there with paraview maj.min numbering. Can now build with paraview from the operating system, provided that it has develop headers available. ParaView_VERSION=system In the etc/config.sh/paraview setup, the maj.min is taken from the corresponding `paraview --version` output and used when defining the PV_PLUGIN_PATH. During the build, the include path taken from `paraview-config` for a system installation, from the guess installation root of the paraview binary, or ParaView_DIR otherwise. NB: using a system ParaView for building runTimePostProcessing is unsupported. - these types of builds appear to have various library resolution issues (eg, libexpat not being loaded). Additionally, the build logic does not yet cover this type of use case.
330 lines
8.5 KiB
Bash
Executable File
330 lines
8.5 KiB
Bash
Executable File
#!/bin/sh
|
|
#------------------------------------------------------------------------------
|
|
# ========= |
|
|
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
# \\ / O peration |
|
|
# \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
|
# \\/ M anipulation | Copyright (C) 2016-2018 OpenCFD Ltd.
|
|
#-------------------------------------------------------------------------------
|
|
# License
|
|
# This file is part of OpenFOAM, licensed under GNU General Public License
|
|
# <http://www.gnu.org/licenses/>.
|
|
#
|
|
# Script
|
|
# paraFoam
|
|
#
|
|
# Description
|
|
# Start paraview with OpenFOAM libraries and reader modules.
|
|
#
|
|
# Note
|
|
# Combining -block, -vtk, -builtin options with -region option yields
|
|
# undefined behaviour
|
|
#------------------------------------------------------------------------------
|
|
printHelp() {
|
|
# Print usage to stdout so that it can be captured for bash completion
|
|
cat<<USAGE
|
|
|
|
Usage: ${0##*/} [OPTION] [--] [PARAVIEW_OPTION]
|
|
options:
|
|
-block Use blockMesh reader (.blockMesh extension)
|
|
-case <dir> Specify alternative case directory, default is the cwd
|
|
-region <name> Specify alternative mesh region
|
|
-touch Create the file (eg, .blockMesh, .OpenFOAM, .foam, ...)
|
|
-touch-all Create .blockMesh, .foam, .OpenFOAM files (for all regions)
|
|
-touch-proc Same as '-touch' but for each processor
|
|
-vtk Use VTK builtin OpenFOAM reader (.foam extension)
|
|
--help Display ParaView help
|
|
-help Display short help and exit
|
|
-help-full Display full help and exit
|
|
|
|
Start paraview with the OpenFOAM libraries and reader modules.
|
|
Note that paraview options begin with double dashes.
|
|
|
|
Uses paraview=$(command -v paraview)
|
|
|
|
Equivalent options:
|
|
-touch-all -touchAll
|
|
-vtk -builtin
|
|
|
|
USAGE
|
|
exit 0 # A clean exit
|
|
}
|
|
|
|
# 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
|
|
}
|
|
|
|
#-------------------------------------------------------------------------------
|
|
|
|
# Do a nice exit to give paraview an opportunity to clean up
|
|
unset FOAM_ABORT
|
|
|
|
# Hack: change all locale to 'C' i.e. using '.' for decimal point. This is
|
|
# only needed temporarily until paraview is locale aware. (git version is
|
|
# already 2010-07)
|
|
export LC_ALL=C
|
|
|
|
# Reader extension and plugin
|
|
extension=OpenFOAM
|
|
plugin=PVFoamReader
|
|
|
|
# Parse options
|
|
unset regionName optTouch
|
|
while [ "$#" -gt 0 ]
|
|
do
|
|
case "$1" in
|
|
-h | -help*)
|
|
printHelp
|
|
;;
|
|
-block*)
|
|
extension=blockMesh
|
|
plugin=PVblockMeshReader
|
|
;;
|
|
-vtk | -built*)
|
|
extension=foam
|
|
unset plugin
|
|
;;
|
|
-case)
|
|
[ "$#" -ge 2 ] || die "'$1' option requires an argument"
|
|
cd "$2" 2>/dev/null || die "directory does not exist: '$2'"
|
|
shift
|
|
;;
|
|
-region)
|
|
[ "$#" -ge 2 ] || die "'$1' option requires an argument"
|
|
regionName=$2
|
|
shift
|
|
;;
|
|
-touch)
|
|
optTouch=true
|
|
unset plugin
|
|
;;
|
|
-touch-all | -touchAll)
|
|
optTouch=all
|
|
unset plugin
|
|
;;
|
|
-touch-proc*)
|
|
optTouch=processor
|
|
unset plugin
|
|
;;
|
|
--)
|
|
shift
|
|
break # Stop here, treat balance as paraview options
|
|
;;
|
|
--help) # Emit paraview help directly
|
|
exec paraview "$@"
|
|
echo "Error: could not exec paraview" 1>&2
|
|
exit 1 # This should not have happened
|
|
;;
|
|
--*)
|
|
break # Stop here, treat _this_ and balance as paraview options
|
|
;;
|
|
*)
|
|
die "Unknown option/argument: '$1'"
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
if [ -n "$plugin" ]
|
|
then
|
|
pluginError="Cannot use ParaView reader module library ($plugin)"
|
|
|
|
# Check if requested reader module exists
|
|
if [ -z "$PV_PLUGIN_PATH" ]
|
|
then
|
|
echo "$pluginError" 1>&2
|
|
echo "The PV_PLUGIN_PATH environment value is not set" 1>&2
|
|
elif [ -f "$PV_PLUGIN_PATH/lib${plugin}_SM.so" ]
|
|
then
|
|
unset pluginError
|
|
else
|
|
echo "$pluginError - not built?" 1>&2
|
|
cat<< NO_PLUGIN 1>&2
|
|
Consider building the reader module
|
|
cd \$WM_PROJECT_DIR/applications/utilities/postProcessing/graphics/PVReaders
|
|
./Allwclean
|
|
./Allwmake
|
|
NO_PLUGIN
|
|
fi
|
|
|
|
if [ -n "$pluginError" ]
|
|
then
|
|
# Fallback to native reader, if possible
|
|
if [ "$plugin" = PVFoamReader ]
|
|
then
|
|
echo 1>&2
|
|
echo "Continuing with builtin reader: paraFoam -vtk" 1>&2
|
|
echo 1>&2
|
|
extension=foam
|
|
else
|
|
echo 1>&2
|
|
exit 1
|
|
fi
|
|
unset plugin
|
|
fi
|
|
fi
|
|
|
|
|
|
# Check for --data=... argument
|
|
unset hasData
|
|
for i
|
|
do
|
|
case "$i" in (--data=*) hasData=true; break;; esac
|
|
done
|
|
|
|
|
|
# Get a sensible caseName from the directory name
|
|
caseName="${PWD##*/}"
|
|
caseFile="$caseName.$extension"
|
|
fvControls="system"
|
|
|
|
if [ -n "$regionName" ]
|
|
then
|
|
[ -d "constant/$regionName" ] || {
|
|
echo "FATAL ERROR: Region $regionName does not exist" 1>&2
|
|
exit 1
|
|
}
|
|
caseFile="$caseName{$regionName}.$extension"
|
|
fvControls="$fvControls/$regionName"
|
|
fi
|
|
|
|
case "${optTouch:-false}" in
|
|
all)
|
|
extension=OpenFOAM
|
|
if [ -f system/blockMeshDict ] || [ -f constant/polyMesh/blockMeshDict ]
|
|
then
|
|
touch "$caseName.blockMesh"
|
|
echo "Created '$caseName.blockMesh'" 1>&2
|
|
fi
|
|
touch "$caseName.$extension" "$caseName.foam"
|
|
echo "Created '$caseName.$extension' '$caseName.foam'" 1>&2
|
|
# Discover probable regions
|
|
for region in constant/*
|
|
do
|
|
if [ -d "$region" ] && [ -d "$region/polyMesh" ]
|
|
then
|
|
regionName="${region##*/}"
|
|
touch "$caseName{$regionName}.$extension"
|
|
echo "Created '$caseName{$regionName}.$extension'" 1>&2
|
|
fi
|
|
done
|
|
exit 0
|
|
;;
|
|
proc*)
|
|
for i in processor*
|
|
do
|
|
(
|
|
cd "$i" 2> /dev/null && touch "${caseFile%.*}#${i#processor}.$extension"
|
|
)
|
|
done
|
|
echo "Created '$caseFile' for processor directories" 1>&2
|
|
exit 0
|
|
;;
|
|
true)
|
|
touch "$caseFile"
|
|
echo "Created '$caseFile'" 1>&2
|
|
exit 0
|
|
;;
|
|
esac
|
|
|
|
|
|
# Check existence of some essential OpenFOAM files.
|
|
# If caseName appears to be a processor directory, check parent as fallback
|
|
hasFiles() {
|
|
local warn="Cannot locate OpenFOAM-format case files:"
|
|
local parent
|
|
case "$caseName" in (processor*) parent="../" ;; esac
|
|
|
|
for file
|
|
do
|
|
if [ -s "$file" ]
|
|
then
|
|
continue
|
|
elif [ -n "$parent" ] && [ -s "$parent$file" ]
|
|
then
|
|
continue
|
|
else
|
|
# Not found
|
|
[ -n "$warn" ] && echo "$warn" 1>&2
|
|
unset warn
|
|
if [ -n "$parent" ]
|
|
then
|
|
echo " $file, or $parent$file" 1>&2
|
|
else
|
|
echo " $file" 1>&2
|
|
fi
|
|
fi
|
|
done
|
|
|
|
if [ -n "$warn" ]
|
|
then
|
|
return 0 # No warnings were triggered
|
|
else
|
|
echo 1>&2 # Emit an additional separator line
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
|
|
if [ "${hasData:-false}" = true ]
|
|
then
|
|
|
|
# Has --data=.., send directly to paraview
|
|
exec paraview "$@"
|
|
echo "Error: could not exec paraview" 1>&2
|
|
exit 1 # This should not have happened
|
|
|
|
else
|
|
|
|
# Check existence of essential files
|
|
warn=false
|
|
case "$plugin" in
|
|
PVblockMeshReader)
|
|
blockMeshDict=system/blockMeshDict
|
|
if [ -f constant/polyMesh/blockMeshDict ]
|
|
then
|
|
blockMeshDict=constant/polyMesh/blockMeshDict
|
|
fi
|
|
|
|
hasFiles system/controlDict "$blockMeshDict" || warn=true
|
|
;;
|
|
|
|
PVFoamReader)
|
|
hasFiles \
|
|
system/controlDict \
|
|
"$fvControls/fvSchemes" \
|
|
"$fvControls/fvSolution" || warn=true
|
|
;;
|
|
esac
|
|
|
|
[ "${warn:-false}" = false ] || {
|
|
echo -n "Would you like to open paraview anyway <Y|n>: "
|
|
read open
|
|
case "${open:-y}" in ([Yy]*) paraview ;; esac
|
|
exit
|
|
}
|
|
|
|
# Only create/remove caseFile if it did not previously exist
|
|
[ -e "$caseFile" ] || {
|
|
trap "rm -f $caseFile 2>/dev/null; exit 0" EXIT TERM INT
|
|
touch "$caseFile"
|
|
echo "Created temporary '$caseFile'" 1>&2
|
|
}
|
|
|
|
# For now filter out any ld.so errors. Caused by non-system compiler?
|
|
paraview --data="$caseFile" "$@" 2>&1 \
|
|
| grep -F -v 'Inconsistency detected'
|
|
fi
|
|
|
|
|
|
#------------------------------------------------------------------------------
|