| Class | dycore_dynamics_mod |
| In: |
dynamics/dycore_dynamics.f90
|
| Subroutine : | |||
| Dims : | type(DYCORE_DIMS), intent(in)
| ||
| Vars_a : | type(DYCORE_VARS), intent(inout)
|
subroutine dycore_dynamics_diagnostic( Dims, Vars_a )
!==== Dependency
use dycore_type_mod, only: DYCORE_VARS, DYCORE_DIMS, STRING, DBKIND, INTKIND
use dynamics_mod, only: dynamics_diagnostic
use dc_trace, only: BeginSub, EndSub, DbgMessage
!=end
implicit none
!=begin
!==== Input
!
type(DYCORE_DIMS), intent(in) :: Dims ! 次元データ全種
!
!==== In/Out
!
type(DYCORE_VARS), intent(inout):: Vars_a ! 格子点データ全種(t+Δt)
!=end
!----- 作業用内部変数 -----
character(STRING), parameter:: subname = "dycore_dynamics_diagnostic"
continue
!-----------------------------------------------------------------
! 初期化確認
!-----------------------------------------------------------------
call BeginSub(subname)
if (.not. dycore_dynamics_initialized) then
call EndSub( subname, 'Call dycore_dynamics_init before call %c', c1=trim(subname) )
return
endif
call dynamics_diagnostic ( Dims%x_Lon%a_Dim(:) , Dims%y_Lat%a_Dim(:) , Dims%z_Sigma%a_Dim(:) , Dims%r_Sigma%a_Dim(:), Vars_a%xyz_VelLon(:,:,:) , Vars_a%xyz_VelLat(:,:,:) , Vars_a%xyz_Vor(:,:,:) , Vars_a%xyz_Div(:,:,:) , Vars_a%xyz_Temp(:,:,:) , Vars_a%xyz_QVap(:,:,:) , Vars_a%xy_Ps(:,:) ) ! intent(in) : 地表面気圧 (t+Δt)
call EndSub(subname)
end subroutine dycore_dynamics_diagnostic
| Subroutine : | |||
| Vars_b : | type(DYCORE_VARS), intent(in)
| ||
| Vars_a : | type(DYCORE_VARS), intent(inout)
|
subroutine dycore_dynamics_diffusion( Vars_b, Vars_a )
!==== Dependency
use dycore_type_mod, only: DYCORE_VARS, DYCORE_DIMS, STRING, DBKIND, INTKIND
use dynamics_mod, only: dynamics_diffusion
use dc_trace, only: BeginSub, EndSub, DbgMessage
!=end
implicit none
!=begin
!==== Input
!
type(DYCORE_VARS), intent(in) :: Vars_b ! 格子点データ全種(t-Δt)
!
!==== In/Out
!
type(DYCORE_VARS), intent(inout):: Vars_a ! 格子点データ全種(t+Δt)
!=end
!----- 作業用内部変数 -----
character(STRING), parameter:: subname = "dycore_dynamics_diffusion"
continue
!-----------------------------------------------------------------
! 初期化確認
!-----------------------------------------------------------------
call BeginSub(subname)
if (.not. dycore_dynamics_initialized) then
call EndSub( subname, 'Call dycore_dynamics_init before call %c', c1=trim(subname) )
return
endif
call dynamics_diffusion( Vars_b%xyz_Vor , Vars_b%xyz_Div , Vars_b%xyz_Temp , Vars_b%xyz_QVap , Vars_a%xyz_Vor , Vars_a%xyz_Div , Vars_a%xyz_Temp , Vars_a%xyz_QVap ) ! intent(inout) : 比湿 (t+Δt)
call EndSub(subname)
end subroutine dycore_dynamics_diffusion
| Subroutine : |
subroutine dycore_dynamics_end
!==== Dependency
use dycore_type_mod, only: STRING, DBKIND, INTKIND
use dynamics_mod, only: dynamics_end
use dc_trace, only: BeginSub, EndSub, DbgMessage
!=end
implicit none
!-----------------------------------------------------------------
! 変数定義
!-----------------------------------------------------------------
!----- 作業用内部変数 -----
character(STRING), parameter:: subname = "dycore_dynamics_end"
continue
!-----------------------------------------------------------------
! 初期化確認
!-----------------------------------------------------------------
call BeginSub(subname)
if ( .not. dycore_dynamics_initialized) then
call EndSub( subname, 'dycore_dynamics_init was not called', c1=trim(subname) )
return
else
dycore_dynamics_initialized = .false.
endif
call dynamics_end
call EndSub(subname)
end subroutine dycore_dynamics_end
| Subroutine : | |||
| Dims : | type(DYCORE_DIMS), intent(in)
| ||
| Vars_a : | type(DYCORE_VARS), intent(out)
|
subroutine dycore_dynamics_init( Dims, Vars_a )
!==== Dependency
use dycore_type_mod, only: DYCORE_VARS, DYCORE_DIMS, STRING, DBKIND, INTKIND
use dycore_grid_mod, only: im, jm, km
use dynamics_mod, only: dynamics_init
use spml_mod, only: spml_init
use dc_trace, only: BeginSub, EndSub, DbgMessage
!=end
implicit none
!=begin
!==== Input
!
type(DYCORE_DIMS), intent(in) :: Dims ! 次元データ全種
!
!==== Output
!
type(DYCORE_VARS), intent(out):: Vars_a ! 格子点データ全種(t+Δt)
!=end
!----- 作業用内部変数 -----
character(STRING), parameter:: subname = "dycore_dynamics_init"
continue
!----------------------------------------------------------------
! 初期化確認
!----------------------------------------------------------------
call BeginSub(subname)
if (dycore_dynamics_initialized) then
call EndSub( subname, '%c is already called.', c1=trim(subname) )
return
else
dycore_dynamics_initialized = .true.
endif
!----------------------------------------------------------------
! Version identifier
!----------------------------------------------------------------
call DbgMessage('%c :: %c', c1=trim(version), c2=trim(tagname))
!-------------------------------------------------------------------
! SPMODEL 3次元モジュール初期化サブルーチン wa_initial
!-------------------------------------------------------------------
call spml_init
!----------------------------------------------------------------
! Vars_a の各変数の allocate および初期化
!----------------------------------------------------------------
allocate( Vars_a%xyz_VelLon(im,jm,km) )
allocate( Vars_a%xyz_VelLat(im,jm,km) )
allocate( Vars_a%xyz_Vor(im,jm,km) )
allocate( Vars_a%xyz_Div(im,jm,km) )
allocate( Vars_a%xyz_Temp(im,jm,km) )
allocate( Vars_a%xyz_QVap(im,jm,km) )
allocate( Vars_a%xy_Ps(im,jm) )
Vars_a%xyz_VelLon = 0.0d0
Vars_a%xyz_VelLat = 0.0d0
Vars_a%xyz_Vor = 0.0d0
Vars_a%xyz_Div = 0.0d0
Vars_a%xyz_Temp = 0.0d0
Vars_a%xyz_QVap = 0.0d0
Vars_a%xy_Ps = 0.0d0
!----------------------------------------------------------------
! dynamics_init へ次元変数の引渡し
!----------------------------------------------------------------
call dynamics_init ( Dims%x_Lon%a_Dim(:) , Dims%y_Lat%a_Dim(:) , Dims%z_Sigma%a_Dim(:) , Dims%r_Sigma%a_Dim(:) ) ! intent(in): σレベル(半整数)座標
call EndSub(subname)
end subroutine dycore_dynamics_init
| Subroutine : | |||
| Dims : | type(DYCORE_DIMS), intent(in)
| ||
| Vars_b : | type(DYCORE_VARS), intent(in)
| ||
| Vars_n : | type(DYCORE_VARS), intent(in)
| ||
| Vars_a : | type(DYCORE_VARS), intent(inout)
|
subroutine dycore_dynamics_prediction( Dims, Vars_b, Vars_n, Vars_a )
!==== Dependency
use dycore_type_mod, only: DYCORE_VARS, DYCORE_DIMS, STRING, DBKIND, INTKIND
use dynamics_mod, only: dynamics_leapfrog
use dc_trace, only: BeginSub, EndSub, DbgMessage
!=end
implicit none
!=begin
!==== Input
!
type(DYCORE_DIMS), intent(in) :: Dims ! 次元データ全種
type(DYCORE_VARS), intent(in) :: Vars_b ! 格子点データ全種
type(DYCORE_VARS), intent(in) :: Vars_n ! 格子点データ全種
!
!==== Output
!
type(DYCORE_VARS), intent(inout):: Vars_a ! 格子点データ全種(t+Δt)
!=end
!----- 作業用内部変数 -----
character(STRING), parameter:: subname = "dycore_dynamics_prediction"
continue
!----------------------------------------------------------------
! 初期化確認
!----------------------------------------------------------------
call BeginSub(subname)
if (.not. dycore_dynamics_initialized) then
call EndSub( subname, 'Call dycore_dynamics_init before call %c', c1=trim(subname) )
return
endif
call dynamics_leapfrog ( Dims%x_Lon%a_Dim(:) , Dims%y_Lat%a_Dim(:) , Dims%z_Sigma%a_Dim(:) , Dims%r_Sigma%a_Dim(:), Vars_b%xyz_VelLon(:,:,:) , Vars_b%xyz_VelLat(:,:,:) , Vars_b%xyz_Vor(:,:,:) , Vars_b%xyz_Div(:,:,:) , Vars_b%xyz_Temp(:,:,:) , Vars_b%xyz_QVap(:,:,:) , Vars_b%xy_Ps(:,:) , Vars_n%xyz_VelLon(:,:,:) , Vars_n%xyz_VelLat(:,:,:) , Vars_n%xyz_Vor(:,:,:) , Vars_n%xyz_Div(:,:,:) , Vars_n%xyz_Temp(:,:,:) , Vars_n%xyz_QVap(:,:,:) , Vars_n%xy_Ps(:,:) , Vars_a%xyz_VelLon(:,:,:) , Vars_a%xyz_VelLat(:,:,:) , Vars_a%xyz_Vor(:,:,:) , Vars_a%xyz_Div(:,:,:) , Vars_a%xyz_Temp(:,:,:) , Vars_a%xyz_QVap(:,:,:) , Vars_a%xy_Ps(:,:) ) ! intent(out): 地表面気圧 (t+Δt)
call EndSub(subname)
end subroutine dycore_dynamics_prediction