1
0
mirror of https://gitlab.com/scemama/qp_plugins_scemama.git synced 2024-11-07 22:53:42 +01:00
qp_plugins_scemama/devel/cc/spatial_to_spin_MO.irp.f

121 lines
2.6 KiB
FortranFixed
Raw Normal View History

2019-09-11 17:09:30 +02:00
BEGIN_PROVIDER [ double precision, spin_fock_matrix_mo, (spin_mo_num, spin_mo_num) ]
implicit none
BEGIN_DOC
! Fock matrix in the spin-orbital basis
END_DOC
integer :: p,q
double precision :: F(mo_num,mo_num)
spin_fock_matrix_mo = 0.d0
call get_fock_matrix_alpha(hf_bitmask,F)
do q=1,spin_mo_num,2
do p=1,spin_mo_num,2
spin_fock_matrix_mo(p,q) = F((p+1)/2, (q+1)/2)
enddo
enddo
call get_fock_matrix_beta (hf_bitmask,F)
do q=2,spin_mo_num,2
do p=2,spin_mo_num,2
spin_fock_matrix_mo(p,q) = F((p+1)/2, (q+1)/2)
enddo
enddo
END_PROVIDER
BEGIN_PROVIDER [ double precision, spin_fock_matrix_diag_mo, (spin_mo_num) ]
implicit none
BEGIN_DOC
! Diagonal of the Fock matrix in the spin-orbital basis
END_DOC
integer :: p
do p=1,spin_mo_num
spin_fock_matrix_diag_mo(p) = spin_fock_matrix_mo(p,p)
enddo
END_PROVIDER
BEGIN_PROVIDER [ double precision, spin_fock_matrix_mo_oo, (spin_occ_num, spin_occ_num) ]
implicit none
BEGIN_DOC
! Occupied-Occupied block of the Fock matrix in the spin-orbital basis
END_DOC
integer :: p,q
do q=1,spin_occ_num
do p=1,spin_occ_num
spin_fock_matrix_mo_oo(p,q) = spin_fock_matrix_mo(p,q)
enddo
enddo
END_PROVIDER
BEGIN_PROVIDER [ double precision, spin_fock_matrix_mo_vv, (spin_vir_num, spin_vir_num) ]
implicit none
BEGIN_DOC
! Virtual-Virtual block of the Fock matrix in the spin-orbital basis
END_DOC
integer :: p,q
do q=1,spin_vir_num
do p=1,spin_vir_num
spin_fock_matrix_mo_vv(p,q) = spin_fock_matrix_mo(p+spin_occ_num, q+spin_occ_num)
enddo
enddo
END_PROVIDER
BEGIN_PROVIDER [ double precision, spin_fock_matrix_mo_ov, (spin_occ_num, spin_vir_num) ]
implicit none
BEGIN_DOC
! Occupied-Virtual block of the Fock matrix in the spin-orbital basis
END_DOC
integer :: p,q
do q=1,spin_vir_num
do p=1,spin_occ_num
spin_fock_matrix_mo_ov(p,q) = spin_fock_matrix_mo(p, q+spin_occ_num)
enddo
enddo
END_PROVIDER
subroutine get_fock_matrix_alpha(det,F)
implicit none
BEGIN_DOC
! Returns the alpha Fock matrix in MO basis associated with the determinant given as input
END_DOC
integer(bit_kind), intent(in) :: det(N_int,2)
double precision, intent(out) :: F(mo_num,mo_num)
integer :: i,j,k
F(:,:) = fock_operator_closed_shell_ref_bitmask(:,:)
end
subroutine get_fock_matrix_beta(det,F)
implicit none
BEGIN_DOC
! Returns the beta Fock matrix in MO basis associated with the determinant given as input
END_DOC
integer(bit_kind), intent(in) :: det(N_int,2)
double precision, intent(out) :: F(mo_num,mo_num)
integer :: i,j,k
F(:,:) = fock_operator_closed_shell_ref_bitmask(:,:)
end