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()