View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0003080 | OpenFOAM | Feature | public | 2018-10-01 13:51 | 2018-10-02 21:46 |
Reporter | FynnAschmoneit | Assigned To | will | ||
Priority | low | Severity | feature | Reproducibility | N/A |
Status | resolved | Resolution | fixed | ||
Platform | GNU/Linux | OS | Ubuntu | OS Version | 15.04 |
Fixed in Version | dev | ||||
Summary | 0003080: foamMonitor to plot in terminal window, e.g. for execution on server | ||||
Description | I made some minor changes to foamMonitor to use gnuplot's 'dump' output, if foamMonitor is executed with -d or -dumb option. I use this a lot to have a quick look at how my function objects outputs are evolving. Especially when OF is executed on a server this allows you to still use foamMonitor without a GUI. | ||||
Tags | No tags attached. | ||||
|
foamMonitor (5,202 bytes)
#!/bin/sh #------------------------------------------------------------------------------ # ========= | # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | # \\ / A nd | Copyright (C) 2015-2018 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 # #------------------------------------------------------------------------------ usage() { cat<<USAGE Usage: ${0##*/} [OPTION] <file> options: -help | -h print the usage -dumb | -d uses gnuplot's 'dump' terminal (default x11) -idle | -i <time> stops if <file> unchanging for <time> sec (default 60s) -logscale | -l plots data (y-axis) on log scale, e.g. for residuals -refresh | -r <time> refreshes display every <time> sec (default 10s) -title | -t <title> set the graph title (default "Data Monitoring") -yrange | -y <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 Example: foamMonitor -l postProcessing/residuals/0/residuals.dat USAGE } error() { exec 1>&2 while [ "$#" -ge 1 ]; do echo "$1"; shift; done usage exit 1 } plotFileHeader() { cat<<EOF set term $gpterminal $logscale $yrange set title "$title" set xlabel "$xlabel" plot \\ EOF } plotFileFooter() { cat<<EOF pause $refresh reread EOF } howMany() ( echo "$1" | awk '{ print NF }' ) #howMany() ( echo "$1" | set -f; set -- $1; echo $# ) isInteger() { [ ! -z "${1##*[!0-9]*}" ] && echo "$1" && return 0 } idle=60 refresh=10 logscale="" yrange="" title="Data Monitoring" gpterminal='x11 1 font "helvetica,17" linewidth 1.5 persist noraise' command -v gnuplot >/dev/null 2>&1 || error "Gnuplot not installed" # parse options while [ "$#" -gt 0 ] do case "$1" in -h | -help) usage && exit 0 ;; -d | -dumb) gpterminal='dumb' shift 1 ;; -i | -idle) [ "$#" -ge 2 ] || error "'$1' option requires an argument" idle=$(isInteger "$2") || error "Argument of '$1' is not an integer: '$2'" shift 2 ;; -l | -logscale) logscale="set logscale y" shift 1 ;; -r | -refresh) [ "$#" -ge 2 ] || error "'$1' option requires an argument" refresh=$(isInteger "$2") || error "Argument of '$1' is not an integer: '$2'" shift 2 ;; -t | -title) [ "$#" -ge 2 ] || usage "'$1' option requires an argument" title=$2 shift 2 ;; -y | -yrange) [ "$#" -ge 2 ] || error "'$1' option requires an argument" yrange="set yrange $2" shift 2 ;; -*) error "unknown option: '$*'" ;; *) break ;; esac done [ $# -eq 1 ] || error "Incorrect arguments specified" [ -f "$1" ] || error "File $1 does not exit" file=$1 # Get keys from header keys=$(grep -E '^#' "$file" | tail -1) [ "x$keys" = "x" ] && keys="# Step" n_keys=$(howMany "$keys") n_cols=$(tail -1 "$file" | awk '{ print NF }') # With full column labels, n_keys = n_cols + 1, since it includes "#" # If n_keys > n_cols + 1, REMOVE EXCESS keys n_cols_pone=$(( n_cols + 1 )) [ "$n_keys" -gt "$n_cols_pone" ] && \ keys=$(echo "$keys" | cut -d" " -f1-$n_cols_pone) n_keys=$(howMany "$keys") i=0 while [ "$n_keys" -le "$n_cols" ] do i=$(( i + 1 )) keys="$keys data$i" n_keys=$(howMany "$keys") done # Remove # and Time keys xlabel=$(echo "$keys" | cut -d " " -f2) keys=$(echo "$keys" | cut -d " " -f3-) gp_file=$(mktemp /tmp/tmp.XXXXXX) plotFileHeader > "$gp_file" i=1 for field in $keys do i=$(( i + 1 )) plot_line="\"$file\" using 1:${i} with lines title \"$field\"" if [ $i -lt "$n_cols" ] then plot_line="$plot_line, \\" fi echo "$plot_line" >> "$gp_file" done plotFileFooter >> "$gp_file" touch "$file" gnuplot "$gp_file" & pid=$! while true do mod_time=$(stat --format=%Y "$file") idle_ago=$(( $(date +%s) - idle )) test "$mod_time" -gt "$idle_ago" || break sleep "$refresh" done kill -9 $pid rm "$gp_file" #------------------------------------------------------------------------------ |
|
Agreed. This is useful. Equivalent changes have been pushed to dev as commit 80df5420. The argument I've gone for is "-ascii" or "-a". The name "-dumb" isn't terribly descriptive. We are wrapping gnuplot, so there's the option of something a little more usable. I've also added a "-size"/"-s" argument which I can be used for enlarging the ascii image, which is particularly useful when you are looking at multiple lines (e.g., residuals). This argument can be used with x11, too. |
Date Modified | Username | Field | Change |
---|---|---|---|
2018-10-01 13:51 | FynnAschmoneit | New Issue | |
2018-10-01 13:51 | FynnAschmoneit | File Added: foamMonitor | |
2018-10-02 21:46 | will | Assigned To | => will |
2018-10-02 21:46 | will | Status | new => resolved |
2018-10-02 21:46 | will | Resolution | open => fixed |
2018-10-02 21:46 | will | Fixed in Version | => dev |
2018-10-02 21:46 | will | Note Added: 0010080 |