utility_inv3 Subroutine

public subroutine utility_inv3(a, b, det)

Return in b the adjoint of the 3x3 matrix a, and its determinant. The inverse is defined as the adjoint divided by the determinant, so that inverse(a) = b/det

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in) :: a(3,3)
real(kind=dp), intent(out) :: b(3,3)
real(kind=dp), intent(out) :: det

Called by

proc~~utility_inv3~~CalledByGraph proc~utility_inv3 utility_inv3 proc~boltzwann_main boltzwann_main proc~boltzwann_main->proc~utility_inv3 proc~calctdfanddos calcTDFandDOS proc~boltzwann_main->proc~calctdfanddos proc~tetrahedron_integral tetrahedron_integral proc~tetrahedron_integral->proc~utility_inv3 proc~utility_inverse_mat utility_inverse_mat proc~utility_inverse_mat->proc~utility_inv3 proc~utility_recip_lattice_base utility_recip_lattice_base proc~utility_recip_lattice_base->proc~utility_inv3 proc~wann_phases wann_phases proc~wann_phases->proc~utility_inv3 proc~berry_get_kubo_k berry_get_kubo_k proc~berry_get_kubo_k->proc~utility_recip_lattice_base proc~berry_get_sc_klist berry_get_sc_klist proc~berry_get_sc_klist->proc~utility_recip_lattice_base proc~pw90common_fourier_r_to_k_vec_dadb_tb_conv pw90common_fourier_R_to_k_vec_dadb_TB_conv proc~berry_get_sc_klist->proc~pw90common_fourier_r_to_k_vec_dadb_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 berry_get_shc_klist proc~berry_get_shc_klist->proc~utility_recip_lattice_base proc~calctdfanddos->proc~utility_recip_lattice_base proc~dis_main dis_main proc~dis_main->proc~utility_recip_lattice_base proc~dos_main dos_main proc~dos_main->proc~utility_recip_lattice_base proc~geninterp_main geninterp_main proc~geninterp_main->proc~utility_recip_lattice_base proc~hamiltonian_get_hr hamiltonian_get_hr proc~hamiltonian_get_hr->proc~utility_inverse_mat proc~k_path k_path proc~k_path->proc~utility_recip_lattice_base proc~k_path->proc~berry_get_shc_klist proc~k_slice k_slice proc~k_slice->proc~utility_recip_lattice_base proc~k_slice->proc~berry_get_shc_klist proc~utility_recip_lattice utility_recip_lattice proc~k_slice->proc~utility_recip_lattice proc~kmesh_get kmesh_get proc~kmesh_get->proc~utility_inverse_mat proc~kmesh_get->proc~utility_recip_lattice proc~kmesh_write kmesh_write proc~kmesh_write->proc~utility_recip_lattice_base proc~plot_main plot_main proc~plot_main->proc~utility_recip_lattice_base proc~plot_main->proc~hamiltonian_get_hr proc~plot_wannier plot_wannier proc~plot_main->proc~plot_wannier proc~ws_translate_dist ws_translate_dist proc~plot_main->proc~ws_translate_dist proc~plot_interpolate_bands plot_interpolate_bands proc~plot_main->proc~plot_interpolate_bands proc~plot_write_vdw_data plot_write_vdw_data proc~plot_main->proc~plot_write_vdw_data proc~plot_write_xyz plot_write_xyz proc~plot_main->proc~plot_write_xyz proc~plot_wannier->proc~utility_inverse_mat proc~plot_wannier->proc~utility_recip_lattice_base proc~pw90common_fourier_r_to_k_new_second_d_tb_conv pw90common_fourier_R_to_k_new_second_d_TB_conv proc~pw90common_fourier_r_to_k_new_second_d_tb_conv->proc~utility_inverse_mat proc~pw90common_fourier_r_to_k_vec_dadb_tb_conv->proc~utility_inverse_mat proc~readwrite_get_atoms readwrite_get_atoms proc~readwrite_get_atoms->proc~utility_inverse_mat proc~tetrahedron_fermidirac tetrahedron_fermidirac proc~tetrahedron_fermidirac->proc~tetrahedron_integral proc~utility_recip_lattice->proc~utility_recip_lattice_base proc~utility_translate_home utility_translate_home proc~utility_translate_home->proc~utility_recip_lattice_base proc~w90_postw90_readwrite_write w90_postw90_readwrite_write proc~w90_postw90_readwrite_write->proc~utility_inverse_mat proc~w90_postw90_readwrite_write->proc~utility_recip_lattice_base proc~w90_wannier90_readwrite_read_special w90_wannier90_readwrite_read_special proc~w90_wannier90_readwrite_read_special->proc~utility_inverse_mat proc~w90_readwrite_read_atoms w90_readwrite_read_atoms proc~w90_wannier90_readwrite_read_special->proc~w90_readwrite_read_atoms proc~w90_wannier90_readwrite_write w90_wannier90_readwrite_write proc~w90_wannier90_readwrite_write->proc~utility_inverse_mat proc~w90_wannier90_readwrite_write->proc~utility_recip_lattice_base proc~w90_wannier90_readwrite_write_chkpt w90_wannier90_readwrite_write_chkpt proc~w90_wannier90_readwrite_write_chkpt->proc~utility_recip_lattice_base proc~wann_main wann_main proc~wann_main->proc~wann_phases proc~wann_main_gamma wann_main_gamma proc~wann_main_gamma->proc~wann_phases proc~ws_translate_dist->proc~utility_inverse_mat program~postw90 postw90 program~postw90->proc~boltzwann_main program~postw90->proc~dos_main program~postw90->proc~geninterp_main program~postw90->proc~k_path program~postw90->proc~k_slice program~postw90->proc~kmesh_get program~postw90->proc~w90_postw90_readwrite_write proc~berry_main berry_main program~postw90->proc~berry_main proc~pw90common_wanint_setup pw90common_wanint_setup program~postw90->proc~pw90common_wanint_setup proc~w90_postw90_readwrite_read w90_postw90_readwrite_read program~postw90->proc~w90_postw90_readwrite_read proc~w90_readwrite_read_chkpt w90_readwrite_read_chkpt program~postw90->proc~w90_readwrite_read_chkpt proc~berry_main->proc~berry_get_kubo_k proc~berry_main->proc~berry_get_sc_klist proc~berry_main->proc~berry_get_shc_klist proc~tetrahedron_spinhall tetrahedron_spinhall proc~berry_main->proc~tetrahedron_spinhall proc~input_reader_special input_reader_special proc~input_reader_special->proc~w90_wannier90_readwrite_read_special proc~plot_interpolate_bands->proc~ws_translate_dist proc~plot_write_vdw_data->proc~utility_translate_home proc~plot_write_xyz->proc~utility_translate_home proc~pw90common_wanint_setup->proc~ws_translate_dist proc~tetrahedron_spinhall->proc~tetrahedron_fermidirac proc~tran_main tran_main proc~tran_main->proc~hamiltonian_get_hr proc~w90_create_kmesh w90_create_kmesh proc~w90_create_kmesh->proc~kmesh_get proc~w90_disentangle~2 w90_disentangle proc~w90_disentangle~2->proc~dis_main proc~w90_input_setopt w90_input_setopt proc~w90_input_setopt->proc~w90_wannier90_readwrite_read_special proc~w90_plot w90_plot proc~w90_plot->proc~plot_main proc~w90_postw90_readwrite_read->proc~utility_recip_lattice proc~w90_postw90_readwrite_read->proc~w90_readwrite_read_atoms proc~w90_postw90_readwrite_readall w90_postw90_readwrite_readall proc~w90_postw90_readwrite_readall->proc~utility_recip_lattice proc~w90_print_info~2 w90_print_info proc~w90_print_info~2->proc~w90_wannier90_readwrite_write proc~w90_readwrite_read_atoms->proc~readwrite_get_atoms proc~w90_readwrite_read_chkpt_header w90_readwrite_read_chkpt_header proc~w90_readwrite_read_chkpt_header->proc~utility_recip_lattice proc~w90_wannierise~2 w90_wannierise proc~w90_wannierise~2->proc~wann_main proc~w90_wannierise~2->proc~wann_main_gamma proc~wham_get_eig_uu_hh_aa_sc_tb_conv->proc~pw90common_fourier_r_to_k_new_second_d_tb_conv proc~write_chkpt write_chkpt proc~write_chkpt->proc~w90_wannier90_readwrite_write_chkpt proc~write_kmesh write_kmesh proc~write_kmesh->proc~kmesh_write proc~write_kmesh->proc~w90_create_kmesh proc~w90_disentangle w90_disentangle proc~w90_disentangle->proc~w90_disentangle~2 proc~w90_get_gkpb~2 w90_get_gkpb proc~w90_get_gkpb~2->proc~w90_create_kmesh proc~w90_get_nnkp~2 w90_get_nnkp proc~w90_get_nnkp~2->proc~w90_create_kmesh proc~w90_get_nn~2 w90_get_nn proc~w90_get_nn~2->proc~w90_create_kmesh proc~w90_input_setopt_f w90_input_setopt_f proc~w90_input_setopt_f->proc~w90_input_setopt proc~w90_print_info w90_print_info proc~w90_print_info->proc~w90_print_info~2 proc~w90_readwrite_read_chkpt->proc~w90_readwrite_read_chkpt_header proc~w90_transport w90_transport proc~w90_transport->proc~tran_main proc~w90_wannierise w90_wannierise proc~w90_wannierise->proc~w90_wannierise~2 program~wannier wannier program~wannier->proc~input_reader_special program~wannier->proc~w90_disentangle~2 program~wannier->proc~w90_plot program~wannier->proc~w90_print_info~2 program~wannier->proc~w90_wannierise~2 program~wannier->proc~write_chkpt program~wannier->proc~write_kmesh program~wannier->proc~w90_get_nn~2 program~wannier->proc~w90_transport proc~read_chkpt read_chkpt program~wannier->proc~read_chkpt proc~read_chkpt->proc~w90_readwrite_read_chkpt proc~w90_get_gkpb w90_get_gkpb proc~w90_get_gkpb->proc~w90_get_gkpb~2 proc~w90_get_nn w90_get_nn proc~w90_get_nn->proc~w90_get_nn~2 proc~w90_get_nnkp w90_get_nnkp proc~w90_get_nnkp->proc~w90_get_nnkp~2

