2019-01-25 11:39:31 +01:00
.. _module_mo_two_e_ints:
.. program :: mo_two_e_ints
.. default-role :: option
==================
mo_two_e_ints
==================
Here, all two-electron integrals (:math: `1/r_{12}` ) are computed.
As they have 4 indices and many are zero, they are stored in a map, as defined
in :file: `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
----------------
.. option :: io_mo_two_e_integrals
Read/Write |MO| integrals from/to disk [ Write | Read | None ]
Default: None
.. option :: mo_integrals_threshold
If | <ij|kl> | < `mo_integrals_threshold` then <ij|kl> is zero
Default: 1.e-15
.. option :: no_vvvv_integrals
If `True` , computes all integrals except for the integrals having 4 virtual indices
Default: False
.. option :: no_ivvv_integrals
Can be switched on only if `no_vvvv_integrals` is `True` , then does not compute the integrals with 3 virtual indices and 1 belonging to the core inactive active orbitals
Default: False
.. option :: no_vvv_integrals
Can be switched on only if `no_vvvv_integrals` is `True` , then does not compute the integrals with 3 virtual orbitals
Default: False
Providers
---------
.. c:var :: big_array_coulomb_integrals
File : :file: `mo_two_e_ints/integrals_3_index.irp.f`
.. code :: fortran
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:
.. hlist ::
:columns: 3
* :c:data: `mo_integrals_cache`
* :c:data: `mo_integrals_cache_min`
* :c:data: `mo_integrals_map`
* :c:data: `mo_num`
* :c:data: `mo_two_e_integrals_in_map`
Needed by:
.. hlist ::
:columns: 3
* :c:data: `coef_hf_selector`
* :c:data: `h_matrix_all_dets`
* :c:data: `h_matrix_cas`
.. c:var :: big_array_exchange_integrals
File : :file: `mo_two_e_ints/integrals_3_index.irp.f`
.. code :: fortran
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:
.. hlist ::
:columns: 3
* :c:data: `mo_integrals_cache`
* :c:data: `mo_integrals_cache_min`
* :c:data: `mo_integrals_map`
* :c:data: `mo_num`
* :c:data: `mo_two_e_integrals_in_map`
Needed by:
.. hlist ::
:columns: 3
* :c:data: `coef_hf_selector`
* :c:data: `h_matrix_all_dets`
* :c:data: `h_matrix_cas`
.. c:var :: core_energy
File : :file: `mo_two_e_ints/core_quantities.irp.f`
.. code :: fortran
double precision :: core_energy
energy from the core : contains all core-core contributions
Needs:
.. hlist ::
:columns: 3
2019-01-25 14:54:22 +01:00
* :c:data: `list_inact`
2019-01-25 11:39:31 +01:00
* :c:data: `mo_one_e_integrals`
* :c:data: `mo_two_e_integrals_jj`
2019-01-25 14:54:22 +01:00
* :c:data: `n_core_orb`
2019-01-25 11:39:31 +01:00
* :c:data: `nuclear_repulsion`
.. c:var :: core_fock_operator
File : :file: `mo_two_e_ints/core_quantities.irp.f`
.. code :: fortran
double precision, allocatable :: core_fock_operator (mo_num,mo_num)
this is the contribution to the Fock operator from the core electrons
Needs:
.. hlist ::
:columns: 3
2019-01-25 14:54:22 +01:00
* :c:data: `list_inact`
2019-01-25 11:39:31 +01:00
* :c:data: `mo_integrals_cache`
* :c:data: `mo_integrals_cache_min`
* :c:data: `mo_integrals_map`
* :c:data: `mo_num`
* :c:data: `mo_two_e_integrals_in_map`
2019-01-25 14:54:22 +01:00
* :c:data: `n_core_orb`
2019-01-25 11:39:31 +01:00
.. c:function :: insert_into_mo_integrals_map:
File : :file: `mo_two_e_ints/map_integrals.irp.f`
.. code :: fortran
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:
.. hlist ::
:columns: 3
* :c:data: `mo_integrals_map`
Called by:
.. hlist ::
:columns: 3
* :c:func: `add_integrals_to_map`
* :c:func: `add_integrals_to_map_no_exit_34`
* :c:func: `add_integrals_to_map_three_indices`
Calls:
.. hlist ::
:columns: 3
* :c:func: `map_update`
.. c:var :: mo_integrals_cache
File : :file: `mo_two_e_ints/map_integrals.irp.f`
.. code :: fortran
double precision, allocatable :: mo_integrals_cache (0_8:128_8*128_8* 128_8*128_8)
Cache of MO integrals for fast access
Needs:
.. hlist ::
:columns: 3
* :c:data: `mo_integrals_cache_min`
* :c:data: `mo_integrals_map`
* :c:data: `mo_two_e_integrals_in_map`
Needed by:
.. hlist ::
:columns: 3
* :c:data: `big_array_coulomb_integrals`
* :c:data: `core_fock_operator`
* :c:data: `mo_two_e_integrals_jj`
.. c:var :: mo_integrals_cache_max
File : :file: `mo_two_e_ints/map_integrals.irp.f`
.. code :: fortran
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:
.. hlist ::
:columns: 3
* :c:data: `elec_alpha_num`
* :c:data: `mo_num`
Needed by:
.. hlist ::
:columns: 3
* :c:data: `big_array_coulomb_integrals`
* :c:data: `core_fock_operator`
* :c:data: `mo_integrals_cache`
* :c:data: `mo_two_e_integrals_jj`
.. c:var :: mo_integrals_cache_max_8
File : :file: `mo_two_e_ints/map_integrals.irp.f`
.. code :: fortran
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:
.. hlist ::
:columns: 3
* :c:data: `elec_alpha_num`
* :c:data: `mo_num`
Needed by:
.. hlist ::
:columns: 3
* :c:data: `big_array_coulomb_integrals`
* :c:data: `core_fock_operator`
* :c:data: `mo_integrals_cache`
* :c:data: `mo_two_e_integrals_jj`
.. c:var :: mo_integrals_cache_min
File : :file: `mo_two_e_ints/map_integrals.irp.f`
.. code :: fortran
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:
.. hlist ::
:columns: 3
* :c:data: `elec_alpha_num`
* :c:data: `mo_num`
Needed by:
.. hlist ::
:columns: 3
* :c:data: `big_array_coulomb_integrals`
* :c:data: `core_fock_operator`
* :c:data: `mo_integrals_cache`
* :c:data: `mo_two_e_integrals_jj`
.. c:var :: mo_integrals_cache_min_8
File : :file: `mo_two_e_ints/map_integrals.irp.f`
.. code :: fortran
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:
.. hlist ::
:columns: 3
* :c:data: `elec_alpha_num`
* :c:data: `mo_num`
Needed by:
.. hlist ::
:columns: 3
* :c:data: `big_array_coulomb_integrals`
* :c:data: `core_fock_operator`
* :c:data: `mo_integrals_cache`
* :c:data: `mo_two_e_integrals_jj`
.. c:var :: mo_integrals_map
File : :file: `mo_two_e_ints/map_integrals.irp.f`
.. code :: fortran
type(map_type) :: mo_integrals_map
MO integrals
Needs:
.. hlist ::
:columns: 3
* :c:data: `mo_num`
Needed by:
.. hlist ::
:columns: 3
* :c:data: `big_array_coulomb_integrals`
* :c:data: `coef_hf_selector`
* :c:data: `core_fock_operator`
* :c:data: `fock_operator_closed_shell_ref_bitmask`
* :c:data: `fock_wee_closed_shell`
* :c:data: `h_matrix_all_dets`
* :c:data: `h_matrix_cas`
* :c:data: `mo_integrals_cache`
* :c:data: `mo_two_e_integrals_in_map`
* :c:data: `mo_two_e_integrals_jj`
.. c:var :: mo_two_e_integral_jj_from_ao
File : :file: `mo_two_e_ints/mo_bi_integrals.irp.f`
.. code :: fortran
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:
.. hlist ::
:columns: 3
* :c:data: `ao_integrals_map`
* :c:data: `ao_integrals_threshold`
* :c:data: `ao_num`
* :c:data: `ao_overlap_abs`
* :c:data: `ao_two_e_integral_schwartz`
* :c:data: `ao_two_e_integrals_in_map`
* :c:data: `do_direct_integrals`
* :c:data: `mo_coef`
* :c:data: `mo_coef_transp`
* :c:data: `mo_num`
.. c:var :: mo_two_e_integrals_in_map
File : :file: `mo_two_e_ints/mo_bi_integrals.irp.f`
.. code :: fortran
logical :: mo_two_e_integrals_in_map
If True, the map of MO two-electron integrals is provided
Needs:
.. hlist ::
:columns: 3
* :c:data: `ao_num`
* :c:data: `ao_two_e_integrals_in_map`
* :c:data: `core_inact_act_bitmask_4`
* :c:data: `ezfio_filename`
* :c:data: `full_ijkl_bitmask_4`
2019-01-25 14:54:22 +01:00
* :c:data: `list_inact`
2019-01-25 11:39:31 +01:00
* :c:data: `mo_class`
* :c:data: `mo_coef`
* :c:data: `mo_coef_transp`
* :c:data: `mo_integrals_map`
* :c:data: `mo_integrals_threshold`
* :c:data: `mo_num`
* :c:data: `mpi_master`
* :c:data: `n_int`
* :c:data: `no_ivvv_integrals`
* :c:data: `no_vvv_integrals`
* :c:data: `no_vvvv_integrals`
* :c:data: `read_mo_two_e_integrals`
Needed by:
.. hlist ::
:columns: 3
* :c:data: `big_array_coulomb_integrals`
* :c:data: `ci_electronic_energy`
* :c:data: `coef_hf_selector`
* :c:data: `core_fock_operator`
* :c:data: `fock_operator_closed_shell_ref_bitmask`
* :c:data: `fock_wee_closed_shell`
* :c:data: `h_matrix_all_dets`
* :c:data: `h_matrix_cas`
* :c:data: `mo_integrals_cache`
* :c:data: `mo_two_e_integrals_jj`
.. c:var :: mo_two_e_integrals_jj
File : :file: `mo_two_e_ints/mo_bi_integrals.irp.f`
.. code :: fortran
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:
.. hlist ::
:columns: 3
* :c:data: `mo_integrals_cache`
* :c:data: `mo_integrals_cache_min`
* :c:data: `mo_integrals_map`
* :c:data: `mo_num`
* :c:data: `mo_two_e_integrals_in_map`
Needed by:
.. hlist ::
:columns: 3
* :c:data: `core_energy`
* :c:data: `ref_bitmask_energy`
.. c:var :: mo_two_e_integrals_jj_anti
File : :file: `mo_two_e_ints/mo_bi_integrals.irp.f`
.. code :: fortran
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:
.. hlist ::
:columns: 3
* :c:data: `mo_integrals_cache`
* :c:data: `mo_integrals_cache_min`
* :c:data: `mo_integrals_map`
* :c:data: `mo_num`
* :c:data: `mo_two_e_integrals_in_map`
Needed by:
.. hlist ::
:columns: 3
* :c:data: `core_energy`
* :c:data: `ref_bitmask_energy`
.. c:var :: mo_two_e_integrals_jj_anti_from_ao
File : :file: `mo_two_e_ints/mo_bi_integrals.irp.f`
.. code :: fortran
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:
.. hlist ::
:columns: 3
* :c:data: `ao_integrals_map`
* :c:data: `ao_integrals_threshold`
* :c:data: `ao_num`
* :c:data: `ao_overlap_abs`
* :c:data: `ao_two_e_integral_schwartz`
* :c:data: `ao_two_e_integrals_in_map`
* :c:data: `do_direct_integrals`
* :c:data: `mo_coef`
* :c:data: `mo_coef_transp`
* :c:data: `mo_num`
.. c:var :: mo_two_e_integrals_jj_exchange
File : :file: `mo_two_e_ints/mo_bi_integrals.irp.f`
.. code :: fortran
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:
.. hlist ::
:columns: 3
* :c:data: `mo_integrals_cache`
* :c:data: `mo_integrals_cache_min`
* :c:data: `mo_integrals_map`
* :c:data: `mo_num`
* :c:data: `mo_two_e_integrals_in_map`
Needed by:
.. hlist ::
:columns: 3
* :c:data: `core_energy`
* :c:data: `ref_bitmask_energy`
.. c:var :: mo_two_e_integrals_jj_exchange_from_ao
File : :file: `mo_two_e_ints/mo_bi_integrals.irp.f`
.. code :: fortran
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:
.. hlist ::
:columns: 3
* :c:data: `ao_integrals_map`
* :c:data: `ao_integrals_threshold`
* :c:data: `ao_num`
* :c:data: `ao_overlap_abs`
* :c:data: `ao_two_e_integral_schwartz`
* :c:data: `ao_two_e_integrals_in_map`
* :c:data: `do_direct_integrals`
* :c:data: `mo_coef`
* :c:data: `mo_coef_transp`
* :c:data: `mo_num`
.. c:var :: mo_two_e_integrals_vv_anti_from_ao
File : :file: `mo_two_e_ints/mo_bi_integrals.irp.f`
.. code :: fortran
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:
.. hlist ::
:columns: 3
* :c:data: `ao_integrals_map`
* :c:data: `ao_integrals_threshold`
* :c:data: `ao_num`
* :c:data: `ao_overlap_abs`
* :c:data: `ao_two_e_integral_schwartz`
* :c:data: `ao_two_e_integrals_in_map`
* :c:data: `do_direct_integrals`
* :c:data: `list_inact`
* :c:data: `mo_coef`
* :c:data: `mo_coef_transp`
* :c:data: `mo_num`
2019-01-25 14:54:22 +01:00
* :c:data: `n_core_orb`
2019-01-25 11:39:31 +01:00
.. c:var :: mo_two_e_integrals_vv_exchange_from_ao
File : :file: `mo_two_e_ints/mo_bi_integrals.irp.f`
.. code :: fortran
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:
.. hlist ::
:columns: 3
* :c:data: `ao_integrals_map`
* :c:data: `ao_integrals_threshold`
* :c:data: `ao_num`
* :c:data: `ao_overlap_abs`
* :c:data: `ao_two_e_integral_schwartz`
* :c:data: `ao_two_e_integrals_in_map`
* :c:data: `do_direct_integrals`
* :c:data: `list_inact`
* :c:data: `mo_coef`
* :c:data: `mo_coef_transp`
* :c:data: `mo_num`
2019-01-25 14:54:22 +01:00
* :c:data: `n_core_orb`
2019-01-25 11:39:31 +01:00
.. c:var :: mo_two_e_integrals_vv_from_ao
File : :file: `mo_two_e_ints/mo_bi_integrals.irp.f`
.. code :: fortran
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:
.. hlist ::
:columns: 3
* :c:data: `ao_integrals_map`
* :c:data: `ao_integrals_threshold`
* :c:data: `ao_num`
* :c:data: `ao_overlap_abs`
* :c:data: `ao_two_e_integral_schwartz`
* :c:data: `ao_two_e_integrals_in_map`
* :c:data: `do_direct_integrals`
* :c:data: `list_inact`
* :c:data: `mo_coef`
* :c:data: `mo_coef_transp`
* :c:data: `mo_num`
2019-01-25 14:54:22 +01:00
* :c:data: `n_core_orb`
2019-01-25 11:39:31 +01:00
Subroutines / functions
-----------------------
.. c:function :: add_integrals_to_map:
File : :file: `mo_two_e_ints/mo_bi_integrals.irp.f`
.. code :: fortran
subroutine add_integrals_to_map(mask_ijkl)
Adds integrals to tha MO map according to some bitmask
Needs:
.. hlist ::
:columns: 3
* :c:data: `mo_coef`
* :c:data: `mo_integrals_threshold`
* :c:data: `mo_coef_transp`
* :c:data: `ao_num`
* :c:data: `mo_integrals_map`
* :c:data: `mo_num`
* :c:data: `ao_two_e_integrals_in_map`
* :c:data: `n_int`
Called by:
.. hlist ::
:columns: 3
* :c:data: `mo_two_e_integrals_in_map`
Calls:
.. hlist ::
:columns: 3
* :c:func: `bitstring_to_list`
* :c:func: `bitstring_to_str`
* :c:func: `cpu_time`
* :c:func: `get_ao_two_e_integrals`
* :c:func: `insert_into_mo_integrals_map`
* :c:func: `map_merge`
* :c:func: `mo_two_e_integrals_index`
* :c:func: `wall_time`
.. c:function :: add_integrals_to_map_no_exit_34:
File : :file: `mo_two_e_ints/mo_bi_integrals.irp.f`
.. code :: fortran
subroutine add_integrals_to_map_no_exit_34(mask_ijkl)
Adds integrals to tha MO map according to some bitmask
Needs:
.. hlist ::
:columns: 3
* :c:data: `mo_coef`
* :c:data: `mo_integrals_threshold`
* :c:data: `mo_coef_transp`
* :c:data: `ao_num`
* :c:data: `mo_integrals_map`
* :c:data: `mo_num`
* :c:data: `ao_two_e_integrals_in_map`
* :c:data: `n_int`
Called by:
.. hlist ::
:columns: 3
* :c:data: `mo_two_e_integrals_in_map`
Calls:
.. hlist ::
:columns: 3
* :c:func: `bitstring_to_list`
* :c:func: `cpu_time`
* :c:func: `get_ao_two_e_integrals`
* :c:func: `insert_into_mo_integrals_map`
* :c:func: `map_merge`
* :c:func: `mo_two_e_integrals_index`
* :c:func: `wall_time`
.. c:function :: add_integrals_to_map_three_indices:
File : :file: `mo_two_e_ints/mo_bi_integrals.irp.f`
.. code :: fortran
subroutine add_integrals_to_map_three_indices(mask_ijk)
Adds integrals to tha MO map according to some bitmask
Needs:
.. hlist ::
:columns: 3
* :c:data: `mo_coef`
* :c:data: `mo_integrals_threshold`
* :c:data: `mo_coef_transp`
* :c:data: `ao_num`
* :c:data: `mo_integrals_map`
* :c:data: `mo_num`
* :c:data: `ao_two_e_integrals_in_map`
* :c:data: `n_int`
Called by:
.. hlist ::
:columns: 3
* :c:data: `mo_two_e_integrals_in_map`
Calls:
.. hlist ::
:columns: 3
* :c:func: `bitstring_to_list`
* :c:func: `bitstring_to_str`
* :c:func: `cpu_time`
* :c:func: `get_ao_two_e_integrals`
* :c:func: `insert_into_mo_integrals_map`
* :c:func: `map_merge`
* :c:func: `mo_two_e_integrals_index`
* :c:func: `wall_time`
.. c:function :: clear_mo_map:
File : :file: `mo_two_e_ints/mo_bi_integrals.irp.f`
2019-01-25 14:54:22 +01:00
.. code :: fortran
subroutine clear_mo_map
2019-01-25 11:39:31 +01:00
Frees the memory of the MO map
Needs:
.. hlist ::
:columns: 3
* :c:data: `mo_integrals_map`
Calls:
.. hlist ::
:columns: 3
* :c:func: `map_deinit`
.. c:function :: dump_mo_integrals:
File : :file: `mo_two_e_ints/map_integrals.irp.f`
.. code :: fortran
subroutine dump_mo_integrals(filename)
Save to disk the |MO| integrals
Needs:
.. hlist ::
:columns: 3
* :c:data: `mo_integrals_map`
* :c:data: `mpi_master`
Calls:
.. hlist ::
:columns: 3
* :c:func: `ezfio_set_work_empty`
.. c:function :: get_mo_map_size:
File : :file: `mo_two_e_ints/map_integrals.irp.f`
.. code :: fortran
integer*8 function get_mo_map_size()
Return the number of elements in the MO map
Needs:
.. hlist ::
:columns: 3
* :c:data: `mo_integrals_map`
.. c:function :: get_mo_two_e_integrals:
File : :file: `mo_two_e_ints/map_integrals.irp.f`
.. code :: fortran
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:
.. hlist ::
:columns: 3
* :c:data: `mo_two_e_integrals_in_map`
* :c:data: `mo_integrals_cache`
* :c:data: `mo_integrals_cache_min`
Called by:
.. hlist ::
:columns: 3
* :c:func: `get_d0`
* :c:func: `get_d1`
Calls:
.. hlist ::
:columns: 3
* :c:func: `map_get`
.. c:function :: get_mo_two_e_integrals_coulomb_ii:
File : :file: `mo_two_e_ints/map_integrals.irp.f`
.. code :: fortran
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:
.. hlist ::
:columns: 3
* :c:data: `mo_two_e_integrals_in_map`
Called by:
.. hlist ::
:columns: 3
* :c:data: `fock_operator_closed_shell_ref_bitmask`
* :c:data: `fock_wee_closed_shell`
Calls:
.. hlist ::
:columns: 3
* :c:func: `map_get_many`
* :c:func: `two_e_integrals_index`
.. c:function :: get_mo_two_e_integrals_exch_ii:
File : :file: `mo_two_e_ints/map_integrals.irp.f`
.. code :: fortran
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:
.. hlist ::
:columns: 3
* :c:data: `mo_two_e_integrals_in_map`
Called by:
.. hlist ::
:columns: 3
* :c:data: `fock_operator_closed_shell_ref_bitmask`
* :c:data: `fock_wee_closed_shell`
Calls:
.. hlist ::
:columns: 3
* :c:func: `map_get_many`
* :c:func: `two_e_integrals_index`
.. c:function :: get_mo_two_e_integrals_i1j1:
File : :file: `mo_two_e_ints/map_integrals.irp.f`
.. code :: fortran
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:
.. hlist ::
:columns: 3
* :c:data: `mo_two_e_integrals_in_map`
* :c:data: `mo_integrals_map`
Calls:
.. hlist ::
:columns: 3
* :c:func: `i2radix_sort`
* :c:func: `i8radix_sort`
* :c:func: `iradix_sort`
* :c:func: `map_get_many`
* :c:func: `two_e_integrals_index`
.. c:function :: get_mo_two_e_integrals_ij:
File : :file: `mo_two_e_ints/map_integrals.irp.f`
.. code :: fortran
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.
Needs:
.. hlist ::
:columns: 3
* :c:data: `mo_two_e_integrals_in_map`
* :c:data: `mo_integrals_map`
Calls:
.. hlist ::
:columns: 3
* :c:func: `i2radix_sort`
* :c:func: `i8radix_sort`
* :c:func: `iradix_sort`
* :c:func: `map_get_many`
* :c:func: `two_e_integrals_index`
.. c:function :: get_two_e_integral:
File : :file: `mo_two_e_ints/map_integrals.irp.f`
.. code :: fortran
double precision function get_two_e_integral(i,j,k,l,map)
Returns one integral <ij|kl> in the MO basis
Needs:
.. hlist ::
:columns: 3
* :c:data: `mo_two_e_integrals_in_map`
* :c:data: `mo_integrals_cache`
* :c:data: `mo_integrals_cache_min`
Calls:
.. hlist ::
:columns: 3
* :c:func: `map_get`
* :c:func: `two_e_integrals_index`
.. c:function :: load_mo_integrals:
File : :file: `mo_two_e_ints/map_integrals.irp.f`
.. code :: fortran
integer function load_mo_integrals(filename)
Read from disk the |MO| integrals
Needs:
.. hlist ::
:columns: 3
* :c:data: `mo_integrals_map`
Calls:
.. hlist ::
:columns: 3
* :c:func: `cache_map_reallocate`
* :c:func: `map_deinit`
* :c:func: `map_sort`
.. c:function :: mo_two_e_integral:
File : :file: `mo_two_e_ints/map_integrals.irp.f`
.. code :: fortran
double precision function mo_two_e_integral(i,j,k,l)
Returns one integral <ij|kl> in the MO basis
Needs:
.. hlist ::
:columns: 3
* :c:data: `mo_integrals_cache`
* :c:data: `mo_integrals_map`
* :c:data: `mo_two_e_integrals_in_map`
.. c:function :: mo_two_e_integrals_index:
File : :file: `mo_two_e_ints/mo_bi_integrals.irp.f`
.. code :: fortran
subroutine mo_two_e_integrals_index(i,j,k,l,i1)
Computes an unique index for i,j,k,l integrals
Called by:
.. hlist ::
:columns: 3
* :c:func: `add_integrals_to_map`
* :c:func: `add_integrals_to_map_erf`
* :c:func: `add_integrals_to_map_no_exit_34`
* :c:func: `add_integrals_to_map_three_indices`