-
Notifications
You must be signed in to change notification settings - Fork 1
/
run_complete_mahti.sh
191 lines (120 loc) · 4.05 KB
/
run_complete_mahti.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
#!/bin/bash
#SBATCH --time=01:00:00
#SBATCH --job-name=run_complete
#SBATCH --output=%x_%j.out
#SBATCH --error=%x_%j.err
#SBATCH --partition=medium
#SBATCH --account=project_2001628
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=64
export OMP_NUM_THREADS=1
module load elmer/latest
module load python-data
# THIS IS A FULLY AUTOMATED BASH SCRIPT FOR RUNNING
# A CASE WITH GIVEN SET OF SOLVERS AND MESH LEVELS
# AND VISUALIZING THE RESULTS.
# USER NEEDS TO FILL THE FOLLOWING CONSTANTS:
# Define the path to the case folder
CASE_PATH=Poisson/WinkelStructured
# Define the path to the python scripts
SCRIPT_PATH=python-scripts
# Define the problem type
PROBLEM=Poisson
# Define the mesh levels to loop over
MESH_LEVELS=(1 2)
# Define the format in which figures should be saved
FORMAT=png
# Define the name and location where the scalability plot should be saved
SCALE_NAME=scalability_test
SCALE_PATH=$PWD/results/Poisson-WinkelStructured/
# Define the name and location where the timing plots should be saved
# (these will be incremented with the mesh level)
TIME_NAME=timing_test
TIME_PATH=$SCALE_PATH
# USER CAN IF WANTED CHANGE FOLLOWING CONSTANTS:
# Define the number of partitions (no need to change)
PARTITIONS=$SLURM_NPROCS
# Define the path where resulting .dat files are stored (no need to change)
RET_PATH=$PWD/$CASE_PATH/results
# Define the resulting .dat file (no need to change)
RET_FILE=f$PARTITIONS.dat
# Define the used tolerance (no need to change)
TOL=0.000001
# Define if the total times should be plotted as well (no need to change)
VIZ_TOT_TIME=false
# Remove the result files if they already exist
# rm -f $CASE_PATH/results/f$PARTITIONS.*
# Copy the valid case file into the case.sif file
# This can be commented out if there is only a single
# default case file in the folder
cp $CASE_PATH/case_all.sif $CASE_PATH/case.sif
ORG_DIR=$PWD
###################### RUN THE SCRIPTS #######################
# CHECK FOR PARTITIONINGS AND AS REQUIRED PARTITION THE MESH TO NEEDED AMOUNT
cd $CASE_PATH
# Find all folders with files of form mesh.*
MESH_DIRS=$(find . -type f -name "mesh.*" | sed -r 's|/[^/]+$||' |sort |uniq)
for mesh_dir in "${MESH_DIRS[@]}"; do
# Check if proper partitioning already exists
if [ -f "$mesh_dir/partitioning.$PARTITIONS" ]; then
continue
# Otherwise call ElmerGrid
else
ElmerGrid 2 2 $mesh_dir -partdual -metiskway $PARTITIONS
fi
done
cd $ORG_DIR
# RUN THE ELMERSOLVER
echo "Running ElmerSolver..."
for mesh_level in "${MESH_LEVELS[@]}"; do
for solver in linsys/*.sif; do
if grep -Fxq "$solver" solver-lists/$PROBLEM-Solvers.txt
then
cp $solver $CASE_PATH/linsys.sif
cd $CASE_PATH
echo
echo
echo "-----------------------------------"
echo "Starting $solver with mesh level $mesh_level"
echo
start=$(date +%s)
srun ElmerSolver case.sif -ipar 2 $mesh_level $PARTITIONS
end=$(date +%s)
echo
echo "Ending $solver with mesh level $mesh_level"
echo "Elapsed time: $(($end-$start)) s"
echo "-----------------------------------"
echo
cd $ORG_DIR
else
echo
echo "Solver $solver not recommended for given problem. Ignoring it"
echo
fi
done
done
# VISUALIZE THE RESULTS
cd $SCRIPT_PATH
echo "Plotting scalability..."
echo
save_as=$SCALE_PATH$SCALE_NAME.$FORMAT
python3 plot_scalability_bar.py -p $RET_PATH -f $RET_FILE -s $save_as -t $TOL
cd $ORG_DIR
echo "Plotting timings..."
echo
cd $SCRIPT_PATH
for mesh_level in "${MESH_LEVELS[@]}"; do
echo "-----------------------------------"
echo "Plotting timings with mesh level $mesh_level"
echo
save_as=$TIME_PATH$TIME_NAME-$mesh_level.$FORMAT
if $VIZ_TOT_TIME; then
python3 plot_times.py -p $RET_PATH -f $RET_FILE -s $save_as -t $TOL -m $mesh_level -v
else
python3 plot_times.py -p $RET_PATH -f $RET_FILE -s $save_as -t $TOL -m $mesh_level
fi
echo "-----------------------------------"
echo
done
cd $ORG_DIR
echo "DONE"