#!/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 OpenCFD Ltd. #------------------------------------------------------------------------------- # 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 . # # Script # paraFoam # # Description # start paraview with the OpenFOAM libraries # # Note # combining -block or -builtin options with the -region option yields # undefined behaviour #------------------------------------------------------------------------------ usage() { exec 1>&2 while [ "$#" -ge 1 ]; do echo "$1"; shift; done cat< specify alternative case directory, default is the cwd -region specify alternative mesh region -touch only create the file (eg, .blockMesh, .OpenFOAM, etc) -touchAll create .blockMesh, .OpenFOAM files (and for all regions) -vtk | -builtin use VTK builtin OpenFOAM reader (uses .foam extension) -help print the usage Paraview options start with a double dashes. * start paraview with the OpenFOAM libraries paraview=$(command -v paraview) USAGE exit 1 } # We want to do nice exit when running paraview to give paraview opportunity # to clean up unset FOAM_ABORT unset regionName optTouch # 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 while [ "$#" -gt 0 ] do case "$1" in -h | -help) usage ;; -block | -blockMesh) extension=blockMesh plugin=PVblockMeshReader shift ;; -builtin | -vtk) extension=foam unset plugin shift ;; -case) [ "$#" -ge 2 ] || usage "'$1' option requires an argument" cd "$2" 2>/dev/null || usage "directory does not exist: '$2'" shift 2 ;; -region) [ "$#" -ge 2 ] || usage "'$1' option requires an argument" regionName=$2 shift 2 ;; -touch) optTouch=true unset plugin shift ;; -touchAll) optTouch=all unset plugin shift ;; --) shift break # Stop here, treat balance as paraview options ;; --*) break # Stop here, treat this and balance as paraview options ;; *) usage "unknown option/argument: '$1'" ;; esac done # If a reader module is needed, check that it exists [ -z "$plugin" -o -f $PV_PLUGIN_PATH/lib${plugin}_SM.so ] || { cat<< BUILDREADER 1>&2 ERROR: ParaView reader module library ($plugin) does not exist Please build the reader module before continuing: cd \$WM_PROJECT_DIR/applications/utilities/postProcessing/graphics/PVReaders ./Allwclean ./Allwmake BUILDREADER # Fallback to native reader, if possible if [ "$extension" = OpenFOAM ] then extension=foam echo "Using the native VTK/OpenFOAM reader instead" 1>&2 else exit 1 fi } # Check for --data=... argument hasDataArg() { hasData=false while [ "$#" -gt 0 ] do case "$1" in (--data=*) hasData=true break ;; esac shift done } hasDataArg $@ # 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 -o -f constant/polyMesh/blockMeshDict ] then touch "$caseName.blockMesh" echo "Created '$caseName.blockMesh'" 1>&2 fi touch "$caseName.$extension" echo "Created '$caseName.$extension'" 1>&2 # Discover probable regions for region in constant/* do if [ -d $region -a -d $region/polyMesh ] then regionName=${region##*/} touch "$caseName{$regionName}.$extension" echo "Created '$caseName{$regionName}.$extension'" 1>&2 fi done 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" -a -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 "$@" else # Check existence of essential files warn=false case $extension in blockMesh) blockMeshDict=system/blockMeshDict if [ -f constant/polyMesh/blockMeshDict ] then blockMeshDict=constant/polyMesh/blockMeshDict fi hasFiles system/controlDict $blockMeshDict || warn=true ;; OpenFOAM) hasFiles \ system/controlDict \ $fvControls/fvSchemes \ $fvControls/fvSolution || warn=true ;; esac [ "${warn:-false}" = false ] || { echo -n "Would you like to open paraview anyway : " read open case "${open:-y}" in ([Yy]*) paraview ;; esac exit } # Only create/remove caseFile if it didn't already 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 \ | fgrep -v 'Inconsistency detected by ld.so' fi #------------------------------------------------------------------------------