Load sim control settings from a configuration script.
The sim control should be started beforhand to ensure a sane setting of the current time. The main setting here, is the time_control, which is also attempted to be read directly, if there is no sim_control table provided. Solvers may pass solverAborts to load additional abort criteria that are to be loaded from the configuration.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(tem_simControl_type), | intent(inout) | :: | me |
Simulation control parameters to set. |
||
type(flu_State) | :: | conf |
Handle to the configuration script to load the settings from. |
|||
integer, | intent(in), | optional | :: | parent |
Potential parent table, in which the simulation control table is to be found. |
|
character(len=*), | optional | :: | key |
Name for the simulation control table. Default is 'sim_control'. |
||
class(tem_solverAborts_type), | intent(inout), | optional | :: | solverAborts |
Solver specific abort criteria to load. |
subroutine tem_simControl_load(me, conf, parent, key, solverAborts)
! -------------------------------------------------------------------- !
!> Simulation control parameters to set.
type(tem_simControl_type), intent(inout) :: me
!> Handle to the configuration script to load the settings from.
type(flu_state) :: conf
!> Potential parent table, in which the simulation control table is to be
!! found.
integer, intent(in), optional :: parent
!> Name for the simulation control table. Default is 'sim_control'.
character(len=*), optional :: key
!> Solver specific abort criteria to load.
class(tem_solverAborts_type), intent(inout), optional :: solverAborts
! -------------------------------------------------------------------- !
character(len=labelLen) :: loc_key
integer :: thandle
integer :: iErr
! -------------------------------------------------------------------- !
loc_key = 'sim_control'
if (present(key)) loc_key = key
call aot_table_open( L = conf, &
& parent = parent, &
& thandle = thandle, &
& key = loc_key )
call aot_get_val(L = conf, &
& thandle = thandle, &
& val = me%delay_check, &
& key = 'delay_check', &
& default = .false., &
& ErrCode = iErr )
if (thandle /= 0) then
! There is a sim control table in the configuration.
call tem_timeControl_load(me = me%timeControl, &
& conf = conf, &
& parent = thandle, &
& delay_check = me%delay_check )
call tem_abortCriteria_load( me = me%abortCriteria, &
& conf = conf, &
& parent = thandle, &
& solverAborts = solverAborts )
else
! No sim control table found, try to load the time control table itself.
call tem_timeControl_load(me%timeControl, conf, parent)
me%abortCriteria = tem_abortCriteria_new()
end if
if (me%delay_check) then
write(logUnit(1),*) 'Delaying status checks by one interval' &
// '(delay_check=True).'
end if
call aot_table_close(L = conf, thandle = thandle)
! Overwrite the min of the simulation time range to point to the current
! simulation time.
call tem_timeControl_start_at_sim(me = me%timeControl, now = me%now)
call tem_addTimer( timerHandle = me%syncUpdate_timer, &
& timerName = 'tem_syncUpdate' )
end subroutine tem_simControl_load