#!/bin/bash
#
shopt -s extglob                # 拡張パターンマッチング有効
 
ROOTNAME=${0/-*([0-9]).sh/}
NUMBER=${0/$ROOTNAME-/} ; NUMBER=${NUMBER/.sh}

PROGRAM=${ROOTNAME}.out
NMLFILE=${ROOTNAME}-${NUMBER}.nml

EXPNAME='bsnsq_T42L32_bench'

INPUTFILE=
#INPUTFILE=${ROOTNAME}-rst-$((${NUMBER}-1))
HSTFILE=${ROOTNAME}-${NUMBER}
RSTFILE=${ROOTNAME}-rst-${NUMBER}
LOGFILE=${ROOTNAME}-${NUMBER}.log

#TITLE="boussinesq convection (T341L48M8)"

# プロセス数
NPROC=128

# MPI コマンド
MPIRUN=mpiexec
# MPIRUN=mpiexec.hydra
MPIRUNOPTS="-n $NPROC"
#
# Fujitsu Compiler
# MPIRUN=/opt/FJSVplang/bin/mpiexec
# MPIRUNOPTS="-n $NPROC"
#
# 京大 SystemA
# MPIRUN=/usr/bin/time aprun  
# MPIRUNOPTS="-n $QSUB_PROCS -d $QSUB_THREADS -N $QSUB_PPN"

EMAIL=takepiro@kurims.kyoto-u.ac.jp                  # メールアドレス
#MAIL='mail -v'                                      # 送信メールコマンド
MAIL="mail -v -s $0"                                 # 送信メールコマンド


if [ -e $NMLFILE ]; then
    rm $NMLFILE ;
    echo "Old $NMLFILE was removed." ;
fi
cat << END_OF_DATA > $NMLFILE
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
! メッセージコントロール
!    verbose = .ture. で namelist の入力を促すメッセージが出力される.
!
 &message verbose=.false., DebugOn=.false., Output_Rank=0 /
! &message verbose=.false., DebugOn=.true. /

!
! 解像度設定
!    nm:水平最大全波数, lm:鉛直チェビシェフ最大次数
!    im: 経度方向格子点数, jm: 緯度方向格子点数, km: 動径方向格子点数
!
! &gridset nm=10,  lm=8,  im=32,   jm=16,  km=8  /
! &gridset nm=10,  lm=16, im=32,   jm=16,  km=16 /
! &gridset nm=21,  lm=10, im=64,   jm=32,  km=16 /
! &gridset nm=21,  lm=24, im=64,   jm=32,  km=24 /
! &gridset nm=21,  lm=21, im=64,   jm=32,  km=32 /
! &gridset nm=42,  lm=21, im=128,  jm=64,  km=32, npv=8  /
! &gridset nm=42,  lm=21, im=128,  jm=64,  km=32, omp=4, npv=4 /
! &gridset nm=42,  lm=48, im=128,  jm=64,  km=48 /
! &gridset nm=85,  lm=21, im=256,  jm=128, km=32, omp=1 /
! &gridset nm=85,  lm=48, im=256,  jm=128, km=64 /
! &gridset nm=85,  lm=64, im=256,  jm=128, km=64 /
! &gridset nm=170, lm=48, im=512,  jm=256, km=64, omp=1 /
! &gridset nm=170, lm=64, im=512,  jm=256, km=64 /
! &gridset nm=341, lm=48, im=1024, jm=512, km=64, omp=4, npv=1 /
! &gridset nm=341, lm=64, im=1024, jm=512, km=64, omp=4, npv=1 /
! &gridset nm=341, lm=64, im=1024, jm=512, km=64, omp=4, npv=4 /
! &gridset nm=341, lm=80, im=1024, jm=512, km=80 /
! &gridset nm=683, lm=64, im=2048, jm=1024, km=96 /

!
! 球殻内外半径設定
!   eta : 球殻内外半径比, ri : 内側球殻半径, ro: 外側球殻半径
!   eta のみ与えると自動的に ro-ri=1 となるように ro, ri が設定される. 
!
! &radius  eta=0.85 /
 &radius  eta=0.35 /

