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_threshold
then <ij|kl> is zeroDefault: 1.e-15
Providers
- banned_excitation
File :
mo_two_e_ints/map_integrals.irp.f
logical, allocatable :: banned_excitation (mo_num,mo_num)
If true, the excitation is banned in the selection. Useful with local MOs.
Needs:
mo_integrals_map
mo_num
Needed by:
big_array_coulomb_integrals
core_fock_operator
mo_two_e_integrals_jj
- big_array_coulomb_integrals
File :
mo_two_e_ints/integrals_3_index.irp.f
double 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:
banned_excitation
mo_integrals_cache
mo_integrals_cache_min
mo_integrals_map
mo_num
mo_two_e_integrals_in_map
Needed by:
h_matrix_all_dets
h_matrix_cas
- big_array_exchange_integrals
File :
mo_two_e_ints/integrals_3_index.irp.f
double 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:
banned_excitation
mo_integrals_cache
mo_integrals_cache_min
mo_integrals_map
mo_num
mo_two_e_integrals_in_map
Needed by:
h_matrix_all_dets
h_matrix_cas
- core_energy
File :
mo_two_e_ints/core_quantities.irp.f
double precision :: core_energy
energy from the core : contains all core-core contributions
Needs:
list_core
mo_one_e_integrals
mo_two_e_integrals_jj
n_core_orb
nuclear_repulsion
- core_fock_operator
File :
mo_two_e_ints/core_quantities.irp.f
double precision, allocatable :: core_fock_operator (mo_num,mo_num)
this is the contribution to the Fock operator from the core electrons
Needs:
banned_excitation
list_act
list_core
mo_integrals_cache
mo_integrals_cache_min
mo_integrals_map
mo_num
mo_two_e_integrals_in_map
n_act_orb
n_core_orb
- insert_into_mo_integrals_map:
File :
mo_two_e_ints/map_integrals.irp.f
subroutine 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:
mo_integrals_map
Called by:
add_integrals_to_map()
add_integrals_to_map_no_exit_34()
add_integrals_to_map_three_indices()
Calls:
map_update()
- mo_coef_novirt
File :
mo_two_e_ints/four_idx_novvvv.irp.f
double precision, allocatable :: mo_coef_novirt (ao_num,n_core_inact_act_orb)
MO coefficients without virtual MOs
Needs:
ao_num
list_core_inact_act
mo_coef
n_core_inact_act_orb
- mo_integrals_cache
File :
mo_two_e_ints/map_integrals.irp.f
double precision, allocatable :: mo_integrals_cache (0_8:128_8*128_8*128_8*128_8)
Cache of MO integrals for fast access
Needs:
mo_integrals_cache_min
mo_integrals_map
mo_two_e_integrals_in_map
Needed by:
big_array_coulomb_integrals
core_fock_operator
mo_two_e_integrals_jj
- mo_integrals_cache_max
File :
mo_two_e_ints/map_integrals.irp.f
integer*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
mo_num
Needed by:
big_array_coulomb_integrals
core_fock_operator
mo_integrals_cache
mo_two_e_integrals_jj
- mo_integrals_cache_max_8
File :
mo_two_e_ints/map_integrals.irp.f
integer*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
mo_num
Needed by:
big_array_coulomb_integrals
core_fock_operator
mo_integrals_cache
mo_two_e_integrals_jj
- mo_integrals_cache_min
File :
mo_two_e_ints/map_integrals.irp.f
integer*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
mo_num
Needed by:
big_array_coulomb_integrals
core_fock_operator
mo_integrals_cache
mo_two_e_integrals_jj
- mo_integrals_cache_min_8
File :
mo_two_e_ints/map_integrals.irp.f
integer*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
mo_num
Needed by:
big_array_coulomb_integrals
core_fock_operator
mo_integrals_cache
mo_two_e_integrals_jj
- mo_integrals_map
File :
mo_two_e_ints/map_integrals.irp.f
type(map_type) :: mo_integrals_map
MO integrals
Needs:
mo_num
Needed by:
banned_excitation
big_array_coulomb_integrals
core_fock_operator
fock_operator_closed_shell_ref_bitmask
fock_wee_closed_shell
h_matrix_all_dets
h_matrix_cas
mo_integrals_cache
mo_two_e_integrals_in_map
mo_two_e_integrals_jj
- mo_two_e_integral_jj_from_ao
File :
mo_two_e_ints/mo_bi_integrals.irp.f
double 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_map
ao_integrals_threshold
ao_num
ao_two_e_integrals_in_map
do_direct_integrals
mo_coef
mo_coef_transp
mo_num
- mo_two_e_integrals_in_map
File :
mo_two_e_ints/mo_bi_integrals.irp.f
logical :: mo_two_e_integrals_in_map
If True, the map of MO two-electron integrals is provided
Needs:
ao_integrals_map
ao_num
ao_two_e_integrals_in_map
ezfio_filename
full_ijkl_bitmask_4
list_core_inact_act
mo_class
mo_coef
mo_coef_transp
mo_integrals_map
mo_integrals_threshold
mo_num
mpi_master
n_core_inact_act_orb
n_int
no_vvvv_integrals
read_mo_two_e_integrals
Needed by:
act_2_rdm_aa_mo
act_2_rdm_ab_mo
act_2_rdm_bb_mo
act_2_rdm_spin_trace_mo
big_array_coulomb_integrals
ci_electronic_energy
core_fock_operator
fock_operator_closed_shell_ref_bitmask
fock_wee_closed_shell
h_matrix_all_dets
h_matrix_cas
mo_integrals_cache
mo_two_e_integrals_jj
- mo_two_e_integrals_jj
File :
mo_two_e_ints/mo_bi_integrals.irp.f
double 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:
banned_excitation
mo_integrals_cache
mo_integrals_cache_min
mo_integrals_map
mo_num
mo_two_e_integrals_in_map
Needed by:
core_energy
ref_bitmask_energy
- mo_two_e_integrals_jj_anti
File :
mo_two_e_ints/mo_bi_integrals.irp.f
double 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:
banned_excitation
mo_integrals_cache
mo_integrals_cache_min
mo_integrals_map
mo_num
mo_two_e_integrals_in_map
Needed by:
core_energy
ref_bitmask_energy
- mo_two_e_integrals_jj_anti_from_ao
File :
mo_two_e_ints/mo_bi_integrals.irp.f
double 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_map
ao_integrals_threshold
ao_num
ao_two_e_integrals_in_map
do_direct_integrals
mo_coef
mo_coef_transp
mo_num
- mo_two_e_integrals_jj_exchange
File :
mo_two_e_ints/mo_bi_integrals.irp.f
double 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:
banned_excitation
mo_integrals_cache
mo_integrals_cache_min
mo_integrals_map
mo_num
mo_two_e_integrals_in_map
Needed by:
core_energy
ref_bitmask_energy
- mo_two_e_integrals_jj_exchange_from_ao
File :
mo_two_e_ints/mo_bi_integrals.irp.f
double 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_map
ao_integrals_threshold
ao_num
ao_two_e_integrals_in_map
do_direct_integrals
mo_coef
mo_coef_transp
mo_num
- mo_two_e_integrals_vv_anti_from_ao
File :
mo_two_e_ints/mo_bi_integrals.irp.f
double 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_map
ao_integrals_threshold
ao_num
ao_two_e_integrals_in_map
do_direct_integrals
list_virt
mo_coef
mo_coef_transp
mo_num
n_virt_orb
- mo_two_e_integrals_vv_exchange_from_ao
File :
mo_two_e_ints/mo_bi_integrals.irp.f
double 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_map
ao_integrals_threshold
ao_num
ao_two_e_integrals_in_map
do_direct_integrals
list_virt
mo_coef
mo_coef_transp
mo_num
n_virt_orb
- mo_two_e_integrals_vv_from_ao
File :
mo_two_e_ints/mo_bi_integrals.irp.f
double 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_map
ao_integrals_threshold
ao_num
ao_two_e_integrals_in_map
do_direct_integrals
list_virt
mo_coef
mo_coef_transp
mo_num
n_virt_orb
Subroutines / functions
- add_integrals_to_map:
File :
mo_two_e_ints/mo_bi_integrals.irp.f
subroutine add_integrals_to_map(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_map
mo_integrals_threshold
mo_num
n_int
Called by:
four_idx_novvvv2()
mo_two_e_integrals_in_map
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_no_exit_34:
File :
mo_two_e_ints/mo_bi_integrals.irp.f
subroutine add_integrals_to_map_no_exit_34(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_map
mo_integrals_threshold
mo_num
n_int
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.f
subroutine add_integrals_to_map_three_indices(mask_ijk)
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_map
mo_integrals_threshold
mo_num
n_int
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()
- ao_to_mo_novirt:
File :
mo_two_e_ints/four_idx_novvvv.irp.f
subroutine ao_to_mo_novirt(A_ao,LDA_ao,A_mo,LDA_mo)
Transform A from the AO basis to the MO basis excluding virtuals
$C^dagger.A_{ao}.C$
Needs:
ao_num
mo_coef_novirt
n_core_inact_act_orb
Called by:
four_idx_novvvv()
Calls:
dgemm()
- clear_mo_map:
File :
mo_two_e_ints/mo_bi_integrals.irp.f
subroutine clear_mo_map
Frees the memory of the MO map
Needs:
mo_integrals_map
Calls:
map_deinit()
- dump_mo_integrals:
File :
mo_two_e_ints/map_integrals.irp.f
subroutine dump_mo_integrals(filename)
Save to disk the MO integrals
Needs:
mo_integrals_map
mpi_master
Calls:
ezfio_set_work_empty()
- four_idx_novvvv:
File :
mo_two_e_ints/four_idx_novvvv.irp.f
subroutine four_idx_novvvv
Retransform MO integrals for next CAS-SCF step
Needs:
ao_integrals_map
ao_num
list_core_inact_act
mo_integrals_map
mo_integrals_threshold
mo_num
n_core_inact_act_orb
Called by:
mo_two_e_integrals_in_map
Calls:
ao_to_mo()
ao_to_mo_novirt()
map_append()
map_shrink()
map_sort()
map_unique()
two_e_integrals_index()
- four_idx_novvvv2:
File :
mo_two_e_ints/four_idx_novvvv.irp.f
subroutine four_idx_novvvv2
Needs:
core_inact_act_bitmask_4
full_ijkl_bitmask_4
n_int
virt_bitmask
Calls:
add_integrals_to_map()
- get_mo_map_size:
File :
mo_two_e_ints/map_integrals.irp.f
integer*8 function get_mo_map_size()
Return the number of elements in the MO map
Needs:
mo_integrals_map
- get_mo_two_e_integrals:
File :
mo_two_e_ints/map_integrals.irp.f
subroutine 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:
banned_excitation
mo_integrals_cache
mo_integrals_cache_min
mo_two_e_integrals_in_map
Called by:
get_mo_two_e_integrals_i1j1()
get_mo_two_e_integrals_ij()
Calls:
map_get()
- get_mo_two_e_integrals_coulomb_ii:
File :
mo_two_e_ints/map_integrals.irp.f
subroutine 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:
mo_two_e_integrals_in_map
Called by:
fock_operator_closed_shell_ref_bitmask
fock_wee_closed_shell
- get_mo_two_e_integrals_exch_ii:
File :
mo_two_e_ints/map_integrals.irp.f
subroutine 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:
mo_two_e_integrals_in_map
Called by:
fock_operator_closed_shell_ref_bitmask
fock_wee_closed_shell
- get_mo_two_e_integrals_i1j1:
File :
mo_two_e_ints/map_integrals.irp.f
subroutine 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:
mo_two_e_integrals_in_map
Calls:
get_mo_two_e_integrals()
- get_mo_two_e_integrals_ij:
File :
mo_two_e_ints/map_integrals.irp.f
subroutine 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.
Calls:
get_mo_two_e_integrals()
- get_two_e_integral:
File :
mo_two_e_ints/map_integrals.irp.f
double precision function get_two_e_integral(i,j,k,l,map)
Returns one integral <ij|kl> in the MO basis
Needs:
banned_excitation
mo_integrals_cache
mo_integrals_cache_min
mo_two_e_integrals_in_map
Calls:
map_get()
two_e_integrals_index()
- load_mo_integrals:
File :
mo_two_e_ints/map_integrals.irp.f
integer function load_mo_integrals(filename)
Read from disk the MO integrals
Needs:
mo_integrals_map
Calls:
cache_map_reallocate()
map_deinit()
map_sort()
- mo_two_e_integral:
File :
mo_two_e_ints/map_integrals.irp.f
double precision function mo_two_e_integral(i,j,k,l)
Returns one integral <ij|kl> in the MO basis
Needs:
mo_integrals_cache
mo_integrals_map
mo_two_e_integrals_in_map
- mo_two_e_integrals_index:
File :
mo_two_e_ints/mo_bi_integrals.irp.f
subroutine 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_no_exit_34()
add_integrals_to_map_three_indices()