#!/usr/bin/env bash
#
# baro_abcn_zonalflow.f90 用実行シェルスクリプト
#
#   - ${ROOTNAME} = スクリプトファイル名からパターン /-[0-9].sh/ を除いた名前
#   - ${NUMBER}   = スクリプトファイル名から ${ROOTNAME}-[0-9].sh の番号部分
#
#   - ${ROOTNAME}.out を実行しする. 出力ファイルは ${ROOTNAME}-${NUMBER}.nc
#
#   - INPUTFILE が空の場合にはプログラム内部に組み込まれた初期値が使われる. 
#
#   - ひきつづき時間発展を継続したい場合には, ${NUMBER} を 1 つ増やした
#     スクリプト名としてコピーし, initial_time を修正し, 実行すれば良い. 
#
#   - 終了時にメールでお知らせしたいときには EMAIL に通知する先のアドレス,
#     MAIL にメールコマンドを設定する. 
#
#
# 履歴  2005/04/05 竹広真一 作成
#       2005/07/21 竹広真一 baro_abcn_bench-1.sh を改造
#       2005/09/10 竹広真一 新規約に従い変更
#       2005/10/02 竹広真一 コメント強化
#
#
set -e                          # エラー時スクリプトが止まる
shopt -s extglob                # 拡張パターンマッチング有効

TIMECOMMAND=time                # 時間計測コマンド

ROOTNAME=${0/-*([0-9]).sh/}
NUMBER=${0/$ROOTNAME-/} ; NUMBER=${NUMBER/.sh}

PROGRAM=${ROOTNAME}.out                    # メインプログラム
NMLFILE=${ROOTNAME}.nml			   # NAMELIST ファイル(変更不可)
LOGFILE=${ROOTNAME}-${NUMBER}.log	   # メッセージ出力ログファイル

INPUTFILE=   # ${ROOTNAME}-rst-$((${NUMBER}-1)).nc   # 入力データファイル
OUTPUTFILE=${ROOTNAME}-${NUMBER}.nc		     # 出力データファイル
RSTFILE=${ROOTNAME}-rst-${NUMBER}.nc                 # リスタートデータファイル

# 実験タイトル

TITLE="Stability of zonal flows of 2-dim barotropic fluid on a rotating sphere"


# 終了時に e-mail で通知する場合, 以下をコメントアウト

#EMAIL=takepiro@gfd-dennou.org                  # メールアドレス
#MAIL="rsh silicon mailx -s '$TITLE'"           # 送信メールコマンド

if [ -e $NMLFILE ]; then
    rm $NMLFILE ;
    echo "Old $NMLFILE was removed." ; 
fi
cat << END_OF_DATA > $NMLFILE
#######################################################################
#
#----------------------- メッセージレベル設定 ------------------------
#
# logical :: Verbose    ! 冗長なメッセージ出力 On/Off
# logical :: DebugOn    ! デバッグメッセージ On/Off

 &message Verbose=.false., DebugOn=.false. / 

#---------------------------- 解像度設定 -----------------------------
#
# integer :: nm         ! (三角形)切断全波数
# integer :: im         ! 経度方向格子点数 (>3*nm+1)
# integer :: jm         ! 緯度方向格子点数 (>3*nm/2)

# &gridset nm=10,  im=32,   jm=16 /
 &gridset nm=21,  im=64,   jm=32 /
# &gridset nm=42,  im=128,  jm=64 / 
# &gridset nm=85,  im=256,  jm=128 / 
# &gridset nm=170, im=512,  jm=256 / 
# &gridset nm=341, im=1024, jm=512 / 

#----------------------------- 初期条件 -------------------------------
#
# character(len=100) :: initial_file   ! 初期値データファイル名
#                                      ! (空なら内部で初期値を計算)
# real               :: initial_time   ! 初期時刻

 &initial initial_file='$INPUTFILE', initial_time= 0.0   /

#------------------------------ 時間積分 ------------------------------
#
# real(8) :: delta_t          ! 時間積分刻み
# integer :: nstep            ! 時間積分ステップ数

 &tint    delta_t= 5.0d-004,  nstep= 10000       /

#------------------------------ 出力設定 ------------------------------
#
#  character(len=100) :: hst_file           ! ヒストリーファイル名
#  character(len=100) :: title              ! タイトル
#  integer            :: hst_intstep        ! ヒストリー出力間隔ステップ数

 &history  hst_file='$OUTPUTFILE', hst_intstep= 200, title='$TITLE' /

#------------------------ リスタート出力設定 --------------------------
#
#  character(len=100) :: rst_file           ! リスタート出力ファイル名
#  integer            :: rst_intstep        ! リスタート出力間隔ステップ数

 &restart  rst_file='$RSTFILE', rst_intstep=5000 /

#--------------------------- 物理変数設定 ----------------------------
#
#  real(8)   :: Radius             ! 球の半径
#  real(8)   :: Omega              ! 回転角速度
#  integer   :: HVOrder            ! 超粘性の次数(1 で普通の粘性,
#                                  ! 水平ラプラシアンの階数)
#  real(8)   :: HVisc              ! 超粘性係数

 &physics  Radius=1.0D0, Omega=100.0D0, HVOrder=8, HVisc=1.0D-21 / 

#---------------------------- 実験パラメター ----------------------------
#
# integer :: n                      ! 基本流の水平全波数
# real(8) :: vor_amplitude          ! 渦度振幅
# real(8) :: noise_amplitude        ! 微小ホワイトノイズの振幅
# integer :: seed                   ! seed(1)に設定するランダム種の値

 &initvor n=3, vor_amplitude=100.0, noise_amplitude=1.0d-6, seed=$NUMBER /

######################################################################
END_OF_DATA

echo Program started at `date` > $LOGFILE
($TIMECOMMAND $PROGRAM) 1>> $LOGFILE 2>&1 || true
rm $NMLFILE
echo Program ended at `date` >> $LOGFILE

# 終了時に e-mail で通知する場合, 以下をコメントアウト
#$MAIL $EMAIL < $LOGFILE
