Class dycore_dynamics_mod
In: dynamics/dycore_dynamics.f90

begin

begin

Dependency

Methods

Included Modules

type_mod dycore_type_mod dycore_grid_mod dynamics_mod spml_mod dc_trace

Public Instance methods

Subroutine :
Dims :type(DYCORE_DIMS), intent(in)
: 次元データ全種

==== In/Out

Vars_a :type(DYCORE_VARS), intent(inout)
: 格子点データ全種(t+Δt) =end —— 作業用内部変数 ——

Dependency

Dependency

[Source]

  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)
: 格子点データ全種(t-Δt)

==== In/Out

Vars_a :type(DYCORE_VARS), intent(inout)
: 格子点データ全種(t+Δt) =end —— 作業用内部変数 ——

Dependency

Dependency

[Source]

  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 :

Dependency

Dependency

[Source]

  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)
: 次元データ全種

==== Output

Vars_a :type(DYCORE_VARS), intent(out)
: 格子点データ全種(t+Δt) =end

Dependency

Dependency

[Source]

  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)
: 格子点データ全種

==== Output

Vars_a :type(DYCORE_VARS), intent(inout)
: 格子点データ全種(t+Δt) =end —— 作業用内部変数 ——

Dependency

Dependency

[Source]

  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

[Validate]