mirror of
https://github.com/QuantumPackage/qp2.git
synced 2024-12-22 19:43:32 +01:00
74 lines
2.0 KiB
Org Mode
74 lines
2.0 KiB
Org Mode
|
* State average energy
|
||
|
|
||
|
Calculation of the state average energy from the integrals and the
|
||
|
density matrices.
|
||
|
|
||
|
\begin{align*}
|
||
|
E = \sum_{ij} h_{ij} \gamma_{ij} + \frac{1}{2} v_{ij}^{kl} \Gamma_{ij}^{kl}
|
||
|
\end{align*}
|
||
|
$h_{ij}$: mono-electronic integral
|
||
|
$\gamma_{ij}$: one electron density matrix
|
||
|
$v_{ij}^{kl}$: bi-electronic integral
|
||
|
$\Gamma_{ij}^{kl}$: two electrons density matrix
|
||
|
|
||
|
TODO: OMP version
|
||
|
|
||
|
PROVIDED:
|
||
|
| mo_one_e_integrals | double precision | mono-electronic integrals |
|
||
|
| get_two_e_integral | double precision | bi-electronic integrals |
|
||
|
| one_e_dm_mo | double precision | one electron density matrix |
|
||
|
| two_e_dm_mo | double precision | two electrons density matrix |
|
||
|
| nuclear_repulsion | double precision | nuclear repulsion |
|
||
|
| mo_num | integer | number of MOs |
|
||
|
|
||
|
Output:
|
||
|
| energy | double precision | state average energy |
|
||
|
|
||
|
Internal:
|
||
|
| mono_e | double precision | mono-electronic energy |
|
||
|
| bi_e | double precision | bi-electronic energy |
|
||
|
| i,j,k,l | integer | indexes to loop over the MOs |
|
||
|
|
||
|
#+BEGIN_SRC f90 :comments org :tangle state_average_energy.irp.f
|
||
|
subroutine state_average_energy(energy)
|
||
|
|
||
|
implicit none
|
||
|
|
||
|
double precision, intent(out) :: energy
|
||
|
|
||
|
double precision :: get_two_e_integral
|
||
|
double precision :: mono_e, bi_e
|
||
|
integer :: i,j,k,l
|
||
|
|
||
|
! mono electronic part
|
||
|
mono_e = 0d0
|
||
|
do j = 1, mo_num
|
||
|
do i = 1, mo_num
|
||
|
mono_e = mono_e + mo_one_e_integrals(i,j) * one_e_dm_mo(i,j)
|
||
|
enddo
|
||
|
enddo
|
||
|
|
||
|
! bi electronic part
|
||
|
bi_e = 0d0
|
||
|
do l = 1, mo_num
|
||
|
do k = 1, mo_num
|
||
|
do j = 1, mo_num
|
||
|
do i = 1, mo_num
|
||
|
bi_e = bi_e + get_two_e_integral(i,j,k,l,mo_integrals_map) * two_e_dm_mo(i,j,k,l)
|
||
|
enddo
|
||
|
enddo
|
||
|
enddo
|
||
|
enddo
|
||
|
|
||
|
! State average energy
|
||
|
energy = mono_e + 0.5d0 * bi_e + nuclear_repulsion
|
||
|
|
||
|
! Check
|
||
|
!call print_energy_components
|
||
|
|
||
|
print*,'State average energy:', energy
|
||
|
!print*,ci_energy
|
||
|
|
||
|
end
|
||
|
#+END_SRC
|