#!/bin/bash # # this script figures out some run information for a Maestro test problem # by parsing through the output files # function usage() { echo echo "This routine parses the output files of a Maestro run and determines" echo "the total amount of cpu-hours, among other things, used to do the" echo "calculation." echo echo "Usage:" echo "${0} [-g|--grid_file] [-n ncpus] " echo echo " -- grid_file is used to determine the number of processors used." echo " By default, grid_file, is set to 'my_grid_file.' " echo " -- If ncpus is specified, then this number will override what " echo " would be taken from grid_file." echo echo " Note that specifying a grid_file instead of ncpus will only be" echo " accurate for a single level run." echo } if [ "$#" -eq "0" ]; then usage exit 0 fi # start of main program # get the grid_file if we need it by parsing the options grid_file="my_grid_file" n_cpus=-1 while [ "$1" != "" ]; do case $1 in -g | --grid_file) shift grid_file=$1 ;; -n ) shift n_cpus=$1 ;; *) break esac shift done # if we need a grid file, make sure it exists and then read ncpus if [ ${n_cpus} -lt 0 ]; then if [ -f "${grid_file}" ]; then # it exists and we get the number of processors n_cpus=`awk '(NR==2) {print \$NF}' ${grid_file}` else echo "File ${grid_file} is not a regular file." exit fi fi # parse the output files awk "BEGIN{ \ nmatches=0; \ total_time=0; \ ncpus= ${n_cpus} \ }; \ /Time to advance timestep/ { \ nmatches+=1; \ total_time+=\$5 \ }; \ END{ \ print \"\" print \"Number of cpus: \" ncpus; \ print \"Total time: \" total_time \" seconds\"; \ print \"Number of timesteps: \" nmatches; \ print \"Average time per timestep: \" total_time/nmatches \" seconds\"; \ print \"Total number of cpu-hours: \" total_time*ncpus/3600.0; \ print \"\" }" ${@}