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