This routine runs over each convergence object and check for convergence of each requested quantities timeControl is active on current time
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(tem_convergence_type), | intent(inout), | target | :: | me(:) |
convergence descriptions |
|
type(tem_time_type), | intent(in) | :: | time |
current simulation time |
||
type(tem_status_type), | intent(inout) | :: | status |
Status bits |
||
type(tem_varSys_type), | intent(in) | :: | varSys |
global variable system |
||
type(treelmesh_type), | intent(in) | :: | tree |
global tree |
subroutine tem_convergence_check( me, time, status, varSys, tree )
! -------------------------------------------------------------------- !
!> convergence descriptions
type(tem_convergence_type), target, intent(inout) :: me(:)
!> current simulation time
type(tem_time_type), intent(in) :: time
!> Status bits
type(tem_status_type), intent(inout) :: status
!> global variable system
type(tem_varSys_type), intent(in) :: varSys
!> global tree
type(treelmesh_type ), intent(in) :: tree
! -------------------------------------------------------------------- !
integer :: iConv
logical :: triggered
real(kind=rk), allocatable :: res(:)
! -------------------------------------------------------------------- !
allocate(res(io_buffer_size))
! Run over all convergence objects
do iConv = 1,size(me)
! Skip this convergence object, if there are no entries in the
! variable system
if (me( iConv )%varMap%nScalars < 1) cycle
! Determine, if it is now the time to perform the convergence for each
! convergence object
! check time control and update it if triggered
call tem_timeControl_check( me = me( iConv )%header%timeControl, &
& now = time, &
& comm = me( iConv )%proc%comm, &
& triggered = triggered )
! check convergence if timeControl is triggered
if( triggered )then
if (me(iConv)%header%useGetPoint) then
call tem_convergence_check_point( me = me(iConv), &
& time = time, &
& status = status, &
& varSys = varSys, &
& tree = tree, &
& res = res )
else
call tem_convergence_check_element( me = me(iConv), &
& time = time, &
& status = status, &
& varSys = varSys, &
& tree = tree, &
& res = res )
end if
end if ! do convergence? interval, tmin, tmax check
end do ! iConv
deallocate(res)
end subroutine tem_convergence_check