mo_two_e_ints¶
Here, all two-electron integrals (\(1/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.
To fetch an AO integral, use the
get_ao_two_e_integral(i,j,k,l,ao_integrals_map) function, and
to fetch an MO integral, use
get_two_e_integral(i,j,k,l,mo_integrals_map) or
mo_two_e_integral(i,j,k,l).
The conventions are:
- For AO integrals : (ik|jl) = (11|22)
- For MO integrals : <ij|kl> = <12|12>
EZFIO parameters¶
-
io_mo_two_e_integrals¶ Read/Write MO integrals from/to disk [ Write | Read | None ]
Default: None
-
mo_integrals_threshold¶ If | <ij|kl> | <
mo_integrals_thresholdthen <ij|kl> is zeroDefault: 1.e-15
-
no_vvvv_integrals¶ If
True, computes all integrals except for the integrals having 4 virtual indicesDefault: False
-
no_ivvv_integrals¶ Can be switched on only if
no_vvvv_integralsisTrue, then does not compute the integrals with 3 virtual indices and 1 belonging to the core inactive active orbitalsDefault: False
-
no_vvv_integrals¶ Can be switched on only if
no_vvvv_integralsisTrue, then does not compute the integrals with 3 virtual orbitalsDefault: False
Providers¶
-
big_array_coulomb_integrals¶ File :
mo_two_e_ints/integrals_3_index.irp.fdouble precision, allocatable :: big_array_coulomb_integrals (mo_num,mo_num,mo_num) double precision, allocatable :: big_array_exchange_integrals (mo_num,mo_num,mo_num)
big_array_coulomb_integrals(i,j) = <ij|ij> = (ii|jj)
big_array_exchange_integrals(i,j) = <ij|ji> = (ij|ij)
Needs:
Needed by:
-
big_array_exchange_integrals¶ File :
mo_two_e_ints/integrals_3_index.irp.fdouble precision, allocatable :: big_array_coulomb_integrals (mo_num,mo_num,mo_num) double precision, allocatable :: big_array_exchange_integrals (mo_num,mo_num,mo_num)
big_array_coulomb_integrals(i,j) = <ij|ij> = (ii|jj)
big_array_exchange_integrals(i,j) = <ij|ji> = (ij|ij)
Needs:
Needed by:
-
core_energy¶ File :
mo_two_e_ints/core_quantities.irp.fdouble precision :: core_energy
energy from the core : contains all core-core contributions
Needs:
-
core_fock_operator¶ File :
mo_two_e_ints/core_quantities.irp.fdouble precision, allocatable :: core_fock_operator (mo_num,mo_num)
this is the contribution to the Fock operator from the core electrons
Needs:
-
insert_into_mo_integrals_map:()¶ File :
mo_two_e_ints/map_integrals.irp.fsubroutine insert_into_mo_integrals_map(n_integrals, & buffer_i, buffer_values, thr)
Create new entry into MO map, or accumulate in an existing entry
Needs:
Called by:
add_integrals_to_map()
add_integrals_to_map_no_exit_34()
add_integrals_to_map_three_indices()
Calls:
map_update()
-
mo_integrals_cache¶ File :
mo_two_e_ints/map_integrals.irp.fdouble precision, allocatable :: mo_integrals_cache (0_8:128_8*128_8*128_8*128_8)
Cache of MO integrals for fast access
Needs:
Needed by:
-
mo_integrals_cache_max¶ File :
mo_two_e_ints/map_integrals.irp.finteger*4 :: mo_integrals_cache_min integer*4 :: mo_integrals_cache_max integer*8 :: mo_integrals_cache_min_8 integer*8 :: mo_integrals_cache_max_8
Min and max values of the MOs for which the integrals are in the cache
Needs:
elec_alpha_num
Needed by:
-
mo_integrals_cache_max_8¶ File :
mo_two_e_ints/map_integrals.irp.finteger*4 :: mo_integrals_cache_min integer*4 :: mo_integrals_cache_max integer*8 :: mo_integrals_cache_min_8 integer*8 :: mo_integrals_cache_max_8
Min and max values of the MOs for which the integrals are in the cache
Needs:
elec_alpha_num
Needed by:
-
mo_integrals_cache_min¶ File :
mo_two_e_ints/map_integrals.irp.finteger*4 :: mo_integrals_cache_min integer*4 :: mo_integrals_cache_max integer*8 :: mo_integrals_cache_min_8 integer*8 :: mo_integrals_cache_max_8
Min and max values of the MOs for which the integrals are in the cache
Needs:
elec_alpha_num
Needed by:
-
mo_integrals_cache_min_8¶ File :
mo_two_e_ints/map_integrals.irp.finteger*4 :: mo_integrals_cache_min integer*4 :: mo_integrals_cache_max integer*8 :: mo_integrals_cache_min_8 integer*8 :: mo_integrals_cache_max_8
Min and max values of the MOs for which the integrals are in the cache
Needs:
elec_alpha_num
Needed by:
-
mo_integrals_map¶ File :
mo_two_e_ints/map_integrals.irp.ftype(map_type) :: mo_integrals_map
MO integrals
Needs:
Needed by:
-
mo_two_e_integral_jj_from_ao¶ File :
mo_two_e_ints/mo_bi_integrals.irp.fdouble precision, allocatable :: mo_two_e_integral_jj_from_ao (mo_num,mo_num) double precision, allocatable :: mo_two_e_integrals_jj_exchange_from_ao (mo_num,mo_num) double precision, allocatable :: mo_two_e_integrals_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_mapao_integrals_thresholdao_numao_overlap_abs
ao_two_e_integral_schwartzao_two_e_integrals_in_mapdo_direct_integrals
-
mo_two_e_integrals_in_map¶ File :
mo_two_e_ints/mo_bi_integrals.irp.flogical :: mo_two_e_integrals_in_map
If True, the map of MO two-electron integrals is provided
Needs:
mo_classmo_coefmo_coef_transpmo_integrals_mapmo_integrals_thresholdmo_num
mpi_mastern_intno_ivvv_integralsno_vvv_integralsno_vvvv_integralsread_mo_two_e_integrals
Needed by:
-
mo_two_e_integrals_jj¶ File :
mo_two_e_ints/mo_bi_integrals.irp.fdouble precision, allocatable :: mo_two_e_integrals_jj (mo_num,mo_num) double precision, allocatable :: mo_two_e_integrals_jj_exchange (mo_num,mo_num) double precision, allocatable :: mo_two_e_integrals_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:
Needed by:
-
mo_two_e_integrals_jj_anti¶ File :
mo_two_e_ints/mo_bi_integrals.irp.fdouble precision, allocatable :: mo_two_e_integrals_jj (mo_num,mo_num) double precision, allocatable :: mo_two_e_integrals_jj_exchange (mo_num,mo_num) double precision, allocatable :: mo_two_e_integrals_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:
Needed by:
-
mo_two_e_integrals_jj_anti_from_ao¶ File :
mo_two_e_ints/mo_bi_integrals.irp.fdouble precision, allocatable :: mo_two_e_integral_jj_from_ao (mo_num,mo_num) double precision, allocatable :: mo_two_e_integrals_jj_exchange_from_ao (mo_num,mo_num) double precision, allocatable :: mo_two_e_integrals_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_mapao_integrals_thresholdao_numao_overlap_abs
ao_two_e_integral_schwartzao_two_e_integrals_in_mapdo_direct_integrals
-
mo_two_e_integrals_jj_exchange¶ File :
mo_two_e_ints/mo_bi_integrals.irp.fdouble precision, allocatable :: mo_two_e_integrals_jj (mo_num,mo_num) double precision, allocatable :: mo_two_e_integrals_jj_exchange (mo_num,mo_num) double precision, allocatable :: mo_two_e_integrals_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:
Needed by:
-
mo_two_e_integrals_jj_exchange_from_ao¶ File :
mo_two_e_ints/mo_bi_integrals.irp.fdouble precision, allocatable :: mo_two_e_integral_jj_from_ao (mo_num,mo_num) double precision, allocatable :: mo_two_e_integrals_jj_exchange_from_ao (mo_num,mo_num) double precision, allocatable :: mo_two_e_integrals_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_mapao_integrals_thresholdao_numao_overlap_abs
ao_two_e_integral_schwartzao_two_e_integrals_in_mapdo_direct_integrals
-
mo_two_e_integrals_vv_anti_from_ao¶ File :
mo_two_e_ints/mo_bi_integrals.irp.fdouble precision, allocatable :: mo_two_e_integrals_vv_from_ao (mo_num,mo_num) double precision, allocatable :: mo_two_e_integrals_vv_exchange_from_ao (mo_num,mo_num) double precision, allocatable :: mo_two_e_integrals_vv_anti_from_ao (mo_num,mo_num)
mo_two_e_integrals_vv_from_ao(i,j) = J_ij mo_two_e_integrals_vv_exchange_from_ao(i,j) = J_ij mo_two_e_integrals_vv_anti_from_ao(i,j) = J_ij - K_ij but only for the virtual orbitals
Needs:
ao_integrals_mapao_integrals_thresholdao_numao_overlap_abs
ao_two_e_integral_schwartzao_two_e_integrals_in_mapdo_direct_integralslist_inact
-
mo_two_e_integrals_vv_exchange_from_ao¶ File :
mo_two_e_ints/mo_bi_integrals.irp.fdouble precision, allocatable :: mo_two_e_integrals_vv_from_ao (mo_num,mo_num) double precision, allocatable :: mo_two_e_integrals_vv_exchange_from_ao (mo_num,mo_num) double precision, allocatable :: mo_two_e_integrals_vv_anti_from_ao (mo_num,mo_num)
mo_two_e_integrals_vv_from_ao(i,j) = J_ij mo_two_e_integrals_vv_exchange_from_ao(i,j) = J_ij mo_two_e_integrals_vv_anti_from_ao(i,j) = J_ij - K_ij but only for the virtual orbitals
Needs:
ao_integrals_mapao_integrals_thresholdao_numao_overlap_abs
ao_two_e_integral_schwartzao_two_e_integrals_in_mapdo_direct_integralslist_inact
-
mo_two_e_integrals_vv_from_ao¶ File :
mo_two_e_ints/mo_bi_integrals.irp.fdouble precision, allocatable :: mo_two_e_integrals_vv_from_ao (mo_num,mo_num) double precision, allocatable :: mo_two_e_integrals_vv_exchange_from_ao (mo_num,mo_num) double precision, allocatable :: mo_two_e_integrals_vv_anti_from_ao (mo_num,mo_num)
mo_two_e_integrals_vv_from_ao(i,j) = J_ij mo_two_e_integrals_vv_exchange_from_ao(i,j) = J_ij mo_two_e_integrals_vv_anti_from_ao(i,j) = J_ij - K_ij but only for the virtual orbitals
Needs:
ao_integrals_mapao_integrals_thresholdao_numao_overlap_abs
ao_two_e_integral_schwartzao_two_e_integrals_in_mapdo_direct_integralslist_inact
Subroutines / functions¶
-
add_integrals_to_map:()¶ File :
mo_two_e_ints/mo_bi_integrals.irp.fsubroutine add_integrals_to_map(mask_ijkl)
Adds integrals to tha MO map according to some bitmask
Needs:
mo_coefmo_integrals_thresholdmo_coef_transp
ao_nummo_integrals_mapmo_num
Called by:
Calls:
bitstring_to_list()bitstring_to_str()cpu_time()
get_ao_two_e_integrals()insert_into_mo_integrals_map()map_merge()
mo_two_e_integrals_index()wall_time()
-
add_integrals_to_map_no_exit_34:()¶ File :
mo_two_e_ints/mo_bi_integrals.irp.fsubroutine add_integrals_to_map_no_exit_34(mask_ijkl)
Adds integrals to tha MO map according to some bitmask
Needs:
mo_coefmo_integrals_thresholdmo_coef_transp
ao_nummo_integrals_mapmo_num
Called by:
Calls:
bitstring_to_list()cpu_time()get_ao_two_e_integrals()
insert_into_mo_integrals_map()map_merge()
mo_two_e_integrals_index()wall_time()
-
add_integrals_to_map_three_indices:()¶ File :
mo_two_e_ints/mo_bi_integrals.irp.fsubroutine add_integrals_to_map_three_indices(mask_ijk)
Adds integrals to tha MO map according to some bitmask
Needs:
mo_coefmo_integrals_thresholdmo_coef_transp
ao_nummo_integrals_mapmo_num
Called by:
Calls:
bitstring_to_list()bitstring_to_str()cpu_time()
get_ao_two_e_integrals()insert_into_mo_integrals_map()map_merge()
mo_two_e_integrals_index()wall_time()
-
clear_mo_map:()¶ File :
mo_two_e_ints/mo_bi_integrals.irp.fsubroutine clear_mo_map
Frees the memory of the MO map
Needs:
Calls:
map_deinit()
-
dump_mo_integrals:()¶ File :
mo_two_e_ints/map_integrals.irp.fsubroutine dump_mo_integrals(filename)
Save to disk the MO integrals
Needs:
Calls:
ezfio_set_work_empty()
-
get_mo_map_size:()¶ File :
mo_two_e_ints/map_integrals.irp.finteger*8 function get_mo_map_size()
Return the number of elements in the MO map
Needs:
-
get_mo_two_e_integrals:()¶ File :
mo_two_e_ints/map_integrals.irp.fsubroutine get_mo_two_e_integrals(j,k,l,sze,out_val,map)
Returns multiple integrals <ij|kl> in the MO basis, all i for j,k,l fixed.
Needs:
Called by:
get_d0()
get_d1()
Calls:
map_get()
-
get_mo_two_e_integrals_coulomb_ii:()¶ File :
mo_two_e_ints/map_integrals.irp.fsubroutine get_mo_two_e_integrals_coulomb_ii(k,l,sze,out_val,map)
Returns multiple integrals <ki|li> k(1)i(2) 1/r12 l(1)i(2) :: out_val(i1) for k,l fixed.
Needs:
Called by:
Calls:
map_get_many()
two_e_integrals_index()
-
get_mo_two_e_integrals_exch_ii:()¶ File :
mo_two_e_ints/map_integrals.irp.fsubroutine get_mo_two_e_integrals_exch_ii(k,l,sze,out_val,map)
Returns multiple integrals <ki|il> k(1)i(2) 1/r12 i(1)l(2) :: out_val(i1) for k,l fixed.
Needs:
Called by:
Calls:
map_get_many()
two_e_integrals_index()
-
get_mo_two_e_integrals_i1j1:()¶ File :
mo_two_e_ints/map_integrals.irp.fsubroutine get_mo_two_e_integrals_i1j1(k,l,sze,out_array,map)
Returns multiple integrals <ik|jl> in the MO basis, all i(1)j(1) 1/r12 k(2)l(2) i, j for k,l fixed.
Needs:
Calls:
i2radix_sort()i8radix_sort()
iradix_sort()map_get_many()
two_e_integrals_index()
-
get_mo_two_e_integrals_ij:()¶ File :
mo_two_e_ints/map_integrals.irp.fsubroutine get_mo_two_e_integrals_ij(k,l,sze,out_array,map)
Returns multiple integrals <ij|kl> in the MO basis, all i(1)j(2) 1/r12 k(1)l(2) i, j for k,l fixed.
Needs:
Calls:
i2radix_sort()i8radix_sort()
iradix_sort()map_get_many()
two_e_integrals_index()
-
get_two_e_integral:()¶ File :
mo_two_e_ints/map_integrals.irp.fdouble precision function get_two_e_integral(i,j,k,l,map)
Returns one integral <ij|kl> in the MO basis
Needs:
Calls:
map_get()
two_e_integrals_index()
-
load_mo_integrals:()¶ File :
mo_two_e_ints/map_integrals.irp.finteger function load_mo_integrals(filename)
Read from disk the MO integrals
Needs:
Calls:
cache_map_reallocate()
map_deinit()
map_sort()
-
mo_two_e_integral:()¶ File :
mo_two_e_ints/map_integrals.irp.fdouble precision function mo_two_e_integral(i,j,k,l)
Returns one integral <ij|kl> in the MO basis
Needs:
-
mo_two_e_integrals_index:()¶ File :
mo_two_e_ints/mo_bi_integrals.irp.fsubroutine mo_two_e_integrals_index(i,j,k,l,i1)
Computes an unique index for i,j,k,l integrals
Called by:
add_integrals_to_map()add_integrals_to_map_erf()
add_integrals_to_map_no_exit_34()
add_integrals_to_map_three_indices()