Added script to help plotting different runs
This commit is contained in:
247
norne/plothelper.sh
Executable file
247
norne/plothelper.sh
Executable file
@@ -0,0 +1,247 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# needs summary.x from ert, gnuplot, and pdflatex
|
||||||
|
|
||||||
|
#Stop on first error
|
||||||
|
#set -e
|
||||||
|
|
||||||
|
#set -x
|
||||||
|
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
#Grep through this source file for the options
|
||||||
|
echo "$0 usage:" && grep " .)\ # " $0
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
OUTFILE=
|
||||||
|
DECK=
|
||||||
|
RUNS=
|
||||||
|
KEYS=
|
||||||
|
WELLS=
|
||||||
|
CLEAN_UP=
|
||||||
|
[ $# -eq 0 ] && usage
|
||||||
|
while getopts "o:d:r:v:w:ch" arg; do
|
||||||
|
case $arg in
|
||||||
|
o) # Output filename
|
||||||
|
echo "OUT ${OPTARG}"
|
||||||
|
OUTFILE=${OPTARG}
|
||||||
|
;;
|
||||||
|
d) # Deck filename
|
||||||
|
echo "DECK ${OPTARG}"
|
||||||
|
DECK=${OPTARG}
|
||||||
|
;;
|
||||||
|
r) # Individual runs to plot
|
||||||
|
echo "RUNS ${OPTARG}"
|
||||||
|
RUNS="${RUNS} ${OPTARG}"
|
||||||
|
;;
|
||||||
|
v) # Variables / keys to plot for each well (e.g., WBHP WOPR WGFR WWPR)
|
||||||
|
echo "KEYS ${OPTARG}"
|
||||||
|
KEYS="${KEYS} ${OPTARG}"
|
||||||
|
;;
|
||||||
|
w) # Wells to plot for each run (leave empty for all)
|
||||||
|
echo "Wells: ${OPTARG}"
|
||||||
|
WELLS="${WELLS} ${OPTARG}"
|
||||||
|
;;
|
||||||
|
c) # Clean up by deleting temp files
|
||||||
|
echo "Cleaning up set"
|
||||||
|
CLEAN_UP=true
|
||||||
|
;;
|
||||||
|
h) # Display help.
|
||||||
|
usage
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
if [ -z "$OUTFILE" ]; then echo "No outfile" && usage; fi
|
||||||
|
if [ -z "$DECK" ]; then echo "No deck" && usage; fi
|
||||||
|
if [ -z "$RUNS" ]; then echo "No runs" && usage; fi
|
||||||
|
if [ -z "$KEYS" ]; then echo "No keys" && usage; fi
|
||||||
|
#No wells is OK, plot all
|
||||||
|
|
||||||
|
|
||||||
|
# this requires the summary.x binary from ert
|
||||||
|
# Either
|
||||||
|
if [ ! -x "$SUMMARY_X" ]; then
|
||||||
|
SUMMARY_X=summary.x
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "`type -t \"$SUMMARY_X\"`" != "file" ]; then
|
||||||
|
echo "Could not find summary.x"
|
||||||
|
echo "Make sure summary.x is on path, or set the"
|
||||||
|
echo "environment variable SUMMARY_X"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
TEMPDIR=`mktemp -d`
|
||||||
|
CURRENTDIR=`pwd`
|
||||||
|
|
||||||
|
# Get a list of all possible wells for each deck
|
||||||
|
if [ -z "$WELLS" ]; then
|
||||||
|
for RUN in $RUNS; do
|
||||||
|
DECKNAME=$RUN/$DECK
|
||||||
|
echo "Finding wells in " $DECKNAME
|
||||||
|
|
||||||
|
# Loop over all the keys, and find wells
|
||||||
|
ALLKEYS=`$SUMMARY_X --list $DECKNAME`
|
||||||
|
for WELL_CANDIDATE in $ALLKEYS; do
|
||||||
|
KEY=`echo $WELL_CANDIDATE | grep WBHP | grep -v WBHPH`
|
||||||
|
|
||||||
|
# Only store wells
|
||||||
|
if [ "$KEY" != "" ] ; then
|
||||||
|
echo "Found $KEY"
|
||||||
|
KEY=`echo $KEY | cut -d ":" -f 2`
|
||||||
|
WELLS="$WELLS $KEY"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
# Make sure the list of wells is unique
|
||||||
|
WELLS=`echo $WELLS | tr " " "\n" | sort | uniq`
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Create a temp directory for each run
|
||||||
|
for RUN in $RUNS; do
|
||||||
|
RUNTEMPDIR=$TEMPDIR/$RUN
|
||||||
|
echo "Creating temp dir $RUNTEMPDIR"
|
||||||
|
mkdir -p "$RUNTEMPDIR"
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
# generate a data file for each well for all specified keys (opts)
|
||||||
|
for RUN in $RUNS; do
|
||||||
|
RUNTEMPDIR=$TEMPDIR/$RUN
|
||||||
|
|
||||||
|
for WELL in $WELLS ; do
|
||||||
|
GNUPLOT_OUTFILE="$RUNTEMPDIR/$WELL.gnu"
|
||||||
|
echo "Creating file $GNUPLOT_OUTFILE"
|
||||||
|
|
||||||
|
#Set options for summary.x
|
||||||
|
WELLOPTS=
|
||||||
|
for KEY in $KEYS; do
|
||||||
|
WELLOPTS="$WELLOPTS $KEY:$WELL"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Run summary.x to extract data in gnuplot-friendly format
|
||||||
|
$SUMMARY_X "$RUN/$DECK" $WELLOPTS > $GNUPLOT_OUTFILE
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
# Use Gnuplot to plot each option/variable
|
||||||
|
for WELL in $WELLS ; do
|
||||||
|
COLUMN=3 # Column 1 is days, 2 is date, then one column per option in datafiles
|
||||||
|
|
||||||
|
for KEY in $KEYS; do
|
||||||
|
#Main plot file for Gnuplot
|
||||||
|
PLOTFILE="$TEMPDIR/well-${WELL}-${KEY}.gnu"
|
||||||
|
|
||||||
|
# General Gnuplot options
|
||||||
|
echo "set terminal postscript color" > $PLOTFILE
|
||||||
|
echo "set output \"$TEMPDIR/well-${WELL}-${KEY}.eps\"" >> $PLOTFILE
|
||||||
|
echo "set xlabel \"days\"" >> $PLOTFILE
|
||||||
|
echo "set ylabel \"$KEY\"" >> $PLOTFILE
|
||||||
|
echo "set grid" >> $PLOTFILE
|
||||||
|
|
||||||
|
# Create a plot for each run (for comparison)
|
||||||
|
LINECOLOR=1
|
||||||
|
LINEWIDTH=3
|
||||||
|
FIRST_ITER=true
|
||||||
|
PLOT_COMMAND=
|
||||||
|
for RUN in $RUNS; do
|
||||||
|
RUNTEMPDIR=$TEMPDIR/$RUN
|
||||||
|
|
||||||
|
# Comma to separate lines
|
||||||
|
if [ "$PLOT_COMMAND" != "" ]; then
|
||||||
|
PLOT_COMMAND="$PLOT_COMMAND,"
|
||||||
|
LINECOLOR=`expr $LINECOLOR + 2`
|
||||||
|
else
|
||||||
|
PLOT_COMMAND="plot"
|
||||||
|
fi
|
||||||
|
|
||||||
|
title=`echo $RUN | tr _ -`
|
||||||
|
PLOT_COMMAND="$PLOT_COMMAND \"${RUNTEMPDIR}/$WELL.gnu\" \
|
||||||
|
using 1:${COLUMN} \
|
||||||
|
title \"$title\" \
|
||||||
|
with lines \
|
||||||
|
linewidth $LINEWIDTH \
|
||||||
|
linecolor $LINECOLOR"
|
||||||
|
done
|
||||||
|
echo "$PLOT_COMMAND" >> $PLOTFILE
|
||||||
|
|
||||||
|
# Run Gnuplot
|
||||||
|
gnuplot $PLOTFILE
|
||||||
|
|
||||||
|
# Move to next column/option
|
||||||
|
COLUMN=`expr $COLUMN + 1`
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Finally generate a latex-file report
|
||||||
|
PICCOUNT=1
|
||||||
|
TEXFILE="$TEMPDIR/article.tex"
|
||||||
|
echo "
|
||||||
|
\\documentclass{article}
|
||||||
|
\\usepackage{graphicx}
|
||||||
|
\\setlength{\\hoffset}{0cm}
|
||||||
|
\\setlength{\\topmargin}{0.5cm}
|
||||||
|
\\setlength{\\headsep}{0cm}
|
||||||
|
\\setlength{\\headheight}{0cm}
|
||||||
|
\\setlength{\\textheight}{23cm}
|
||||||
|
\\setlength{\\textwidth}{15.5cm}
|
||||||
|
\\setlength{\\evensidemargin}{0.48cm}
|
||||||
|
\\setlength{\\oddsidemargin}{0.0cm}
|
||||||
|
" > $TEXFILE
|
||||||
|
|
||||||
|
echo "\\begin{document}" >> $TEXFILE
|
||||||
|
for WELL in $WELLS ; do
|
||||||
|
for KEY in $KEYS; do
|
||||||
|
echo "\\begin{figure}" >> $TEXFILE
|
||||||
|
echo "\\rotatebox{270}{\\includegraphics[width=0.65\\textwidth]{well-$WELL-$KEY}}\\\\" >> $TEXFILE
|
||||||
|
echo "\\caption{$KEY of well \\textbf{$WELL}.}" >> $TEXFILE
|
||||||
|
echo "\\end{figure}" >> $TEXFILE
|
||||||
|
if [ "`expr $PICCOUNT % 2`" == "0" ] || [ ]; then
|
||||||
|
echo "\\clearpage" >> $TEXFILE
|
||||||
|
fi
|
||||||
|
PICCOUNT=`expr $PICCOUNT + 1`
|
||||||
|
done
|
||||||
|
done
|
||||||
|
echo "\\end{document}" >> $TEXFILE
|
||||||
|
|
||||||
|
LATEXOPTS="--output-directory ${TEMPDIR} --interaction=nonstopmode -jobname=article"
|
||||||
|
LATEXCMD="latex $LATEXOPTS $TEXFILE"
|
||||||
|
cd $TEMPDIR && $LATEXCMD && $LATEXCMD
|
||||||
|
dvipdf article.dvi article.pdf
|
||||||
|
cd $CURRENTDIR
|
||||||
|
OUTDIR=`dirname "${OUTFILE}"`
|
||||||
|
mkdir -p "$OUTDIR"
|
||||||
|
mv "$TEMPDIR/article.pdf" "${OUTFILE}" && echo "Created ${OUTFILE}"
|
||||||
|
|
||||||
|
|
||||||
|
# remove temporary files
|
||||||
|
if [ ! -z "$CLEAN_UP" ]; then
|
||||||
|
echo "Removing temporary files in $TEMPDIR"
|
||||||
|
find $TEMPDIR -iname '*.eps' -exec rm {} +
|
||||||
|
find $TEMPDIR -iname '*.gnu' -exec rm {} +
|
||||||
|
rm "$TEMPDIR/article.dvi" "$TEMPDIR/article.log" "$TEMPDIR/article.aux" "$TEXFILE"
|
||||||
|
for RUN in $RUNS; do
|
||||||
|
RUNTEMPDIR=$TEMPDIR/$RUN
|
||||||
|
rm -d $RUNTEMPDIR
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "Files not removed: "
|
||||||
|
find $TEMPDIR
|
||||||
|
else
|
||||||
|
echo "Files left in $TEMPDIR"
|
||||||
|
fi
|
||||||
Reference in New Issue
Block a user