https://github.com/alphaparrot/ExoPlaSim
Raw File
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
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
back to top