subroutine w90_wannierise(common_data, istdout, istderr, ierr)
! perform MLWF algorithm
use w90_comms, only: mpirank, comms_sync_error
use w90_error_base, only: w90_error_type
use w90_error, only: set_error_fatal
use w90_wannierise_mod, only: wann_main, wann_main_gamma
implicit none
! arguments
integer, intent(in) :: istdout, istderr
integer, intent(out) :: ierr
type(lib_common_type), intent(inout) :: common_data
! local variables
type(w90_error_type), allocatable :: error
ierr = 0
if (.not. associated(common_data%m_matrix_local)) then
call set_error_fatal(error, 'Error: m_matrix_local not set for call to w90_wannierise()', common_data%comm)
else if (.not. associated(common_data%u_matrix)) then
call set_error_fatal(error, 'Error: u_matrix not set for w90_wannierise()', common_data%comm)
end if
if (allocated(error)) then
call prterr(error, ierr, istdout, istderr, common_data%comm)
return
end if
if (common_data%gamma_only) then
if (mpirank(common_data%comm) == 0) then
call wann_main_gamma(common_data%kmesh_info, common_data%wann_control, common_data%omega, &
common_data%print_output, common_data%wannier_data, &
common_data%m_matrix_local, common_data%u_matrix, &
common_data%real_lattice, common_data%num_kpts, common_data%num_wann, &
istdout, common_data%timer, error, common_data%comm)
if (allocated(error)) then
call prterr(error, ierr, istdout, istderr, common_data%comm)
return
end if
end if
call comms_sync_error(common_data%comm, error, 0) ! this is necessary after root's excursion alone
if (allocated(error)) then
call prterr(error, ierr, istdout, istderr, common_data%comm)
return
end if
else
call wann_main(common_data%ham_logical, common_data%kmesh_info, common_data%kpt_latt, &
common_data%wann_control, common_data%omega, common_data%sitesym, &
common_data%print_output, common_data%wannier_data, common_data%ws_region, &
common_data%w90_calculation, common_data%ham_k, common_data%ham_r, &
common_data%m_matrix_local, common_data%u_matrix, common_data%real_lattice, &
common_data%wannier_centres_translated, common_data%irvec, &
common_data%mp_grid, common_data%ndegen, common_data%nrpts, &
common_data%num_kpts, common_data%num_proj, common_data%num_wann, &
common_data%optimisation, common_data%rpt_origin, common_data%band_plot%mode, &
common_data%tran%mode, common_data%lsitesymmetry, istdout, common_data%timer, &
common_data%dist_kpoints, error, common_data%comm)
end if
if (allocated(error)) then
call prterr(error, ierr, istdout, istderr, common_data%comm)
return
end if
end subroutine w90_wannierise