-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathslurm_vilma3d-pism.cmd
executable file
·120 lines (91 loc) · 3.8 KB
/
slurm_vilma3d-pism.cmd
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
#!/bin/bash
#SBATCH --qos=medium
#SBATCH --job-name=vilmapism_def3d_dt100_it1
#SBATCH --account=pism
#SBATCH --output=./log-vilmapism-%j.out
#SBATCH --error=./log-vilmapism-%j.err
#SBATCH --mail-type=END,FAIL
#SBATCH [email protected]
#SBATCH --time=6-22:59:00
#SBATCH --constraint=haswell,tasksmax
#SBATCH --exclusive
#SBATCH --no-requeue
### PISM #################################################
#SBATCH --ntasks=64
#SBATCH --tasks-per-node=16
#SBATCH packjob
### VILMA3d and python coupler ###########################
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=16
#export OMP_NUM_THREADS=16
#export KMP_AFFINITY=verbose,granularity=thread,compact,1
#export SLURM_CPUS_PER_TASK=$OMP_NUM_THREADS
export CPUS_PER_TASK=16
#echo coupler:
#echo $SLURM_NTASKS
#echo $SSLURM_CPUS_PER_TASK
# Some attributes are inherited (e.g. the second invocation gets the same 5 minute timelimit)
# https://slurm.schedmd.com/heterogeneous_jobs.html
###########################################################################################
# specify iteration of initial bed elevation (topg) correction
it=1
# specify coupling time steps
timeint=.1
ys=-246.0
ye=0
# run coupler ##########################################################################################################
# prepare coupler
srun --pack-group=1 python run_coupler.py -m "prepare" --dt=${timeint} -ys ${ys} -ye ${ye} -it ${it} --cpupertask=${CPUS_PER_TASK}
export LC_NUMERIC="en_US.UTF-8"
pad=1000
yend=$( bc <<<"$ye - $timeint" )
for btime in $(seq $ys $timeint $yend)
do
etime=$( bc <<<"$btime + $timeint" )
couplingint=`echo "$timeint*1000.0" | bc -l`
echo $btime $etime $timeint $couplingint
# PISM
pismstarttime=$(date +%s)
/bin/bash run_pism_step.sh ${SLURM_NTASKS} ${couplingint} ${it} >> pism/output/out_paleo_16km.out
pismendtime=$(date +%s)
# PISM2VILMA
srun --pack-group=1 python run_coupler.py -m "pism2vilma" -t ${timeint} -ys ${btime} -ye ${etime} -it ${it} --cpupertask=${CPUS_PER_TASK}
# VILMA
vilmastarttime=$(date +%s)
/bin/tcsh run_vilma3d_step.cli ${btime} ${etime} ${CPUS_PER_TASK}
vilmaendtime=$(date +%s)
# VILMA2PISM
srun --pack-group=1 python run_coupler.py -m "vilma2pism" -t ${timeint} -ys ${btime} -ye ${etime} -it ${it} --cpupertask=${CPUS_PER_TASK}
endstep=$(date +%s)
# write performance
echo "STEP $btime - $etime kyr..." >> ./log-time.out
echo "PISM $(($pismendtime - $pismstarttime)) seconds..." >> ./log-time.out
echo "PISM2VILMA $(($vilmastarttime - $pismendtime)) seconds...">> ./log-time.out
echo "VILMA $(($vilmaendtime - $vilmastarttime)) seconds...">> ./log-time.out
echo "VILMA2PISM $(($endstep - $vilmaendtime)) seconds..." >> ./log-time.out
echo "TOTAL STEP $(($endstep - $pismstarttime)) seconds..." >> ./log-time.out
echo >> ./log-time.out
# check whether required inputs for next coupling step are available
# zfill etime in output name #########
if (( $(echo "$etime < 0.0" |bc -l) )); then
e=$( bc <<<"$pad - $etime" )
pismout="pism/results/pism2vilma-${e#?}-0.nc"
pismres="pism/results/paleo-${e#?}-0.nc"
vilmaout="out/vilma2pism-${e#?}-0.nc"
else
e=$( bc <<<"$pad*10 + $etime" )
#echo $etime "pism2vilma${e#?}-0.nc"
pismout="pism/results/pism2vilma${e#?}-0.nc"
pismres="pism/results/paleo${e#?}-0.nc"
vilmaout="out/vilma2pism${e#?}-0.nc"
fi
# check if outputfiles exist ##########
if [ ! -f ${pismout} ]; then
echo "No PISM output file ${pismout}"
break;
fi
if [ ! -f ${vilmaout} ]; then
echo "No VILMA output file ${vilmaout}"
break;
fi
done