tem_timeControl_align_trigger Subroutine

public subroutine tem_timeControl_align_trigger(me, conf, now, parent, key)

Align the trigger to intervals since min.

Only the time components given in the configuration will be considered for the alignment the other components remain untouched.

Arguments

Type IntentOptional Attributes Name
type(tem_timeControl_type), intent(inout) :: me

Time control definition to load from a Lua config.

type(flu_State) :: conf

Handle for the Lua script.

type(tem_time_type), intent(in) :: now

Current point in time to find alignement of trigger.

integer, intent(in), optional :: parent

Parent table to read from.

character(len=*), intent(in), optional :: key

Name of the time control table. Default: 'time_control'


Calls

proc~~tem_timecontrol_align_trigger~~CallsGraph proc~tem_timecontrol_align_trigger tem_timeControl_align_trigger aot_table_open aot_table_open proc~tem_timecontrol_align_trigger->aot_table_open proc~load_alignmask load_alignmask proc~tem_timecontrol_align_trigger->proc~load_alignmask proc~tem_time_ge_trigger tem_time_ge_trigger proc~tem_timecontrol_align_trigger->proc~tem_time_ge_trigger proc~tem_time_last_interval tem_time_last_interval proc~tem_timecontrol_align_trigger->proc~tem_time_last_interval proc~load_alignmask->aot_table_open aot_get_val aot_get_val proc~load_alignmask->aot_get_val aot_table_close aot_table_close proc~load_alignmask->aot_table_close

Called by

proc~~tem_timecontrol_align_trigger~~CalledByGraph proc~tem_timecontrol_align_trigger tem_timeControl_align_trigger proc~tem_load_restart tem_load_restart proc~tem_load_restart->proc~tem_timecontrol_align_trigger

Source Code

  subroutine tem_timeControl_align_trigger(me, conf, now, parent, key)
    ! -------------------------------------------------------------------- !
    !> Time control definition to load from a Lua config.
    type(tem_timeControl_type), intent(inout) :: me

    !> Handle for the Lua script.
    type(flu_state) :: conf

    !> Current point in time to find alignement of trigger.
    type(tem_time_type), intent(in) :: now

    !> Parent table to read from.
    integer, intent(in), optional :: parent

    !> Name of the time control table. Default: 'time_control'
    character(len=*), intent(in), optional :: key
    ! -------------------------------------------------------------------- !
    integer :: thandle
    character(len=labelLen) :: localKey
    logical :: alignmask(3)
    type(tem_time_type) :: align_interval
    ! -------------------------------------------------------------------- !

    if (present(key)) then
      localKey = key
    else
      localKey = 'time_control'
    endif

    call aot_table_open( L       = conf,    &
      &                  parent  = parent,  &
      &                  thandle = thandle, &
      &                  key     = localKey )

    if (thandle /= 0) then
      call load_alignmask( mask   = alignmask,       &
        &                  conf   = conf,            &
        &                  key    = 'align_trigger', &
        &                  parent = thandle          )
    else
      alignmask = .false.
    end if

    align_interval%sim = 0.0_rk
    align_interval%iter = 0
    align_interval%clock = 0.0_rk

    if (alignmask(sim)) align_interval%sim = me%interval%sim
    if (alignmask(iter)) align_interval%iter = me%interval%iter
    if (alignmask(clock)) align_interval%clock = me%interval%clock

    me%trigger = me%min + tem_time_last_interval( now      = now-me%min,    &
      &                                           interval = align_interval )

    me%min_reached = tem_time_ge_trigger(now, me%min)

  end subroutine tem_timeControl_align_trigger