DCPAM Reference Manual

GFD Dennou Club

平成 17 年 2 月 18 日

目次

1 Module dynamics mod 2 1.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.3 Error Handling . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.4 Known Bugs . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.5 Note . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.6 Future Plans . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.7 Dependency . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.8 Public Interface . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.9 Procedure Interface . . . . . . . . . . . . . . . . . . . . . . . 3

1.9.1 Initialize module and Calculate Non-Predictional Value. 3 1.9.2 Calculate Predictional Values. . . . . . . . . . . . . . 4 1.9.3 Calculate Diffusion Term . . . . . . . . . . . . . . . . 6 1.9.4 Calculate Diagnostic Values. . . . . . . . . . . . . . . 7 1.9.5 Terminate module . . . . . . . . . . . . . . . . . . . . 8

1 Module dynamics mod

• Developers: Morikawa Yasuhiro

• Version: $Id: dynamics.f90,v 1.20 2005/01/22 09:30:59 morikawa Exp $

• Tag Name: $Name: $

• Change History:

1.1 Overview

Calculate Dynamical Core. 力学コア部分を演算するモジュール。演算している方程式系、および離散

化の手法は以下の通り。

• 支配方程式系 : Governing Equations

– 球座標プリミティブ方程式系 : Primitive Equations in Spherical

Coordinate

• 水平離散化 : Horizontal Discretization

– スペクトル法 : Spectral Method ∗ 三角形切断 : Triangle Truncation ∗ 変換法 : Transform Method

• 鉛直離散化 : Vertical Discretization

– σ座標系 : Sigma Coordinate (Arakawa and Suarez(1983))

∗ Lorenz 格子 : Lorenz Grid

• 時間積分 : Time Integral – leap frog : リープフロッグ

1.2 Reference

• Arakawa, A., Suarez, M. J., 1983: Vertical differencing of the primitive equations in sigma coordinates. Mon. Wea. Rev., 111, 34–35.

1.3 Error Handling

1.4 Known Bugs

• 粘性計算の wa NumVis wa と wa NumVisScaler wa をとりあえず SP-MODEL から移植したため、名称などがそのままである。本来はモジュール内部のものとして名称その他の検討が必要であろう。

1.5 Note

1.6 Future Plans

現在、力学コアの全てがこのモジュール内にある。本来ならば、解く方程式や項の種類によってモジュール化がなされるべきである。

1.7 Dependency

use type_mod,    only: STRING, REKIND, DBKIND, INTKIND

1.8 Public Interface

private
public :: dynamics_init, dynamics_leapfrog  ! subroutines
public :: dynamics_diagnostic, dynamics_end ! subroutines
public :: dynamics_diffusion                ! subroutines

1.9 Procedure Interface

1.9.1 Initialize module and Calculate Non-Predictional Value.

以降のサブルーチンで用いる変数の allocate 、および時間発展しない量の演算を行なう。また、変数データ出力のための初期設定も行なう。

subroutine dynamics_init(x_Lon, y_Lat, z_Sigma, r_Sigma)

Dependency

use type_mod,    only: STRING, REKIND, DBKIND, INTKIND
use grid_3d_mod,         only: im, jm, km
use grid_wavenumber_mod, only: nm
use constants_mod, only: constants_init, R0, Omega, Cp, RAir, &
     &                   TempAve, VisOrder, EFoldTime

use time_mod,    only: DelTime
use spml_mod,    only: spml_init, xy_Lat, rn
use io_gt4_out_mod,only: io_gt4_out_init, io_gt4_out_SetVars
use dc_trace,    only: DbgMessage, BeginSub, EndSub, DataDump
use dc_string,   only: toChar

Input

real(DBKIND), intent(in) :: &
& x_Lon(:)           , & ! intent(in): 経度座標
& y_Lat(:)           , & ! intent(in): 緯度座標
& z_Sigma(:)         , & ! intent(in): σレベル (整数) 座標
& r_Sigma(:)             ! intent(in): σレベル (半整数) 座

標

1.9.2 Calculate Predictional Values.

時間発展する量の演算を行なう。演算するデータの出力も行なう。

