From 7064d01cfe6229f128dc65807114c0702c7ed3ce Mon Sep 17 00:00:00 2001 From: "Peter W. Draper" <p.w.draper@durham.ac.uk> Date: Tue, 14 Nov 2017 14:51:32 +0000 Subject: [PATCH] Finalise scripts for processing cells dumps so that the edges of partitions can be studied --- examples/analyse_dump_cells.py | 35 ++++++++++++++++++++-------------- examples/process_cells | 35 +++++++++++++++++++++++----------- examples/process_cells_helper | 1 + 3 files changed, 46 insertions(+), 25 deletions(-) diff --git a/examples/analyse_dump_cells.py b/examples/analyse_dump_cells.py index 6935189c30..3140e79956 100755 --- a/examples/analyse_dump_cells.py +++ b/examples/analyse_dump_cells.py @@ -33,6 +33,16 @@ import numpy as np import sys import pandas +xcol = 0 +ycol = 1 +zcol = 2 +xwcol = 3 +ywcol = 4 +zwcol = 5 +localcol = 18 +supercol = 15 +activecol = 16 + # Command-line arguments. if len(sys.argv) < 5: print "usage: ", sys.argv[0], " nx ny nz cell1.dat cell2.dat ..." @@ -48,28 +58,27 @@ tcount = 0 for i in range(4, len(sys.argv)): # Read the file. - #data = pl.loadtxt(sys.argv[i]) - data = pandas.read_csv(sys.argv[i], sep="\s+").values + data = pl.loadtxt(sys.argv[i]) #print data - # Select cells that are on the current rank and are top-level. - rdata = data[data[:,16] == 1] - tdata = rdata[rdata[:,9] == 0] + # Select cells that are on the current rank and are super cells. + rdata = data[data[:,localcol] == 1] + tdata = rdata[rdata[:,supercol] == 1] # Separation of the cells is in data. - xwidth = tdata[0,3] - ywidth = tdata[0,4] - zwidth = tdata[0,5] + xwidth = tdata[0,xwcol] + ywidth = tdata[0,ywcol] + zwidth = tdata[0,zwcol] # Fill space nx, ny,n nz with all toplevel cells and flag their active # state. space = np.zeros((nx,ny,nz)) actives = [] for line in tdata: - ix = int(np.rint(line[0] / xwidth)) - iy = int(np.rint(line[1] / ywidth)) - iz = int(np.rint(line[2] / zwidth)) - active = int(line[14]) + ix = int(np.rint(line[xcol] / xwidth)) + iy = int(np.rint(line[ycol] / ywidth)) + iz = int(np.rint(line[zcol] / zwidth)) + active = int(line[activecol]) space[ix,iy,iz] = 1 + active tcount = tcount + 1 if active == 1: @@ -110,8 +119,6 @@ for i in range(4, len(sys.argv)): allactives.extend(actives) - - print "# top cells: ", tcount, " active: ", len(allactives), " on edge: ", onedge sys.exit(0) diff --git a/examples/process_cells b/examples/process_cells index a9c72e4a09..eead457238 100755 --- a/examples/process_cells +++ b/examples/process_cells @@ -1,20 +1,27 @@ #!/bin/bash # # Usage: -# process_cells nprocess +# process_cells nx ny nz nprocess # # Description: -# Process all the cell dumps in the current directory +# 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. # -# Outputs file per rank with the active cells identified and marked -# as to whether they are near an edge or not. +# Also outputs a graphic showing the fraction of active cells on edges +# for each step. # Handle command-line -if test "$1" = ""; then - echo "Usage: $0 nprocess" +if test "$4" = ""; then + echo "Usage: $0 nx ny nz nprocess" exit 1 fi -NPROCS=$1 +NX=$1 +NY=$2 +NZ=$3 +NPROCS=$4 # Locate script. SCRIPTHOME=$(dirname "$0") @@ -33,19 +40,25 @@ 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 4) +# 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 4 /bin/bash -c "${SCRIPTHOME}/process_cells_helper 20 20 20 \$0 \$1 \$2 \$3" +#echo $files | xargs -P $NPROCS -n 4 /bin/bash -c "${SCRIPTHOME}/process_cells_helper $NX $NY $NZ \$0 \$1 \$2 \$3" # Create summary. grep "top cells" step*-active-cells.dat | sort -h > 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=-100 ymax=2200 grid=1 \ +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*7" size1=3 shading1=aux auxmap=rainbow \ + 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 weight2=30 thick2=1 \ + color2=grey binsize2=0.01 phase2=0.5 barform2=semi_steps thick2=1 \ out=active_cells.png exit diff --git a/examples/process_cells_helper b/examples/process_cells_helper index 7862e7def0..a96bdba0de 100755 --- a/examples/process_cells_helper +++ b/examples/process_cells_helper @@ -6,6 +6,7 @@ SCRIPTHOME=$(dirname "$0") step=$(echo $4|sed 's,cells_\(.*\)_\(.*\).dat,\2,') +echo "${SCRIPTHOME}/analyse_dump_cells.py $* > step${step}-active-cells.dat" ${SCRIPTHOME}/analyse_dump_cells.py $* > step${step}-active-cells.dat exit -- GitLab