utility_zgemm_new Subroutine

public subroutine utility_zgemm_new(a, b, c, transa_opt, transb_opt)

Uses

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

Arguments

Type IntentOptional Attributes Name
complex(kind=dp), intent(in) :: a(:,:)
complex(kind=dp), intent(in) :: b(:,:)
complex(kind=dp), intent(out) :: c(:,:)
character(len=1), intent(in), optional :: transa_opt
character(len=1), intent(in), optional :: transb_opt

Calls

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

Called by

proc~~utility_zgemm_new~~CalledByGraph proc~utility_zgemm_new utility_zgemm_new proc~berry_get_imfgh_klist berry_get_imfgh_klist proc~berry_get_imfgh_klist->proc~utility_zgemm_new proc~wham_get_eig_uu_hh_jjlist wham_get_eig_UU_HH_JJlist proc~berry_get_imfgh_klist->proc~wham_get_eig_uu_hh_jjlist proc~utility_rotate_diag utility_rotate_diag proc~utility_rotate_diag->proc~utility_zgemm_new proc~utility_rotate_new utility_rotate_new proc~utility_rotate_new->proc~utility_zgemm_new proc~utility_zgemmm utility_zgemmm proc~utility_zgemmm->proc~utility_zgemm_new 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~berry_get_kubo_k berry_get_kubo_k proc~berry_main->proc~berry_get_kubo_k proc~get_aa_r get_AA_R proc~berry_main->proc~get_aa_r proc~get_bb_r get_BB_R proc~berry_main->proc~get_bb_r proc~get_cc_r get_CC_R proc~berry_main->proc~get_cc_r proc~get_sh_r get_SH_R proc~berry_main->proc~get_sh_r proc~get_shc_r get_SHC_R proc~berry_main->proc~get_shc_r proc~get_ss_r get_SS_R proc~berry_main->proc~get_ss_r proc~berry_get_kdotp berry_get_kdotp proc~berry_main->proc~berry_get_kdotp proc~berry_get_sc_klist berry_get_sc_klist proc~berry_main->proc~berry_get_sc_klist proc~berry_get_shc_klist berry_get_shc_klist proc~berry_main->proc~berry_get_shc_klist proc~get_gauge_overlap_matrix get_gauge_overlap_matrix proc~get_gauge_overlap_matrix->proc~utility_zgemmm 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~spin_get_s spin_get_S proc~gyrotropic_get_k_list->proc~spin_get_s proc~wham_get_eig_deleig wham_get_eig_deleig proc~gyrotropic_get_k_list->proc~wham_get_eig_deleig proc~k_path k_path proc~k_path->proc~berry_get_imfgh_klist proc~k_path->proc~berry_get_imf_klist proc~spin_get_nk spin_get_nk proc~k_path->proc~spin_get_nk proc~k_path->proc~get_aa_r proc~k_path->proc~get_bb_r proc~k_path->proc~get_cc_r proc~k_path->proc~get_shc_r proc~k_path->proc~get_ss_r proc~k_path->proc~berry_get_shc_klist proc~k_slice k_slice proc~k_slice->proc~berry_get_imfgh_klist proc~k_slice->proc~berry_get_imf_klist proc~k_slice->proc~spin_get_nk proc~k_slice->proc~get_aa_r proc~k_slice->proc~get_bb_r proc~k_slice->proc~get_cc_r proc~k_slice->proc~get_shc_r proc~k_slice->proc~get_ss_r proc~k_slice->proc~wham_get_eig_deleig proc~k_slice->proc~berry_get_shc_klist proc~spin_get_moment_k spin_get_moment_k proc~spin_get_moment_k->proc~utility_rotate_diag proc~spin_get_nk->proc~utility_rotate_diag proc~spin_get_s->proc~utility_rotate_diag proc~wham_get_deleig_a wham_get_deleig_a proc~wham_get_deleig_a->proc~utility_rotate_diag proc~wham_get_jjp_jjm_list wham_get_JJp_JJm_list proc~wham_get_jjp_jjm_list->proc~utility_rotate_new proc~berry_get_kubo_k->proc~spin_get_nk proc~berry_get_kubo_k->proc~wham_get_eig_deleig proc~dos_get_k dos_get_k proc~dos_get_k->proc~spin_get_nk proc~get_aa_r->proc~get_gauge_overlap_matrix proc~get_bb_r->proc~get_gauge_overlap_matrix proc~get_cc_r->proc~get_gauge_overlap_matrix proc~get_sh_r->proc~get_gauge_overlap_matrix proc~get_shc_r->proc~get_gauge_overlap_matrix proc~get_ss_r->proc~get_gauge_overlap_matrix proc~gyrotropic_main gyrotropic_main proc~gyrotropic_main->proc~gyrotropic_get_k_list proc~gyrotropic_main->proc~get_aa_r proc~gyrotropic_main->proc~get_bb_r proc~gyrotropic_main->proc~get_cc_r proc~gyrotropic_main->proc~get_ss_r proc~spin_get_moment spin_get_moment proc~spin_get_moment->proc~spin_get_moment_k proc~spin_get_moment->proc~get_ss_r proc~tdf_kpt TDF_kpt proc~tdf_kpt->proc~spin_get_nk proc~wham_get_eig_deleig->proc~wham_get_deleig_a proc~wham_get_eig_deleig_tb_conv wham_get_eig_deleig_TB_conv proc~wham_get_eig_deleig_tb_conv->proc~wham_get_deleig_a proc~wham_get_eig_uu_hh_jjlist->proc~wham_get_jjp_jjm_list program~postw90 postw90 program~postw90->proc~berry_main program~postw90->proc~k_path program~postw90->proc~k_slice program~postw90->proc~gyrotropic_main program~postw90->proc~spin_get_moment proc~dos_main dos_main program~postw90->proc~dos_main proc~geninterp_main geninterp_main program~postw90->proc~geninterp_main proc~boltzwann_main boltzwann_main program~postw90->proc~boltzwann_main proc~berry_get_kdotp->proc~wham_get_eig_deleig proc~berry_get_sc_klist->proc~wham_get_eig_deleig proc~berry_get_sc_klist->proc~wham_get_eig_deleig_tb_conv proc~wham_get_eig_uu_hh_aa_sc_tb_conv wham_get_eig_UU_HH_AA_sc_TB_conv proc~berry_get_sc_klist->proc~wham_get_eig_uu_hh_aa_sc_tb_conv proc~berry_get_shc_klist->proc~wham_get_eig_deleig proc~calctdfanddos calcTDFandDOS proc~calctdfanddos->proc~dos_get_k proc~calctdfanddos->proc~get_ss_r proc~calctdfanddos->proc~tdf_kpt proc~calctdfanddos->proc~wham_get_eig_deleig proc~dos_main->proc~dos_get_k proc~dos_main->proc~get_ss_r proc~dos_main->proc~wham_get_eig_deleig proc~geninterp_main->proc~wham_get_eig_deleig proc~wham_get_eig_uu_hh_aa_sc_tb_conv->proc~get_aa_r proc~boltzwann_main->proc~calctdfanddos

