subroutine read_eigvals(common_data, eigval, istdout, istderr, ierr)
use w90_error, only: w90_error_type, set_error_fatal
use w90_readwrite, only: w90_readwrite_read_eigvals
implicit none
! arguments
integer, intent(in) :: istdout, istderr
real(kind=dp), intent(inout) :: eigval(:, :)
type(lib_common_type), intent(inout) :: common_data
integer, intent(out) :: ierr
! local vars
type(w90_error_type), allocatable :: error
logical :: eig_found
ierr = 0
if (size(eigval, 1) /= common_data%num_bands) then
call set_error_fatal(error, &
'Error: eigval not dimensioned correctly (num_bands,num_kpts) in read_eigvals', common_data%comm)
call prterr(error, ierr, istdout, istderr, common_data%comm)
return
elseif (size(eigval, 2) /= common_data%num_kpts) then
call set_error_fatal(error, &
'Error: eigval not dimensioned correctly (num_bands,num_kpts) in read_eigvals', common_data%comm)
call prterr(error, ierr, istdout, istderr, common_data%comm)
return
end if
call w90_readwrite_read_eigvals(eig_found, eigval, common_data%num_bands, common_data%num_kpts, &
istdout, common_data%seedname, error, common_data%comm)
if (allocated(error)) then
call prterr(error, ierr, istdout, istderr, common_data%comm)
return
else if (.not. eig_found) then
call set_error_fatal(error, &
'Error: failed to read eigenvalues file in read_eigvals', common_data%comm)
call prterr(error, ierr, istdout, istderr, common_data%comm)
return
end if
end subroutine read_eigvals