BEGIN_PROVIDER [ double precision, HF_density_matrix_ao_alpha, (ao_num_align,ao_num) ] &BEGIN_PROVIDER [ double precision, HF_density_matrix_ao_beta, (ao_num_align,ao_num) ] implicit none BEGIN_DOC ! Alpha and Beta density matrix in the AO basis END_DOC integer :: i,j,k,l1,l2 integer, allocatable :: mo_occ(:,:) allocate ( mo_occ(elec_alpha_num,2) ) call bitstring_to_list( HF_bitmask(1,1), mo_occ(1,1), j, N_int) ASSERT ( j==elec_alpha_num ) call bitstring_to_list( HF_bitmask(1,2), mo_occ(1,2), j, N_int) ASSERT ( j==elec_beta_num ) do j=1,ao_num !DIR$ VECTOR ALIGNED do i=1,ao_num_align HF_density_matrix_ao_alpha(i,j) = 0.d0 HF_density_matrix_ao_beta (i,j) = 0.d0 enddo do k=1,elec_beta_num l1 = mo_occ(k,1) l2 = mo_occ(k,2) !DIR$ VECTOR ALIGNED do i=1,ao_num HF_density_matrix_ao_alpha(i,j) = HF_density_matrix_ao_alpha(i,j) +& mo_coef(i,l1) * mo_coef(j,l1) HF_density_matrix_ao_beta (i,j) = HF_density_matrix_ao_beta (i,j) +& mo_coef(i,l2) * mo_coef(j,l2) enddo enddo do k=elec_beta_num+1,elec_alpha_num l1 = mo_occ(k,1) !DIR$ VECTOR ALIGNED do i=1,ao_num HF_density_matrix_ao_alpha(i,j) = HF_density_matrix_ao_alpha(i,j) +& mo_coef(i,l1) * mo_coef(j,l1) enddo enddo enddo deallocate(mo_occ) END_PROVIDER BEGIN_PROVIDER [ double precision, HF_density_matrix_ao, (ao_num_align,ao_num) ] implicit none BEGIN_DOC ! Density matrix in the AO basis END_DOC integer :: i,j,k,l1,l2 integer, allocatable :: mo_occ(:,:) allocate ( mo_occ(elec_alpha_num,2) ) call bitstring_to_list( HF_bitmask(1,1), mo_occ(1,1), j, N_int) ASSERT ( j==elec_alpha_num ) call bitstring_to_list( HF_bitmask(1,2), mo_occ(1,2), j, N_int) ASSERT ( j==elec_beta_num ) do j=1,ao_num !DIR$ VECTOR ALIGNED do i=1,ao_num_align HF_density_matrix_ao(i,j) = 0.d0 enddo do k=1,elec_beta_num l1 = mo_occ(k,1) l2 = mo_occ(k,2) !DIR$ VECTOR ALIGNED do i=1,ao_num HF_density_matrix_ao(i,j) = HF_density_matrix_ao(i,j) + & mo_coef(i,l1) * mo_coef(j,l1) + & mo_coef(i,l2) * mo_coef(j,l2) enddo enddo do k=elec_beta_num+1,elec_alpha_num l1 = mo_occ(k,1) !DIR$ VECTOR ALIGNED do i=1,ao_num HF_density_matrix_ao(i,j) = HF_density_matrix_ao(i,j) + & mo_coef(i,l1) * mo_coef(j,l1) enddo enddo enddo deallocate(mo_occ) END_PROVIDER