tem_convergence_check Subroutine

public subroutine tem_convergence_check(me, time, status, varSys, tree)

This routine runs over each convergence object and check for convergence of each requested quantities timeControl is active on current time

Arguments

Type IntentOptional 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


Source Code

  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