Module dynamics_mod

Overview

Calculate Dynamical Core.

力学コア部分を演算するモジュール。演算している方程式系、 および離散化の手法は以下の通り。

Reference

Error Handling

Known Bugs

Note

Future Plans

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

Dependency

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

Public Interface

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

Procedure Interface

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): σレベル(半整数)座標

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)

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)

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)

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