Class dycore_time_mod
In: src/run/dycore_time.f90

Methods

Included Modules

dycore_type_mod time_mod dc_trace constants_mod

Public Instance methods

今の所、何もしない。

[Source]

  subroutine dycore_time_end
  !==== Dependency

                                                                 !=end
    implicit none

    !-----------------------------------------------------------------
    !   変数定義
    !-----------------------------------------------------------------
    !----- 作業用内部変数 -----
    character(STRING),  parameter:: subname = "dycore_time_end"

  continue

    !-----------------------------------------------------------------
    !   Check Initialization
    !-----------------------------------------------------------------
    call BeginSub(subname)
    if ( .not. dycore_time_initialized) then
       call EndSub( subname, 'dycore_time_init was not called',        c1=trim(subname) )
       return
    else
       dycore_time_initialized = .false.
    endif

!!$    call time_end

    call EndSub(subname)
  end subroutine dycore_time_end
Vars_b :type(DYCORE_VARS), intent(in)
: end begin
 In/Out

 格子点データ全種(t-Δt)
Vars_n :type(DYCORE_VARS), intent(inout)
: 格子点データ全種(t)
Vars_a :type(DYCORE_VARS), intent(in)
: 格子点データ全種(t+Δt)

((< constants_mod >)) の TimeFilterStepInt から、何ステップ毎に フィルターがかかるか制御される。

[Source]

  subroutine dycore_time_filter( Vars_b, Vars_n, Vars_a )
  !==== Dependency

                                                                 !=end
    implicit none
                                                                 !=begin
    !==== In/Out
    !
    type(DYCORE_VARS), intent(in)   :: Vars_b ! 格子点データ全種(t-Δt)
    type(DYCORE_VARS), intent(inout):: Vars_n ! 格子点データ全種(t)
    type(DYCORE_VARS), intent(in)   :: Vars_a ! 格子点データ全種(t+Δt)
                                                                 !=end

    !----- 作業用内部変数 -----
    character(STRING),  parameter:: subname = "dycore_time_filter"

  continue

    !----------------------------------------------------------------
    !   Check Initialization
    !----------------------------------------------------------------
    call BeginSub(subname)
    if (.not. dycore_time_initialized) then
       call EndSub( subname, 'Call dycore_time_init before call %c',         c1=trim(subname) )
       return
    endif

    !-----------------------------------------------------------------
    !   Check CurrentLoop in time_mod
    !-----------------------------------------------------------------
    if ( mod(CurrentLoop, TimeFilterStepInt) /= 0 ) then
       call EndSub( subname,  'This is not TimeFilter Step. ' //  '[CurrentLoop=<%d>, TimeFilterStepInt=<%d>]',  c1=trim(subname),  i=(/CurrentLoop, TimeFilterStepInt/) )
       return
    end if

    !----------------------------------------------------------------
    !    Time Filter
    !----------------------------------------------------------------
    ! 速度経度成分
    Vars_n%xyz_VelLon = ( 1. - 2. * TimeFilter ) * Vars_n%xyz_VelLon   + TimeFilter * ( Vars_b%xyz_VelLon + Vars_a%xyz_VelLon )

    ! 速度緯度成分
    Vars_n%xyz_VelLat = ( 1. - 2. * TimeFilter ) * Vars_n%xyz_VelLat   + TimeFilter * ( Vars_b%xyz_VelLat + Vars_a%xyz_VelLat )

    ! 渦度
    Vars_n%xyz_Vor = ( 1. - 2. * TimeFilter ) * Vars_n%xyz_Vor   + TimeFilter * ( Vars_b%xyz_Vor + Vars_a%xyz_Vor )

    ! 発散
    Vars_n%xyz_Div = ( 1. - 2. * TimeFilter ) * Vars_n%xyz_Div   + TimeFilter * ( Vars_b%xyz_Div + Vars_a%xyz_Div )

    ! 温度
    Vars_n%xyz_Temp = ( 1. - 2. * TimeFilter ) * Vars_n%xyz_Temp   + TimeFilter * ( Vars_b%xyz_Temp + Vars_a%xyz_Temp )

    ! 比湿
    Vars_n%xyz_QVap = ( 1. - 2. * TimeFilter ) * Vars_n%xyz_QVap   + TimeFilter * ( Vars_b%xyz_QVap + Vars_a%xyz_QVap )

    ! 地表面気圧
    Vars_n%xy_Ps = ( 1. - 2. * TimeFilter ) * Vars_n%xy_Ps   + TimeFilter * ( Vars_b%xy_Ps + Vars_a%xy_Ps )

    call EndSub( subname,  'This is Just TimeFilter Step. ' //  '[CurrentLoop=<%d>, TimeFilterStepInt=<%d>]',  c1=trim(subname),  i=(/CurrentLoop, TimeFilterStepInt/) )
  end subroutine dycore_time_filter

((< time_mod >)) の初期化を行なう。

[Source]

  subroutine dycore_time_init
  !==== Dependency

                                                                 !=end
    implicit none

    !-------------------------------------------------------------------
    !   変数定義
    !-------------------------------------------------------------------
    !----- 作業用内部変数 -----
    character(STRING),  parameter:: subname = "dycore_time_init"

  continue

    !----------------------------------------------------------------
    !   Check Initialization
    !----------------------------------------------------------------
    call BeginSub(subname)
    if (dycore_time_initialized) then
       call EndSub( subname, '%c is already called.', c1=trim(subname) )
       return
    else
       dycore_time_initialized = .true.
    endif

    !----------------------------------------------------------------
    !   Version identifier
    !----------------------------------------------------------------
    call DbgMessage('%c :: %c', c1=trim(version), c2=trim(tagname))

    !----------------------------------------------------------------
    !   time_init の呼び出し
    !----------------------------------------------------------------
    call time_init

    call EndSub(subname)
  end subroutine dycore_time_init

[Validate]