forked from subotnikgroup/AFSSH_modifications
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathrun
executable file
·116 lines (106 loc) · 2.27 KB
/
run
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
#! /bin/bash
ipara=$(awk '/iparallel/{print $1}' AFSSH.inp)
iflow=$(awk '/iflow/{print $1}' AFSSH.inp)
imaxproc=$(awk '/iproc/{print $1}' AFSSH.inp)
iwait=$(awk '/iwait/{print $1}' AFSSH.inp)
crdir()
{
for((i=1;i<=$ipara;i++)); do
if [ -d $i ]; then
rm -r $i
mkdir $i
else
mkdir $i
fi
cd $i
cp ../aout .
cp ../*.inp .
cp ../sub.sh .
echo $i > ifolder.inp
njobs=$(qstat|grep amb|grep -c r)
while [ $njobs -ge $imaxproc ]
do
## wait for 2 mins and recheck status of jobs
sleep $iwait
njobs=$(qstat|grep amb|grep -c r)
done
qsub sub.sh
sleep 0.5
cd ..
done
}
avg()
{
if [ $ipara == 1 ]; then
echo "Cannot average. Not parallel job",$ipara
else
for((i=1;i<=$ipara;i++)); do
file_ra=$file_ra" $i/pop.out"
done
for((i=1;i<=$ipara;i++)); do
file_cn=$file_cn" $i/cnts.out"
done
awk '{
for(i=1;i<=NF;i++) su[FNR,i]=su[FNR,i]+$i}
END{
for(i=1;i<=FNR;i++){
for(j=1;j<=NF;j++){
su[i,j]=su[i,j]*FNR/NR
printf "%15.7f",su[i,j]
}
print ""
}
}' $file_ra > pop.out
awk '{
for(i=1;i<=NF;i++) su[FNR,i]=su[FNR,i]+$i}
END{
for(i=1;i<=FNR;i++){
for(j=1;j<=NF;j++){
su[i,j]=su[i,j]*FNR/NR
printf "%15.7f",su[i,j]
}
print ""
}
}' $file_cn > cnts.out
fi
}
variation_param()
{
awk 'NR==1{$1=2}1' AFSSH.inp>save_AFSSH.inp
while read lineno newvar dire
do
mkdir -p $dire
cd $dire
cp ../run .
cp ../sub.sh .
cp ../*.f* .
cp ../makefile .
touch mod*
awk 'NR==n{$1=x}1' n=$lineno x=$newvar ../save_AFSSH.inp>AFSSH.inp
./run
cd ..
done < variation.inp
}
if [ $iflow == 1 ]; then
### serial execution
echo "serial execution"
rm -f sub.sh.*
make
qsub sub.sh
elif [ $iflow == 2 ];then
### parallel execution
echo "parallel execution, Number of cpus = "$ipara
rm -f sub.sh.*
make
crdir
elif [ $iflow == 3 ]; then
### average for parallel execution
echo "Averaging data"
avg
elif [ $iflow == 4 ]; then
### variation to parameters
echo "Variation to parameters"
variation_param
else
echo "no matching iflow",$iflow
fi