View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0002819 | OpenFOAM | Contribution | public | 2018-01-26 07:25 | 2018-02-02 16:05 |
Reporter | FynnAschmoneit | Assigned To | henry | ||
Priority | none | Severity | feature | Reproducibility | always |
Status | resolved | Resolution | fixed | ||
Platform | GNU/Linux | OS | Ubuntu | OS Version | 14.04 |
Fixed in Version | dev | ||||
Summary | 0002819: foamMonitor to show a custom title in gnuPlot graph | ||||
Description | The issue: I am using a couple of post-processing functions during solver execution and since they write out in their respective file I run several foamMonitor scripts on these files. Some of the produced graphs look similar and I get confused and don't know which post-processing function I'm looking at, since all gnuPlot graphs are titled "Data Monitoring". The solution: The foamMonitor script is supplied with an execution option for the title of the gnuPlot graph and "Data Monitoring" is kept as the default name. See attached script. | ||||
Tags | foamMonitor | ||||
|
foamMonitor (4,885 bytes)
#!/bin/sh #------------------------------------------------------------------------------ # ========= | # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | # \\ / A nd | Copyright (C) 2015 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 # foamMonitor # # Description # Monitor data with Gnuplot from time-value(s) graphs written by OpenFOAM # e.g. by functionObjects # - requires gnuplot, gnuplot_x11 # #------------------------------------------------------------------------------ usage() { exec 1>&2 while [ "$#" -ge 1 ]; do echo "$1"; shift; done cat<<USAGE Usage: ${0##*/} [OPTION] <file> options: -h | -help print the usage -i | -idle <time> stops if <file> unchanging for <time> sec (default = 60) -l | -logscale plots data (y-axis) on log scale, e.g. for residuals -n | -name displays name as graph's title (default "Data Monitoring") -r | -refresh <time> refreshes display every <time> sec (default = 10) -y | -yrange <range> sets data (y-axis) <range>, format "[0:1]" Monitor data with Gnuplot from time-value(s) graphs written by OpenFOAM e.g. by functionObjects - requires gnuplot, gnuplot_x11 Example: foamMonitor -l postProcessing/residuals/0/residuals.dat USAGE exit 1 } plotFileHeader() { cat<<EOF set term x11 1 font "helvetica,17" linewidth 1.5 persist noraise $LOGSCALE $YRANGE set title "$TITLE" set xlabel "$XLABEL" plot \\ EOF } plotFileFooter() { cat<<EOF pause $REFRESH reread EOF } howMany() ( set -f; set -- $1; echo $# ) IDLE=60 REFRESH=10 LOGSCALE="" YRANGE="" TITLE="Data Monitoring" GNUPLOT=$(which gnuplot) ! [ "x$GNUPLOT" = "x" ] || usage "Gnuplot not installed" # parse options while [ "$#" -gt 0 ] do case "$1" in -h | -help) usage ;; -i | -idle) [ "$#" -ge 2 ] || usage "'$1' option requires an argument" [ ! -z "${2##*[!0-9]*}" ] && IDLE=$2 || usage "Argument of '$1' is not an integer: '$2'" shift 2 ;; -l | -logscale) LOGSCALE="set logscale y" shift 1 ;; -n | -name) [ "$#" -ge 2 ] || usage "'$1' option requires an argument" TITLE=$2 shift 2 ;; -r | -refresh) [ "$#" -ge 2 ] || usage "'$1' option requires an argument" [ ! -z "${2##*[!0-9]*}" ] && REFRESH=$2 || usage "Argument of '$1' is not an integer: '$2'" shift 2 ;; -y | -yrange) [ "$#" -ge 2 ] || usage "'$1' option requires an argument" YRANGE="set yrange $2" shift 2 ;; -*) usage "unknown option: '$*'" ;; *) break ;; esac done [ $# -eq 1 ] || usage "Incorrect arguments specified" [ -f $1 ] || usage "File $1 does not exit" FILE=$1 # Get KEYS from header KEYS=$(grep -E '^#' $FILE | tail -1) [ "x$KEYS" = "x" ] && KEYS="# Step" NKEYS=$(howMany "$KEYS") NCOLS=$(tail -1 $FILE | awk '{ print NF}') # With full column labels, NKEYS = NCOLS + 1, since it includes "#" # If NKEYS > NCOLS + 1, REMOVE EXCESS KEYS NCOLSPONE=$(expr $NCOLS + 1) [ "$NKEYS" -gt "$NCOLSPONE" ] && KEYS=$(echo $KEYS | cut -d" " -f1-$NCOLSPONE) NKEYS=$(howMany "$KEYS") i=0 while [ "$NKEYS" -le "$NCOLS" ] do i=$(expr $i + 1) KEYS="$KEYS data$i" NKEYS=$(howMany "$KEYS") done # Remove # and Time keys XLABEL=$(echo $KEYS | cut -d " " -f2) KEYS=$(echo $KEYS | cut -d " " -f3-) GPFILE=$(mktemp) plotFileHeader > $GPFILE i=1 for field in $KEYS do i=$(expr $i + 1) PLOTLINE="\"$FILE\" using 1:${i} with lines title \"$field\"" if [ $i -lt $NCOLS ] then PLOTLINE="$PLOTLINE, \\" fi echo $PLOTLINE >> $GPFILE done plotFileFooter >> $GPFILE touch $FILE $GNUPLOT $GPFILE & PID=$! while true do MODTIME=$(stat --format=%Y $FILE) IDLEAGO=$(expr $(date +%s) - $IDLE) test "$MODTIME" -gt "$IDLEAGO" || break sleep $REFRESH done kill -9 $PID rm $GPFILE #------------------------------------------------------------------------------ |
|
Resolved by commit be2261ca267aed8fff2363b6b60b691bc0c9689d |
Date Modified | Username | Field | Change |
---|---|---|---|
2018-01-26 07:25 | FynnAschmoneit | New Issue | |
2018-01-26 07:25 | FynnAschmoneit | File Added: foamMonitor | |
2018-01-26 07:25 | FynnAschmoneit | Tag Attached: foamMonitor | |
2018-02-02 16:05 | henry | Assigned To | => henry |
2018-02-02 16:05 | henry | Status | new => resolved |
2018-02-02 16:05 | henry | Resolution | open => fixed |
2018-02-02 16:05 | henry | Fixed in Version | => dev |
2018-02-02 16:05 | henry | Note Added: 0009246 |