mo_two_e_erf_ints
Here, all two-electron integrals (\(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
in Utils/map_module.f90
.
The range separation parameter \({\mu}_{erf}\) is the variable ao_two_e_erf_ints mu_erf
.
To fetch an MO integral, use
get_mo_two_e_integral_erf(i,j,k,l,mo_integrals_map_erf)
The conventions are:
For MO integrals : <ij|kl> = <12|12>
Be aware that it might not be the same conventions for MO and AO integrals.
EZFIO parameters
- io_mo_two_e_integrals_erf
Read/Write MO integrals with the long range interaction from/to disk [ Write | Read | None ]
Default: None
Providers
- core_energy_erf
File :
mo_two_e_erf_ints/core_quantities_erf.irp.f
double precision :: core_energy_erf
energy from the core : contains all core-core contributionswith the erf interaction
Needs:
list_core
mo_one_e_integrals
mo_two_e_int_erf_jj
n_core_orb
nuclear_repulsion
- core_fock_operator_erf
File :
mo_two_e_erf_ints/core_quantities_erf.irp.f
double precision, allocatable :: core_fock_operator_erf (mo_num,mo_num)
this is the contribution to the Fock operator from the core electrons with the erf interaction
Needs:
list_act
list_core
mo_integrals_erf_cache
mo_integrals_erf_cache_min
mo_integrals_erf_map
mo_num
mo_two_e_integrals_erf_in_map
n_act_orb
n_core_orb
- insert_into_mo_integrals_erf_map:
File :
mo_two_e_erf_ints/map_integrals_erf.irp.f
subroutine insert_into_mo_integrals_erf_map(n_integrals, & buffer_i, buffer_values, thr)
Create new entry into MO map, or accumulate in an existing entry
Needs:
mo_integrals_erf_map
Called by:
add_integrals_to_map_erf()
Calls:
map_update()
- int_erf_3_index
File :
mo_two_e_erf_ints/ints_erf_3_index.irp.f
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)
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
Needs:
mo_integrals_erf_cache
mo_integrals_erf_cache_min
mo_integrals_erf_map
mo_num
mo_two_e_integrals_erf_in_map
- int_erf_3_index_exc
File :
mo_two_e_erf_ints/ints_erf_3_index.irp.f
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)
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
Needs:
mo_integrals_erf_cache
mo_integrals_erf_cache_min
mo_integrals_erf_map
mo_num
mo_two_e_integrals_erf_in_map
- mo_integrals_erf_cache
File :
mo_two_e_erf_ints/map_integrals_erf.irp.f
double precision, allocatable :: mo_integrals_erf_cache (0:64*64*64*64)
Cache of MO integrals for fast access
Needs:
mo_integrals_erf_cache_min
mo_integrals_erf_map
mo_two_e_integrals_erf_in_map
Needed by:
core_fock_operator_erf
int_erf_3_index
mo_two_e_int_erf_jj
- mo_integrals_erf_cache_max
File :
mo_two_e_erf_ints/map_integrals_erf.irp.f
integer :: mo_integrals_erf_cache_min integer :: mo_integrals_erf_cache_max
Min and max values of the MOs for which the integrals are in the cache
Needs:
elec_alpha_num
mo_num
Needed by:
core_fock_operator_erf
int_erf_3_index
mo_integrals_erf_cache
mo_two_e_int_erf_jj
- mo_integrals_erf_cache_min
File :
mo_two_e_erf_ints/map_integrals_erf.irp.f
integer :: mo_integrals_erf_cache_min integer :: mo_integrals_erf_cache_max
Min and max values of the MOs for which the integrals are in the cache
Needs:
elec_alpha_num
mo_num
Needed by:
core_fock_operator_erf
int_erf_3_index
mo_integrals_erf_cache
mo_two_e_int_erf_jj
- mo_integrals_erf_map
File :
mo_two_e_erf_ints/map_integrals_erf.irp.f
type(map_type) :: mo_integrals_erf_map
MO integrals
Needs:
mo_num
Needed by:
core_fock_operator_erf
int_erf_3_index
mo_integrals_erf_cache
mo_two_e_int_erf_jj
mo_two_e_integrals_erf_in_map
- mo_two_e_int_erf_jj
File :
mo_two_e_erf_ints/mo_bi_integrals_erf.irp.f
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)
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
Needs:
mo_integrals_erf_cache
mo_integrals_erf_cache_min
mo_integrals_erf_map
mo_num
mo_two_e_integrals_erf_in_map
Needed by:
core_energy_erf
- mo_two_e_int_erf_jj_anti
File :
mo_two_e_erf_ints/mo_bi_integrals_erf.irp.f
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)
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
Needs:
mo_integrals_erf_cache
mo_integrals_erf_cache_min
mo_integrals_erf_map
mo_num
mo_two_e_integrals_erf_in_map
Needed by:
core_energy_erf
- mo_two_e_int_erf_jj_anti_from_ao
File :
mo_two_e_erf_ints/mo_bi_integrals_erf.irp.f
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)
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
Needs:
ao_integrals_erf_map
ao_integrals_threshold
ao_num
ao_two_e_integral_erf_schwartz
ao_two_e_integrals_erf_in_map
do_direct_integrals
mo_coef
mo_coef_transp
mo_num
- mo_two_e_int_erf_jj_exchange
File :
mo_two_e_erf_ints/mo_bi_integrals_erf.irp.f
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)
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
Needs:
mo_integrals_erf_cache
mo_integrals_erf_cache_min
mo_integrals_erf_map
mo_num
mo_two_e_integrals_erf_in_map
Needed by:
core_energy_erf
- mo_two_e_int_erf_jj_exchange_from_ao
File :
mo_two_e_erf_ints/mo_bi_integrals_erf.irp.f
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)
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
Needs:
ao_integrals_erf_map
ao_integrals_threshold
ao_num
ao_two_e_integral_erf_schwartz
ao_two_e_integrals_erf_in_map
do_direct_integrals
mo_coef
mo_coef_transp
mo_num
- mo_two_e_int_erf_jj_from_ao
File :
mo_two_e_erf_ints/mo_bi_integrals_erf.irp.f
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)
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
Needs:
ao_integrals_erf_map
ao_integrals_threshold
ao_num
ao_two_e_integral_erf_schwartz
ao_two_e_integrals_erf_in_map
do_direct_integrals
mo_coef
mo_coef_transp
mo_num
- mo_two_e_integrals_erf_in_map
File :
mo_two_e_erf_ints/mo_bi_integrals_erf.irp.f
logical :: mo_two_e_integrals_erf_in_map
If True, the map of MO two-electron integrals is provided
Needs:
ao_num
ao_two_e_integrals_erf_in_map
ao_two_e_integrals_in_map
ezfio_filename
full_ijkl_bitmask_4
mo_coef
mo_coef_transp
mo_integrals_erf_map
mo_integrals_threshold
mo_num
n_int
read_mo_two_e_integrals_erf
Needed by:
core_fock_operator_erf
int_erf_3_index
mo_integrals_erf_cache
mo_two_e_int_erf_jj
Subroutines / functions
- add_integrals_to_map_erf:
File :
mo_two_e_erf_ints/mo_bi_integrals_erf.irp.f
subroutine add_integrals_to_map_erf(mask_ijkl)
Adds integrals to tha MO map according to some bitmask
Needs:
ao_num
ao_two_e_integrals_in_map
mo_coef
mo_coef_transp
mo_integrals_erf_map
mo_integrals_threshold
mo_num
n_int
Called by:
mo_two_e_integrals_erf_in_map
Calls:
bitstring_to_list()
bitstring_to_str()
cpu_time()
get_ao_two_e_integrals_erf()
insert_into_mo_integrals_erf_map()
map_merge()
mo_two_e_integrals_index()
wall_time()
- clear_mo_erf_map:
File :
mo_two_e_erf_ints/mo_bi_integrals_erf.irp.f
subroutine clear_mo_erf_map
Frees the memory of the MO map
Needs:
mo_integrals_erf_map
Calls:
map_deinit()
- get_mo_erf_map_size:
File :
mo_two_e_erf_ints/map_integrals_erf.irp.f
integer*8 function get_mo_erf_map_size()
Returns the number of elements in the MO map
Needs:
mo_integrals_erf_map
- get_mo_two_e_integral_erf:
File :
mo_two_e_erf_ints/map_integrals_erf.irp.f
double precision function get_mo_two_e_integral_erf(i,j,k,l,map)
Returns one integral $langle ij|kl rangle$ in the MO basis
Needs:
mo_integrals_erf_cache
mo_integrals_erf_cache_min
mo_two_e_integrals_erf_in_map
Calls:
map_get()
two_e_integrals_index()
- get_mo_two_e_integrals_erf:
File :
mo_two_e_erf_ints/map_integrals_erf.irp.f
subroutine get_mo_two_e_integrals_erf(j,k,l,sze,out_val,map)
Returns multiple integrals $langle ij|kl rangle$ in the MO basis, all i for j,k,l fixed.
Needs:
mo_two_e_integrals_erf_in_map
Calls:
map_get_many()
two_e_integrals_index()
- get_mo_two_e_integrals_erf_coulomb_ii:
File :
mo_two_e_erf_ints/map_integrals_erf.irp.f
subroutine get_mo_two_e_integrals_erf_coulomb_ii(k,l,sze,out_val,map)
Returns multiple integrals $langle ki|li rangle$
k(1)i(2) 1/r12 l(1)i(2) :: out_val(i1) for k,l fixed.
Needs:
mo_two_e_integrals_erf_in_map
Calls:
map_get_many()
two_e_integrals_index()
- get_mo_two_e_integrals_erf_exch_ii:
File :
mo_two_e_erf_ints/map_integrals_erf.irp.f
subroutine get_mo_two_e_integrals_erf_exch_ii(k,l,sze,out_val,map)
Returns multiple integrals $langle ki|il rangle$
$int k(1)i(2) frac{1}{r_{12}} i(1)l(2)$ :: out_val(i1) for k,l fixed.
Needs:
mo_two_e_integrals_erf_in_map
Calls:
map_get_many()
two_e_integrals_index()
- get_mo_two_e_integrals_erf_i1j1:
File :
mo_two_e_erf_ints/map_integrals_erf.irp.f
subroutine get_mo_two_e_integrals_erf_i1j1(k,l,sze,out_array,map)
Returns multiple integrals $langle ik|jl rangle$ in the MO basis, all $int i(1)j(1) frac{erf(mu * r_{12})}{r_{12}} k(2)l(2)$ i, j for k,l fixed.
Needs:
mo_integrals_erf_map
mo_two_e_integrals_erf_in_map
Calls:
i2radix_sort()
i8radix_sort()
iradix_sort()
map_get_many()
two_e_integrals_index()
- get_mo_two_e_integrals_erf_ij:
File :
mo_two_e_erf_ints/map_integrals_erf.irp.f
subroutine get_mo_two_e_integrals_erf_ij(k,l,sze,out_array,map)
Returns multiple integrals $langle ij|kl rangle$ in the MO basis, all $int i(1)j(2) frac{1}{r_{12}} k(1)l(2)$ i, j for k,l fixed.
Needs:
mo_integrals_erf_map
mo_two_e_integrals_erf_in_map
Calls:
i2radix_sort()
i8radix_sort()
iradix_sort()
map_get_many()
two_e_integrals_index()
- load_mo_integrals_erf:
File :
mo_two_e_erf_ints/map_integrals_erf.irp.f
integer function load_mo_integrals_erf(filename)
Read from disk the MO erf integrals
Needs:
mo_integrals_erf_map
Calls:
cache_map_reallocate()
map_deinit()
map_sort()
- mo_two_e_integral_erf:
File :
mo_two_e_erf_ints/map_integrals_erf.irp.f
double precision function mo_two_e_integral_erf(i,j,k,l)
Returns one integral $langle ij|kl rangle$ in the MO basis
Needs:
mo_integrals_erf_cache
mo_integrals_erf_map
mo_two_e_integrals_erf_in_map
- mo_two_e_integrals_erf_index:
File :
mo_two_e_erf_ints/mo_bi_integrals_erf.irp.f
subroutine mo_two_e_integrals_erf_index(i,j,k,l,i1)
Computes an unique index for i,j,k,l integrals
- provide_all_mo_integrals_erf:
File :
mo_two_e_erf_ints/mo_bi_integrals_erf.irp.f
subroutine provide_all_mo_integrals_erf
Needs:
mo_integrals_erf_map
mo_two_e_int_erf_jj
mo_two_e_int_erf_jj
mo_two_e_int_erf_jj
mo_two_e_integrals_erf_in_map
- save_erf_two_e_integrals_mo:
File :
mo_two_e_erf_ints/routines_save_integrals_erf.irp.f
subroutine save_erf_two_e_integrals_mo
Needs:
ezfio_filename
mo_integrals_erf_map
mo_two_e_integrals_erf_in_map
Called by:
routine()
Calls:
ezfio_set_mo_two_e_erf_ints_io_mo_two_e_integrals_erf()
ezfio_set_work_empty()
map_save_to_disk()
- save_erf_two_e_ints_mo_into_ints_mo:
File :
mo_two_e_erf_ints/routines_save_integrals_erf.irp.f
subroutine save_erf_two_e_ints_mo_into_ints_mo
Needs:
ezfio_filename
mo_integrals_erf_map
mo_two_e_integrals_erf_in_map
Calls:
ezfio_set_mo_two_e_ints_io_mo_two_e_integrals()
ezfio_set_work_empty()
map_save_to_disk()