非静力学モデル deepconv/arare.
program arare
!
!非静力学モデル deepconv/arare.
!
!----- モジュール読み込み ------
!----- 型宣言, 文字列処理 ----
use dc_types, only : STRING, DP
!----- メッセージ出力 ------
use dc_message, only: MessageNotify
!----- 管理モジュール -----
! 化学量計算モジュール
! 化学量計算モジュール
use ChemCalc, only: ChemCalc_init
use chemdata, only: chemdata_init
! 入出力ファイル名管理モジュール
use fileset_3d, only : fileset_init, InitFile
! コマンドライン引数解釈
use argset, only : argset_init
! 時間管理モジュール
use timeset, only : timeset_init, NstepLong, NstepShort, DelTimeLong, DelTimeShort, NstepDisp
! 格子点管理モジュール
use gridset_3d, only : gridset_init, DimXMin, DimXMax, DimYMin, DimYMax, DimZMin, DimZMax, SpcNum
! 基本場設定モジュール
use basicset_3d, only : basicset_init, xyz_DensBasicZ, xyz_PotTempBasicZ, xyz_VelSoundBasicZ
! 積算値管理モジュール
use StorePotTemp_3d, only : StorePotTemp_init, StorePotTempClean, StorePotTempCond
! 湿潤ルーチン設定モジュール
use moistset, only: moistset_init
!----- 下請けモジュール -----
! 数値摩擦計算モジュール
use damping_3d, only : damping_init, xyz_DampSponge, pyz_DampSponge, xyr_DampSponge, xqz_DampSponge
! 時間積分フィルターモジュール
use timefilter_3d, only : AsselinFilter
! 境界条件適用モジュール
use xyz_bc_module, only : BoundaryXCyc_xyz, BoundaryYCyc_xyz, BoundaryZSym_xyz, BoundaryZCyc_xyz, BoundaryXCyc_pyz, BoundaryYCyc_pyz, BoundaryZSym_pyz, BoundaryZCyc_pyz, BoundaryXCyc_xqz, BoundaryYCyc_xqz, BoundaryZSym_xqz, BoundaryZCyc_xqz, BoundaryXCyc_xyr, BoundaryYCyc_xyr, BoundaryZSym_xyr, BoundaryZCyc_xyr, BoundaryZAsym_xyr
! CFL 条件確認モジュール
use cflcheck_3d, only : CFLCheckTimeShort, CFLCheckTimeLongVelX, CFLCheckTimeLongVelY, CFLCheckTimeLongVelZ
! 負の湿潤量の補填計算モジュール
!use fillnegative, only : FillNegative_init, xza_FillNegative_xza
!----- 入出力モジュール -----
! リスタートファイル入出力モジュール
use RestartFileIO_3d, only : ReStartFile_Open, ReStartFile_OutPut, ReStartFile_Close, ReStartFile_Get
! ヒストリファイル入出力モジュール
use HistoryFileIO_3d, only : HistoryFile_Open, HistoryFile_OutPut, HistoryFile_Close
!----- 力学過程 -----
! 力学過程計算用関数モジュール
use DynFunc_3d, only : xyz_AdvScalar, xyz_AdvKm, pyz_AdvVelX, xqz_AdvVelY, xyr_Buoy, xyr_AdvVelZ, pyz_GradPi, xqz_GradPi
! 力学過程陰解法計算用関数モジュール
use DynImpFunc_3d, only : xyz_Exner_init, xyz_Exner, xyr_GradPi
!----- 物理過程 -----
! 数値拡散計算用モジュール
use NumDiffusion_3d, only : NumDiffusion_Init, xyz_NumDiffScalar, xyz_NumDiffKm, pyz_NumDiffVelX, xqz_NumDiffVelY, xyr_NumDiffVelZ
! 乱流拡散計算用モジュール
use Turbulence_3d, only : Turbulence_Init, xyz_BuoyKm, xyz_TurbScalar, xyza_TurbScalar, pyz_TurbVelX, xyr_TurbVelZ , xyz_ShearKm , xyz_DispKm, xyz_DispHeat , xqz_TurbVelY , EddyViscosity
! 放射強制計算用モジュール
use Radiation_3d, only : Radiation_init, xyz_RadHeatConst, xyz_NewtonCool
! 地表フラックス計算用モジュール
use HeatFlux_3d, only : xyz_HeatFluxBulk, pyz_MomFluxBulk, xqz_MomFluxBulk
! 湿潤飽和調節法計算用モジュール
!use MoistAdjust, only : MoistAdjustSvapPress, MoistAdjustNH4SH
! 雲物理パラメタリゼーション
!use WarmRainPrm, only : WarmRainPrm_Init, xz_Rain2GasHeat, xza_Rain2Gas, &
! & xza_Rain2GasNH4SH, xz_Rain2GasHeatNH4SH, &
! & xza_Cloud2Rain, xza_FallRain
! 湿潤気塊の浮力計算用モジュール
!use MoistBuoyancy,only : MoistBuoy_Init, xz_BuoyMoistKm, xr_BuoyMolWt, &
! & xr_BuoyDrag
! 断熱上昇気塊の温度減率計算用モジュール
! use ECCM_3D, only : eccm_init
!暗黙の型宣言禁止
implicit none
!内部変数
character(80) :: cfgfile
Real(DP), allocatable :: pyz_VelXBl(:,:,:)
real(DP), allocatable :: pyz_VelXNl(:,:,:)
real(DP), allocatable :: pyz_VelXAl(:,:,:)
real(DP), allocatable :: pyz_VelXNs(:,:,:)
real(DP), allocatable :: pyz_VelXAs(:,:,:)
Real(DP), allocatable :: xqz_VelYBl(:,:,:)
real(DP), allocatable :: xqz_VelYNl(:,:,:)
real(DP), allocatable :: xqz_VelYAl(:,:,:)
real(DP), allocatable :: xqz_VelYNs(:,:,:)
real(DP), allocatable :: xqz_VelYAs(:,:,:)
real(DP), allocatable :: xyr_VelZBl(:,:,:)
real(DP), allocatable :: xyr_VelZNl(:,:,:)
real(DP), allocatable :: xyr_VelZAl(:,:,:)
real(DP), allocatable :: xyr_VelZNs(:,:,:)
real(DP), allocatable :: xyr_VelZAs(:,:,:)
real(DP), allocatable :: xyz_ExnerBl(:,:,:)
real(DP), allocatable :: xyz_ExnerNl(:,:,:)
real(DP), allocatable :: xyz_ExnerAl(:,:,:)
real(DP), allocatable :: xyz_ExnerNs(:,:,:)
real(DP), allocatable :: xyz_ExnerAs(:,:,:)
real(DP), allocatable :: xyz_PotTempWork(:,:,:)
real(DP), allocatable :: xyz_PotTempBl(:,:,:)
real(DP), allocatable :: xyz_PotTempNl(:,:,:)
real(DP), allocatable :: xyz_PotTempAl(:,:,:)
real(DP), allocatable :: xyz_KmBl(:,:,:)
real(DP), allocatable :: xyz_KmNl(:,:,:)
real(DP), allocatable :: xyz_KmAl(:,:,:)
real(DP), allocatable :: xyz_KhBl(:,:,:)
real(DP), allocatable :: xyz_KhNl(:,:,:)
real(DP), allocatable :: xyz_KhAl(:,:,:)
real(DP), allocatable :: pyz_AccelVelXNl(:,:,:)
real(DP), allocatable :: xqz_AccelVelYNl(:,:,:)
real(DP), allocatable :: xyr_AccelVelZNl(:,:,:)
real(DP) :: Time
real(DP) :: ReStartTime(2)
real(DP), allocatable :: DelTimeLFrog(:)
real(DP) :: DelTimeEuler
integer, allocatable :: NStepEuler(:)
integer :: NStepLFrog
integer :: t, tau, t1, t2
!----------------------------------------------------------------------
! 変数参照型モジュールの初期化
!----------------------------------------------------------------------
!コマンドライン引数の解釈
! NAMELIST ファイル名の読み込み
call argset_init(cfgfile)
!物質特性の初期化
call chemdata_init()
!時刻に関する設定の初期化
! NAMELIST から必要な情報を読み取り, 時間関連の変数の設定を行う.
call timeset_init(cfgfile)
!格子点情報の初期化
! NAMELIST から情報を得て, 格子点を計算する
call gridset_init(cfgfile)
!化学計算ルーチンの初期化
call chemcalc_init()
!基本場の情報の初期化
! NAMELIST から情報を得て, 基本場を設定する.
call basicset_init(cfgfile)
!I/O ファイル名の初期化
! NAMELIST ファイル名を指定し, deepconv/arare の
! 出力ファイル名を NAMELIST から得る
call fileset_init(cfgfile)
!湿潤ルーチンの共有変数の初期化
call moistset_init()
!積算値を保管するためのモジュールの初期化
! NAMELIST から情報を得て, 基本場を設定する.
call StorePotTemp_init( )
!内部変数の初期化. とりあえずゼロを入れて値を確定させておく.
call VariableAllocate
!予報変数の初期化
! ReStartFile が設定されている場合にはファイルを読み込み,
! 設定されていない場合には, デフォルトの基本場と擾乱場を作る.
if (trim(InitFile) /= '') then
!基本場, 擾乱場の初期値を netCDF ファイルから取得する.
call ReStartFile_Get( ReStartTime, xyz_PotTempBl, xyz_ExnerBl, pyz_VelXBl, xqz_VelYBl, xyr_VelZBl, xyz_KmBl, xyz_KhBl, xyz_PotTempNl, xyz_ExnerNl, pyz_VelXNl, xqz_VelYBl, xyr_VelZNl, xyz_KmNl, xyz_KhNl )
else
!デフォルト設定の基本場, 擾乱場を作成する.
call BasicEnv_3d()
call DisturbEnv_3d(cfgfile, xyz_PotTempBl, xyz_ExnerBl, pyz_VelXBl, xqz_VelYBl, xyr_VelZBl, xyz_KmBl, xyz_KhBl )
call BoundaryXCyc_pyz( pyz_VelXBl )
call BoundaryYCyc_pyz( pyz_VelXBl )
call BoundaryZSym_pyz( pyz_VelXBl )
call BoundaryXCyc_xqz( xqz_VelYBl )
call BoundaryYCyc_xqz( xqz_VelYBl )
call BoundaryZSym_xqz( xqz_VelYBl )
call BoundaryXCyc_xyr( xyr_VelZBl )
call BoundaryYCyc_xyr( xyr_VelZBl )
call BoundaryZAsym_xyr( xyr_VelZBl )
call BoundaryXCyc_xyz( xyz_PotTempBl )
call BoundaryYCyc_xyz( xyz_PotTempBl )
call BoundaryZSym_xyz( xyz_PotTempBl )
! 1 ループ目だけは, bl と nl の値を同じにしておく.
! 1 ステップ目はオイラー法で解く必要があるが,
! 1 ステップ目とそれ以外のステップを別々にコーディングしたくない為
xyz_PotTempNl = xyz_PotTempBl
xyz_ExnerNl = xyz_ExnerBl
pyz_VelXNl = pyz_VelXBl
xqz_VelYNl = xqz_VelYBl
xyr_VelZNl = xyr_VelZBl
xyz_KmNl = xyz_KmBl
xyz_KhNl = xyz_KhBl
end if
!----------------------------------------------------------------------
! パッケージ型モジュールの初期化
! デフォルトの値から変更する必要のあるルーチンのみ初期化
!----------------------------------------------------------------------
call Damping_Init( cfgfile ) !波の減衰係数の初期化
call NumDiffusion_Init() !数値拡散項の初期化
call Turbulence_Init() !乱流計算の初期化
! call MoistAdjust_Init() !湿潤飽和調整法の初期化
! call WarmRainPrm_Init( cfgfile ) !暖かい雨のパラメタリゼーションの初期化
! call FillNegative_Init( xza_MixRtBasicZ, xz_DensBasicZ)
!移流による負の量の処理
call Radiation_Init( cfgfile ) !放射強制の初期化
! call MoistBuoy_Init() !分子量に対する浮力計算ルーチンの初期化
call xyz_Exner_Init() !陰解法の初期化
!----------------------------------------------------------------------
! 時刻とループ回数の初期化
!----------------------------------------------------------------------
NstepLFrog = NstepLong
NstepEuler = NstepShort
DelTimeLFrog = DelTimeLong * 2.0d0
DelTimeEuler = DelTimeShort
if ( trim(InitFile) /= '') then
Time = ReStartTime(2) !リスタート開始時刻
else
Time = 0.0d0 ! 計算開始時刻
NstepEuler(1) = NstepShort /2 ! 1 ループ目だけ
DelTimeLFrog(1) = DelTimeLong ! 1 ループ目だけ
end if
call MessageNotify( "M", "main", "NstepLong= %d", i=(/NstepLong/) )
call MessageNotify( "M", "main", "NstepEuler= %d", i=(/NstepEuler/) )
call MessageNotify( "M", "main", "DelTimeLFrog= %f", d=(/DelTimeLFrog/) )
call MessageNotify( "M", "main", "DelTimeEuler= %f", d=(/DelTimeEuler/) )
!----------------------------------------------------------------
! ファイル入出力
!----------------------------------------------------------------
!ファイルオープン
call HistoryFile_Open( )
if ( trim(InitFile) /= '') then
call HistoryFile_Output( ReStartTime(2), xyz_PotTempNl, xyz_ExnerNl, pyz_VelXNl, xqz_VelYNl, xyr_VelZNl, xyz_KmNl, xyz_KhNl )
end if
!時刻 0 の場合には出力
if ( Time == 0 ) then
call HistoryFile_Output( Time, xyz_PotTempNl, xyz_ExnerNl, pyz_VelXNl, xqz_VelYNl, xyr_VelZNl, xyz_KmNl, xyz_KhNl )
end if
!----------------------------------------------------------------------
! 設定のチェック
!----------------------------------------------------------------------
!CFL 条件のチェック
call CFLCheckTimeShort( xyz_VelSoundBasicZ )
!----------------------------------------------------------------------
! 数値積分
!----------------------------------------------------------------------
call MessageNotify( "M", "main", "Time Integration Start" )
do t1 = 1, NstepLFrog / NstepDisp
do t2 = 1, NstepDisp
t = (t1 - 1) * NstepDisp + t2
!時刻の設定
Time = Time + DelTimeLong
! call MessageNotify( "M", "main", "Time = %f", d=(/Time/) )
!----------------------------------------------------------------
! 渦粘性係数, 渦拡散係数を求める.
!----------------------------------------------------------------
! 1 次クロージャの場合
!
! call EddyViscosity(pyz_VelXNl, xqz_VelYNl, xyr_VelZNl, xyz_PotTempNl, &
! & xyz_KmNl , xyz_KmAl )
xyz_KmAl = xyz_KmBl + DelTimeLFrog(t) * ( + xyz_AdvKm(xyz_KmNl, pyz_VelXNl, xqz_VelYNl, xyr_VelZNl) + xyz_BuoyKm(xyz_PotTempBl) + xyz_ShearKm(xyz_KmBl, pyz_VelXBl, xqz_VelYBl, xyr_VelZBl) + xyz_NumDiffKm(xyz_KmBl) + xyz_DispKm(xyz_KmBl) )
!値の上限下限の設定
! * 値は正になることを保証する
! * 値の上限は 800 とする. 中島健介(1994, 学位論文)参照
xyz_KmAl = max( 0.0d0, min( xyz_KmAl, 800.0d0 ) )
!! xyz_KmAl = max( 0.0d0, min( xyz_KmAl, 300.0d0 ) )
!境界条件
call BoundaryXCyc_xyz( xyz_KmAl )
call BoundaryYCyc_xyz( xyz_KmAl )
call BoundaryZSym_xyz( xyz_KmAl )
!渦拡散定数を決める
xyz_KhAl = 3.0d0 * xyz_KmAl
!----------------------------------------------------------------
! 温位の移流計算.
!----------------------------------------------------------------
!時間積分
! call MessageNotify( "M", "main", "Time Integration: Temperature" )
xyz_PotTempAl = xyz_PotTempBl + DelTimeLFrog(t) * ( + xyz_AdvScalar( xyz_PotTempNl, pyz_VelXNl, xqz_VelYNl, xyr_VelZNl) + xyz_AdvScalar( xyz_PotTempBasicZ, pyz_VelXNl, xqz_VelYNl, xyr_VelZNl) + xyz_NumDiffScalar(xyz_PotTempBl) + xyz_TurbScalar(xyz_PotTempBl, xyz_KhBl) + xyz_TurbScalar(xyz_PotTempBasicZ, xyz_KhBl) + xyz_RadHeatConst( xyz_ExnerBl ) + xyz_HeatFluxBulk( xyz_PotTempBl, pyz_VelXBl, xqz_VelYBl ) )
!境界条件
call BoundaryXCyc_xyz( xyz_PotTempAl )
call BoundaryYCyc_xyz( xyz_PotTempAl )
call BoundaryZSym_xyz( xyz_PotTempAl )
!-------------------------------------------------------------
! 長い時間ステップでの, 速度の移流, 拡散, 数値粘性, 浮力
!-------------------------------------------------------------
pyz_AccelVelXNl = + pyz_AdvVelX(pyz_VelXNl, xqz_VelYNl, xyr_VelZNl) + pyz_NumDiffVelX(pyz_VelXBl) + pyz_TurbVelX(xyz_KmBl, pyz_VelXBl, xqz_VelYBl, xyr_VelZBl) + pyz_MomFluxBulk( pyz_VelXBl )
xqz_AccelVelYNl = + xqz_AdvVelY(pyz_VelXNl, xqz_VelYNl, xyr_VelZNl) + xqz_NumDiffVelY(xqz_VelYBl) + xqz_TurbVelY(xyz_KmBl, pyz_VelXBl, xqz_VelYBl, xyr_VelZBl) + xqz_MomFluxBulk( xqz_VelYBl )
xyr_AccelVelZNl = + xyr_AdvVelZ(pyz_VelXNl, xqz_VelYNl, xyr_VelZNl) + xyr_Buoy(xyz_PotTempNl) + xyr_NumDiffVelZ(xyr_VelZBl) + xyr_TurbVelZ(xyz_KmBl, pyz_VelXBl, xqz_VelYBl, xyr_VelZBl)
!-------------------------------------------------------------
! 短い時間ステップの初期値作成
!-------------------------------------------------------------
pyz_VelXNs = pyz_VelXBl
xqz_VelYNs = xqz_VelYBl
xyr_VelZNs = xyr_VelZBl
xyz_ExnerNs = xyz_ExnerBl
!-------------------------------------------------------------
! 短い時間ステップの積分. オイラー法を利用
!-------------------------------------------------------------
! call MessageNotify( "M", "main", "Time Integration: Dynamics" )
Euler: do tau = 1, NstepEuler(t)
!-------------------------------------------------------------
! 速度 u の計算
!-------------------------------------------------------------
! call MessageNotify( "M", "main", "Time Integration: VelX" )
pyz_VelXAs = pyz_VelXNs + DelTimeEuler * ( - pyz_GradPi(xyz_ExnerNs, pyz_VelXNs, xqz_VelYNs, xyr_VelZNs) + pyz_AccelVelXNl )
!境界条件
call BoundaryXCyc_pyz( pyz_VelXAs )
call BoundaryYCyc_pyz( pyz_VelXAs )
call BoundaryZSym_pyz( pyz_VelXAs )
!-------------------------------------------------------------
! 速度 v の計算
!-------------------------------------------------------------
! call MessageNotify( "M", "main", "Time Integration: VelV" )
xqz_VelYAs = xqz_VelYNs + DelTimeEuler * ( - xqz_GradPi(xyz_ExnerNs, pyz_VelXNs, xqz_VelYNs, xyr_VelZNs) + xqz_AccelVelYNl )
!境界条件
call BoundaryXCyc_xqz( xqz_VelYAs )
call BoundaryYCyc_xqz( xqz_VelYAs )
call BoundaryZSym_xqz( xqz_VelYAs )
!-------------------------------------------------------------
! エクスナー関数の計算
!-------------------------------------------------------------
! call MessageNotify( "M", "main", "Time Integration: Exner" )
xyz_ExnerAs = xyz_Exner( xyr_AccelVelZNl, pyz_VelXNs, pyz_VelXAs, xqz_VelYNs, xqz_VelYAs, xyr_VelZNs, xyz_ExnerNs)
!境界条件
call BoundaryXCyc_xyz( xyz_ExnerAs )
call BoundaryYCyc_xyz( xyz_ExnerAs )
call BoundaryZSym_xyz( xyz_ExnerAs )
!-------------------------------------------------------------
! 速度 w の計算
!-------------------------------------------------------------
! call MessageNotify( "M", "main", "Time Integration: VelZ" )
xyr_VelZAs = xyr_VelZNs + DelTimeEuler * ( - xyr_GradPi(xyz_ExnerAs,xyz_ExnerNs, pyz_VelXNs,xqz_VelYNs, xyr_VelZNs) + xyr_AccelVelZNl )
!境界条件
call BoundaryXCyc_xyr( xyr_VelZAs )
call BoundaryYCyc_xyr( xyr_VelZAs )
call BoundaryZAsym_xyr( xyr_VelZAs )
!-------------------------------------------------------------
! 短い時間ステップのループを回すための処置
!-------------------------------------------------------------
xyz_ExnerNs = xyz_ExnerAs
pyz_VelXNs = pyz_VelXAs
xqz_VelYNs = xqz_VelYAs
xyr_VelZNs = xyr_VelZAs
end do Euler
!----------------------------------------------------------------
! 最終的な短い時間ステップでの値を長い時間ステップでの値とみなす
!----------------------------------------------------------------
xyz_ExnerAl = xyz_ExnerAs
pyz_VelXAl = pyz_VelXAs
xqz_VelYAl = xqz_VelYAs
xyr_VelZAl = xyr_VelZAs
!-------------------------------------------------------------
! アッセリンの時間フィルタ. Nl の値をフィルタリング
!-------------------------------------------------------------
call AsselinFilter(xyz_ExnerAl, xyz_ExnerNl, xyz_ExnerBl)
call AsselinFilter(pyz_VelXAl, pyz_VelXNl, pyz_VelXBl )
call AsselinFilter(xqz_VelYAl, xqz_VelYNl, xqz_VelYBl )
call AsselinFilter(xyr_VelZAl, xyr_VelZNl, xyr_VelZBl )
call AsselinFilter(xyz_PotTempAl, xyz_PotTempNl, xyz_PotTempBl)
call AsselinFilter(xyz_KmAl, xyz_KmNl, xyz_KmBl)
!-------------------------------------------------------------
! スポンジ層
!-------------------------------------------------------------
! pyz_VelXAl = pyz_DampSponge( pyz_VelXAl, pyz_VelXBl, DelTimeLFrog(t) )
! xqz_VelYAl = xqz_DampSponge( xqz_VelYAl, xqz_VelYBl, DelTimeLFrog(t) )
! xyr_VelZAl = xyr_DampSponge( xyr_VelZAl, xyr_VelZBl, DelTimeLFrog(t) )
!----------------------------------------------------------------
! 長い時間ステップのループを回すための処置
!----------------------------------------------------------------
xyz_PotTempBl = xyz_PotTempNl
xyz_ExnerBl = xyz_ExnerNl
pyz_VelXBl = pyz_VelXNl
xqz_VelYBl = xqz_VelYNl
xyr_VelZBl = xyr_VelZNl
xyz_KmBl = xyz_KmNl
xyz_KhBl = xyz_KhNl
xyz_PotTempNl = xyz_PotTempAl
xyz_ExnerNl = xyz_ExnerAl
pyz_VelXNl = pyz_VelXAl
xqz_VelYNl = xqz_VelYAl
xyr_VelZNl = xyr_VelZAl
xyz_KmNl = xyz_KmAl
xyz_KhNl = xyz_KhAl
end do
!----------------------------------------------------------------
! ファイル出力
!----------------------------------------------------------------
call MessageNotify( "M", "main", "Time = %f", d=(/Time/) )
! CFL 条件のチェック
call CFLCheckTimeLongVelX( pyz_VelXNl )
call CFLCheckTimeLongVelY( xqz_VelYNl )
call CFLCheckTimeLongVelZ( xyr_VelZNl )
!ヒストリファイル出力
call HistoryFile_Output( Time, xyz_PotTempNl, xyz_ExnerNl, pyz_VelXNl, xqz_VelYNl, xyr_VelZNl, xyz_KmNl, xyz_KhNl )
!積算値のクリア
call StorePotTempClean
end do
!----------------------------------------------------------------
! 出力ファイルのクローズ
!----------------------------------------------------------------
call HistoryFile_Close
call ReStartFile_Open( )
call ReStartFile_OutPut( Time - DelTimeLong, xyz_PotTempBl, xyz_ExnerBl, pyz_VelXBl, xqz_VelYBl, xyr_VelZBl, xyz_KmBl , xyz_KhBl )
call ReStartFile_OutPut( Time, xyz_PotTempNl, xyz_ExnerNl, pyz_VelXNl, xqz_VelYNl, xyr_VelZNl, xyz_KmNl , xyz_KhNl )
call ReStartFile_Close
contains
subroutine VariableAllocate
!
!初期化として, 配列を定義し, 値としてゼロを代入する.
!
!暗黙の型宣言禁止
implicit none
!配列割り当て
allocate( pyz_VelXBl(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), pyz_VelXNl(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), pyz_VelXAl(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), pyz_VelXNs(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), pyz_VelXAs(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), xqz_VelYBl(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), xqz_VelYNl(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), xqz_VelYAl(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), xqz_VelYNs(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), xqz_VelYAs(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), xyr_VelZBl(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), xyr_VelZNl(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), xyr_VelZAl(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), xyr_VelZNs(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), xyr_VelZAs(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), xyz_ExnerBl(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), xyz_ExnerNl(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), xyz_ExnerAl(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), xyz_ExnerNs(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), xyz_ExnerAs(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), xyz_PotTempWork(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), xyz_PotTempBl(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), xyz_PotTempNl(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), xyz_PotTempAl(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), xyz_KmBl(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), xyz_KmNl(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), xyz_KmAl(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), xyz_KhBl(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), xyz_KhNl(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), xyz_KhAl(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), pyz_AccelVelXNl(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), xqz_AccelVelYNl(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), xyr_AccelVelZNl(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), DelTimeLFrog(NstepLong), NStepEuler(NStepLong) )
pyz_VelXNs = 0.0d0
pyz_VelXAs = 0.0d0
xqz_VelYNs = 0.0d0
xqz_VelYAs = 0.0d0
xyr_VelZNs = 0.0d0
xyr_VelZAs = 0.0d0
xyz_ExnerNs = 0.0d0
xyz_ExnerAs = 0.0d0
pyz_VelXBl = 0.0d0
pyz_VelXNl = 0.0d0
pyz_VelXAl = 0.0d0
xqz_VelYBl = 0.0d0
xqz_VelYNl = 0.0d0
xqz_VelYAl = 0.0d0
xyr_VelZBl = 0.0d0
xyr_VelZNl = 0.0d0
xyr_VelZAl = 0.0d0
xyz_ExnerBl = 0.0d0
xyz_ExnerNl = 0.0d0
xyz_ExnerAl = 0.0d0
xyz_KmBl = 0.0d0
xyz_KmNl = 0.0d0
xyz_KmAl = 0.0d0
xyz_KhBl = 0.0d0
xyz_KhNl = 0.0d0
xyz_KhAl = 0.0d0
xyz_PotTempBl = 0.0d0
xyz_PotTempNl = 0.0d0
xyz_PotTempAl = 0.0d0
pyz_AccelVelXNl = 0.0d0
xqz_AccelVelYNl = 0.0d0
xyr_AccelVelZNl = 0.0d0
! xyza_DelMixRt = 0.0d0
DelTimeEuler = 0.0d0
DelTimeLFrog = 0.0d0
NStepEuler = 0.0d0
NstepLFrog = 0.0d0
end subroutine VariableAllocate
end program arare