subroutine dynamics_leapfrog                                &
& ( x_Lon       , y_Lat       , z_Sigma  , r_Sigma   , &
&
&   xyz_VelLon_b, xyz_VelLat_b, xyz_Vor_b, xyz_Div_b , &
&   xyz_Temp_b  , xyz_QVap_b  , xy_Ps_b  ,             &
&
&   xyz_VelLon_n, xyz_VelLat_n, xyz_Vor_n, xyz_Div_n , &
&   xyz_Temp_n  , xyz_QVap_n  , xy_Ps_n  ,             &
&
&   xyz_VelLon_a, xyz_VelLat_a, xyz_Vor_a, xyz_Div_a , &
&   xyz_Temp_a  , xyz_QVap_a  , xy_Ps_a             )

Dependency

use type_mod,    only: STRING, REKIND, DBKIND, INTKIND
use grid_3d_mod,         only: im, jm, km
use grid_wavenumber_mod, only: nm
use constants_mod, only: R0, Cp, EpsVT
use time_mod,    only: DelTime, CurrentTime
use spml_mod,    only: w_xy, xy_w , xy_GradLon_w, xy_GradLat_w, &
&                 w_Div_xy_xy, w_LaplaInv_w,               &
&                 wa_xya, xya_wa, wa_Div_xya_xya, wa_Lapla_wa

use io_gt4_out_mod,only: io_gt4_out_Put
use dc_trace,    only: DbgMessage, BeginSub, EndSub, DataDump
use dc_string,   only: toChar

Input

real(DBKIND), intent(in) :: &
& x_Lon(:)          , & ! intent(in): 経度座標
& y_Lat(:)          , & ! intent(in): 緯度座標
& z_Sigma(:)        , & ! intent(in): σレベル (整数) 座標
& r_Sigma(:)        , & ! intent(in): σレベル (半整数) 座標
&
& xyz_VelLon_b(:,:,:) , & ! intent(in): 速度経度成分 (t-Δ
t)
& xyz_VelLat_b(:,:,:) , & ! intent(in): 速度緯度成分 (t-Δ
t)
& xyz_Vor_b(:,:,:)    , & ! intent(in): 渦度  (t-Δ
t)
& xyz_Div_b(:,:,:)    , & ! intent(in): 発散  (t-Δ
t)
& xyz_Temp_b(:,:,:)   , & ! intent(in): 温度  (t-Δ
t)
& xyz_QVap_b(:,:,:)   , & ! intent(in): 比湿  (t-Δ
t)
& xy_Ps_b(:,:)        , & ! intent(in): 地表面気圧 (t-Δ
t)
&
& xyz_VelLon_n(:,:,:) , & ! intent(in): 速度経度成分 (t)
& xyz_VelLat_n(:,:,:) , & ! intent(in): 速度緯度成分 (t)
& xyz_Vor_n(:,:,:)    , & ! intent(in): 渦度  (t)
& xyz_Div_n(:,:,:)    , & ! intent(in): 発散  (t)
& xyz_Temp_n(:,:,:)   , & ! intent(in): 温度  (t)
& xyz_QVap_n(:,:,:)   , & ! intent(in): 比湿  (t)
& xy_Ps_n(:,:)            ! intent(in): 地表面気圧 (t)

Output

real(DBKIND), intent(out) :: &
& xyz_VelLon_a(:,:,:) , & ! intent(out): 速度経度成分 (t+Δ
t)

& xyz_VelLat_a(:,:,:) , & ! intent(out): 速度緯度成分 (t+Δ
t)
& xyz_Vor_a(:,:,:)  , & ! intent(out): 渦度  (t+Δ t)
& xyz_Div_a(:,:,:)  , & ! intent(out): 発散  (t+Δ t)
& xyz_Temp_a(:,:,:) , & ! intent(out): 温度  (t+Δ t)
& xyz_QVap_a(:,:,:) , & ! intent(out): 比湿  (t+Δ t)
& xy_Ps_a(:,:)          ! intent(out): 地表面気圧 (t+Δ t)

1.9.3 Calculate Diffusion Term

