ao_two_e_erf_ints
Here, all two-electron integrals (\(erf(\mu 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 main parameter of this module is ao_two_e_erf_ints mu_erf
which is the range-separation parameter.
To fetch an AO integral, use the
get_ao_two_e_integral_erf(i,j,k,l,ao_integrals_erf_map)
function.
The conventions are: * For AO integrals : (ij|kl) = (11|22) = <ik|jl> = <12|12>
EZFIO parameters
- io_ao_two_e_integrals_erf
Read/Write AO integrals with the long range interaction from/to disk [ Write | Read | None ]
Default: None
- mu_erf
cutting of the interaction in the range separated model
Default: 0.5
Providers
- ao_integrals_erf_cache
File :
ao_two_e_erf_ints/map_integrals_erf.irp.f
double precision, allocatable :: ao_integrals_erf_cache (0:64*64*64*64)
Cache of AO integrals for fast access
Needs:
ao_integrals_erf_cache_min
ao_integrals_erf_map
ao_two_e_integrals_erf_in_map
- ao_integrals_erf_cache_max
File :
ao_two_e_erf_ints/map_integrals_erf.irp.f
integer :: ao_integrals_erf_cache_min integer :: ao_integrals_erf_cache_max
Min and max values of the AOs for which the integrals are in the cache
Needs:
ao_num
Needed by:
ao_integrals_erf_cache
- ao_integrals_erf_cache_min
File :
ao_two_e_erf_ints/map_integrals_erf.irp.f
integer :: ao_integrals_erf_cache_min integer :: ao_integrals_erf_cache_max
Min and max values of the AOs for which the integrals are in the cache
Needs:
ao_num
Needed by:
ao_integrals_erf_cache
- ao_integrals_erf_map
File :
ao_two_e_erf_ints/map_integrals_erf.irp.f
type(map_type) :: ao_integrals_erf_map
AO integrals
Needs:
ao_num
Needed by:
ao_integrals_erf_cache
ao_two_e_integrals_erf_in_map
mo_two_e_int_erf_jj_from_ao
- ao_two_e_integral_erf_schwartz
File :
ao_two_e_erf_ints/providers_ao_erf.irp.f
double precision, allocatable :: ao_two_e_integral_erf_schwartz (ao_num,ao_num)
Needed to compute Schwartz inequalities
Needs:
ao_coef_normalized_ordered_transp
ao_expo_ordered_transp
ao_nucl
ao_num
ao_power
ao_prim_num
mu_erf
n_pt_max_integrals
nucl_coord
Needed by:
mo_two_e_int_erf_jj_from_ao
- ao_two_e_integrals_erf_in_map
File :
ao_two_e_erf_ints/providers_ao_erf.irp.f
logical :: ao_two_e_integrals_erf_in_map
- Map of Atomic integrals
i(r1) j(r2) 1/r12 k(r1) l(r2)
Needs:
ao_coef_normalized_ordered_transp
ao_expo_ordered_transp
ao_integrals_erf_map
ao_nucl
ao_num
ao_power
ao_prim_num
ezfio_filename
io_ao_two_e_integrals_erf
mu_erf
n_pt_max_integrals
nproc
nucl_coord
read_ao_two_e_integrals_erf
zmq_context
zmq_socket_pull_tcp_address
zmq_state
Needed by:
ao_integrals_erf_cache
mo_two_e_int_erf_jj_from_ao
mo_two_e_integrals_erf_in_map
- general_primitive_integral_erf:
File :
ao_two_e_erf_ints/two_e_integrals_erf.irp.f
double precision function general_primitive_integral_erf(dim, & P_new,P_center,fact_p,p,p_inv,iorder_p, & Q_new,Q_center,fact_q,q,q_inv,iorder_q)
Computes the integral <pq|rs> where p,q,r,s are Gaussian primitives
Needs:
mu_erf
Calls:
add_poly_multiply()
give_polynom_mult_center_x()
multiply_poly()
Subroutines / functions
- ao_two_e_integral_erf:
File :
ao_two_e_erf_ints/two_e_integrals_erf.irp.f
double precision function ao_two_e_integral_erf(i,j,k,l)
- integral of the AO basis <ik|jl> or (ij|kl)
i(r1) j(r1) 1/r12 k(r2) l(r2)
Needs:
ao_coef_normalized_ordered_transp
ao_expo_ordered_transp
ao_nucl
ao_power
ao_prim_num
mu_erf
n_pt_max_integrals
nucl_coord
Calls:
give_explicit_poly_and_gaussian()
- ao_two_e_integral_schwartz_accel_erf:
File :
ao_two_e_erf_ints/two_e_integrals_erf.irp.f
double precision function ao_two_e_integral_schwartz_accel_erf(i,j,k,l)
- integral of the AO basis <ik|jl> or (ij|kl)
i(r1) j(r1) 1/r12 k(r2) l(r2)
Needs:
ao_coef_normalized_ordered_transp
ao_expo_ordered_transp
ao_integrals_threshold
ao_nucl
ao_power
ao_prim_num
n_pt_max_integrals
nucl_coord
Calls:
give_explicit_poly_and_gaussian()
- ao_two_e_integrals_erf_in_map_collector:
File :
ao_two_e_erf_ints/integrals_erf_in_map_slave.irp.f
subroutine ao_two_e_integrals_erf_in_map_collector(zmq_socket_pull)
Collects results from the AO integral calculation
Needs:
ao_integrals_erf_map
ao_num
Called by:
ao_two_e_integrals_erf_in_map
Calls:
end_zmq_to_qp_run_socket()
insert_into_ao_integrals_erf_map()
- ao_two_e_integrals_erf_in_map_slave:
File :
ao_two_e_erf_ints/integrals_erf_in_map_slave.irp.f
subroutine ao_two_e_integrals_erf_in_map_slave(thread,iproc)
Computes a buffer of integrals
Needs:
ao_num
Called by:
ao_two_e_integrals_erf_in_map_slave_inproc()
ao_two_e_integrals_erf_in_map_slave_tcp()
Calls:
compute_ao_integrals_erf_jl()
end_zmq_push_socket()
end_zmq_to_qp_run_socket()
push_integrals()
- ao_two_e_integrals_erf_in_map_slave_inproc:
File :
ao_two_e_erf_ints/integrals_erf_in_map_slave.irp.f
subroutine ao_two_e_integrals_erf_in_map_slave_inproc(i)
Computes a buffer of integrals. i is the ID of the current thread.
Called by:
ao_two_e_integrals_erf_in_map
Calls:
ao_two_e_integrals_erf_in_map_slave()
- ao_two_e_integrals_erf_in_map_slave_tcp:
File :
ao_two_e_erf_ints/integrals_erf_in_map_slave.irp.f
subroutine ao_two_e_integrals_erf_in_map_slave_tcp(i)
Computes a buffer of integrals. i is the ID of the current thread.
Calls:
ao_two_e_integrals_erf_in_map_slave()
- clear_ao_erf_map:
File :
ao_two_e_erf_ints/map_integrals_erf.irp.f
subroutine clear_ao_erf_map
Frees the memory of the AO map
Needs:
ao_integrals_erf_map
Calls:
map_deinit()
- compute_ao_integrals_erf_jl:
File :
ao_two_e_erf_ints/two_e_integrals_erf.irp.f
subroutine compute_ao_integrals_erf_jl(j,l,n_integrals,buffer_i,buffer_value)
Parallel client for AO integrals
Needs:
ao_integrals_threshold
ao_num
ao_two_e_integral_erf_schwartz
Called by:
ao_two_e_integrals_erf_in_map_slave()
Calls:
two_e_integrals_index()
- compute_ao_two_e_integrals_erf:
File :
ao_two_e_erf_ints/two_e_integrals_erf.irp.f
subroutine compute_ao_two_e_integrals_erf(j,k,l,sze,buffer_value)
Compute AO 1/r12 integrals for all i and fixed j,k,l
Needs:
ao_num
ao_two_e_integral_erf_schwartz
Called by:
mo_two_e_int_erf_jj_from_ao
- dump_ao_integrals_erf:
File :
ao_two_e_erf_ints/map_integrals_erf.irp.f
subroutine dump_ao_integrals_erf(filename)
Save to disk the AO erf integrals
Needs:
ao_integrals_erf_map
Calls:
ezfio_set_work_empty()
- eri_erf:
File :
ao_two_e_erf_ints/two_e_integrals_erf.irp.f
double precision function ERI_erf(alpha,beta,delta,gama,a_x,b_x,c_x,d_x,a_y,b_y,c_y,d_y,a_z,b_z,c_z,d_z)
Atomic primtive two-electron integral between the 4 primitives :
primitive 1 : $x_1^{a_x} y_1^{a_y} z_1^{a_z} exp(-alpha * r1^2)$
primitive 2 : $x_1^{b_x} y_1^{b_y} z_1^{b_z} exp(- beta * r1^2)$
primitive 3 : $x_2^{c_x} y_2^{c_y} z_2^{c_z} exp(-delta * r2^2)$
primitive 4 : $x_2^{d_x} y_2^{d_y} z_2^{d_z} exp(-gamma * r2^2)$
Needs:
mu_erf
Calls:
integrale_new_erf()
- get_ao_erf_map_size:
File :
ao_two_e_erf_ints/map_integrals_erf.irp.f
function get_ao_erf_map_size()
Returns the number of elements in the AO map
Needs:
ao_integrals_erf_map
- get_ao_two_e_integral_erf:
File :
ao_two_e_erf_ints/map_integrals_erf.irp.f
double precision function get_ao_two_e_integral_erf(i,j,k,l,map) result(result)
Gets one AO two-electron integral from the AO map
Needs:
ao_integrals_erf_cache
ao_integrals_erf_cache_min
ao_integrals_threshold
ao_two_e_integral_erf_schwartz
ao_two_e_integrals_erf_in_map
Calls:
map_get()
two_e_integrals_index()
- get_ao_two_e_integrals_erf:
File :
ao_two_e_erf_ints/map_integrals_erf.irp.f
subroutine get_ao_two_e_integrals_erf(j,k,l,sze,out_val)
Gets multiple AO two-electron integral from the AO map . All i are retrieved for j,k,l fixed.
Needs:
ao_integrals_erf_map
ao_integrals_threshold
ao_two_e_integrals_erf_in_map
Called by:
add_integrals_to_map_erf()
- get_ao_two_e_integrals_erf_non_zero:
File :
ao_two_e_erf_ints/map_integrals_erf.irp.f
subroutine get_ao_two_e_integrals_erf_non_zero(j,k,l,sze,out_val,out_val_index,non_zero_int)
Gets multiple AO two-electron integrals from the AO map . All non-zero i are retrieved for j,k,l fixed.
Needs:
ao_integrals_erf_map
ao_integrals_threshold
ao_two_e_integral_erf_schwartz
ao_two_e_integrals_erf_in_map
Called by:
mo_two_e_int_erf_jj_from_ao
Calls:
map_get()
two_e_integrals_index()
- insert_into_ao_integrals_erf_map:
File :
ao_two_e_erf_ints/map_integrals_erf.irp.f
subroutine insert_into_ao_integrals_erf_map(n_integrals,buffer_i, buffer_values)
Create new entry into AO map
Needs:
ao_integrals_erf_map
Called by:
ao_two_e_integrals_erf_in_map_collector()
Calls:
map_append()
- integrale_new_erf:
File :
ao_two_e_erf_ints/two_e_integrals_erf.irp.f
subroutine integrale_new_erf(I_f,a_x,b_x,c_x,d_x,a_y,b_y,c_y,d_y,a_z,b_z,c_z,d_z,p,q,n_pt)
Calculate the integral of the polynomial :
$I_x1(a_x+b_x, c_x+d_x,p,q) , I_x1(a_y+b_y, c_y+d_y,p,q) , I_x1(a_z+b_z, c_z+d_z,p,q)$
between $( 0 ; 1)$
Needs:
gauleg_t2
mu_erf
n_pt_max_integrals
Called by:
eri_erf()
Calls:
i_x1_new()
- load_ao_integrals_erf:
File :
ao_two_e_erf_ints/map_integrals_erf.irp.f
integer function load_ao_integrals_erf(filename)
Read from disk the AO erf integrals
Needs:
ao_integrals_erf_map
Calls:
cache_map_reallocate()
map_deinit()
map_sort()
- save_erf_two_e_integrals_ao:
File :
ao_two_e_erf_ints/routines_save_integrals_erf.irp.f
subroutine save_erf_two_e_integrals_ao
Needs:
ao_integrals_erf_map
ao_two_e_integrals_erf_in_map
ezfio_filename
Called by:
routine()
Calls:
ezfio_set_ao_two_e_erf_ints_io_ao_two_e_integrals_erf()
ezfio_set_work_empty()
map_save_to_disk()
- save_erf_two_e_ints_ao_into_ints_ao:
File :
ao_two_e_erf_ints/routines_save_integrals_erf.irp.f
subroutine save_erf_two_e_ints_ao_into_ints_ao
Needs:
ao_integrals_erf_map
ao_two_e_integrals_erf_in_map
ezfio_filename
Calls:
ezfio_set_ao_two_e_ints_io_ao_two_e_integrals()
ezfio_set_work_empty()
map_save_to_disk()