program benchmark
use kinds
use foreig, only: eig
use fortime, only: timer
implicit none
real(rk), dimension(:,:), allocatable :: A
real(rk), dimension(:,:), allocatable :: eig_vec
real(rk), dimension(:), allocatable :: eig_val
integer :: m, i, ntests
type(timer) :: t
m = 100
allocate(A(m,m), eig_vec(m,m), eig_val(m))
call random_number(A)
A = A*10.0_rk
ntests = 5
call t%timer_start()
do i = 1, ntests
call eig(A, eig_vec, eig_val, method='syev')
end do
call t%timer_stop(nloops=ntests, message='Elapsed time (syev): ')
call t%timer_start()
do i = 1, ntests
call eig(A, eig_vec, eig_val, method='geev')
end do
call t%timer_stop(nloops=ntests, message='Elapsed time (geev): ')
call t%timer_start()
do i = 1, ntests
call eig(A, eig_vec, eig_val, method='ggev')
end do
call t%timer_stop(nloops=ntests, message='Elapsed time (ggev): ')
deallocate(A, eig_vec, eig_val)
end program benchmark