t-Δ t の値から水平拡散項を求め、それを t+Δ t の値に加える。

subroutine dynamics_diffusion(                         &
& xyz_Vor_b , xyz_Div_b , xyz_Temp_b , xyz_QVap_b  , &
& xyz_Vor_a , xyz_Div_a , xyz_Temp_a , xyz_QVap_a        )

Dependency

use type_mod,    only: STRING, REKIND, DBKIND, INTKIND
use time_mod,    only: DelTime, CurrentTime
use grid_3d_mod, only: km
use grid_wavenumber_mod, only: nm
use spml_mod,    only: wa_xya, xya_wa, l_nm
use io_gt4_out_mod,only: io_gt4_out_Put
use dc_trace,    only: DbgMessage, BeginSub, EndSub, DataDump

Input

real(DBKIND), intent(in) :: &
& xyz_Vor_b(:,:,:)  , & ! 渦度 (t-Δ t)
& xyz_Div_b(:,:,:)  , & ! 発散 (t-Δ t)
& xyz_Temp_b(:,:,:) , & ! 温度 (t-Δ t)
& xyz_QVap_b(:,:,:)     ! 比湿 (t-Δ t)

In/Out

real(DBKIND), intent(inout) :: &
& xyz_Vor_a(:,:,:)  , & ! 渦度 (t+Δ t)
& xyz_Div_a(:,:,:)  , & ! 発散 (t+Δ t)
& xyz_Temp_a(:,:,:) , & ! 温度 (t+Δ t)
& xyz_QVap_a(:,:,:)     ! 比湿 (t+Δ t)

1.9.4 Calculate Diagnostic Values.

診断的に得られる量の演算を行なう。現在は渦度発散から速度成分 (経度方向、緯度方向) の演算を行なうのみである。

subroutine dynamics_diagnostic                              &
& ( x_Lon       , y_Lat       , z_Sigma  , r_Sigma   , &
&
&   xyz_VelLon_a, xyz_VelLat_a, xyz_Vor_a, xyz_Div_a , &
&   xyz_Temp_a  , xyz_QVap_a  , xy_Ps_a               )

Dependency

use type_mod,    only: STRING, REKIND, DBKIND, INTKIND
use grid_3d_mod,         only: im, jm, km
use grid_wavenumber_mod, only: nm
use constants_mod, only: R0, Grav
use spml_mod,    only: wa_xya, xya_GradLon_wa, xya_GradLat_wa, &
&                 wa_LaplaInv_wa, IntLonLat_xy
use io_gt4_out_mod,only: io_gt4_out_Put
use dc_trace,    only: DbgMessage, BeginSub, EndSub, DataDump
use dc_string,   only: toChar

Input

real(DBKIND), intent(in) :: &
& x_Lon(:)          , & ! intent(in): 経度座標
& y_Lat(:)          , & ! intent(in): 緯度座標
& z_Sigma(:)        , & ! intent(in): σレベル (整数) 座標
& r_Sigma(:)    , & ! intent(in): σレベル (半整数) 座標
&
& xyz_Vor_a(:,:,:)  , & ! intent(in): 渦度  (t+Δ t)
& xyz_Div_a(:,:,:)  , & ! intent(in): 発散  (t+Δ t)
& xyz_Temp_a(:,:,:) , & ! intent(in): 温度  (t+Δ t)
& xyz_QVap_a(:,:,:) , & ! intent(in): 比湿  (t+Δ t)
& xy_Ps_a(:,:)          ! intent(in): 地表面気圧 (t+Δ t)

In/Output

real(DBKIND), intent(out) :: &
& xyz_VelLon_a(:,:,:) , & ! intent(out): 速度経度成分 (t+Δ
t)

     & xyz_VelLat_a(:,:,:)     ! intent(out): 速度緯度成分 (t+Δ
t)

1.9.5 Terminate module

dynamics init で allocate した変数を deallocate し、演算した値も全て破棄する。

subroutine dynamics_end

Dependency

use type_mod,    only: STRING, REKIND, DBKIND, INTKIND
use dc_trace,    only: BeginSub, EndSub, DbgMessage