measure_time Subroutine

public subroutine measure_time(print_total, log_unit)

Uses

  • proc~~measure_time~~UsesGraph proc~measure_time measure_time iso_fortran_env iso_fortran_env proc~measure_time->iso_fortran_env

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: print_total
integer, intent(in) :: log_unit

Called by

proc~~measure_time~~CalledByGraph proc~measure_time measure_time proc~fock_jk fock_jk proc~fock_jk->proc~measure_time proc~get_states_overlap get_states_overlap proc~get_states_overlap->proc~measure_time proc~get_structures_ao_overlap get_structures_ao_overlap proc~get_structures_ao_overlap->proc~measure_time proc~guess_hcore guess_hcore proc~guess_hcore->proc~measure_time proc~guess_huckel guess_huckel proc~guess_huckel->proc~measure_time proc~guess_json guess_json proc~guess_json->proc~measure_time proc~hf_gradient hf_gradient proc~hf_gradient->proc~measure_time proc~oqp_tdhf_z_vector oqp_tdhf_z_vector proc~oqp_tdhf_z_vector->proc~measure_time proc~scf_driver scf_driver proc~scf_driver->proc~measure_time proc~tdhf_energy tdhf_energy proc~tdhf_energy->proc~measure_time proc~tdhf_gradient tdhf_gradient proc~tdhf_gradient->proc~measure_time proc~tdhf_mrsf_energy tdhf_mrsf_energy proc~tdhf_mrsf_energy->proc~measure_time proc~tdhf_sf_energy tdhf_sf_energy proc~tdhf_sf_energy->proc~measure_time proc~get_state_overlap_c get_state_overlap_C proc~get_state_overlap_c->proc~get_states_overlap proc~get_structures_ao_overlap_c get_structures_ao_overlap_C proc~get_structures_ao_overlap_c->proc~get_structures_ao_overlap proc~guess_hcore_c guess_hcore_C proc~guess_hcore_c->proc~guess_hcore proc~guess_huckel_c guess_huckel_C proc~guess_huckel_c->proc~guess_huckel proc~guess_json_c guess_json_C proc~guess_json_c->proc~guess_json proc~hf_energy hf_energy proc~hf_energy->proc~scf_driver proc~tdhf_energy_c tdhf_energy_C proc~tdhf_energy_c->proc~tdhf_energy proc~tdhf_gradient_c tdhf_gradient_C proc~tdhf_gradient_c->proc~tdhf_gradient proc~tdhf_mrsf_energy_c tdhf_mrsf_energy_C proc~tdhf_mrsf_energy_c->proc~tdhf_mrsf_energy proc~tdhf_sf_energy_c tdhf_sf_energy_C proc~tdhf_sf_energy_c->proc~tdhf_sf_energy proc~tdhf_z_vector_c tdhf_z_vector_C proc~tdhf_z_vector_c->proc~oqp_tdhf_z_vector

Source Code

  subroutine measure_time(print_total, log_unit)
    use iso_fortran_env, only: int64, real64
    implicit none
    integer, intent(in) :: print_total, log_unit
    integer(int64), save :: start_clock, previous_clock
    integer(int64) :: clock_rate, current_clock
    real(real64), save :: start_cpu_time, previous_cpu_time
    real(real64) :: current_cpu_time, elapsed_cpu_time, elapsed_wall_time
    logical, save :: first_call = .true.

    if (first_call) then
      call system_clock(start_clock, clock_rate)
      call cpu_time(start_cpu_time)
      previous_clock = start_clock
      previous_cpu_time = start_cpu_time
      first_call = .false.
    end if

    call system_clock(current_clock, clock_rate)
    call cpu_time(current_cpu_time)

    elapsed_wall_time = real(current_clock - previous_clock, &
                             real64) / real(clock_rate, real64)
    elapsed_cpu_time = current_cpu_time - previous_cpu_time

    write(log_unit, "(3X, A, F10.3, 3X, A, F10.3)") &
            "Step  CPU time (seconds): ", elapsed_cpu_time, &
            "Wall time (seconds): ", elapsed_wall_time

    previous_clock = current_clock
    previous_cpu_time = current_cpu_time

    if (print_total /= 0) then
      elapsed_wall_time = real(current_clock-start_clock, &
                               real64) / real(clock_rate, real64)
      elapsed_cpu_time = current_cpu_time - start_cpu_time

      write(log_unit, "(3X, A, F10.3, 3X, A, F10.3)") &
              "Total CPU time (seconds): ", elapsed_cpu_time, &
              "Wall time (seconds): ", elapsed_wall_time
    end if
  end subroutine measure_time