#!/usr/bin/env bash
#
# spshallow-zd_rn4cn_geoadj.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}-${SEED}-${NUMBER}.nml  # NAMELIST ファイル
LOGFILE=${ROOTNAME}-${SEED}-${NUMBER}.log  # メッセージ出力ログファイル

#INPUTFILE= ${ROOTNAME}-${SEED}-rst-$((${NUMBER}-1)).nc 
INPUTFILE=''

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

# 実験タイトル

TITLE="Free decay turbulence of shallow water 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=.false.          ! 出力メッセージレベル
! logical :: DebugOn=.false.          ! デバッグ出力コントロール

 &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= 1.00D-2,  nstep= 10000     /

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

 &history  hst_file='$HSTFILE', hst_intstep= 5000, title='$TITLE' /

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

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

!--------------------------- 物理変数設定 ----------------------------
!
!  real(8) :: Radius    ! 惑星半径
!  real(8) :: Omega     ! 回転角速度
!  real(8) :: Alpha     ! 回転軸方向(極との角度,deg.)
!  real(8) :: Grav      ! 重力加速度
!  real(8) :: Hbar      ! 平均水深
!  integer :: HVOrder   ! 超粘性の次数
!                       ! (水平ラプラシアンの階数)
!  real(8) :: HVisc     ! 超粘性係数
!  integer :: HDOrder   ! 超拡散の次数
!                       ! (水平ラプラシアンの階数)
!  real(8) :: HDiff     ! 超拡散係数
!  ! 20150715 散逸過程用に追加
!  real(8) :: TauRD     ! レイリー摩擦の時定数
!  real(8) :: TauNC     ! ニュートン冷却の時定数
!  ! 20150714 渦度強制用に追加
!  real(8) :: epsilon_Forcing               ! 強制のエネルギー注入率
!  integer :: n_Forcing, delta_n            ! 強制の中心波数, 強制の波数幅

 &physics  Radius=1.0D0, Omega=6.28318530718, Alpha=0.0D0, 
           Grav=4.21D2, Hbar = 3.75D-3, 
           HVOrder=4, HVisc=1.4D-17, HDOrder=4, HDiff=1.4D-17,
           TauRD=1.0D30, TauNC=0.25D2,
           epsilon_Forcing=5.0D-7, n_Forcing=42, delta_n=4 /
 

!---------------------------- 実験パラメター ----------------------------
!
!  integer    :: seed            ! seed(1)に設定する種の値
!  integer    :: nzero           ! 初期エネルギースペクトル分布のパラメタ
!  integer    :: gamma           ! 初期エネルギースペクトル分布のパラメタ
!  real(8)    :: Etotal          ! 初期全エネルギーの値
!  character(len=10) :: disttype ! 初期エネルギー分布のタイプ
!                                ! (YIHY2002/YY1993)
!  character(len=4)  :: fieldtyp ! 初期場の種類(VOR/DIV/HSFC)

 &initvalue seed=$SEED, nzero=50, gamma=100, Etotal=0.0D0, 
            disttype='YIHY2002', fieldtype='HSFC'     /


!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
END_OF_DATA

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

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