sitesym_symmetrize_rotation Subroutine

public subroutine sitesym_symmetrize_rotation(sitesym, urot, num_kpts, num_wann, error, comm)

Uses

  • proc~~sitesym_symmetrize_rotation~~UsesGraph proc~sitesym_symmetrize_rotation sitesym_symmetrize_rotation module~w90_error w90_error proc~sitesym_symmetrize_rotation->module~w90_error module~w90_utility w90_utility proc~sitesym_symmetrize_rotation->module~w90_utility module~w90_wannier90_types w90_wannier90_types proc~sitesym_symmetrize_rotation->module~w90_wannier90_types module~w90_comms w90_comms module~w90_error->module~w90_comms module~w90_error_base w90_error_base module~w90_error->module~w90_error_base module~w90_utility->module~w90_comms module~w90_constants w90_constants module~w90_utility->module~w90_constants module~w90_wannier90_types->module~w90_constants module~w90_comms->module~w90_constants module~w90_comms->module~w90_error_base

Arguments

Type IntentOptional Attributes Name
type(sitesym_type), intent(in) :: sitesym
complex(kind=dp), intent(inout) :: urot(num_wann,num_wann,num_kpts)
integer, intent(in) :: num_kpts
integer, intent(in) :: num_wann
type(w90_error_type), intent(out), allocatable :: error
type(w90_comm_type), intent(in) :: comm

Calls

proc~~sitesym_symmetrize_rotation~~CallsGraph proc~sitesym_symmetrize_rotation sitesym_symmetrize_rotation proc~set_error_fatal set_error_fatal proc~sitesym_symmetrize_rotation->proc~set_error_fatal proc~utility_zgemm utility_zgemm proc~sitesym_symmetrize_rotation->proc~utility_zgemm proc~comms_sync_error comms_sync_error proc~set_error_fatal->proc~comms_sync_error proc~set_base_error set_base_error proc~set_error_fatal->proc~set_base_error zgemm zgemm proc~utility_zgemm->zgemm

Called by

proc~~sitesym_symmetrize_rotation~~CalledByGraph proc~sitesym_symmetrize_rotation sitesym_symmetrize_rotation proc~wann_main wann_main proc~wann_main->proc~sitesym_symmetrize_rotation proc~w90_wannierise~2 w90_wannierise proc~w90_wannierise~2->proc~wann_main proc~w90_wannierise w90_wannierise proc~w90_wannierise->proc~w90_wannierise~2 program~wannier wannier program~wannier->proc~w90_wannierise~2

Source Code

  subroutine sitesym_symmetrize_rotation(sitesym, urot, num_kpts, num_wann, error, comm)
    !================================================!
    use w90_utility, only: utility_zgemm
    use w90_wannier90_types, only: sitesym_type
    use w90_error, only: w90_error_type, set_error_fatal

    implicit none

    ! arguments
    type(sitesym_type), intent(in) :: sitesym
    type(w90_error_type), allocatable, intent(out) :: error
    type(w90_comm_type), intent(in) :: comm

    integer, intent(in) :: num_wann, num_kpts
    complex(kind=dp), intent(inout) :: urot(num_wann, num_wann, num_kpts)

    ! local variables
    integer :: ik, ir, isym, irk
    complex(kind=dp) :: cmat1(num_wann, num_wann)
    complex(kind=dp) :: cmat2(num_wann, num_wann)

    logical :: ldone(num_kpts)

    ldone = .false.
    do ir = 1, sitesym%nkptirr
      ik = sitesym%ir2ik(ir)
      ldone(ik) = .true.
      do isym = 2, sitesym%nsymmetry
        irk = sitesym%kptsym(isym, ir)
        if (irk .eq. ik) cycle
        if (ldone(irk)) cycle
        ldone(irk) = .true.
        ! cmat2 = UROT(k)*D(R,k)^{\dagger}
        call utility_zgemm(cmat2, urot(:, :, ik), 'N', &
                           sitesym%d_matrix_wann(:, :, isym, ir), 'C', num_wann)
        ! cmat1 = D(R,k)*cmat2
        call utility_zgemm(cmat1, sitesym%d_matrix_wann(:, :, isym, ir), 'N', &
                           cmat2, 'N', num_wann)
        urot(:, :, irk) = cmat1(:, :)
      end do
    end do
    if (any(.not. ldone)) then
      call set_error_fatal(error, 'error in sitesym_symmetrize_rotation', comm)
      return
    end if

    return
  end subroutine sitesym_symmetrize_rotation