Skip to content
Snippets Groups Projects
process_cells 1.92 KiB
#!/bin/bash
#
# Usage:
#  process_cells nx ny nz nprocess
#
# Description:
#  Process all the cell dumps in the current directory.

#  Outputs file per rank with the active cells identified and marked as to
#  whether they are near an edge or not. Note requires the numbers of cells
#  per dimension of the space.
#
#  Also outputs a graphic showing the fraction of active cells on edges
#  for each step.

#  Handle command-line
if test "$4" = ""; then
    echo "Usage: $0 nx ny nz nprocess"
    exit 1
fi
NX=$1
NY=$2
NZ=$3
NPROCS=$4

#  Locate script.
SCRIPTHOME=$(dirname "$0")

#  Find all files. Use version sort to get into correct order.
files=$(ls -v cells_*.dat)
if test $? != 0; then
    echo "Failed to find any cell dump files"
    exit 1
fi

#  Construct list of names need the number of ranks.
ranks=$(ls -v cells_*.dat | sed 's,cells_\(.*\)_.*.dat,\1,' | sort | uniq | wc -l)
echo "Number of ranks = $ranks"

#  Now construct a list of files ordered by rank, not step.
files=$(ls cells_*.dat | sort -t "_" -k 3,3 -n | xargs -n $ranks)

#  Need number of steps.
nfiles=$(echo $files| wc -w)
echo "Number of files = $nfiles"
steps=$(( $nfiles / $ranks + 1 ))
echo "Number of steps = $steps"

#  And process them,
echo "Processing cell dumps files..."
echo $files | xargs -P $NPROCS -n $ranks ${SCRIPTHOME}/process_cells_helper $NX $NY $NZ

#  Create summary.
grep "top cells" step*-active-cells.dat | sort -n -k 1.5 > active_cells.log

#  And plot of active cells to edge cells.
stilts plot2plane ifmt=ascii in=active_cells.log xmin=-0.1 xmax=1.1 ymin=0 ymax=$steps grid=1 \
       legend=false xpix=600 ypix=500 xlabel="Edge cells/Active cells" ylabel="Step" \
       layer1=mark x1="col9/1.0/col6" y1="index" size1=3 shading1=aux auxmap=rainbow \
       aux=col6 auxfunc=log auxlabel="Active cells" layer2=histogram x2="col9/1.0/col6" \
       color2=grey binsize2=0.01 phase2=0.5 barform2=semi_steps thick2=1 \
       out=active_cells.png

exit