utility_rotate_new Subroutine

public subroutine utility_rotate_new(mat, rot, N, reverse)

Uses

  • proc~~utility_rotate_new~~UsesGraph proc~utility_rotate_new utility_rotate_new module~w90_constants w90_constants proc~utility_rotate_new->module~w90_constants

Arguments

Type IntentOptional Attributes Name
complex(kind=dp), intent(inout) :: mat(N,N)
complex(kind=dp), intent(in) :: rot(N,N)
integer, intent(in) :: N
logical, intent(in), optional :: reverse

Calls

proc~~utility_rotate_new~~CallsGraph proc~utility_rotate_new utility_rotate_new proc~utility_zgemm_new utility_zgemm_new proc~utility_rotate_new->proc~utility_zgemm_new zgemm zgemm proc~utility_zgemm_new->zgemm

Called by

proc~~utility_rotate_new~~CalledByGraph proc~utility_rotate_new utility_rotate_new proc~wham_get_jjp_jjm_list wham_get_JJp_JJm_list proc~wham_get_jjp_jjm_list->proc~utility_rotate_new proc~wham_get_eig_uu_hh_jjlist wham_get_eig_UU_HH_JJlist proc~wham_get_eig_uu_hh_jjlist->proc~wham_get_jjp_jjm_list proc~berry_get_imfgh_klist berry_get_imfgh_klist proc~berry_get_imfgh_klist->proc~wham_get_eig_uu_hh_jjlist proc~berry_get_imf_klist berry_get_imf_klist proc~berry_get_imf_klist->proc~berry_get_imfgh_klist proc~berry_main berry_main proc~berry_main->proc~berry_get_imfgh_klist proc~berry_main->proc~berry_get_imf_klist proc~gyrotropic_get_k_list gyrotropic_get_k_list proc~gyrotropic_get_k_list->proc~berry_get_imfgh_klist proc~gyrotropic_get_k_list->proc~berry_get_imf_klist proc~k_path k_path proc~k_path->proc~berry_get_imfgh_klist proc~k_path->proc~berry_get_imf_klist proc~k_slice k_slice proc~k_slice->proc~berry_get_imfgh_klist proc~k_slice->proc~berry_get_imf_klist proc~gyrotropic_main gyrotropic_main proc~gyrotropic_main->proc~gyrotropic_get_k_list program~postw90 postw90 program~postw90->proc~berry_main program~postw90->proc~k_path program~postw90->proc~k_slice program~postw90->proc~gyrotropic_main

Source Code

  subroutine utility_rotate_new(mat, rot, N, reverse)
    !================================================!
    !
    ! Rotates the N x N matrix 'mat' according to
    ! * (rot)^dagger.mat.rot (reverse = .false. or not present) OR
    ! * rot.mat.(rot)^dagger (reverse = .true.),
    ! where 'rot' is a unitary matrix.
    ! The matrix 'mat' is overwritten.
    !
    !================================================!

    use w90_constants, only: dp

    integer, intent(in)             :: N
    logical, optional, intent(in)   :: reverse
    complex(kind=dp), intent(inout) :: mat(N, N)
    complex(kind=dp), intent(in)    :: rot(N, N)
    complex(kind=dp)                :: tmp(N, N)
    logical                         :: rev

    if (.not. present(reverse)) then
      rev = .false.
    else
      rev = reverse
    end if

    if (rev) then
      call utility_zgemm_new(rot, mat, tmp, 'N', 'C')
      call utility_zgemm_new(rot, tmp, mat, 'N', 'C')
    else
      call utility_zgemm_new(mat, rot, tmp, 'C', 'N')
      call utility_zgemm_new(tmp, rot, mat, 'C', 'N')
    end if

  end subroutine utility_rotate_new