https://github.com/alphaparrot/ExoPlaSim
Tip revision: c4366f3657ca1c17f0da500b7940eb8f77043d20 authored by Adiv Paradise on 15 September 2020, 18:52:09 UTC
Added tunings to better-capture extant storms and avoid generating too much output
Added tunings to better-capture extant storms and avoid generating too much output
Tip revision: c4366f3
compile.sh
#!/bin/bash
#
# EXOPLASIM COMPILATION SCRIPT
#
# Usage:
# ./compile.sh -p 8 -r T21 -v 10 -n 16 -O mavx
#
#
# Options:
#
# -p: Set floating point precision. Argument should be either 4 or 8. Default: 4
#
# -r: Set resolution. Can be T21/T42/T63, or alternatively the number of latitudes.
# Default: T21
#
# -v: Set number of vertical levels. Default: 10
#
# -n: Number of processing cores (MPI threads) to use. Default: 4
#
# -t: Number of years to use in most_plasim_run script. Default: 10
#
# -O: Specify additional compiler optimization flags, like -mavx (leave out prepended
# hyphen).
#
# -d: Compile in debug mode (will produce line-number tracebacks on crash)
#
helptext=$(cat <<-END
EXOPLASIM COMPILATION SCRIPT
Usage:
./compile.sh -p 8 -r T21 -v 10 -n 16 -O mavx
Options:
-p: Set floating point precision. Argument should be either 4 or 8. Default: 4
-r: Set resolution. Can be T21/T42/T63, or alternatively the number of latitudes.
Default: T21
-v: Set number of vertical levels. Default: 10
-n: Number of processing cores (MPI threads) to use. Default: 4
-t: Number of years to use in most_plasim_run script. Default: 10
-O: Specify additional compiler optimization flags, like -mavx (leave out prepended
hyphen).
-d: Compile in debug mode (will produce line-number tracebacks on crash)
-m: Compile with Mars routines
-h: Output this text
END
)
prec=4
resolution="t21"
latitudes=32
longitudes=64
levels=10
ncpus=4
debug=0
optimization=""
nopt=0
years=10
nmars=0
while getopts "p:r:v:n:O:t:dhm" opt; do
case $opt in
p)
case $OPTARG in
4)
prec=4 ;;
8)
prec=8 ;;
single)
prec=4 ;;
double)
prec=8 ;;
\?)
echo "INVALID PRECISION. Reverting to single precision."
;;
esac
;;
r)
case $OPTARG in #for >T63, recommend 30 levels
T21)
resolution="t21"
latitudes=32
longitudes=64
;;
T42)
resolution="t42"
latitudes=64
longitudes=128
;;
T63)
resolution="t63"
latitudes=96
longitudes=192
;;
T85)
resolution="t85"
latitudes=128
longitudes=256
;;
T127)
resolution="t127"
latitudes=192
longitudes=384
;;
T170)
resolution="t170"
latitudes=256
longitudes=512
;;
32)
resolution="t21"
latitudes=32
longitudes=64
;;
64)
resolution="t42"
latitudes=64
longitudes=128
;;
96)
resolution="t63"
latitudes=96
longitudes=192
;;
128)
resolution="t85"
latitudes=128
longitudes=256
;;
192)
resolution="t127"
latitudes=192
longitudes=384
;;
256)
resolution="t170"
latitudes=256
longitudes=512
;;
\?)
resolution="t21"
latitudes=32
longitudes=64
echo "INVALID RESOLUTION PASSED! Reverting to T21."
;;
esac ;;
v)
levels=$OPTARG
;;
n)
ncpus=$OPTARG
;;
d)
debug=1
;;
t)
years=$OPTARG
;;
O)
optimization="-"$OPTARG
nopt=1
;;
h)
echo "$helptext"
exit 0
;;
m)
echo "Compiling for Mars..."
export PLAMOD=p_mars
nmars=1
;;
\?)
echo "UNRECOGNIZED ARGUMENT PASSED: "$OPTARG
;;
esac
done
echo "PRODUCING: "$optimization" -r"$prec" -o most_plasim_"$resolution"_l"$levels"_p"$ncpus".x"
executable="most_plasim_"$resolution"_l"$levels"_p"$ncpus".x"
echo "Writing resmod.f90....."
cd plasim/bld/
rm -rf *
# ! T85L30 on 16/32/64 processors
# !parameter(NLAT_ATM = 128)
# !parameter(NLEV_ATM = 30)
# !!parameter(NPRO_ATM = 16)
# !parameter(NPRO_ATM = 32)
# !!parameter(NPRO_ATM = 64)
#
#
# ! T127L30 on 16/32/64 processors
# !parameter(NLAT_ATM = 192)
# !parameter(NLEV_ATM = 30)
# !!parameter(NPRO_ATM = 32)
# !parameter(NPRO_ATM = 48) ! Does not work so well, 32 more efficient? \
#
#
#
#
# ! T170L30 on 16/32/64 processors
# !parameter(NLAT_ATM = 256)
# !parameter(NLEV_ATM = 30)
# !parameter(NPRO_ATM = 32)
# !parameter(NPRO_ATM = 64)
echo " module resmod ! generated by compile.sh ">resmod.f90
echo " parameter(NLAT_ATM = "$latitudes") ">>resmod.f90
echo " parameter(NLEV_ATM = "$levels") ">>resmod.f90
echo " parameter(NPRO_ATM = "$ncpus") ">>resmod.f90
echo " end module resmod ">>resmod.f90
echo " ">>resmod.f90
rm plasim.x
rm ../bin/$executable
rm ../run/$executable
cp -p ../src/* .
if [ "$ncpus" -gt 1 ]
then
[ ! -e MPI ] && rm -f *.o *.mod *.x
touch MPI
cp ../../most_compiler_mpi compilerargs
else
[ ! -e MPI ] && rm -f *.o *.mod *.x MPI
cp ../../most_compiler compilerargs
fi
dbgs=""
(($debug)) && dbgs='../../most_debug_options '
cp ../../most_precision_optionsx precisionargsx
if [ "$prec" -gt 4 ]
then
sed -i '1s/$/'$prec'/' precisionargsx
else
echo "">precisionargsx
fi
(($nopt)) && sed -i '3s/$/ '$optimization'/' compilerargs
cat compilerargs $dbgs../bld/precisionargsx make_plasim > makefile
echo "Writing makefile..."
echo ""
export OCEANCOUP=cpl_stub
#cat makefile
make -e
./most_snow_build$prec
./most_ice_build$prec
cp plasim.x ../bin/$executable
cp ../bin/$executable ../run/
cd ../../
(($nmars)) && cp plasim/dat/T"${resolution[@]:1}"_mars/* plasim/run/ || cp plasim/dat/T"${resolution[@]:1}"/* plasim/run/
namelist=example.nl
(($nmars)) && namelist=mars.nl
(($nmars)) && cp postprocessor/mars.nl plasim/run/
snamelist=snapshot.nl
(($nmars)) && snamelist=mars_snapshot.nl
(($nmars)) && cp postprocessor/mars_snapshot.nl plasim/run/
echo "#!/bin/bash ">plasim/run/most_plasim_run
echo "# run-script generated by compile.sh ">>plasim/run/most_plasim_run
echo "EXP=MOST # Name your experiment here ">>plasim/run/most_plasim_run
echo "[ \$# ==1 ] && cd \$1 ">>plasim/run/most_plasim_run
echo "rm -f plasim_restart ">>plasim/run/most_plasim_run
echo "rm -f Abort_Message ">>plasim/run/most_plasim_run
echo "YEAR=0 ">>plasim/run/most_plasim_run
echo "YEARS="$years" ">>plasim/run/most_plasim_run
echo "while [ \$YEAR -lt \$YEARS ] ">>plasim/run/most_plasim_run
echo "do ">>plasim/run/most_plasim_run
echo " YEAR=\`expr \$YEAR + 1\` ">>plasim/run/most_plasim_run
echo " DATANAME=\`printf '%s.%03d' \$EXP \$YEAR\` ">>plasim/run/most_plasim_run
echo " SNAPNAME=\`printf '%s_SNAP.%03d' \$EXP \$YEAR\` ">>plasim/run/most_plasim_run
echo " DIAGNAME=\`printf '%s_DIAG.%03d' \$EXP \$YEAR\` ">>plasim/run/most_plasim_run
echo " RESTNAME=\`printf '%s_REST.%03d' \$EXP \$YEAR\` ">>plasim/run/most_plasim_run
echo " SNOWNAME=\`printf '%s_SNOW.%03d' \$EXP \$YEAR\` ">>plasim/run/most_plasim_run
if [ "$ncpus" -gt 1 ]
then
MPI_RUN=$(head -n 1 most_compiler_mpi | tr "=" "\n" | tail -1)
echo " $MPI_RUN -np $ncpus $executable ">>plasim/run/most_plasim_run
else
echo " ./$executable ">>plasim/run/most_plasim_run
fi
echo " [ -e Abort_Message ] && exit 1 ">>plasim/run/most_plasim_run
echo " [ -e plasim_output ] && mv plasim_output \$DATANAME ">>plasim/run/most_plasim_run
echo " [ -e plasim_snapshot ] && mv plasim_snapshot \$SNAPNAME ">>plasim/run/most_plasim_run
echo " [[ -e burn7.x && -e "$namelist" && -e \$DATANAME ]] && ./burn7.x -n <"$namelist">burnout \$DATANAME \$DATANAME.nc ">>plasim/run/most_plasim_run
echo " [[ -e burn7.x && -e "$snamelist" && -e \$SNAPNAME ]] && ./burn7.x -n <"$snamelist">snapout \$SNAPNAME \$SNAPNAME.nc ">>plasim/run/most_plasim_run
echo " [ -e plasim_diag ] && mv plasim_diag \$DIAGNAME ">>plasim/run/most_plasim_run
echo " [ -e plasim_status ] && cp plasim_status plasim_restart ">>plasim/run/most_plasim_run
echo " [ -e plasim_status ] && mv plasim_status \$RESTNAME ">>plasim/run/most_plasim_run
echo " [ -e restart_snow ] && mv restart_snow \$SNOWNAME ">>plasim/run/most_plasim_run
echo "done ">>plasim/run/most_plasim_run
if [ -e postprocessor/burn7.x ]
then
cp postprocessor/burn7.x plasim/run/
cp postprocessor/*.nl plasim/run/
else
cd postprocessor
./build_init.sh
[ ! -e burn7.x ] && exit 1
cd ../
cp postprocessor/burn7.x plasim/run/
cp postprocessor/*.nl plasim/run/
fi