Internal routine used by timeset_handler and timings_setup_tracing. If no routine with given name is found in timer_env%routine_names then a new entry is created.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
character(len=default_string_length), | intent(in) | :: | routineN |
FUNCTION routine_name2id(routineN) RESULT(routine_id)
!! Internal routine used by timeset_handler and timings_setup_tracing.
!! If no routine with given name is found in timer_env%routine_names
!! then a new entry is created.
CHARACTER(LEN=default_string_length), INTENT(IN) :: routineN
INTEGER :: routine_id
INTEGER :: stat
TYPE(routine_stat_type), POINTER :: r_stat
TYPE(timer_env_type), POINTER :: timer_env
timer_env => list_peek(timers_stack)
routine_id = dict_get(timer_env%routine_names, routineN, default_value=-1)
IF (routine_id /= -1) RETURN ! found an id - let's return it
! routine not found - let's create it
! enforce space free timer names, to make the output of trace/timings of a fixed number fields
IF (INDEX(routineN(1:LEN_TRIM(routineN)), ' ') /= 0) THEN
DBCSR_ABORT("timings_name2id: routineN contains spaces: "//routineN)
END IF
! register routine_name_dsl with new routine_id
routine_id = dict_size(timer_env%routine_names) + 1
CALL dict_set(timer_env%routine_names, routineN, routine_id)
ALLOCATE (r_stat, stat=stat)
IF (stat /= 0) &
DBCSR_ABORT("timings_name2id: allocation failed")
r_stat%routine_id = routine_id
r_stat%routineN = routineN
r_stat%active_calls = 0
r_stat%excl_walltime_accu = 0.0_dp
r_stat%incl_walltime_accu = 0.0_dp
r_stat%excl_energy_accu = 0.0_dp
r_stat%incl_energy_accu = 0.0_dp
r_stat%total_calls = 0
r_stat%stackdepth_accu = 0
r_stat%trace = .FALSE.
CALL list_push(timer_env%routine_stats, r_stat)
IF (list_size(timer_env%routine_stats) /= dict_size(timer_env%routine_names)) &
DBCSR_ABORT("timings_name2id: assertion failed")
END FUNCTION routine_name2id