2019-01-16 11:47:09 +01:00
.. _mo_two_e_erf_ints:
.. program :: mo_two_e_erf_ints
.. default-role :: option
2019-01-05 01:51:21 +01:00
======================
mo_two_e_erf_ints
======================
Here, all two-electron integrals (:math: `erf({\mu}_{erf} * r_{12})/r_{12}` ) are computed.
As they have 4 indices and many are zero, they are stored in a map, as defined
2019-01-16 11:47:09 +01:00
in :file: `Utils/map_module.f90` .
2019-01-05 01:51:21 +01:00
2019-01-16 11:47:09 +01:00
The range separation parameter :math: `{\mu}_{erf}` is the variable :option: `ao_two_e_erf_ints mu_erf` .
2019-01-05 01:51:21 +01:00
To fetch an |MO| integral, use
2019-01-05 02:58:15 +01:00
`get_mo_two_e_integral_erf(i,j,k,l,mo_integrals_map_erf)`
2019-01-05 01:51:21 +01:00
2019-01-16 11:47:09 +01:00
The conventions are:
2019-01-05 01:51:21 +01:00
* For |MO| integrals : <ij|kl> = <12|12>
2019-01-16 11:47:09 +01:00
Be aware that it might not be the same conventions for |MO| and |AO| integrals.
2019-01-05 01:51:21 +01:00
2019-01-16 11:47:09 +01:00
EZFIO parameters
----------------
2019-01-05 01:51:21 +01:00
.. option :: io_mo_two_e_integrals_erf
2019-01-16 11:47:09 +01:00
2019-01-05 01:51:21 +01:00
Read/Write MO integrals with the long range interaction from/to disk [ Write | Read | None ]
2019-01-16 11:47:09 +01:00
2019-01-05 01:51:21 +01:00
Default: None
2019-01-16 11:47:09 +01:00
Providers
---------
2019-01-05 01:51:21 +01:00
.. c:var :: core_energy_erf
.. code :: text
double precision :: core_energy_erf
File: :file: `core_quantities_erf.irp.f`
energy from the core : contains all core-core contributionswith the erf interaction
2019-01-16 11:47:09 +01:00
2019-01-05 01:51:21 +01:00
.. c:var :: core_fock_operator_erf
.. code :: text
double precision, allocatable :: core_fock_operator_erf (mo_num,mo_num)
File: :file: `core_quantities_erf.irp.f`
this is the contribution to the Fock operator from the core electrons with the erf interaction
2019-01-16 11:47:09 +01:00
2019-01-05 01:51:21 +01:00
.. c:var :: insert_into_mo_integrals_erf_map
.. code :: text
subroutine insert_into_mo_integrals_erf_map(n_integrals, &
buffer_i, buffer_values, thr)
File: :file: `map_integrals_erf.irp.f`
Create new entry into |MO| map, or accumulate in an existing entry
2019-01-16 11:47:09 +01:00
2019-01-05 01:51:21 +01:00
.. c:var :: int_erf_3_index
.. code :: text
double precision, allocatable :: int_erf_3_index (mo_num,mo_num,mo_num)
double precision, allocatable :: int_erf_3_index_exc (mo_num,mo_num,mo_num)
File: :file: `ints_erf_3_index.irp.f`
int_erf_3_index(i,j) = <ij|ij> = (ii|jj) with the erf interaction
int_erf_3_index_exc(i,j) = <ij|ji> = (ij|ij) with the erf interaction
2019-01-16 11:47:09 +01:00
2019-01-05 01:51:21 +01:00
.. c:var :: int_erf_3_index_exc
.. code :: text
double precision, allocatable :: int_erf_3_index (mo_num,mo_num,mo_num)
double precision, allocatable :: int_erf_3_index_exc (mo_num,mo_num,mo_num)
File: :file: `ints_erf_3_index.irp.f`
int_erf_3_index(i,j) = <ij|ij> = (ii|jj) with the erf interaction
int_erf_3_index_exc(i,j) = <ij|ji> = (ij|ij) with the erf interaction
2019-01-16 11:47:09 +01:00
2019-01-05 01:51:21 +01:00
.. c:var :: mo_integrals_erf_cache
.. code :: text
double precision, allocatable :: mo_integrals_erf_cache (0:64*64* 64*64)
File: :file: `map_integrals_erf.irp.f`
Cache of |MO| integrals for fast access
2019-01-16 11:47:09 +01:00
2019-01-05 01:51:21 +01:00
.. c:var :: mo_integrals_erf_cache_max
.. code :: text
integer :: mo_integrals_erf_cache_min
integer :: mo_integrals_erf_cache_max
File: :file: `map_integrals_erf.irp.f`
Min and max values of the MOs for which the integrals are in the cache
2019-01-16 11:47:09 +01:00
2019-01-05 01:51:21 +01:00
.. c:var :: mo_integrals_erf_cache_min
.. code :: text
integer :: mo_integrals_erf_cache_min
integer :: mo_integrals_erf_cache_max
File: :file: `map_integrals_erf.irp.f`
Min and max values of the MOs for which the integrals are in the cache
2019-01-16 11:47:09 +01:00
2019-01-05 01:51:21 +01:00
.. c:var :: mo_integrals_erf_map
.. code :: text
type(map_type) :: mo_integrals_erf_map
File: :file: `map_integrals_erf.irp.f`
|MO| integrals
2019-01-16 11:47:09 +01:00
2019-01-05 01:51:21 +01:00
.. c:var :: mo_two_e_int_erf_jj
.. code :: text
double precision, allocatable :: mo_two_e_int_erf_jj (mo_num,mo_num)
double precision, allocatable :: mo_two_e_int_erf_jj_exchange (mo_num,mo_num)
double precision, allocatable :: mo_two_e_int_erf_jj_anti (mo_num,mo_num)
File: :file: `mo_bi_integrals_erf.irp.f`
2019-01-05 02:58:15 +01:00
mo_two_e_integrals_jj(i,j) = J_ij mo_two_e_integrals_jj_exchange(i,j) = K_ij mo_two_e_integrals_jj_anti(i,j) = J_ij - K_ij
2019-01-05 01:51:21 +01:00
2019-01-16 11:47:09 +01:00
2019-01-05 01:51:21 +01:00
.. c:var :: mo_two_e_int_erf_jj_anti
.. code :: text
double precision, allocatable :: mo_two_e_int_erf_jj (mo_num,mo_num)
double precision, allocatable :: mo_two_e_int_erf_jj_exchange (mo_num,mo_num)
double precision, allocatable :: mo_two_e_int_erf_jj_anti (mo_num,mo_num)
File: :file: `mo_bi_integrals_erf.irp.f`
2019-01-05 02:58:15 +01:00
mo_two_e_integrals_jj(i,j) = J_ij mo_two_e_integrals_jj_exchange(i,j) = K_ij mo_two_e_integrals_jj_anti(i,j) = J_ij - K_ij
2019-01-05 01:51:21 +01:00
2019-01-16 11:47:09 +01:00
2019-01-05 01:51:21 +01:00
.. c:var :: mo_two_e_int_erf_jj_anti_from_ao
.. code :: text
double precision, allocatable :: mo_two_e_int_erf_jj_from_ao (mo_num,mo_num)
double precision, allocatable :: mo_two_e_int_erf_jj_exchange_from_ao (mo_num,mo_num)
double precision, allocatable :: mo_two_e_int_erf_jj_anti_from_ao (mo_num,mo_num)
File: :file: `mo_bi_integrals_erf.irp.f`
2019-01-05 02:58:15 +01:00
mo_two_e_integral_jj_from_ao(i,j) = J_ij mo_two_e_integrals_jj_exchange_from_ao(i,j) = J_ij mo_two_e_integrals_jj_anti_from_ao(i,j) = J_ij - K_ij
2019-01-05 01:51:21 +01:00
2019-01-16 11:47:09 +01:00
2019-01-05 01:51:21 +01:00
.. c:var :: mo_two_e_int_erf_jj_exchange
.. code :: text
double precision, allocatable :: mo_two_e_int_erf_jj (mo_num,mo_num)
double precision, allocatable :: mo_two_e_int_erf_jj_exchange (mo_num,mo_num)
double precision, allocatable :: mo_two_e_int_erf_jj_anti (mo_num,mo_num)
File: :file: `mo_bi_integrals_erf.irp.f`
2019-01-05 02:58:15 +01:00
mo_two_e_integrals_jj(i,j) = J_ij mo_two_e_integrals_jj_exchange(i,j) = K_ij mo_two_e_integrals_jj_anti(i,j) = J_ij - K_ij
2019-01-05 01:51:21 +01:00
2019-01-16 11:47:09 +01:00
2019-01-05 01:51:21 +01:00
.. c:var :: mo_two_e_int_erf_jj_exchange_from_ao
.. code :: text
double precision, allocatable :: mo_two_e_int_erf_jj_from_ao (mo_num,mo_num)
double precision, allocatable :: mo_two_e_int_erf_jj_exchange_from_ao (mo_num,mo_num)
double precision, allocatable :: mo_two_e_int_erf_jj_anti_from_ao (mo_num,mo_num)
File: :file: `mo_bi_integrals_erf.irp.f`
2019-01-05 02:58:15 +01:00
mo_two_e_integral_jj_from_ao(i,j) = J_ij mo_two_e_integrals_jj_exchange_from_ao(i,j) = J_ij mo_two_e_integrals_jj_anti_from_ao(i,j) = J_ij - K_ij
2019-01-05 01:51:21 +01:00
2019-01-16 11:47:09 +01:00
2019-01-05 01:51:21 +01:00
.. c:var :: mo_two_e_int_erf_jj_from_ao
.. code :: text
double precision, allocatable :: mo_two_e_int_erf_jj_from_ao (mo_num,mo_num)
double precision, allocatable :: mo_two_e_int_erf_jj_exchange_from_ao (mo_num,mo_num)
double precision, allocatable :: mo_two_e_int_erf_jj_anti_from_ao (mo_num,mo_num)
File: :file: `mo_bi_integrals_erf.irp.f`
2019-01-05 02:58:15 +01:00
mo_two_e_integral_jj_from_ao(i,j) = J_ij mo_two_e_integrals_jj_exchange_from_ao(i,j) = J_ij mo_two_e_integrals_jj_anti_from_ao(i,j) = J_ij - K_ij
2019-01-16 11:47:09 +01:00
2019-01-05 02:58:15 +01:00
.. c:var :: mo_two_e_integrals_erf_in_map
.. code :: text
logical :: mo_two_e_integrals_erf_in_map
File: :file: `mo_bi_integrals_erf.irp.f`
If True, the map of MO two-electron integrals is provided
2019-01-05 01:51:21 +01:00
2019-01-16 11:47:09 +01:00
Subroutines / functions
-----------------------
2019-01-05 01:51:21 +01:00
.. c:function :: add_integrals_to_map_erf
.. code :: text
subroutine add_integrals_to_map_erf(mask_ijkl)
File: :file: `mo_bi_integrals_erf.irp.f`
Adds integrals to tha MO map according to some bitmask
2019-01-16 11:47:09 +01:00
2019-01-05 01:51:21 +01:00
.. c:function :: clear_mo_erf_map
.. code :: text
subroutine clear_mo_erf_map
File: :file: `mo_bi_integrals_erf.irp.f`
Frees the memory of the MO map
2019-01-16 11:47:09 +01:00
2019-01-05 01:51:21 +01:00
2019-01-05 02:58:15 +01:00
.. c:function :: get_mo_erf_map_size
2019-01-05 01:51:21 +01:00
.. code :: text
2019-01-05 02:58:15 +01:00
integer*8 function get_mo_erf_map_size()
2019-01-05 01:51:21 +01:00
File: :file: `map_integrals_erf.irp.f`
2019-01-05 02:58:15 +01:00
Returns the number of elements in the |MO| map
2019-01-05 01:51:21 +01:00
2019-01-16 11:47:09 +01:00
2019-01-05 01:51:21 +01:00
2019-01-05 02:58:15 +01:00
.. c:function :: get_mo_two_e_integral_erf
2019-01-05 01:51:21 +01:00
.. code :: text
2019-01-05 02:58:15 +01:00
double precision function get_mo_two_e_integral_erf(i,j,k,l,map)
2019-01-05 01:51:21 +01:00
File: :file: `map_integrals_erf.irp.f`
2019-01-05 02:58:15 +01:00
Returns one integral :math: `\langle ij|kl \rangle` in the |MO| basis
2019-01-05 01:51:21 +01:00
2019-01-16 11:47:09 +01:00
2019-01-05 01:51:21 +01:00
2019-01-05 02:58:15 +01:00
.. c:function :: get_mo_two_e_integrals_erf
2019-01-05 01:51:21 +01:00
.. code :: text
2019-01-05 02:58:15 +01:00
subroutine get_mo_two_e_integrals_erf(j,k,l,sze,out_val,map)
2019-01-05 01:51:21 +01:00
File: :file: `map_integrals_erf.irp.f`
2019-01-05 02:58:15 +01:00
Returns multiple integrals :math: `\langle ij|kl \rangle` in the |MO| basis, all i for j,k,l fixed.
2019-01-05 01:51:21 +01:00
2019-01-16 11:47:09 +01:00
2019-01-05 01:51:21 +01:00
2019-01-05 02:58:15 +01:00
.. c:function :: get_mo_two_e_integrals_erf_coulomb_ii
2019-01-05 01:51:21 +01:00
.. code :: text
2019-01-05 02:58:15 +01:00
subroutine get_mo_two_e_integrals_erf_coulomb_ii(k,l,sze,out_val,map)
2019-01-05 01:51:21 +01:00
File: :file: `map_integrals_erf.irp.f`
2019-01-05 02:58:15 +01:00
Returns multiple integrals :math: `\langle ki|li \rangle`
2019-01-05 01:51:21 +01:00
2019-01-05 02:58:15 +01:00
k(1)i(2) 1/r12 l(1)i(2) :: out_val(i1) for k,l fixed.
2019-01-05 01:51:21 +01:00
2019-01-16 11:47:09 +01:00
2019-01-05 01:51:21 +01:00
2019-01-05 02:58:15 +01:00
.. c:function :: get_mo_two_e_integrals_erf_exch_ii
2019-01-05 01:51:21 +01:00
.. code :: text
2019-01-05 02:58:15 +01:00
subroutine get_mo_two_e_integrals_erf_exch_ii(k,l,sze,out_val,map)
2019-01-05 01:51:21 +01:00
File: :file: `map_integrals_erf.irp.f`
2019-01-05 02:58:15 +01:00
Returns multiple integrals :math: `\langle ki|il \rangle`
:math:`\int k(1)i(2) \frac{1}{r_{12}} i(1)l(2)` :: out_val(i1) for k,l fixed.
2019-01-05 01:51:21 +01:00
2019-01-16 11:47:09 +01:00
2019-01-05 01:51:21 +01:00
2019-01-05 02:58:15 +01:00
.. c:function :: get_mo_two_e_integrals_erf_i1j1
2019-01-05 01:51:21 +01:00
.. code :: text
2019-01-05 02:58:15 +01:00
subroutine get_mo_two_e_integrals_erf_i1j1(k,l,sze,out_array,map)
2019-01-05 01:51:21 +01:00
File: :file: `map_integrals_erf.irp.f`
2019-01-05 02:58:15 +01:00
Returns multiple integrals :math: `\langle ik|jl \rangle` in the |MO| basis, all :math: `\int i(1)j(1) \frac{\erf(\mu * r_{12})}{r_{12}} k(2)l(2)` i, j for k,l fixed.
2019-01-05 01:51:21 +01:00
2019-01-16 11:47:09 +01:00
2019-01-05 01:51:21 +01:00
2019-01-05 02:58:15 +01:00
.. c:function :: get_mo_two_e_integrals_erf_ij
2019-01-05 01:51:21 +01:00
.. code :: text
2019-01-05 02:58:15 +01:00
subroutine get_mo_two_e_integrals_erf_ij(k,l,sze,out_array,map)
2019-01-05 01:51:21 +01:00
File: :file: `map_integrals_erf.irp.f`
2019-01-05 02:58:15 +01:00
Returns multiple integrals :math: `\langle ij|kl \rangle` in the |MO| basis, all :math: `\int i(1)j(2) \frac{1}{r_{12}} k(1)l(2)` i, j for k,l fixed.
2019-01-05 01:51:21 +01:00
2019-01-16 11:47:09 +01:00
2019-01-05 01:51:21 +01:00
.. c:function :: load_mo_integrals_erf
.. code :: text
integer function load_mo_integrals_erf(filename)
File: :file: `map_integrals_erf.irp.f`
Read from disk the |MO| erf integrals
2019-01-16 11:47:09 +01:00
2019-01-05 01:51:21 +01:00
2019-01-05 02:58:15 +01:00
.. c:function :: mo_two_e_integral_erf
2019-01-05 01:51:21 +01:00
.. code :: text
2019-01-05 02:58:15 +01:00
double precision function mo_two_e_integral_erf(i,j,k,l)
2019-01-05 01:51:21 +01:00
File: :file: `map_integrals_erf.irp.f`
Returns one integral :math: `\langle ij|kl \rangle` in the |MO| basis
2019-01-16 11:47:09 +01:00
2019-01-05 01:51:21 +01:00
2019-01-05 02:58:15 +01:00
.. c:function :: mo_two_e_integrals_erf_index
2019-01-05 01:51:21 +01:00
.. code :: text
2019-01-05 02:58:15 +01:00
subroutine mo_two_e_integrals_erf_index(i,j,k,l,i1)
2019-01-05 01:51:21 +01:00
File: :file: `mo_bi_integrals_erf.irp.f`
Computes an unique index for i,j,k,l integrals
2019-01-16 11:47:09 +01:00
2019-01-05 01:51:21 +01:00
.. c:function :: provide_all_mo_integrals_erf
.. code :: text
subroutine provide_all_mo_integrals_erf
File: :file: `mo_bi_integrals_erf.irp.f`
2019-01-16 11:47:09 +01:00
2019-01-05 01:51:21 +01:00
2019-01-05 02:58:15 +01:00
.. c:function :: save_erf_two_e_integrals_mo
2019-01-05 01:51:21 +01:00
.. code :: text
2019-01-05 02:58:15 +01:00
subroutine save_erf_two_e_integrals_mo
2019-01-05 01:51:21 +01:00
File: :file: `routines_save_integrals_erf.irp.f`
2019-01-16 11:47:09 +01:00
2019-01-05 01:51:21 +01:00
2019-01-05 02:58:15 +01:00
.. c:function :: save_erf_two_e_ints_mo_into_ints_mo
2019-01-05 01:51:21 +01:00
.. code :: text
2019-01-05 02:58:15 +01:00
subroutine save_erf_two_e_ints_mo_into_ints_mo
2019-01-05 01:51:21 +01:00
File: :file: `routines_save_integrals_erf.irp.f`