Source Code

  subroutine utility_inv3(a, b, det)
    !================================================!
    !
    !! Return in b the adjoint of the 3x3 matrix a, and its
    !! determinant.
    !! The inverse is defined as the adjoint divided by the
    !! determinant, so that inverse(a) = b/det
    !
    !================================================

    implicit none
    real(kind=dp), intent(in)  :: a(3, 3)
    real(kind=dp), intent(out) :: b(3, 3)
    real(kind=dp), intent(out) :: det

    b(1, 1) = a(2, 2)*a(3, 3) - a(3, 2)*a(2, 3)
    b(1, 2) = a(2, 3)*a(3, 1) - a(3, 3)*a(2, 1)
    b(1, 3) = a(2, 1)*a(3, 2) - a(3, 1)*a(2, 2)
    b(2, 1) = a(3, 2)*a(1, 3) - a(1, 2)*a(3, 3)
    b(2, 2) = a(3, 3)*a(1, 1) - a(1, 3)*a(3, 1)
    b(2, 3) = a(3, 1)*a(1, 2) - a(1, 1)*a(3, 2)
    b(3, 1) = a(1, 2)*a(2, 3) - a(2, 2)*a(1, 3)
    b(3, 2) = a(1, 3)*a(2, 1) - a(2, 3)*a(1, 1)
    b(3, 3) = a(1, 1)*a(2, 2) - a(2, 1)*a(1, 2)

    det = a(1, 1)*b(1, 1) + a(1, 2)*b(1, 2) + a(1, 3)*b(1, 3)

    return

  end subroutine utility_inv3