#!/usr/bin/env bash
#
# plbaro_freedecay_euler_exp1.f90 用実行シェルスクリプト
#
#   スクリプト名の形式 : ${ROOTNAME}-${SEED}-${NUMBER}.sh
#
#   - ${ROOTNAME} = スクリプトファイル名から
#                   パターン /-*([0-9])-*([0-9]).sh/ を除いた名前
#   - ${SEED}     = スクリプト名の 1 つめの番号部分. 
#                   ランダム初期値の種として使われる
#   - ${NUMBER}   = スクリプト名の 2 つめの番号部分. 
#                   リスタートファイルを使って継続計算するときの番号. 
#
#   - ${ROOTNAME}.out を実行しする. 
#
#   - INPUTFILE が空の場合にはプログラム内部に組み込まれた初期値が使われる. 
#
#   - ひきつづき時間発展を継続したい場合には, ${NUMBER} を 1 つ増やした
#     スクリプト名としてコピーし, initial_time を修正し, 実行すれば良い. 
#
#   - 異なる初期値からの計算(アンサンブルメンバー)をする場合には, 
#     ${SEED} の部分の番号を別の値にしたスクリプトにコピーして実行すれば良い.
#
#   - 終了時にメールでお知らせしたいときには EMAIL に通知する先のアドレス,
#     MAIL にメールコマンドを設定する. 
#
#
# 履歴  2005/10/31 竹広真一 作成
#
#
set -e                          # エラー時スクリプトが止まる
shopt -s extglob                # 拡張パターンマッチング有効

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


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

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

INPUTFILE=''                               # 内部で初期条件設定
                                           # 初期条件リスタートファイル
#INPUTFILE= ${ROOTNAME}-${SEED}-rst-$((${NUMBER}-1)).nc 
OUTPUTFILE=${ROOTNAME}-${SEED}-${NUMBER}.nc

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

# 実験タイトル

TITLE="Free-decay turebulence of 2-dim barotropic fluid on a double-cyclic domain"


# 終了時に 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 :: km                            ! X 方向切断全波数
#  integer :: lm                            ! Y 方向切断全波数
#  integer :: im                            ! X 方向格子点数 (>3*km)
#  integer :: jm                            ! Y 方向格子点数 (>3*lm)

# &gridset km=170, lm=170, im=512, jm=512 /
# &gridset km=85, lm=85, im=256, jm=256 /
 &gridset km=42, lm=42, im=128, jm=128 /
# &gridset km=21, lm=21, im=64, jm=64 /

#----------------------------- 初期条件 -------------------------------
#
# 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= 1.0d-003,  nstep= 100       /
 &tint    delta_t= 1.0d-003,  nstep= 10000       /

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

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

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

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

#--------------------------- 物理変数設定 ----------------------------
#  real(8)            :: XLength            ! 領域の大きさ(X 方向)
#  real(8)            :: YLength            ! 領域の大きさ(Y 方向)
#  real(8)            :: Beta               ! βパラメター
#  integer            :: HVOrder            ! 超粘性の次数(1 で普通の粘性,
#                                           ! 水平ラプラシアンの階数)
#  real(8)            :: HVisc              ! 超粘性係数

 &physics XLength=6.2831853D0, YLength=6.2831853D0, 
          Beta=300.0, HVOrder=2, HVisc=4.0D-6 /
#          Beta=400.0, HVOrder=2, HVisc=4.0D-6 /

#---------------------------- 実験パラメター ----------------------------
#  integer    :: Seed               ! seed(1)に設定する種の値
#  real(8)    :: Nmin               ! 初期エネルギー分布の全波数領域域最小値
#  real(8)    :: Nmax               ! 初期エネルギー分布の全波数領域最大値
#  real(8)    :: Etotal             ! 初期平均エネルギーの値

 &initvalue Seed=$SEED, Nmin=11.0D0, Nmax=13.0D0, Etotal=1.0D0 /

######################################################################
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