Source Code

  subroutine utility_zgemm_new(a, b, c, transa_opt, transb_opt)
    !=============================================================!
    !                                                             !
    ! Return matrix product of complex matrices a and b:          !
    !                                                             !
    !                       C = Op(A) Op(B)                       !
    !                                                             !
    ! transa = 'N'  ==> Op(A) = A                                 !
    ! transa = 'T'  ==> Op(A) = transpose(A)                      !
    ! transa = 'C'  ==> Op(A) = congj(transpose(A))               !
    !                                                             !
    ! similarly for B                                             !
    !                                                             !
    ! Due to the use of assumed shape arrays, this routine is a   !
    ! safer and more general replacement for the above routine    !
    ! utility_zgemm. Consider removing utility_zgemm and using    !
    ! utility_zgemm_new throughout.                               !
    !                                                             !
    !=============================================================!

    use w90_constants, only: cmplx_0, cmplx_1

    implicit none

    complex(kind=dp), intent(in)            :: a(:, :)
    complex(kind=dp), intent(in)            :: b(:, :)
    complex(kind=dp), intent(out)           :: c(:, :)
    character(len=1), intent(in), optional  :: transa_opt
    character(len=1), intent(in), optional  :: transb_opt

    integer          :: m, n, k
    character(len=1) :: transa, transb

    transa = 'N'
    transb = 'N'
    if (present(transa_opt)) transa = transa_opt
    if (present(transb_opt)) transb = transb_opt

    ! m ... number of rows in Op(A) and C
    ! n ... number of columns in Op(B) and C
    ! k ... number of columns in Op(A) resp. rows in Op(B)
    m = size(c, 1)
    n = size(c, 2)

    if (transa /= 'N') then
      k = size(a, 1)
    else
      k = size(a, 2)
    end if

    call zgemm(transa, transb, m, n, k, cmplx_1, a, size(a, 1), b, size(b, 1), cmplx_0, c, m)

  end subroutine utility_zgemm_new