opm-data/norne/plothelper.sh

248 lines
5.8 KiB
Bash
Executable File

#!/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