!
! 初期値設定
!    initial_file : 初期値ファイル. 空白ならば内部で初期値が与えられる
!                   (静止状態, 球殻真中に 1 点擾乱温度場)
!    initial_time : 初期値の時間
!
 &initial initial_file='$INPUTFILE', initial_time=0.0D0   /

!
!  時間積分設定
!       delta_t : 時間刻み
!       nstep   : 総計算ステップ数
!
! &tint    delta_t=1.0d-2,  nstep=10000 /
 &tint    delta_t=1.0d-2,  nstep=50000 /
! &tint    delta_t=1.0d-2,  nstep=100000 /
! &tint    delta_t=2.0d-3,  nstep=100000 /
! &tint    delta_t=2.0d-3,  nstep=250000 /

!
! 出力設定
!
!   output_mode  : 出力モードスイッチ
!                : ALL: 全て出力
!                : HST: ヒストリーのみ出力
!                : RST: リスタートのみ出力
!                : NON: ファイル出力なし
!
 &output output_mode='ALL' /
! &output output_mode='RST' /
! &output output_mode='NON' /
!
! ヒストリー出力
!
!  hst_file        : 出力ファイル名
!  title           : タイトル
!  hst_intstep     : 出力間隔ステップ数
!
 &history hst_file='$HSTFILE', title='boussinesq convection', hst_intstep=2000  /
! &history hst_file='$HSTFILE', title='boussinesq convection', hst_intstep=20 /

!
! リスタート出力
!
!   rst_file       : リスタート出力ファイル名
!   rst_intstep    : リスタート出力間隔ステップ数
!
 &restart rst_file='$RSTFILE', rst_intstep=50000 /

!
! 物理パラメター設定
!    Ra     : レイリー数
!    Pr     : プランドル数
!    Ta     : テイラー数
!
 &physics Ra=1.0d-1, Pr=1.0d0, Ekman=1.0d-3 /
! &physics Ra=0.05, Pr=1.0d-1, Ekman=3.0d-6  /

!
! 境界条件設定
!     VelBC  : 速度境界条件
!              FF : 両端自由すべり
!              FR : 上端自由すべり, 下端粘着
!              RF : 上端粘着, 下端自由すべり
!              RR : 両端粘着
!
!     TempBC : 温度擾乱境界条件(値は 0 に設定される)
!              DD : 両端温度固定
!              DN : 上端温度固定, 下端温度傾度固定
!              ND : 上端温度傾度固定, 下端温度固定
!              NN : 両端温度傾度固定
!
 &boundary VelBC='RR', TempBC='DD', 
! &boundary VelBC='FF', TempBC='DD', 
!           Temptop=0.0d0, Tempbottom=1.0D0 /
!           Temptop=0.0d0, Tempbottom=-1.66666666666666666666 /
!                             dT/dr = -1/eta at r=ri

!
! 超拡散係数設定
!     \nu=\nu_0     (n<=n0)
!     \nu=\nu_0((1+epsilon(n-n0)**2 (n>n0)
!
 &hyperdiff epsilon=0.0d-2, n0=170 /
! &hyperdiff epsilon=1.0d-2, n0=170 /
! &hyperdiff epsilon=1.0e0, n0=21 /
!
! ベンチマーク計算スイッチ
!
!     type :  内部初期値タイプ
!             P : 一点温度擾乱
!             R : ランダム温度擾乱
!             B : ベンチマーク
!     amp  :  P,R での擾乱振幅
!     seed :  R でのランダム種
!
! &inittype type='R', amp=1.0D-2, seed = 1 /
! &inittype type='P', amp=1.0D-2, seed = 1 /
 &inittype type='B', amp=1.0D-2, seed = 1 /
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
END_OF_DATA

echo Program started at `date` on `hostname` > $LOGFILE
$MPIRUN $MPIRUNOPTS $PROGRAM $NMLFILE 1>> $LOGFILE 2>&1 || true
rm $NMLFILE
echo Program ended at `date` >> $LOGFILE

# 終了時に e-mail で通知する.
#if [ -n "$EMAIL" ]; then
#    $MAIL $EMAIL < $LOGFILE
#fi
