10
0
mirror of https://github.com/LCPQ/quantum_package synced 2024-10-19 22:41:48 +02:00

Rename one_e and two_e

This commit is contained in:
Anthony Scemama 2019-01-05 02:58:15 +01:00
parent ec67a21235
commit beddd31c60
84 changed files with 2004 additions and 1862 deletions

146
REPLACE Normal file
View File

@ -0,0 +1,146 @@
qp_name mo_mono_elec_integral --rename=mo_mono_elec_integrals
qp_name mo_nucl_elec_integral --rename=mo_nucl_elec_integrals
qp_name mo_kinetic_integral --rename=mo_kinetic_integrals
qp_name disk_access_mo_one_integrals --replace="io_mo_one_e_integrals"
qp_name disk_access_mo_one_integrals --rename="io_mo_one_e_integrals"
qp_name disk_access_ao_one_integrals --rename="io_ao_one_e_integrals"
qp_name ao_mono_elec_integral --rename="ao_one_e_integrals"
qp_name disk_access_ao_integrals --rename="io_ao_two_e_integrals"
qp_name disk_access_mo_integrals --rename="io_mo_two_e_integrals"
qp_name io_mo_integrals --rename="io_mo_two_e_integrals"
qp_name io_ao_integrals --rename="io_ao_two_e_integrals"
qp_name read_ao_integrals --rename="read_ao_two_e_integrals"
qp_name read_mo_integrals --rename="read_mo_two_e_integrals"
qp_name write_mo_integrals --rename="write_mo_two_e_integrals"
qp_name write_ao_integrals --rename="write_ao_two_e_integrals"
qp_name ao_two_e_integrals --rename="ao_two_e_ints"
qp_name mo_two_e_integrals --rename="mo_two_e_ints"
qp_name mo_two_e_erf_integrals --rename="mo_two_e_erf_ints"
qp_name ao_two_e_erf_integrals --rename="ao_two_e_erf_ints"
qp_name ezfio_set_mo_two_e_ints_io_mo_integrals -r ezfio_set_mo_two_e_ints_io_mo_two_e_integrals
qp_name ezfio_set_ao_two_e_ints_io_ao_integrals -r ezfio_set_ao_two_e_ints_io_ao_two_e_integrals
qp_name mo_tot_num -r mo_num
qp_name ezfio_set_mo_basis_mo_tot_num -r ezfio_set_mo_basis_mo_num
qp_name ezfio_get_mo_basis_mo_tot_num -r ezfio_get_mo_basis_mo_num
qp_name ezfio_set_ao_two_e_integrals_disk_access_ao_integrals -r ezfio_set_ao_two_e_integrals_io_ao_two_e_integrals
qp_name ezfio_set_mo_two_e_integrals_disk_access_mo_integrals -r ezfio_set_mo_two_e_integrals_io_mo_two_e_integrals
qp_name ezfio_set_mo_two_e_integrals_io_mo_two_e_integrals -r ezfio_set_mo_two_e_ints_io_mo_two_e_integrals
qp_name ezfio_get_mo_two_e_integrals_io_mo_two_e_integrals -r ezfio_get_mo_two_e_ints_io_mo_two_e_integrals
qp_name ezfio_set_ao_two_e_integrals_io_ao_two_e_integrals -r ezfio_set_ao_two_e_ints_io_ao_two_e_integrals
qp_name ezfio_get_ao_two_e_integrals_io_ao_two_e_integrals -r ezfio_get_ao_two_e_ints_io_ao_two_e_integrals
qp_name ezfio_set_ao_two_e_erf_integrals_disk_access_ao_integrals_erf -r ezfio_set_ao_two_e_erf_ints_io_ao_two_e_integrals_erf
qp_name ezfio_set_mo_two_e_erf_integrals_disk_access_mo_integrals_erf -r ezfio_set_mo_two_e_erf_ints_io_mo_two_e_integrals_erf
qp_name disk_access_ao_integrals_erf io_ao_integrals_erf
qp_name disk_access_ao_integrals_erf -r io_ao_integrals_erf
qp_name disk_access_mo_integrals_erf -r io_mo_integrals_erf
qp_name write_mo_integrals_erf -r write_mo_two_e_integrals_erf
qp_name read_mo_integrals_erf -r read_mo_two_e_integrals_erf
qp_name ao_integrals_n_e
qp_name ao_nucl_elec_interals -r ao_integrals_n_e
qp_name ao_nucl_elec_integrals -r ao_integrals_n_e
qp_name ao_nucl_elec_integrals_per_atom -r ao_integrals_n_e_per_atom
qp_name bi_elec_ref_bitmask_energy -r ref_bitmask_two_e_energy
qp_name mono_elec_ref_bitmask_energy -r ref_bitmask_one_e_energy
qp_name kinetic_ref_bitmask_energy -r ref_bitmask_kinetic_energy
qp_name nucl_elec_ref_bitmask_energy -r ref_bitmask_e_n_energy
qp_name disk_access_ao_integrals_erf
qp_name mo_bielec_integral_jj
qp_name mo_bielec_integral_jj -r mo_two_e_integrals_jj
qp_name mo_bielec_integral_jj_anti -r mo_two_e_integrals_jj_anti
qp_name mo_bielec_integral_jj_anti_from_ao -r mo_two_e_integrals_jj_anti_from_ao
qp_name mo_bielec_integral_jj_anti_exchange -r mo_two_e_integrals_jj_exchange
qp_name mo_bielec_integral_jj_exchange -r mo_two_e_integrals_jj_exchange
qp_name mo_bielec_integral_jj_exchange_from_ao -r mo_two_e_integrals_jj_exchange_from_ao
qp_name mo_bielec_integral_vv_anti_from_ao -r mo_two_e_integrals_vv_anti_from_ao
qp_name mo_bielec_integral_vv_exchange_from_ao -r mo_two_e_integrals_vv_exchange_from_ao
qp_name mo_bielec_integral_vv_from_ao -r mo_two_e_integrals_vv_from_ao
qp_name mo_bielec_integrals_erf_in_map -r mo_two_e_integrals_erf_in_map
qp_name mo_bielec_integrals_in_map -r mo_two_e_integrals_in_map
qp_name ao_bielec_integrals_in_map -r ao_two_e_integrals_in_map
qp_name ao_bielec_integrals_erf_in_map -r ao_two_e_integrals_erf_in_map
qp_name mo_mono_elec_integrals -r mo_one_e_integrals
qp_name mo_nucl_elec_integrals -r mo_integrals_n_e
qp_name mo_nucl_elec_integrals_per_atom -r mo_integrals_n_e_per_atom
qp_name I_x1_pol_mult_mono_elec -r I_x1_pol_mult_one_e
qp_name I_x2_pol_mult_mono_elec -r I_x2_pol_mult_one_e
qp_name give_polynom_mult_center_mono_elec give_polynomial_mult_center_one_e
qp_name give_polynom_mult_center_mono_elec -r give_polynomial_mult_center_one_e
qp_name give_polynom_mult_center_mono_elec_erf -r give_polynomial_mult_center_one_e_erf
qp_name give_polynom_mult_center_mono_elec_erf_opt -r give_polynomial_mult_center_one_e_erf_opt
qp_name i_H_j_mono_spin_monoelec -r i_H_j_mono_spin_one_e
qp_name diag_H_mat_elem_monoelec -r diag_H_mat_elem_one_e
qp_name i_H_j_monoelec -r i_H_j_one_e
qp_name get_mo_bielec_integral -r get_two_e_integral
qp_name ao_bielec_integrals_in_map_slave_tcp -r ao_two_e_integrals_in_map_slave_tcp
qp_name get_ao_bielec_integrals_non_zero -r get_ao_two_e_integrals_non_zero
qp_name bielec
qp_name bielec -r two-electron
qp_name ao_bielec_integral -r ao_two_e_integral
qp_name compute_ao_bielec_integrals -r compute_ao_two_e_integrals
qp_name mo_bielec_integral_jj_from_ao -r mo_two_e_integral_jj_from_ao
qp_name bielec_tmp_1 -r two_e_tmp_1
qp_name bielec_tmp_2 -r two_e_tmp_2
qp_name bielec_tmp_3 -r two_e_tmp_3
qp_name mo_bielec_integrals_index -r mo_two_e_integrals_index
qp_name bielec_tmp_0_idx -r two_e_tmp_0_idx
qp_name bielec_tmp_0 -r two_e_tmp_0
qp_name get_ao_bielec_integrals -r get_ao_two_e_integrals
qp_name bielectronic -r two-electron
qp_name bielec_integrals_index -r two_e_integrals_index
qp_name mo_bielec_integral -r mo_two_e_integral
qp_name mo_bielec_integrals_ij -r mo_two_e_integrals_ij
qp_name get_mo_bielec_integrals_ij -r get_mo_two_e_integrals_ij
qp_name get_mo_bielec_integrals_i1j1 -r get_mo_two_e_integrals_i1j1
qp_name get_mo_bielec_integrals_coulomb -r get_mo_two_e_integrals_coulomb
qp_name get_mo_bielec_integrals_coulomb_ii -r get_mo_two_e_integrals_coulomb_ii
qp_name get_mo_bielec_integrals_exch_ii -r get_mo_two_e_integrals_exch_ii
qp_name get_mo_bielec_integrals -r get_mo_two_e_integrals
qp_name get_ao_bielec_integrals_erf -r get_ao_two_e_integrals_erf
qp_name save_erf_bielec_ints_mo_into_ints_mo -r save_erf_two_e_ints_mo_into_ints_mo
qp_name get_mo_bielec_integral_erf -r get_mo_two_e_integral_erf
qp_name get_ao_bielec_integral_erf -r get_ao_two_e_integral_erf
qp_name bielec_integrals_index_reverse -r two_e_integrals_index_reverse
qp_name get_mo_bielec_integrals_erf -r get_mo_two_e_integrals_erf
qp_name ao_bielec_integral_schwartz -r ao_two_e_integral_schwartz
qp_name get_mo_bielec_integrals_erf_ij -r get_mo_two_e_integrals_erf_ij
qp_name get_mo_bielec_integrals_erf_i1j1 -r get_mo_two_e_integrals_erf_i1j1
qp_name get_mo_bielec_integral_schwartz -r get_mo_two_e_integral_schwartz
qp_name get_ao_bielec_integrals_erf_non_zero -r get_ao_two_e_integrals_erf_non_zero
qp_name compute_ao_bielec_integrals_erf -r compute_ao_two_e_integrals_erf
qp_name mo_bielec_integrals_erf_index -r mo_two_e_integrals_erf_index
qp_name get_mo_bielec_integrals_erf_exch_ii -r get_mo_two_e_integrals_erf_exch_ii
qp_name get_mo_bielec_integrals_erf_coulomb_ii -r get_mo_two_e_integrals_erf_coulomb_ii
qp_name mo_bielec_integral_erf -r mo_two_e_integral_erf
qp_name i_H_j_bielec -r i_H_j_two_e
qp_name H_S2_u_0_bielec_nstates_openmp_work -r H_S2_u_0_two_e_nstates_openmp_work
qp_name H_S2_u_0_bielec_nstates_openmp_work_1 -r H_S2_u_0_two_e_nstates_openmp_work_1
qp_name H_S2_u_0_bielec_nstates_openmp_work_2 -r H_S2_u_0_two_e_nstates_openmp_work_2
qp_name H_S2_u_0_bielec_nstates_openmp_work_3 -r H_S2_u_0_two_e_nstates_openmp_work_3
qp_name H_S2_u_0_bielec_nstates_openmp_work_4 -r H_S2_u_0_two_e_nstates_openmp_work_4
qp_name H_S2_u_0_bielec_nstates_openmp -r H_S2_u_0_two_e_nstates_openmp
qp_name ac_operator_bielec -r ac_operator_two_e
qp_name aa_operator_bielec -r aa_operator_two_e
qp_name a_operator_bielec -r a_operator_two_e
qp_name u_0_H_u_0_bielec -r u_0_H_u_0_two_e
qp_name H_S2_u_0_bielec_nstates_openmp_work_$N_int
qp_name H_S2_u_0_bielec_nstates_openmp_work_$N_int #-r "H_S2_u_0_two_e_nstates_openmp_work_$N_int"
qp_name H_S2_u_0_bielec_nstates_openmp_work_$N_int -r "H_S2_u_0_two_e_nstates_openmp_work_$N_int"
qp_name ao_bielec_integral_erf -r ao_two_e_integral_erf
qp_name psi_energy_bielec -r psi_energy_two_e
qp_name ao_bielec_integrals_in_map_slave_inproc -r ao_two_e_integrals_in_map_slave_inproc
qp_name ao_bielec_integrals_in_map_collector -r ao_two_e_integrals_in_map_collector
qp_name ao_bielec_integral_schwartz_accel -r ao_two_e_integral_schwartz_accel
qp_name get_ao_bielec_integral -r get_ao_two_e_integral
qp_name ao_bielec_integrals_in_map_slave -r ao_two_e_integrals_in_map_slave
qp_name ao_bielec_integral_erf_schwartz -r ao_two_e_integral_erf_schwartz
qp_name ao_bielec_integral_schwartz_accel_erf -r ao_two_e_integral_schwartz_accel_erf
qp_name ao_bielec_integrals_erf_in_map_slave_tcp -r ao_two_e_integrals_erf_in_map_slave_tcp
qp_name ao_bielec_integrals_erf_in_map_slave -r ao_two_e_integrals_erf_in_map_slave
qp_name ao_bielec_integrals_erf_in_map_slave_inproc -r ao_two_e_integrals_erf_in_map_slave_inproc
qp_name ao_bielec_integrals_erf_in_map_collector -r ao_two_e_integrals_erf_in_map_collector
qp_name save_erf_bielec_ints_ao_into_ints_ao -r save_erf_two_e_ints_ao_into_ints_ao
qp_name save_erf_bi_elec_integrals_mo -r save_erf_two_e_integrals_mo
qp_name ao_bi_elec_integral_beta -r ao_two_e_integral_beta
qp_name ao_bi_elec_integral_alpha -r ao_two_e_integral_alpha
qp_name ao_bi_elec_integral_alpha_tmp -r ao_two_e_integral_alpha_tmp
qp_name ao_bi_elec_integral_beta_tmp -r ao_two_e_integral_beta_tmp

View File

@ -309,6 +309,36 @@ Providers
.. c:var:: ao_integrals_n_e
.. code:: text
double precision, allocatable :: ao_integrals_n_e (ao_num,ao_num)
File: :file:`pot_ao_ints.irp.f`
Nucleus-electron interaction, in the |AO| basis set.
:math:`\langle \chi_i | -\sum_A \frac{1}{|r-R_A|} | \chi_j \rangle`
.. c:var:: ao_integrals_n_e_per_atom
.. code:: text
double precision, allocatable :: ao_integrals_n_e_per_atom (ao_num,ao_num,nucl_num)
File: :file:`pot_ao_ints.irp.f`
Nucleus-electron interaction in the |AO| basis set, per atom A.
:math:`\langle \chi_i | -\frac{1}{|r-R_A|} | \chi_j \rangle`
.. c:var:: ao_kinetic_integrals .. c:var:: ao_kinetic_integrals
.. code:: text .. code:: text
@ -324,36 +354,6 @@ Providers
.. c:var:: ao_nucl_elec_integrals
.. code:: text
double precision, allocatable :: ao_nucl_elec_integrals (ao_num,ao_num)
File: :file:`pot_ao_ints.irp.f`
Nucleus-electron interaction, in the |AO| basis set.
:math:`\langle \chi_i | -\sum_A \frac{1}{|r-R_A|} | \chi_j \rangle`
.. c:var:: ao_nucl_elec_integrals_per_atom
.. code:: text
double precision, allocatable :: ao_nucl_elec_integrals_per_atom (ao_num,ao_num,nucl_num)
File: :file:`pot_ao_ints.irp.f`
Nucleus-electron interaction in the |AO| basis set, per atom A.
:math:`\langle \chi_i | -\frac{1}{|r-R_A|} | \chi_j \rangle`
.. c:var:: ao_one_e_integrals .. c:var:: ao_one_e_integrals
.. code:: text .. code:: text
@ -619,11 +619,11 @@ Providers
.. c:var:: give_polynom_mult_center_mono_elec_erf .. c:var:: give_polynomial_mult_center_one_e_erf
.. code:: text .. code:: text
subroutine give_polynom_mult_center_mono_elec_erf(A_center,B_center,alpha,beta,& subroutine give_polynomial_mult_center_one_e_erf(A_center,B_center,alpha,beta,&
power_A,power_B,C_center,n_pt_in,d,n_pt_out,mu_in) power_A,power_B,C_center,n_pt_in,d,n_pt_out,mu_in)
File: :file:`pot_ao_erf_ints.irp.f` File: :file:`pot_ao_erf_ints.irp.f`
@ -635,11 +635,11 @@ Providers
.. c:var:: give_polynom_mult_center_mono_elec_erf_opt .. c:var:: give_polynomial_mult_center_one_e_erf_opt
.. code:: text .. code:: text
subroutine give_polynom_mult_center_mono_elec_erf_opt(A_center,B_center,alpha,beta,& subroutine give_polynomial_mult_center_one_e_erf_opt(A_center,B_center,alpha,beta,&
power_A,power_B,C_center,n_pt_in,d,n_pt_out,mu_in,p,p_inv,p_inv_2,p_new,P_center) power_A,power_B,C_center,n_pt_in,d,n_pt_out,mu_in,p,p_inv,p_inv_2,p_new,P_center)
File: :file:`pot_ao_erf_ints.irp.f` File: :file:`pot_ao_erf_ints.irp.f`
@ -651,11 +651,11 @@ Providers
.. c:var:: i_x1_pol_mult_mono_elec .. c:var:: i_x1_pol_mult_one_e
.. code:: text .. code:: text
recursive subroutine I_x1_pol_mult_mono_elec(a,c,R1x,R1xp,R2x,d,nd,n_pt_in) recursive subroutine I_x1_pol_mult_one_e(a,c,R1x,R1xp,R2x,d,nd,n_pt_in)
File: :file:`pot_ao_ints.irp.f` File: :file:`pot_ao_ints.irp.f`
@ -664,11 +664,11 @@ Providers
.. c:var:: i_x2_pol_mult_mono_elec .. c:var:: i_x2_pol_mult_one_e
.. code:: text .. code:: text
recursive subroutine I_x2_pol_mult_mono_elec(c,R1x,R1xp,R2x,d,nd,dim) recursive subroutine I_x2_pol_mult_one_e(c,R1x,R1xp,R2x,d,nd,dim)
File: :file:`pot_ao_ints.irp.f` File: :file:`pot_ao_ints.irp.f`
@ -825,11 +825,11 @@ Subroutines / functions
.. c:function:: give_polynom_mult_center_mono_elec .. c:function:: give_polynomial_mult_center_one_e
.. code:: text .. code:: text
subroutine give_polynom_mult_center_mono_elec(A_center,B_center,alpha,beta,power_A,power_B,C_center,n_pt_in,d,n_pt_out) subroutine give_polynomial_mult_center_one_e(A_center,B_center,alpha,beta,power_A,power_B,C_center,n_pt_in,d,n_pt_out)
File: :file:`pot_ao_ints.irp.f` File: :file:`pot_ao_ints.irp.f`

View File

@ -15,7 +15,7 @@ in :file:`utils/map_module.f90`.
The main parameter of this module is :option:`ao_two_e_erf_ints mu_erf` which is the range-separation parameter. The main parameter of this module is :option:`ao_two_e_erf_ints mu_erf` which is the range-separation parameter.
To fetch an |AO| integral, use the To fetch an |AO| integral, use the
`get_ao_bielec_integral_erf(i,j,k,l,ao_integrals_erf_map)` function. `get_ao_two_e_integral_erf(i,j,k,l,ao_integrals_erf_map)` function.
The conventions are: The conventions are:
@ -46,32 +46,6 @@ Providers
--------- ---------
.. c:var:: ao_bielec_integral_erf_schwartz
.. code:: text
double precision, allocatable :: ao_bielec_integral_erf_schwartz (ao_num,ao_num)
File: :file:`providers_ao_erf.irp.f`
Needed to compute Schwartz inequalities
.. c:var:: ao_bielec_integrals_erf_in_map
.. code:: text
logical :: ao_bielec_integrals_erf_in_map
File: :file:`providers_ao_erf.irp.f`
Map of Atomic integrals i(r1) j(r2) 1/r12 k(r1) l(r2)
.. c:var:: ao_integrals_erf_cache .. c:var:: ao_integrals_erf_cache
.. code:: text .. code:: text
@ -126,6 +100,32 @@ Providers
.. c:var:: ao_two_e_integral_erf_schwartz
.. code:: text
double precision, allocatable :: ao_two_e_integral_erf_schwartz (ao_num,ao_num)
File: :file:`providers_ao_erf.irp.f`
Needed to compute Schwartz inequalities
.. c:var:: ao_two_e_integrals_erf_in_map
.. code:: text
logical :: ao_two_e_integrals_erf_in_map
File: :file:`providers_ao_erf.irp.f`
Map of Atomic integrals i(r1) j(r2) 1/r12 k(r1) l(r2)
.. c:var:: general_primitive_integral_erf .. c:var:: general_primitive_integral_erf
.. code:: text .. code:: text
@ -146,11 +146,11 @@ Subroutines / functions
.. c:function:: ao_bielec_integral_erf .. c:function:: ao_two_e_integral_erf
.. code:: text .. code:: text
double precision function ao_bielec_integral_erf(i,j,k,l) double precision function ao_two_e_integral_erf(i,j,k,l)
File: :file:`two_e_integrals_erf.irp.f` File: :file:`two_e_integrals_erf.irp.f`
@ -160,11 +160,11 @@ Subroutines / functions
.. c:function:: ao_bielec_integral_schwartz_accel_erf .. c:function:: ao_two_e_integral_schwartz_accel_erf
.. code:: text .. code:: text
double precision function ao_bielec_integral_schwartz_accel_erf(i,j,k,l) double precision function ao_two_e_integral_schwartz_accel_erf(i,j,k,l)
File: :file:`two_e_integrals_erf.irp.f` File: :file:`two_e_integrals_erf.irp.f`
@ -174,11 +174,11 @@ Subroutines / functions
.. c:function:: ao_bielec_integrals_erf_in_map_collector .. c:function:: ao_two_e_integrals_erf_in_map_collector
.. code:: text .. code:: text
subroutine ao_bielec_integrals_erf_in_map_collector(zmq_socket_pull) subroutine ao_two_e_integrals_erf_in_map_collector(zmq_socket_pull)
File: :file:`integrals_erf_in_map_slave.irp.f` File: :file:`integrals_erf_in_map_slave.irp.f`
@ -188,11 +188,11 @@ Subroutines / functions
.. c:function:: ao_bielec_integrals_erf_in_map_slave .. c:function:: ao_two_e_integrals_erf_in_map_slave
.. code:: text .. code:: text
subroutine ao_bielec_integrals_erf_in_map_slave(thread,iproc) subroutine ao_two_e_integrals_erf_in_map_slave(thread,iproc)
File: :file:`integrals_erf_in_map_slave.irp.f` File: :file:`integrals_erf_in_map_slave.irp.f`
@ -202,11 +202,11 @@ Subroutines / functions
.. c:function:: ao_bielec_integrals_erf_in_map_slave_inproc .. c:function:: ao_two_e_integrals_erf_in_map_slave_inproc
.. code:: text .. code:: text
subroutine ao_bielec_integrals_erf_in_map_slave_inproc(i) subroutine ao_two_e_integrals_erf_in_map_slave_inproc(i)
File: :file:`integrals_erf_in_map_slave.irp.f` File: :file:`integrals_erf_in_map_slave.irp.f`
@ -216,11 +216,11 @@ Subroutines / functions
.. c:function:: ao_bielec_integrals_erf_in_map_slave_tcp .. c:function:: ao_two_e_integrals_erf_in_map_slave_tcp
.. code:: text .. code:: text
subroutine ao_bielec_integrals_erf_in_map_slave_tcp(i) subroutine ao_two_e_integrals_erf_in_map_slave_tcp(i)
File: :file:`integrals_erf_in_map_slave.irp.f` File: :file:`integrals_erf_in_map_slave.irp.f`
@ -244,20 +244,6 @@ Subroutines / functions
.. c:function:: compute_ao_bielec_integrals_erf
.. code:: text
subroutine compute_ao_bielec_integrals_erf(j,k,l,sze,buffer_value)
File: :file:`two_e_integrals_erf.irp.f`
Compute AO 1/r12 integrals for all i and fixed j,k,l
.. c:function:: compute_ao_integrals_erf_jl .. c:function:: compute_ao_integrals_erf_jl
.. code:: text .. code:: text
@ -272,6 +258,20 @@ Subroutines / functions
.. c:function:: compute_ao_two_e_integrals_erf
.. code:: text
subroutine compute_ao_two_e_integrals_erf(j,k,l,sze,buffer_value)
File: :file:`two_e_integrals_erf.irp.f`
Compute AO 1/r12 integrals for all i and fixed j,k,l
.. c:function:: dump_ao_integrals_erf .. c:function:: dump_ao_integrals_erf
.. code:: text .. code:: text
@ -294,49 +294,7 @@ Subroutines / functions
File: :file:`two_e_integrals_erf.irp.f` File: :file:`two_e_integrals_erf.irp.f`
ATOMIC PRIMTIVE bielectronic integral between the 4 primitives :: primitive_1 = x1**(a_x) y1**(a_y) z1**(a_z) exp(-alpha * r1**2) primitive_2 = x1**(b_x) y1**(b_y) z1**(b_z) exp(- beta * r1**2) primitive_3 = x2**(c_x) y2**(c_y) z2**(c_z) exp(-delta * r2**2) primitive_4 = x2**(d_x) y2**(d_y) z2**(d_z) exp(- gama * r2**2) ATOMIC PRIMTIVE two-electron integral between the 4 primitives :: primitive_1 = x1**(a_x) y1**(a_y) z1**(a_z) exp(-alpha * r1**2) primitive_2 = x1**(b_x) y1**(b_y) z1**(b_z) exp(- beta * r1**2) primitive_3 = x2**(c_x) y2**(c_y) z2**(c_z) exp(-delta * r2**2) primitive_4 = x2**(d_x) y2**(d_y) z2**(d_z) exp(- gama * r2**2)
.. c:function:: get_ao_bielec_integral_erf
.. code:: text
double precision function get_ao_bielec_integral_erf(i,j,k,l,map) result(result)
File: :file:`map_integrals_erf.irp.f`
Gets one |AO| two-electron integral from the |AO| map
.. c:function:: get_ao_bielec_integrals_erf
.. code:: text
subroutine get_ao_bielec_integrals_erf(j,k,l,sze,out_val)
File: :file:`map_integrals_erf.irp.f`
Gets multiple |AO| two-electron integral from the |AO| map . All i are retrieved for j,k,l fixed.
.. c:function:: get_ao_bielec_integrals_erf_non_zero
.. code:: text
subroutine get_ao_bielec_integrals_erf_non_zero(j,k,l,sze,out_val,out_val_index,non_zero_int)
File: :file:`map_integrals_erf.irp.f`
Gets multiple |AO| two-electron integrals from the |AO| map . All non-zero i are retrieved for j,k,l fixed.
@ -356,6 +314,48 @@ Subroutines / functions
.. c:function:: get_ao_two_e_integral_erf
.. code:: text
double precision function get_ao_two_e_integral_erf(i,j,k,l,map) result(result)
File: :file:`map_integrals_erf.irp.f`
Gets one |AO| two-electron integral from the |AO| map
.. c:function:: get_ao_two_e_integrals_erf
.. code:: text
subroutine get_ao_two_e_integrals_erf(j,k,l,sze,out_val)
File: :file:`map_integrals_erf.irp.f`
Gets multiple |AO| two-electron integral from the |AO| map . All i are retrieved for j,k,l fixed.
.. c:function:: get_ao_two_e_integrals_erf_non_zero
.. code:: text
subroutine get_ao_two_e_integrals_erf_non_zero(j,k,l,sze,out_val,out_val_index,non_zero_int)
File: :file:`map_integrals_erf.irp.f`
Gets multiple |AO| two-electron integrals from the |AO| map . All non-zero i are retrieved for j,k,l fixed.
.. c:function:: insert_into_ao_integrals_erf_map .. c:function:: insert_into_ao_integrals_erf_map
.. code:: text .. code:: text
@ -398,11 +398,11 @@ Subroutines / functions
.. c:function:: save_erf_bi_elec_integrals_ao .. c:function:: save_erf_two_e_integrals_ao
.. code:: text .. code:: text
subroutine save_erf_bi_elec_integrals_ao subroutine save_erf_two_e_integrals_ao
File: :file:`routines_save_integrals_erf.irp.f` File: :file:`routines_save_integrals_erf.irp.f`
@ -412,11 +412,11 @@ Subroutines / functions
.. c:function:: save_erf_bielec_ints_ao_into_ints_ao .. c:function:: save_erf_two_e_ints_ao_into_ints_ao
.. code:: text .. code:: text
subroutine save_erf_bielec_ints_ao_into_ints_ao subroutine save_erf_two_e_ints_ao_into_ints_ao
File: :file:`routines_save_integrals_erf.irp.f` File: :file:`routines_save_integrals_erf.irp.f`

View File

@ -13,7 +13,7 @@ As they have 4 indices and many are zero, they are stored in a map, as defined
in :file:`utils/map_module.f90`. in :file:`utils/map_module.f90`.
To fetch an |AO| integral, use the To fetch an |AO| integral, use the
`get_ao_bielec_integral(i,j,k,l,ao_integrals_map)` function. `get_ao_two_e_integral(i,j,k,l,ao_integrals_map)` function.
The conventions are: The conventions are:
@ -50,32 +50,6 @@ Providers
--------- ---------
.. c:var:: ao_bielec_integral_schwartz
.. code:: text
double precision, allocatable :: ao_bielec_integral_schwartz (ao_num,ao_num)
File: :file:`two_e_integrals.irp.f`
Needed to compute Schwartz inequalities
.. c:var:: ao_bielec_integrals_in_map
.. code:: text
logical :: ao_bielec_integrals_in_map
File: :file:`two_e_integrals.irp.f`
Map of Atomic integrals i(r1) j(r2) 1/r12 k(r1) l(r2)
.. c:var:: ao_integrals_cache .. c:var:: ao_integrals_cache
.. code:: text .. code:: text
@ -130,6 +104,32 @@ Providers
.. c:var:: ao_two_e_integral_schwartz
.. code:: text
double precision, allocatable :: ao_two_e_integral_schwartz (ao_num,ao_num)
File: :file:`two_e_integrals.irp.f`
Needed to compute Schwartz inequalities
.. c:var:: ao_two_e_integrals_in_map
.. code:: text
logical :: ao_two_e_integrals_in_map
File: :file:`two_e_integrals.irp.f`
Map of Atomic integrals i(r1) j(r2) 1/r12 k(r1) l(r2)
.. c:var:: gauleg_t2 .. c:var:: gauleg_t2
.. code:: text .. code:: text
@ -256,90 +256,6 @@ Subroutines / functions
.. c:function:: ao_bielec_integral
.. code:: text
double precision function ao_bielec_integral(i,j,k,l)
File: :file:`two_e_integrals.irp.f`
integral of the AO basis <ik|jl> or (ij|kl) i(r1) j(r1) 1/r12 k(r2) l(r2)
.. c:function:: ao_bielec_integral_schwartz_accel
.. code:: text
double precision function ao_bielec_integral_schwartz_accel(i,j,k,l)
File: :file:`two_e_integrals.irp.f`
integral of the AO basis <ik|jl> or (ij|kl) i(r1) j(r1) 1/r12 k(r2) l(r2)
.. c:function:: ao_bielec_integrals_in_map_collector
.. code:: text
subroutine ao_bielec_integrals_in_map_collector(zmq_socket_pull)
File: :file:`integrals_in_map_slave.irp.f`
Collects results from the AO integral calculation
.. c:function:: ao_bielec_integrals_in_map_slave
.. code:: text
subroutine ao_bielec_integrals_in_map_slave(thread,iproc)
File: :file:`integrals_in_map_slave.irp.f`
Computes a buffer of integrals
.. c:function:: ao_bielec_integrals_in_map_slave_inproc
.. code:: text
subroutine ao_bielec_integrals_in_map_slave_inproc(i)
File: :file:`integrals_in_map_slave.irp.f`
Computes a buffer of integrals. i is the ID of the current thread.
.. c:function:: ao_bielec_integrals_in_map_slave_tcp
.. code:: text
subroutine ao_bielec_integrals_in_map_slave_tcp(i)
File: :file:`integrals_in_map_slave.irp.f`
Computes a buffer of integrals. i is the ID of the current thread.
.. c:function:: ao_l4 .. c:function:: ao_l4
.. code:: text .. code:: text
@ -354,29 +270,85 @@ Subroutines / functions
.. c:function:: bielec_integrals_index .. c:function:: ao_two_e_integral
.. code:: text .. code:: text
subroutine bielec_integrals_index(i,j,k,l,i1) double precision function ao_two_e_integral(i,j,k,l)
File: :file:`map_integrals.irp.f` File: :file:`two_e_integrals.irp.f`
integral of the AO basis <ik|jl> or (ij|kl) i(r1) j(r1) 1/r12 k(r2) l(r2)
.. c:function:: bielec_integrals_index_reverse .. c:function:: ao_two_e_integral_schwartz_accel
.. code:: text .. code:: text
subroutine bielec_integrals_index_reverse(i,j,k,l,i1) double precision function ao_two_e_integral_schwartz_accel(i,j,k,l)
File: :file:`map_integrals.irp.f` File: :file:`two_e_integrals.irp.f`
integral of the AO basis <ik|jl> or (ij|kl) i(r1) j(r1) 1/r12 k(r2) l(r2)
.. c:function:: ao_two_e_integrals_in_map_collector
.. code:: text
subroutine ao_two_e_integrals_in_map_collector(zmq_socket_pull)
File: :file:`integrals_in_map_slave.irp.f`
Collects results from the AO integral calculation
.. c:function:: ao_two_e_integrals_in_map_slave
.. code:: text
subroutine ao_two_e_integrals_in_map_slave(thread,iproc)
File: :file:`integrals_in_map_slave.irp.f`
Computes a buffer of integrals
.. c:function:: ao_two_e_integrals_in_map_slave_inproc
.. code:: text
subroutine ao_two_e_integrals_in_map_slave_inproc(i)
File: :file:`integrals_in_map_slave.irp.f`
Computes a buffer of integrals. i is the ID of the current thread.
.. c:function:: ao_two_e_integrals_in_map_slave_tcp
.. code:: text
subroutine ao_two_e_integrals_in_map_slave_tcp(i)
File: :file:`integrals_in_map_slave.irp.f`
Computes a buffer of integrals. i is the ID of the current thread.
@ -396,20 +368,6 @@ Subroutines / functions
.. c:function:: compute_ao_bielec_integrals
.. code:: text
subroutine compute_ao_bielec_integrals(j,k,l,sze,buffer_value)
File: :file:`two_e_integrals.irp.f`
Compute AO 1/r12 integrals for all i and fixed j,k,l
.. c:function:: compute_ao_integrals_jl .. c:function:: compute_ao_integrals_jl
.. code:: text .. code:: text
@ -424,6 +382,20 @@ Subroutines / functions
.. c:function:: compute_ao_two_e_integrals
.. code:: text
subroutine compute_ao_two_e_integrals(j,k,l,sze,buffer_value)
File: :file:`two_e_integrals.irp.f`
Compute AO 1/r12 integrals for all i and fixed j,k,l
.. c:function:: dump_ao_integrals .. c:function:: dump_ao_integrals
.. code:: text .. code:: text
@ -466,48 +438,6 @@ Subroutines / functions
.. c:function:: get_ao_bielec_integral
.. code:: text
double precision function get_ao_bielec_integral(i,j,k,l,map) result(result)
File: :file:`map_integrals.irp.f`
Gets one AO bi-electronic integral from the AO map
.. c:function:: get_ao_bielec_integrals
.. code:: text
subroutine get_ao_bielec_integrals(j,k,l,sze,out_val)
File: :file:`map_integrals.irp.f`
Gets multiple AO bi-electronic integral from the AO map . All i are retrieved for j,k,l fixed.
.. c:function:: get_ao_bielec_integrals_non_zero
.. code:: text
subroutine get_ao_bielec_integrals_non_zero(j,k,l,sze,out_val,out_val_index,non_zero_int)
File: :file:`map_integrals.irp.f`
Gets multiple AO bi-electronic integral from the AO map . All non-zero i are retrieved for j,k,l fixed.
.. c:function:: get_ao_map_size .. c:function:: get_ao_map_size
.. code:: text .. code:: text
@ -522,6 +452,48 @@ Subroutines / functions
.. c:function:: get_ao_two_e_integral
.. code:: text
double precision function get_ao_two_e_integral(i,j,k,l,map) result(result)
File: :file:`map_integrals.irp.f`
Gets one AO bi-electronic integral from the AO map
.. c:function:: get_ao_two_e_integrals
.. code:: text
subroutine get_ao_two_e_integrals(j,k,l,sze,out_val)
File: :file:`map_integrals.irp.f`
Gets multiple AO bi-electronic integral from the AO map . All i are retrieved for j,k,l fixed.
.. c:function:: get_ao_two_e_integrals_non_zero
.. code:: text
subroutine get_ao_two_e_integrals_non_zero(j,k,l,sze,out_val,out_val_index,non_zero_int)
File: :file:`map_integrals.irp.f`
Gets multiple AO bi-electronic integral from the AO map . All non-zero i are retrieved for j,k,l fixed.
.. c:function:: give_polynom_mult_center_x .. c:function:: give_polynom_mult_center_x
.. code:: text .. code:: text
@ -617,3 +589,31 @@ Subroutines / functions
Push integrals in the push socket Push integrals in the push socket
.. c:function:: two_e_integrals_index
.. code:: text
subroutine two_e_integrals_index(i,j,k,l,i1)
File: :file:`map_integrals.irp.f`
.. c:function:: two_e_integrals_index_reverse
.. code:: text
subroutine two_e_integrals_index_reverse(i,j,k,l,i1)
File: :file:`map_integrals.irp.f`

View File

@ -17,7 +17,7 @@ the :ref:`davidson` module should be used, and it has a default zero dressing ve
The important providers for that module are: The important providers for that module are:
# `psi_energy` which is the expectation value over the wave function (`psi_det`, `psi_coef`) of the Hamiltonian, dressed or not. It uses the general subroutine `u_0_H_u_0`. # `psi_energy` which is the expectation value over the wave function (`psi_det`, `psi_coef`) of the Hamiltonian, dressed or not. It uses the general subroutine `u_0_H_u_0`.
# `psi_energy_bielec` which is the expectation value over the wave function (`psi_det`, `psi_coef`) of the standard two-electrons coulomb operator. It uses the general routine `u_0_H_u_0_bielec`. # `psi_energy_two_e` which is the expectation value over the wave function (`psi_det`, `psi_coef`) of the standard two-electrons coulomb operator. It uses the general routine `u_0_H_u_0_two_e`.
@ -194,11 +194,11 @@ Providers
.. c:var:: psi_energy_bielec .. c:var:: psi_energy_two_e
.. code:: text .. code:: text
double precision, allocatable :: psi_energy_bielec (N_states) double precision, allocatable :: psi_energy_two_e (N_states)
File: :file:`u0_wee_u0.irp.f` File: :file:`u0_wee_u0.irp.f`
@ -409,120 +409,6 @@ Subroutines / functions
.. c:function:: h_s2_u_0_bielec_nstates_openmp
.. code:: text
subroutine H_S2_u_0_bielec_nstates_openmp(v_0,s_0,u_0,N_st,sze)
File: :file:`u0_wee_u0.irp.f`
Computes :math:`v_0 = H|u_0\rangle` and :math:`s_0 = S^2 |u_0\rangle`
Assumes that the determinants are in psi_det
istart, iend, ishift, istep are used in ZMQ parallelization.
.. c:function:: h_s2_u_0_bielec_nstates_openmp_work
.. code:: text
subroutine H_S2_u_0_bielec_nstates_openmp_work(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep)
File: :file:`u0_wee_u0.irp.f`
Computes :math:`v_t = H|u_t\rangle` and :math:`s_t = S^2 |u_t\rangle`
Default should be 1,N_det,0,1
.. c:function:: h_s2_u_0_bielec_nstates_openmp_work_1
.. code:: text
subroutine H_S2_u_0_bielec_nstates_openmp_work_1(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep)
File: :file:`u0_wee_u0.irp.f_template_457`
Computes :math:`v_t = H|u_t angle` and :math:`s_t = S^2 |u_t angle`
Default should be 1,N_det,0,1
.. c:function:: h_s2_u_0_bielec_nstates_openmp_work_2
.. code:: text
subroutine H_S2_u_0_bielec_nstates_openmp_work_2(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep)
File: :file:`u0_wee_u0.irp.f_template_457`
Computes :math:`v_t = H|u_t angle` and :math:`s_t = S^2 |u_t angle`
Default should be 1,N_det,0,1
.. c:function:: h_s2_u_0_bielec_nstates_openmp_work_3
.. code:: text
subroutine H_S2_u_0_bielec_nstates_openmp_work_3(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep)
File: :file:`u0_wee_u0.irp.f_template_457`
Computes :math:`v_t = H|u_t angle` and :math:`s_t = S^2 |u_t angle`
Default should be 1,N_det,0,1
.. c:function:: h_s2_u_0_bielec_nstates_openmp_work_4
.. code:: text
subroutine H_S2_u_0_bielec_nstates_openmp_work_4(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep)
File: :file:`u0_wee_u0.irp.f_template_457`
Computes :math:`v_t = H|u_t angle` and :math:`s_t = S^2 |u_t angle`
Default should be 1,N_det,0,1
.. c:function:: h_s2_u_0_bielec_nstates_openmp_work_n_int
.. code:: text
subroutine H_S2_u_0_bielec_nstates_openmp_work_N_int(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep)
File: :file:`u0_wee_u0.irp.f_template_457`
Computes :math:`v_t = H|u_t angle` and :math:`s_t = S^2 |u_t angle`
Default should be 1,N_det,0,1
.. c:function:: h_s2_u_0_nstates_openmp .. c:function:: h_s2_u_0_nstates_openmp
.. code:: text .. code:: text
@ -657,6 +543,120 @@ Subroutines / functions
.. c:function:: h_s2_u_0_two_e_nstates_openmp
.. code:: text
subroutine H_S2_u_0_two_e_nstates_openmp(v_0,s_0,u_0,N_st,sze)
File: :file:`u0_wee_u0.irp.f`
Computes :math:`v_0 = H|u_0\rangle` and :math:`s_0 = S^2 |u_0\rangle`
Assumes that the determinants are in psi_det
istart, iend, ishift, istep are used in ZMQ parallelization.
.. c:function:: h_s2_u_0_two_e_nstates_openmp_work
.. code:: text
subroutine H_S2_u_0_two_e_nstates_openmp_work(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep)
File: :file:`u0_wee_u0.irp.f`
Computes :math:`v_t = H|u_t\rangle` and :math:`s_t = S^2 |u_t\rangle`
Default should be 1,N_det,0,1
.. c:function:: h_s2_u_0_two_e_nstates_openmp_work_1
.. code:: text
subroutine H_S2_u_0_two_e_nstates_openmp_work_1(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep)
File: :file:`u0_wee_u0.irp.f_template_457`
Computes :math:`v_t = H|u_t angle` and :math:`s_t = S^2 |u_t angle`
Default should be 1,N_det,0,1
.. c:function:: h_s2_u_0_two_e_nstates_openmp_work_2
.. code:: text
subroutine H_S2_u_0_two_e_nstates_openmp_work_2(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep)
File: :file:`u0_wee_u0.irp.f_template_457`
Computes :math:`v_t = H|u_t angle` and :math:`s_t = S^2 |u_t angle`
Default should be 1,N_det,0,1
.. c:function:: h_s2_u_0_two_e_nstates_openmp_work_3
.. code:: text
subroutine H_S2_u_0_two_e_nstates_openmp_work_3(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep)
File: :file:`u0_wee_u0.irp.f_template_457`
Computes :math:`v_t = H|u_t angle` and :math:`s_t = S^2 |u_t angle`
Default should be 1,N_det,0,1
.. c:function:: h_s2_u_0_two_e_nstates_openmp_work_4
.. code:: text
subroutine H_S2_u_0_two_e_nstates_openmp_work_4(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep)
File: :file:`u0_wee_u0.irp.f_template_457`
Computes :math:`v_t = H|u_t angle` and :math:`s_t = S^2 |u_t angle`
Default should be 1,N_det,0,1
.. c:function:: h_s2_u_0_two_e_nstates_openmp_work_n_int
.. code:: text
subroutine H_S2_u_0_two_e_nstates_openmp_work_N_int(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep)
File: :file:`u0_wee_u0.irp.f_template_457`
Computes :math:`v_t = H|u_t angle` and :math:`s_t = S^2 |u_t angle`
Default should be 1,N_det,0,1
.. c:function:: u_0_h_u_0 .. c:function:: u_0_h_u_0
.. code:: text .. code:: text
@ -675,11 +675,11 @@ Subroutines / functions
.. c:function:: u_0_h_u_0_bielec .. c:function:: u_0_h_u_0_two_e
.. code:: text .. code:: text
subroutine u_0_H_u_0_bielec(e_0,u_0,n,keys_tmp,Nint,N_st,sze) subroutine u_0_H_u_0_two_e(e_0,u_0,n,keys_tmp,Nint,N_st,sze)
File: :file:`u0_wee_u0.irp.f` File: :file:`u0_wee_u0.irp.f`

View File

@ -175,23 +175,6 @@ Providers
.. c:var:: bi_elec_ref_bitmask_energy
.. code:: text
double precision :: ref_bitmask_energy
double precision :: mono_elec_ref_bitmask_energy
double precision :: kinetic_ref_bitmask_energy
double precision :: nucl_elec_ref_bitmask_energy
double precision :: bi_elec_ref_bitmask_energy
File: :file:`ref_bitmask.irp.f`
Energy of the reference bitmask used in Slater rules
.. c:var:: c0_weight .. c:var:: c0_weight
.. code:: text .. code:: text
@ -422,23 +405,6 @@ Providers
.. c:var:: kinetic_ref_bitmask_energy
.. code:: text
double precision :: ref_bitmask_energy
double precision :: mono_elec_ref_bitmask_energy
double precision :: kinetic_ref_bitmask_energy
double precision :: nucl_elec_ref_bitmask_energy
double precision :: bi_elec_ref_bitmask_energy
File: :file:`ref_bitmask.irp.f`
Energy of the reference bitmask used in Slater rules
.. c:var:: max_degree_exc .. c:var:: max_degree_exc
.. code:: text .. code:: text
@ -465,23 +431,6 @@ Providers
.. c:var:: mono_elec_ref_bitmask_energy
.. code:: text
double precision :: ref_bitmask_energy
double precision :: mono_elec_ref_bitmask_energy
double precision :: kinetic_ref_bitmask_energy
double precision :: nucl_elec_ref_bitmask_energy
double precision :: bi_elec_ref_bitmask_energy
File: :file:`ref_bitmask.irp.f`
Energy of the reference bitmask used in Slater rules
.. c:var:: n_det .. c:var:: n_det
.. code:: text .. code:: text
@ -601,23 +550,6 @@ Providers
.. c:var:: nucl_elec_ref_bitmask_energy
.. code:: text
double precision :: ref_bitmask_energy
double precision :: mono_elec_ref_bitmask_energy
double precision :: kinetic_ref_bitmask_energy
double precision :: nucl_elec_ref_bitmask_energy
double precision :: bi_elec_ref_bitmask_energy
File: :file:`ref_bitmask.irp.f`
Energy of the reference bitmask used in Slater rules
.. c:var:: one_body_dm_ao_alpha .. c:var:: one_body_dm_ao_alpha
.. code:: text .. code:: text
@ -1403,7 +1335,7 @@ Providers
psi_energy_h_core = :math:`\langle \Psi | h_{core} |\Psi \rangle` psi_energy_h_core = :math:`\langle \Psi | h_{core} |\Psi \rangle`
computed using the :c:data:`one_body_dm_mo_alpha` + :c:data:`one_body_dm_mo_beta` and :c:data:`mo_mono_elec_integrals` computed using the :c:data:`one_body_dm_mo_alpha` + :c:data:`one_body_dm_mo_beta` and :c:data:`mo_one_e_integrals`
@ -1501,15 +1433,83 @@ Providers
.. c:var:: ref_bitmask_e_n_energy
.. code:: text
double precision :: ref_bitmask_energy
double precision :: ref_bitmask_one_e_energy
double precision :: ref_bitmask_kinetic_energy
double precision :: ref_bitmask_e_n_energy
double precision :: ref_bitmask_two_e_energy
File: :file:`ref_bitmask.irp.f`
Energy of the reference bitmask used in Slater rules
.. c:var:: ref_bitmask_energy .. c:var:: ref_bitmask_energy
.. code:: text .. code:: text
double precision :: ref_bitmask_energy double precision :: ref_bitmask_energy
double precision :: mono_elec_ref_bitmask_energy double precision :: ref_bitmask_one_e_energy
double precision :: kinetic_ref_bitmask_energy double precision :: ref_bitmask_kinetic_energy
double precision :: nucl_elec_ref_bitmask_energy double precision :: ref_bitmask_e_n_energy
double precision :: bi_elec_ref_bitmask_energy double precision :: ref_bitmask_two_e_energy
File: :file:`ref_bitmask.irp.f`
Energy of the reference bitmask used in Slater rules
.. c:var:: ref_bitmask_kinetic_energy
.. code:: text
double precision :: ref_bitmask_energy
double precision :: ref_bitmask_one_e_energy
double precision :: ref_bitmask_kinetic_energy
double precision :: ref_bitmask_e_n_energy
double precision :: ref_bitmask_two_e_energy
File: :file:`ref_bitmask.irp.f`
Energy of the reference bitmask used in Slater rules
.. c:var:: ref_bitmask_one_e_energy
.. code:: text
double precision :: ref_bitmask_energy
double precision :: ref_bitmask_one_e_energy
double precision :: ref_bitmask_kinetic_energy
double precision :: ref_bitmask_e_n_energy
double precision :: ref_bitmask_two_e_energy
File: :file:`ref_bitmask.irp.f`
Energy of the reference bitmask used in Slater rules
.. c:var:: ref_bitmask_two_e_energy
.. code:: text
double precision :: ref_bitmask_energy
double precision :: ref_bitmask_one_e_energy
double precision :: ref_bitmask_kinetic_energy
double precision :: ref_bitmask_e_n_energy
double precision :: ref_bitmask_two_e_energy
File: :file:`ref_bitmask.irp.f` File: :file:`ref_bitmask.irp.f`
@ -1701,11 +1701,11 @@ Subroutines / functions
.. c:function:: a_operator_bielec .. c:function:: a_operator_two_e
.. code:: text .. code:: text
subroutine a_operator_bielec(iorb,ispin,key,hjj,Nint,na,nb) subroutine a_operator_two_e(iorb,ispin,key,hjj,Nint,na,nb)
File: :file:`slater_rules_wee_mono.irp.f` File: :file:`slater_rules_wee_mono.irp.f`
@ -1729,11 +1729,11 @@ Subroutines / functions
.. c:function:: ac_operator_bielec .. c:function:: ac_operator_two_e
.. code:: text .. code:: text
subroutine ac_operator_bielec(iorb,ispin,key,hjj,Nint,na,nb) subroutine ac_operator_two_e(iorb,ispin,key,hjj,Nint,na,nb)
File: :file:`slater_rules_wee_mono.irp.f` File: :file:`slater_rules_wee_mono.irp.f`
@ -2121,11 +2121,11 @@ Subroutines / functions
.. c:function:: diag_h_mat_elem_monoelec .. c:function:: diag_h_mat_elem_one_e
.. code:: text .. code:: text
double precision function diag_H_mat_elem_monoelec(det_in,Nint) double precision function diag_H_mat_elem_one_e(det_in,Nint)
File: :file:`slater_rules_wee_mono.irp.f` File: :file:`slater_rules_wee_mono.irp.f`
@ -2953,20 +2953,6 @@ Subroutines / functions
.. c:function:: i_h_j_bielec
.. code:: text
subroutine i_H_j_bielec(key_i,key_j,Nint,hij)
File: :file:`slater_rules_wee_mono.irp.f`
Returns :math:`\langle i|H|j \rangle` where :math:`i` and :math:`j` are determinants.
.. c:function:: i_h_j_double_alpha_beta .. c:function:: i_h_j_double_alpha_beta
.. code:: text .. code:: text
@ -3009,11 +2995,11 @@ Subroutines / functions
.. c:function:: i_h_j_mono_spin_monoelec .. c:function:: i_h_j_mono_spin_one_e
.. code:: text .. code:: text
subroutine i_H_j_mono_spin_monoelec(key_i,key_j,Nint,spin,hij) subroutine i_H_j_mono_spin_one_e(key_i,key_j,Nint,spin,hij)
File: :file:`slater_rules_wee_mono.irp.f` File: :file:`slater_rules_wee_mono.irp.f`
@ -3023,11 +3009,11 @@ Subroutines / functions
.. c:function:: i_h_j_monoelec .. c:function:: i_h_j_one_e
.. code:: text .. code:: text
subroutine i_H_j_monoelec(key_i,key_j,Nint,hij) subroutine i_H_j_one_e(key_i,key_j,Nint,hij)
File: :file:`slater_rules_wee_mono.irp.f` File: :file:`slater_rules_wee_mono.irp.f`
@ -3051,6 +3037,20 @@ Subroutines / functions
.. c:function:: i_h_j_two_e
.. code:: text
subroutine i_H_j_two_e(key_i,key_j,Nint,hij)
File: :file:`slater_rules_wee_mono.irp.f`
Returns :math:`\langle i|H|j \rangle` where :math:`i` and :math:`j` are determinants.
.. c:function:: i_h_j_verbose .. c:function:: i_h_j_verbose
.. code:: text .. code:: text

View File

@ -63,12 +63,12 @@ Providers
--------- ---------
.. c:var:: ao_bi_elec_integral_alpha .. c:var:: ao_two_e_integral_alpha
.. code:: text .. code:: text
double precision, allocatable :: ao_bi_elec_integral_alpha (ao_num,ao_num) double precision, allocatable :: ao_two_e_integral_alpha (ao_num,ao_num)
double precision, allocatable :: ao_bi_elec_integral_beta (ao_num,ao_num) double precision, allocatable :: ao_two_e_integral_beta (ao_num,ao_num)
File: :file:`fock_matrix_hf.irp.f` File: :file:`fock_matrix_hf.irp.f`
@ -77,12 +77,12 @@ Providers
.. c:var:: ao_bi_elec_integral_beta .. c:var:: ao_two_e_integral_beta
.. code:: text .. code:: text
double precision, allocatable :: ao_bi_elec_integral_alpha (ao_num,ao_num) double precision, allocatable :: ao_two_e_integral_alpha (ao_num,ao_num)
double precision, allocatable :: ao_bi_elec_integral_beta (ao_num,ao_num) double precision, allocatable :: ao_two_e_integral_beta (ao_num,ao_num)
File: :file:`fock_matrix_hf.irp.f` File: :file:`fock_matrix_hf.irp.f`

View File

@ -187,7 +187,7 @@ Subroutines / functions
Transform A from the |AO| basis to the orthogonal |AO| basis Transform A from the |AO| basis to the orthogonal |AO| basis
:math:`C^{-1}.A_{ao}.C^\dagger^{-1}` :math:`C^{-1}.A_{ao}.C^{\dagger-1}`

View File

@ -13,8 +13,8 @@ All the one-electron integrals in |MO| basis are defined here.
The most important providers for usual quantum-chemistry calculation are: The most important providers for usual quantum-chemistry calculation are:
* `mo_kinetic_integrals` which are the kinetic operator integrals on the |AO| basis (see :file:`kin_mo_ints.irp.f`) * `mo_kinetic_integrals` which are the kinetic operator integrals on the |AO| basis (see :file:`kin_mo_ints.irp.f`)
* `mo_nucl_elec_integrals` which are the nuclear-elctron operator integrals on the |AO| basis (see :file:`pot_mo_ints.irp.f`) * `mo_integrals_n_e` which are the nuclear-elctron operator integrals on the |AO| basis (see :file:`pot_mo_ints.irp.f`)
* `mo_mono_elec_integrals` which are the the h_core operator integrals on the |AO| basis (see :file:`mo_mono_ints.irp.f`) * `mo_one_e_integrals` which are the the h_core operator integrals on the |AO| basis (see :file:`mo_mono_ints.irp.f`)
Note that you can find other interesting integrals related to the position operator in :file:`spread_dipole_mo.irp.f`. Note that you can find other interesting integrals related to the position operator in :file:`spread_dipole_mo.irp.f`.
@ -117,6 +117,32 @@ Providers
.. c:var:: mo_integrals_n_e
.. code:: text
double precision, allocatable :: mo_integrals_n_e (mo_num,mo_num)
File: :file:`pot_mo_ints.irp.f`
Nucleus-electron interaction on the |MO| basis
.. c:var:: mo_integrals_n_e_per_atom
.. code:: text
double precision, allocatable :: mo_integrals_n_e_per_atom (mo_num,mo_num,nucl_num)
File: :file:`pot_mo_ints.irp.f`
mo_integrals_n_e_per_atom(i,j,k) = :math:`\langle \phi_i| -\frac{1}{|r-R_k|} | \phi_j \rangle` . where R_k is the coordinate of the k-th nucleus.
.. c:var:: mo_kinetic_integrals .. c:var:: mo_kinetic_integrals
.. code:: text .. code:: text
@ -130,11 +156,11 @@ Providers
.. c:var:: mo_mono_elec_integrals .. c:var:: mo_one_e_integrals
.. code:: text .. code:: text
double precision, allocatable :: mo_mono_elec_integrals (mo_num,mo_num) double precision, allocatable :: mo_one_e_integrals (mo_num,mo_num)
File: :file:`mo_one_e_ints.irp.f` File: :file:`mo_one_e_ints.irp.f`
@ -143,32 +169,6 @@ Providers
.. c:var:: mo_nucl_elec_integrals
.. code:: text
double precision, allocatable :: mo_nucl_elec_integrals (mo_num,mo_num)
File: :file:`pot_mo_ints.irp.f`
Nucleus-electron interaction on the |MO| basis
.. c:var:: mo_nucl_elec_integrals_per_atom
.. code:: text
double precision, allocatable :: mo_nucl_elec_integrals_per_atom (mo_num,mo_num,nucl_num)
File: :file:`pot_mo_ints.irp.f`
mo_nucl_elec_integrals_per_atom(i,j,k) = :math:`\langle \phi_i| -\frac{1}{|r-R_k|} | \phi_j \rangle` . where R_k is the coordinate of the k-th nucleus.
.. c:var:: mo_overlap .. c:var:: mo_overlap
.. code:: text .. code:: text

View File

@ -15,7 +15,7 @@ in :file:`Utils/map_module.f90`.
The range separation parameter :math:`{\mu}_{erf}` is the variable :option:`ao_two_e_erf_ints mu_erf`. The range separation parameter :math:`{\mu}_{erf}` is the variable :option:`ao_two_e_erf_ints mu_erf`.
To fetch an |MO| integral, use To fetch an |MO| integral, use
`get_mo_bielec_integral_erf(i,j,k,l,mo_integrals_map_erf)` `get_mo_two_e_integral_erf(i,j,k,l,mo_integrals_map_erf)`
The conventions are: The conventions are:
@ -113,19 +113,6 @@ Providers
.. c:var:: mo_bielec_integrals_erf_in_map
.. code:: text
logical :: mo_bielec_integrals_erf_in_map
File: :file:`mo_bi_integrals_erf.irp.f`
If True, the map of MO bielectronic integrals is provided
.. c:var:: mo_integrals_erf_cache .. c:var:: mo_integrals_erf_cache
.. code:: text .. code:: text
@ -190,7 +177,7 @@ Providers
File: :file:`mo_bi_integrals_erf.irp.f` File: :file:`mo_bi_integrals_erf.irp.f`
mo_bielec_integral_jj(i,j) = J_ij mo_bielec_integral_jj_exchange(i,j) = K_ij mo_bielec_integral_jj_anti(i,j) = J_ij - K_ij 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
@ -205,7 +192,7 @@ Providers
File: :file:`mo_bi_integrals_erf.irp.f` File: :file:`mo_bi_integrals_erf.irp.f`
mo_bielec_integral_jj(i,j) = J_ij mo_bielec_integral_jj_exchange(i,j) = K_ij mo_bielec_integral_jj_anti(i,j) = J_ij - K_ij 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
@ -220,7 +207,7 @@ Providers
File: :file:`mo_bi_integrals_erf.irp.f` File: :file:`mo_bi_integrals_erf.irp.f`
mo_bielec_integral_jj_from_ao(i,j) = J_ij mo_bielec_integral_jj_exchange_from_ao(i,j) = J_ij mo_bielec_integral_jj_anti_from_ao(i,j) = J_ij - K_ij 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
@ -235,7 +222,7 @@ Providers
File: :file:`mo_bi_integrals_erf.irp.f` File: :file:`mo_bi_integrals_erf.irp.f`
mo_bielec_integral_jj(i,j) = J_ij mo_bielec_integral_jj_exchange(i,j) = K_ij mo_bielec_integral_jj_anti(i,j) = J_ij - K_ij 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
@ -250,7 +237,7 @@ Providers
File: :file:`mo_bi_integrals_erf.irp.f` File: :file:`mo_bi_integrals_erf.irp.f`
mo_bielec_integral_jj_from_ao(i,j) = J_ij mo_bielec_integral_jj_exchange_from_ao(i,j) = J_ij mo_bielec_integral_jj_anti_from_ao(i,j) = J_ij - K_ij 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
@ -265,7 +252,20 @@ Providers
File: :file:`mo_bi_integrals_erf.irp.f` File: :file:`mo_bi_integrals_erf.irp.f`
mo_bielec_integral_jj_from_ao(i,j) = J_ij mo_bielec_integral_jj_exchange_from_ao(i,j) = J_ij mo_bielec_integral_jj_anti_from_ao(i,j) = J_ij - K_ij 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
.. c:var:: mo_two_e_integrals_erf_in_map
.. code:: text
logical :: mo_two_e_integrals_erf_in_map
File: :file:`mo_bi_integrals_erf.irp.f`
If True, the map of MO two-electron integrals is provided
@ -303,11 +303,25 @@ Subroutines / functions
.. c:function:: get_mo_bielec_integral_erf .. c:function:: get_mo_erf_map_size
.. code:: text .. code:: text
double precision function get_mo_bielec_integral_erf(i,j,k,l,map) integer*8 function get_mo_erf_map_size()
File: :file:`map_integrals_erf.irp.f`
Returns the number of elements in the |MO| map
.. c:function:: get_mo_two_e_integral_erf
.. code:: text
double precision function get_mo_two_e_integral_erf(i,j,k,l,map)
File: :file:`map_integrals_erf.irp.f` File: :file:`map_integrals_erf.irp.f`
@ -317,11 +331,11 @@ Subroutines / functions
.. c:function:: get_mo_bielec_integrals_erf .. c:function:: get_mo_two_e_integrals_erf
.. code:: text .. code:: text
subroutine get_mo_bielec_integrals_erf(j,k,l,sze,out_val,map) subroutine get_mo_two_e_integrals_erf(j,k,l,sze,out_val,map)
File: :file:`map_integrals_erf.irp.f` File: :file:`map_integrals_erf.irp.f`
@ -331,11 +345,11 @@ Subroutines / functions
.. c:function:: get_mo_bielec_integrals_erf_coulomb_ii .. c:function:: get_mo_two_e_integrals_erf_coulomb_ii
.. code:: text .. code:: text
subroutine get_mo_bielec_integrals_erf_coulomb_ii(k,l,sze,out_val,map) subroutine get_mo_two_e_integrals_erf_coulomb_ii(k,l,sze,out_val,map)
File: :file:`map_integrals_erf.irp.f` File: :file:`map_integrals_erf.irp.f`
@ -347,11 +361,11 @@ Subroutines / functions
.. c:function:: get_mo_bielec_integrals_erf_exch_ii .. c:function:: get_mo_two_e_integrals_erf_exch_ii
.. code:: text .. code:: text
subroutine get_mo_bielec_integrals_erf_exch_ii(k,l,sze,out_val,map) subroutine get_mo_two_e_integrals_erf_exch_ii(k,l,sze,out_val,map)
File: :file:`map_integrals_erf.irp.f` File: :file:`map_integrals_erf.irp.f`
@ -363,11 +377,11 @@ Subroutines / functions
.. c:function:: get_mo_bielec_integrals_erf_i1j1 .. c:function:: get_mo_two_e_integrals_erf_i1j1
.. code:: text .. code:: text
subroutine get_mo_bielec_integrals_erf_i1j1(k,l,sze,out_array,map) subroutine get_mo_two_e_integrals_erf_i1j1(k,l,sze,out_array,map)
File: :file:`map_integrals_erf.irp.f` File: :file:`map_integrals_erf.irp.f`
@ -377,11 +391,11 @@ Subroutines / functions
.. c:function:: get_mo_bielec_integrals_erf_ij .. c:function:: get_mo_two_e_integrals_erf_ij
.. code:: text .. code:: text
subroutine get_mo_bielec_integrals_erf_ij(k,l,sze,out_array,map) subroutine get_mo_two_e_integrals_erf_ij(k,l,sze,out_array,map)
File: :file:`map_integrals_erf.irp.f` File: :file:`map_integrals_erf.irp.f`
@ -391,20 +405,6 @@ Subroutines / functions
.. c:function:: get_mo_erf_map_size
.. code:: text
integer*8 function get_mo_erf_map_size()
File: :file:`map_integrals_erf.irp.f`
Returns the number of elements in the |MO| map
.. c:function:: load_mo_integrals_erf .. c:function:: load_mo_integrals_erf
.. code:: text .. code:: text
@ -419,11 +419,11 @@ Subroutines / functions
.. c:function:: mo_bielec_integral_erf .. c:function:: mo_two_e_integral_erf
.. code:: text .. code:: text
double precision function mo_bielec_integral_erf(i,j,k,l) double precision function mo_two_e_integral_erf(i,j,k,l)
File: :file:`map_integrals_erf.irp.f` File: :file:`map_integrals_erf.irp.f`
@ -433,11 +433,11 @@ Subroutines / functions
.. c:function:: mo_bielec_integrals_erf_index .. c:function:: mo_two_e_integrals_erf_index
.. code:: text .. code:: text
subroutine mo_bielec_integrals_erf_index(i,j,k,l,i1) subroutine mo_two_e_integrals_erf_index(i,j,k,l,i1)
File: :file:`mo_bi_integrals_erf.irp.f` File: :file:`mo_bi_integrals_erf.irp.f`
@ -461,11 +461,11 @@ Subroutines / functions
.. c:function:: save_erf_bi_elec_integrals_mo .. c:function:: save_erf_two_e_integrals_mo
.. code:: text .. code:: text
subroutine save_erf_bi_elec_integrals_mo subroutine save_erf_two_e_integrals_mo
File: :file:`routines_save_integrals_erf.irp.f` File: :file:`routines_save_integrals_erf.irp.f`
@ -475,11 +475,11 @@ Subroutines / functions
.. c:function:: save_erf_bielec_ints_mo_into_ints_mo .. c:function:: save_erf_two_e_ints_mo_into_ints_mo
.. code:: text .. code:: text
subroutine save_erf_bielec_ints_mo_into_ints_mo subroutine save_erf_two_e_ints_mo_into_ints_mo
File: :file:`routines_save_integrals_erf.irp.f` File: :file:`routines_save_integrals_erf.irp.f`

View File

@ -13,10 +13,10 @@ As they have 4 indices and many are zero, they are stored in a map, as defined
in :file:`Utils/map_module.f90`. in :file:`Utils/map_module.f90`.
To fetch an |AO| integral, use the To fetch an |AO| integral, use the
`get_ao_bielec_integral(i,j,k,l,ao_integrals_map)` function, and `get_ao_two_e_integral(i,j,k,l,ao_integrals_map)` function, and
to fetch an |MO| integral, use to fetch an |MO| integral, use
`get_mo_bielec_integral(i,j,k,l,mo_integrals_map)` or `get_two_e_integral(i,j,k,l,mo_integrals_map)` or
`mo_bielec_integral(i,j,k,l)`. `mo_two_e_integral(i,j,k,l)`.
The conventions are: The conventions are:
@ -138,154 +138,6 @@ Providers
.. c:var:: mo_bielec_integral_jj
.. code:: text
double precision, allocatable :: mo_bielec_integral_jj (mo_num,mo_num)
double precision, allocatable :: mo_bielec_integral_jj_exchange (mo_num,mo_num)
double precision, allocatable :: mo_bielec_integral_jj_anti (mo_num,mo_num)
File: :file:`mo_bi_integrals.irp.f`
mo_bielec_integral_jj(i,j) = J_ij mo_bielec_integral_jj_exchange(i,j) = K_ij mo_bielec_integral_jj_anti(i,j) = J_ij - K_ij
.. c:var:: mo_bielec_integral_jj_anti
.. code:: text
double precision, allocatable :: mo_bielec_integral_jj (mo_num,mo_num)
double precision, allocatable :: mo_bielec_integral_jj_exchange (mo_num,mo_num)
double precision, allocatable :: mo_bielec_integral_jj_anti (mo_num,mo_num)
File: :file:`mo_bi_integrals.irp.f`
mo_bielec_integral_jj(i,j) = J_ij mo_bielec_integral_jj_exchange(i,j) = K_ij mo_bielec_integral_jj_anti(i,j) = J_ij - K_ij
.. c:var:: mo_bielec_integral_jj_anti_from_ao
.. code:: text
double precision, allocatable :: mo_bielec_integral_jj_from_ao (mo_num,mo_num)
double precision, allocatable :: mo_bielec_integral_jj_exchange_from_ao (mo_num,mo_num)
double precision, allocatable :: mo_bielec_integral_jj_anti_from_ao (mo_num,mo_num)
File: :file:`mo_bi_integrals.irp.f`
mo_bielec_integral_jj_from_ao(i,j) = J_ij mo_bielec_integral_jj_exchange_from_ao(i,j) = J_ij mo_bielec_integral_jj_anti_from_ao(i,j) = J_ij - K_ij
.. c:var:: mo_bielec_integral_jj_exchange
.. code:: text
double precision, allocatable :: mo_bielec_integral_jj (mo_num,mo_num)
double precision, allocatable :: mo_bielec_integral_jj_exchange (mo_num,mo_num)
double precision, allocatable :: mo_bielec_integral_jj_anti (mo_num,mo_num)
File: :file:`mo_bi_integrals.irp.f`
mo_bielec_integral_jj(i,j) = J_ij mo_bielec_integral_jj_exchange(i,j) = K_ij mo_bielec_integral_jj_anti(i,j) = J_ij - K_ij
.. c:var:: mo_bielec_integral_jj_exchange_from_ao
.. code:: text
double precision, allocatable :: mo_bielec_integral_jj_from_ao (mo_num,mo_num)
double precision, allocatable :: mo_bielec_integral_jj_exchange_from_ao (mo_num,mo_num)
double precision, allocatable :: mo_bielec_integral_jj_anti_from_ao (mo_num,mo_num)
File: :file:`mo_bi_integrals.irp.f`
mo_bielec_integral_jj_from_ao(i,j) = J_ij mo_bielec_integral_jj_exchange_from_ao(i,j) = J_ij mo_bielec_integral_jj_anti_from_ao(i,j) = J_ij - K_ij
.. c:var:: mo_bielec_integral_jj_from_ao
.. code:: text
double precision, allocatable :: mo_bielec_integral_jj_from_ao (mo_num,mo_num)
double precision, allocatable :: mo_bielec_integral_jj_exchange_from_ao (mo_num,mo_num)
double precision, allocatable :: mo_bielec_integral_jj_anti_from_ao (mo_num,mo_num)
File: :file:`mo_bi_integrals.irp.f`
mo_bielec_integral_jj_from_ao(i,j) = J_ij mo_bielec_integral_jj_exchange_from_ao(i,j) = J_ij mo_bielec_integral_jj_anti_from_ao(i,j) = J_ij - K_ij
.. c:var:: mo_bielec_integral_vv_anti_from_ao
.. code:: text
double precision, allocatable :: mo_bielec_integral_vv_from_ao (mo_num,mo_num)
double precision, allocatable :: mo_bielec_integral_vv_exchange_from_ao (mo_num,mo_num)
double precision, allocatable :: mo_bielec_integral_vv_anti_from_ao (mo_num,mo_num)
File: :file:`mo_bi_integrals.irp.f`
mo_bielec_integral_vv_from_ao(i,j) = J_ij mo_bielec_integral_vv_exchange_from_ao(i,j) = J_ij mo_bielec_integral_vv_anti_from_ao(i,j) = J_ij - K_ij but only for the virtual orbitals
.. c:var:: mo_bielec_integral_vv_exchange_from_ao
.. code:: text
double precision, allocatable :: mo_bielec_integral_vv_from_ao (mo_num,mo_num)
double precision, allocatable :: mo_bielec_integral_vv_exchange_from_ao (mo_num,mo_num)
double precision, allocatable :: mo_bielec_integral_vv_anti_from_ao (mo_num,mo_num)
File: :file:`mo_bi_integrals.irp.f`
mo_bielec_integral_vv_from_ao(i,j) = J_ij mo_bielec_integral_vv_exchange_from_ao(i,j) = J_ij mo_bielec_integral_vv_anti_from_ao(i,j) = J_ij - K_ij but only for the virtual orbitals
.. c:var:: mo_bielec_integral_vv_from_ao
.. code:: text
double precision, allocatable :: mo_bielec_integral_vv_from_ao (mo_num,mo_num)
double precision, allocatable :: mo_bielec_integral_vv_exchange_from_ao (mo_num,mo_num)
double precision, allocatable :: mo_bielec_integral_vv_anti_from_ao (mo_num,mo_num)
File: :file:`mo_bi_integrals.irp.f`
mo_bielec_integral_vv_from_ao(i,j) = J_ij mo_bielec_integral_vv_exchange_from_ao(i,j) = J_ij mo_bielec_integral_vv_anti_from_ao(i,j) = J_ij - K_ij but only for the virtual orbitals
.. c:var:: mo_bielec_integrals_in_map
.. code:: text
logical :: mo_bielec_integrals_in_map
File: :file:`mo_bi_integrals.irp.f`
If True, the map of MO bielectronic integrals is provided
.. c:var:: mo_integrals_cache .. c:var:: mo_integrals_cache
.. code:: text .. code:: text
@ -376,6 +228,154 @@ Providers
.. c:var:: mo_two_e_integral_jj_from_ao
.. code:: text
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)
File: :file:`mo_bi_integrals.irp.f`
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
.. c:var:: mo_two_e_integrals_in_map
.. code:: text
logical :: mo_two_e_integrals_in_map
File: :file:`mo_bi_integrals.irp.f`
If True, the map of MO two-electron integrals is provided
.. c:var:: mo_two_e_integrals_jj
.. code:: text
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)
File: :file:`mo_bi_integrals.irp.f`
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
.. c:var:: mo_two_e_integrals_jj_anti
.. code:: text
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)
File: :file:`mo_bi_integrals.irp.f`
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
.. c:var:: mo_two_e_integrals_jj_anti_from_ao
.. code:: text
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)
File: :file:`mo_bi_integrals.irp.f`
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
.. c:var:: mo_two_e_integrals_jj_exchange
.. code:: text
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)
File: :file:`mo_bi_integrals.irp.f`
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
.. c:var:: mo_two_e_integrals_jj_exchange_from_ao
.. code:: text
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)
File: :file:`mo_bi_integrals.irp.f`
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
.. c:var:: mo_two_e_integrals_vv_anti_from_ao
.. code:: text
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)
File: :file:`mo_bi_integrals.irp.f`
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
.. c:var:: mo_two_e_integrals_vv_exchange_from_ao
.. code:: text
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)
File: :file:`mo_bi_integrals.irp.f`
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
.. c:var:: mo_two_e_integrals_vv_from_ao
.. code:: text
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)
File: :file:`mo_bi_integrals.irp.f`
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
Subroutines / functions Subroutines / functions
----------------------- -----------------------
@ -451,90 +451,6 @@ Subroutines / functions
.. c:function:: get_mo_bielec_integral
.. code:: text
double precision function get_mo_bielec_integral(i,j,k,l,map)
File: :file:`map_integrals.irp.f`
Returns one integral <ij|kl> in the MO basis
.. c:function:: get_mo_bielec_integrals
.. code:: text
subroutine get_mo_bielec_integrals(j,k,l,sze,out_val,map)
File: :file:`map_integrals.irp.f`
Returns multiple integrals <ij|kl> in the MO basis, all i for j,k,l fixed.
.. c:function:: get_mo_bielec_integrals_coulomb_ii
.. code:: text
subroutine get_mo_bielec_integrals_coulomb_ii(k,l,sze,out_val,map)
File: :file:`map_integrals.irp.f`
Returns multiple integrals <ki|li> k(1)i(2) 1/r12 l(1)i(2) :: out_val(i1) for k,l fixed.
.. c:function:: get_mo_bielec_integrals_exch_ii
.. code:: text
subroutine get_mo_bielec_integrals_exch_ii(k,l,sze,out_val,map)
File: :file:`map_integrals.irp.f`
Returns multiple integrals <ki|il> k(1)i(2) 1/r12 i(1)l(2) :: out_val(i1) for k,l fixed.
.. c:function:: get_mo_bielec_integrals_i1j1
.. code:: text
subroutine get_mo_bielec_integrals_i1j1(k,l,sze,out_array,map)
File: :file:`map_integrals.irp.f`
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.
.. c:function:: get_mo_bielec_integrals_ij
.. code:: text
subroutine get_mo_bielec_integrals_ij(k,l,sze,out_array,map)
File: :file:`map_integrals.irp.f`
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.
.. c:function:: get_mo_map_size .. c:function:: get_mo_map_size
.. code:: text .. code:: text
@ -549,6 +465,90 @@ Subroutines / functions
.. c:function:: get_mo_two_e_integrals
.. code:: text
subroutine get_mo_two_e_integrals(j,k,l,sze,out_val,map)
File: :file:`map_integrals.irp.f`
Returns multiple integrals <ij|kl> in the MO basis, all i for j,k,l fixed.
.. c:function:: get_mo_two_e_integrals_coulomb_ii
.. code:: text
subroutine get_mo_two_e_integrals_coulomb_ii(k,l,sze,out_val,map)
File: :file:`map_integrals.irp.f`
Returns multiple integrals <ki|li> k(1)i(2) 1/r12 l(1)i(2) :: out_val(i1) for k,l fixed.
.. c:function:: get_mo_two_e_integrals_exch_ii
.. code:: text
subroutine get_mo_two_e_integrals_exch_ii(k,l,sze,out_val,map)
File: :file:`map_integrals.irp.f`
Returns multiple integrals <ki|il> k(1)i(2) 1/r12 i(1)l(2) :: out_val(i1) for k,l fixed.
.. c:function:: get_mo_two_e_integrals_i1j1
.. code:: text
subroutine get_mo_two_e_integrals_i1j1(k,l,sze,out_array,map)
File: :file:`map_integrals.irp.f`
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.
.. c:function:: get_mo_two_e_integrals_ij
.. code:: text
subroutine get_mo_two_e_integrals_ij(k,l,sze,out_array,map)
File: :file:`map_integrals.irp.f`
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.
.. c:function:: get_two_e_integral
.. code:: text
double precision function get_two_e_integral(i,j,k,l,map)
File: :file:`map_integrals.irp.f`
Returns one integral <ij|kl> in the MO basis
.. c:function:: load_mo_integrals .. c:function:: load_mo_integrals
.. code:: text .. code:: text
@ -563,11 +563,11 @@ Subroutines / functions
.. c:function:: mo_bielec_integral .. c:function:: mo_two_e_integral
.. code:: text .. code:: text
double precision function mo_bielec_integral(i,j,k,l) double precision function mo_two_e_integral(i,j,k,l)
File: :file:`map_integrals.irp.f` File: :file:`map_integrals.irp.f`
@ -577,11 +577,11 @@ Subroutines / functions
.. c:function:: mo_bielec_integrals_index .. c:function:: mo_two_e_integrals_index
.. code:: text .. code:: text
subroutine mo_bielec_integrals_index(i,j,k,l,i1) subroutine mo_two_e_integrals_index(i,j,k,l,i1)
File: :file:`mo_bi_integrals.irp.f` File: :file:`mo_bi_integrals.irp.f`

View File

@ -189,7 +189,7 @@ Subroutines / functions
File: :file:`write_integrals_erf.irp.f` File: :file:`write_integrals_erf.irp.f`
Saves the bielec erf integrals into the EZFIO Saves the two-electron erf integrals into the EZFIO

View File

@ -5,12 +5,6 @@ Index of Providers
* :c:data:`abs_psi_coef_min` * :c:data:`abs_psi_coef_min`
* :c:data:`alpha_knowles` * :c:data:`alpha_knowles`
* :c:data:`angular_quadrature_points` * :c:data:`angular_quadrature_points`
* :c:data:`ao_bi_elec_integral_alpha`
* :c:data:`ao_bi_elec_integral_beta`
* :c:data:`ao_bielec_integral_erf_schwartz`
* :c:data:`ao_bielec_integral_schwartz`
* :c:data:`ao_bielec_integrals_erf_in_map`
* :c:data:`ao_bielec_integrals_in_map`
* :c:data:`ao_cart_to_sphe_coef` * :c:data:`ao_cart_to_sphe_coef`
* :c:data:`ao_cart_to_sphe_inv` * :c:data:`ao_cart_to_sphe_inv`
* :c:data:`ao_cart_to_sphe_num` * :c:data:`ao_cart_to_sphe_num`
@ -44,6 +38,8 @@ Index of Providers
* :c:data:`ao_integrals_erf_cache_min` * :c:data:`ao_integrals_erf_cache_min`
* :c:data:`ao_integrals_erf_map` * :c:data:`ao_integrals_erf_map`
* :c:data:`ao_integrals_map` * :c:data:`ao_integrals_map`
* :c:data:`ao_integrals_n_e`
* :c:data:`ao_integrals_n_e_per_atom`
* :c:data:`ao_integrals_threshold` * :c:data:`ao_integrals_threshold`
* :c:data:`ao_kinetic_integrals` * :c:data:`ao_kinetic_integrals`
* :c:data:`ao_l` * :c:data:`ao_l`
@ -52,8 +48,6 @@ Index of Providers
* :c:data:`ao_l_max` * :c:data:`ao_l_max`
* :c:data:`ao_md5` * :c:data:`ao_md5`
* :c:data:`ao_nucl` * :c:data:`ao_nucl`
* :c:data:`ao_nucl_elec_integrals`
* :c:data:`ao_nucl_elec_integrals_per_atom`
* :c:data:`ao_num` * :c:data:`ao_num`
* :c:data:`ao_one_e_integrals` * :c:data:`ao_one_e_integrals`
* :c:data:`ao_one_e_integrals_diag` * :c:data:`ao_one_e_integrals_diag`
@ -82,6 +76,12 @@ Index of Providers
* :c:data:`ao_spread_x` * :c:data:`ao_spread_x`
* :c:data:`ao_spread_y` * :c:data:`ao_spread_y`
* :c:data:`ao_spread_z` * :c:data:`ao_spread_z`
* :c:data:`ao_two_e_integral_alpha`
* :c:data:`ao_two_e_integral_beta`
* :c:data:`ao_two_e_integral_erf_schwartz`
* :c:data:`ao_two_e_integral_schwartz`
* :c:data:`ao_two_e_integrals_erf_in_map`
* :c:data:`ao_two_e_integrals_in_map`
* :c:data:`aos_dsr_vc_alpha_pbe_w` * :c:data:`aos_dsr_vc_alpha_pbe_w`
* :c:data:`aos_dsr_vc_beta_pbe_w` * :c:data:`aos_dsr_vc_beta_pbe_w`
* :c:data:`aos_dsr_vx_alpha_pbe_w` * :c:data:`aos_dsr_vx_alpha_pbe_w`
@ -113,7 +113,6 @@ Index of Providers
* :c:data:`aos_vx_beta_lda_w` * :c:data:`aos_vx_beta_lda_w`
* :c:data:`aos_vx_beta_pbe_w` * :c:data:`aos_vx_beta_pbe_w`
* :c:data:`barycentric_electronic_energy` * :c:data:`barycentric_electronic_energy`
* :c:data:`bi_elec_ref_bitmask_energy`
* :c:data:`big_array_coulomb_integrals` * :c:data:`big_array_coulomb_integrals`
* :c:data:`big_array_exchange_integrals` * :c:data:`big_array_exchange_integrals`
* :c:data:`binom` * :c:data:`binom`
@ -165,8 +164,6 @@ Index of Providers
* :c:data:`dft_type` * :c:data:`dft_type`
* :c:data:`diag_algorithm` * :c:data:`diag_algorithm`
* :c:data:`diagonal_h_matrix_on_psi_det` * :c:data:`diagonal_h_matrix_on_psi_det`
* :c:data:`disk_access_ao_integrals_erf`
* :c:data:`disk_access_mo_integrals_erf`
* :c:data:`disk_access_nuclear_repulsion` * :c:data:`disk_access_nuclear_repulsion`
* :c:data:`disk_based_davidson` * :c:data:`disk_based_davidson`
* :c:data:`distributed_davidson` * :c:data:`distributed_davidson`
@ -244,8 +241,8 @@ Index of Providers
* :c:data:`generators_bitmask_restart` * :c:data:`generators_bitmask_restart`
* :c:data:`gga_sr_type_functionals` * :c:data:`gga_sr_type_functionals`
* :c:data:`gga_type_functionals` * :c:data:`gga_type_functionals`
* :c:data:`give_polynom_mult_center_mono_elec_erf` * :c:data:`give_polynomial_mult_center_one_e_erf`
* :c:data:`give_polynom_mult_center_mono_elec_erf_opt` * :c:data:`give_polynomial_mult_center_one_e_erf_opt`
* :c:data:`grad_aos_dsr_vc_alpha_pbe_w` * :c:data:`grad_aos_dsr_vc_alpha_pbe_w`
* :c:data:`grad_aos_dsr_vc_beta_pbe_w` * :c:data:`grad_aos_dsr_vc_beta_pbe_w`
* :c:data:`grad_aos_dsr_vx_alpha_pbe_w` * :c:data:`grad_aos_dsr_vx_alpha_pbe_w`
@ -275,11 +272,11 @@ Index of Providers
* :c:data:`i_x1_new` * :c:data:`i_x1_new`
* :c:data:`i_x1_pol_mult_a1` * :c:data:`i_x1_pol_mult_a1`
* :c:data:`i_x1_pol_mult_a2` * :c:data:`i_x1_pol_mult_a2`
* :c:data:`i_x1_pol_mult_mono_elec` * :c:data:`i_x1_pol_mult_one_e`
* :c:data:`i_x1_pol_mult_recurs` * :c:data:`i_x1_pol_mult_recurs`
* :c:data:`i_x2_new` * :c:data:`i_x2_new`
* :c:data:`i_x2_pol_mult` * :c:data:`i_x2_pol_mult`
* :c:data:`i_x2_pol_mult_mono_elec` * :c:data:`i_x2_pol_mult_one_e`
* :c:data:`idx_cas` * :c:data:`idx_cas`
* :c:data:`idx_non_cas` * :c:data:`idx_non_cas`
* :c:data:`inact_bitmask` * :c:data:`inact_bitmask`
@ -300,7 +297,6 @@ Index of Providers
* :c:data:`inv_selectors_coef_hf` * :c:data:`inv_selectors_coef_hf`
* :c:data:`inv_selectors_coef_hf_squared` * :c:data:`inv_selectors_coef_hf_squared`
* :c:data:`io_ao_integrals_e_n` * :c:data:`io_ao_integrals_e_n`
* :c:data:`io_ao_integrals_erf`
* :c:data:`io_ao_integrals_kinetic` * :c:data:`io_ao_integrals_kinetic`
* :c:data:`io_ao_integrals_overlap` * :c:data:`io_ao_integrals_overlap`
* :c:data:`io_ao_integrals_pseudo` * :c:data:`io_ao_integrals_pseudo`
@ -308,7 +304,6 @@ Index of Providers
* :c:data:`io_ao_two_e_integrals` * :c:data:`io_ao_two_e_integrals`
* :c:data:`io_ao_two_e_integrals_erf` * :c:data:`io_ao_two_e_integrals_erf`
* :c:data:`io_mo_integrals_e_n` * :c:data:`io_mo_integrals_e_n`
* :c:data:`io_mo_integrals_erf`
* :c:data:`io_mo_integrals_kinetic` * :c:data:`io_mo_integrals_kinetic`
* :c:data:`io_mo_integrals_pseudo` * :c:data:`io_mo_integrals_pseudo`
* :c:data:`io_mo_one_e_integrals` * :c:data:`io_mo_one_e_integrals`
@ -316,7 +311,6 @@ Index of Providers
* :c:data:`io_mo_two_e_integrals_erf` * :c:data:`io_mo_two_e_integrals_erf`
* :c:data:`iradix_sort` * :c:data:`iradix_sort`
* :c:data:`iradix_sort_big` * :c:data:`iradix_sort_big`
* :c:data:`kinetic_ref_bitmask_energy`
* :c:data:`ks_energy` * :c:data:`ks_energy`
* :c:data:`l_to_charater` * :c:data:`l_to_charater`
* :c:data:`level_shift` * :c:data:`level_shift`
@ -336,17 +330,6 @@ Index of Providers
* :c:data:`max_degree_exc` * :c:data:`max_degree_exc`
* :c:data:`max_dim_diis` * :c:data:`max_dim_diis`
* :c:data:`max_exc_pert` * :c:data:`max_exc_pert`
* :c:data:`mo_bielec_integral_jj`
* :c:data:`mo_bielec_integral_jj_anti`
* :c:data:`mo_bielec_integral_jj_anti_from_ao`
* :c:data:`mo_bielec_integral_jj_exchange`
* :c:data:`mo_bielec_integral_jj_exchange_from_ao`
* :c:data:`mo_bielec_integral_jj_from_ao`
* :c:data:`mo_bielec_integral_vv_anti_from_ao`
* :c:data:`mo_bielec_integral_vv_exchange_from_ao`
* :c:data:`mo_bielec_integral_vv_from_ao`
* :c:data:`mo_bielec_integrals_erf_in_map`
* :c:data:`mo_bielec_integrals_in_map`
* :c:data:`mo_class` * :c:data:`mo_class`
* :c:data:`mo_coef` * :c:data:`mo_coef`
* :c:data:`mo_coef_begin_iteration` * :c:data:`mo_coef_begin_iteration`
@ -367,14 +350,14 @@ Index of Providers
* :c:data:`mo_integrals_erf_cache_min` * :c:data:`mo_integrals_erf_cache_min`
* :c:data:`mo_integrals_erf_map` * :c:data:`mo_integrals_erf_map`
* :c:data:`mo_integrals_map` * :c:data:`mo_integrals_map`
* :c:data:`mo_integrals_n_e`
* :c:data:`mo_integrals_n_e_per_atom`
* :c:data:`mo_integrals_threshold` * :c:data:`mo_integrals_threshold`
* :c:data:`mo_kinetic_integrals` * :c:data:`mo_kinetic_integrals`
* :c:data:`mo_label` * :c:data:`mo_label`
* :c:data:`mo_mono_elec_integrals`
* :c:data:`mo_nucl_elec_integrals`
* :c:data:`mo_nucl_elec_integrals_per_atom`
* :c:data:`mo_num` * :c:data:`mo_num`
* :c:data:`mo_occ` * :c:data:`mo_occ`
* :c:data:`mo_one_e_integrals`
* :c:data:`mo_overlap` * :c:data:`mo_overlap`
* :c:data:`mo_pseudo_integrals` * :c:data:`mo_pseudo_integrals`
* :c:data:`mo_spread_x` * :c:data:`mo_spread_x`
@ -386,7 +369,17 @@ Index of Providers
* :c:data:`mo_two_e_int_erf_jj_exchange` * :c:data:`mo_two_e_int_erf_jj_exchange`
* :c:data:`mo_two_e_int_erf_jj_exchange_from_ao` * :c:data:`mo_two_e_int_erf_jj_exchange_from_ao`
* :c:data:`mo_two_e_int_erf_jj_from_ao` * :c:data:`mo_two_e_int_erf_jj_from_ao`
* :c:data:`mono_elec_ref_bitmask_energy` * :c:data:`mo_two_e_integral_jj_from_ao`
* :c:data:`mo_two_e_integrals_erf_in_map`
* :c:data:`mo_two_e_integrals_in_map`
* :c:data:`mo_two_e_integrals_jj`
* :c:data:`mo_two_e_integrals_jj_anti`
* :c:data:`mo_two_e_integrals_jj_anti_from_ao`
* :c:data:`mo_two_e_integrals_jj_exchange`
* :c:data:`mo_two_e_integrals_jj_exchange_from_ao`
* :c:data:`mo_two_e_integrals_vv_anti_from_ao`
* :c:data:`mo_two_e_integrals_vv_exchange_from_ao`
* :c:data:`mo_two_e_integrals_vv_from_ao`
* :c:data:`mos_grad_in_r_array` * :c:data:`mos_grad_in_r_array`
* :c:data:`mos_in_r_array` * :c:data:`mos_in_r_array`
* :c:data:`mos_in_r_array_transp` * :c:data:`mos_in_r_array_transp`
@ -456,7 +449,6 @@ Index of Providers
* :c:data:`nucl_dist_vec_x` * :c:data:`nucl_dist_vec_x`
* :c:data:`nucl_dist_vec_y` * :c:data:`nucl_dist_vec_y`
* :c:data:`nucl_dist_vec_z` * :c:data:`nucl_dist_vec_z`
* :c:data:`nucl_elec_ref_bitmask_energy`
* :c:data:`nucl_label` * :c:data:`nucl_label`
* :c:data:`nucl_list_shell_aos` * :c:data:`nucl_list_shell_aos`
* :c:data:`nucl_n_aos` * :c:data:`nucl_n_aos`
@ -584,8 +576,8 @@ Index of Providers
* :c:data:`psi_dft_energy_kinetic` * :c:data:`psi_dft_energy_kinetic`
* :c:data:`psi_dft_energy_nuclear_elec` * :c:data:`psi_dft_energy_nuclear_elec`
* :c:data:`psi_energy` * :c:data:`psi_energy`
* :c:data:`psi_energy_bielec`
* :c:data:`psi_energy_h_core` * :c:data:`psi_energy_h_core`
* :c:data:`psi_energy_two_e`
* :c:data:`psi_energy_with_nucl_rep` * :c:data:`psi_energy_with_nucl_rep`
* :c:data:`psi_non_cas` * :c:data:`psi_non_cas`
* :c:data:`psi_non_cas_coef` * :c:data:`psi_non_cas_coef`
@ -619,7 +611,6 @@ Index of Providers
* :c:data:`qp_max_mem` * :c:data:`qp_max_mem`
* :c:data:`qp_run_address` * :c:data:`qp_run_address`
* :c:data:`read_ao_integrals_e_n` * :c:data:`read_ao_integrals_e_n`
* :c:data:`read_ao_integrals_erf`
* :c:data:`read_ao_integrals_kinetic` * :c:data:`read_ao_integrals_kinetic`
* :c:data:`read_ao_integrals_overlap` * :c:data:`read_ao_integrals_overlap`
* :c:data:`read_ao_integrals_pseudo` * :c:data:`read_ao_integrals_pseudo`
@ -627,7 +618,6 @@ Index of Providers
* :c:data:`read_ao_two_e_integrals` * :c:data:`read_ao_two_e_integrals`
* :c:data:`read_ao_two_e_integrals_erf` * :c:data:`read_ao_two_e_integrals_erf`
* :c:data:`read_mo_integrals_e_n` * :c:data:`read_mo_integrals_e_n`
* :c:data:`read_mo_integrals_erf`
* :c:data:`read_mo_integrals_kinetic` * :c:data:`read_mo_integrals_kinetic`
* :c:data:`read_mo_integrals_pseudo` * :c:data:`read_mo_integrals_pseudo`
* :c:data:`read_mo_one_e_integrals` * :c:data:`read_mo_one_e_integrals`
@ -641,7 +631,11 @@ Index of Providers
* :c:data:`rec_i8_quicksort` * :c:data:`rec_i8_quicksort`
* :c:data:`rec_i_quicksort` * :c:data:`rec_i_quicksort`
* :c:data:`ref_bitmask` * :c:data:`ref_bitmask`
* :c:data:`ref_bitmask_e_n_energy`
* :c:data:`ref_bitmask_energy` * :c:data:`ref_bitmask_energy`
* :c:data:`ref_bitmask_kinetic_energy`
* :c:data:`ref_bitmask_one_e_energy`
* :c:data:`ref_bitmask_two_e_energy`
* :c:data:`ref_closed_shell_bitmask` * :c:data:`ref_closed_shell_bitmask`
* :c:data:`reunion_of_bitmask` * :c:data:`reunion_of_bitmask`
* :c:data:`reunion_of_cas_inact_bitmask` * :c:data:`reunion_of_cas_inact_bitmask`
@ -707,7 +701,6 @@ Index of Providers
* :c:data:`weights_angular_integration_lebedev` * :c:data:`weights_angular_integration_lebedev`
* :c:data:`weights_angular_points` * :c:data:`weights_angular_points`
* :c:data:`write_ao_integrals_e_n` * :c:data:`write_ao_integrals_e_n`
* :c:data:`write_ao_integrals_erf`
* :c:data:`write_ao_integrals_kinetic` * :c:data:`write_ao_integrals_kinetic`
* :c:data:`write_ao_integrals_overlap` * :c:data:`write_ao_integrals_overlap`
* :c:data:`write_ao_integrals_pseudo` * :c:data:`write_ao_integrals_pseudo`
@ -715,7 +708,6 @@ Index of Providers
* :c:data:`write_ao_two_e_integrals` * :c:data:`write_ao_two_e_integrals`
* :c:data:`write_ao_two_e_integrals_erf` * :c:data:`write_ao_two_e_integrals_erf`
* :c:data:`write_mo_integrals_e_n` * :c:data:`write_mo_integrals_e_n`
* :c:data:`write_mo_integrals_erf`
* :c:data:`write_mo_integrals_kinetic` * :c:data:`write_mo_integrals_kinetic`
* :c:data:`write_mo_integrals_pseudo` * :c:data:`write_mo_integrals_pseudo`
* :c:data:`write_mo_one_e_integrals` * :c:data:`write_mo_one_e_integrals`
@ -738,9 +730,9 @@ Index of Subroutines/Functions
* :c:func:`a_coef` * :c:func:`a_coef`
* :c:func:`a_operator` * :c:func:`a_operator`
* :c:func:`a_operator_bielec` * :c:func:`a_operator_two_e`
* :c:func:`ac_operator` * :c:func:`ac_operator`
* :c:func:`ac_operator_bielec` * :c:func:`ac_operator_two_e`
* :c:func:`add_integrals_to_map` * :c:func:`add_integrals_to_map`
* :c:func:`add_integrals_to_map_erf` * :c:func:`add_integrals_to_map_erf`
* :c:func:`add_integrals_to_map_no_exit_34` * :c:func:`add_integrals_to_map_no_exit_34`
@ -749,22 +741,22 @@ Index of Subroutines/Functions
* :c:func:`add_poly_multiply` * :c:func:`add_poly_multiply`
* :c:func:`add_task_to_taskserver` * :c:func:`add_task_to_taskserver`
* :c:func:`add_to_selection_buffer` * :c:func:`add_to_selection_buffer`
* :c:func:`ao_bielec_integral`
* :c:func:`ao_bielec_integral_erf`
* :c:func:`ao_bielec_integral_schwartz_accel`
* :c:func:`ao_bielec_integral_schwartz_accel_erf`
* :c:func:`ao_bielec_integrals_erf_in_map_collector`
* :c:func:`ao_bielec_integrals_erf_in_map_slave`
* :c:func:`ao_bielec_integrals_erf_in_map_slave_inproc`
* :c:func:`ao_bielec_integrals_erf_in_map_slave_tcp`
* :c:func:`ao_bielec_integrals_in_map_collector`
* :c:func:`ao_bielec_integrals_in_map_slave`
* :c:func:`ao_bielec_integrals_in_map_slave_inproc`
* :c:func:`ao_bielec_integrals_in_map_slave_tcp`
* :c:func:`ao_l4` * :c:func:`ao_l4`
* :c:func:`ao_ortho_cano_to_ao` * :c:func:`ao_ortho_cano_to_ao`
* :c:func:`ao_power_index` * :c:func:`ao_power_index`
* :c:func:`ao_to_mo` * :c:func:`ao_to_mo`
* :c:func:`ao_two_e_integral`
* :c:func:`ao_two_e_integral_erf`
* :c:func:`ao_two_e_integral_schwartz_accel`
* :c:func:`ao_two_e_integral_schwartz_accel_erf`
* :c:func:`ao_two_e_integrals_erf_in_map_collector`
* :c:func:`ao_two_e_integrals_erf_in_map_slave`
* :c:func:`ao_two_e_integrals_erf_in_map_slave_inproc`
* :c:func:`ao_two_e_integrals_erf_in_map_slave_tcp`
* :c:func:`ao_two_e_integrals_in_map_collector`
* :c:func:`ao_two_e_integrals_in_map_slave`
* :c:func:`ao_two_e_integrals_in_map_slave_inproc`
* :c:func:`ao_two_e_integrals_in_map_slave_tcp`
* :c:func:`ao_value` * :c:func:`ao_value`
* :c:func:`apply_excitation` * :c:func:`apply_excitation`
* :c:func:`apply_hole` * :c:func:`apply_hole`
@ -776,8 +768,6 @@ Index of Subroutines/Functions
* :c:func:`au0_h_au0` * :c:func:`au0_h_au0`
* :c:func:`b_coef` * :c:func:`b_coef`
* :c:func:`berf` * :c:func:`berf`
* :c:func:`bielec_integrals_index`
* :c:func:`bielec_integrals_index_reverse`
* :c:func:`binom_func` * :c:func:`binom_func`
* :c:func:`bitstring_to_hexa` * :c:func:`bitstring_to_hexa`
* :c:func:`bitstring_to_list` * :c:func:`bitstring_to_list`
@ -799,10 +789,10 @@ Index of Subroutines/Functions
* :c:func:`clear_bit_to_integer` * :c:func:`clear_bit_to_integer`
* :c:func:`clear_mo_erf_map` * :c:func:`clear_mo_erf_map`
* :c:func:`clear_mo_map` * :c:func:`clear_mo_map`
* :c:func:`compute_ao_bielec_integrals`
* :c:func:`compute_ao_bielec_integrals_erf`
* :c:func:`compute_ao_integrals_erf_jl` * :c:func:`compute_ao_integrals_erf_jl`
* :c:func:`compute_ao_integrals_jl` * :c:func:`compute_ao_integrals_jl`
* :c:func:`compute_ao_two_e_integrals`
* :c:func:`compute_ao_two_e_integrals_erf`
* :c:func:`connect_to_taskserver` * :c:func:`connect_to_taskserver`
* :c:func:`connected_to_ref` * :c:func:`connected_to_ref`
* :c:func:`connected_to_ref_by_mono` * :c:func:`connected_to_ref_by_mono`
@ -845,7 +835,7 @@ Index of Subroutines/Functions
* :c:func:`diag_h_mat_elem` * :c:func:`diag_h_mat_elem`
* :c:func:`diag_h_mat_elem_au0_h_au0` * :c:func:`diag_h_mat_elem_au0_h_au0`
* :c:func:`diag_h_mat_elem_fock` * :c:func:`diag_h_mat_elem_fock`
* :c:func:`diag_h_mat_elem_monoelec` * :c:func:`diag_h_mat_elem_one_e`
* :c:func:`diag_s_mat_elem` * :c:func:`diag_s_mat_elem`
* :c:func:`diag_wee_mat_elem` * :c:func:`diag_wee_mat_elem`
* :c:func:`diagonalize_ci` * :c:func:`diagonalize_ci`
@ -929,14 +919,14 @@ Index of Subroutines/Functions
* :c:func:`get_all_spin_singles_and_doubles_4` * :c:func:`get_all_spin_singles_and_doubles_4`
* :c:func:`get_all_spin_singles_and_doubles_n_int` * :c:func:`get_all_spin_singles_and_doubles_n_int`
* :c:func:`get_all_spin_singles_n_int` * :c:func:`get_all_spin_singles_n_int`
* :c:func:`get_ao_bielec_integral`
* :c:func:`get_ao_bielec_integral_erf`
* :c:func:`get_ao_bielec_integrals`
* :c:func:`get_ao_bielec_integrals_erf`
* :c:func:`get_ao_bielec_integrals_erf_non_zero`
* :c:func:`get_ao_bielec_integrals_non_zero`
* :c:func:`get_ao_erf_map_size` * :c:func:`get_ao_erf_map_size`
* :c:func:`get_ao_map_size` * :c:func:`get_ao_map_size`
* :c:func:`get_ao_two_e_integral`
* :c:func:`get_ao_two_e_integral_erf`
* :c:func:`get_ao_two_e_integrals`
* :c:func:`get_ao_two_e_integrals_erf`
* :c:func:`get_ao_two_e_integrals_erf_non_zero`
* :c:func:`get_ao_two_e_integrals_non_zero`
* :c:func:`get_d0` * :c:func:`get_d0`
* :c:func:`get_d1` * :c:func:`get_d1`
* :c:func:`get_d2` * :c:func:`get_d2`
@ -959,20 +949,19 @@ Index of Subroutines/Functions
* :c:func:`get_m1` * :c:func:`get_m1`
* :c:func:`get_m2` * :c:func:`get_m2`
* :c:func:`get_mask_phase` * :c:func:`get_mask_phase`
* :c:func:`get_mo_bielec_integral`
* :c:func:`get_mo_bielec_integral_erf`
* :c:func:`get_mo_bielec_integrals`
* :c:func:`get_mo_bielec_integrals_coulomb_ii`
* :c:func:`get_mo_bielec_integrals_erf`
* :c:func:`get_mo_bielec_integrals_erf_coulomb_ii`
* :c:func:`get_mo_bielec_integrals_erf_exch_ii`
* :c:func:`get_mo_bielec_integrals_erf_i1j1`
* :c:func:`get_mo_bielec_integrals_erf_ij`
* :c:func:`get_mo_bielec_integrals_exch_ii`
* :c:func:`get_mo_bielec_integrals_i1j1`
* :c:func:`get_mo_bielec_integrals_ij`
* :c:func:`get_mo_erf_map_size` * :c:func:`get_mo_erf_map_size`
* :c:func:`get_mo_map_size` * :c:func:`get_mo_map_size`
* :c:func:`get_mo_two_e_integral_erf`
* :c:func:`get_mo_two_e_integrals`
* :c:func:`get_mo_two_e_integrals_coulomb_ii`
* :c:func:`get_mo_two_e_integrals_erf`
* :c:func:`get_mo_two_e_integrals_erf_coulomb_ii`
* :c:func:`get_mo_two_e_integrals_erf_exch_ii`
* :c:func:`get_mo_two_e_integrals_erf_i1j1`
* :c:func:`get_mo_two_e_integrals_erf_ij`
* :c:func:`get_mo_two_e_integrals_exch_ii`
* :c:func:`get_mo_two_e_integrals_i1j1`
* :c:func:`get_mo_two_e_integrals_ij`
* :c:func:`get_mono_excitation` * :c:func:`get_mono_excitation`
* :c:func:`get_mono_excitation_from_fock` * :c:func:`get_mono_excitation_from_fock`
* :c:func:`get_mono_excitation_spin` * :c:func:`get_mono_excitation_spin`
@ -983,6 +972,7 @@ Index of Subroutines/Functions
* :c:func:`get_s2` * :c:func:`get_s2`
* :c:func:`get_task_from_taskserver` * :c:func:`get_task_from_taskserver`
* :c:func:`get_tasks_from_taskserver` * :c:func:`get_tasks_from_taskserver`
* :c:func:`get_two_e_integral`
* :c:func:`get_uj_s2_ui` * :c:func:`get_uj_s2_ui`
* :c:func:`getmobiles` * :c:func:`getmobiles`
* :c:func:`getunitandopen` * :c:func:`getunitandopen`
@ -997,8 +987,8 @@ Index of Subroutines/Functions
* :c:func:`give_explicit_poly_and_gaussian` * :c:func:`give_explicit_poly_and_gaussian`
* :c:func:`give_explicit_poly_and_gaussian_double` * :c:func:`give_explicit_poly_and_gaussian_double`
* :c:func:`give_explicit_poly_and_gaussian_x` * :c:func:`give_explicit_poly_and_gaussian_x`
* :c:func:`give_polynom_mult_center_mono_elec`
* :c:func:`give_polynom_mult_center_x` * :c:func:`give_polynom_mult_center_x`
* :c:func:`give_polynomial_mult_center_one_e`
* :c:func:`gpw` * :c:func:`gpw`
* :c:func:`grad_rho_ab_to_grad_rho_oc` * :c:func:`grad_rho_ab_to_grad_rho_oc`
* :c:func:`gser` * :c:func:`gser`
@ -1012,13 +1002,6 @@ Index of Subroutines/Functions
* :c:func:`h_apply_cisd_diexcorg` * :c:func:`h_apply_cisd_diexcorg`
* :c:func:`h_apply_cisd_diexcp` * :c:func:`h_apply_cisd_diexcp`
* :c:func:`h_apply_cisd_monoexc` * :c:func:`h_apply_cisd_monoexc`
* :c:func:`h_s2_u_0_bielec_nstates_openmp`
* :c:func:`h_s2_u_0_bielec_nstates_openmp_work`
* :c:func:`h_s2_u_0_bielec_nstates_openmp_work_1`
* :c:func:`h_s2_u_0_bielec_nstates_openmp_work_2`
* :c:func:`h_s2_u_0_bielec_nstates_openmp_work_3`
* :c:func:`h_s2_u_0_bielec_nstates_openmp_work_4`
* :c:func:`h_s2_u_0_bielec_nstates_openmp_work_n_int`
* :c:func:`h_s2_u_0_nstates_openmp` * :c:func:`h_s2_u_0_nstates_openmp`
* :c:func:`h_s2_u_0_nstates_openmp_work` * :c:func:`h_s2_u_0_nstates_openmp_work`
* :c:func:`h_s2_u_0_nstates_openmp_work_1` * :c:func:`h_s2_u_0_nstates_openmp_work_1`
@ -1027,6 +1010,13 @@ Index of Subroutines/Functions
* :c:func:`h_s2_u_0_nstates_openmp_work_4` * :c:func:`h_s2_u_0_nstates_openmp_work_4`
* :c:func:`h_s2_u_0_nstates_openmp_work_n_int` * :c:func:`h_s2_u_0_nstates_openmp_work_n_int`
* :c:func:`h_s2_u_0_nstates_zmq` * :c:func:`h_s2_u_0_nstates_zmq`
* :c:func:`h_s2_u_0_two_e_nstates_openmp`
* :c:func:`h_s2_u_0_two_e_nstates_openmp_work`
* :c:func:`h_s2_u_0_two_e_nstates_openmp_work_1`
* :c:func:`h_s2_u_0_two_e_nstates_openmp_work_2`
* :c:func:`h_s2_u_0_two_e_nstates_openmp_work_3`
* :c:func:`h_s2_u_0_two_e_nstates_openmp_work_4`
* :c:func:`h_s2_u_0_two_e_nstates_openmp_work_n_int`
* :c:func:`hcore_guess` * :c:func:`hcore_guess`
* :c:func:`heap_dsort` * :c:func:`heap_dsort`
* :c:func:`heap_dsort_big` * :c:func:`heap_dsort_big`
@ -1047,13 +1037,13 @@ Index of Subroutines/Functions
* :c:func:`i8set_order_big` * :c:func:`i8set_order_big`
* :c:func:`i8sort` * :c:func:`i8sort`
* :c:func:`i_h_j` * :c:func:`i_h_j`
* :c:func:`i_h_j_bielec`
* :c:func:`i_h_j_double_alpha_beta` * :c:func:`i_h_j_double_alpha_beta`
* :c:func:`i_h_j_double_spin` * :c:func:`i_h_j_double_spin`
* :c:func:`i_h_j_mono_spin` * :c:func:`i_h_j_mono_spin`
* :c:func:`i_h_j_mono_spin_monoelec` * :c:func:`i_h_j_mono_spin_one_e`
* :c:func:`i_h_j_monoelec` * :c:func:`i_h_j_one_e`
* :c:func:`i_h_j_s2` * :c:func:`i_h_j_s2`
* :c:func:`i_h_j_two_e`
* :c:func:`i_h_j_verbose` * :c:func:`i_h_j_verbose`
* :c:func:`i_h_psi` * :c:func:`i_h_psi`
* :c:func:`i_h_psi_minilist` * :c:func:`i_h_psi_minilist`
@ -1116,11 +1106,11 @@ Index of Subroutines/Functions
* :c:func:`mo_as_eigvectors_of_mo_matrix` * :c:func:`mo_as_eigvectors_of_mo_matrix`
* :c:func:`mo_as_svd_vectors_of_mo_matrix` * :c:func:`mo_as_svd_vectors_of_mo_matrix`
* :c:func:`mo_as_svd_vectors_of_mo_matrix_eig` * :c:func:`mo_as_svd_vectors_of_mo_matrix_eig`
* :c:func:`mo_bielec_integral`
* :c:func:`mo_bielec_integral_erf`
* :c:func:`mo_bielec_integrals_erf_index`
* :c:func:`mo_bielec_integrals_index`
* :c:func:`mo_to_ao` * :c:func:`mo_to_ao`
* :c:func:`mo_two_e_integral`
* :c:func:`mo_two_e_integral_erf`
* :c:func:`mo_two_e_integrals_erf_index`
* :c:func:`mo_two_e_integrals_index`
* :c:func:`modify_bitmasks_for_hole` * :c:func:`modify_bitmasks_for_hole`
* :c:func:`modify_bitmasks_for_hole_in_out` * :c:func:`modify_bitmasks_for_hole_in_out`
* :c:func:`modify_bitmasks_for_particl` * :c:func:`modify_bitmasks_for_particl`
@ -1243,10 +1233,10 @@ Index of Subroutines/Functions
* :c:func:`s2_u_0` * :c:func:`s2_u_0`
* :c:func:`s2_u_0_nstates` * :c:func:`s2_u_0_nstates`
* :c:func:`sabpartial` * :c:func:`sabpartial`
* :c:func:`save_erf_bi_elec_integrals_ao` * :c:func:`save_erf_two_e_integrals_ao`
* :c:func:`save_erf_bi_elec_integrals_mo` * :c:func:`save_erf_two_e_integrals_mo`
* :c:func:`save_erf_bielec_ints_ao_into_ints_ao` * :c:func:`save_erf_two_e_ints_ao_into_ints_ao`
* :c:func:`save_erf_bielec_ints_mo_into_ints_mo` * :c:func:`save_erf_two_e_ints_mo_into_ints_mo`
* :c:func:`save_iterations` * :c:func:`save_iterations`
* :c:func:`save_mos` * :c:func:`save_mos`
* :c:func:`save_mos_truncated` * :c:func:`save_mos_truncated`
@ -1295,8 +1285,10 @@ Index of Subroutines/Functions
* :c:func:`tasks_done_to_taskserver` * :c:func:`tasks_done_to_taskserver`
* :c:func:`testteethbuilding` * :c:func:`testteethbuilding`
* :c:func:`total_memory` * :c:func:`total_memory`
* :c:func:`two_e_integrals_index`
* :c:func:`two_e_integrals_index_reverse`
* :c:func:`u_0_h_u_0` * :c:func:`u_0_h_u_0`
* :c:func:`u_0_h_u_0_bielec` * :c:func:`u_0_h_u_0_two_e`
* :c:func:`u_0_s2_u_0` * :c:func:`u_0_s2_u_0`
* :c:func:`u_dot_u` * :c:func:`u_dot_u`
* :c:func:`u_dot_v` * :c:func:`u_dot_v`

View File

@ -62,7 +62,11 @@ def main(arguments):
sys.exit(1) sys.exit(1)
# Now search in all the files # Now search in all the files
print "Replacing..." if arguments["--rename"]:
print "Replacing..."
else:
print "Searching..."
name = re.compile(r"\b"+arguments["<name>"]+r"\b", re.IGNORECASE) name = re.compile(r"\b"+arguments["<name>"]+r"\b", re.IGNORECASE)
for mod in all_modules: for mod in all_modules:

View File

@ -9,7 +9,7 @@
IF (read_ao_one_e_integrals) THEN IF (read_ao_one_e_integrals) THEN
call ezfio_get_ao_one_e_ints_ao_one_e_integrals(ao_one_e_integrals) call ezfio_get_ao_one_e_ints_ao_one_e_integrals(ao_one_e_integrals)
ELSE ELSE
ao_one_e_integrals = ao_nucl_elec_integrals + ao_kinetic_integrals ao_one_e_integrals = ao_integrals_n_e + ao_kinetic_integrals
IF (DO_PSEUDO) THEN IF (DO_PSEUDO) THEN
ao_one_e_integrals += ao_pseudo_integrals ao_one_e_integrals += ao_pseudo_integrals

View File

@ -103,9 +103,9 @@ double precision function NAI_pol_mult_erf(A_center,B_center,power_A,power_B,alp
return return
endif endif
! call give_polynom_mult_center_mono_elec_erf(A_center,B_center,alpha,beta,power_A,power_B,C_center,n_pt_in,d,n_pt_out,mu_in) ! call give_polynomial_mult_center_one_e_erf(A_center,B_center,alpha,beta,power_A,power_B,C_center,n_pt_in,d,n_pt_out,mu_in)
p_new = p_new * p_new p_new = p_new * p_new
call give_polynom_mult_center_mono_elec_erf_opt(A_center,B_center,alpha,beta,power_A,power_B,C_center,n_pt_in,d,n_pt_out,mu_in,p,p_inv,p_inv_2,p_new,P_center) call give_polynomial_mult_center_one_e_erf_opt(A_center,B_center,alpha,beta,power_A,power_B,C_center,n_pt_in,d,n_pt_out,mu_in,p,p_inv,p_inv_2,p_new,P_center)
if(n_pt_out<0)then if(n_pt_out<0)then
@ -123,7 +123,7 @@ double precision function NAI_pol_mult_erf(A_center,B_center,power_A,power_B,alp
end end
subroutine give_polynom_mult_center_mono_elec_erf_opt(A_center,B_center,alpha,beta,& subroutine give_polynomial_mult_center_one_e_erf_opt(A_center,B_center,alpha,beta,&
power_A,power_B,C_center,n_pt_in,d,n_pt_out,mu_in,p,p_inv,p_inv_2,p_new,P_center) power_A,power_B,C_center,n_pt_in,d,n_pt_out,mu_in,p,p_inv,p_inv_2,p_new,P_center)
BEGIN_DOC BEGIN_DOC
! Returns the explicit polynomial in terms of the $t$ variable of the following polynomial: ! Returns the explicit polynomial in terms of the $t$ variable of the following polynomial:
@ -176,7 +176,7 @@ subroutine give_polynom_mult_center_mono_elec_erf_opt(A_center,B_center,alpha,be
n_pt3 = n_pt_in n_pt3 = n_pt_in
a_x = power_A(1) a_x = power_A(1)
b_x = power_B(1) b_x = power_B(1)
call I_x1_pol_mult_mono_elec(a_x,b_x,R1x,R1xp,R2x,d1,n_pt1,n_pt_in) call I_x1_pol_mult_one_e(a_x,b_x,R1x,R1xp,R2x,d1,n_pt1,n_pt_in)
if(n_pt1<0)then if(n_pt1<0)then
n_pt_out = -1 n_pt_out = -1
do i = 0,n_pt_in do i = 0,n_pt_in
@ -195,7 +195,7 @@ subroutine give_polynom_mult_center_mono_elec_erf_opt(A_center,B_center,alpha,be
!R1xp = (P_x - B_x) - (P_x - C_x) ( t * mu/sqrt(p+mu^2) )^2 !R1xp = (P_x - B_x) - (P_x - C_x) ( t * mu/sqrt(p+mu^2) )^2
a_y = power_A(2) a_y = power_A(2)
b_y = power_B(2) b_y = power_B(2)
call I_x1_pol_mult_mono_elec(a_y,b_y,R1x,R1xp,R2x,d2,n_pt2,n_pt_in) call I_x1_pol_mult_one_e(a_y,b_y,R1x,R1xp,R2x,d2,n_pt2,n_pt_in)
if(n_pt2<0)then if(n_pt2<0)then
n_pt_out = -1 n_pt_out = -1
do i = 0,n_pt_in do i = 0,n_pt_in
@ -216,7 +216,7 @@ subroutine give_polynom_mult_center_mono_elec_erf_opt(A_center,B_center,alpha,be
a_z = power_A(3) a_z = power_A(3)
b_z = power_B(3) b_z = power_B(3)
call I_x1_pol_mult_mono_elec(a_z,b_z,R1x,R1xp,R2x,d3,n_pt3,n_pt_in) call I_x1_pol_mult_one_e(a_z,b_z,R1x,R1xp,R2x,d3,n_pt3,n_pt_in)
if(n_pt3<0)then if(n_pt3<0)then
n_pt_out = -1 n_pt_out = -1
do i = 0,n_pt_in do i = 0,n_pt_in
@ -241,7 +241,7 @@ end
subroutine give_polynom_mult_center_mono_elec_erf(A_center,B_center,alpha,beta,& subroutine give_polynomial_mult_center_one_e_erf(A_center,B_center,alpha,beta,&
power_A,power_B,C_center,n_pt_in,d,n_pt_out,mu_in) power_A,power_B,C_center,n_pt_in,d,n_pt_out,mu_in)
BEGIN_DOC BEGIN_DOC
! Returns the explicit polynomial in terms of the $t$ variable of the following polynomial: ! Returns the explicit polynomial in terms of the $t$ variable of the following polynomial:
@ -302,7 +302,7 @@ subroutine give_polynom_mult_center_mono_elec_erf(A_center,B_center,alpha,beta,&
n_pt3 = n_pt_in n_pt3 = n_pt_in
a_x = power_A(1) a_x = power_A(1)
b_x = power_B(1) b_x = power_B(1)
call I_x1_pol_mult_mono_elec(a_x,b_x,R1x,R1xp,R2x,d1,n_pt1,n_pt_in) call I_x1_pol_mult_one_e(a_x,b_x,R1x,R1xp,R2x,d1,n_pt1,n_pt_in)
! print*,'passed the first I_x1' ! print*,'passed the first I_x1'
if(n_pt1<0)then if(n_pt1<0)then
n_pt_out = -1 n_pt_out = -1
@ -322,7 +322,7 @@ subroutine give_polynom_mult_center_mono_elec_erf(A_center,B_center,alpha,beta,&
!R1xp = (P_x - B_x) - (P_x - C_x) ( t * mu/sqrt(p+mu^2) )^2 !R1xp = (P_x - B_x) - (P_x - C_x) ( t * mu/sqrt(p+mu^2) )^2
a_y = power_A(2) a_y = power_A(2)
b_y = power_B(2) b_y = power_B(2)
call I_x1_pol_mult_mono_elec(a_y,b_y,R1x,R1xp,R2x,d2,n_pt2,n_pt_in) call I_x1_pol_mult_one_e(a_y,b_y,R1x,R1xp,R2x,d2,n_pt2,n_pt_in)
! print*,'passed the second I_x1' ! print*,'passed the second I_x1'
if(n_pt2<0)then if(n_pt2<0)then
n_pt_out = -1 n_pt_out = -1
@ -346,7 +346,7 @@ subroutine give_polynom_mult_center_mono_elec_erf(A_center,B_center,alpha,beta,&
! print*,'a_z = ',a_z ! print*,'a_z = ',a_z
! print*,'b_z = ',b_z ! print*,'b_z = ',b_z
call I_x1_pol_mult_mono_elec(a_z,b_z,R1x,R1xp,R2x,d3,n_pt3,n_pt_in) call I_x1_pol_mult_one_e(a_z,b_z,R1x,R1xp,R2x,d3,n_pt3,n_pt_in)
! print*,'passed the third I_x1' ! print*,'passed the third I_x1'
if(n_pt3<0)then if(n_pt3<0)then
n_pt_out = -1 n_pt_out = -1

View File

@ -1,4 +1,4 @@
BEGIN_PROVIDER [ double precision, ao_nucl_elec_integrals, (ao_num,ao_num)] BEGIN_PROVIDER [ double precision, ao_integrals_n_e, (ao_num,ao_num)]
BEGIN_DOC BEGIN_DOC
! Nucleus-electron interaction, in the |AO| basis set. ! Nucleus-electron interaction, in the |AO| basis set.
! !
@ -13,11 +13,11 @@ BEGIN_PROVIDER [ double precision, ao_nucl_elec_integrals, (ao_num,ao_num)]
double precision :: overlap_x,overlap_y,overlap_z,overlap,dx,NAI_pol_mult double precision :: overlap_x,overlap_y,overlap_z,overlap,dx,NAI_pol_mult
if (read_ao_integrals_e_n) then if (read_ao_integrals_e_n) then
call ezfio_get_ao_one_e_ints_ao_integrals_e_n(ao_nucl_elec_integrals) call ezfio_get_ao_one_e_ints_ao_integrals_e_n(ao_integrals_n_e)
print *, 'AO N-e integrals read from disk' print *, 'AO N-e integrals read from disk'
else else
ao_nucl_elec_integrals = 0.d0 ao_integrals_n_e = 0.d0
! _ ! _
! /| / |_) ! /| / |_)
@ -29,7 +29,7 @@ BEGIN_PROVIDER [ double precision, ao_nucl_elec_integrals, (ao_num,ao_num)]
!$OMP PRIVATE (i,j,k,l,m,alpha,beta,A_center,B_center,C_center,power_A,power_B,& !$OMP PRIVATE (i,j,k,l,m,alpha,beta,A_center,B_center,C_center,power_A,power_B,&
!$OMP num_A,num_B,Z,c,n_pt_in) & !$OMP num_A,num_B,Z,c,n_pt_in) &
!$OMP SHARED (ao_num,ao_prim_num,ao_expo_ordered_transp,ao_power,ao_nucl,nucl_coord,ao_coef_normalized_ordered_transp,& !$OMP SHARED (ao_num,ao_prim_num,ao_expo_ordered_transp,ao_power,ao_nucl,nucl_coord,ao_coef_normalized_ordered_transp,&
!$OMP n_pt_max_integrals,ao_nucl_elec_integrals,nucl_num,nucl_charge) !$OMP n_pt_max_integrals,ao_integrals_n_e,nucl_num,nucl_charge)
n_pt_in = n_pt_max_integrals n_pt_in = n_pt_max_integrals
@ -65,7 +65,7 @@ BEGIN_PROVIDER [ double precision, ao_nucl_elec_integrals, (ao_num,ao_num)]
power_A,power_B,alpha,beta,C_center,n_pt_in) power_A,power_B,alpha,beta,C_center,n_pt_in)
enddo enddo
ao_nucl_elec_integrals(i,j) = ao_nucl_elec_integrals(i,j) & ao_integrals_n_e(i,j) = ao_integrals_n_e(i,j) &
+ ao_coef_normalized_ordered_transp(l,j) & + ao_coef_normalized_ordered_transp(l,j) &
* ao_coef_normalized_ordered_transp(m,i) * c * ao_coef_normalized_ordered_transp(m,i) * c
enddo enddo
@ -77,13 +77,13 @@ BEGIN_PROVIDER [ double precision, ao_nucl_elec_integrals, (ao_num,ao_num)]
!$OMP END PARALLEL !$OMP END PARALLEL
endif endif
if (write_ao_integrals_e_n) then if (write_ao_integrals_e_n) then
call ezfio_set_ao_one_e_ints_ao_integrals_e_n(ao_nucl_elec_integrals) call ezfio_set_ao_one_e_ints_ao_integrals_e_n(ao_integrals_n_e)
print *, 'AO N-e integrals written to disk' print *, 'AO N-e integrals written to disk'
endif endif
END_PROVIDER END_PROVIDER
BEGIN_PROVIDER [ double precision, ao_nucl_elec_integrals_per_atom, (ao_num,ao_num,nucl_num)] BEGIN_PROVIDER [ double precision, ao_integrals_n_e_per_atom, (ao_num,ao_num,nucl_num)]
BEGIN_DOC BEGIN_DOC
! Nucleus-electron interaction in the |AO| basis set, per atom A. ! Nucleus-electron interaction in the |AO| basis set, per atom A.
! !
@ -97,14 +97,14 @@ BEGIN_PROVIDER [ double precision, ao_nucl_elec_integrals_per_atom, (ao_num,ao_n
integer :: i,j,k,l,n_pt_in,m integer :: i,j,k,l,n_pt_in,m
double precision :: overlap_x,overlap_y,overlap_z,overlap,dx,NAI_pol_mult double precision :: overlap_x,overlap_y,overlap_z,overlap,dx,NAI_pol_mult
ao_nucl_elec_integrals_per_atom = 0.d0 ao_integrals_n_e_per_atom = 0.d0
!$OMP PARALLEL & !$OMP PARALLEL &
!$OMP DEFAULT (NONE) & !$OMP DEFAULT (NONE) &
!$OMP PRIVATE (i,j,k,l,m,alpha,beta,A_center,B_center,power_A,power_B,& !$OMP PRIVATE (i,j,k,l,m,alpha,beta,A_center,B_center,power_A,power_B,&
!$OMP num_A,num_B,c,n_pt_in,C_center) & !$OMP num_A,num_B,c,n_pt_in,C_center) &
!$OMP SHARED (ao_num,ao_prim_num,ao_expo_ordered_transp,ao_power,ao_nucl,nucl_coord,ao_coef_normalized_ordered_transp,& !$OMP SHARED (ao_num,ao_prim_num,ao_expo_ordered_transp,ao_power,ao_nucl,nucl_coord,ao_coef_normalized_ordered_transp,&
!$OMP n_pt_max_integrals,ao_nucl_elec_integrals_per_atom,nucl_num) !$OMP n_pt_max_integrals,ao_integrals_n_e_per_atom,nucl_num)
n_pt_in = n_pt_max_integrals n_pt_in = n_pt_max_integrals
!$OMP DO SCHEDULE (dynamic) !$OMP DO SCHEDULE (dynamic)
@ -140,7 +140,7 @@ BEGIN_PROVIDER [ double precision, ao_nucl_elec_integrals_per_atom, (ao_num,ao_n
* ao_coef_normalized_ordered_transp(m,i) * ao_coef_normalized_ordered_transp(m,i)
enddo enddo
enddo enddo
ao_nucl_elec_integrals_per_atom(i,j,k) = -c ao_integrals_n_e_per_atom(i,j,k) = -c
enddo enddo
enddo enddo
enddo enddo
@ -214,7 +214,7 @@ double precision function NAI_pol_mult(A_center,B_center,power_A,power_B,alpha,b
return return
endif endif
call give_polynom_mult_center_mono_elec(A_center,B_center,alpha,beta,power_A,power_B,C_center,n_pt_in,d,n_pt_out) call give_polynomial_mult_center_one_e(A_center,B_center,alpha,beta,power_A,power_B,C_center,n_pt_in,d,n_pt_out)
if(n_pt_out<0)then if(n_pt_out<0)then
@ -234,7 +234,7 @@ double precision function NAI_pol_mult(A_center,B_center,power_A,power_B,alpha,b
end end
subroutine give_polynom_mult_center_mono_elec(A_center,B_center,alpha,beta,power_A,power_B,C_center,n_pt_in,d,n_pt_out) subroutine give_polynomial_mult_center_one_e(A_center,B_center,alpha,beta,power_A,power_B,C_center,n_pt_in,d,n_pt_out)
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! Returns the explicit polynomial in terms of the "t" variable of the following ! Returns the explicit polynomial in terms of the "t" variable of the following
@ -295,7 +295,7 @@ subroutine give_polynom_mult_center_mono_elec(A_center,B_center,alpha,beta,power
n_pt3 = n_pt_in n_pt3 = n_pt_in
a_x = power_A(1) a_x = power_A(1)
b_x = power_B(1) b_x = power_B(1)
call I_x1_pol_mult_mono_elec(a_x,b_x,R1x,R1xp,R2x,d1,n_pt1,n_pt_in) call I_x1_pol_mult_one_e(a_x,b_x,R1x,R1xp,R2x,d1,n_pt1,n_pt_in)
if(n_pt1<0)then if(n_pt1<0)then
n_pt_out = -1 n_pt_out = -1
@ -315,7 +315,7 @@ subroutine give_polynom_mult_center_mono_elec(A_center,B_center,alpha,beta,power
a_y = power_A(2) a_y = power_A(2)
b_y = power_B(2) b_y = power_B(2)
call I_x1_pol_mult_mono_elec(a_y,b_y,R1x,R1xp,R2x,d2,n_pt2,n_pt_in) call I_x1_pol_mult_one_e(a_y,b_y,R1x,R1xp,R2x,d2,n_pt2,n_pt_in)
if(n_pt2<0)then if(n_pt2<0)then
n_pt_out = -1 n_pt_out = -1
@ -337,7 +337,7 @@ subroutine give_polynom_mult_center_mono_elec(A_center,B_center,alpha,beta,power
a_z = power_A(3) a_z = power_A(3)
b_z = power_B(3) b_z = power_B(3)
call I_x1_pol_mult_mono_elec(a_z,b_z,R1x,R1xp,R2x,d3,n_pt3,n_pt_in) call I_x1_pol_mult_one_e(a_z,b_z,R1x,R1xp,R2x,d3,n_pt3,n_pt_in)
if(n_pt3<0)then if(n_pt3<0)then
n_pt_out = -1 n_pt_out = -1
@ -361,7 +361,7 @@ subroutine give_polynom_mult_center_mono_elec(A_center,B_center,alpha,beta,power
end end
recursive subroutine I_x1_pol_mult_mono_elec(a,c,R1x,R1xp,R2x,d,nd,n_pt_in) recursive subroutine I_x1_pol_mult_one_e(a,c,R1x,R1xp,R2x,d,nd,n_pt_in)
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! Recursive routine involved in the electron-nucleus potential ! Recursive routine involved in the electron-nucleus potential
@ -388,20 +388,20 @@ recursive subroutine I_x1_pol_mult_mono_elec(a,c,R1x,R1xp,R2x,d,nd,n_pt_in)
nd = -1 nd = -1
return return
else if ((a==0).and.(c.ne.0)) then else if ((a==0).and.(c.ne.0)) then
call I_x2_pol_mult_mono_elec(c,R1x,R1xp,R2x,d,nd,n_pt_in) call I_x2_pol_mult_one_e(c,R1x,R1xp,R2x,d,nd,n_pt_in)
else if (a==1) then else if (a==1) then
nx = nd nx = nd
do ix=0,n_pt_in do ix=0,n_pt_in
X(ix) = 0.d0 X(ix) = 0.d0
Y(ix) = 0.d0 Y(ix) = 0.d0
enddo enddo
call I_x2_pol_mult_mono_elec(c-1,R1x,R1xp,R2x,X,nx,n_pt_in) call I_x2_pol_mult_one_e(c-1,R1x,R1xp,R2x,X,nx,n_pt_in)
do ix=0,nx do ix=0,nx
X(ix) *= dble(c) X(ix) *= dble(c)
enddo enddo
call multiply_poly(X,nx,R2x,2,d,nd) call multiply_poly(X,nx,R2x,2,d,nd)
ny=0 ny=0
call I_x2_pol_mult_mono_elec(c,R1x,R1xp,R2x,Y,ny,n_pt_in) call I_x2_pol_mult_one_e(c,R1x,R1xp,R2x,Y,ny,n_pt_in)
call multiply_poly(Y,ny,R1x,2,d,nd) call multiply_poly(Y,ny,R1x,2,d,nd)
else else
do ix=0,n_pt_in do ix=0,n_pt_in
@ -409,7 +409,7 @@ recursive subroutine I_x1_pol_mult_mono_elec(a,c,R1x,R1xp,R2x,d,nd,n_pt_in)
Y(ix) = 0.d0 Y(ix) = 0.d0
enddo enddo
nx = 0 nx = 0
call I_x1_pol_mult_mono_elec(a-2,c,R1x,R1xp,R2x,X,nx,n_pt_in) call I_x1_pol_mult_one_e(a-2,c,R1x,R1xp,R2x,X,nx,n_pt_in)
do ix=0,nx do ix=0,nx
X(ix) *= dble(a-1) X(ix) *= dble(a-1)
enddo enddo
@ -419,18 +419,18 @@ recursive subroutine I_x1_pol_mult_mono_elec(a,c,R1x,R1xp,R2x,d,nd,n_pt_in)
do ix=0,n_pt_in do ix=0,n_pt_in
X(ix) = 0.d0 X(ix) = 0.d0
enddo enddo
call I_x1_pol_mult_mono_elec(a-1,c-1,R1x,R1xp,R2x,X,nx,n_pt_in) call I_x1_pol_mult_one_e(a-1,c-1,R1x,R1xp,R2x,X,nx,n_pt_in)
do ix=0,nx do ix=0,nx
X(ix) *= dble(c) X(ix) *= dble(c)
enddo enddo
call multiply_poly(X,nx,R2x,2,d,nd) call multiply_poly(X,nx,R2x,2,d,nd)
ny=0 ny=0
call I_x1_pol_mult_mono_elec(a-1,c,R1x,R1xp,R2x,Y,ny,n_pt_in) call I_x1_pol_mult_one_e(a-1,c,R1x,R1xp,R2x,Y,ny,n_pt_in)
call multiply_poly(Y,ny,R1x,2,d,nd) call multiply_poly(Y,ny,R1x,2,d,nd)
endif endif
end end
recursive subroutine I_x2_pol_mult_mono_elec(c,R1x,R1xp,R2x,d,nd,dim) recursive subroutine I_x2_pol_mult_one_e(c,R1x,R1xp,R2x,d,nd,dim)
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! Recursive routine involved in the electron-nucleus potential ! Recursive routine involved in the electron-nucleus potential
@ -459,7 +459,7 @@ recursive subroutine I_x2_pol_mult_mono_elec(c,R1x,R1xp,R2x,d,nd,dim)
Y(ix) = 0.d0 Y(ix) = 0.d0
enddo enddo
nx = 0 nx = 0
call I_x1_pol_mult_mono_elec(0,c-2,R1x,R1xp,R2x,X,nx,dim) call I_x1_pol_mult_one_e(0,c-2,R1x,R1xp,R2x,X,nx,dim)
do ix=0,nx do ix=0,nx
X(ix) *= dble(c-1) X(ix) *= dble(c-1)
enddo enddo
@ -469,7 +469,7 @@ recursive subroutine I_x2_pol_mult_mono_elec(c,R1x,R1xp,R2x,d,nd,dim)
Y(ix) = 0.d0 Y(ix) = 0.d0
enddo enddo
call I_x1_pol_mult_mono_elec(0,c-1,R1x,R1xp,R2x,Y,ny,dim) call I_x1_pol_mult_one_e(0,c-1,R1x,R1xp,R2x,Y,ny,dim)
if(ny.ge.0)then if(ny.ge.0)then
call multiply_poly(Y,ny,R1xp,2,d,nd) call multiply_poly(Y,ny,R1xp,2,d,nd)
endif endif

View File

@ -9,7 +9,7 @@ in :file:`utils/map_module.f90`.
The main parameter of this module is :option:`ao_two_e_erf_ints mu_erf` which is the range-separation parameter. The main parameter of this module is :option:`ao_two_e_erf_ints mu_erf` which is the range-separation parameter.
To fetch an |AO| integral, use the To fetch an |AO| integral, use the
`get_ao_bielec_integral_erf(i,j,k,l,ao_integrals_erf_map)` function. `get_ao_two_e_integral_erf(i,j,k,l,ao_integrals_erf_map)` function.
The conventions are: The conventions are:

View File

@ -1,27 +1,27 @@
subroutine ao_bielec_integrals_erf_in_map_slave_tcp(i) subroutine ao_two_e_integrals_erf_in_map_slave_tcp(i)
implicit none implicit none
integer, intent(in) :: i integer, intent(in) :: i
BEGIN_DOC BEGIN_DOC
! Computes a buffer of integrals. i is the ID of the current thread. ! Computes a buffer of integrals. i is the ID of the current thread.
END_DOC END_DOC
call ao_bielec_integrals_erf_in_map_slave(0,i) call ao_two_e_integrals_erf_in_map_slave(0,i)
end end
subroutine ao_bielec_integrals_erf_in_map_slave_inproc(i) subroutine ao_two_e_integrals_erf_in_map_slave_inproc(i)
implicit none implicit none
integer, intent(in) :: i integer, intent(in) :: i
BEGIN_DOC BEGIN_DOC
! Computes a buffer of integrals. i is the ID of the current thread. ! Computes a buffer of integrals. i is the ID of the current thread.
END_DOC END_DOC
call ao_bielec_integrals_erf_in_map_slave(1,i) call ao_two_e_integrals_erf_in_map_slave(1,i)
end end
subroutine ao_bielec_integrals_erf_in_map_slave(thread,iproc) subroutine ao_two_e_integrals_erf_in_map_slave(thread,iproc)
use map_module use map_module
use f77_zmq use f77_zmq
implicit none implicit none
@ -86,7 +86,7 @@ subroutine ao_bielec_integrals_erf_in_map_slave(thread,iproc)
end end
subroutine ao_bielec_integrals_erf_in_map_collector(zmq_socket_pull) subroutine ao_two_e_integrals_erf_in_map_collector(zmq_socket_pull)
use map_module use map_module
use f77_zmq use f77_zmq
implicit none implicit none

View File

@ -10,7 +10,7 @@ BEGIN_PROVIDER [ type(map_type), ao_integrals_erf_map ]
END_DOC END_DOC
integer(key_kind) :: key_max integer(key_kind) :: key_max
integer(map_size_kind) :: sze integer(map_size_kind) :: sze
call bielec_integrals_index(ao_num,ao_num,ao_num,ao_num,key_max) call two_e_integrals_index(ao_num,ao_num,ao_num,ao_num,key_max)
sze = key_max sze = key_max
call map_init(ao_integrals_erf_map,sze) call map_init(ao_integrals_erf_map,sze)
print*, 'AO map initialized : ', sze print*, 'AO map initialized : ', sze
@ -33,7 +33,7 @@ BEGIN_PROVIDER [ double precision, ao_integrals_erf_cache, (0:64*64*64*64) ]
BEGIN_DOC BEGIN_DOC
! Cache of |AO| integrals for fast access ! Cache of |AO| integrals for fast access
END_DOC END_DOC
PROVIDE ao_bielec_integrals_erf_in_map PROVIDE ao_two_e_integrals_erf_in_map
integer :: i,j,k,l,ii integer :: i,j,k,l,ii
integer(key_kind) :: idx integer(key_kind) :: idx
real(integral_kind) :: integral real(integral_kind) :: integral
@ -43,7 +43,7 @@ BEGIN_PROVIDER [ double precision, ao_integrals_erf_cache, (0:64*64*64*64) ]
do j=ao_integrals_erf_cache_min,ao_integrals_erf_cache_max do j=ao_integrals_erf_cache_min,ao_integrals_erf_cache_max
do i=ao_integrals_erf_cache_min,ao_integrals_erf_cache_max do i=ao_integrals_erf_cache_min,ao_integrals_erf_cache_max
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
call bielec_integrals_index(i,j,k,l,idx) call two_e_integrals_index(i,j,k,l,idx)
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
call map_get(ao_integrals_erf_map,idx,integral) call map_get(ao_integrals_erf_map,idx,integral)
ii = l-ao_integrals_erf_cache_min ii = l-ao_integrals_erf_cache_min
@ -74,7 +74,7 @@ subroutine insert_into_ao_integrals_erf_map(n_integrals,buffer_i, buffer_values)
call map_append(ao_integrals_erf_map, buffer_i, buffer_values, n_integrals) call map_append(ao_integrals_erf_map, buffer_i, buffer_values, n_integrals)
end end
double precision function get_ao_bielec_integral_erf(i,j,k,l,map) result(result) double precision function get_ao_two_e_integral_erf(i,j,k,l,map) result(result)
use map_module use map_module
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -85,11 +85,11 @@ double precision function get_ao_bielec_integral_erf(i,j,k,l,map) result(result)
type(map_type), intent(inout) :: map type(map_type), intent(inout) :: map
integer :: ii integer :: ii
real(integral_kind) :: tmp real(integral_kind) :: tmp
PROVIDE ao_bielec_integrals_erf_in_map ao_integrals_erf_cache ao_integrals_erf_cache_min PROVIDE ao_two_e_integrals_erf_in_map ao_integrals_erf_cache ao_integrals_erf_cache_min
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
if (ao_overlap_abs(i,k)*ao_overlap_abs(j,l) < ao_integrals_threshold ) then if (ao_overlap_abs(i,k)*ao_overlap_abs(j,l) < ao_integrals_threshold ) then
tmp = 0.d0 tmp = 0.d0
else if (ao_bielec_integral_erf_schwartz(i,k)*ao_bielec_integral_erf_schwartz(j,l) < ao_integrals_threshold) then else if (ao_two_e_integral_erf_schwartz(i,k)*ao_two_e_integral_erf_schwartz(j,l) < ao_integrals_threshold) then
tmp = 0.d0 tmp = 0.d0
else else
ii = l-ao_integrals_erf_cache_min ii = l-ao_integrals_erf_cache_min
@ -98,7 +98,7 @@ double precision function get_ao_bielec_integral_erf(i,j,k,l,map) result(result)
ii = ior(ii, i-ao_integrals_erf_cache_min) ii = ior(ii, i-ao_integrals_erf_cache_min)
if (iand(ii, -64) /= 0) then if (iand(ii, -64) /= 0) then
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
call bielec_integrals_index(i,j,k,l,idx) call two_e_integrals_index(i,j,k,l,idx)
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
call map_get(map,idx,tmp) call map_get(map,idx,tmp)
tmp = tmp tmp = tmp
@ -114,7 +114,7 @@ double precision function get_ao_bielec_integral_erf(i,j,k,l,map) result(result)
end end
subroutine get_ao_bielec_integrals_erf(j,k,l,sze,out_val) subroutine get_ao_two_e_integrals_erf(j,k,l,sze,out_val)
use map_module use map_module
BEGIN_DOC BEGIN_DOC
! Gets multiple |AO| two-electron integral from the |AO| map . ! Gets multiple |AO| two-electron integral from the |AO| map .
@ -127,7 +127,7 @@ subroutine get_ao_bielec_integrals_erf(j,k,l,sze,out_val)
integer :: i integer :: i
integer(key_kind) :: hash integer(key_kind) :: hash
double precision :: thresh double precision :: thresh
PROVIDE ao_bielec_integrals_erf_in_map ao_integrals_erf_map PROVIDE ao_two_e_integrals_erf_in_map ao_integrals_erf_map
thresh = ao_integrals_threshold thresh = ao_integrals_threshold
if (ao_overlap_abs(j,l) < thresh) then if (ao_overlap_abs(j,l) < thresh) then
@ -135,14 +135,14 @@ subroutine get_ao_bielec_integrals_erf(j,k,l,sze,out_val)
return return
endif endif
double precision :: get_ao_bielec_integral_erf double precision :: get_ao_two_e_integral_erf
do i=1,sze do i=1,sze
out_val(i) = get_ao_bielec_integral_erf(i,j,k,l,ao_integrals_erf_map) out_val(i) = get_ao_two_e_integral_erf(i,j,k,l,ao_integrals_erf_map)
enddo enddo
end end
subroutine get_ao_bielec_integrals_erf_non_zero(j,k,l,sze,out_val,out_val_index,non_zero_int) subroutine get_ao_two_e_integrals_erf_non_zero(j,k,l,sze,out_val,out_val_index,non_zero_int)
use map_module use map_module
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -156,7 +156,7 @@ subroutine get_ao_bielec_integrals_erf_non_zero(j,k,l,sze,out_val,out_val_index,
integer :: i integer :: i
integer(key_kind) :: hash integer(key_kind) :: hash
double precision :: thresh,tmp double precision :: thresh,tmp
PROVIDE ao_bielec_integrals_erf_in_map PROVIDE ao_two_e_integrals_erf_in_map
thresh = ao_integrals_threshold thresh = ao_integrals_threshold
non_zero_int = 0 non_zero_int = 0
@ -168,12 +168,12 @@ subroutine get_ao_bielec_integrals_erf_non_zero(j,k,l,sze,out_val,out_val_index,
non_zero_int = 0 non_zero_int = 0
do i=1,sze do i=1,sze
integer, external :: ao_l4 integer, external :: ao_l4
double precision, external :: ao_bielec_integral_erf double precision, external :: ao_two_e_integral_erf
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
if (ao_bielec_integral_erf_schwartz(i,k)*ao_bielec_integral_erf_schwartz(j,l) < thresh) then if (ao_two_e_integral_erf_schwartz(i,k)*ao_two_e_integral_erf_schwartz(j,l) < thresh) then
cycle cycle
endif endif
call bielec_integrals_index(i,j,k,l,hash) call two_e_integrals_index(i,j,k,l,hash)
call map_get(ao_integrals_erf_map, hash,tmp) call map_get(ao_integrals_erf_map, hash,tmp)
if (dabs(tmp) < thresh ) cycle if (dabs(tmp) < thresh ) cycle
non_zero_int = non_zero_int+1 non_zero_int = non_zero_int+1

View File

@ -1,5 +1,5 @@
BEGIN_PROVIDER [ logical, ao_bielec_integrals_erf_in_map ] BEGIN_PROVIDER [ logical, ao_two_e_integrals_erf_in_map ]
implicit none implicit none
use f77_zmq use f77_zmq
use map_module use map_module
@ -9,7 +9,7 @@ BEGIN_PROVIDER [ logical, ao_bielec_integrals_erf_in_map ]
END_DOC END_DOC
integer :: i,j,k,l integer :: i,j,k,l
double precision :: ao_bielec_integral_erf,cpu_1,cpu_2, wall_1, wall_2 double precision :: ao_two_e_integral_erf,cpu_1,cpu_2, wall_1, wall_2
double precision :: integral, wall_0 double precision :: integral, wall_0
include 'utils/constants.include.F' include 'utils/constants.include.F'
@ -22,7 +22,7 @@ BEGIN_PROVIDER [ logical, ao_bielec_integrals_erf_in_map ]
integer :: kk, m, j1, i1, lmax integer :: kk, m, j1, i1, lmax
character*(64) :: fmt character*(64) :: fmt
integral = ao_bielec_integral_erf(1,1,1,1) integral = ao_two_e_integral_erf(1,1,1,1)
double precision :: map_mb double precision :: map_mb
PROVIDE read_ao_two_e_integrals_erf io_ao_two_e_integrals_erf PROVIDE read_ao_two_e_integrals_erf io_ao_two_e_integrals_erf
@ -30,7 +30,7 @@ BEGIN_PROVIDER [ logical, ao_bielec_integrals_erf_in_map ]
print*,'Reading the AO ERF integrals' print*,'Reading the AO ERF integrals'
call map_load_from_disk(trim(ezfio_filename)//'/work/ao_ints_erf',ao_integrals_erf_map) call map_load_from_disk(trim(ezfio_filename)//'/work/ao_ints_erf',ao_integrals_erf_map)
print*, 'AO ERF integrals provided' print*, 'AO ERF integrals provided'
ao_bielec_integrals_erf_in_map = .True. ao_two_e_integrals_erf_in_map = .True.
return return
endif endif
@ -63,9 +63,9 @@ BEGIN_PROVIDER [ logical, ao_bielec_integrals_erf_in_map ]
!$OMP PARALLEL DEFAULT(shared) private(i) num_threads(nproc+1) !$OMP PARALLEL DEFAULT(shared) private(i) num_threads(nproc+1)
i = omp_get_thread_num() i = omp_get_thread_num()
if (i==0) then if (i==0) then
call ao_bielec_integrals_erf_in_map_collector(zmq_socket_pull) call ao_two_e_integrals_erf_in_map_collector(zmq_socket_pull)
else else
call ao_bielec_integrals_erf_in_map_slave_inproc(i) call ao_two_e_integrals_erf_in_map_slave_inproc(i)
endif endif
!$OMP END PARALLEL !$OMP END PARALLEL
@ -85,7 +85,7 @@ BEGIN_PROVIDER [ logical, ao_bielec_integrals_erf_in_map ]
print*, ' cpu time :',cpu_2 - cpu_1, 's' print*, ' cpu time :',cpu_2 - cpu_1, 's'
print*, ' wall time :',wall_2 - wall_1, 's ( x ', (cpu_2-cpu_1)/(wall_2-wall_1+tiny(1.d0)), ' )' print*, ' wall time :',wall_2 - wall_1, 's ( x ', (cpu_2-cpu_1)/(wall_2-wall_1+tiny(1.d0)), ' )'
ao_bielec_integrals_erf_in_map = .True. ao_two_e_integrals_erf_in_map = .True.
if (write_ao_two_e_integrals_erf) then if (write_ao_two_e_integrals_erf) then
call ezfio_set_work_empty(.False.) call ezfio_set_work_empty(.False.)
@ -98,24 +98,24 @@ END_PROVIDER
BEGIN_PROVIDER [ double precision, ao_bielec_integral_erf_schwartz,(ao_num,ao_num) ] BEGIN_PROVIDER [ double precision, ao_two_e_integral_erf_schwartz,(ao_num,ao_num) ]
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! Needed to compute Schwartz inequalities ! Needed to compute Schwartz inequalities
END_DOC END_DOC
integer :: i,k integer :: i,k
double precision :: ao_bielec_integral_erf,cpu_1,cpu_2, wall_1, wall_2 double precision :: ao_two_e_integral_erf,cpu_1,cpu_2, wall_1, wall_2
ao_bielec_integral_erf_schwartz(1,1) = ao_bielec_integral_erf(1,1,1,1) ao_two_e_integral_erf_schwartz(1,1) = ao_two_e_integral_erf(1,1,1,1)
!$OMP PARALLEL DO PRIVATE(i,k) & !$OMP PARALLEL DO PRIVATE(i,k) &
!$OMP DEFAULT(NONE) & !$OMP DEFAULT(NONE) &
!$OMP SHARED (ao_num,ao_bielec_integral_erf_schwartz) & !$OMP SHARED (ao_num,ao_two_e_integral_erf_schwartz) &
!$OMP SCHEDULE(dynamic) !$OMP SCHEDULE(dynamic)
do i=1,ao_num do i=1,ao_num
do k=1,i do k=1,i
ao_bielec_integral_erf_schwartz(i,k) = dsqrt(ao_bielec_integral_erf(i,k,i,k)) ao_two_e_integral_erf_schwartz(i,k) = dsqrt(ao_two_e_integral_erf(i,k,i,k))
ao_bielec_integral_erf_schwartz(k,i) = ao_bielec_integral_erf_schwartz(i,k) ao_two_e_integral_erf_schwartz(k,i) = ao_two_e_integral_erf_schwartz(i,k)
enddo enddo
enddo enddo
!$OMP END PARALLEL DO !$OMP END PARALLEL DO

View File

@ -1,16 +1,16 @@
subroutine save_erf_bi_elec_integrals_ao subroutine save_erf_two_e_integrals_ao
implicit none implicit none
integer :: i,j,k,l integer :: i,j,k,l
PROVIDE ao_bielec_integrals_erf_in_map PROVIDE ao_two_e_integrals_erf_in_map
call ezfio_set_work_empty(.False.) call ezfio_set_work_empty(.False.)
call map_save_to_disk(trim(ezfio_filename)//'/work/ao_ints_erf',ao_integrals_erf_map) call map_save_to_disk(trim(ezfio_filename)//'/work/ao_ints_erf',ao_integrals_erf_map)
call ezfio_set_ao_two_e_erf_ints_io_ao_two_e_integrals_erf('Read') call ezfio_set_ao_two_e_erf_ints_io_ao_two_e_integrals_erf('Read')
end end
subroutine save_erf_bielec_ints_ao_into_ints_ao subroutine save_erf_two_e_ints_ao_into_ints_ao
implicit none implicit none
integer :: i,j,k,l integer :: i,j,k,l
PROVIDE ao_bielec_integrals_erf_in_map PROVIDE ao_two_e_integrals_erf_in_map
call ezfio_set_work_empty(.False.) call ezfio_set_work_empty(.False.)
call map_save_to_disk(trim(ezfio_filename)//'/work/ao_ints',ao_integrals_erf_map) call map_save_to_disk(trim(ezfio_filename)//'/work/ao_ints',ao_integrals_erf_map)
call ezfio_set_ao_two_e_ints_io_ao_two_e_integrals('Read') call ezfio_set_ao_two_e_ints_io_ao_two_e_integrals('Read')

View File

@ -1,4 +1,4 @@
double precision function ao_bielec_integral_erf(i,j,k,l) double precision function ao_two_e_integral_erf(i,j,k,l)
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! integral of the AO basis <ik|jl> or (ij|kl) ! integral of the AO basis <ik|jl> or (ij|kl)
@ -14,10 +14,10 @@ double precision function ao_bielec_integral_erf(i,j,k,l)
double precision :: P_new(0:max_dim,3),P_center(3),fact_p,pp double precision :: P_new(0:max_dim,3),P_center(3),fact_p,pp
double precision :: Q_new(0:max_dim,3),Q_center(3),fact_q,qq double precision :: Q_new(0:max_dim,3),Q_center(3),fact_q,qq
integer :: iorder_p(3), iorder_q(3) integer :: iorder_p(3), iorder_q(3)
double precision :: ao_bielec_integral_schwartz_accel_erf double precision :: ao_two_e_integral_schwartz_accel_erf
if (ao_prim_num(i) * ao_prim_num(j) * ao_prim_num(k) * ao_prim_num(l) > 1024 ) then if (ao_prim_num(i) * ao_prim_num(j) * ao_prim_num(k) * ao_prim_num(l) > 1024 ) then
ao_bielec_integral_erf = ao_bielec_integral_schwartz_accel_erf(i,j,k,l) ao_two_e_integral_erf = ao_two_e_integral_schwartz_accel_erf(i,j,k,l)
return return
endif endif
@ -27,7 +27,7 @@ double precision function ao_bielec_integral_erf(i,j,k,l)
num_j = ao_nucl(j) num_j = ao_nucl(j)
num_k = ao_nucl(k) num_k = ao_nucl(k)
num_l = ao_nucl(l) num_l = ao_nucl(l)
ao_bielec_integral_erf = 0.d0 ao_two_e_integral_erf = 0.d0
if (num_i /= num_j .or. num_k /= num_l .or. num_j /= num_k)then if (num_i /= num_j .or. num_k /= num_l .or. num_j /= num_k)then
do p = 1, 3 do p = 1, 3
@ -64,7 +64,7 @@ double precision function ao_bielec_integral_erf(i,j,k,l)
integral = general_primitive_integral_erf(dim1, & integral = general_primitive_integral_erf(dim1, &
P_new,P_center,fact_p,pp,p_inv,iorder_p, & P_new,P_center,fact_p,pp,p_inv,iorder_p, &
Q_new,Q_center,fact_q,qq,q_inv,iorder_q) Q_new,Q_center,fact_q,qq,q_inv,iorder_q)
ao_bielec_integral_erf = ao_bielec_integral_erf + coef4 * integral ao_two_e_integral_erf = ao_two_e_integral_erf + coef4 * integral
enddo ! s enddo ! s
enddo ! r enddo ! r
enddo ! q enddo ! q
@ -93,7 +93,7 @@ double precision function ao_bielec_integral_erf(i,j,k,l)
I_power(1),J_power(1),K_power(1),L_power(1), & I_power(1),J_power(1),K_power(1),L_power(1), &
I_power(2),J_power(2),K_power(2),L_power(2), & I_power(2),J_power(2),K_power(2),L_power(2), &
I_power(3),J_power(3),K_power(3),L_power(3)) I_power(3),J_power(3),K_power(3),L_power(3))
ao_bielec_integral_erf = ao_bielec_integral_erf + coef4 * integral ao_two_e_integral_erf = ao_two_e_integral_erf + coef4 * integral
enddo ! s enddo ! s
enddo ! r enddo ! r
enddo ! q enddo ! q
@ -103,7 +103,7 @@ double precision function ao_bielec_integral_erf(i,j,k,l)
end end
double precision function ao_bielec_integral_schwartz_accel_erf(i,j,k,l) double precision function ao_two_e_integral_schwartz_accel_erf(i,j,k,l)
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! integral of the AO basis <ik|jl> or (ij|kl) ! integral of the AO basis <ik|jl> or (ij|kl)
@ -127,7 +127,7 @@ double precision function ao_bielec_integral_schwartz_accel_erf(i,j,k,l)
num_j = ao_nucl(j) num_j = ao_nucl(j)
num_k = ao_nucl(k) num_k = ao_nucl(k)
num_l = ao_nucl(l) num_l = ao_nucl(l)
ao_bielec_integral_schwartz_accel_erf = 0.d0 ao_two_e_integral_schwartz_accel_erf = 0.d0
double precision :: thr double precision :: thr
thr = ao_integrals_threshold*ao_integrals_threshold thr = ao_integrals_threshold*ao_integrals_threshold
@ -203,7 +203,7 @@ double precision function ao_bielec_integral_schwartz_accel_erf(i,j,k,l)
integral = general_primitive_integral_erf(dim1, & integral = general_primitive_integral_erf(dim1, &
P_new,P_center,fact_p,pp,p_inv,iorder_p, & P_new,P_center,fact_p,pp,p_inv,iorder_p, &
Q_new,Q_center,fact_q,qq,q_inv,iorder_q) Q_new,Q_center,fact_q,qq,q_inv,iorder_q)
ao_bielec_integral_schwartz_accel_erf = ao_bielec_integral_schwartz_accel_erf + coef4 * integral ao_two_e_integral_schwartz_accel_erf = ao_two_e_integral_schwartz_accel_erf + coef4 * integral
enddo ! s enddo ! s
enddo ! r enddo ! r
enddo ! q enddo ! q
@ -263,7 +263,7 @@ double precision function ao_bielec_integral_schwartz_accel_erf(i,j,k,l)
I_power(1),J_power(1),K_power(1),L_power(1), & I_power(1),J_power(1),K_power(1),L_power(1), &
I_power(2),J_power(2),K_power(2),L_power(2), & I_power(2),J_power(2),K_power(2),L_power(2), &
I_power(3),J_power(3),K_power(3),L_power(3)) I_power(3),J_power(3),K_power(3),L_power(3))
ao_bielec_integral_schwartz_accel_erf = ao_bielec_integral_schwartz_accel_erf + coef4 * integral ao_two_e_integral_schwartz_accel_erf = ao_two_e_integral_schwartz_accel_erf + coef4 * integral
enddo ! s enddo ! s
enddo ! r enddo ! r
enddo ! q enddo ! q
@ -275,7 +275,7 @@ double precision function ao_bielec_integral_schwartz_accel_erf(i,j,k,l)
end end
subroutine compute_ao_bielec_integrals_erf(j,k,l,sze,buffer_value) subroutine compute_ao_two_e_integrals_erf(j,k,l,sze,buffer_value)
implicit none implicit none
use map_module use map_module
@ -286,7 +286,7 @@ subroutine compute_ao_bielec_integrals_erf(j,k,l,sze,buffer_value)
include 'utils/constants.include.F' include 'utils/constants.include.F'
integer, intent(in) :: j,k,l,sze integer, intent(in) :: j,k,l,sze
real(integral_kind), intent(out) :: buffer_value(sze) real(integral_kind), intent(out) :: buffer_value(sze)
double precision :: ao_bielec_integral_erf double precision :: ao_two_e_integral_erf
integer :: i integer :: i
@ -294,7 +294,7 @@ subroutine compute_ao_bielec_integrals_erf(j,k,l,sze,buffer_value)
buffer_value = 0._integral_kind buffer_value = 0._integral_kind
return return
endif endif
if (ao_bielec_integral_erf_schwartz(j,l) < thresh ) then if (ao_two_e_integral_erf_schwartz(j,l) < thresh ) then
buffer_value = 0._integral_kind buffer_value = 0._integral_kind
return return
endif endif
@ -304,12 +304,12 @@ subroutine compute_ao_bielec_integrals_erf(j,k,l,sze,buffer_value)
buffer_value(i) = 0._integral_kind buffer_value(i) = 0._integral_kind
cycle cycle
endif endif
if (ao_bielec_integral_erf_schwartz(i,k)*ao_bielec_integral_erf_schwartz(j,l) < thresh ) then if (ao_two_e_integral_erf_schwartz(i,k)*ao_two_e_integral_erf_schwartz(j,l) < thresh ) then
buffer_value(i) = 0._integral_kind buffer_value(i) = 0._integral_kind
cycle cycle
endif endif
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
buffer_value(i) = ao_bielec_integral_erf(i,k,j,l) buffer_value(i) = ao_two_e_integral_erf(i,k,j,l)
enddo enddo
end end
@ -458,7 +458,7 @@ end
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) 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)
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! ATOMIC PRIMTIVE bielectronic integral between the 4 primitives :: ! ATOMIC PRIMTIVE two-electron integral between the 4 primitives ::
! primitive_1 = x1**(a_x) y1**(a_y) z1**(a_z) exp(-alpha * r1**2) ! primitive_1 = x1**(a_x) y1**(a_y) z1**(a_z) exp(-alpha * r1**2)
! primitive_2 = x1**(b_x) y1**(b_y) z1**(b_z) exp(- beta * r1**2) ! primitive_2 = x1**(b_x) y1**(b_y) z1**(b_z) exp(- beta * r1**2)
! primitive_3 = x2**(c_x) y2**(c_y) z2**(c_z) exp(-delta * r2**2) ! primitive_3 = x2**(c_x) y2**(c_y) z2**(c_z) exp(-delta * r2**2)
@ -608,7 +608,7 @@ subroutine compute_ao_integrals_erf_jl(j,l,n_integrals,buffer_i,buffer_value)
real(integral_kind),intent(out) :: buffer_value(ao_num*ao_num) real(integral_kind),intent(out) :: buffer_value(ao_num*ao_num)
integer :: i,k integer :: i,k
double precision :: ao_bielec_integral_erf,cpu_1,cpu_2, wall_1, wall_2 double precision :: ao_two_e_integral_erf,cpu_1,cpu_2, wall_1, wall_2
double precision :: integral, wall_0 double precision :: integral, wall_0
double precision :: thr double precision :: thr
integer :: kk, m, j1, i1 integer :: kk, m, j1, i1
@ -631,17 +631,17 @@ subroutine compute_ao_integrals_erf_jl(j,l,n_integrals,buffer_i,buffer_value)
if (ao_overlap_abs(i,k)*ao_overlap_abs(j,l) < thr) then if (ao_overlap_abs(i,k)*ao_overlap_abs(j,l) < thr) then
cycle cycle
endif endif
if (ao_bielec_integral_erf_schwartz(i,k)*ao_bielec_integral_erf_schwartz(j,l) < thr ) then if (ao_two_e_integral_erf_schwartz(i,k)*ao_two_e_integral_erf_schwartz(j,l) < thr ) then
cycle cycle
endif endif
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
integral = ao_bielec_integral_erf(i,k,j,l) ! i,k : r1 j,l : r2 integral = ao_two_e_integral_erf(i,k,j,l) ! i,k : r1 j,l : r2
if (abs(integral) < thr) then if (abs(integral) < thr) then
cycle cycle
endif endif
n_integrals += 1 n_integrals += 1
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
call bielec_integrals_index(i,j,k,l,buffer_i(n_integrals)) call two_e_integrals_index(i,j,k,l,buffer_i(n_integrals))
buffer_value(n_integrals) = integral buffer_value(n_integrals) = integral
enddo enddo
enddo enddo

View File

@ -7,7 +7,7 @@ As they have 4 indices and many are zero, they are stored in a map, as defined
in :file:`utils/map_module.f90`. in :file:`utils/map_module.f90`.
To fetch an |AO| integral, use the To fetch an |AO| integral, use the
`get_ao_bielec_integral(i,j,k,l,ao_integrals_map)` function. `get_ao_two_e_integral(i,j,k,l,ao_integrals_map)` function.
The conventions are: The conventions are:

View File

@ -1,20 +1,20 @@
subroutine ao_bielec_integrals_in_map_slave_tcp(i) subroutine ao_two_e_integrals_in_map_slave_tcp(i)
implicit none implicit none
integer, intent(in) :: i integer, intent(in) :: i
BEGIN_DOC BEGIN_DOC
! Computes a buffer of integrals. i is the ID of the current thread. ! Computes a buffer of integrals. i is the ID of the current thread.
END_DOC END_DOC
call ao_bielec_integrals_in_map_slave(0,i) call ao_two_e_integrals_in_map_slave(0,i)
end end
subroutine ao_bielec_integrals_in_map_slave_inproc(i) subroutine ao_two_e_integrals_in_map_slave_inproc(i)
implicit none implicit none
integer, intent(in) :: i integer, intent(in) :: i
BEGIN_DOC BEGIN_DOC
! Computes a buffer of integrals. i is the ID of the current thread. ! Computes a buffer of integrals. i is the ID of the current thread.
END_DOC END_DOC
call ao_bielec_integrals_in_map_slave(1,i) call ao_two_e_integrals_in_map_slave(1,i)
end end
@ -71,7 +71,7 @@ end
subroutine ao_bielec_integrals_in_map_slave(thread,iproc) subroutine ao_two_e_integrals_in_map_slave(thread,iproc)
use map_module use map_module
use f77_zmq use f77_zmq
implicit none implicit none
@ -136,7 +136,7 @@ subroutine ao_bielec_integrals_in_map_slave(thread,iproc)
end end
subroutine ao_bielec_integrals_in_map_collector(zmq_socket_pull) subroutine ao_two_e_integrals_in_map_collector(zmq_socket_pull)
use map_module use map_module
use f77_zmq use f77_zmq
implicit none implicit none

View File

@ -10,13 +10,13 @@ BEGIN_PROVIDER [ type(map_type), ao_integrals_map ]
END_DOC END_DOC
integer(key_kind) :: key_max integer(key_kind) :: key_max
integer(map_size_kind) :: sze integer(map_size_kind) :: sze
call bielec_integrals_index(ao_num,ao_num,ao_num,ao_num,key_max) call two_e_integrals_index(ao_num,ao_num,ao_num,ao_num,key_max)
sze = key_max sze = key_max
call map_init(ao_integrals_map,sze) call map_init(ao_integrals_map,sze)
print*, 'AO map initialized : ', sze print*, 'AO map initialized : ', sze
END_PROVIDER END_PROVIDER
subroutine bielec_integrals_index(i,j,k,l,i1) subroutine two_e_integrals_index(i,j,k,l,i1)
use map_module use map_module
implicit none implicit none
integer, intent(in) :: i,j,k,l integer, intent(in) :: i,j,k,l
@ -33,7 +33,7 @@ subroutine bielec_integrals_index(i,j,k,l,i1)
i1 = i1+shiftr(i2*i2-i2,1) i1 = i1+shiftr(i2*i2-i2,1)
end end
subroutine bielec_integrals_index_reverse(i,j,k,l,i1) subroutine two_e_integrals_index_reverse(i,j,k,l,i1)
use map_module use map_module
implicit none implicit none
integer, intent(out) :: i(8),j(8),k(8),l(8) integer, intent(out) :: i(8),j(8),k(8),l(8)
@ -97,11 +97,11 @@ subroutine bielec_integrals_index_reverse(i,j,k,l,i1)
enddo enddo
do ii=1,8 do ii=1,8
if (i(ii) /= 0) then if (i(ii) /= 0) then
call bielec_integrals_index(i(ii),j(ii),k(ii),l(ii),i2) call two_e_integrals_index(i(ii),j(ii),k(ii),l(ii),i2)
if (i1 /= i2) then if (i1 /= i2) then
print *, i1, i2 print *, i1, i2
print *, i(ii), j(ii), k(ii), l(ii) print *, i(ii), j(ii), k(ii), l(ii)
stop 'bielec_integrals_index_reverse failed' stop 'two_e_integrals_index_reverse failed'
endif endif
endif endif
enddo enddo
@ -125,7 +125,7 @@ BEGIN_PROVIDER [ double precision, ao_integrals_cache, (0:64*64*64*64) ]
BEGIN_DOC BEGIN_DOC
! Cache of AO integrals for fast access ! Cache of AO integrals for fast access
END_DOC END_DOC
PROVIDE ao_bielec_integrals_in_map PROVIDE ao_two_e_integrals_in_map
integer :: i,j,k,l,ii integer :: i,j,k,l,ii
integer(key_kind) :: idx integer(key_kind) :: idx
real(integral_kind) :: integral real(integral_kind) :: integral
@ -135,7 +135,7 @@ BEGIN_PROVIDER [ double precision, ao_integrals_cache, (0:64*64*64*64) ]
do j=ao_integrals_cache_min,ao_integrals_cache_max do j=ao_integrals_cache_min,ao_integrals_cache_max
do i=ao_integrals_cache_min,ao_integrals_cache_max do i=ao_integrals_cache_min,ao_integrals_cache_max
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
call bielec_integrals_index(i,j,k,l,idx) call two_e_integrals_index(i,j,k,l,idx)
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
call map_get(ao_integrals_map,idx,integral) call map_get(ao_integrals_map,idx,integral)
ii = l-ao_integrals_cache_min ii = l-ao_integrals_cache_min
@ -152,7 +152,7 @@ BEGIN_PROVIDER [ double precision, ao_integrals_cache, (0:64*64*64*64) ]
END_PROVIDER END_PROVIDER
double precision function get_ao_bielec_integral(i,j,k,l,map) result(result) double precision function get_ao_two_e_integral(i,j,k,l,map) result(result)
use map_module use map_module
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -163,11 +163,11 @@ double precision function get_ao_bielec_integral(i,j,k,l,map) result(result)
type(map_type), intent(inout) :: map type(map_type), intent(inout) :: map
integer :: ii integer :: ii
real(integral_kind) :: tmp real(integral_kind) :: tmp
PROVIDE ao_bielec_integrals_in_map ao_integrals_cache ao_integrals_cache_min PROVIDE ao_two_e_integrals_in_map ao_integrals_cache ao_integrals_cache_min
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
if (ao_overlap_abs(i,k)*ao_overlap_abs(j,l) < ao_integrals_threshold ) then if (ao_overlap_abs(i,k)*ao_overlap_abs(j,l) < ao_integrals_threshold ) then
tmp = 0.d0 tmp = 0.d0
else if (ao_bielec_integral_schwartz(i,k)*ao_bielec_integral_schwartz(j,l) < ao_integrals_threshold) then else if (ao_two_e_integral_schwartz(i,k)*ao_two_e_integral_schwartz(j,l) < ao_integrals_threshold) then
tmp = 0.d0 tmp = 0.d0
else else
ii = l-ao_integrals_cache_min ii = l-ao_integrals_cache_min
@ -176,7 +176,7 @@ double precision function get_ao_bielec_integral(i,j,k,l,map) result(result)
ii = ior(ii, i-ao_integrals_cache_min) ii = ior(ii, i-ao_integrals_cache_min)
if (iand(ii, -64) /= 0) then if (iand(ii, -64) /= 0) then
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
call bielec_integrals_index(i,j,k,l,idx) call two_e_integrals_index(i,j,k,l,idx)
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
call map_get(map,idx,tmp) call map_get(map,idx,tmp)
else else
@ -191,7 +191,7 @@ double precision function get_ao_bielec_integral(i,j,k,l,map) result(result)
end end
subroutine get_ao_bielec_integrals(j,k,l,sze,out_val) subroutine get_ao_two_e_integrals(j,k,l,sze,out_val)
use map_module use map_module
BEGIN_DOC BEGIN_DOC
! Gets multiple AO bi-electronic integral from the AO map . ! Gets multiple AO bi-electronic integral from the AO map .
@ -204,7 +204,7 @@ subroutine get_ao_bielec_integrals(j,k,l,sze,out_val)
integer :: i integer :: i
integer(key_kind) :: hash integer(key_kind) :: hash
double precision :: thresh double precision :: thresh
PROVIDE ao_bielec_integrals_in_map ao_integrals_map PROVIDE ao_two_e_integrals_in_map ao_integrals_map
thresh = ao_integrals_threshold thresh = ao_integrals_threshold
if (ao_overlap_abs(j,l) < thresh) then if (ao_overlap_abs(j,l) < thresh) then
@ -212,14 +212,14 @@ subroutine get_ao_bielec_integrals(j,k,l,sze,out_val)
return return
endif endif
double precision :: get_ao_bielec_integral double precision :: get_ao_two_e_integral
do i=1,sze do i=1,sze
out_val(i) = get_ao_bielec_integral(i,j,k,l,ao_integrals_map) out_val(i) = get_ao_two_e_integral(i,j,k,l,ao_integrals_map)
enddo enddo
end end
subroutine get_ao_bielec_integrals_non_zero(j,k,l,sze,out_val,out_val_index,non_zero_int) subroutine get_ao_two_e_integrals_non_zero(j,k,l,sze,out_val,out_val_index,non_zero_int)
use map_module use map_module
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -233,7 +233,7 @@ subroutine get_ao_bielec_integrals_non_zero(j,k,l,sze,out_val,out_val_index,non_
integer :: i integer :: i
integer(key_kind) :: hash integer(key_kind) :: hash
double precision :: thresh,tmp double precision :: thresh,tmp
PROVIDE ao_bielec_integrals_in_map PROVIDE ao_two_e_integrals_in_map
thresh = ao_integrals_threshold thresh = ao_integrals_threshold
non_zero_int = 0 non_zero_int = 0
@ -245,12 +245,12 @@ subroutine get_ao_bielec_integrals_non_zero(j,k,l,sze,out_val,out_val_index,non_
non_zero_int = 0 non_zero_int = 0
do i=1,sze do i=1,sze
integer, external :: ao_l4 integer, external :: ao_l4
double precision, external :: ao_bielec_integral double precision, external :: ao_two_e_integral
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
if (ao_bielec_integral_schwartz(i,k)*ao_bielec_integral_schwartz(j,l) < thresh) then if (ao_two_e_integral_schwartz(i,k)*ao_two_e_integral_schwartz(j,l) < thresh) then
cycle cycle
endif endif
call bielec_integrals_index(i,j,k,l,hash) call two_e_integrals_index(i,j,k,l,hash)
call map_get(ao_integrals_map, hash,tmp) call map_get(ao_integrals_map, hash,tmp)
if (dabs(tmp) < thresh ) cycle if (dabs(tmp) < thresh ) cycle
non_zero_int = non_zero_int+1 non_zero_int = non_zero_int+1

View File

@ -1,4 +1,4 @@
double precision function ao_bielec_integral(i,j,k,l) double precision function ao_two_e_integral(i,j,k,l)
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! integral of the AO basis <ik|jl> or (ij|kl) ! integral of the AO basis <ik|jl> or (ij|kl)
@ -14,10 +14,10 @@ double precision function ao_bielec_integral(i,j,k,l)
double precision :: P_new(0:max_dim,3),P_center(3),fact_p,pp double precision :: P_new(0:max_dim,3),P_center(3),fact_p,pp
double precision :: Q_new(0:max_dim,3),Q_center(3),fact_q,qq double precision :: Q_new(0:max_dim,3),Q_center(3),fact_q,qq
integer :: iorder_p(3), iorder_q(3) integer :: iorder_p(3), iorder_q(3)
double precision :: ao_bielec_integral_schwartz_accel double precision :: ao_two_e_integral_schwartz_accel
if (ao_prim_num(i) * ao_prim_num(j) * ao_prim_num(k) * ao_prim_num(l) > 1024 ) then if (ao_prim_num(i) * ao_prim_num(j) * ao_prim_num(k) * ao_prim_num(l) > 1024 ) then
ao_bielec_integral = ao_bielec_integral_schwartz_accel(i,j,k,l) ao_two_e_integral = ao_two_e_integral_schwartz_accel(i,j,k,l)
return return
endif endif
@ -27,7 +27,7 @@ double precision function ao_bielec_integral(i,j,k,l)
num_j = ao_nucl(j) num_j = ao_nucl(j)
num_k = ao_nucl(k) num_k = ao_nucl(k)
num_l = ao_nucl(l) num_l = ao_nucl(l)
ao_bielec_integral = 0.d0 ao_two_e_integral = 0.d0
if (num_i /= num_j .or. num_k /= num_l .or. num_j /= num_k)then if (num_i /= num_j .or. num_k /= num_l .or. num_j /= num_k)then
do p = 1, 3 do p = 1, 3
@ -64,7 +64,7 @@ double precision function ao_bielec_integral(i,j,k,l)
integral = general_primitive_integral(dim1, & integral = general_primitive_integral(dim1, &
P_new,P_center,fact_p,pp,p_inv,iorder_p, & P_new,P_center,fact_p,pp,p_inv,iorder_p, &
Q_new,Q_center,fact_q,qq,q_inv,iorder_q) Q_new,Q_center,fact_q,qq,q_inv,iorder_q)
ao_bielec_integral = ao_bielec_integral + coef4 * integral ao_two_e_integral = ao_two_e_integral + coef4 * integral
enddo ! s enddo ! s
enddo ! r enddo ! r
enddo ! q enddo ! q
@ -93,7 +93,7 @@ double precision function ao_bielec_integral(i,j,k,l)
I_power(1),J_power(1),K_power(1),L_power(1), & I_power(1),J_power(1),K_power(1),L_power(1), &
I_power(2),J_power(2),K_power(2),L_power(2), & I_power(2),J_power(2),K_power(2),L_power(2), &
I_power(3),J_power(3),K_power(3),L_power(3)) I_power(3),J_power(3),K_power(3),L_power(3))
ao_bielec_integral = ao_bielec_integral + coef4 * integral ao_two_e_integral = ao_two_e_integral + coef4 * integral
enddo ! s enddo ! s
enddo ! r enddo ! r
enddo ! q enddo ! q
@ -103,7 +103,7 @@ double precision function ao_bielec_integral(i,j,k,l)
end end
double precision function ao_bielec_integral_schwartz_accel(i,j,k,l) double precision function ao_two_e_integral_schwartz_accel(i,j,k,l)
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! integral of the AO basis <ik|jl> or (ij|kl) ! integral of the AO basis <ik|jl> or (ij|kl)
@ -127,7 +127,7 @@ double precision function ao_bielec_integral_schwartz_accel(i,j,k,l)
num_j = ao_nucl(j) num_j = ao_nucl(j)
num_k = ao_nucl(k) num_k = ao_nucl(k)
num_l = ao_nucl(l) num_l = ao_nucl(l)
ao_bielec_integral_schwartz_accel = 0.d0 ao_two_e_integral_schwartz_accel = 0.d0
double precision :: thr double precision :: thr
thr = ao_integrals_threshold*ao_integrals_threshold thr = ao_integrals_threshold*ao_integrals_threshold
@ -203,7 +203,7 @@ double precision function ao_bielec_integral_schwartz_accel(i,j,k,l)
integral = general_primitive_integral(dim1, & integral = general_primitive_integral(dim1, &
P_new,P_center,fact_p,pp,p_inv,iorder_p, & P_new,P_center,fact_p,pp,p_inv,iorder_p, &
Q_new,Q_center,fact_q,qq,q_inv,iorder_q) Q_new,Q_center,fact_q,qq,q_inv,iorder_q)
ao_bielec_integral_schwartz_accel = ao_bielec_integral_schwartz_accel + coef4 * integral ao_two_e_integral_schwartz_accel = ao_two_e_integral_schwartz_accel + coef4 * integral
enddo ! s enddo ! s
enddo ! r enddo ! r
enddo ! q enddo ! q
@ -263,7 +263,7 @@ double precision function ao_bielec_integral_schwartz_accel(i,j,k,l)
I_power(1),J_power(1),K_power(1),L_power(1), & I_power(1),J_power(1),K_power(1),L_power(1), &
I_power(2),J_power(2),K_power(2),L_power(2), & I_power(2),J_power(2),K_power(2),L_power(2), &
I_power(3),J_power(3),K_power(3),L_power(3)) I_power(3),J_power(3),K_power(3),L_power(3))
ao_bielec_integral_schwartz_accel = ao_bielec_integral_schwartz_accel + coef4 * integral ao_two_e_integral_schwartz_accel = ao_two_e_integral_schwartz_accel + coef4 * integral
enddo ! s enddo ! s
enddo ! r enddo ! r
enddo ! q enddo ! q
@ -286,7 +286,7 @@ end
subroutine compute_ao_bielec_integrals(j,k,l,sze,buffer_value) subroutine compute_ao_two_e_integrals(j,k,l,sze,buffer_value)
implicit none implicit none
use map_module use map_module
@ -297,7 +297,7 @@ subroutine compute_ao_bielec_integrals(j,k,l,sze,buffer_value)
include 'utils/constants.include.F' include 'utils/constants.include.F'
integer, intent(in) :: j,k,l,sze integer, intent(in) :: j,k,l,sze
real(integral_kind), intent(out) :: buffer_value(sze) real(integral_kind), intent(out) :: buffer_value(sze)
double precision :: ao_bielec_integral double precision :: ao_two_e_integral
integer :: i integer :: i
@ -305,7 +305,7 @@ subroutine compute_ao_bielec_integrals(j,k,l,sze,buffer_value)
buffer_value = 0._integral_kind buffer_value = 0._integral_kind
return return
endif endif
if (ao_bielec_integral_schwartz(j,l) < thresh ) then if (ao_two_e_integral_schwartz(j,l) < thresh ) then
buffer_value = 0._integral_kind buffer_value = 0._integral_kind
return return
endif endif
@ -315,17 +315,17 @@ subroutine compute_ao_bielec_integrals(j,k,l,sze,buffer_value)
buffer_value(i) = 0._integral_kind buffer_value(i) = 0._integral_kind
cycle cycle
endif endif
if (ao_bielec_integral_schwartz(i,k)*ao_bielec_integral_schwartz(j,l) < thresh ) then if (ao_two_e_integral_schwartz(i,k)*ao_two_e_integral_schwartz(j,l) < thresh ) then
buffer_value(i) = 0._integral_kind buffer_value(i) = 0._integral_kind
cycle cycle
endif endif
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
buffer_value(i) = ao_bielec_integral(i,k,j,l) buffer_value(i) = ao_two_e_integral(i,k,j,l)
enddo enddo
end end
BEGIN_PROVIDER [ logical, ao_bielec_integrals_in_map ] BEGIN_PROVIDER [ logical, ao_two_e_integrals_in_map ]
implicit none implicit none
use f77_zmq use f77_zmq
use map_module use map_module
@ -335,7 +335,7 @@ BEGIN_PROVIDER [ logical, ao_bielec_integrals_in_map ]
END_DOC END_DOC
integer :: i,j,k,l integer :: i,j,k,l
double precision :: ao_bielec_integral,cpu_1,cpu_2, wall_1, wall_2 double precision :: ao_two_e_integral,cpu_1,cpu_2, wall_1, wall_2
double precision :: integral, wall_0 double precision :: integral, wall_0
include 'utils/constants.include.F' include 'utils/constants.include.F'
@ -348,7 +348,7 @@ BEGIN_PROVIDER [ logical, ao_bielec_integrals_in_map ]
integer :: kk, m, j1, i1, lmax integer :: kk, m, j1, i1, lmax
character*(64) :: fmt character*(64) :: fmt
integral = ao_bielec_integral(1,1,1,1) integral = ao_two_e_integral(1,1,1,1)
double precision :: map_mb double precision :: map_mb
PROVIDE read_ao_two_e_integrals io_ao_two_e_integrals PROVIDE read_ao_two_e_integrals io_ao_two_e_integrals
@ -356,7 +356,7 @@ BEGIN_PROVIDER [ logical, ao_bielec_integrals_in_map ]
print*,'Reading the AO integrals' print*,'Reading the AO integrals'
call map_load_from_disk(trim(ezfio_filename)//'/work/ao_ints',ao_integrals_map) call map_load_from_disk(trim(ezfio_filename)//'/work/ao_ints',ao_integrals_map)
print*, 'AO integrals provided' print*, 'AO integrals provided'
ao_bielec_integrals_in_map = .True. ao_two_e_integrals_in_map = .True.
return return
endif endif
@ -389,9 +389,9 @@ BEGIN_PROVIDER [ logical, ao_bielec_integrals_in_map ]
!$OMP PARALLEL DEFAULT(shared) private(i) num_threads(nproc+1) !$OMP PARALLEL DEFAULT(shared) private(i) num_threads(nproc+1)
i = omp_get_thread_num() i = omp_get_thread_num()
if (i==0) then if (i==0) then
call ao_bielec_integrals_in_map_collector(zmq_socket_pull) call ao_two_e_integrals_in_map_collector(zmq_socket_pull)
else else
call ao_bielec_integrals_in_map_slave_inproc(i) call ao_two_e_integrals_in_map_slave_inproc(i)
endif endif
!$OMP END PARALLEL !$OMP END PARALLEL
@ -411,7 +411,7 @@ BEGIN_PROVIDER [ logical, ao_bielec_integrals_in_map ]
print*, ' cpu time :',cpu_2 - cpu_1, 's' print*, ' cpu time :',cpu_2 - cpu_1, 's'
print*, ' wall time :',wall_2 - wall_1, 's ( x ', (cpu_2-cpu_1)/(wall_2-wall_1+tiny(1.d0)), ' )' print*, ' wall time :',wall_2 - wall_1, 's ( x ', (cpu_2-cpu_1)/(wall_2-wall_1+tiny(1.d0)), ' )'
ao_bielec_integrals_in_map = .True. ao_two_e_integrals_in_map = .True.
if (write_ao_two_e_integrals.and.mpi_master) then if (write_ao_two_e_integrals.and.mpi_master) then
call ezfio_set_work_empty(.False.) call ezfio_set_work_empty(.False.)
@ -421,24 +421,24 @@ BEGIN_PROVIDER [ logical, ao_bielec_integrals_in_map ]
END_PROVIDER END_PROVIDER
BEGIN_PROVIDER [ double precision, ao_bielec_integral_schwartz,(ao_num,ao_num) ] BEGIN_PROVIDER [ double precision, ao_two_e_integral_schwartz,(ao_num,ao_num) ]
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! Needed to compute Schwartz inequalities ! Needed to compute Schwartz inequalities
END_DOC END_DOC
integer :: i,k integer :: i,k
double precision :: ao_bielec_integral,cpu_1,cpu_2, wall_1, wall_2 double precision :: ao_two_e_integral,cpu_1,cpu_2, wall_1, wall_2
ao_bielec_integral_schwartz(1,1) = ao_bielec_integral(1,1,1,1) ao_two_e_integral_schwartz(1,1) = ao_two_e_integral(1,1,1,1)
!$OMP PARALLEL DO PRIVATE(i,k) & !$OMP PARALLEL DO PRIVATE(i,k) &
!$OMP DEFAULT(NONE) & !$OMP DEFAULT(NONE) &
!$OMP SHARED (ao_num,ao_bielec_integral_schwartz) & !$OMP SHARED (ao_num,ao_two_e_integral_schwartz) &
!$OMP SCHEDULE(dynamic) !$OMP SCHEDULE(dynamic)
do i=1,ao_num do i=1,ao_num
do k=1,i do k=1,i
ao_bielec_integral_schwartz(i,k) = dsqrt(ao_bielec_integral(i,k,i,k)) ao_two_e_integral_schwartz(i,k) = dsqrt(ao_two_e_integral(i,k,i,k))
ao_bielec_integral_schwartz(k,i) = ao_bielec_integral_schwartz(i,k) ao_two_e_integral_schwartz(k,i) = ao_two_e_integral_schwartz(i,k)
enddo enddo
enddo enddo
!$OMP END PARALLEL DO !$OMP END PARALLEL DO
@ -1166,7 +1166,7 @@ subroutine compute_ao_integrals_jl(j,l,n_integrals,buffer_i,buffer_value)
real(integral_kind),intent(out) :: buffer_value(ao_num*ao_num) real(integral_kind),intent(out) :: buffer_value(ao_num*ao_num)
integer :: i,k integer :: i,k
double precision :: ao_bielec_integral,cpu_1,cpu_2, wall_1, wall_2 double precision :: ao_two_e_integral,cpu_1,cpu_2, wall_1, wall_2
double precision :: integral, wall_0 double precision :: integral, wall_0
double precision :: thr double precision :: thr
integer :: kk, m, j1, i1 integer :: kk, m, j1, i1
@ -1189,17 +1189,17 @@ subroutine compute_ao_integrals_jl(j,l,n_integrals,buffer_i,buffer_value)
if (ao_overlap_abs(i,k)*ao_overlap_abs(j,l) < thr) then if (ao_overlap_abs(i,k)*ao_overlap_abs(j,l) < thr) then
cycle cycle
endif endif
if (ao_bielec_integral_schwartz(i,k)*ao_bielec_integral_schwartz(j,l) < thr ) then if (ao_two_e_integral_schwartz(i,k)*ao_two_e_integral_schwartz(j,l) < thr ) then
cycle cycle
endif endif
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
integral = ao_bielec_integral(i,k,j,l) ! i,k : r1 j,l : r2 integral = ao_two_e_integral(i,k,j,l) ! i,k : r1 j,l : r2
if (abs(integral) < thr) then if (abs(integral) < thr) then
cycle cycle
endif endif
n_integrals += 1 n_integrals += 1
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
call bielec_integrals_index(i,j,k,l,buffer_i(n_integrals)) call two_e_integrals_index(i,j,k,l,buffer_i(n_integrals))
buffer_value(n_integrals) = integral buffer_value(n_integrals) = integral
enddo enddo
enddo enddo

View File

@ -11,4 +11,4 @@ the :ref:`davidson` module should be used, and it has a default zero dressing ve
The important providers for that module are: The important providers for that module are:
# `psi_energy` which is the expectation value over the wave function (`psi_det`, `psi_coef`) of the Hamiltonian, dressed or not. It uses the general subroutine `u_0_H_u_0`. # `psi_energy` which is the expectation value over the wave function (`psi_det`, `psi_coef`) of the Hamiltonian, dressed or not. It uses the general subroutine `u_0_H_u_0`.
# `psi_energy_bielec` which is the expectation value over the wave function (`psi_det`, `psi_coef`) of the standard two-electrons coulomb operator. It uses the general routine `u_0_H_u_0_bielec`. # `psi_energy_two_e` which is the expectation value over the wave function (`psi_det`, `psi_coef`) of the standard two-electrons coulomb operator. It uses the general routine `u_0_H_u_0_two_e`.

View File

@ -44,7 +44,7 @@ subroutine davidson_diag_hs2(dets_in,u_in,s2_out,dim_in,energies,sze,N_st,N_st_d
ASSERT (sze > 0) ASSERT (sze > 0)
ASSERT (Nint > 0) ASSERT (Nint > 0)
ASSERT (Nint == N_int) ASSERT (Nint == N_int)
PROVIDE mo_bielec_integrals_in_map PROVIDE mo_two_e_integrals_in_map
allocate(H_jj(sze)) allocate(H_jj(sze))
H_jj(1) = diag_h_mat_elem(dets_in(1,1,1),Nint) H_jj(1) = diag_h_mat_elem(dets_in(1,1,1),Nint)

View File

@ -1,17 +1,17 @@
BEGIN_PROVIDER [ double precision, psi_energy_bielec, (N_states) ] BEGIN_PROVIDER [ double precision, psi_energy_two_e, (N_states) ]
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! Energy of the current wave function ! Energy of the current wave function
END_DOC END_DOC
integer :: i,j integer :: i,j
call u_0_H_u_0_bielec(psi_energy_bielec,psi_coef,N_det,psi_det,N_int,N_states,psi_det_size) call u_0_H_u_0_two_e(psi_energy_two_e,psi_coef,N_det,psi_det,N_int,N_states,psi_det_size)
do i=N_det+1,N_states do i=N_det+1,N_states
psi_energy(i) = 0.d0 psi_energy(i) = 0.d0
enddo enddo
END_PROVIDER END_PROVIDER
subroutine H_S2_u_0_bielec_nstates_openmp(v_0,s_0,u_0,N_st,sze) subroutine H_S2_u_0_two_e_nstates_openmp(v_0,s_0,u_0,N_st,sze)
use bitmasks use bitmasks
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -39,7 +39,7 @@ subroutine H_S2_u_0_bielec_nstates_openmp(v_0,s_0,u_0,N_st,sze)
size(u_t, 1), & size(u_t, 1), &
N_det, N_st) N_det, N_st)
call H_S2_u_0_bielec_nstates_openmp_work(v_t,s_t,u_t,N_st,sze,1,N_det,0,1) call H_S2_u_0_two_e_nstates_openmp_work(v_t,s_t,u_t,N_st,sze,1,N_det,0,1)
deallocate(u_t) deallocate(u_t)
call dtranspose( & call dtranspose( &
@ -65,7 +65,7 @@ subroutine H_S2_u_0_bielec_nstates_openmp(v_0,s_0,u_0,N_st,sze)
end end
subroutine H_S2_u_0_bielec_nstates_openmp_work(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep) subroutine H_S2_u_0_two_e_nstates_openmp_work(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep)
use bitmasks use bitmasks
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -82,20 +82,20 @@ subroutine H_S2_u_0_bielec_nstates_openmp_work(v_t,s_t,u_t,N_st,sze,istart,iend,
select case (N_int) select case (N_int)
case (1) case (1)
call H_S2_u_0_bielec_nstates_openmp_work_1(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep) call H_S2_u_0_two_e_nstates_openmp_work_1(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep)
case (2) case (2)
call H_S2_u_0_bielec_nstates_openmp_work_2(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep) call H_S2_u_0_two_e_nstates_openmp_work_2(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep)
case (3) case (3)
call H_S2_u_0_bielec_nstates_openmp_work_3(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep) call H_S2_u_0_two_e_nstates_openmp_work_3(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep)
case (4) case (4)
call H_S2_u_0_bielec_nstates_openmp_work_4(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep) call H_S2_u_0_two_e_nstates_openmp_work_4(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep)
case default case default
call H_S2_u_0_bielec_nstates_openmp_work_N_int(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep) call H_S2_u_0_two_e_nstates_openmp_work_N_int(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep)
end select end select
end end
BEGIN_TEMPLATE BEGIN_TEMPLATE
subroutine H_S2_u_0_bielec_nstates_openmp_work_$N_int(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep) subroutine H_S2_u_0_two_e_nstates_openmp_work_$N_int(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep)
use bitmasks use bitmasks
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -457,7 +457,7 @@ N_int;;
END_TEMPLATE END_TEMPLATE
subroutine u_0_H_u_0_bielec(e_0,u_0,n,keys_tmp,Nint,N_st,sze) subroutine u_0_H_u_0_two_e(e_0,u_0,n,keys_tmp,Nint,N_st,sze)
use bitmasks use bitmasks
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -477,7 +477,7 @@ subroutine u_0_H_u_0_bielec(e_0,u_0,n,keys_tmp,Nint,N_st,sze)
allocate (v_0(n,N_st),s_0(n,N_st),u_1(n,N_st)) allocate (v_0(n,N_st),s_0(n,N_st),u_1(n,N_st))
u_1(1:n,:) = u_0(1:n,:) u_1(1:n,:) = u_0(1:n,:)
call H_S2_u_0_bielec_nstates_openmp(v_0,s_0,u_1,N_st,n) call H_S2_u_0_two_e_nstates_openmp(v_0,s_0,u_1,N_st,n)
u_0(1:n,:) = u_1(1:n,:) u_0(1:n,:) = u_1(1:n,:)
deallocate(u_1) deallocate(u_1)
double precision :: norm double precision :: norm

View File

@ -138,7 +138,7 @@ subroutine routine_example_psi_det
enddo enddo
enddo enddo
print*,'' print*,''
print*,'Finding the connection through a bielectronic operator in the wave function' print*,'Finding the connection through a two-electron operator in the wave function'
print*,'You want to know the connections of the first determinant ' print*,'You want to know the connections of the first determinant '
! wave function determinant exc degree list ! wave function determinant exc degree list
call get_excitation_degree_vector( psi_det , psi_det(1,1,1),degree_list,N_int,N_det,idx) call get_excitation_degree_vector( psi_det , psi_det(1,1,1),degree_list,N_int,N_det,idx)

View File

@ -33,59 +33,59 @@ subroutine build_fock_tmp(fock_diag_tmp,det_ref,Nint)
! Occupied MOs ! Occupied MOs
do ii=1,elec_alpha_num do ii=1,elec_alpha_num
i = occ(ii,1) i = occ(ii,1)
fock_diag_tmp(1,i) = fock_diag_tmp(1,i) + mo_mono_elec_integrals(i,i) fock_diag_tmp(1,i) = fock_diag_tmp(1,i) + mo_one_e_integrals(i,i)
E0 = E0 + mo_mono_elec_integrals(i,i) E0 = E0 + mo_one_e_integrals(i,i)
do jj=1,elec_alpha_num do jj=1,elec_alpha_num
j = occ(jj,1) j = occ(jj,1)
if (i==j) cycle if (i==j) cycle
fock_diag_tmp(1,i) = fock_diag_tmp(1,i) + mo_bielec_integral_jj_anti(i,j) fock_diag_tmp(1,i) = fock_diag_tmp(1,i) + mo_two_e_integrals_jj_anti(i,j)
E0 = E0 + 0.5d0*mo_bielec_integral_jj_anti(i,j) E0 = E0 + 0.5d0*mo_two_e_integrals_jj_anti(i,j)
enddo enddo
do jj=1,elec_beta_num do jj=1,elec_beta_num
j = occ(jj,2) j = occ(jj,2)
fock_diag_tmp(1,i) = fock_diag_tmp(1,i) + mo_bielec_integral_jj(i,j) fock_diag_tmp(1,i) = fock_diag_tmp(1,i) + mo_two_e_integrals_jj(i,j)
E0 = E0 + mo_bielec_integral_jj(i,j) E0 = E0 + mo_two_e_integrals_jj(i,j)
enddo enddo
enddo enddo
do ii=1,elec_beta_num do ii=1,elec_beta_num
i = occ(ii,2) i = occ(ii,2)
fock_diag_tmp(2,i) = fock_diag_tmp(2,i) + mo_mono_elec_integrals(i,i) fock_diag_tmp(2,i) = fock_diag_tmp(2,i) + mo_one_e_integrals(i,i)
E0 = E0 + mo_mono_elec_integrals(i,i) E0 = E0 + mo_one_e_integrals(i,i)
do jj=1,elec_beta_num do jj=1,elec_beta_num
j = occ(jj,2) j = occ(jj,2)
if (i==j) cycle if (i==j) cycle
fock_diag_tmp(2,i) = fock_diag_tmp(2,i) + mo_bielec_integral_jj_anti(i,j) fock_diag_tmp(2,i) = fock_diag_tmp(2,i) + mo_two_e_integrals_jj_anti(i,j)
E0 = E0 + 0.5d0*mo_bielec_integral_jj_anti(i,j) E0 = E0 + 0.5d0*mo_two_e_integrals_jj_anti(i,j)
enddo enddo
do jj=1,elec_alpha_num do jj=1,elec_alpha_num
j = occ(jj,1) j = occ(jj,1)
fock_diag_tmp(2,i) = fock_diag_tmp(2,i) + mo_bielec_integral_jj(i,j) fock_diag_tmp(2,i) = fock_diag_tmp(2,i) + mo_two_e_integrals_jj(i,j)
enddo enddo
enddo enddo
! Virtual MOs ! Virtual MOs
do i=1,mo_num do i=1,mo_num
if (fock_diag_tmp(1,i) /= 0.d0) cycle if (fock_diag_tmp(1,i) /= 0.d0) cycle
fock_diag_tmp(1,i) = fock_diag_tmp(1,i) + mo_mono_elec_integrals(i,i) fock_diag_tmp(1,i) = fock_diag_tmp(1,i) + mo_one_e_integrals(i,i)
do jj=1,elec_alpha_num do jj=1,elec_alpha_num
j = occ(jj,1) j = occ(jj,1)
fock_diag_tmp(1,i) = fock_diag_tmp(1,i) + mo_bielec_integral_jj_anti(i,j) fock_diag_tmp(1,i) = fock_diag_tmp(1,i) + mo_two_e_integrals_jj_anti(i,j)
enddo enddo
do jj=1,elec_beta_num do jj=1,elec_beta_num
j = occ(jj,2) j = occ(jj,2)
fock_diag_tmp(1,i) = fock_diag_tmp(1,i) + mo_bielec_integral_jj(i,j) fock_diag_tmp(1,i) = fock_diag_tmp(1,i) + mo_two_e_integrals_jj(i,j)
enddo enddo
enddo enddo
do i=1,mo_num do i=1,mo_num
if (fock_diag_tmp(2,i) /= 0.d0) cycle if (fock_diag_tmp(2,i) /= 0.d0) cycle
fock_diag_tmp(2,i) = fock_diag_tmp(2,i) + mo_mono_elec_integrals(i,i) fock_diag_tmp(2,i) = fock_diag_tmp(2,i) + mo_one_e_integrals(i,i)
do jj=1,elec_beta_num do jj=1,elec_beta_num
j = occ(jj,2) j = occ(jj,2)
fock_diag_tmp(2,i) = fock_diag_tmp(2,i) + mo_bielec_integral_jj_anti(i,j) fock_diag_tmp(2,i) = fock_diag_tmp(2,i) + mo_two_e_integrals_jj_anti(i,j)
enddo enddo
do jj=1,elec_alpha_num do jj=1,elec_alpha_num
j = occ(jj,1) j = occ(jj,1)
fock_diag_tmp(2,i) = fock_diag_tmp(2,i) + mo_bielec_integral_jj(i,j) fock_diag_tmp(2,i) = fock_diag_tmp(2,i) + mo_two_e_integrals_jj(i,j)
enddo enddo
enddo enddo

View File

@ -133,7 +133,7 @@ subroutine $subroutine_diexcOrg(key_in,key_mask,hole_1,particl_1,hole_2, particl
integer :: N_elec_in_key_hole_1(2),N_elec_in_key_part_1(2) integer :: N_elec_in_key_hole_1(2),N_elec_in_key_part_1(2)
integer :: N_elec_in_key_hole_2(2),N_elec_in_key_part_2(2) integer :: N_elec_in_key_hole_2(2),N_elec_in_key_part_2(2)
double precision :: mo_bielec_integral double precision :: mo_two_e_integral
logical :: is_a_two_holes_two_particles logical :: is_a_two_holes_two_particles
integer, allocatable :: ia_ja_pairs(:,:,:) integer, allocatable :: ia_ja_pairs(:,:,:)
integer, allocatable :: ib_jb_pairs(:,:) integer, allocatable :: ib_jb_pairs(:,:)

View File

@ -17,7 +17,7 @@ subroutine $subroutine($params_main)
double precision, allocatable :: fock_diag_tmp(:,:) double precision, allocatable :: fock_diag_tmp(:,:)
$initialization $initialization
PROVIDE H_apply_buffer_allocated mo_bielec_integrals_in_map psi_det_generators psi_coef_generators PROVIDE H_apply_buffer_allocated mo_two_e_integrals_in_map psi_det_generators psi_coef_generators
call wall_time(wall_0) call wall_time(wall_0)

View File

@ -20,7 +20,7 @@ subroutine $subroutine($params_main)
double precision, allocatable :: fock_diag_tmp(:,:) double precision, allocatable :: fock_diag_tmp(:,:)
$initialization $initialization
PROVIDE H_apply_buffer_allocated mo_bielec_integrals_in_map psi_det_generators psi_coef_generators PROVIDE H_apply_buffer_allocated mo_two_e_integrals_in_map psi_det_generators psi_coef_generators
integer(ZMQ_PTR), external :: new_zmq_pair_socket integer(ZMQ_PTR), external :: new_zmq_pair_socket
integer(ZMQ_PTR) :: zmq_socket_pair, zmq_socket_pull integer(ZMQ_PTR) :: zmq_socket_pair, zmq_socket_pull

View File

@ -131,20 +131,20 @@ subroutine diag_H_mat_elem_au0_h_au0(det_in,Nint,hii)
! alpha - alpha ! alpha - alpha
do i = 1, elec_num_tab_local(1) do i = 1, elec_num_tab_local(1)
iorb = occ(i,1) iorb = occ(i,1)
hii += mo_mono_elec_integrals(iorb,iorb) hii += mo_one_e_integrals(iorb,iorb)
do j = i+1, elec_num_tab_local(1) do j = i+1, elec_num_tab_local(1)
jorb = occ(j,1) jorb = occ(j,1)
hii += mo_bielec_integral_jj_anti(jorb,iorb) hii += mo_two_e_integrals_jj_anti(jorb,iorb)
enddo enddo
enddo enddo
! beta - beta ! beta - beta
do i = 1, elec_num_tab_local(2) do i = 1, elec_num_tab_local(2)
iorb = occ(i,2) iorb = occ(i,2)
hii += mo_mono_elec_integrals(iorb,iorb) hii += mo_one_e_integrals(iorb,iorb)
do j = i+1, elec_num_tab_local(2) do j = i+1, elec_num_tab_local(2)
jorb = occ(j,2) jorb = occ(j,2)
hii += mo_bielec_integral_jj_anti(jorb,iorb) hii += mo_two_e_integrals_jj_anti(jorb,iorb)
enddo enddo
enddo enddo
@ -153,7 +153,7 @@ subroutine diag_H_mat_elem_au0_h_au0(det_in,Nint,hii)
iorb = occ(i,2) iorb = occ(i,2)
do j = 1, elec_num_tab_local(1) do j = 1, elec_num_tab_local(1)
jorb = occ(j,1) jorb = occ(j,1)
hii += mo_bielec_integral_jj(jorb,iorb) hii += mo_two_e_integrals_jj(jorb,iorb)
enddo enddo
enddo enddo

View File

@ -27,33 +27,33 @@ subroutine mono_excitation_wee(det_1,det_2,h,p,spin,phase,hij)
! holes :: direct terms ! holes :: direct terms
do i0 = 1, n_occ_ab_hole(1) do i0 = 1, n_occ_ab_hole(1)
i = occ_hole(i0,1) i = occ_hole(i0,1)
hij -= big_array_coulomb_integrals(i,h,p) ! get_mo_bielec_integral_schwartz(h,i,p,i,mo_integrals_map) hij -= big_array_coulomb_integrals(i,h,p) ! get_mo_two_e_integral_schwartz(h,i,p,i,mo_integrals_map)
enddo enddo
do i0 = 1, n_occ_ab_hole(2) do i0 = 1, n_occ_ab_hole(2)
i = occ_hole(i0,2) i = occ_hole(i0,2)
hij -= big_array_coulomb_integrals(i,h,p) !get_mo_bielec_integral_schwartz(h,i,p,i,mo_integrals_map) hij -= big_array_coulomb_integrals(i,h,p) !get_mo_two_e_integral_schwartz(h,i,p,i,mo_integrals_map)
enddo enddo
! holes :: exchange terms ! holes :: exchange terms
do i0 = 1, n_occ_ab_hole(spin) do i0 = 1, n_occ_ab_hole(spin)
i = occ_hole(i0,spin) i = occ_hole(i0,spin)
hij += big_array_exchange_integrals(i,h,p) ! get_mo_bielec_integral_schwartz(h,i,i,p,mo_integrals_map) hij += big_array_exchange_integrals(i,h,p) ! get_mo_two_e_integral_schwartz(h,i,i,p,mo_integrals_map)
enddo enddo
! particles :: direct terms ! particles :: direct terms
do i0 = 1, n_occ_ab_partcl(1) do i0 = 1, n_occ_ab_partcl(1)
i = occ_partcl(i0,1) i = occ_partcl(i0,1)
hij += big_array_coulomb_integrals(i,h,p)!get_mo_bielec_integral_schwartz(h,i,p,i,mo_integrals_map) hij += big_array_coulomb_integrals(i,h,p)!get_mo_two_e_integral_schwartz(h,i,p,i,mo_integrals_map)
enddo enddo
do i0 = 1, n_occ_ab_partcl(2) do i0 = 1, n_occ_ab_partcl(2)
i = occ_partcl(i0,2) i = occ_partcl(i0,2)
hij += big_array_coulomb_integrals(i,h,p) !get_mo_bielec_integral_schwartz(h,i,p,i,mo_integrals_map) hij += big_array_coulomb_integrals(i,h,p) !get_mo_two_e_integral_schwartz(h,i,p,i,mo_integrals_map)
enddo enddo
! particles :: exchange terms ! particles :: exchange terms
do i0 = 1, n_occ_ab_partcl(spin) do i0 = 1, n_occ_ab_partcl(spin)
i = occ_partcl(i0,spin) i = occ_partcl(i0,spin)
hij -= big_array_exchange_integrals(i,h,p)!get_mo_bielec_integral_schwartz(h,i,i,p,mo_integrals_map) hij -= big_array_exchange_integrals(i,h,p)!get_mo_two_e_integral_schwartz(h,i,i,p,mo_integrals_map)
enddo enddo
hij = hij * phase hij = hij * phase
@ -84,8 +84,8 @@ BEGIN_PROVIDER [double precision, fock_wee_closed_shell, (mo_num, mo_num) ]
i=occ(i0,1) i=occ(i0,1)
do j0 = 1, n_occ_ab_virt(1) do j0 = 1, n_occ_ab_virt(1)
j = occ_virt(j0,1) j = occ_virt(j0,1)
call get_mo_bielec_integrals_coulomb_ii(i,j,mo_num,array_coulomb,mo_integrals_map) call get_mo_two_e_integrals_coulomb_ii(i,j,mo_num,array_coulomb,mo_integrals_map)
call get_mo_bielec_integrals_exch_ii(i,j,mo_num,array_exchange,mo_integrals_map) call get_mo_two_e_integrals_exch_ii(i,j,mo_num,array_exchange,mo_integrals_map)
double precision :: accu double precision :: accu
accu = 0.d0 accu = 0.d0
do k0 = 1, n_occ_ab(1) do k0 = 1, n_occ_ab(1)
@ -102,8 +102,8 @@ BEGIN_PROVIDER [double precision, fock_wee_closed_shell, (mo_num, mo_num) ]
i=occ_virt(i0,1) i=occ_virt(i0,1)
do j0 = 1, n_occ_ab_virt(1) do j0 = 1, n_occ_ab_virt(1)
j = occ_virt(j0,1) j = occ_virt(j0,1)
call get_mo_bielec_integrals_coulomb_ii(i,j,mo_num,array_coulomb,mo_integrals_map) call get_mo_two_e_integrals_coulomb_ii(i,j,mo_num,array_coulomb,mo_integrals_map)
call get_mo_bielec_integrals_exch_ii(i,j,mo_num,array_exchange,mo_integrals_map) call get_mo_two_e_integrals_exch_ii(i,j,mo_num,array_exchange,mo_integrals_map)
accu = 0.d0 accu = 0.d0
do k0 = 1, n_occ_ab(1) do k0 = 1, n_occ_ab(1)
k = occ(k0,1) k = occ(k0,1)
@ -119,8 +119,8 @@ BEGIN_PROVIDER [double precision, fock_wee_closed_shell, (mo_num, mo_num) ]
i=occ(i0,1) i=occ(i0,1)
do j0 = 1, n_occ_ab(1) do j0 = 1, n_occ_ab(1)
j = occ(j0,1) j = occ(j0,1)
call get_mo_bielec_integrals_coulomb_ii(i,j,mo_num,array_coulomb,mo_integrals_map) call get_mo_two_e_integrals_coulomb_ii(i,j,mo_num,array_coulomb,mo_integrals_map)
call get_mo_bielec_integrals_exch_ii(i,j,mo_num,array_exchange,mo_integrals_map) call get_mo_two_e_integrals_exch_ii(i,j,mo_num,array_exchange,mo_integrals_map)
accu = 0.d0 accu = 0.d0
do k0 = 1, n_occ_ab(1) do k0 = 1, n_occ_ab(1)
k = occ(k0,1) k = occ(k0,1)

View File

@ -7,13 +7,13 @@
! psi_energy_h_core = $\langle \Psi | h_{core} |\Psi \rangle$ ! psi_energy_h_core = $\langle \Psi | h_{core} |\Psi \rangle$
! !
! computed using the :c:data:`one_body_dm_mo_alpha` + ! computed using the :c:data:`one_body_dm_mo_alpha` +
! :c:data:`one_body_dm_mo_beta` and :c:data:`mo_mono_elec_integrals` ! :c:data:`one_body_dm_mo_beta` and :c:data:`mo_one_e_integrals`
END_DOC END_DOC
psi_energy_h_core = 0.d0 psi_energy_h_core = 0.d0
do i = 1, N_states do i = 1, N_states
do j = 1, mo_num do j = 1, mo_num
do k = 1, mo_num do k = 1, mo_num
psi_energy_h_core(i) += mo_mono_elec_integrals(k,j) * (one_body_dm_mo_alpha(k,j,i) + one_body_dm_mo_beta(k,j,i)) psi_energy_h_core(i) += mo_one_e_integrals(k,j) * (one_body_dm_mo_alpha(k,j,i) + one_body_dm_mo_beta(k,j,i))
enddo enddo
enddo enddo
enddo enddo

View File

@ -1,8 +1,8 @@
BEGIN_PROVIDER [ double precision, ref_bitmask_energy ] BEGIN_PROVIDER [ double precision, ref_bitmask_energy ]
&BEGIN_PROVIDER [ double precision, mono_elec_ref_bitmask_energy ] &BEGIN_PROVIDER [ double precision, ref_bitmask_one_e_energy ]
&BEGIN_PROVIDER [ double precision, kinetic_ref_bitmask_energy ] &BEGIN_PROVIDER [ double precision, ref_bitmask_kinetic_energy ]
&BEGIN_PROVIDER [ double precision, nucl_elec_ref_bitmask_energy ] &BEGIN_PROVIDER [ double precision, ref_bitmask_e_n_energy ]
&BEGIN_PROVIDER [ double precision, bi_elec_ref_bitmask_energy ] &BEGIN_PROVIDER [ double precision, ref_bitmask_two_e_energy ]
use bitmasks use bitmasks
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -17,41 +17,41 @@
ref_bitmask_energy = 0.d0 ref_bitmask_energy = 0.d0
mono_elec_ref_bitmask_energy = 0.d0 ref_bitmask_one_e_energy = 0.d0
kinetic_ref_bitmask_energy = 0.d0 ref_bitmask_kinetic_energy = 0.d0
nucl_elec_ref_bitmask_energy = 0.d0 ref_bitmask_e_n_energy = 0.d0
bi_elec_ref_bitmask_energy = 0.d0 ref_bitmask_two_e_energy = 0.d0
do i = 1, elec_beta_num do i = 1, elec_beta_num
ref_bitmask_energy += mo_mono_elec_integrals(occ(i,1),occ(i,1)) + mo_mono_elec_integrals(occ(i,2),occ(i,2)) ref_bitmask_energy += mo_one_e_integrals(occ(i,1),occ(i,1)) + mo_one_e_integrals(occ(i,2),occ(i,2))
kinetic_ref_bitmask_energy += mo_kinetic_integrals(occ(i,1),occ(i,1)) + mo_kinetic_integrals(occ(i,2),occ(i,2)) ref_bitmask_kinetic_energy += mo_kinetic_integrals(occ(i,1),occ(i,1)) + mo_kinetic_integrals(occ(i,2),occ(i,2))
nucl_elec_ref_bitmask_energy += mo_nucl_elec_integrals(occ(i,1),occ(i,1)) + mo_nucl_elec_integrals(occ(i,2),occ(i,2)) ref_bitmask_e_n_energy += mo_integrals_n_e(occ(i,1),occ(i,1)) + mo_integrals_n_e(occ(i,2),occ(i,2))
enddo enddo
do i = elec_beta_num+1,elec_alpha_num do i = elec_beta_num+1,elec_alpha_num
ref_bitmask_energy += mo_mono_elec_integrals(occ(i,1),occ(i,1)) ref_bitmask_energy += mo_one_e_integrals(occ(i,1),occ(i,1))
kinetic_ref_bitmask_energy += mo_kinetic_integrals(occ(i,1),occ(i,1)) ref_bitmask_kinetic_energy += mo_kinetic_integrals(occ(i,1),occ(i,1))
nucl_elec_ref_bitmask_energy += mo_nucl_elec_integrals(occ(i,1),occ(i,1)) ref_bitmask_e_n_energy += mo_integrals_n_e(occ(i,1),occ(i,1))
enddo enddo
do j= 1, elec_alpha_num do j= 1, elec_alpha_num
do i = j+1, elec_alpha_num do i = j+1, elec_alpha_num
bi_elec_ref_bitmask_energy += mo_bielec_integral_jj_anti(occ(i,1),occ(j,1)) ref_bitmask_two_e_energy += mo_two_e_integrals_jj_anti(occ(i,1),occ(j,1))
ref_bitmask_energy += mo_bielec_integral_jj_anti(occ(i,1),occ(j,1)) ref_bitmask_energy += mo_two_e_integrals_jj_anti(occ(i,1),occ(j,1))
enddo enddo
enddo enddo
do j= 1, elec_beta_num do j= 1, elec_beta_num
do i = j+1, elec_beta_num do i = j+1, elec_beta_num
bi_elec_ref_bitmask_energy += mo_bielec_integral_jj_anti(occ(i,2),occ(j,2)) ref_bitmask_two_e_energy += mo_two_e_integrals_jj_anti(occ(i,2),occ(j,2))
ref_bitmask_energy += mo_bielec_integral_jj_anti(occ(i,2),occ(j,2)) ref_bitmask_energy += mo_two_e_integrals_jj_anti(occ(i,2),occ(j,2))
enddo enddo
do i= 1, elec_alpha_num do i= 1, elec_alpha_num
bi_elec_ref_bitmask_energy += mo_bielec_integral_jj(occ(i,1),occ(j,2)) ref_bitmask_two_e_energy += mo_two_e_integrals_jj(occ(i,1),occ(j,2))
ref_bitmask_energy += mo_bielec_integral_jj(occ(i,1),occ(j,2)) ref_bitmask_energy += mo_two_e_integrals_jj(occ(i,1),occ(j,2))
enddo enddo
enddo enddo
mono_elec_ref_bitmask_energy = kinetic_ref_bitmask_energy + nucl_elec_ref_bitmask_energy ref_bitmask_one_e_energy = ref_bitmask_kinetic_energy + ref_bitmask_e_n_energy
END_PROVIDER END_PROVIDER

View File

@ -44,16 +44,16 @@ BEGIN_PROVIDER [double precision, fock_operator_closed_shell_ref_bitmask, (mo_nu
i=occ(i0,1) i=occ(i0,1)
do j0 = 1, n_occ_ab_virt(1) do j0 = 1, n_occ_ab_virt(1)
j = occ_virt(j0,1) j = occ_virt(j0,1)
call get_mo_bielec_integrals_coulomb_ii(i,j,mo_num,array_coulomb,mo_integrals_map) call get_mo_two_e_integrals_coulomb_ii(i,j,mo_num,array_coulomb,mo_integrals_map)
call get_mo_bielec_integrals_exch_ii(i,j,mo_num,array_exchange,mo_integrals_map) call get_mo_two_e_integrals_exch_ii(i,j,mo_num,array_exchange,mo_integrals_map)
double precision :: accu double precision :: accu
accu = 0.d0 accu = 0.d0
do k0 = 1, n_occ_ab(1) do k0 = 1, n_occ_ab(1)
k = occ(k0,1) k = occ(k0,1)
accu += 2.d0 * array_coulomb(k) - array_exchange(k) accu += 2.d0 * array_coulomb(k) - array_exchange(k)
enddo enddo
fock_operator_closed_shell_ref_bitmask(i,j) = accu + mo_mono_elec_integrals(i,j) fock_operator_closed_shell_ref_bitmask(i,j) = accu + mo_one_e_integrals(i,j)
fock_operator_closed_shell_ref_bitmask(j,i) = accu + mo_mono_elec_integrals(i,j) fock_operator_closed_shell_ref_bitmask(j,i) = accu + mo_one_e_integrals(i,j)
enddo enddo
enddo enddo
@ -62,15 +62,15 @@ BEGIN_PROVIDER [double precision, fock_operator_closed_shell_ref_bitmask, (mo_nu
i=occ_virt(i0,1) i=occ_virt(i0,1)
do j0 = 1, n_occ_ab_virt(1) do j0 = 1, n_occ_ab_virt(1)
j = occ_virt(j0,1) j = occ_virt(j0,1)
call get_mo_bielec_integrals_coulomb_ii(i,j,mo_num,array_coulomb,mo_integrals_map) call get_mo_two_e_integrals_coulomb_ii(i,j,mo_num,array_coulomb,mo_integrals_map)
call get_mo_bielec_integrals_exch_ii(i,j,mo_num,array_exchange,mo_integrals_map) call get_mo_two_e_integrals_exch_ii(i,j,mo_num,array_exchange,mo_integrals_map)
accu = 0.d0 accu = 0.d0
do k0 = 1, n_occ_ab(1) do k0 = 1, n_occ_ab(1)
k = occ(k0,1) k = occ(k0,1)
accu += 2.d0 * array_coulomb(k) - array_exchange(k) accu += 2.d0 * array_coulomb(k) - array_exchange(k)
enddo enddo
fock_operator_closed_shell_ref_bitmask(i,j) = accu+ mo_mono_elec_integrals(i,j) fock_operator_closed_shell_ref_bitmask(i,j) = accu+ mo_one_e_integrals(i,j)
fock_operator_closed_shell_ref_bitmask(j,i) = accu+ mo_mono_elec_integrals(i,j) fock_operator_closed_shell_ref_bitmask(j,i) = accu+ mo_one_e_integrals(i,j)
enddo enddo
enddo enddo
@ -79,15 +79,15 @@ BEGIN_PROVIDER [double precision, fock_operator_closed_shell_ref_bitmask, (mo_nu
i=occ(i0,1) i=occ(i0,1)
do j0 = 1, n_occ_ab(1) do j0 = 1, n_occ_ab(1)
j = occ(j0,1) j = occ(j0,1)
call get_mo_bielec_integrals_coulomb_ii(i,j,mo_num,array_coulomb,mo_integrals_map) call get_mo_two_e_integrals_coulomb_ii(i,j,mo_num,array_coulomb,mo_integrals_map)
call get_mo_bielec_integrals_exch_ii(i,j,mo_num,array_exchange,mo_integrals_map) call get_mo_two_e_integrals_exch_ii(i,j,mo_num,array_exchange,mo_integrals_map)
accu = 0.d0 accu = 0.d0
do k0 = 1, n_occ_ab(1) do k0 = 1, n_occ_ab(1)
k = occ(k0,1) k = occ(k0,1)
accu += 2.d0 * array_coulomb(k) - array_exchange(k) accu += 2.d0 * array_coulomb(k) - array_exchange(k)
enddo enddo
fock_operator_closed_shell_ref_bitmask(i,j) = accu+ mo_mono_elec_integrals(i,j) fock_operator_closed_shell_ref_bitmask(i,j) = accu+ mo_one_e_integrals(i,j)
fock_operator_closed_shell_ref_bitmask(j,i) = accu+ mo_mono_elec_integrals(i,j) fock_operator_closed_shell_ref_bitmask(j,i) = accu+ mo_one_e_integrals(i,j)
enddo enddo
enddo enddo
deallocate(array_coulomb,array_exchange) deallocate(array_coulomb,array_exchange)

View File

@ -476,13 +476,13 @@ subroutine i_H_j_s2(key_i,key_j,Nint,hij,s2)
integer :: exc(0:2,2,2) integer :: exc(0:2,2,2)
integer :: degree integer :: degree
double precision :: get_mo_bielec_integral double precision :: get_two_e_integral
integer :: m,n,p,q integer :: m,n,p,q
integer :: i,j,k integer :: i,j,k
integer :: occ(Nint*bit_kind_size,2) integer :: occ(Nint*bit_kind_size,2)
double precision :: diag_H_mat_elem, phase double precision :: diag_H_mat_elem, phase
integer :: n_occ_ab(2) integer :: n_occ_ab(2)
PROVIDE mo_bielec_integrals_in_map mo_integrals_map big_array_exchange_integrals PROVIDE mo_two_e_integrals_in_map mo_integrals_map big_array_exchange_integrals
ASSERT (Nint > 0) ASSERT (Nint > 0)
ASSERT (Nint == N_int) ASSERT (Nint == N_int)
@ -509,7 +509,7 @@ subroutine i_H_j_s2(key_i,key_j,Nint,hij,s2)
else if (exc(1,2,1) ==exc(1,1,2))then else if (exc(1,2,1) ==exc(1,1,2))then
hij = phase * big_array_exchange_integrals(exc(1,2,1),exc(1,1,1),exc(1,2,2)) hij = phase * big_array_exchange_integrals(exc(1,2,1),exc(1,1,1),exc(1,2,2))
else else
hij = phase*get_mo_bielec_integral( & hij = phase*get_two_e_integral( &
exc(1,1,1), & exc(1,1,1), &
exc(1,1,2), & exc(1,1,2), &
exc(1,2,1), & exc(1,2,1), &
@ -517,24 +517,24 @@ subroutine i_H_j_s2(key_i,key_j,Nint,hij,s2)
endif endif
! Double alpha ! Double alpha
else if (exc(0,1,1) == 2) then else if (exc(0,1,1) == 2) then
hij = phase*(get_mo_bielec_integral( & hij = phase*(get_two_e_integral( &
exc(1,1,1), & exc(1,1,1), &
exc(2,1,1), & exc(2,1,1), &
exc(1,2,1), & exc(1,2,1), &
exc(2,2,1) ,mo_integrals_map) - & exc(2,2,1) ,mo_integrals_map) - &
get_mo_bielec_integral( & get_two_e_integral( &
exc(1,1,1), & exc(1,1,1), &
exc(2,1,1), & exc(2,1,1), &
exc(2,2,1), & exc(2,2,1), &
exc(1,2,1) ,mo_integrals_map) ) exc(1,2,1) ,mo_integrals_map) )
! Double beta ! Double beta
else if (exc(0,1,2) == 2) then else if (exc(0,1,2) == 2) then
hij = phase*(get_mo_bielec_integral( & hij = phase*(get_two_e_integral( &
exc(1,1,2), & exc(1,1,2), &
exc(2,1,2), & exc(2,1,2), &
exc(1,2,2), & exc(1,2,2), &
exc(2,2,2) ,mo_integrals_map) - & exc(2,2,2) ,mo_integrals_map) - &
get_mo_bielec_integral( & get_two_e_integral( &
exc(1,1,2), & exc(1,1,2), &
exc(2,1,2), & exc(2,1,2), &
exc(2,2,2), & exc(2,2,2), &
@ -578,13 +578,13 @@ subroutine i_H_j(key_i,key_j,Nint,hij)
integer :: exc(0:2,2,2) integer :: exc(0:2,2,2)
integer :: degree integer :: degree
double precision :: get_mo_bielec_integral double precision :: get_two_e_integral
integer :: m,n,p,q integer :: m,n,p,q
integer :: i,j,k integer :: i,j,k
integer :: occ(Nint*bit_kind_size,2) integer :: occ(Nint*bit_kind_size,2)
double precision :: diag_H_mat_elem, phase double precision :: diag_H_mat_elem, phase
integer :: n_occ_ab(2) integer :: n_occ_ab(2)
PROVIDE mo_bielec_integrals_in_map mo_integrals_map big_array_exchange_integrals PROVIDE mo_two_e_integrals_in_map mo_integrals_map big_array_exchange_integrals
ASSERT (Nint > 0) ASSERT (Nint > 0)
ASSERT (Nint == N_int) ASSERT (Nint == N_int)
@ -608,7 +608,7 @@ subroutine i_H_j(key_i,key_j,Nint,hij)
else if (exc(1,2,1) ==exc(1,1,2))then else if (exc(1,2,1) ==exc(1,1,2))then
hij = phase * big_array_exchange_integrals(exc(1,2,1),exc(1,1,1),exc(1,2,2)) hij = phase * big_array_exchange_integrals(exc(1,2,1),exc(1,1,1),exc(1,2,2))
else else
hij = phase*get_mo_bielec_integral( & hij = phase*get_two_e_integral( &
exc(1,1,1), & exc(1,1,1), &
exc(1,1,2), & exc(1,1,2), &
exc(1,2,1), & exc(1,2,1), &
@ -616,24 +616,24 @@ subroutine i_H_j(key_i,key_j,Nint,hij)
endif endif
else if (exc(0,1,1) == 2) then else if (exc(0,1,1) == 2) then
! Double alpha ! Double alpha
hij = phase*(get_mo_bielec_integral( & hij = phase*(get_two_e_integral( &
exc(1,1,1), & exc(1,1,1), &
exc(2,1,1), & exc(2,1,1), &
exc(1,2,1), & exc(1,2,1), &
exc(2,2,1) ,mo_integrals_map) - & exc(2,2,1) ,mo_integrals_map) - &
get_mo_bielec_integral( & get_two_e_integral( &
exc(1,1,1), & exc(1,1,1), &
exc(2,1,1), & exc(2,1,1), &
exc(2,2,1), & exc(2,2,1), &
exc(1,2,1) ,mo_integrals_map) ) exc(1,2,1) ,mo_integrals_map) )
else if (exc(0,1,2) == 2) then else if (exc(0,1,2) == 2) then
! Double beta ! Double beta
hij = phase*(get_mo_bielec_integral( & hij = phase*(get_two_e_integral( &
exc(1,1,2), & exc(1,1,2), &
exc(2,1,2), & exc(2,1,2), &
exc(1,2,2), & exc(1,2,2), &
exc(2,2,2) ,mo_integrals_map) - & exc(2,2,2) ,mo_integrals_map) - &
get_mo_bielec_integral( & get_two_e_integral( &
exc(1,1,2), & exc(1,1,2), &
exc(2,1,2), & exc(2,1,2), &
exc(2,2,2), & exc(2,2,2), &
@ -677,7 +677,7 @@ subroutine i_H_j_verbose(key_i,key_j,Nint,hij,hmono,hdouble,phase)
integer :: exc(0:2,2,2) integer :: exc(0:2,2,2)
integer :: degree integer :: degree
double precision :: get_mo_bielec_integral double precision :: get_two_e_integral
integer :: m,n,p,q integer :: m,n,p,q
integer :: i,j,k integer :: i,j,k
integer :: occ(Nint*bit_kind_size,2) integer :: occ(Nint*bit_kind_size,2)
@ -685,7 +685,7 @@ subroutine i_H_j_verbose(key_i,key_j,Nint,hij,hmono,hdouble,phase)
integer :: n_occ_ab(2) integer :: n_occ_ab(2)
logical :: has_mipi(Nint*bit_kind_size) logical :: has_mipi(Nint*bit_kind_size)
double precision :: mipi(Nint*bit_kind_size), miip(Nint*bit_kind_size) double precision :: mipi(Nint*bit_kind_size), miip(Nint*bit_kind_size)
PROVIDE mo_bielec_integrals_in_map mo_integrals_map PROVIDE mo_two_e_integrals_in_map mo_integrals_map
ASSERT (Nint > 0) ASSERT (Nint > 0)
ASSERT (Nint == N_int) ASSERT (Nint == N_int)
@ -704,19 +704,19 @@ subroutine i_H_j_verbose(key_i,key_j,Nint,hij,hmono,hdouble,phase)
call get_double_excitation(key_i,key_j,exc,phase,Nint) call get_double_excitation(key_i,key_j,exc,phase,Nint)
if (exc(0,1,1) == 1) then if (exc(0,1,1) == 1) then
! Mono alpha, mono beta ! Mono alpha, mono beta
hij = phase*get_mo_bielec_integral( & hij = phase*get_two_e_integral( &
exc(1,1,1), & exc(1,1,1), &
exc(1,1,2), & exc(1,1,2), &
exc(1,2,1), & exc(1,2,1), &
exc(1,2,2) ,mo_integrals_map) exc(1,2,2) ,mo_integrals_map)
else if (exc(0,1,1) == 2) then else if (exc(0,1,1) == 2) then
! Double alpha ! Double alpha
hij = phase*(get_mo_bielec_integral( & hij = phase*(get_two_e_integral( &
exc(1,1,1), & exc(1,1,1), &
exc(2,1,1), & exc(2,1,1), &
exc(1,2,1), & exc(1,2,1), &
exc(2,2,1) ,mo_integrals_map) - & exc(2,2,1) ,mo_integrals_map) - &
get_mo_bielec_integral( & get_two_e_integral( &
exc(1,1,1), & exc(1,1,1), &
exc(2,1,1), & exc(2,1,1), &
exc(2,2,1), & exc(2,2,1), &
@ -724,12 +724,12 @@ subroutine i_H_j_verbose(key_i,key_j,Nint,hij,hmono,hdouble,phase)
else if (exc(0,1,2) == 2) then else if (exc(0,1,2) == 2) then
! Double beta ! Double beta
hij = phase*(get_mo_bielec_integral( & hij = phase*(get_two_e_integral( &
exc(1,1,2), & exc(1,1,2), &
exc(2,1,2), & exc(2,1,2), &
exc(1,2,2), & exc(1,2,2), &
exc(2,2,2) ,mo_integrals_map) - & exc(2,2,2) ,mo_integrals_map) - &
get_mo_bielec_integral( & get_two_e_integral( &
exc(1,1,2), & exc(1,1,2), &
exc(2,1,2), & exc(2,1,2), &
exc(2,2,2), & exc(2,2,2), &
@ -747,15 +747,15 @@ subroutine i_H_j_verbose(key_i,key_j,Nint,hij,hmono,hdouble,phase)
do k = 1, elec_alpha_num do k = 1, elec_alpha_num
i = occ(k,1) i = occ(k,1)
if (.not.has_mipi(i)) then if (.not.has_mipi(i)) then
mipi(i) = get_mo_bielec_integral(m,i,p,i,mo_integrals_map) mipi(i) = get_two_e_integral(m,i,p,i,mo_integrals_map)
miip(i) = get_mo_bielec_integral(m,i,i,p,mo_integrals_map) miip(i) = get_two_e_integral(m,i,i,p,mo_integrals_map)
has_mipi(i) = .True. has_mipi(i) = .True.
endif endif
enddo enddo
do k = 1, elec_beta_num do k = 1, elec_beta_num
i = occ(k,2) i = occ(k,2)
if (.not.has_mipi(i)) then if (.not.has_mipi(i)) then
mipi(i) = get_mo_bielec_integral(m,i,p,i,mo_integrals_map) mipi(i) = get_two_e_integral(m,i,p,i,mo_integrals_map)
has_mipi(i) = .True. has_mipi(i) = .True.
endif endif
enddo enddo
@ -774,15 +774,15 @@ subroutine i_H_j_verbose(key_i,key_j,Nint,hij,hmono,hdouble,phase)
do k = 1, elec_beta_num do k = 1, elec_beta_num
i = occ(k,2) i = occ(k,2)
if (.not.has_mipi(i)) then if (.not.has_mipi(i)) then
mipi(i) = get_mo_bielec_integral(m,i,p,i,mo_integrals_map) mipi(i) = get_two_e_integral(m,i,p,i,mo_integrals_map)
miip(i) = get_mo_bielec_integral(m,i,i,p,mo_integrals_map) miip(i) = get_two_e_integral(m,i,i,p,mo_integrals_map)
has_mipi(i) = .True. has_mipi(i) = .True.
endif endif
enddo enddo
do k = 1, elec_alpha_num do k = 1, elec_alpha_num
i = occ(k,1) i = occ(k,1)
if (.not.has_mipi(i)) then if (.not.has_mipi(i)) then
mipi(i) = get_mo_bielec_integral(m,i,p,i,mo_integrals_map) mipi(i) = get_two_e_integral(m,i,p,i,mo_integrals_map)
has_mipi(i) = .True. has_mipi(i) = .True.
endif endif
enddo enddo
@ -795,7 +795,7 @@ subroutine i_H_j_verbose(key_i,key_j,Nint,hij,hmono,hdouble,phase)
enddo enddo
endif endif
hmono = mo_mono_elec_integrals(m,p) hmono = mo_one_e_integrals(m,p)
hij = phase*(hdouble + hmono) hij = phase*(hdouble + hmono)
case (0) case (0)
@ -1608,29 +1608,29 @@ double precision function diag_H_mat_elem_fock(det_ref,det_pert,fock_diag_tmp,Ni
if ( (s1 == 1).and.(s2 == 1) ) then ! alpha/alpha if ( (s1 == 1).and.(s2 == 1) ) then ! alpha/alpha
diag_H_mat_elem_fock = E0 & diag_H_mat_elem_fock = E0 &
- fock_diag_tmp(1,h1) & - fock_diag_tmp(1,h1) &
+ ( fock_diag_tmp(1,p1) - mo_bielec_integral_jj_anti(h1,p1) ) & + ( fock_diag_tmp(1,p1) - mo_two_e_integrals_jj_anti(h1,p1) ) &
- ( fock_diag_tmp(1,h2) - mo_bielec_integral_jj_anti(h1,h2) & - ( fock_diag_tmp(1,h2) - mo_two_e_integrals_jj_anti(h1,h2) &
+ mo_bielec_integral_jj_anti(p1,h2) ) & + mo_two_e_integrals_jj_anti(p1,h2) ) &
+ ( fock_diag_tmp(1,p2) - mo_bielec_integral_jj_anti(h1,p2) & + ( fock_diag_tmp(1,p2) - mo_two_e_integrals_jj_anti(h1,p2) &
+ mo_bielec_integral_jj_anti(p1,p2) - mo_bielec_integral_jj_anti(h2,p2) ) + mo_two_e_integrals_jj_anti(p1,p2) - mo_two_e_integrals_jj_anti(h2,p2) )
else if ( (s1 == 2).and.(s2 == 2) ) then ! beta/beta else if ( (s1 == 2).and.(s2 == 2) ) then ! beta/beta
diag_H_mat_elem_fock = E0 & diag_H_mat_elem_fock = E0 &
- fock_diag_tmp(2,h1) & - fock_diag_tmp(2,h1) &
+ ( fock_diag_tmp(2,p1) - mo_bielec_integral_jj_anti(h1,p1) ) & + ( fock_diag_tmp(2,p1) - mo_two_e_integrals_jj_anti(h1,p1) ) &
- ( fock_diag_tmp(2,h2) - mo_bielec_integral_jj_anti(h1,h2) & - ( fock_diag_tmp(2,h2) - mo_two_e_integrals_jj_anti(h1,h2) &
+ mo_bielec_integral_jj_anti(p1,h2) ) & + mo_two_e_integrals_jj_anti(p1,h2) ) &
+ ( fock_diag_tmp(2,p2) - mo_bielec_integral_jj_anti(h1,p2) & + ( fock_diag_tmp(2,p2) - mo_two_e_integrals_jj_anti(h1,p2) &
+ mo_bielec_integral_jj_anti(p1,p2) - mo_bielec_integral_jj_anti(h2,p2) ) + mo_two_e_integrals_jj_anti(p1,p2) - mo_two_e_integrals_jj_anti(h2,p2) )
else ! alpha/beta else ! alpha/beta
diag_H_mat_elem_fock = E0 & diag_H_mat_elem_fock = E0 &
- fock_diag_tmp(1,h1) & - fock_diag_tmp(1,h1) &
+ ( fock_diag_tmp(1,p1) - mo_bielec_integral_jj_anti(h1,p1) ) & + ( fock_diag_tmp(1,p1) - mo_two_e_integrals_jj_anti(h1,p1) ) &
- ( fock_diag_tmp(2,h2) - mo_bielec_integral_jj(h1,h2) & - ( fock_diag_tmp(2,h2) - mo_two_e_integrals_jj(h1,h2) &
+ mo_bielec_integral_jj(p1,h2) ) & + mo_two_e_integrals_jj(p1,h2) ) &
+ ( fock_diag_tmp(2,p2) - mo_bielec_integral_jj(h1,p2) & + ( fock_diag_tmp(2,p2) - mo_two_e_integrals_jj(h1,p2) &
+ mo_bielec_integral_jj(p1,p2) - mo_bielec_integral_jj_anti(h2,p2) ) + mo_two_e_integrals_jj(p1,p2) - mo_two_e_integrals_jj_anti(h2,p2) )
endif endif
@ -1639,10 +1639,10 @@ double precision function diag_H_mat_elem_fock(det_ref,det_pert,fock_diag_tmp,Ni
call decode_exc(exc,1,h1,p1,h2,p2,s1,s2) call decode_exc(exc,1,h1,p1,h2,p2,s1,s2)
if (s1 == 1) then if (s1 == 1) then
diag_H_mat_elem_fock = E0 - fock_diag_tmp(1,h1) & diag_H_mat_elem_fock = E0 - fock_diag_tmp(1,h1) &
+ ( fock_diag_tmp(1,p1) - mo_bielec_integral_jj_anti(h1,p1) ) + ( fock_diag_tmp(1,p1) - mo_two_e_integrals_jj_anti(h1,p1) )
else else
diag_H_mat_elem_fock = E0 - fock_diag_tmp(2,h1) & diag_H_mat_elem_fock = E0 - fock_diag_tmp(2,h1) &
+ ( fock_diag_tmp(2,p1) - mo_bielec_integral_jj_anti(h1,p1) ) + ( fock_diag_tmp(2,p1) - mo_two_e_integrals_jj_anti(h1,p1) )
endif endif
else if (degree == 0) then else if (degree == 0) then
@ -1745,16 +1745,16 @@ subroutine a_operator(iorb,ispin,key,hjj,Nint,na,nb)
call bitstring_to_list_ab(key, occ, tmp, Nint) call bitstring_to_list_ab(key, occ, tmp, Nint)
na = na-1 na = na-1
hjj = hjj - mo_mono_elec_integrals(iorb,iorb) hjj = hjj - mo_one_e_integrals(iorb,iorb)
! Same spin ! Same spin
do i=1,na do i=1,na
hjj = hjj - mo_bielec_integral_jj_anti(occ(i,ispin),iorb) hjj = hjj - mo_two_e_integrals_jj_anti(occ(i,ispin),iorb)
enddo enddo
! Opposite spin ! Opposite spin
do i=1,nb do i=1,nb
hjj = hjj - mo_bielec_integral_jj(occ(i,other_spin),iorb) hjj = hjj - mo_two_e_integrals_jj(occ(i,other_spin),iorb)
enddo enddo
end end
@ -1798,16 +1798,16 @@ subroutine ac_operator(iorb,ispin,key,hjj,Nint,na,nb)
! print *, iorb, mo_num ! print *, iorb, mo_num
! stop -1 ! stop -1
! endif ! endif
hjj = hjj + mo_mono_elec_integrals(iorb,iorb) hjj = hjj + mo_one_e_integrals(iorb,iorb)
! Same spin ! Same spin
do i=1,na do i=1,na
hjj = hjj + mo_bielec_integral_jj_anti(occ(i,ispin),iorb) hjj = hjj + mo_two_e_integrals_jj_anti(occ(i,ispin),iorb)
enddo enddo
! Opposite spin ! Opposite spin
do i=1,nb do i=1,nb
hjj = hjj + mo_bielec_integral_jj(occ(i,other_spin),iorb) hjj = hjj + mo_two_e_integrals_jj(occ(i,other_spin),iorb)
enddo enddo
na = na+1 na = na+1
end end
@ -2183,7 +2183,7 @@ subroutine i_H_j_mono_spin(key_i,key_j,Nint,spin,hij)
integer :: exc(0:2,2) integer :: exc(0:2,2)
double precision :: phase double precision :: phase
PROVIDE big_array_exchange_integrals mo_bielec_integrals_in_map PROVIDE big_array_exchange_integrals mo_two_e_integrals_in_map
call get_mono_excitation_spin(key_i(1,spin),key_j(1,spin),exc,phase,Nint) call get_mono_excitation_spin(key_i(1,spin),key_j(1,spin),exc,phase,Nint)
call get_mono_excitation_from_fock(key_i,key_j,exc(1,1),exc(1,2),spin,phase,hij) call get_mono_excitation_from_fock(key_i,key_j,exc(1,1),exc(1,2),spin,phase,hij)
@ -2202,16 +2202,16 @@ subroutine i_H_j_double_spin(key_i,key_j,Nint,hij)
integer :: exc(0:2,2) integer :: exc(0:2,2)
double precision :: phase double precision :: phase
double precision, external :: get_mo_bielec_integral double precision, external :: get_two_e_integral
PROVIDE big_array_exchange_integrals mo_bielec_integrals_in_map PROVIDE big_array_exchange_integrals mo_two_e_integrals_in_map
call get_double_excitation_spin(key_i,key_j,exc,phase,Nint) call get_double_excitation_spin(key_i,key_j,exc,phase,Nint)
hij = phase*(get_mo_bielec_integral( & hij = phase*(get_two_e_integral( &
exc(1,1), & exc(1,1), &
exc(2,1), & exc(2,1), &
exc(1,2), & exc(1,2), &
exc(2,2), mo_integrals_map) - & exc(2,2), mo_integrals_map) - &
get_mo_bielec_integral( & get_two_e_integral( &
exc(1,1), & exc(1,1), &
exc(2,1), & exc(2,1), &
exc(2,2), & exc(2,2), &
@ -2231,9 +2231,9 @@ subroutine i_H_j_double_alpha_beta(key_i,key_j,Nint,hij)
integer :: exc(0:2,2,2) integer :: exc(0:2,2,2)
double precision :: phase, phase2 double precision :: phase, phase2
double precision, external :: get_mo_bielec_integral double precision, external :: get_two_e_integral
PROVIDE big_array_exchange_integrals mo_bielec_integrals_in_map PROVIDE big_array_exchange_integrals mo_two_e_integrals_in_map
call get_mono_excitation_spin(key_i(1,1),key_j(1,1),exc(0,1,1),phase,Nint) call get_mono_excitation_spin(key_i(1,1),key_j(1,1),exc(0,1,1),phase,Nint)
call get_mono_excitation_spin(key_i(1,2),key_j(1,2),exc(0,1,2),phase2,Nint) call get_mono_excitation_spin(key_i(1,2),key_j(1,2),exc(0,1,2),phase2,Nint)
@ -2243,7 +2243,7 @@ subroutine i_H_j_double_alpha_beta(key_i,key_j,Nint,hij)
else if (exc(1,2,1) == exc(1,1,2)) then else if (exc(1,2,1) == exc(1,1,2)) then
hij = phase * big_array_exchange_integrals(exc(1,2,1),exc(1,1,1),exc(1,2,2)) hij = phase * big_array_exchange_integrals(exc(1,2,1),exc(1,1,1),exc(1,2,2))
else else
hij = phase*get_mo_bielec_integral( & hij = phase*get_two_e_integral( &
exc(1,1,1), & exc(1,1,1), &
exc(1,1,2), & exc(1,1,2), &
exc(1,2,1), & exc(1,2,1), &

View File

@ -13,7 +13,7 @@ subroutine i_Wee_j_mono(key_i,key_j,Nint,spin,hij)
integer :: exc(0:2,2) integer :: exc(0:2,2)
double precision :: phase double precision :: phase
PROVIDE big_array_exchange_integrals mo_bielec_integrals_in_map PROVIDE big_array_exchange_integrals mo_two_e_integrals_in_map
call get_mono_excitation_spin(key_i(1,spin),key_j(1,spin),exc,phase,Nint) call get_mono_excitation_spin(key_i(1,spin),key_j(1,spin),exc,phase,Nint)
call mono_excitation_wee(key_i,key_j,exc(1,1),exc(1,2),spin,phase,hij) call mono_excitation_wee(key_i,key_j,exc(1,1),exc(1,2),spin,phase,hij)
@ -53,7 +53,7 @@ double precision function diag_wee_mat_elem(det_in,Nint)
nexc(2) = nexc(2) + popcnt(hole(i,2)) nexc(2) = nexc(2) + popcnt(hole(i,2))
enddo enddo
diag_wee_mat_elem = bi_elec_ref_bitmask_energy diag_wee_mat_elem = ref_bitmask_two_e_energy
if (nexc(1)+nexc(2) == 0) then if (nexc(1)+nexc(2) == 0) then
return return
endif endif
@ -75,15 +75,15 @@ double precision function diag_wee_mat_elem(det_in,Nint)
nb = elec_num_tab(iand(ispin,1)+1) nb = elec_num_tab(iand(ispin,1)+1)
do i=1,nexc(ispin) do i=1,nexc(ispin)
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
call ac_operator_bielec( occ_particle(i,ispin), ispin, det_tmp, diag_wee_mat_elem, Nint,na,nb) call ac_operator_two_e( occ_particle(i,ispin), ispin, det_tmp, diag_wee_mat_elem, Nint,na,nb)
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
call a_operator_bielec ( occ_hole (i,ispin), ispin, det_tmp, diag_wee_mat_elem, Nint,na,nb) call a_operator_two_e ( occ_hole (i,ispin), ispin, det_tmp, diag_wee_mat_elem, Nint,na,nb)
enddo enddo
enddo enddo
end end
subroutine a_operator_bielec(iorb,ispin,key,hjj,Nint,na,nb) subroutine a_operator_two_e(iorb,ispin,key,hjj,Nint,na,nb)
use bitmasks use bitmasks
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -116,18 +116,18 @@ subroutine a_operator_bielec(iorb,ispin,key,hjj,Nint,na,nb)
! Same spin ! Same spin
do i=1,na do i=1,na
hjj = hjj - mo_bielec_integral_jj_anti(occ(i,ispin),iorb) hjj = hjj - mo_two_e_integrals_jj_anti(occ(i,ispin),iorb)
enddo enddo
! Opposite spin ! Opposite spin
do i=1,nb do i=1,nb
hjj = hjj - mo_bielec_integral_jj(occ(i,other_spin),iorb) hjj = hjj - mo_two_e_integrals_jj(occ(i,other_spin),iorb)
enddo enddo
end end
subroutine ac_operator_bielec(iorb,ispin,key,hjj,Nint,na,nb) subroutine ac_operator_two_e(iorb,ispin,key,hjj,Nint,na,nb)
use bitmasks use bitmasks
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -162,19 +162,19 @@ subroutine ac_operator_bielec(iorb,ispin,key,hjj,Nint,na,nb)
! Same spin ! Same spin
do i=1,na do i=1,na
hjj = hjj + mo_bielec_integral_jj_anti(occ(i,ispin),iorb) hjj = hjj + mo_two_e_integrals_jj_anti(occ(i,ispin),iorb)
enddo enddo
! Opposite spin ! Opposite spin
do i=1,nb do i=1,nb
hjj = hjj + mo_bielec_integral_jj(occ(i,other_spin),iorb) hjj = hjj + mo_two_e_integrals_jj(occ(i,other_spin),iorb)
enddo enddo
na = na+1 na = na+1
end end
subroutine i_H_j_mono_spin_monoelec(key_i,key_j,Nint,spin,hij) subroutine i_H_j_mono_spin_one_e(key_i,key_j,Nint,spin,hij)
use bitmasks use bitmasks
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -192,11 +192,11 @@ subroutine i_H_j_mono_spin_monoelec(key_i,key_j,Nint,spin,hij)
integer :: m,p integer :: m,p
m = exc(1,1) m = exc(1,1)
p = exc(1,2) p = exc(1,2)
hij = phase * mo_mono_elec_integrals(m,p) hij = phase * mo_one_e_integrals(m,p)
end end
double precision function diag_H_mat_elem_monoelec(det_in,Nint) double precision function diag_H_mat_elem_one_e(det_in,Nint)
use bitmasks use bitmasks
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -217,7 +217,7 @@ double precision function diag_H_mat_elem_monoelec(det_in,Nint)
ASSERT (sum(popcnt(det_in(:,1))) == elec_alpha_num) ASSERT (sum(popcnt(det_in(:,1))) == elec_alpha_num)
ASSERT (sum(popcnt(det_in(:,2))) == elec_beta_num) ASSERT (sum(popcnt(det_in(:,2))) == elec_beta_num)
diag_H_mat_elem_monoelec = 0.d0 diag_H_mat_elem_one_e = 0.d0
!call debug_det(det_in,Nint) !call debug_det(det_in,Nint)
integer :: tmp(2) integer :: tmp(2)
@ -225,13 +225,13 @@ double precision function diag_H_mat_elem_monoelec(det_in,Nint)
call bitstring_to_list_ab(det_in, occ_particle, tmp, Nint) call bitstring_to_list_ab(det_in, occ_particle, tmp, Nint)
do ispin = 1,2 do ispin = 1,2
do i = 1, tmp(ispin) do i = 1, tmp(ispin)
diag_H_mat_elem_monoelec += mo_mono_elec_integrals(occ_particle(i,ispin),occ_particle(i,ispin)) diag_H_mat_elem_one_e += mo_one_e_integrals(occ_particle(i,ispin),occ_particle(i,ispin))
enddo enddo
enddo enddo
end end
subroutine i_H_j_monoelec(key_i,key_j,Nint,hij) subroutine i_H_j_one_e(key_i,key_j,Nint,hij)
use bitmasks use bitmasks
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -242,7 +242,7 @@ subroutine i_H_j_monoelec(key_i,key_j,Nint,hij)
double precision, intent(out) :: hij double precision, intent(out) :: hij
integer :: degree,m,p integer :: degree,m,p
double precision :: diag_H_mat_elem_monoelec,phase double precision :: diag_H_mat_elem_one_e,phase
integer :: exc(0:2,2,2) integer :: exc(0:2,2,2)
call get_excitation_degree(key_i,key_j,degree,Nint) call get_excitation_degree(key_i,key_j,degree,Nint)
hij = 0.d0 hij = 0.d0
@ -250,7 +250,7 @@ subroutine i_H_j_monoelec(key_i,key_j,Nint,hij)
return return
endif endif
if(degree==0)then if(degree==0)then
hij = diag_H_mat_elem_monoelec(key_i,N_int) hij = diag_H_mat_elem_one_e(key_i,N_int)
else else
call get_mono_excitation(key_i,key_j,exc,phase,Nint) call get_mono_excitation(key_i,key_j,exc,phase,Nint)
if (exc(0,1,1) == 1) then if (exc(0,1,1) == 1) then
@ -262,12 +262,12 @@ subroutine i_H_j_monoelec(key_i,key_j,Nint,hij)
m = exc(1,1,2) m = exc(1,1,2)
p = exc(1,2,2) p = exc(1,2,2)
endif endif
hij = phase * mo_mono_elec_integrals(m,p) hij = phase * mo_one_e_integrals(m,p)
endif endif
end end
subroutine i_H_j_bielec(key_i,key_j,Nint,hij) subroutine i_H_j_two_e(key_i,key_j,Nint,hij)
use bitmasks use bitmasks
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -279,13 +279,13 @@ subroutine i_H_j_bielec(key_i,key_j,Nint,hij)
integer :: exc(0:2,2,2) integer :: exc(0:2,2,2)
integer :: degree integer :: degree
double precision :: get_mo_bielec_integral double precision :: get_two_e_integral
integer :: m,n,p,q integer :: m,n,p,q
integer :: i,j,k integer :: i,j,k
integer :: occ(Nint*bit_kind_size,2) integer :: occ(Nint*bit_kind_size,2)
double precision :: diag_H_mat_elem, phase,phase_2 double precision :: diag_H_mat_elem, phase,phase_2
integer :: n_occ_ab(2) integer :: n_occ_ab(2)
PROVIDE mo_bielec_integrals_in_map mo_integrals_map big_array_exchange_integrals bi_elec_ref_bitmask_energy PROVIDE mo_two_e_integrals_in_map mo_integrals_map big_array_exchange_integrals ref_bitmask_two_e_energy
ASSERT (Nint > 0) ASSERT (Nint > 0)
ASSERT (Nint == N_int) ASSERT (Nint == N_int)
@ -308,7 +308,7 @@ subroutine i_H_j_bielec(key_i,key_j,Nint,hij)
else if (exc(1,2,1) ==exc(1,1,2))then else if (exc(1,2,1) ==exc(1,1,2))then
hij = phase * big_array_exchange_integrals(exc(1,2,1),exc(1,1,1),exc(1,2,2)) hij = phase * big_array_exchange_integrals(exc(1,2,1),exc(1,1,1),exc(1,2,2))
else else
hij = phase*get_mo_bielec_integral( & hij = phase*get_two_e_integral( &
exc(1,1,1), & exc(1,1,1), &
exc(1,1,2), & exc(1,1,2), &
exc(1,2,1), & exc(1,2,1), &
@ -316,24 +316,24 @@ subroutine i_H_j_bielec(key_i,key_j,Nint,hij)
endif endif
else if (exc(0,1,1) == 2) then else if (exc(0,1,1) == 2) then
! Double alpha ! Double alpha
hij = phase*(get_mo_bielec_integral( & hij = phase*(get_two_e_integral( &
exc(1,1,1), & exc(1,1,1), &
exc(2,1,1), & exc(2,1,1), &
exc(1,2,1), & exc(1,2,1), &
exc(2,2,1) ,mo_integrals_map) - & exc(2,2,1) ,mo_integrals_map) - &
get_mo_bielec_integral( & get_two_e_integral( &
exc(1,1,1), & exc(1,1,1), &
exc(2,1,1), & exc(2,1,1), &
exc(2,2,1), & exc(2,2,1), &
exc(1,2,1) ,mo_integrals_map) ) exc(1,2,1) ,mo_integrals_map) )
else if (exc(0,1,2) == 2) then else if (exc(0,1,2) == 2) then
! Double beta ! Double beta
hij = phase*(get_mo_bielec_integral( & hij = phase*(get_two_e_integral( &
exc(1,1,2), & exc(1,1,2), &
exc(2,1,2), & exc(2,1,2), &
exc(1,2,2), & exc(1,2,2), &
exc(2,2,2) ,mo_integrals_map) - & exc(2,2,2) ,mo_integrals_map) - &
get_mo_bielec_integral( & get_two_e_integral( &
exc(1,1,2), & exc(1,1,2), &
exc(2,1,2), & exc(2,1,2), &
exc(2,2,2), & exc(2,2,2), &

View File

@ -13,7 +13,7 @@
do i = 1, mo_num do i = 1, mo_num
do j = 1, mo_num do j = 1, mo_num
psi_dft_energy_kinetic(istate) += ( one_body_dm_mo_alpha_for_dft(j,i,istate)+one_body_dm_mo_beta_for_dft(j,i,istate)) * mo_kinetic_integrals(j,i) psi_dft_energy_kinetic(istate) += ( one_body_dm_mo_alpha_for_dft(j,i,istate)+one_body_dm_mo_beta_for_dft(j,i,istate)) * mo_kinetic_integrals(j,i)
psi_dft_energy_nuclear_elec(istate) += ( one_body_dm_mo_alpha_for_dft(j,i,istate)+one_body_dm_mo_beta_for_dft(j,i,istate)) * mo_nucl_elec_integrals(j,i) psi_dft_energy_nuclear_elec(istate) += ( one_body_dm_mo_alpha_for_dft(j,i,istate)+one_body_dm_mo_beta_for_dft(j,i,istate)) * mo_integrals_n_e(j,i)
enddo enddo
enddo enddo
enddo enddo

View File

@ -9,7 +9,7 @@
! = $1/2 \int dr \int r' \rho(r) \rho(r') W_{ee}^{sr}$ ! = $1/2 \int dr \int r' \rho(r) \rho(r') W_{ee}^{sr}$
END_DOC END_DOC
integer :: i,j,k,l,m,n,istate integer :: i,j,k,l,m,n,istate
double precision :: get_mo_bielec_integral,get_mo_bielec_integral_erf double precision :: get_two_e_integral,get_mo_two_e_integral_erf
double precision :: integral, integral_erf, contrib double precision :: integral, integral_erf, contrib
double precision :: integrals_array(mo_num,mo_num),integrals_erf_array(mo_num,mo_num) double precision :: integrals_array(mo_num,mo_num),integrals_erf_array(mo_num,mo_num)
short_range_Hartree_operator = 0.d0 short_range_Hartree_operator = 0.d0
@ -17,8 +17,8 @@
do i = 1, mo_num do i = 1, mo_num
do j = 1, mo_num do j = 1, mo_num
if(dabs(one_body_dm_average_mo_for_dft(j,i)).le.1.d-12)cycle if(dabs(one_body_dm_average_mo_for_dft(j,i)).le.1.d-12)cycle
call get_mo_bielec_integrals_i1j1(i,j,mo_num,integrals_array,mo_integrals_map) call get_mo_two_e_integrals_i1j1(i,j,mo_num,integrals_array,mo_integrals_map)
call get_mo_bielec_integrals_erf_i1j1(i,j,mo_num,integrals_erf_array,mo_integrals_erf_map) call get_mo_two_e_integrals_erf_i1j1(i,j,mo_num,integrals_erf_array,mo_integrals_erf_map)
do istate = 1, N_states do istate = 1, N_states
do k = 1, mo_num do k = 1, mo_num
do l = 1, mo_num do l = 1, mo_num
@ -54,10 +54,10 @@ END_PROVIDER
do istate = 1, N_states do istate = 1, N_states
do i = 1, mo_num do i = 1, mo_num
do j = 1, mo_num do j = 1, mo_num
effective_one_e_potential(i,j,istate) = short_range_Hartree_operator(i,j,istate) + mo_nucl_elec_integrals(i,j) + mo_kinetic_integrals(i,j) & effective_one_e_potential(i,j,istate) = short_range_Hartree_operator(i,j,istate) + mo_integrals_n_e(i,j) + mo_kinetic_integrals(i,j) &
+ 0.5d0 * (potential_x_alpha_mo(i,j,istate) + potential_c_alpha_mo(i,j,istate) & + 0.5d0 * (potential_x_alpha_mo(i,j,istate) + potential_c_alpha_mo(i,j,istate) &
+ potential_x_beta_mo(i,j,istate) + potential_c_beta_mo(i,j,istate) ) + potential_x_beta_mo(i,j,istate) + potential_c_beta_mo(i,j,istate) )
effective_one_e_potential_without_kin(i,j,istate) = short_range_Hartree_operator(i,j,istate) + mo_nucl_elec_integrals(i,j) & effective_one_e_potential_without_kin(i,j,istate) = short_range_Hartree_operator(i,j,istate) + mo_integrals_n_e(i,j) &
+ 0.5d0 * (potential_x_alpha_mo(i,j,istate) + potential_c_alpha_mo(i,j,istate) & + 0.5d0 * (potential_x_alpha_mo(i,j,istate) + potential_c_alpha_mo(i,j,istate) &
+ potential_x_beta_mo(i,j,istate) + potential_c_beta_mo(i,j,istate) ) + potential_x_beta_mo(i,j,istate) + potential_c_beta_mo(i,j,istate) )
enddo enddo

View File

@ -722,7 +722,7 @@ subroutine get_d2(i_gen, gen, banned, bannedOrb, indexes, abuf, mask, h, p, sp)
integer, intent(in) :: h(0:2,2), p(0:4,2), sp integer, intent(in) :: h(0:2,2), p(0:4,2), sp
!double precision, external :: get_phase_bi !double precision, external :: get_phase_bi
double precision, external :: mo_bielec_integral double precision, external :: mo_two_e_integral
integer :: i, j, tip, ma, mi, puti, putj integer :: i, j, tip, ma, mi, puti, putj
integer :: h1, h2, p1, p2, i1, i2 integer :: h1, h2, p1, p2, i1, i2
@ -758,7 +758,7 @@ subroutine get_d2(i_gen, gen, banned, bannedOrb, indexes, abuf, mask, h, p, sp)
!h1 = h(1, ma) !h1 = h(1, ma)
!h2 = h(2, ma) !h2 = h(2, ma)
!hij = (mo_bielec_integral(p1, p2, h1, h2) - mo_bielec_integral(p2,p1, h1, h2)) * get_phase_bi(phasemask, ma, ma, h1, p1, h2, p2) !hij = (mo_two_e_integral(p1, p2, h1, h2) - mo_two_e_integral(p2,p1, h1, h2)) * get_phase_bi(phasemask, ma, ma, h1, p1, h2, p2)
if(ma == 1) then if(ma == 1) then
abuf(indexes(putj, puti)) = i_gen abuf(indexes(putj, puti)) = i_gen
indexes(putj, puti) += 1 indexes(putj, puti) += 1
@ -779,7 +779,7 @@ subroutine get_d2(i_gen, gen, banned, bannedOrb, indexes, abuf, mask, h, p, sp)
if(banned(puti,putj,bant)) cycle if(banned(puti,putj,bant)) cycle
!p1 = p(turn2(i), 1) !p1 = p(turn2(i), 1)
!hij = mo_bielec_integral(p1, p2, h1, h2) * get_phase_bi(phasemask, 1, 2, h1, p1, h2, p2) !hij = mo_two_e_integral(p1, p2, h1, h2) * get_phase_bi(phasemask, 1, 2, h1, p1, h2, p2)
abuf(indexes(puti, putj)) = i_gen abuf(indexes(puti, putj)) = i_gen
indexes(puti, putj) += 1 indexes(puti, putj) += 1
@ -801,7 +801,7 @@ subroutine get_d2(i_gen, gen, banned, bannedOrb, indexes, abuf, mask, h, p, sp)
!i2 = turn2d(2, i, j) !i2 = turn2d(2, i, j)
!p1 = p(i1, ma) !p1 = p(i1, ma)
!p2 = p(i2, ma) !p2 = p(i2, ma)
!hij = (mo_bielec_integral(p1, p2, h1, h2) - mo_bielec_integral(p2,p1, h1, h2)) * get_phase_bi(phasemask, ma, ma, h1, p1, h2, p2) !hij = (mo_two_e_integral(p1, p2, h1, h2) - mo_two_e_integral(p2,p1, h1, h2)) * get_phase_bi(phasemask, ma, ma, h1, p1, h2, p2)
abuf(indexes(puti, putj)) = i_gen abuf(indexes(puti, putj)) = i_gen
indexes(puti, putj) += 1 indexes(puti, putj) += 1
end do end do
@ -816,7 +816,7 @@ subroutine get_d2(i_gen, gen, banned, bannedOrb, indexes, abuf, mask, h, p, sp)
if(banned(puti,putj,1)) cycle if(banned(puti,putj,1)) cycle
!p2 = p(i, ma) !p2 = p(i, ma)
!hij = mo_bielec_integral(p1, p2, h1, h2) * get_phase_bi(phasemask, mi, ma, h1, p1, h2, p2) !hij = mo_two_e_integral(p1, p2, h1, h2) * get_phase_bi(phasemask, mi, ma, h1, p1, h2, p2)
abuf(indexes(min(puti, putj), max(puti, putj))) = i_gen abuf(indexes(min(puti, putj), max(puti, putj))) = i_gen
indexes(min(puti, putj), max(puti, putj)) += 1 indexes(min(puti, putj), max(puti, putj)) += 1
end do end do
@ -828,7 +828,7 @@ subroutine get_d2(i_gen, gen, banned, bannedOrb, indexes, abuf, mask, h, p, sp)
!p2 = p(2, mi) !p2 = p(2, mi)
!h1 = h(1, mi) !h1 = h(1, mi)
!h2 = h(2, mi) !h2 = h(2, mi)
!hij = (mo_bielec_integral(p1, p2, h1, h2) - mo_bielec_integral(p2,p1, h1, h2)) * get_phase_bi(phasemask, mi, mi, h1, p1, h2, p2) !hij = (mo_two_e_integral(p1, p2, h1, h2) - mo_two_e_integral(p2,p1, h1, h2)) * get_phase_bi(phasemask, mi, mi, h1, p1, h2, p2)
abuf(indexes(puti, putj)) = i_gen abuf(indexes(puti, putj)) = i_gen
indexes(puti, putj) += 1 indexes(puti, putj) += 1
@ -851,7 +851,7 @@ subroutine get_d1(i_gen, gen, banned, bannedOrb, indexes, abuf, mask, h, p, sp)
integer, intent(in) :: h(0:2,2), p(0:4,2), sp integer, intent(in) :: h(0:2,2), p(0:4,2), sp
double precision :: hij, tmp_row(N_states, mo_num), tmp_row2(N_states, mo_num) double precision :: hij, tmp_row(N_states, mo_num), tmp_row2(N_states, mo_num)
!double precision, external :: get_phase_bi !double precision, external :: get_phase_bi
double precision, external :: mo_bielec_integral double precision, external :: mo_two_e_integral
logical :: ok logical :: ok
logical, allocatable :: lbanned(:,:) logical, allocatable :: lbanned(:,:)
@ -892,12 +892,12 @@ subroutine get_d1(i_gen, gen, banned, bannedOrb, indexes, abuf, mask, h, p, sp)
!tmp_row = 0d0 !tmp_row = 0d0
!do putj=1, hfix-1 !do putj=1, hfix-1
! if(lbanned(putj, ma) .or. banned(putj, puti,bant)) cycle ! if(lbanned(putj, ma) .or. banned(putj, puti,bant)) cycle
! hij = (mo_bielec_integral(p1, p2, putj, hfix)-mo_bielec_integral(p2,p1,putj,hfix)) * get_phase_bi(phasemask, ma, ma, putj, p1, hfix, p2) ! hij = (mo_two_e_integral(p1, p2, putj, hfix)-mo_two_e_integral(p2,p1,putj,hfix)) * get_phase_bi(phasemask, ma, ma, putj, p1, hfix, p2)
! tmp_row(1:N_states,putj) += hij * coefs(1:N_states) ! tmp_row(1:N_states,putj) += hij * coefs(1:N_states)
!end do !end do
!do putj=hfix+1, mo_num !do putj=hfix+1, mo_num
! if(lbanned(putj, ma) .or. banned(putj, puti,bant)) cycle ! if(lbanned(putj, ma) .or. banned(putj, puti,bant)) cycle
! hij = (mo_bielec_integral(p1, p2, hfix, putj)-mo_bielec_integral(p2,p1,hfix,putj)) * get_phase_bi(phasemask, ma, ma, hfix, p1, putj, p2) ! hij = (mo_two_e_integral(p1, p2, hfix, putj)-mo_two_e_integral(p2,p1,hfix,putj)) * get_phase_bi(phasemask, ma, ma, hfix, p1, putj, p2)
! tmp_row(1:N_states,putj) += hij * coefs(1:N_states) ! tmp_row(1:N_states,putj) += hij * coefs(1:N_states)
!end do !end do
@ -923,13 +923,13 @@ subroutine get_d1(i_gen, gen, banned, bannedOrb, indexes, abuf, mask, h, p, sp)
!p1 fixed !p1 fixed
! putj = p1 ! putj = p1
!if(.not. banned(putj,puti,bant)) then !if(.not. banned(putj,puti,bant)) then
! hij = mo_bielec_integral(p2,pfix,hfix,puti) * get_phase_bi(phasemask, ma, mi, hfix, p2, puti, pfix) ! hij = mo_two_e_integral(p2,pfix,hfix,puti) * get_phase_bi(phasemask, ma, mi, hfix, p2, puti, pfix)
! tmp_row(:,puti) += hij * coefs(:) ! tmp_row(:,puti) += hij * coefs(:)
!end if !end if
! putj = p2 ! putj = p2
!if(.not. banned(putj,puti,bant)) then !if(.not. banned(putj,puti,bant)) then
! hij = mo_bielec_integral(p1,pfix,hfix,puti) * get_phase_bi(phasemask, ma, mi, hfix, p1, puti, pfix) ! hij = mo_two_e_integral(p1,pfix,hfix,puti) * get_phase_bi(phasemask, ma, mi, hfix, p1, puti, pfix)
! tmp_row2(:,puti) += hij * coefs(:) ! tmp_row2(:,puti) += hij * coefs(:)
!end if !end if
!end do !end do
@ -963,12 +963,12 @@ subroutine get_d1(i_gen, gen, banned, bannedOrb, indexes, abuf, mask, h, p, sp)
!tmp_row = 0d0 !tmp_row = 0d0
!do putj=1,hfix-1 !do putj=1,hfix-1
! if(lbanned(putj,ma) .or. banned(puti,putj,1)) cycle ! if(lbanned(putj,ma) .or. banned(puti,putj,1)) cycle
! hij = (mo_bielec_integral(p1, p2, putj, hfix)-mo_bielec_integral(p2,p1,putj,hfix)) * get_phase_bi(phasemask, ma, ma, putj, p1, hfix, p2) ! hij = (mo_two_e_integral(p1, p2, putj, hfix)-mo_two_e_integral(p2,p1,putj,hfix)) * get_phase_bi(phasemask, ma, ma, putj, p1, hfix, p2)
! tmp_row(:,putj) += hij * coefs(:) ! tmp_row(:,putj) += hij * coefs(:)
!end do !end do
!do putj=hfix+1,mo_num !do putj=hfix+1,mo_num
! if(lbanned(putj,ma) .or. banned(puti,putj,1)) cycle ! if(lbanned(putj,ma) .or. banned(puti,putj,1)) cycle
! hij = (mo_bielec_integral(p1, p2, hfix, putj)-mo_bielec_integral(p2,p1,hfix,putj)) * get_phase_bi(phasemask, ma, ma, hfix, p1, putj, p2) ! hij = (mo_two_e_integral(p1, p2, hfix, putj)-mo_two_e_integral(p2,p1,hfix,putj)) * get_phase_bi(phasemask, ma, ma, hfix, p1, putj, p2)
! tmp_row(:,putj) += hij * coefs(:) ! tmp_row(:,putj) += hij * coefs(:)
!end do !end do
@ -995,13 +995,13 @@ subroutine get_d1(i_gen, gen, banned, bannedOrb, indexes, abuf, mask, h, p, sp)
! if(lbanned(puti,ma)) cycle ! if(lbanned(puti,ma)) cycle
! putj = p2 ! putj = p2
!if(.not. banned(puti,putj,1)) then !if(.not. banned(puti,putj,1)) then
! hij = mo_bielec_integral(pfix, p1, hfix, puti) * get_phase_bi(phasemask, mi, ma, hfix, pfix, puti, p1) ! hij = mo_two_e_integral(pfix, p1, hfix, puti) * get_phase_bi(phasemask, mi, ma, hfix, pfix, puti, p1)
! tmp_row(:,puti) += hij * coefs(:) ! tmp_row(:,puti) += hij * coefs(:)
!end if !end if
! putj = p1 ! putj = p1
!if(.not. banned(puti,putj,1)) then !if(.not. banned(puti,putj,1)) then
! hij = mo_bielec_integral(pfix, p2, hfix, puti) * get_phase_bi(phasemask, mi, ma, hfix, pfix, puti, p2) ! hij = mo_two_e_integral(pfix, p2, hfix, puti) * get_phase_bi(phasemask, mi, ma, hfix, pfix, puti, p2)
! tmp_row2(:,puti) += hij * coefs(:) ! tmp_row2(:,puti) += hij * coefs(:)
!end if !end if
!end do !end do

View File

@ -15,7 +15,7 @@ subroutine dress_slave
end end
subroutine provide_everything subroutine provide_everything
PROVIDE H_apply_buffer_allocated mo_bielec_integrals_in_map psi_det_generators psi_coef_generators psi_det_sorted_bit psi_selectors n_det_generators n_states generators_bitmask zmq_context PROVIDE H_apply_buffer_allocated mo_two_e_integrals_in_map psi_det_generators psi_coef_generators psi_det_sorted_bit psi_selectors n_det_generators n_states generators_bitmask zmq_context
end end
subroutine run_wf subroutine run_wf

View File

@ -258,7 +258,7 @@ subroutine ZMQ_dress(E, dress, delta_out, delta_s2_out, relative_error)
state_average_weight(dress_stoch_istate) = 1.d0 state_average_weight(dress_stoch_istate) = 1.d0
TOUCH state_average_weight dress_stoch_istate TOUCH state_average_weight dress_stoch_istate
provide nproc mo_bielec_integrals_in_map mo_mono_elec_integrals psi_selectors pt2_F pt2_N_teeth dress_M_m provide nproc mo_two_e_integrals_in_map mo_one_e_integrals psi_selectors pt2_F pt2_N_teeth dress_M_m
print *, '========== ================= ================= =================' print *, '========== ================= ================= ================='
print *, ' Samples Energy Stat. Error Seconds ' print *, ' Samples Energy Stat. Error Seconds '

View File

@ -7,7 +7,7 @@ program pt2
read_wf = .True. read_wf = .True.
threshold_generators = 1.d0 threshold_generators = 1.d0
SOFT_TOUCH read_wf threshold_generators SOFT_TOUCH read_wf threshold_generators
PROVIDE mo_bielec_integrals_in_map PROVIDE mo_two_e_integrals_in_map
PROVIDE psi_energy PROVIDE psi_energy
call run call run
end end

View File

@ -128,7 +128,7 @@ subroutine ZMQ_pt2(E, pt2,relative_error, error, variance, norm)
state_average_weight(pt2_stoch_istate) = 1.d0 state_average_weight(pt2_stoch_istate) = 1.d0
TOUCH state_average_weight pt2_stoch_istate TOUCH state_average_weight pt2_stoch_istate
provide nproc pt2_F mo_bielec_integrals_in_map mo_mono_elec_integrals pt2_w psi_selectors provide nproc pt2_F mo_two_e_integrals_in_map mo_one_e_integrals pt2_w psi_selectors
call new_parallel_job(zmq_to_qp_run_socket, zmq_socket_pull, 'pt2') call new_parallel_job(zmq_to_qp_run_socket, zmq_socket_pull, 'pt2')
integer, external :: zmq_put_psi integer, external :: zmq_put_psi

View File

@ -116,7 +116,7 @@ subroutine get_m2(gen, phasemask, bannedOrb, vect, mask, h, p, sp, coefs)
integer, intent(in) :: sp, h(0:2, 2), p(0:3, 2) integer, intent(in) :: sp, h(0:2, 2), p(0:3, 2)
integer :: i, j, k, h1, h2, p1, p2, sfix, hfix, pfix, hmob, pmob, puti integer :: i, j, k, h1, h2, p1, p2, sfix, hfix, pfix, hmob, pmob, puti
double precision :: hij double precision :: hij
double precision, external :: get_phase_bi, mo_bielec_integral double precision, external :: get_phase_bi, mo_two_e_integral
integer, parameter :: turn3_2(2,3) = reshape((/2,3, 1,3, 1,2/), (/2,3/)) integer, parameter :: turn3_2(2,3) = reshape((/2,3, 1,3, 1,2/), (/2,3/))
integer, parameter :: turn2(2) = (/2,1/) integer, parameter :: turn2(2) = (/2,1/)
@ -129,7 +129,7 @@ subroutine get_m2(gen, phasemask, bannedOrb, vect, mask, h, p, sp, coefs)
if(bannedOrb(puti)) cycle if(bannedOrb(puti)) cycle
p1 = p(turn3_2(1,i), sp) p1 = p(turn3_2(1,i), sp)
p2 = p(turn3_2(2,i), sp) p2 = p(turn3_2(2,i), sp)
hij = mo_bielec_integral(p1, p2, h1, h2) - mo_bielec_integral(p2, p1, h1, h2) hij = mo_two_e_integral(p1, p2, h1, h2) - mo_two_e_integral(p2, p1, h1, h2)
hij = hij * get_phase_bi(phasemask, sp, sp, h1, p1, h2, p2, N_int) hij = hij * get_phase_bi(phasemask, sp, sp, h1, p1, h2, p2, N_int)
do k=1,N_states do k=1,N_states
vect(k,puti) = vect(k,puti) + hij * coefs(k) vect(k,puti) = vect(k,puti) + hij * coefs(k)
@ -144,7 +144,7 @@ subroutine get_m2(gen, phasemask, bannedOrb, vect, mask, h, p, sp, coefs)
puti = p(j, sp) puti = p(j, sp)
if(bannedOrb(puti)) cycle if(bannedOrb(puti)) cycle
pmob = p(turn2(j), sp) pmob = p(turn2(j), sp)
hij = mo_bielec_integral(pmob, pfix, hmob, hfix) hij = mo_two_e_integral(pmob, pfix, hmob, hfix)
hij = hij * get_phase_bi(phasemask, sp, sfix, hmob, pmob, hfix, pfix, N_int) hij = hij * get_phase_bi(phasemask, sp, sfix, hmob, pmob, hfix, pfix, N_int)
do k=1,N_states do k=1,N_states
vect(k,puti) = vect(k,puti) + hij * coefs(k) vect(k,puti) = vect(k,puti) + hij * coefs(k)
@ -158,7 +158,7 @@ subroutine get_m2(gen, phasemask, bannedOrb, vect, mask, h, p, sp, coefs)
p2 = p(2,sfix) p2 = p(2,sfix)
h1 = h(1,sfix) h1 = h(1,sfix)
h2 = h(2,sfix) h2 = h(2,sfix)
hij = (mo_bielec_integral(p1,p2,h1,h2) - mo_bielec_integral(p2,p1,h1,h2)) hij = (mo_two_e_integral(p1,p2,h1,h2) - mo_two_e_integral(p2,p1,h1,h2))
hij = hij * get_phase_bi(phasemask, sfix, sfix, h1, p1, h2, p2, N_int) hij = hij * get_phase_bi(phasemask, sfix, sfix, h1, p1, h2, p2, N_int)
do k=1,N_states do k=1,N_states
vect(k,puti) = vect(k,puti) + hij * coefs(k) vect(k,puti) = vect(k,puti) + hij * coefs(k)
@ -185,7 +185,7 @@ subroutine get_m1(gen, phasemask, bannedOrb, vect, mask, h, p, sp, coefs)
logical, allocatable :: lbanned(:) logical, allocatable :: lbanned(:)
integer(bit_kind) :: det(N_int, 2) integer(bit_kind) :: det(N_int, 2)
double precision :: hij double precision :: hij
double precision, external :: get_phase_bi, mo_bielec_integral double precision, external :: get_phase_bi, mo_two_e_integral
allocate (lbanned(mo_num)) allocate (lbanned(mo_num))
lbanned = bannedOrb lbanned = bannedOrb
@ -204,8 +204,8 @@ subroutine get_m1(gen, phasemask, bannedOrb, vect, mask, h, p, sp, coefs)
double precision :: hij_cache(mo_num,2) double precision :: hij_cache(mo_num,2)
call get_mo_bielec_integrals(hole,p1,p2,mo_num,hij_cache(1,1),mo_integrals_map) call get_mo_two_e_integrals(hole,p1,p2,mo_num,hij_cache(1,1),mo_integrals_map)
call get_mo_bielec_integrals(hole,p2,p1,mo_num,hij_cache(1,2),mo_integrals_map) call get_mo_two_e_integrals(hole,p2,p1,mo_num,hij_cache(1,2),mo_integrals_map)
do i=1,hole-1 do i=1,hole-1
if(lbanned(i)) cycle if(lbanned(i)) cycle
@ -235,7 +235,7 @@ subroutine get_m1(gen, phasemask, bannedOrb, vect, mask, h, p, sp, coefs)
enddo enddo
else else
p2 = p(1, sh) p2 = p(1, sh)
call get_mo_bielec_integrals(hole,p1,p2,mo_num,hij_cache(1,1),mo_integrals_map) call get_mo_two_e_integrals(hole,p1,p2,mo_num,hij_cache(1,1),mo_integrals_map)
do i=1,mo_num do i=1,mo_num
if(lbanned(i)) cycle if(lbanned(i)) cycle
hij = hij_cache(i,1) hij = hij_cache(i,1)
@ -834,7 +834,7 @@ subroutine get_d2(gen, phasemask, bannedOrb, banned, mat, mask, h, p, sp, coefs)
double precision, intent(inout) :: mat(N_states, mo_num, mo_num) double precision, intent(inout) :: mat(N_states, mo_num, mo_num)
integer, intent(in) :: h(0:2,2), p(0:4,2), sp integer, intent(in) :: h(0:2,2), p(0:4,2), sp
double precision, external :: get_phase_bi, mo_bielec_integral double precision, external :: get_phase_bi, mo_two_e_integral
integer :: i, j, k, tip, ma, mi, puti, putj integer :: i, j, k, tip, ma, mi, puti, putj
integer :: h1, h2, p1, p2, i1, i2 integer :: h1, h2, p1, p2, i1, i2
@ -870,7 +870,7 @@ subroutine get_d2(gen, phasemask, bannedOrb, banned, mat, mask, h, p, sp, coefs)
h1 = h(1, ma) h1 = h(1, ma)
h2 = h(2, ma) h2 = h(2, ma)
hij = (mo_bielec_integral(p1, p2, h1, h2) - mo_bielec_integral(p2,p1, h1, h2)) * get_phase_bi(phasemask, ma, ma, h1, p1, h2, p2, N_int) hij = (mo_two_e_integral(p1, p2, h1, h2) - mo_two_e_integral(p2,p1, h1, h2)) * get_phase_bi(phasemask, ma, ma, h1, p1, h2, p2, N_int)
if(ma == 1) then if(ma == 1) then
do k=1,N_states do k=1,N_states
mat(k, putj, puti) = mat(k, putj, puti) +coefs(k) * hij mat(k, putj, puti) = mat(k, putj, puti) +coefs(k) * hij
@ -894,7 +894,7 @@ subroutine get_d2(gen, phasemask, bannedOrb, banned, mat, mask, h, p, sp, coefs)
if(banned(puti,putj,bant) .or. bannedOrb(puti,1)) cycle if(banned(puti,putj,bant) .or. bannedOrb(puti,1)) cycle
p1 = p(turn2(i), 1) p1 = p(turn2(i), 1)
hij = mo_bielec_integral(p1, p2, h1, h2) * get_phase_bi(phasemask, 1, 2, h1, p1, h2, p2, N_int) hij = mo_two_e_integral(p1, p2, h1, h2) * get_phase_bi(phasemask, 1, 2, h1, p1, h2, p2, N_int)
do k=1,N_states do k=1,N_states
mat(k, puti, putj) = mat(k, puti, putj) +coefs(k) * hij mat(k, puti, putj) = mat(k, puti, putj) +coefs(k) * hij
enddo enddo
@ -918,7 +918,7 @@ subroutine get_d2(gen, phasemask, bannedOrb, banned, mat, mask, h, p, sp, coefs)
i2 = turn2d(2, i, j) i2 = turn2d(2, i, j)
p1 = p(i1, ma) p1 = p(i1, ma)
p2 = p(i2, ma) p2 = p(i2, ma)
hij = (mo_bielec_integral(p1, p2, h1, h2) - mo_bielec_integral(p2,p1, h1, h2)) * get_phase_bi(phasemask, ma, ma, h1, p1, h2, p2, N_int) hij = (mo_two_e_integral(p1, p2, h1, h2) - mo_two_e_integral(p2,p1, h1, h2)) * get_phase_bi(phasemask, ma, ma, h1, p1, h2, p2, N_int)
do k=1,N_states do k=1,N_states
mat(k, puti, putj) = mat(k, puti, putj) +coefs(k) * hij mat(k, puti, putj) = mat(k, puti, putj) +coefs(k) * hij
enddo enddo
@ -936,7 +936,7 @@ subroutine get_d2(gen, phasemask, bannedOrb, banned, mat, mask, h, p, sp, coefs)
if(banned(puti,putj,1)) cycle if(banned(puti,putj,1)) cycle
p2 = p(i, ma) p2 = p(i, ma)
hij = mo_bielec_integral(p1, p2, h1, h2) * get_phase_bi(phasemask, mi, ma, h1, p1, h2, p2, N_int) hij = mo_two_e_integral(p1, p2, h1, h2) * get_phase_bi(phasemask, mi, ma, h1, p1, h2, p2, N_int)
do k=1,N_states do k=1,N_states
mat(k, min(puti, putj), max(puti, putj)) = mat(k, min(puti, putj), max(puti, putj)) + coefs(k) * hij mat(k, min(puti, putj), max(puti, putj)) = mat(k, min(puti, putj), max(puti, putj)) + coefs(k) * hij
enddo enddo
@ -949,7 +949,7 @@ subroutine get_d2(gen, phasemask, bannedOrb, banned, mat, mask, h, p, sp, coefs)
p2 = p(2, mi) p2 = p(2, mi)
h1 = h(1, mi) h1 = h(1, mi)
h2 = h(2, mi) h2 = h(2, mi)
hij = (mo_bielec_integral(p1, p2, h1, h2) - mo_bielec_integral(p2,p1, h1, h2)) * get_phase_bi(phasemask, mi, mi, h1, p1, h2, p2, N_int) hij = (mo_two_e_integral(p1, p2, h1, h2) - mo_two_e_integral(p2,p1, h1, h2)) * get_phase_bi(phasemask, mi, mi, h1, p1, h2, p2, N_int)
do k=1,N_states do k=1,N_states
mat(k, puti, putj) = mat(k, puti, putj) +coefs(k) * hij mat(k, puti, putj) = mat(k, puti, putj) +coefs(k) * hij
enddo enddo
@ -971,7 +971,7 @@ subroutine get_d1(gen, phasemask, bannedOrb, banned, mat, mask, h, p, sp, coefs)
double precision, intent(inout) :: mat(N_states, mo_num, mo_num) double precision, intent(inout) :: mat(N_states, mo_num, mo_num)
integer, intent(in) :: h(0:2,2), p(0:4,2), sp integer, intent(in) :: h(0:2,2), p(0:4,2), sp
double precision :: hij, tmp_row(N_states, mo_num), tmp_row2(N_states, mo_num) double precision :: hij, tmp_row(N_states, mo_num), tmp_row2(N_states, mo_num)
double precision, external :: get_phase_bi, mo_bielec_integral double precision, external :: get_phase_bi, mo_two_e_integral
logical :: ok logical :: ok
logical, allocatable :: lbanned(:,:) logical, allocatable :: lbanned(:,:)
@ -1010,8 +1010,8 @@ subroutine get_d1(gen, phasemask, bannedOrb, banned, mat, mask, h, p, sp, coefs)
p1 = p(1,ma) p1 = p(1,ma)
p2 = p(2,ma) p2 = p(2,ma)
if(.not. bannedOrb(puti, mi)) then if(.not. bannedOrb(puti, mi)) then
call get_mo_bielec_integrals(hfix,p1,p2,mo_num,hij_cache(1,1),mo_integrals_map) call get_mo_two_e_integrals(hfix,p1,p2,mo_num,hij_cache(1,1),mo_integrals_map)
call get_mo_bielec_integrals(hfix,p2,p1,mo_num,hij_cache(1,2),mo_integrals_map) call get_mo_two_e_integrals(hfix,p2,p1,mo_num,hij_cache(1,2),mo_integrals_map)
tmp_row = 0d0 tmp_row = 0d0
do putj=1, hfix-1 do putj=1, hfix-1
if(lbanned(putj, ma)) cycle if(lbanned(putj, ma)) cycle
@ -1045,8 +1045,8 @@ subroutine get_d1(gen, phasemask, bannedOrb, banned, mat, mask, h, p, sp, coefs)
pfix = p(1,mi) pfix = p(1,mi)
tmp_row = 0d0 tmp_row = 0d0
tmp_row2 = 0d0 tmp_row2 = 0d0
call get_mo_bielec_integrals(hfix,pfix,p1,mo_num,hij_cache(1,1),mo_integrals_map) call get_mo_two_e_integrals(hfix,pfix,p1,mo_num,hij_cache(1,1),mo_integrals_map)
call get_mo_bielec_integrals(hfix,pfix,p2,mo_num,hij_cache(1,2),mo_integrals_map) call get_mo_two_e_integrals(hfix,pfix,p2,mo_num,hij_cache(1,2),mo_integrals_map)
do puti=1,mo_num do puti=1,mo_num
if(lbanned(puti,mi)) cycle if(lbanned(puti,mi)) cycle
!p1 fixed !p1 fixed
@ -1089,8 +1089,8 @@ subroutine get_d1(gen, phasemask, bannedOrb, banned, mat, mask, h, p, sp, coefs)
puti = p(i, ma) puti = p(i, ma)
p1 = p(turn3(1,i), ma) p1 = p(turn3(1,i), ma)
p2 = p(turn3(2,i), ma) p2 = p(turn3(2,i), ma)
call get_mo_bielec_integrals(hfix,p1,p2,mo_num,hij_cache(1,1),mo_integrals_map) call get_mo_two_e_integrals(hfix,p1,p2,mo_num,hij_cache(1,1),mo_integrals_map)
call get_mo_bielec_integrals(hfix,p2,p1,mo_num,hij_cache(1,2),mo_integrals_map) call get_mo_two_e_integrals(hfix,p2,p1,mo_num,hij_cache(1,2),mo_integrals_map)
tmp_row = 0d0 tmp_row = 0d0
do putj=1,hfix-1 do putj=1,hfix-1
if(lbanned(putj,ma)) cycle if(lbanned(putj,ma)) cycle
@ -1121,8 +1121,8 @@ subroutine get_d1(gen, phasemask, bannedOrb, banned, mat, mask, h, p, sp, coefs)
p2 = p(2,ma) p2 = p(2,ma)
tmp_row = 0d0 tmp_row = 0d0
tmp_row2 = 0d0 tmp_row2 = 0d0
call get_mo_bielec_integrals(hfix,p1,pfix,mo_num,hij_cache(1,1),mo_integrals_map) call get_mo_two_e_integrals(hfix,p1,pfix,mo_num,hij_cache(1,1),mo_integrals_map)
call get_mo_bielec_integrals(hfix,p2,pfix,mo_num,hij_cache(1,2),mo_integrals_map) call get_mo_two_e_integrals(hfix,p2,pfix,mo_num,hij_cache(1,2),mo_integrals_map)
do puti=1,mo_num do puti=1,mo_num
if(lbanned(puti,ma)) cycle if(lbanned(puti,ma)) cycle
putj = p2 putj = p2
@ -1196,7 +1196,7 @@ subroutine get_d0(gen, phasemask, bannedOrb, banned, mat, mask, h, p, sp, coefs)
integer :: i, j, k, s, h1, h2, p1, p2, puti, putj integer :: i, j, k, s, h1, h2, p1, p2, puti, putj
double precision :: hij, phase double precision :: hij, phase
double precision, external :: get_phase_bi, mo_bielec_integral double precision, external :: get_phase_bi, mo_two_e_integral
logical :: ok logical :: ok
integer :: bant integer :: bant
@ -1210,7 +1210,7 @@ subroutine get_d0(gen, phasemask, bannedOrb, banned, mat, mask, h, p, sp, coefs)
h2 = p(1,2) h2 = p(1,2)
do p2=1, mo_num do p2=1, mo_num
if(bannedOrb(p2,2)) cycle if(bannedOrb(p2,2)) cycle
call get_mo_bielec_integrals(p2,h1,h2,mo_num,hij_cache1,mo_integrals_map) call get_mo_two_e_integrals(p2,h1,h2,mo_num,hij_cache1,mo_integrals_map)
do p1=1, mo_num do p1=1, mo_num
if(bannedOrb(p1, 1) .or. banned(p1, p2, bant)) cycle if(bannedOrb(p1, 1) .or. banned(p1, p2, bant)) cycle
if(p1 /= h1 .and. p2 /= h2) then if(p1 /= h1 .and. p2 /= h2) then
@ -1233,8 +1233,8 @@ subroutine get_d0(gen, phasemask, bannedOrb, banned, mat, mask, h, p, sp, coefs)
p2 = p(2,sp) p2 = p(2,sp)
do puti=1, mo_num do puti=1, mo_num
if(bannedOrb(puti, sp)) cycle if(bannedOrb(puti, sp)) cycle
call get_mo_bielec_integrals(puti,p2,p1,mo_num,hij_cache1,mo_integrals_map) call get_mo_two_e_integrals(puti,p2,p1,mo_num,hij_cache1,mo_integrals_map)
call get_mo_bielec_integrals(puti,p1,p2,mo_num,hij_cache2,mo_integrals_map) call get_mo_two_e_integrals(puti,p1,p2,mo_num,hij_cache2,mo_integrals_map)
do putj=puti+1, mo_num do putj=puti+1, mo_num
if(bannedOrb(putj, sp) .or. banned(putj, sp, bant)) cycle if(bannedOrb(putj, sp) .or. banned(putj, sp, bant)) cycle
if(puti /= p1 .and. putj /= p2 .and. puti /= p2 .and. putj /= p1) then if(puti /= p1 .and. putj /= p2 .and. puti /= p2 .and. putj /= p1) then

View File

@ -1,6 +1,6 @@
BEGIN_PROVIDER [ double precision, ao_bi_elec_integral_alpha, (ao_num, ao_num) ] BEGIN_PROVIDER [ double precision, ao_two_e_integral_alpha, (ao_num, ao_num) ]
&BEGIN_PROVIDER [ double precision, ao_bi_elec_integral_beta , (ao_num, ao_num) ] &BEGIN_PROVIDER [ double precision, ao_two_e_integral_beta , (ao_num, ao_num) ]
use map_module use map_module
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -11,32 +11,32 @@
integer :: i0,j0,k0,l0 integer :: i0,j0,k0,l0
integer*8 :: p,q integer*8 :: p,q
double precision :: integral, c0, c1, c2 double precision :: integral, c0, c1, c2
double precision :: ao_bielec_integral, local_threshold double precision :: ao_two_e_integral, local_threshold
double precision, allocatable :: ao_bi_elec_integral_alpha_tmp(:,:) double precision, allocatable :: ao_two_e_integral_alpha_tmp(:,:)
double precision, allocatable :: ao_bi_elec_integral_beta_tmp(:,:) double precision, allocatable :: ao_two_e_integral_beta_tmp(:,:)
ao_bi_elec_integral_alpha = 0.d0 ao_two_e_integral_alpha = 0.d0
ao_bi_elec_integral_beta = 0.d0 ao_two_e_integral_beta = 0.d0
if (do_direct_integrals) then if (do_direct_integrals) then
!$OMP PARALLEL DEFAULT(NONE) & !$OMP PARALLEL DEFAULT(NONE) &
!$OMP PRIVATE(i,j,l,k1,k,integral,ii,jj,kk,ll,keys,values,p,q,r,s,i0,j0,k0,l0, & !$OMP PRIVATE(i,j,l,k1,k,integral,ii,jj,kk,ll,keys,values,p,q,r,s,i0,j0,k0,l0, &
!$OMP ao_bi_elec_integral_alpha_tmp,ao_bi_elec_integral_beta_tmp, c0, c1, c2, & !$OMP ao_two_e_integral_alpha_tmp,ao_two_e_integral_beta_tmp, c0, c1, c2, &
!$OMP local_threshold)& !$OMP local_threshold)&
!$OMP SHARED(ao_num,SCF_density_matrix_ao_alpha,SCF_density_matrix_ao_beta,& !$OMP SHARED(ao_num,SCF_density_matrix_ao_alpha,SCF_density_matrix_ao_beta,&
!$OMP ao_integrals_map,ao_integrals_threshold, ao_bielec_integral_schwartz, & !$OMP ao_integrals_map,ao_integrals_threshold, ao_two_e_integral_schwartz, &
!$OMP ao_overlap_abs, ao_bi_elec_integral_alpha, ao_bi_elec_integral_beta) !$OMP ao_overlap_abs, ao_two_e_integral_alpha, ao_two_e_integral_beta)
allocate(keys(1), values(1)) allocate(keys(1), values(1))
allocate(ao_bi_elec_integral_alpha_tmp(ao_num,ao_num), & allocate(ao_two_e_integral_alpha_tmp(ao_num,ao_num), &
ao_bi_elec_integral_beta_tmp(ao_num,ao_num)) ao_two_e_integral_beta_tmp(ao_num,ao_num))
ao_bi_elec_integral_alpha_tmp = 0.d0 ao_two_e_integral_alpha_tmp = 0.d0
ao_bi_elec_integral_beta_tmp = 0.d0 ao_two_e_integral_beta_tmp = 0.d0
q = ao_num*ao_num*ao_num*ao_num q = ao_num*ao_num*ao_num*ao_num
!$OMP DO SCHEDULE(static,1) !$OMP DO SCHEDULE(static,1)
do p=1_8,q do p=1_8,q
call bielec_integrals_index_reverse(kk,ii,ll,jj,p) call two_e_integrals_index_reverse(kk,ii,ll,jj,p)
if ( (kk(1)>ao_num).or. & if ( (kk(1)>ao_num).or. &
(ii(1)>ao_num).or. & (ii(1)>ao_num).or. &
(jj(1)>ao_num).or. & (jj(1)>ao_num).or. &
@ -52,7 +52,7 @@
< ao_integrals_threshold) then < ao_integrals_threshold) then
cycle cycle
endif endif
local_threshold = ao_bielec_integral_schwartz(k,l)*ao_bielec_integral_schwartz(i,j) local_threshold = ao_two_e_integral_schwartz(k,l)*ao_two_e_integral_schwartz(i,j)
if (local_threshold < ao_integrals_threshold) then if (local_threshold < ao_integrals_threshold) then
cycle cycle
endif endif
@ -77,27 +77,27 @@
cycle cycle
endif endif
if (values(1) == 0.d0) then if (values(1) == 0.d0) then
values(1) = ao_bielec_integral(k0,l0,i0,j0) values(1) = ao_two_e_integral(k0,l0,i0,j0)
endif endif
integral = c0 * values(1) integral = c0 * values(1)
ao_bi_elec_integral_alpha_tmp(i,j) += integral ao_two_e_integral_alpha_tmp(i,j) += integral
ao_bi_elec_integral_beta_tmp (i,j) += integral ao_two_e_integral_beta_tmp (i,j) += integral
integral = values(1) integral = values(1)
ao_bi_elec_integral_alpha_tmp(l,j) -= c1 * integral ao_two_e_integral_alpha_tmp(l,j) -= c1 * integral
ao_bi_elec_integral_beta_tmp (l,j) -= c2 * integral ao_two_e_integral_beta_tmp (l,j) -= c2 * integral
enddo enddo
enddo enddo
!$OMP END DO NOWAIT !$OMP END DO NOWAIT
!$OMP CRITICAL !$OMP CRITICAL
ao_bi_elec_integral_alpha += ao_bi_elec_integral_alpha_tmp ao_two_e_integral_alpha += ao_two_e_integral_alpha_tmp
!$OMP END CRITICAL !$OMP END CRITICAL
!$OMP CRITICAL !$OMP CRITICAL
ao_bi_elec_integral_beta += ao_bi_elec_integral_beta_tmp ao_two_e_integral_beta += ao_two_e_integral_beta_tmp
!$OMP END CRITICAL !$OMP END CRITICAL
deallocate(keys,values,ao_bi_elec_integral_alpha_tmp,ao_bi_elec_integral_beta_tmp) deallocate(keys,values,ao_two_e_integral_alpha_tmp,ao_two_e_integral_beta_tmp)
!$OMP END PARALLEL !$OMP END PARALLEL
else else
PROVIDE ao_bielec_integrals_in_map PROVIDE ao_two_e_integrals_in_map
integer(omp_lock_kind) :: lck(ao_num) integer(omp_lock_kind) :: lck(ao_num)
integer(map_size_kind) :: i8 integer(map_size_kind) :: i8
@ -108,23 +108,23 @@
!$OMP PARALLEL DEFAULT(NONE) & !$OMP PARALLEL DEFAULT(NONE) &
!$OMP PRIVATE(i,j,l,k1,k,integral,ii,jj,kk,ll,i8,keys,values,n_elements_max, & !$OMP PRIVATE(i,j,l,k1,k,integral,ii,jj,kk,ll,i8,keys,values,n_elements_max, &
!$OMP n_elements,ao_bi_elec_integral_alpha_tmp,ao_bi_elec_integral_beta_tmp)& !$OMP n_elements,ao_two_e_integral_alpha_tmp,ao_two_e_integral_beta_tmp)&
!$OMP SHARED(ao_num,SCF_density_matrix_ao_alpha,SCF_density_matrix_ao_beta,& !$OMP SHARED(ao_num,SCF_density_matrix_ao_alpha,SCF_density_matrix_ao_beta,&
!$OMP ao_integrals_map, ao_bi_elec_integral_alpha, ao_bi_elec_integral_beta) !$OMP ao_integrals_map, ao_two_e_integral_alpha, ao_two_e_integral_beta)
call get_cache_map_n_elements_max(ao_integrals_map,n_elements_max) call get_cache_map_n_elements_max(ao_integrals_map,n_elements_max)
allocate(keys(n_elements_max), values(n_elements_max)) allocate(keys(n_elements_max), values(n_elements_max))
allocate(ao_bi_elec_integral_alpha_tmp(ao_num,ao_num), & allocate(ao_two_e_integral_alpha_tmp(ao_num,ao_num), &
ao_bi_elec_integral_beta_tmp(ao_num,ao_num)) ao_two_e_integral_beta_tmp(ao_num,ao_num))
ao_bi_elec_integral_alpha_tmp = 0.d0 ao_two_e_integral_alpha_tmp = 0.d0
ao_bi_elec_integral_beta_tmp = 0.d0 ao_two_e_integral_beta_tmp = 0.d0
!$OMP DO SCHEDULE(static,1) !$OMP DO SCHEDULE(static,1)
do i8=0_8,ao_integrals_map%map_size do i8=0_8,ao_integrals_map%map_size
n_elements = n_elements_max n_elements = n_elements_max
call get_cache_map(ao_integrals_map,i8,keys,values,n_elements) call get_cache_map(ao_integrals_map,i8,keys,values,n_elements)
do k1=1,n_elements do k1=1,n_elements
call bielec_integrals_index_reverse(kk,ii,ll,jj,keys(k1)) call two_e_integrals_index_reverse(kk,ii,ll,jj,keys(k1))
do k2=1,8 do k2=1,8
if (kk(k2)==0) then if (kk(k2)==0) then
@ -135,24 +135,24 @@
k = kk(k2) k = kk(k2)
l = ll(k2) l = ll(k2)
integral = (SCF_density_matrix_ao_alpha(k,l)+SCF_density_matrix_ao_beta(k,l)) * values(k1) integral = (SCF_density_matrix_ao_alpha(k,l)+SCF_density_matrix_ao_beta(k,l)) * values(k1)
ao_bi_elec_integral_alpha_tmp(i,j) += integral ao_two_e_integral_alpha_tmp(i,j) += integral
ao_bi_elec_integral_beta_tmp (i,j) += integral ao_two_e_integral_beta_tmp (i,j) += integral
integral = values(k1) integral = values(k1)
ao_bi_elec_integral_alpha_tmp(l,j) -= SCF_density_matrix_ao_alpha(k,i) * integral ao_two_e_integral_alpha_tmp(l,j) -= SCF_density_matrix_ao_alpha(k,i) * integral
ao_bi_elec_integral_beta_tmp (l,j) -= SCF_density_matrix_ao_beta (k,i) * integral ao_two_e_integral_beta_tmp (l,j) -= SCF_density_matrix_ao_beta (k,i) * integral
enddo enddo
enddo enddo
enddo enddo
!$OMP END DO !$OMP END DO
!$OMP BARRIER !$OMP BARRIER
!$OMP CRITICAL !$OMP CRITICAL
ao_bi_elec_integral_alpha += ao_bi_elec_integral_alpha_tmp ao_two_e_integral_alpha += ao_two_e_integral_alpha_tmp
!$OMP END CRITICAL !$OMP END CRITICAL
!$OMP BARRIER !$OMP BARRIER
!$OMP CRITICAL !$OMP CRITICAL
ao_bi_elec_integral_beta += ao_bi_elec_integral_beta_tmp ao_two_e_integral_beta += ao_two_e_integral_beta_tmp
!$OMP END CRITICAL !$OMP END CRITICAL
deallocate(keys,values,ao_bi_elec_integral_alpha_tmp,ao_bi_elec_integral_beta_tmp) deallocate(keys,values,ao_two_e_integral_alpha_tmp,ao_two_e_integral_beta_tmp)
!$OMP END PARALLEL !$OMP END PARALLEL
endif endif
@ -169,8 +169,8 @@ END_PROVIDER
integer :: i,j integer :: i,j
do j=1,ao_num do j=1,ao_num
do i=1,ao_num do i=1,ao_num
Fock_matrix_ao_alpha(i,j) = ao_one_e_integrals(i,j) + ao_bi_elec_integral_alpha(i,j) Fock_matrix_ao_alpha(i,j) = ao_one_e_integrals(i,j) + ao_two_e_integral_alpha(i,j)
Fock_matrix_ao_beta (i,j) = ao_one_e_integrals(i,j) + ao_bi_elec_integral_beta (i,j) Fock_matrix_ao_beta (i,j) = ao_one_e_integrals(i,j) + ao_two_e_integral_beta (i,j)
enddo enddo
enddo enddo

View File

@ -22,8 +22,8 @@ END_PROVIDER
HF_energy = nuclear_repulsion HF_energy = nuclear_repulsion
do j=1,ao_num do j=1,ao_num
do i=1,ao_num do i=1,ao_num
HF_two_electron_energy += 0.5d0 * ( ao_bi_elec_integral_alpha(i,j) * SCF_density_matrix_ao_alpha(i,j) & HF_two_electron_energy += 0.5d0 * ( ao_two_e_integral_alpha(i,j) * SCF_density_matrix_ao_alpha(i,j) &
+ao_bi_elec_integral_beta(i,j) * SCF_density_matrix_ao_beta(i,j) ) +ao_two_e_integral_beta(i,j) * SCF_density_matrix_ao_beta(i,j) )
HF_one_electron_energy += ao_one_e_integrals(i,j) * (SCF_density_matrix_ao_alpha(i,j) + SCF_density_matrix_ao_beta (i,j) ) HF_one_electron_energy += ao_one_e_integrals(i,j) * (SCF_density_matrix_ao_alpha(i,j) + SCF_density_matrix_ao_beta (i,j) )
enddo enddo
enddo enddo

View File

@ -26,9 +26,9 @@ subroutine create_guess
mo_coef = ao_ortho_lowdin_coef mo_coef = ao_ortho_lowdin_coef
TOUCH mo_coef TOUCH mo_coef
mo_label = 'Guess' mo_label = 'Guess'
call mo_as_eigvectors_of_mo_matrix(mo_mono_elec_integrals, & call mo_as_eigvectors_of_mo_matrix(mo_one_e_integrals, &
size(mo_mono_elec_integrals,1), & size(mo_one_e_integrals,1), &
size(mo_mono_elec_integrals,2), & size(mo_one_e_integrals,2), &
mo_label,1,.false.) mo_label,1,.false.)
SOFT_TOUCH mo_coef mo_label SOFT_TOUCH mo_coef mo_label
else if (mo_guess_type == "Huckel") then else if (mo_guess_type == "Huckel") then

View File

@ -1,7 +1,7 @@
BEGIN_PROVIDER [ double precision, ao_bi_elec_integral_alpha, (ao_num, ao_num) ] BEGIN_PROVIDER [ double precision, ao_two_e_integral_alpha, (ao_num, ao_num) ]
&BEGIN_PROVIDER [ double precision, ao_bi_elec_integral_beta , (ao_num, ao_num) ] &BEGIN_PROVIDER [ double precision, ao_two_e_integral_beta , (ao_num, ao_num) ]
use map_module use map_module
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -12,34 +12,34 @@
integer :: i0,j0,k0,l0 integer :: i0,j0,k0,l0
integer*8 :: p,q integer*8 :: p,q
double precision :: integral, c0, c1, c2 double precision :: integral, c0, c1, c2
double precision :: ao_bielec_integral, local_threshold double precision :: ao_two_e_integral, local_threshold
double precision, allocatable :: ao_bi_elec_integral_alpha_tmp(:,:) double precision, allocatable :: ao_two_e_integral_alpha_tmp(:,:)
double precision, allocatable :: ao_bi_elec_integral_beta_tmp(:,:) double precision, allocatable :: ao_two_e_integral_beta_tmp(:,:)
!DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: ao_bi_elec_integral_beta_tmp !DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: ao_two_e_integral_beta_tmp
!DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: ao_bi_elec_integral_alpha_tmp !DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: ao_two_e_integral_alpha_tmp
ao_bi_elec_integral_alpha = 0.d0 ao_two_e_integral_alpha = 0.d0
ao_bi_elec_integral_beta = 0.d0 ao_two_e_integral_beta = 0.d0
if (do_direct_integrals) then if (do_direct_integrals) then
!$OMP PARALLEL DEFAULT(NONE) & !$OMP PARALLEL DEFAULT(NONE) &
!$OMP PRIVATE(i,j,l,k1,k,integral,ii,jj,kk,ll,i8,keys,values,p,q,r,s,i0,j0,k0,l0, & !$OMP PRIVATE(i,j,l,k1,k,integral,ii,jj,kk,ll,i8,keys,values,p,q,r,s,i0,j0,k0,l0, &
!$OMP ao_bi_elec_integral_alpha_tmp,ao_bi_elec_integral_beta_tmp, c0, c1, c2, & !$OMP ao_two_e_integral_alpha_tmp,ao_two_e_integral_beta_tmp, c0, c1, c2, &
!$OMP local_threshold)& !$OMP local_threshold)&
!$OMP SHARED(ao_num,SCF_density_matrix_ao_alpha,SCF_density_matrix_ao_beta,& !$OMP SHARED(ao_num,SCF_density_matrix_ao_alpha,SCF_density_matrix_ao_beta,&
!$OMP ao_integrals_map,ao_integrals_threshold, ao_bielec_integral_schwartz, & !$OMP ao_integrals_map,ao_integrals_threshold, ao_two_e_integral_schwartz, &
!$OMP ao_overlap_abs, ao_bi_elec_integral_alpha, ao_bi_elec_integral_beta) !$OMP ao_overlap_abs, ao_two_e_integral_alpha, ao_two_e_integral_beta)
allocate(keys(1), values(1)) allocate(keys(1), values(1))
allocate(ao_bi_elec_integral_alpha_tmp(ao_num,ao_num), & allocate(ao_two_e_integral_alpha_tmp(ao_num,ao_num), &
ao_bi_elec_integral_beta_tmp(ao_num,ao_num)) ao_two_e_integral_beta_tmp(ao_num,ao_num))
ao_bi_elec_integral_alpha_tmp = 0.d0 ao_two_e_integral_alpha_tmp = 0.d0
ao_bi_elec_integral_beta_tmp = 0.d0 ao_two_e_integral_beta_tmp = 0.d0
q = ao_num*ao_num*ao_num*ao_num q = ao_num*ao_num*ao_num*ao_num
!$OMP DO SCHEDULE(dynamic) !$OMP DO SCHEDULE(dynamic)
do p=1_8,q do p=1_8,q
call bielec_integrals_index_reverse(kk,ii,ll,jj,p) call two_e_integrals_index_reverse(kk,ii,ll,jj,p)
if ( (kk(1)>ao_num).or. & if ( (kk(1)>ao_num).or. &
(ii(1)>ao_num).or. & (ii(1)>ao_num).or. &
(jj(1)>ao_num).or. & (jj(1)>ao_num).or. &
@ -55,7 +55,7 @@
< ao_integrals_threshold) then < ao_integrals_threshold) then
cycle cycle
endif endif
local_threshold = ao_bielec_integral_schwartz(k,l)*ao_bielec_integral_schwartz(i,j) local_threshold = ao_two_e_integral_schwartz(k,l)*ao_two_e_integral_schwartz(i,j)
if (local_threshold < ao_integrals_threshold) then if (local_threshold < ao_integrals_threshold) then
cycle cycle
endif endif
@ -80,27 +80,27 @@
cycle cycle
endif endif
if (values(1) == 0.d0) then if (values(1) == 0.d0) then
values(1) = ao_bielec_integral(k0,l0,i0,j0) values(1) = ao_two_e_integral(k0,l0,i0,j0)
endif endif
integral = c0 * values(1) integral = c0 * values(1)
ao_bi_elec_integral_alpha_tmp(i,j) += integral ao_two_e_integral_alpha_tmp(i,j) += integral
ao_bi_elec_integral_beta_tmp (i,j) += integral ao_two_e_integral_beta_tmp (i,j) += integral
integral = values(1) integral = values(1)
ao_bi_elec_integral_alpha_tmp(l,j) -= c1 * integral ao_two_e_integral_alpha_tmp(l,j) -= c1 * integral
ao_bi_elec_integral_beta_tmp (l,j) -= c2 * integral ao_two_e_integral_beta_tmp (l,j) -= c2 * integral
enddo enddo
enddo enddo
!$OMP END DO NOWAIT !$OMP END DO NOWAIT
!$OMP CRITICAL !$OMP CRITICAL
ao_bi_elec_integral_alpha += ao_bi_elec_integral_alpha_tmp ao_two_e_integral_alpha += ao_two_e_integral_alpha_tmp
!$OMP END CRITICAL !$OMP END CRITICAL
!$OMP CRITICAL !$OMP CRITICAL
ao_bi_elec_integral_beta += ao_bi_elec_integral_beta_tmp ao_two_e_integral_beta += ao_two_e_integral_beta_tmp
!$OMP END CRITICAL !$OMP END CRITICAL
deallocate(keys,values,ao_bi_elec_integral_alpha_tmp,ao_bi_elec_integral_beta_tmp) deallocate(keys,values,ao_two_e_integral_alpha_tmp,ao_two_e_integral_beta_tmp)
!$OMP END PARALLEL !$OMP END PARALLEL
else else
PROVIDE ao_bielec_integrals_in_map PROVIDE ao_two_e_integrals_in_map
integer(omp_lock_kind) :: lck(ao_num) integer(omp_lock_kind) :: lck(ao_num)
integer*8 :: i8 integer*8 :: i8
@ -114,16 +114,16 @@
!$OMP PARALLEL DEFAULT(NONE) & !$OMP PARALLEL DEFAULT(NONE) &
!$OMP PRIVATE(i,j,l,k1,k,integral,ii,jj,kk,ll,i8,keys,values,n_elements_max, & !$OMP PRIVATE(i,j,l,k1,k,integral,ii,jj,kk,ll,i8,keys,values,n_elements_max, &
!$OMP n_elements,ao_bi_elec_integral_alpha_tmp,ao_bi_elec_integral_beta_tmp)& !$OMP n_elements,ao_two_e_integral_alpha_tmp,ao_two_e_integral_beta_tmp)&
!$OMP SHARED(ao_num,SCF_density_matrix_ao_alpha,SCF_density_matrix_ao_beta,& !$OMP SHARED(ao_num,SCF_density_matrix_ao_alpha,SCF_density_matrix_ao_beta,&
!$OMP ao_integrals_map, ao_bi_elec_integral_alpha, ao_bi_elec_integral_beta,HF_exchange) !$OMP ao_integrals_map, ao_two_e_integral_alpha, ao_two_e_integral_beta,HF_exchange)
call get_cache_map_n_elements_max(ao_integrals_map,n_elements_max) call get_cache_map_n_elements_max(ao_integrals_map,n_elements_max)
allocate(keys(n_elements_max), values(n_elements_max)) allocate(keys(n_elements_max), values(n_elements_max))
allocate(ao_bi_elec_integral_alpha_tmp(ao_num,ao_num), & allocate(ao_two_e_integral_alpha_tmp(ao_num,ao_num), &
ao_bi_elec_integral_beta_tmp(ao_num,ao_num)) ao_two_e_integral_beta_tmp(ao_num,ao_num))
ao_bi_elec_integral_alpha_tmp = 0.d0 ao_two_e_integral_alpha_tmp = 0.d0
ao_bi_elec_integral_beta_tmp = 0.d0 ao_two_e_integral_beta_tmp = 0.d0
!$OMP DO SCHEDULE(dynamic,64) !$OMP DO SCHEDULE(dynamic,64)
!DIR$ NOVECTOR !DIR$ NOVECTOR
@ -131,7 +131,7 @@
n_elements = n_elements_max n_elements = n_elements_max
call get_cache_map(ao_integrals_map,i8,keys,values,n_elements) call get_cache_map(ao_integrals_map,i8,keys,values,n_elements)
do k1=1,n_elements do k1=1,n_elements
call bielec_integrals_index_reverse(kk,ii,ll,jj,keys(k1)) call two_e_integrals_index_reverse(kk,ii,ll,jj,keys(k1))
do k2=1,8 do k2=1,8
if (kk(k2)==0) then if (kk(k2)==0) then
@ -142,22 +142,22 @@
k = kk(k2) k = kk(k2)
l = ll(k2) l = ll(k2)
integral = (SCF_density_matrix_ao_alpha(k,l)+SCF_density_matrix_ao_beta(k,l)) * values(k1) integral = (SCF_density_matrix_ao_alpha(k,l)+SCF_density_matrix_ao_beta(k,l)) * values(k1)
ao_bi_elec_integral_alpha_tmp(i,j) += integral ao_two_e_integral_alpha_tmp(i,j) += integral
ao_bi_elec_integral_beta_tmp (i,j) += integral ao_two_e_integral_beta_tmp (i,j) += integral
integral = values(k1) integral = values(k1)
ao_bi_elec_integral_alpha_tmp(l,j) -= HF_exchange * (SCF_density_matrix_ao_alpha(k,i) * integral) ao_two_e_integral_alpha_tmp(l,j) -= HF_exchange * (SCF_density_matrix_ao_alpha(k,i) * integral)
ao_bi_elec_integral_beta_tmp (l,j) -= HF_exchange * (SCF_density_matrix_ao_beta (k,i) * integral) ao_two_e_integral_beta_tmp (l,j) -= HF_exchange * (SCF_density_matrix_ao_beta (k,i) * integral)
enddo enddo
enddo enddo
enddo enddo
!$OMP END DO NOWAIT !$OMP END DO NOWAIT
!$OMP CRITICAL !$OMP CRITICAL
ao_bi_elec_integral_alpha += ao_bi_elec_integral_alpha_tmp ao_two_e_integral_alpha += ao_two_e_integral_alpha_tmp
!$OMP END CRITICAL !$OMP END CRITICAL
!$OMP CRITICAL !$OMP CRITICAL
ao_bi_elec_integral_beta += ao_bi_elec_integral_beta_tmp ao_two_e_integral_beta += ao_two_e_integral_beta_tmp
!$OMP END CRITICAL !$OMP END CRITICAL
deallocate(keys,values,ao_bi_elec_integral_alpha_tmp,ao_bi_elec_integral_beta_tmp) deallocate(keys,values,ao_two_e_integral_alpha_tmp,ao_two_e_integral_beta_tmp)
!$OMP END PARALLEL !$OMP END PARALLEL
endif endif
@ -192,8 +192,8 @@ END_PROVIDER
integer :: i,j integer :: i,j
do j=1,ao_num do j=1,ao_num
do i=1,ao_num do i=1,ao_num
Fock_matrix_alpha_no_xc_ao(i,j) = ao_one_e_integrals(i,j) + ao_bi_elec_integral_alpha(i,j) Fock_matrix_alpha_no_xc_ao(i,j) = ao_one_e_integrals(i,j) + ao_two_e_integral_alpha(i,j)
Fock_matrix_beta_no_xc_ao(i,j) = ao_one_e_integrals(i,j) + ao_bi_elec_integral_beta (i,j) Fock_matrix_beta_no_xc_ao(i,j) = ao_one_e_integrals(i,j) + ao_two_e_integral_beta (i,j)
enddo enddo
enddo enddo

View File

@ -19,8 +19,8 @@
do i=1,ao_num do i=1,ao_num
Fock_matrix_energy += Fock_matrix_ao_alpha(i,j) * SCF_density_matrix_ao_alpha(i,j) + & Fock_matrix_energy += Fock_matrix_ao_alpha(i,j) * SCF_density_matrix_ao_alpha(i,j) + &
Fock_matrix_ao_beta(i,j) * SCF_density_matrix_ao_beta(i,j) Fock_matrix_ao_beta(i,j) * SCF_density_matrix_ao_beta(i,j)
two_electron_energy += 0.5d0 * ( ao_bi_elec_integral_alpha(i,j) * SCF_density_matrix_ao_alpha(i,j) & two_electron_energy += 0.5d0 * ( ao_two_e_integral_alpha(i,j) * SCF_density_matrix_ao_alpha(i,j) &
+ao_bi_elec_integral_beta(i,j) * SCF_density_matrix_ao_beta(i,j) ) +ao_two_e_integral_beta(i,j) * SCF_density_matrix_ao_beta(i,j) )
one_electron_energy += ao_one_e_integrals(i,j) * (SCF_density_matrix_ao_alpha(i,j) + SCF_density_matrix_ao_beta (i,j) ) one_electron_energy += ao_one_e_integrals(i,j) * (SCF_density_matrix_ao_alpha(i,j) + SCF_density_matrix_ao_beta (i,j) )
trace_potential_xc += ao_potential_alpha_xc(i,j) * SCF_density_matrix_ao_alpha(i,j) + ao_potential_beta_xc(i,j) * SCF_density_matrix_ao_beta (i,j) trace_potential_xc += ao_potential_alpha_xc(i,j) * SCF_density_matrix_ao_alpha(i,j) + ao_potential_beta_xc(i,j) * SCF_density_matrix_ao_beta (i,j)
enddo enddo

View File

@ -64,7 +64,7 @@ subroutine create_guess
mo_coef = ao_ortho_lowdin_coef mo_coef = ao_ortho_lowdin_coef
TOUCH mo_coef TOUCH mo_coef
mo_label = 'Guess' mo_label = 'Guess'
call mo_as_eigvectors_of_mo_matrix(mo_mono_elec_integrals,size(mo_mono_elec_integrals,1),size(mo_mono_elec_integrals,2),mo_label,.false.) call mo_as_eigvectors_of_mo_matrix(mo_one_e_integrals,size(mo_one_e_integrals,1),size(mo_one_e_integrals,2),mo_label,.false.)
SOFT_TOUCH mo_coef mo_label SOFT_TOUCH mo_coef mo_label
else if (mo_guess_type == "Huckel") then else if (mo_guess_type == "Huckel") then
call huckel_guess call huckel_guess

View File

@ -1,5 +1,5 @@
BEGIN_PROVIDER [ double precision, ao_bi_elec_integral_alpha, (ao_num, ao_num) ] BEGIN_PROVIDER [ double precision, ao_two_e_integral_alpha, (ao_num, ao_num) ]
&BEGIN_PROVIDER [ double precision, ao_bi_elec_integral_beta , (ao_num, ao_num) ] &BEGIN_PROVIDER [ double precision, ao_two_e_integral_beta , (ao_num, ao_num) ]
use map_module use map_module
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -10,34 +10,34 @@
integer :: i0,j0,k0,l0 integer :: i0,j0,k0,l0
integer*8 :: p,q integer*8 :: p,q
double precision :: integral, c0, c1, c2 double precision :: integral, c0, c1, c2
double precision :: ao_bielec_integral, local_threshold double precision :: ao_two_e_integral, local_threshold
double precision, allocatable :: ao_bi_elec_integral_alpha_tmp(:,:) double precision, allocatable :: ao_two_e_integral_alpha_tmp(:,:)
double precision, allocatable :: ao_bi_elec_integral_beta_tmp(:,:) double precision, allocatable :: ao_two_e_integral_beta_tmp(:,:)
!DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: ao_bi_elec_integral_beta_tmp !DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: ao_two_e_integral_beta_tmp
!DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: ao_bi_elec_integral_alpha_tmp !DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: ao_two_e_integral_alpha_tmp
ao_bi_elec_integral_alpha = 0.d0 ao_two_e_integral_alpha = 0.d0
ao_bi_elec_integral_beta = 0.d0 ao_two_e_integral_beta = 0.d0
if (do_direct_integrals) then if (do_direct_integrals) then
!$OMP PARALLEL DEFAULT(NONE) & !$OMP PARALLEL DEFAULT(NONE) &
!$OMP PRIVATE(i,j,l,k1,k,integral,ii,jj,kk,ll,i8,keys,values,p,q,r,s,i0,j0,k0,l0, & !$OMP PRIVATE(i,j,l,k1,k,integral,ii,jj,kk,ll,i8,keys,values,p,q,r,s,i0,j0,k0,l0, &
!$OMP ao_bi_elec_integral_alpha_tmp,ao_bi_elec_integral_beta_tmp, c0, c1, c2, & !$OMP ao_two_e_integral_alpha_tmp,ao_two_e_integral_beta_tmp, c0, c1, c2, &
!$OMP local_threshold)& !$OMP local_threshold)&
!$OMP SHARED(ao_num,SCF_density_matrix_ao_alpha,SCF_density_matrix_ao_beta,& !$OMP SHARED(ao_num,SCF_density_matrix_ao_alpha,SCF_density_matrix_ao_beta,&
!$OMP ao_integrals_map,ao_integrals_threshold, ao_bielec_integral_schwartz, & !$OMP ao_integrals_map,ao_integrals_threshold, ao_two_e_integral_schwartz, &
!$OMP ao_overlap_abs, ao_bi_elec_integral_alpha, ao_bi_elec_integral_beta) !$OMP ao_overlap_abs, ao_two_e_integral_alpha, ao_two_e_integral_beta)
allocate(keys(1), values(1)) allocate(keys(1), values(1))
allocate(ao_bi_elec_integral_alpha_tmp(ao_num,ao_num), & allocate(ao_two_e_integral_alpha_tmp(ao_num,ao_num), &
ao_bi_elec_integral_beta_tmp(ao_num,ao_num)) ao_two_e_integral_beta_tmp(ao_num,ao_num))
ao_bi_elec_integral_alpha_tmp = 0.d0 ao_two_e_integral_alpha_tmp = 0.d0
ao_bi_elec_integral_beta_tmp = 0.d0 ao_two_e_integral_beta_tmp = 0.d0
q = ao_num*ao_num*ao_num*ao_num q = ao_num*ao_num*ao_num*ao_num
!$OMP DO SCHEDULE(dynamic) !$OMP DO SCHEDULE(dynamic)
do p=1_8,q do p=1_8,q
call bielec_integrals_index_reverse(kk,ii,ll,jj,p) call two_e_integrals_index_reverse(kk,ii,ll,jj,p)
if ( (kk(1)>ao_num).or. & if ( (kk(1)>ao_num).or. &
(ii(1)>ao_num).or. & (ii(1)>ao_num).or. &
(jj(1)>ao_num).or. & (jj(1)>ao_num).or. &
@ -53,7 +53,7 @@
< ao_integrals_threshold) then < ao_integrals_threshold) then
cycle cycle
endif endif
local_threshold = ao_bielec_integral_schwartz(k,l)*ao_bielec_integral_schwartz(i,j) local_threshold = ao_two_e_integral_schwartz(k,l)*ao_two_e_integral_schwartz(i,j)
if (local_threshold < ao_integrals_threshold) then if (local_threshold < ao_integrals_threshold) then
cycle cycle
endif endif
@ -78,28 +78,28 @@
cycle cycle
endif endif
if (values(1) == 0.d0) then if (values(1) == 0.d0) then
values(1) = ao_bielec_integral(k0,l0,i0,j0) values(1) = ao_two_e_integral(k0,l0,i0,j0)
endif endif
integral = c0 * values(1) integral = c0 * values(1)
ao_bi_elec_integral_alpha_tmp(i,j) += integral ao_two_e_integral_alpha_tmp(i,j) += integral
ao_bi_elec_integral_beta_tmp (i,j) += integral ao_two_e_integral_beta_tmp (i,j) += integral
integral = values(1) integral = values(1)
ao_bi_elec_integral_alpha_tmp(l,j) -= c1 * integral ao_two_e_integral_alpha_tmp(l,j) -= c1 * integral
ao_bi_elec_integral_beta_tmp (l,j) -= c2 * integral ao_two_e_integral_beta_tmp (l,j) -= c2 * integral
enddo enddo
enddo enddo
!$OMP END DO NOWAIT !$OMP END DO NOWAIT
!$OMP CRITICAL !$OMP CRITICAL
ao_bi_elec_integral_alpha += ao_bi_elec_integral_alpha_tmp ao_two_e_integral_alpha += ao_two_e_integral_alpha_tmp
!$OMP END CRITICAL !$OMP END CRITICAL
!$OMP CRITICAL !$OMP CRITICAL
ao_bi_elec_integral_beta += ao_bi_elec_integral_beta_tmp ao_two_e_integral_beta += ao_two_e_integral_beta_tmp
!$OMP END CRITICAL !$OMP END CRITICAL
deallocate(keys,values,ao_bi_elec_integral_alpha_tmp,ao_bi_elec_integral_beta_tmp) deallocate(keys,values,ao_two_e_integral_alpha_tmp,ao_two_e_integral_beta_tmp)
!$OMP END PARALLEL !$OMP END PARALLEL
else else
PROVIDE ao_bielec_integrals_in_map PROVIDE ao_two_e_integrals_in_map
PROVIDE ao_bielec_integrals_erf_in_map PROVIDE ao_two_e_integrals_erf_in_map
integer(omp_lock_kind) :: lck(ao_num) integer(omp_lock_kind) :: lck(ao_num)
integer*8 :: i8 integer*8 :: i8
@ -113,16 +113,16 @@
!$OMP PARALLEL DEFAULT(NONE) & !$OMP PARALLEL DEFAULT(NONE) &
!$OMP PRIVATE(i,j,l,k1,k,integral,ii,jj,kk,ll,i8,keys,values,n_elements_max, & !$OMP PRIVATE(i,j,l,k1,k,integral,ii,jj,kk,ll,i8,keys,values,n_elements_max, &
!$OMP n_elements,ao_bi_elec_integral_alpha_tmp,ao_bi_elec_integral_beta_tmp)& !$OMP n_elements,ao_two_e_integral_alpha_tmp,ao_two_e_integral_beta_tmp)&
!$OMP SHARED(ao_num,SCF_density_matrix_ao_alpha,SCF_density_matrix_ao_beta,& !$OMP SHARED(ao_num,SCF_density_matrix_ao_alpha,SCF_density_matrix_ao_beta,&
!$OMP ao_integrals_map, ao_bi_elec_integral_alpha, ao_bi_elec_integral_beta) !$OMP ao_integrals_map, ao_two_e_integral_alpha, ao_two_e_integral_beta)
call get_cache_map_n_elements_max(ao_integrals_map,n_elements_max) call get_cache_map_n_elements_max(ao_integrals_map,n_elements_max)
allocate(keys(n_elements_max), values(n_elements_max)) allocate(keys(n_elements_max), values(n_elements_max))
allocate(ao_bi_elec_integral_alpha_tmp(ao_num,ao_num), & allocate(ao_two_e_integral_alpha_tmp(ao_num,ao_num), &
ao_bi_elec_integral_beta_tmp(ao_num,ao_num)) ao_two_e_integral_beta_tmp(ao_num,ao_num))
ao_bi_elec_integral_alpha_tmp = 0.d0 ao_two_e_integral_alpha_tmp = 0.d0
ao_bi_elec_integral_beta_tmp = 0.d0 ao_two_e_integral_beta_tmp = 0.d0
!$OMP DO SCHEDULE(dynamic,64) !$OMP DO SCHEDULE(dynamic,64)
!DIR$ NOVECTOR !DIR$ NOVECTOR
@ -130,7 +130,7 @@
n_elements = n_elements_max n_elements = n_elements_max
call get_cache_map(ao_integrals_map,i8,keys,values,n_elements) call get_cache_map(ao_integrals_map,i8,keys,values,n_elements)
do k1=1,n_elements do k1=1,n_elements
call bielec_integrals_index_reverse(kk,ii,ll,jj,keys(k1)) call two_e_integrals_index_reverse(kk,ii,ll,jj,keys(k1))
do k2=1,8 do k2=1,8
if (kk(k2)==0) then if (kk(k2)==0) then
@ -141,42 +141,42 @@
k = kk(k2) k = kk(k2)
l = ll(k2) l = ll(k2)
integral = (SCF_density_matrix_ao_alpha(k,l)+SCF_density_matrix_ao_beta(k,l)) * values(k1) integral = (SCF_density_matrix_ao_alpha(k,l)+SCF_density_matrix_ao_beta(k,l)) * values(k1)
ao_bi_elec_integral_alpha_tmp(i,j) += integral ao_two_e_integral_alpha_tmp(i,j) += integral
ao_bi_elec_integral_beta_tmp (i,j) += integral ao_two_e_integral_beta_tmp (i,j) += integral
enddo enddo
enddo enddo
enddo enddo
!$OMP END DO NOWAIT !$OMP END DO NOWAIT
!$OMP CRITICAL !$OMP CRITICAL
ao_bi_elec_integral_alpha += ao_bi_elec_integral_alpha_tmp ao_two_e_integral_alpha += ao_two_e_integral_alpha_tmp
!$OMP END CRITICAL !$OMP END CRITICAL
!$OMP CRITICAL !$OMP CRITICAL
ao_bi_elec_integral_beta += ao_bi_elec_integral_beta_tmp ao_two_e_integral_beta += ao_two_e_integral_beta_tmp
!$OMP END CRITICAL !$OMP END CRITICAL
deallocate(keys,values,ao_bi_elec_integral_alpha_tmp,ao_bi_elec_integral_beta_tmp) deallocate(keys,values,ao_two_e_integral_alpha_tmp,ao_two_e_integral_beta_tmp)
!$OMP END PARALLEL !$OMP END PARALLEL
!$OMP PARALLEL DEFAULT(NONE) & !$OMP PARALLEL DEFAULT(NONE) &
!$OMP PRIVATE(i,j,l,k1,k,integral_erf,ii,jj,kk,ll,i8,keys_erf,values_erf,n_elements_max_erf, & !$OMP PRIVATE(i,j,l,k1,k,integral_erf,ii,jj,kk,ll,i8,keys_erf,values_erf,n_elements_max_erf, &
!$OMP n_elements_erf,ao_bi_elec_integral_alpha_tmp,ao_bi_elec_integral_beta_tmp)& !$OMP n_elements_erf,ao_two_e_integral_alpha_tmp,ao_two_e_integral_beta_tmp)&
!$OMP SHARED(ao_num,SCF_density_matrix_ao_alpha,SCF_density_matrix_ao_beta,& !$OMP SHARED(ao_num,SCF_density_matrix_ao_alpha,SCF_density_matrix_ao_beta,&
!$OMP ao_integrals_erf_map, ao_bi_elec_integral_alpha, ao_bi_elec_integral_beta) !$OMP ao_integrals_erf_map, ao_two_e_integral_alpha, ao_two_e_integral_beta)
call get_cache_map_n_elements_max(ao_integrals_erf_map,n_elements_max_erf) call get_cache_map_n_elements_max(ao_integrals_erf_map,n_elements_max_erf)
allocate(ao_bi_elec_integral_alpha_tmp(ao_num,ao_num), & allocate(ao_two_e_integral_alpha_tmp(ao_num,ao_num), &
ao_bi_elec_integral_beta_tmp(ao_num,ao_num)) ao_two_e_integral_beta_tmp(ao_num,ao_num))
allocate(keys_Erf(n_elements_max_erf), values_erf(n_elements_max_erf)) allocate(keys_Erf(n_elements_max_erf), values_erf(n_elements_max_erf))
ao_bi_elec_integral_alpha_tmp = 0.d0 ao_two_e_integral_alpha_tmp = 0.d0
ao_bi_elec_integral_beta_tmp = 0.d0 ao_two_e_integral_beta_tmp = 0.d0
!$OMP DO SCHEDULE(dynamic,64) !$OMP DO SCHEDULE(dynamic,64)
!DIR$ NOVECTOR !DIR$ NOVECTOR
do i8=0_8,ao_integrals_erf_map%map_size do i8=0_8,ao_integrals_erf_map%map_size
n_elements_erf = n_elements_max_erf n_elements_erf = n_elements_max_erf
call get_cache_map(ao_integrals_erf_map,i8,keys_erf,values_erf,n_elements_erf) call get_cache_map(ao_integrals_erf_map,i8,keys_erf,values_erf,n_elements_erf)
do k1=1,n_elements_erf do k1=1,n_elements_erf
call bielec_integrals_index_reverse(kk,ii,ll,jj,keys_erf(k1)) call two_e_integrals_index_reverse(kk,ii,ll,jj,keys_erf(k1))
do k2=1,8 do k2=1,8
if (kk(k2)==0) then if (kk(k2)==0) then
@ -188,20 +188,20 @@
l = ll(k2) l = ll(k2)
double precision :: integral_erf double precision :: integral_erf
integral_erf = values_erf(k1) integral_erf = values_erf(k1)
ao_bi_elec_integral_alpha_tmp(l,j) -= (SCF_density_matrix_ao_alpha(k,i) * integral_erf) ao_two_e_integral_alpha_tmp(l,j) -= (SCF_density_matrix_ao_alpha(k,i) * integral_erf)
ao_bi_elec_integral_beta_tmp (l,j) -= (SCF_density_matrix_ao_beta (k,i) * integral_erf) ao_two_e_integral_beta_tmp (l,j) -= (SCF_density_matrix_ao_beta (k,i) * integral_erf)
enddo enddo
enddo enddo
enddo enddo
!$OMP END DO NOWAIT !$OMP END DO NOWAIT
!$OMP CRITICAL !$OMP CRITICAL
ao_bi_elec_integral_alpha = ao_bi_elec_integral_alpha + ao_bi_elec_integral_alpha_tmp ao_two_e_integral_alpha = ao_two_e_integral_alpha + ao_two_e_integral_alpha_tmp
!$OMP END CRITICAL !$OMP END CRITICAL
!$OMP CRITICAL !$OMP CRITICAL
ao_bi_elec_integral_beta = ao_bi_elec_integral_beta + ao_bi_elec_integral_beta_tmp ao_two_e_integral_beta = ao_two_e_integral_beta + ao_two_e_integral_beta_tmp
!$OMP END CRITICAL !$OMP END CRITICAL
deallocate(ao_bi_elec_integral_alpha_tmp,ao_bi_elec_integral_beta_tmp) deallocate(ao_two_e_integral_alpha_tmp,ao_two_e_integral_beta_tmp)
deallocate(keys_erf,values_erf) deallocate(keys_erf,values_erf)
!$OMP END PARALLEL !$OMP END PARALLEL
@ -238,8 +238,8 @@ END_PROVIDER
integer :: i,j integer :: i,j
do j=1,ao_num do j=1,ao_num
do i=1,ao_num do i=1,ao_num
Fock_matrix_alpha_no_xc_ao(i,j) = ao_one_e_integrals(i,j) + ao_bi_elec_integral_alpha(i,j) Fock_matrix_alpha_no_xc_ao(i,j) = ao_one_e_integrals(i,j) + ao_two_e_integral_alpha(i,j)
Fock_matrix_beta_no_xc_ao(i,j) = ao_one_e_integrals(i,j) + ao_bi_elec_integral_beta (i,j) Fock_matrix_beta_no_xc_ao(i,j) = ao_one_e_integrals(i,j) + ao_two_e_integral_beta (i,j)
enddo enddo
enddo enddo

View File

@ -19,8 +19,8 @@
do i=1,ao_num do i=1,ao_num
Fock_matrix_energy += Fock_matrix_ao_alpha(i,j) * SCF_density_matrix_ao_alpha(i,j) + & Fock_matrix_energy += Fock_matrix_ao_alpha(i,j) * SCF_density_matrix_ao_alpha(i,j) + &
Fock_matrix_ao_beta(i,j) * SCF_density_matrix_ao_beta(i,j) Fock_matrix_ao_beta(i,j) * SCF_density_matrix_ao_beta(i,j)
two_electron_energy += 0.5d0 * ( ao_bi_elec_integral_alpha(i,j) * SCF_density_matrix_ao_alpha(i,j) & two_electron_energy += 0.5d0 * ( ao_two_e_integral_alpha(i,j) * SCF_density_matrix_ao_alpha(i,j) &
+ao_bi_elec_integral_beta(i,j) * SCF_density_matrix_ao_beta(i,j) ) +ao_two_e_integral_beta(i,j) * SCF_density_matrix_ao_beta(i,j) )
one_electron_energy += ao_one_e_integrals(i,j) * (SCF_density_matrix_ao_alpha(i,j) + SCF_density_matrix_ao_beta (i,j) ) one_electron_energy += ao_one_e_integrals(i,j) * (SCF_density_matrix_ao_alpha(i,j) + SCF_density_matrix_ao_beta (i,j) )
trace_potential_xc += ao_potential_alpha_xc(i,j) * SCF_density_matrix_ao_alpha(i,j) + ao_potential_beta_xc(i,j) * SCF_density_matrix_ao_beta (i,j) trace_potential_xc += ao_potential_alpha_xc(i,j) * SCF_density_matrix_ao_alpha(i,j) + ao_potential_beta_xc(i,j) * SCF_density_matrix_ao_beta (i,j)
enddo enddo

View File

@ -66,7 +66,7 @@ subroutine create_guess
mo_coef = ao_ortho_lowdin_coef mo_coef = ao_ortho_lowdin_coef
TOUCH mo_coef TOUCH mo_coef
mo_label = 'Guess' mo_label = 'Guess'
call mo_as_eigvectors_of_mo_matrix(mo_mono_elec_integrals,size(mo_mono_elec_integrals,1),size(mo_mono_elec_integrals,2),mo_label,.false.) call mo_as_eigvectors_of_mo_matrix(mo_one_e_integrals,size(mo_one_e_integrals,1),size(mo_one_e_integrals,2),mo_label,.false.)
SOFT_TOUCH mo_coef mo_label SOFT_TOUCH mo_coef mo_label
else if (mo_guess_type == "Huckel") then else if (mo_guess_type == "Huckel") then
call huckel_guess call huckel_guess

View File

@ -5,9 +5,9 @@ subroutine hcore_guess
implicit none implicit none
character*(64) :: label character*(64) :: label
label = "Guess" label = "Guess"
call mo_as_eigvectors_of_mo_matrix(mo_mono_elec_integrals, & call mo_as_eigvectors_of_mo_matrix(mo_one_e_integrals, &
size(mo_mono_elec_integrals,1), & size(mo_one_e_integrals,1), &
size(mo_mono_elec_integrals,2),label,1,.false.) size(mo_one_e_integrals,2),label,1,.false.)
call save_mos call save_mos
SOFT_TOUCH mo_coef mo_label SOFT_TOUCH mo_coef mo_label
end end

View File

@ -7,7 +7,7 @@ BEGIN_PROVIDER [double precision, ao_ortho_canonical_nucl_elec_integrals, (mo_nu
!$OMP PARALLEL DO DEFAULT(none) & !$OMP PARALLEL DO DEFAULT(none) &
!$OMP PRIVATE(i,j,i1,j1,c_j1,c_i1) & !$OMP PRIVATE(i,j,i1,j1,c_j1,c_i1) &
!$OMP SHARED(mo_num,ao_num,ao_ortho_canonical_coef, & !$OMP SHARED(mo_num,ao_num,ao_ortho_canonical_coef, &
!$OMP ao_ortho_canonical_nucl_elec_integrals, ao_nucl_elec_integrals) !$OMP ao_ortho_canonical_nucl_elec_integrals, ao_integrals_n_e)
do i = 1, mo_num do i = 1, mo_num
do j = 1, mo_num do j = 1, mo_num
do i1 = 1,ao_num do i1 = 1,ao_num
@ -15,7 +15,7 @@ BEGIN_PROVIDER [double precision, ao_ortho_canonical_nucl_elec_integrals, (mo_nu
do j1 = 1,ao_num do j1 = 1,ao_num
c_j1 = c_i1*ao_ortho_canonical_coef(j1,j) c_j1 = c_i1*ao_ortho_canonical_coef(j1,j)
ao_ortho_canonical_nucl_elec_integrals(j,i) = ao_ortho_canonical_nucl_elec_integrals(j,i) + & ao_ortho_canonical_nucl_elec_integrals(j,i) = ao_ortho_canonical_nucl_elec_integrals(j,i) + &
c_j1 * ao_nucl_elec_integrals(j1,i1) c_j1 * ao_integrals_n_e(j1,i1)
enddo enddo
enddo enddo
enddo enddo

View File

@ -7,7 +7,7 @@ BEGIN_PROVIDER [double precision, ao_ortho_lowdin_nucl_elec_integrals, (mo_num,m
!$OMP PARALLEL DO DEFAULT(none) & !$OMP PARALLEL DO DEFAULT(none) &
!$OMP PRIVATE(i,j,i1,j1,c_j1,c_i1) & !$OMP PRIVATE(i,j,i1,j1,c_j1,c_i1) &
!$OMP SHARED(mo_num,ao_num,ao_ortho_lowdin_coef, & !$OMP SHARED(mo_num,ao_num,ao_ortho_lowdin_coef, &
!$OMP ao_ortho_lowdin_nucl_elec_integrals, ao_nucl_elec_integrals) !$OMP ao_ortho_lowdin_nucl_elec_integrals, ao_integrals_n_e)
do i = 1, mo_num do i = 1, mo_num
do j = 1, mo_num do j = 1, mo_num
do i1 = 1,ao_num do i1 = 1,ao_num
@ -15,7 +15,7 @@ BEGIN_PROVIDER [double precision, ao_ortho_lowdin_nucl_elec_integrals, (mo_num,m
do j1 = 1,ao_num do j1 = 1,ao_num
c_j1 = c_i1*ao_ortho_lowdin_coef(j1,j) c_j1 = c_i1*ao_ortho_lowdin_coef(j1,j)
ao_ortho_lowdin_nucl_elec_integrals(j,i) = ao_ortho_lowdin_nucl_elec_integrals(j,i) + & ao_ortho_lowdin_nucl_elec_integrals(j,i) = ao_ortho_lowdin_nucl_elec_integrals(j,i) + &
c_j1 * ao_nucl_elec_integrals(j1,i1) c_j1 * ao_integrals_n_e(j1,i1)
enddo enddo
enddo enddo
enddo enddo

View File

@ -7,7 +7,7 @@ All the one-electron integrals in |MO| basis are defined here.
The most important providers for usual quantum-chemistry calculation are: The most important providers for usual quantum-chemistry calculation are:
* `mo_kinetic_integrals` which are the kinetic operator integrals on the |AO| basis (see :file:`kin_mo_ints.irp.f`) * `mo_kinetic_integrals` which are the kinetic operator integrals on the |AO| basis (see :file:`kin_mo_ints.irp.f`)
* `mo_nucl_elec_integrals` which are the nuclear-elctron operator integrals on the |AO| basis (see :file:`pot_mo_ints.irp.f`) * `mo_integrals_n_e` which are the nuclear-elctron operator integrals on the |AO| basis (see :file:`pot_mo_ints.irp.f`)
* `mo_mono_elec_integrals` which are the the h_core operator integrals on the |AO| basis (see :file:`mo_mono_ints.irp.f`) * `mo_one_e_integrals` which are the the h_core operator integrals on the |AO| basis (see :file:`mo_mono_ints.irp.f`)
Note that you can find other interesting integrals related to the position operator in :file:`spread_dipole_mo.irp.f`. Note that you can find other interesting integrals related to the position operator in :file:`spread_dipole_mo.irp.f`.

View File

@ -1,4 +1,4 @@
BEGIN_PROVIDER [ double precision, mo_mono_elec_integrals,(mo_num,mo_num)] BEGIN_PROVIDER [ double precision, mo_one_e_integrals,(mo_num,mo_num)]
implicit none implicit none
integer :: i,j,n,l integer :: i,j,n,l
BEGIN_DOC BEGIN_DOC
@ -8,18 +8,18 @@ BEGIN_PROVIDER [ double precision, mo_mono_elec_integrals,(mo_num,mo_num)]
print*,'Providing the mono electronic integrals' print*,'Providing the mono electronic integrals'
IF (read_mo_one_e_integrals) THEN IF (read_mo_one_e_integrals) THEN
call ezfio_get_mo_one_e_ints_mo_one_e_integrals(mo_mono_elec_integrals) call ezfio_get_mo_one_e_ints_mo_one_e_integrals(mo_one_e_integrals)
ELSE ELSE
mo_mono_elec_integrals = mo_nucl_elec_integrals + mo_kinetic_integrals mo_one_e_integrals = mo_integrals_n_e + mo_kinetic_integrals
IF (DO_PSEUDO) THEN IF (DO_PSEUDO) THEN
mo_mono_elec_integrals += mo_pseudo_integrals mo_one_e_integrals += mo_pseudo_integrals
ENDIF ENDIF
ENDIF ENDIF
IF (write_mo_one_e_integrals) THEN IF (write_mo_one_e_integrals) THEN
call ezfio_set_mo_one_e_ints_mo_one_e_integrals(mo_mono_elec_integrals) call ezfio_set_mo_one_e_ints_mo_one_e_integrals(mo_one_e_integrals)
print *, 'MO one-e integrals written to disk' print *, 'MO one-e integrals written to disk'
ENDIF ENDIF

View File

@ -1,44 +1,44 @@
BEGIN_PROVIDER [double precision, mo_nucl_elec_integrals, (mo_num,mo_num)] BEGIN_PROVIDER [double precision, mo_integrals_n_e, (mo_num,mo_num)]
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! Nucleus-electron interaction on the |MO| basis ! Nucleus-electron interaction on the |MO| basis
END_DOC END_DOC
if (read_mo_integrals_e_n) then if (read_mo_integrals_e_n) then
call ezfio_get_mo_one_e_ints_mo_integrals_e_n(mo_nucl_elec_integrals) call ezfio_get_mo_one_e_ints_mo_integrals_e_n(mo_integrals_n_e)
print *, 'MO N-e integrals read from disk' print *, 'MO N-e integrals read from disk'
else else
call ao_to_mo( & call ao_to_mo( &
ao_nucl_elec_integrals, & ao_integrals_n_e, &
size(ao_nucl_elec_integrals,1), & size(ao_integrals_n_e,1), &
mo_nucl_elec_integrals, & mo_integrals_n_e, &
size(mo_nucl_elec_integrals,1) & size(mo_integrals_n_e,1) &
) )
endif endif
if (write_mo_integrals_e_n) then if (write_mo_integrals_e_n) then
call ezfio_set_mo_one_e_ints_mo_integrals_e_n(mo_nucl_elec_integrals) call ezfio_set_mo_one_e_ints_mo_integrals_e_n(mo_integrals_n_e)
print *, 'MO N-e integrals written to disk' print *, 'MO N-e integrals written to disk'
endif endif
END_PROVIDER END_PROVIDER
BEGIN_PROVIDER [double precision, mo_nucl_elec_integrals_per_atom, (mo_num,mo_num,nucl_num)] BEGIN_PROVIDER [double precision, mo_integrals_n_e_per_atom, (mo_num,mo_num,nucl_num)]
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! mo_nucl_elec_integrals_per_atom(i,j,k) = ! mo_integrals_n_e_per_atom(i,j,k) =
! $\langle \phi_i| -\frac{1}{|r-R_k|} | \phi_j \rangle$. ! $\langle \phi_i| -\frac{1}{|r-R_k|} | \phi_j \rangle$.
! where R_k is the coordinate of the k-th nucleus. ! where R_k is the coordinate of the k-th nucleus.
END_DOC END_DOC
integer :: k integer :: k
mo_nucl_elec_integrals_per_atom = 0.d0 mo_integrals_n_e_per_atom = 0.d0
do k = 1, nucl_num do k = 1, nucl_num
call ao_to_mo( & call ao_to_mo( &
ao_nucl_elec_integrals_per_atom(1,1,k), & ao_integrals_n_e_per_atom(1,1,k), &
size(ao_nucl_elec_integrals_per_atom,1), & size(ao_integrals_n_e_per_atom,1), &
mo_nucl_elec_integrals_per_atom(1,1,k), & mo_integrals_n_e_per_atom(1,1,k), &
size(mo_nucl_elec_integrals_per_atom,1) & size(mo_integrals_n_e_per_atom,1) &
) )
enddo enddo

View File

@ -9,7 +9,7 @@ in :file:`Utils/map_module.f90`.
The range separation parameter :math:`{\mu}_{erf}` is the variable :option:`ao_two_e_erf_ints mu_erf`. The range separation parameter :math:`{\mu}_{erf}` is the variable :option:`ao_two_e_erf_ints mu_erf`.
To fetch an |MO| integral, use To fetch an |MO| integral, use
`get_mo_bielec_integral_erf(i,j,k,l,mo_integrals_map_erf)` `get_mo_two_e_integral_erf(i,j,k,l,mo_integrals_map_erf)`
The conventions are: The conventions are:

View File

@ -7,7 +7,7 @@ BEGIN_PROVIDER [double precision, core_energy_erf]
core_energy_erf = 0.d0 core_energy_erf = 0.d0
do i = 1, n_core_orb do i = 1, n_core_orb
j = list_core(i) j = list_core(i)
core_energy_erf += 2.d0 * mo_mono_elec_integrals(j,j) + mo_two_e_int_erf_jj(j,j) core_energy_erf += 2.d0 * mo_one_e_integrals(j,j) + mo_two_e_int_erf_jj(j,j)
do k = i+1, n_core_orb do k = i+1, n_core_orb
l = list_core(k) l = list_core(k)
core_energy_erf += 2.d0 * (2.d0 * mo_two_e_int_erf_jj(j,l) - mo_two_e_int_erf_jj_exchange(j,l)) core_energy_erf += 2.d0 * (2.d0 * mo_two_e_int_erf_jj(j,l) - mo_two_e_int_erf_jj_exchange(j,l))
@ -20,7 +20,7 @@ END_PROVIDER
BEGIN_PROVIDER [double precision, core_fock_operator_erf, (mo_num,mo_num)] BEGIN_PROVIDER [double precision, core_fock_operator_erf, (mo_num,mo_num)]
implicit none implicit none
integer :: i,j,k,l,m,n integer :: i,j,k,l,m,n
double precision :: get_mo_bielec_integral_erf double precision :: get_mo_two_e_integral_erf
BEGIN_DOC BEGIN_DOC
! this is the contribution to the Fock operator from the core electrons with the erf interaction ! this is the contribution to the Fock operator from the core electrons with the erf interaction
END_DOC END_DOC
@ -31,7 +31,7 @@ BEGIN_PROVIDER [double precision, core_fock_operator_erf, (mo_num,mo_num)]
l = list_act(k) l = list_act(k)
do m = 1, n_core_orb do m = 1, n_core_orb
n = list_core(m) n = list_core(m)
core_fock_operator_erf(j,l) += 2.d0 * get_mo_bielec_integral_erf(j,n,l,n,mo_integrals_erf_map) - get_mo_bielec_integral_erf(j,n,n,l,mo_integrals_erf_map) core_fock_operator_erf(j,l) += 2.d0 * get_mo_two_e_integral_erf(j,n,l,n,mo_integrals_erf_map) - get_mo_two_e_integral_erf(j,n,n,l,mo_integrals_erf_map)
enddo enddo
enddo enddo
enddo enddo

View File

@ -7,17 +7,17 @@
! int_erf_3_index_exc(i,j) = <ij|ji> = (ij|ij) with the erf interaction ! int_erf_3_index_exc(i,j) = <ij|ji> = (ij|ij) with the erf interaction
END_DOC END_DOC
integer :: i,j,k,l integer :: i,j,k,l
double precision :: get_mo_bielec_integral_erf double precision :: get_mo_two_e_integral_erf
double precision :: integral double precision :: integral
do k = 1, mo_num do k = 1, mo_num
do i = 1, mo_num do i = 1, mo_num
do j = 1, mo_num do j = 1, mo_num
l = j l = j
integral = get_mo_bielec_integral_erf(i,j,k,l,mo_integrals_erf_map) integral = get_mo_two_e_integral_erf(i,j,k,l,mo_integrals_erf_map)
int_erf_3_index(j,i,k) = integral int_erf_3_index(j,i,k) = integral
l = j l = j
integral = get_mo_bielec_integral_erf(i,j,l,k,mo_integrals_erf_map) integral = get_mo_two_e_integral_erf(i,j,l,k,mo_integrals_erf_map)
int_erf_3_index_exc(j,i,k) = integral int_erf_3_index_exc(j,i,k) = integral
enddo enddo
enddo enddo

View File

@ -56,7 +56,7 @@ BEGIN_PROVIDER [ type(map_type), mo_integrals_erf_map ]
END_DOC END_DOC
integer(key_kind) :: key_max integer(key_kind) :: key_max
integer(map_size_kind) :: sze integer(map_size_kind) :: sze
call bielec_integrals_index(mo_num,mo_num,mo_num,mo_num,key_max) call two_e_integrals_index(mo_num,mo_num,mo_num,mo_num,key_max)
sze = key_max sze = key_max
call map_init(mo_integrals_erf_map,sze) call map_init(mo_integrals_erf_map,sze)
print*, 'MO erf map initialized' print*, 'MO erf map initialized'
@ -94,7 +94,7 @@ BEGIN_PROVIDER [ double precision, mo_integrals_erf_cache, (0:64*64*64*64) ]
BEGIN_DOC BEGIN_DOC
! Cache of |MO| integrals for fast access ! Cache of |MO| integrals for fast access
END_DOC END_DOC
PROVIDE mo_bielec_integrals_erf_in_map PROVIDE mo_two_e_integrals_erf_in_map
integer :: i,j,k,l integer :: i,j,k,l
integer :: ii integer :: ii
integer(key_kind) :: idx integer(key_kind) :: idx
@ -106,7 +106,7 @@ BEGIN_PROVIDER [ double precision, mo_integrals_erf_cache, (0:64*64*64*64) ]
do j=mo_integrals_erf_cache_min,mo_integrals_erf_cache_max do j=mo_integrals_erf_cache_min,mo_integrals_erf_cache_max
do i=mo_integrals_erf_cache_min,mo_integrals_erf_cache_max do i=mo_integrals_erf_cache_min,mo_integrals_erf_cache_max
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
call bielec_integrals_index(i,j,k,l,idx) call two_e_integrals_index(i,j,k,l,idx)
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
call map_get(mo_integrals_erf_map,idx,integral) call map_get(mo_integrals_erf_map,idx,integral)
ii = l-mo_integrals_erf_cache_min ii = l-mo_integrals_erf_cache_min
@ -123,7 +123,7 @@ BEGIN_PROVIDER [ double precision, mo_integrals_erf_cache, (0:64*64*64*64) ]
END_PROVIDER END_PROVIDER
double precision function get_mo_bielec_integral_erf(i,j,k,l,map) double precision function get_mo_two_e_integral_erf(i,j,k,l,map)
use map_module use map_module
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -134,42 +134,42 @@ double precision function get_mo_bielec_integral_erf(i,j,k,l,map)
integer :: ii integer :: ii
type(map_type), intent(inout) :: map type(map_type), intent(inout) :: map
real(integral_kind) :: tmp real(integral_kind) :: tmp
PROVIDE mo_bielec_integrals_erf_in_map mo_integrals_erf_cache PROVIDE mo_two_e_integrals_erf_in_map mo_integrals_erf_cache
ii = l-mo_integrals_erf_cache_min ii = l-mo_integrals_erf_cache_min
ii = ior(ii, k-mo_integrals_erf_cache_min) ii = ior(ii, k-mo_integrals_erf_cache_min)
ii = ior(ii, j-mo_integrals_erf_cache_min) ii = ior(ii, j-mo_integrals_erf_cache_min)
ii = ior(ii, i-mo_integrals_erf_cache_min) ii = ior(ii, i-mo_integrals_erf_cache_min)
if (iand(ii, -64) /= 0) then if (iand(ii, -64) /= 0) then
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
call bielec_integrals_index(i,j,k,l,idx) call two_e_integrals_index(i,j,k,l,idx)
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
call map_get(map,idx,tmp) call map_get(map,idx,tmp)
get_mo_bielec_integral_erf = dble(tmp) get_mo_two_e_integral_erf = dble(tmp)
else else
ii = l-mo_integrals_erf_cache_min ii = l-mo_integrals_erf_cache_min
ii = ior( ishft(ii,6), k-mo_integrals_erf_cache_min) ii = ior( ishft(ii,6), k-mo_integrals_erf_cache_min)
ii = ior( ishft(ii,6), j-mo_integrals_erf_cache_min) ii = ior( ishft(ii,6), j-mo_integrals_erf_cache_min)
ii = ior( ishft(ii,6), i-mo_integrals_erf_cache_min) ii = ior( ishft(ii,6), i-mo_integrals_erf_cache_min)
get_mo_bielec_integral_erf = mo_integrals_erf_cache(ii) get_mo_two_e_integral_erf = mo_integrals_erf_cache(ii)
endif endif
end end
double precision function mo_bielec_integral_erf(i,j,k,l) double precision function mo_two_e_integral_erf(i,j,k,l)
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! Returns one integral $\langle ij|kl \rangle$ in the |MO| basis ! Returns one integral $\langle ij|kl \rangle$ in the |MO| basis
END_DOC END_DOC
integer, intent(in) :: i,j,k,l integer, intent(in) :: i,j,k,l
double precision :: get_mo_bielec_integral_erf double precision :: get_mo_two_e_integral_erf
PROVIDE mo_bielec_integrals_erf_in_map mo_integrals_erf_cache PROVIDE mo_two_e_integrals_erf_in_map mo_integrals_erf_cache
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
PROVIDE mo_bielec_integrals_erf_in_map PROVIDE mo_two_e_integrals_erf_in_map
mo_bielec_integral_erf = get_mo_bielec_integral_erf(i,j,k,l,mo_integrals_erf_map) mo_two_e_integral_erf = get_mo_two_e_integral_erf(i,j,k,l,mo_integrals_erf_map)
return return
end end
subroutine get_mo_bielec_integrals_erf(j,k,l,sze,out_val,map) subroutine get_mo_two_e_integrals_erf(j,k,l,sze,out_val,map)
use map_module use map_module
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -182,11 +182,11 @@ subroutine get_mo_bielec_integrals_erf(j,k,l,sze,out_val,map)
integer :: i integer :: i
integer(key_kind) :: hash(sze) integer(key_kind) :: hash(sze)
real(integral_kind) :: tmp_val(sze) real(integral_kind) :: tmp_val(sze)
PROVIDE mo_bielec_integrals_erf_in_map PROVIDE mo_two_e_integrals_erf_in_map
do i=1,sze do i=1,sze
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
call bielec_integrals_index(i,j,k,l,hash(i)) call two_e_integrals_index(i,j,k,l,hash(i))
enddo enddo
if (key_kind == 8) then if (key_kind == 8) then
@ -200,7 +200,7 @@ subroutine get_mo_bielec_integrals_erf(j,k,l,sze,out_val,map)
endif endif
end end
subroutine get_mo_bielec_integrals_erf_ij(k,l,sze,out_array,map) subroutine get_mo_two_e_integrals_erf_ij(k,l,sze,out_array,map)
use map_module use map_module
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -216,7 +216,7 @@ subroutine get_mo_bielec_integrals_erf_ij(k,l,sze,out_array,map)
integer ,allocatable :: pairs(:,:), iorder(:) integer ,allocatable :: pairs(:,:), iorder(:)
real(integral_kind), allocatable :: tmp_val(:) real(integral_kind), allocatable :: tmp_val(:)
PROVIDE mo_bielec_integrals_erf_in_map PROVIDE mo_two_e_integrals_erf_in_map
allocate (hash(sze*sze), pairs(2,sze*sze),iorder(sze*sze), & allocate (hash(sze*sze), pairs(2,sze*sze),iorder(sze*sze), &
tmp_val(sze*sze)) tmp_val(sze*sze))
@ -226,7 +226,7 @@ subroutine get_mo_bielec_integrals_erf_ij(k,l,sze,out_array,map)
do i=1,sze do i=1,sze
kk += 1 kk += 1
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
call bielec_integrals_index(i,j,k,l,hash(kk)) call two_e_integrals_index(i,j,k,l,hash(kk))
pairs(1,kk) = i pairs(1,kk) = i
pairs(2,kk) = j pairs(2,kk) = j
iorder(kk) = kk iorder(kk) = kk
@ -255,7 +255,7 @@ subroutine get_mo_bielec_integrals_erf_ij(k,l,sze,out_array,map)
end end
subroutine get_mo_bielec_integrals_erf_i1j1(k,l,sze,out_array,map) subroutine get_mo_two_e_integrals_erf_i1j1(k,l,sze,out_array,map)
use map_module use map_module
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -271,7 +271,7 @@ subroutine get_mo_bielec_integrals_erf_i1j1(k,l,sze,out_array,map)
integer ,allocatable :: pairs(:,:), iorder(:) integer ,allocatable :: pairs(:,:), iorder(:)
real(integral_kind), allocatable :: tmp_val(:) real(integral_kind), allocatable :: tmp_val(:)
PROVIDE mo_bielec_integrals_erf_in_map PROVIDE mo_two_e_integrals_erf_in_map
allocate (hash(sze*sze), pairs(2,sze*sze),iorder(sze*sze), & allocate (hash(sze*sze), pairs(2,sze*sze),iorder(sze*sze), &
tmp_val(sze*sze)) tmp_val(sze*sze))
@ -281,7 +281,7 @@ subroutine get_mo_bielec_integrals_erf_i1j1(k,l,sze,out_array,map)
do i=1,sze do i=1,sze
kk += 1 kk += 1
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
call bielec_integrals_index(i,k,j,l,hash(kk)) call two_e_integrals_index(i,k,j,l,hash(kk))
pairs(1,kk) = i pairs(1,kk) = i
pairs(2,kk) = j pairs(2,kk) = j
iorder(kk) = kk iorder(kk) = kk
@ -310,7 +310,7 @@ subroutine get_mo_bielec_integrals_erf_i1j1(k,l,sze,out_array,map)
end end
subroutine get_mo_bielec_integrals_erf_coulomb_ii(k,l,sze,out_val,map) subroutine get_mo_two_e_integrals_erf_coulomb_ii(k,l,sze,out_val,map)
use map_module use map_module
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -325,12 +325,12 @@ subroutine get_mo_bielec_integrals_erf_coulomb_ii(k,l,sze,out_val,map)
integer :: i integer :: i
integer(key_kind) :: hash(sze) integer(key_kind) :: hash(sze)
real(integral_kind) :: tmp_val(sze) real(integral_kind) :: tmp_val(sze)
PROVIDE mo_bielec_integrals_erf_in_map PROVIDE mo_two_e_integrals_erf_in_map
integer :: kk integer :: kk
do i=1,sze do i=1,sze
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
call bielec_integrals_index(k,i,l,i,hash(i)) call two_e_integrals_index(k,i,l,i,hash(i))
enddo enddo
if (key_kind == 8) then if (key_kind == 8) then
@ -344,7 +344,7 @@ subroutine get_mo_bielec_integrals_erf_coulomb_ii(k,l,sze,out_val,map)
endif endif
end end
subroutine get_mo_bielec_integrals_erf_exch_ii(k,l,sze,out_val,map) subroutine get_mo_two_e_integrals_erf_exch_ii(k,l,sze,out_val,map)
use map_module use map_module
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -359,12 +359,12 @@ subroutine get_mo_bielec_integrals_erf_exch_ii(k,l,sze,out_val,map)
integer :: i integer :: i
integer(key_kind) :: hash(sze) integer(key_kind) :: hash(sze)
real(integral_kind) :: tmp_val(sze) real(integral_kind) :: tmp_val(sze)
PROVIDE mo_bielec_integrals_erf_in_map PROVIDE mo_two_e_integrals_erf_in_map
integer :: kk integer :: kk
do i=1,sze do i=1,sze
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
call bielec_integrals_index(k,i,i,l,hash(i)) call two_e_integrals_index(k,i,i,l,hash(i))
enddo enddo
if (key_kind == 8) then if (key_kind == 8) then

View File

@ -1,4 +1,4 @@
subroutine mo_bielec_integrals_erf_index(i,j,k,l,i1) subroutine mo_two_e_integrals_erf_index(i,j,k,l,i1)
use map_module use map_module
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -19,26 +19,26 @@ subroutine mo_bielec_integrals_erf_index(i,j,k,l,i1)
end end
BEGIN_PROVIDER [ logical, mo_bielec_integrals_erf_in_map ] BEGIN_PROVIDER [ logical, mo_two_e_integrals_erf_in_map ]
use map_module use map_module
implicit none implicit none
integer(bit_kind) :: mask_ijkl(N_int,4) integer(bit_kind) :: mask_ijkl(N_int,4)
integer(bit_kind) :: mask_ijk(N_int,3) integer(bit_kind) :: mask_ijk(N_int,3)
BEGIN_DOC BEGIN_DOC
! If True, the map of MO bielectronic integrals is provided ! If True, the map of MO two-electron integrals is provided
END_DOC END_DOC
real :: map_mb real :: map_mb
mo_bielec_integrals_erf_in_map = .True. mo_two_e_integrals_erf_in_map = .True.
if (read_mo_two_e_integrals_erf) then if (read_mo_two_e_integrals_erf) then
print*,'Reading the MO integrals_erf' print*,'Reading the MO integrals_erf'
call map_load_from_disk(trim(ezfio_filename)//'/work/mo_ints_erf',mo_integrals_erf_map) call map_load_from_disk(trim(ezfio_filename)//'/work/mo_ints_erf',mo_integrals_erf_map)
print*, 'MO integrals_erf provided' print*, 'MO integrals_erf provided'
return return
else else
PROVIDE ao_bielec_integrals_erf_in_map PROVIDE ao_two_e_integrals_erf_in_map
endif endif
! call four_index_transform_block(ao_integrals_erf_map,mo_integrals_erf_map, & ! call four_index_transform_block(ao_integrals_erf_map,mo_integrals_erf_map, &
@ -65,9 +65,9 @@ END_PROVIDER
&BEGIN_PROVIDER [ double precision, mo_two_e_int_erf_jj_exchange_from_ao, (mo_num,mo_num) ] &BEGIN_PROVIDER [ double precision, mo_two_e_int_erf_jj_exchange_from_ao, (mo_num,mo_num) ]
&BEGIN_PROVIDER [ double precision, mo_two_e_int_erf_jj_anti_from_ao, (mo_num,mo_num) ] &BEGIN_PROVIDER [ double precision, mo_two_e_int_erf_jj_anti_from_ao, (mo_num,mo_num) ]
BEGIN_DOC BEGIN_DOC
! mo_bielec_integral_jj_from_ao(i,j) = J_ij ! mo_two_e_integral_jj_from_ao(i,j) = J_ij
! mo_bielec_integral_jj_exchange_from_ao(i,j) = J_ij ! mo_two_e_integrals_jj_exchange_from_ao(i,j) = J_ij
! mo_bielec_integral_jj_anti_from_ao(i,j) = J_ij - K_ij ! mo_two_e_integrals_jj_anti_from_ao(i,j) = J_ij - K_ij
END_DOC END_DOC
implicit none implicit none
integer :: i,j,p,q,r,s integer :: i,j,p,q,r,s
@ -80,7 +80,7 @@ END_PROVIDER
double precision, allocatable :: iqrs(:,:), iqsr(:,:), iqis(:), iqri(:) double precision, allocatable :: iqrs(:,:), iqsr(:,:), iqis(:), iqri(:)
if (.not.do_direct_integrals) then if (.not.do_direct_integrals) then
PROVIDE ao_bielec_integrals_erf_in_map mo_coef PROVIDE ao_two_e_integrals_erf_in_map mo_coef
endif endif
mo_two_e_int_erf_jj_from_ao = 0.d0 mo_two_e_int_erf_jj_from_ao = 0.d0
@ -113,9 +113,9 @@ END_PROVIDER
enddo enddo
if (do_direct_integrals) then if (do_direct_integrals) then
double precision :: ao_bielec_integral_erf double precision :: ao_two_e_integral_erf
do r=1,ao_num do r=1,ao_num
call compute_ao_bielec_integrals_erf(q,r,s,ao_num,int_value) call compute_ao_two_e_integrals_erf(q,r,s,ao_num,int_value)
do p=1,ao_num do p=1,ao_num
integral = int_value(p) integral = int_value(p)
if (abs(integral) > ao_integrals_threshold) then if (abs(integral) > ao_integrals_threshold) then
@ -125,7 +125,7 @@ END_PROVIDER
enddo enddo
endif endif
enddo enddo
call compute_ao_bielec_integrals_erf(q,s,r,ao_num,int_value) call compute_ao_two_e_integrals_erf(q,s,r,ao_num,int_value)
do p=1,ao_num do p=1,ao_num
integral = int_value(p) integral = int_value(p)
if (abs(integral) > ao_integrals_threshold) then if (abs(integral) > ao_integrals_threshold) then
@ -140,7 +140,7 @@ END_PROVIDER
else else
do r=1,ao_num do r=1,ao_num
call get_ao_bielec_integrals_erf_non_zero(q,r,s,ao_num,int_value,int_idx,n) call get_ao_two_e_integrals_erf_non_zero(q,r,s,ao_num,int_value,int_idx,n)
do pp=1,n do pp=1,n
p = int_idx(pp) p = int_idx(pp)
integral = int_value(pp) integral = int_value(pp)
@ -151,7 +151,7 @@ END_PROVIDER
enddo enddo
endif endif
enddo enddo
call get_ao_bielec_integrals_erf_non_zero(q,s,r,ao_num,int_value,int_idx,n) call get_ao_two_e_integrals_erf_non_zero(q,s,r,ao_num,int_value,int_idx,n)
do pp=1,n do pp=1,n
p = int_idx(pp) p = int_idx(pp)
integral = int_value(pp) integral = int_value(pp)
@ -200,22 +200,22 @@ END_PROVIDER
&BEGIN_PROVIDER [ double precision, mo_two_e_int_erf_jj_anti, (mo_num,mo_num) ] &BEGIN_PROVIDER [ double precision, mo_two_e_int_erf_jj_anti, (mo_num,mo_num) ]
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! mo_bielec_integral_jj(i,j) = J_ij ! mo_two_e_integrals_jj(i,j) = J_ij
! mo_bielec_integral_jj_exchange(i,j) = K_ij ! mo_two_e_integrals_jj_exchange(i,j) = K_ij
! mo_bielec_integral_jj_anti(i,j) = J_ij - K_ij ! mo_two_e_integrals_jj_anti(i,j) = J_ij - K_ij
END_DOC END_DOC
integer :: i,j integer :: i,j
double precision :: get_mo_bielec_integral_erf double precision :: get_mo_two_e_integral_erf
PROVIDE mo_bielec_integrals_erf_in_map PROVIDE mo_two_e_integrals_erf_in_map
mo_two_e_int_erf_jj = 0.d0 mo_two_e_int_erf_jj = 0.d0
mo_two_e_int_erf_jj_exchange = 0.d0 mo_two_e_int_erf_jj_exchange = 0.d0
do j=1,mo_num do j=1,mo_num
do i=1,mo_num do i=1,mo_num
mo_two_e_int_erf_jj(i,j) = get_mo_bielec_integral_erf(i,j,i,j,mo_integrals_erf_map) mo_two_e_int_erf_jj(i,j) = get_mo_two_e_integral_erf(i,j,i,j,mo_integrals_erf_map)
mo_two_e_int_erf_jj_exchange(i,j) = get_mo_bielec_integral_erf(i,j,j,i,mo_integrals_erf_map) mo_two_e_int_erf_jj_exchange(i,j) = get_mo_two_e_integral_erf(i,j,j,i,mo_integrals_erf_map)
mo_two_e_int_erf_jj_anti(i,j) = mo_two_e_int_erf_jj(i,j) - mo_two_e_int_erf_jj_exchange(i,j) mo_two_e_int_erf_jj_anti(i,j) = mo_two_e_int_erf_jj(i,j) - mo_two_e_int_erf_jj_exchange(i,j)
enddo enddo
enddo enddo
@ -230,7 +230,7 @@ subroutine clear_mo_erf_map
END_DOC END_DOC
call map_deinit(mo_integrals_erf_map) call map_deinit(mo_integrals_erf_map)
FREE mo_integrals_erf_map mo_two_e_int_erf_jj mo_two_e_int_erf_jj_anti FREE mo_integrals_erf_map mo_two_e_int_erf_jj mo_two_e_int_erf_jj_anti
FREE mo_two_e_int_erf_jj_exchange mo_bielec_integrals_erf_in_map FREE mo_two_e_int_erf_jj_exchange mo_two_e_integrals_erf_in_map
end end
@ -238,7 +238,7 @@ end
subroutine provide_all_mo_integrals_erf subroutine provide_all_mo_integrals_erf
implicit none implicit none
provide mo_integrals_erf_map mo_two_e_int_erf_jj mo_two_e_int_erf_jj_anti provide mo_integrals_erf_map mo_two_e_int_erf_jj mo_two_e_int_erf_jj_anti
provide mo_two_e_int_erf_jj_exchange mo_bielec_integrals_erf_in_map provide mo_two_e_int_erf_jj_exchange mo_two_e_integrals_erf_in_map
end end
@ -259,12 +259,12 @@ subroutine add_integrals_to_map_erf(mask_ijkl)
integer, allocatable :: list_ijkl(:,:) integer, allocatable :: list_ijkl(:,:)
integer :: n_i, n_j, n_k, n_l integer :: n_i, n_j, n_k, n_l
integer, allocatable :: bielec_tmp_0_idx(:) integer, allocatable :: two_e_tmp_0_idx(:)
real(integral_kind), allocatable :: bielec_tmp_0(:,:) real(integral_kind), allocatable :: two_e_tmp_0(:,:)
double precision, allocatable :: bielec_tmp_1(:) double precision, allocatable :: two_e_tmp_1(:)
double precision, allocatable :: bielec_tmp_2(:,:) double precision, allocatable :: two_e_tmp_2(:,:)
double precision, allocatable :: bielec_tmp_3(:,:,:) double precision, allocatable :: two_e_tmp_3(:,:,:)
!DIR$ ATTRIBUTES ALIGN : 64 :: bielec_tmp_1, bielec_tmp_2, bielec_tmp_3 !DIR$ ATTRIBUTES ALIGN : 64 :: two_e_tmp_1, two_e_tmp_2, two_e_tmp_3
integer :: n_integrals integer :: n_integrals
integer :: size_buffer integer :: size_buffer
@ -276,7 +276,7 @@ subroutine add_integrals_to_map_erf(mask_ijkl)
integer :: i2,i3,i4 integer :: i2,i3,i4
double precision,parameter :: thr_coef = 1.d-10 double precision,parameter :: thr_coef = 1.d-10
PROVIDE ao_bielec_integrals_in_map mo_coef PROVIDE ao_two_e_integrals_in_map mo_coef
!Get list of MOs for i,j,k and l !Get list of MOs for i,j,k and l
!------------------------------- !-------------------------------
@ -342,7 +342,7 @@ subroutine add_integrals_to_map_erf(mask_ijkl)
accu_bis = 0.d0 accu_bis = 0.d0
!$OMP PARALLEL PRIVATE(l1,k1,j1,i1,i2,i3,i4,i,j,k,l,c, ii1,kmax, & !$OMP PARALLEL PRIVATE(l1,k1,j1,i1,i2,i3,i4,i,j,k,l,c, ii1,kmax, &
!$OMP bielec_tmp_0_idx, bielec_tmp_0, bielec_tmp_1,bielec_tmp_2,bielec_tmp_3,& !$OMP two_e_tmp_0_idx, two_e_tmp_0, two_e_tmp_1,two_e_tmp_2,two_e_tmp_3,&
!$OMP buffer_i,buffer_value,n_integrals,wall_2,i0,j0,k0,l0, & !$OMP buffer_i,buffer_value,n_integrals,wall_2,i0,j0,k0,l0, &
!$OMP wall_0,thread_num,accu_bis) & !$OMP wall_0,thread_num,accu_bis) &
!$OMP DEFAULT(NONE) & !$OMP DEFAULT(NONE) &
@ -353,11 +353,11 @@ subroutine add_integrals_to_map_erf(mask_ijkl)
!$OMP mo_coef,mo_integrals_threshold,mo_integrals_erf_map) !$OMP mo_coef,mo_integrals_threshold,mo_integrals_erf_map)
n_integrals = 0 n_integrals = 0
wall_0 = wall_1 wall_0 = wall_1
allocate(bielec_tmp_3(mo_num, n_j, n_k), & allocate(two_e_tmp_3(mo_num, n_j, n_k), &
bielec_tmp_1(mo_num), & two_e_tmp_1(mo_num), &
bielec_tmp_0(ao_num,ao_num), & two_e_tmp_0(ao_num,ao_num), &
bielec_tmp_0_idx(ao_num), & two_e_tmp_0_idx(ao_num), &
bielec_tmp_2(mo_num, n_j), & two_e_tmp_2(mo_num, n_j), &
buffer_i(size_buffer), & buffer_i(size_buffer), &
buffer_value(size_buffer) ) buffer_value(size_buffer) )
@ -365,57 +365,57 @@ subroutine add_integrals_to_map_erf(mask_ijkl)
!$ thread_num = omp_get_thread_num() !$ thread_num = omp_get_thread_num()
!$OMP DO SCHEDULE(guided) !$OMP DO SCHEDULE(guided)
do l1 = 1,ao_num do l1 = 1,ao_num
bielec_tmp_3 = 0.d0 two_e_tmp_3 = 0.d0
do k1 = 1,ao_num do k1 = 1,ao_num
bielec_tmp_2 = 0.d0 two_e_tmp_2 = 0.d0
do j1 = 1,ao_num do j1 = 1,ao_num
call get_ao_bielec_integrals_erf(j1,k1,l1,ao_num,bielec_tmp_0(1,j1)) ! all integrals for a given l1, k1 call get_ao_two_e_integrals_erf(j1,k1,l1,ao_num,two_e_tmp_0(1,j1)) ! all integrals for a given l1, k1
! call compute_ao_bielec_integrals(j1,k1,l1,ao_num,bielec_tmp_0(1,j1)) ! call compute_ao_two_e_integrals(j1,k1,l1,ao_num,two_e_tmp_0(1,j1))
enddo enddo
do j1 = 1,ao_num do j1 = 1,ao_num
kmax = 0 kmax = 0
do i1 = 1,ao_num do i1 = 1,ao_num
c = bielec_tmp_0(i1,j1) c = two_e_tmp_0(i1,j1)
if (c == 0.d0) then if (c == 0.d0) then
cycle cycle
endif endif
kmax += 1 kmax += 1
bielec_tmp_0(kmax,j1) = c two_e_tmp_0(kmax,j1) = c
bielec_tmp_0_idx(kmax) = i1 two_e_tmp_0_idx(kmax) = i1
enddo enddo
if (kmax==0) then if (kmax==0) then
cycle cycle
endif endif
bielec_tmp_1 = 0.d0 two_e_tmp_1 = 0.d0
ii1=1 ii1=1
! sum_m c_m^i (m) ! sum_m c_m^i (m)
do ii1 = 1,kmax-4,4 do ii1 = 1,kmax-4,4
i1 = bielec_tmp_0_idx(ii1) i1 = two_e_tmp_0_idx(ii1)
i2 = bielec_tmp_0_idx(ii1+1) i2 = two_e_tmp_0_idx(ii1+1)
i3 = bielec_tmp_0_idx(ii1+2) i3 = two_e_tmp_0_idx(ii1+2)
i4 = bielec_tmp_0_idx(ii1+3) i4 = two_e_tmp_0_idx(ii1+3)
do i = list_ijkl(1,1), list_ijkl(n_i,1) do i = list_ijkl(1,1), list_ijkl(n_i,1)
bielec_tmp_1(i) = bielec_tmp_1(i) + & two_e_tmp_1(i) = two_e_tmp_1(i) + &
mo_coef_transp(i,i1) * bielec_tmp_0(ii1,j1) + & mo_coef_transp(i,i1) * two_e_tmp_0(ii1,j1) + &
mo_coef_transp(i,i2) * bielec_tmp_0(ii1+1,j1) + & mo_coef_transp(i,i2) * two_e_tmp_0(ii1+1,j1) + &
mo_coef_transp(i,i3) * bielec_tmp_0(ii1+2,j1) + & mo_coef_transp(i,i3) * two_e_tmp_0(ii1+2,j1) + &
mo_coef_transp(i,i4) * bielec_tmp_0(ii1+3,j1) mo_coef_transp(i,i4) * two_e_tmp_0(ii1+3,j1)
enddo ! i enddo ! i
enddo ! ii1 enddo ! ii1
i2 = ii1 i2 = ii1
do ii1 = i2,kmax do ii1 = i2,kmax
i1 = bielec_tmp_0_idx(ii1) i1 = two_e_tmp_0_idx(ii1)
do i = list_ijkl(1,1), list_ijkl(n_i,1) do i = list_ijkl(1,1), list_ijkl(n_i,1)
bielec_tmp_1(i) = bielec_tmp_1(i) + mo_coef_transp(i,i1) * bielec_tmp_0(ii1,j1) two_e_tmp_1(i) = two_e_tmp_1(i) + mo_coef_transp(i,i1) * two_e_tmp_0(ii1,j1)
enddo ! i enddo ! i
enddo ! ii1 enddo ! ii1
c = 0.d0 c = 0.d0
do i = list_ijkl(1,1), list_ijkl(n_i,1) do i = list_ijkl(1,1), list_ijkl(n_i,1)
c = max(c,abs(bielec_tmp_1(i))) c = max(c,abs(two_e_tmp_1(i)))
if (c>mo_integrals_threshold) exit if (c>mo_integrals_threshold) exit
enddo enddo
if ( c < mo_integrals_threshold ) then if ( c < mo_integrals_threshold ) then
@ -429,11 +429,11 @@ subroutine add_integrals_to_map_erf(mask_ijkl)
cycle cycle
endif endif
do i = list_ijkl(1,1), list_ijkl(n_i,1) do i = list_ijkl(1,1), list_ijkl(n_i,1)
bielec_tmp_2(i,j0) = bielec_tmp_2(i,j0) + c * bielec_tmp_1(i) two_e_tmp_2(i,j0) = two_e_tmp_2(i,j0) + c * two_e_tmp_1(i)
enddo ! i enddo ! i
enddo ! j enddo ! j
enddo !j1 enddo !j1
if ( maxval(abs(bielec_tmp_2)) < mo_integrals_threshold ) then if ( maxval(abs(two_e_tmp_2)) < mo_integrals_threshold ) then
cycle cycle
endif endif
@ -448,7 +448,7 @@ subroutine add_integrals_to_map_erf(mask_ijkl)
do j0 = 1, n_j do j0 = 1, n_j
j = list_ijkl(j0,2) j = list_ijkl(j0,2)
do i = list_ijkl(1,1), k do i = list_ijkl(1,1), k
bielec_tmp_3(i,j0,k0) = bielec_tmp_3(i,j0,k0) + c* bielec_tmp_2(i,j0) two_e_tmp_3(i,j0,k0) = two_e_tmp_3(i,j0,k0) + c* two_e_tmp_2(i,j0)
enddo!i enddo!i
enddo !j enddo !j
@ -478,13 +478,13 @@ subroutine add_integrals_to_map_erf(mask_ijkl)
else else
exit exit
endif endif
bielec_tmp_1 = 0.d0 two_e_tmp_1 = 0.d0
do i0 = 1, n_i do i0 = 1, n_i
i = list_ijkl(i0,1) i = list_ijkl(i0,1)
if (i>k) then if (i>k) then
exit exit
endif endif
bielec_tmp_1(i) = c*bielec_tmp_3(i,j0,k0) two_e_tmp_1(i) = c*two_e_tmp_3(i,j0,k0)
! i1+=1 ! i1+=1
enddo enddo
@ -493,13 +493,13 @@ subroutine add_integrals_to_map_erf(mask_ijkl)
if(i> min(k,j1-i1+list_ijkl(1,1)-1))then if(i> min(k,j1-i1+list_ijkl(1,1)-1))then
exit exit
endif endif
if (abs(bielec_tmp_1(i)) < mo_integrals_threshold) then if (abs(two_e_tmp_1(i)) < mo_integrals_threshold) then
cycle cycle
endif endif
n_integrals += 1 n_integrals += 1
buffer_value(n_integrals) = bielec_tmp_1(i) buffer_value(n_integrals) = two_e_tmp_1(i)
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
call mo_bielec_integrals_index(i,j,k,l,buffer_i(n_integrals)) call mo_two_e_integrals_index(i,j,k,l,buffer_i(n_integrals))
if (n_integrals == size_buffer) then if (n_integrals == size_buffer) then
call insert_into_mo_integrals_erf_map(n_integrals,buffer_i,buffer_value,& call insert_into_mo_integrals_erf_map(n_integrals,buffer_i,buffer_value,&
real(mo_integrals_threshold,integral_kind)) real(mo_integrals_threshold,integral_kind))
@ -520,7 +520,7 @@ subroutine add_integrals_to_map_erf(mask_ijkl)
endif endif
enddo enddo
!$OMP END DO NOWAIT !$OMP END DO NOWAIT
deallocate (bielec_tmp_1,bielec_tmp_2,bielec_tmp_3) deallocate (two_e_tmp_1,two_e_tmp_2,two_e_tmp_3)
integer :: index_needed integer :: index_needed

View File

@ -1,17 +1,17 @@
subroutine save_erf_bi_elec_integrals_mo subroutine save_erf_two_e_integrals_mo
implicit none implicit none
integer :: i,j,k,l integer :: i,j,k,l
PROVIDE mo_bielec_integrals_erf_in_map PROVIDE mo_two_e_integrals_erf_in_map
call ezfio_set_work_empty(.False.) call ezfio_set_work_empty(.False.)
call map_save_to_disk(trim(ezfio_filename)//'/work/mo_ints_erf',mo_integrals_erf_map) call map_save_to_disk(trim(ezfio_filename)//'/work/mo_ints_erf',mo_integrals_erf_map)
call ezfio_set_mo_two_e_erf_ints_io_mo_two_e_integrals_erf('Read') call ezfio_set_mo_two_e_erf_ints_io_mo_two_e_integrals_erf('Read')
end end
subroutine save_erf_bielec_ints_mo_into_ints_mo subroutine save_erf_two_e_ints_mo_into_ints_mo
implicit none implicit none
integer :: i,j,k,l integer :: i,j,k,l
PROVIDE mo_bielec_integrals_erf_in_map PROVIDE mo_two_e_integrals_erf_in_map
call ezfio_set_work_empty(.False.) call ezfio_set_work_empty(.False.)
call map_save_to_disk(trim(ezfio_filename)//'/work/mo_ints',mo_integrals_erf_map) call map_save_to_disk(trim(ezfio_filename)//'/work/mo_ints',mo_integrals_erf_map)
call ezfio_set_mo_two_e_ints_io_mo_two_e_integrals('Read') call ezfio_set_mo_two_e_ints_io_mo_two_e_integrals('Read')

View File

@ -7,10 +7,10 @@ As they have 4 indices and many are zero, they are stored in a map, as defined
in :file:`Utils/map_module.f90`. in :file:`Utils/map_module.f90`.
To fetch an |AO| integral, use the To fetch an |AO| integral, use the
`get_ao_bielec_integral(i,j,k,l,ao_integrals_map)` function, and `get_ao_two_e_integral(i,j,k,l,ao_integrals_map)` function, and
to fetch an |MO| integral, use to fetch an |MO| integral, use
`get_mo_bielec_integral(i,j,k,l,mo_integrals_map)` or `get_two_e_integral(i,j,k,l,mo_integrals_map)` or
`mo_bielec_integral(i,j,k,l)`. `mo_two_e_integral(i,j,k,l)`.
The conventions are: The conventions are:

View File

@ -7,10 +7,10 @@ BEGIN_PROVIDER [double precision, core_energy]
core_energy = 0.d0 core_energy = 0.d0
do i = 1, n_core_orb do i = 1, n_core_orb
j = list_core(i) j = list_core(i)
core_energy += 2.d0 * mo_mono_elec_integrals(j,j) + mo_bielec_integral_jj(j,j) core_energy += 2.d0 * mo_one_e_integrals(j,j) + mo_two_e_integrals_jj(j,j)
do k = i+1, n_core_orb do k = i+1, n_core_orb
l = list_core(k) l = list_core(k)
core_energy += 2.d0 * (2.d0 * mo_bielec_integral_jj(j,l) - mo_bielec_integral_jj_exchange(j,l)) core_energy += 2.d0 * (2.d0 * mo_two_e_integrals_jj(j,l) - mo_two_e_integrals_jj_exchange(j,l))
enddo enddo
enddo enddo
core_energy += nuclear_repulsion core_energy += nuclear_repulsion
@ -20,7 +20,7 @@ END_PROVIDER
BEGIN_PROVIDER [double precision, core_fock_operator, (mo_num,mo_num)] BEGIN_PROVIDER [double precision, core_fock_operator, (mo_num,mo_num)]
implicit none implicit none
integer :: i,j,k,l,m,n integer :: i,j,k,l,m,n
double precision :: get_mo_bielec_integral double precision :: get_two_e_integral
BEGIN_DOC BEGIN_DOC
! this is the contribution to the Fock operator from the core electrons ! this is the contribution to the Fock operator from the core electrons
END_DOC END_DOC
@ -31,7 +31,7 @@ BEGIN_PROVIDER [double precision, core_fock_operator, (mo_num,mo_num)]
l = list_act(k) l = list_act(k)
do m = 1, n_core_orb do m = 1, n_core_orb
n = list_core(m) n = list_core(m)
core_fock_operator(j,l) += 2.d0 * get_mo_bielec_integral(j,n,l,n,mo_integrals_map) - get_mo_bielec_integral(j,n,n,l,mo_integrals_map) core_fock_operator(j,l) += 2.d0 * get_two_e_integral(j,n,l,n,mo_integrals_map) - get_two_e_integral(j,n,n,l,mo_integrals_map)
enddo enddo
enddo enddo
enddo enddo

View File

@ -7,17 +7,17 @@
! big_array_exchange_integrals(i,j) = <ij|ji> = (ij|ij) ! big_array_exchange_integrals(i,j) = <ij|ji> = (ij|ij)
END_DOC END_DOC
integer :: i,j,k,l integer :: i,j,k,l
double precision :: get_mo_bielec_integral double precision :: get_two_e_integral
double precision :: integral double precision :: integral
do k = 1, mo_num do k = 1, mo_num
do i = 1, mo_num do i = 1, mo_num
do j = 1, mo_num do j = 1, mo_num
l = j l = j
integral = get_mo_bielec_integral(i,j,k,l,mo_integrals_map) integral = get_two_e_integral(i,j,k,l,mo_integrals_map)
big_array_coulomb_integrals(j,i,k) = integral big_array_coulomb_integrals(j,i,k) = integral
l = j l = j
integral = get_mo_bielec_integral(i,j,l,k,mo_integrals_map) integral = get_two_e_integral(i,j,l,k,mo_integrals_map)
big_array_exchange_integrals(j,i,k) = integral big_array_exchange_integrals(j,i,k) = integral
enddo enddo
enddo enddo

View File

@ -10,7 +10,7 @@ BEGIN_PROVIDER [ type(map_type), mo_integrals_map ]
END_DOC END_DOC
integer(key_kind) :: key_max integer(key_kind) :: key_max
integer(map_size_kind) :: sze integer(map_size_kind) :: sze
call bielec_integrals_index(mo_num,mo_num,mo_num,mo_num,key_max) call two_e_integrals_index(mo_num,mo_num,mo_num,mo_num,key_max)
sze = key_max sze = key_max
call map_init(mo_integrals_map,sze) call map_init(mo_integrals_map,sze)
print*, 'MO map initialized: ', sze print*, 'MO map initialized: ', sze
@ -52,7 +52,7 @@ BEGIN_PROVIDER [ double precision, mo_integrals_cache, (0_8:128_8*128_8*128_8*12
BEGIN_DOC BEGIN_DOC
! Cache of MO integrals for fast access ! Cache of MO integrals for fast access
END_DOC END_DOC
PROVIDE mo_bielec_integrals_in_map PROVIDE mo_two_e_integrals_in_map
integer*8 :: i,j,k,l integer*8 :: i,j,k,l
integer*4 :: i4,j4,k4,l4 integer*4 :: i4,j4,k4,l4
integer*8 :: ii integer*8 :: ii
@ -69,7 +69,7 @@ BEGIN_PROVIDER [ double precision, mo_integrals_cache, (0_8:128_8*128_8*128_8*12
do i=mo_integrals_cache_min_8,mo_integrals_cache_max_8 do i=mo_integrals_cache_min_8,mo_integrals_cache_max_8
i4 = int(i,4) i4 = int(i,4)
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
call bielec_integrals_index(i4,j4,k4,l4,idx) call two_e_integrals_index(i4,j4,k4,l4,idx)
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
call map_get(mo_integrals_map,idx,integral) call map_get(mo_integrals_map,idx,integral)
ii = l-mo_integrals_cache_min_8 ii = l-mo_integrals_cache_min_8
@ -86,7 +86,7 @@ BEGIN_PROVIDER [ double precision, mo_integrals_cache, (0_8:128_8*128_8*128_8*12
END_PROVIDER END_PROVIDER
double precision function get_mo_bielec_integral(i,j,k,l,map) double precision function get_two_e_integral(i,j,k,l,map)
use map_module use map_module
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -98,42 +98,42 @@ double precision function get_mo_bielec_integral(i,j,k,l,map)
integer*8 :: ii_8 integer*8 :: ii_8
type(map_type), intent(inout) :: map type(map_type), intent(inout) :: map
real(integral_kind) :: tmp real(integral_kind) :: tmp
PROVIDE mo_bielec_integrals_in_map mo_integrals_cache PROVIDE mo_two_e_integrals_in_map mo_integrals_cache
ii = l-mo_integrals_cache_min ii = l-mo_integrals_cache_min
ii = ior(ii, k-mo_integrals_cache_min) ii = ior(ii, k-mo_integrals_cache_min)
ii = ior(ii, j-mo_integrals_cache_min) ii = ior(ii, j-mo_integrals_cache_min)
ii = ior(ii, i-mo_integrals_cache_min) ii = ior(ii, i-mo_integrals_cache_min)
if (iand(ii, -128) /= 0) then if (iand(ii, -128) /= 0) then
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
call bielec_integrals_index(i,j,k,l,idx) call two_e_integrals_index(i,j,k,l,idx)
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
call map_get(map,idx,tmp) call map_get(map,idx,tmp)
get_mo_bielec_integral = dble(tmp) get_two_e_integral = dble(tmp)
else else
ii_8 = int(l,8)-mo_integrals_cache_min_8 ii_8 = int(l,8)-mo_integrals_cache_min_8
ii_8 = ior( shiftl(ii_8,7), int(k,8)-mo_integrals_cache_min_8) ii_8 = ior( shiftl(ii_8,7), int(k,8)-mo_integrals_cache_min_8)
ii_8 = ior( shiftl(ii_8,7), int(j,8)-mo_integrals_cache_min_8) ii_8 = ior( shiftl(ii_8,7), int(j,8)-mo_integrals_cache_min_8)
ii_8 = ior( shiftl(ii_8,7), int(i,8)-mo_integrals_cache_min_8) ii_8 = ior( shiftl(ii_8,7), int(i,8)-mo_integrals_cache_min_8)
get_mo_bielec_integral = mo_integrals_cache(ii_8) get_two_e_integral = mo_integrals_cache(ii_8)
endif endif
end end
double precision function mo_bielec_integral(i,j,k,l) double precision function mo_two_e_integral(i,j,k,l)
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! Returns one integral <ij|kl> in the MO basis ! Returns one integral <ij|kl> in the MO basis
END_DOC END_DOC
integer, intent(in) :: i,j,k,l integer, intent(in) :: i,j,k,l
double precision :: get_mo_bielec_integral double precision :: get_two_e_integral
PROVIDE mo_bielec_integrals_in_map mo_integrals_cache PROVIDE mo_two_e_integrals_in_map mo_integrals_cache
PROVIDE mo_bielec_integrals_in_map PROVIDE mo_two_e_integrals_in_map
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
mo_bielec_integral = get_mo_bielec_integral(i,j,k,l,mo_integrals_map) mo_two_e_integral = get_two_e_integral(i,j,k,l,mo_integrals_map)
return return
end end
subroutine get_mo_bielec_integrals(j,k,l,sze,out_val,map) subroutine get_mo_two_e_integrals(j,k,l,sze,out_val,map)
use map_module use map_module
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -144,15 +144,15 @@ subroutine get_mo_bielec_integrals(j,k,l,sze,out_val,map)
double precision, intent(out) :: out_val(sze) double precision, intent(out) :: out_val(sze)
type(map_type), intent(inout) :: map type(map_type), intent(inout) :: map
integer :: i integer :: i
double precision, external :: get_mo_bielec_integral double precision, external :: get_two_e_integral
PROVIDE mo_bielec_integrals_in_map mo_integrals_cache PROVIDE mo_two_e_integrals_in_map mo_integrals_cache
integer :: ii, ii0 integer :: ii, ii0
integer*8 :: ii_8, ii0_8 integer*8 :: ii_8, ii0_8
real(integral_kind) :: tmp real(integral_kind) :: tmp
integer(key_kind) :: i1, idx integer(key_kind) :: i1, idx
integer(key_kind) :: p,q,r,s,i2 integer(key_kind) :: p,q,r,s,i2
PROVIDE mo_bielec_integrals_in_map mo_integrals_cache PROVIDE mo_two_e_integrals_in_map mo_integrals_cache
ii0 = l-mo_integrals_cache_min ii0 = l-mo_integrals_cache_min
ii0 = ior(ii0, k-mo_integrals_cache_min) ii0 = ior(ii0, k-mo_integrals_cache_min)
@ -185,7 +185,7 @@ subroutine get_mo_bielec_integrals(j,k,l,sze,out_val,map)
enddo enddo
end end
subroutine get_mo_bielec_integrals_ij(k,l,sze,out_array,map) subroutine get_mo_two_e_integrals_ij(k,l,sze,out_array,map)
use map_module use map_module
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -201,7 +201,7 @@ subroutine get_mo_bielec_integrals_ij(k,l,sze,out_array,map)
integer ,allocatable :: pairs(:,:), iorder(:) integer ,allocatable :: pairs(:,:), iorder(:)
real(integral_kind), allocatable :: tmp_val(:) real(integral_kind), allocatable :: tmp_val(:)
PROVIDE mo_bielec_integrals_in_map PROVIDE mo_two_e_integrals_in_map
allocate (hash(sze*sze), pairs(2,sze*sze),iorder(sze*sze), & allocate (hash(sze*sze), pairs(2,sze*sze),iorder(sze*sze), &
tmp_val(sze*sze)) tmp_val(sze*sze))
@ -211,7 +211,7 @@ subroutine get_mo_bielec_integrals_ij(k,l,sze,out_array,map)
do i=1,sze do i=1,sze
kk += 1 kk += 1
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
call bielec_integrals_index(i,j,k,l,hash(kk)) call two_e_integrals_index(i,j,k,l,hash(kk))
pairs(1,kk) = i pairs(1,kk) = i
pairs(2,kk) = j pairs(2,kk) = j
iorder(kk) = kk iorder(kk) = kk
@ -239,7 +239,7 @@ subroutine get_mo_bielec_integrals_ij(k,l,sze,out_array,map)
deallocate(pairs,hash,iorder,tmp_val) deallocate(pairs,hash,iorder,tmp_val)
end end
subroutine get_mo_bielec_integrals_i1j1(k,l,sze,out_array,map) subroutine get_mo_two_e_integrals_i1j1(k,l,sze,out_array,map)
use map_module use map_module
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -255,7 +255,7 @@ subroutine get_mo_bielec_integrals_i1j1(k,l,sze,out_array,map)
integer ,allocatable :: pairs(:,:), iorder(:) integer ,allocatable :: pairs(:,:), iorder(:)
real(integral_kind), allocatable :: tmp_val(:) real(integral_kind), allocatable :: tmp_val(:)
PROVIDE mo_bielec_integrals_in_map PROVIDE mo_two_e_integrals_in_map
allocate (hash(sze*sze), pairs(2,sze*sze),iorder(sze*sze), & allocate (hash(sze*sze), pairs(2,sze*sze),iorder(sze*sze), &
tmp_val(sze*sze)) tmp_val(sze*sze))
@ -265,7 +265,7 @@ subroutine get_mo_bielec_integrals_i1j1(k,l,sze,out_array,map)
do i=1,sze do i=1,sze
kk += 1 kk += 1
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
call bielec_integrals_index(i,k,j,l,hash(kk)) call two_e_integrals_index(i,k,j,l,hash(kk))
pairs(1,kk) = i pairs(1,kk) = i
pairs(2,kk) = j pairs(2,kk) = j
iorder(kk) = kk iorder(kk) = kk
@ -294,7 +294,7 @@ subroutine get_mo_bielec_integrals_i1j1(k,l,sze,out_array,map)
end end
subroutine get_mo_bielec_integrals_coulomb_ii(k,l,sze,out_val,map) subroutine get_mo_two_e_integrals_coulomb_ii(k,l,sze,out_val,map)
use map_module use map_module
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -308,12 +308,12 @@ subroutine get_mo_bielec_integrals_coulomb_ii(k,l,sze,out_val,map)
integer :: i integer :: i
integer(key_kind) :: hash(sze) integer(key_kind) :: hash(sze)
real(integral_kind) :: tmp_val(sze) real(integral_kind) :: tmp_val(sze)
PROVIDE mo_bielec_integrals_in_map PROVIDE mo_two_e_integrals_in_map
integer :: kk integer :: kk
do i=1,sze do i=1,sze
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
call bielec_integrals_index(k,i,l,i,hash(i)) call two_e_integrals_index(k,i,l,i,hash(i))
enddo enddo
if (integral_kind == 8) then if (integral_kind == 8) then
@ -327,7 +327,7 @@ subroutine get_mo_bielec_integrals_coulomb_ii(k,l,sze,out_val,map)
endif endif
end end
subroutine get_mo_bielec_integrals_exch_ii(k,l,sze,out_val,map) subroutine get_mo_two_e_integrals_exch_ii(k,l,sze,out_val,map)
use map_module use map_module
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -341,12 +341,12 @@ subroutine get_mo_bielec_integrals_exch_ii(k,l,sze,out_val,map)
integer :: i integer :: i
integer(key_kind) :: hash(sze) integer(key_kind) :: hash(sze)
real(integral_kind) :: tmp_val(sze) real(integral_kind) :: tmp_val(sze)
PROVIDE mo_bielec_integrals_in_map PROVIDE mo_two_e_integrals_in_map
integer :: kk integer :: kk
do i=1,sze do i=1,sze
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
call bielec_integrals_index(k,i,i,l,hash(i)) call two_e_integrals_index(k,i,i,l,hash(i))
enddo enddo
if (integral_kind == 8) then if (integral_kind == 8) then

View File

@ -1,4 +1,4 @@
subroutine mo_bielec_integrals_index(i,j,k,l,i1) subroutine mo_two_e_integrals_index(i,j,k,l,i1)
use map_module use map_module
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -19,14 +19,14 @@ subroutine mo_bielec_integrals_index(i,j,k,l,i1)
end end
BEGIN_PROVIDER [ logical, mo_bielec_integrals_in_map ] BEGIN_PROVIDER [ logical, mo_two_e_integrals_in_map ]
use map_module use map_module
implicit none implicit none
integer(bit_kind) :: mask_ijkl(N_int,4) integer(bit_kind) :: mask_ijkl(N_int,4)
integer(bit_kind) :: mask_ijk(N_int,3) integer(bit_kind) :: mask_ijk(N_int,3)
BEGIN_DOC BEGIN_DOC
! If True, the map of MO bielectronic integrals is provided ! If True, the map of MO two-electron integrals is provided
END_DOC END_DOC
! The following line avoids a subsequent crash when the memory used is more ! The following line avoids a subsequent crash when the memory used is more
@ -34,14 +34,14 @@ BEGIN_PROVIDER [ logical, mo_bielec_integrals_in_map ]
! with EZFIO ! with EZFIO
PROVIDE mo_class PROVIDE mo_class
mo_bielec_integrals_in_map = .True. mo_two_e_integrals_in_map = .True.
if (read_mo_two_e_integrals) then if (read_mo_two_e_integrals) then
print*,'Reading the MO integrals' print*,'Reading the MO integrals'
call map_load_from_disk(trim(ezfio_filename)//'/work/mo_ints',mo_integrals_map) call map_load_from_disk(trim(ezfio_filename)//'/work/mo_ints',mo_integrals_map)
print*, 'MO integrals provided' print*, 'MO integrals provided'
return return
else else
PROVIDE ao_bielec_integrals_in_map PROVIDE ao_two_e_integrals_in_map
endif endif
print *, '' print *, ''
@ -174,12 +174,12 @@ subroutine add_integrals_to_map(mask_ijkl)
integer, allocatable :: list_ijkl(:,:) integer, allocatable :: list_ijkl(:,:)
integer :: n_i, n_j, n_k, n_l integer :: n_i, n_j, n_k, n_l
integer, allocatable :: bielec_tmp_0_idx(:) integer, allocatable :: two_e_tmp_0_idx(:)
real(integral_kind), allocatable :: bielec_tmp_0(:,:) real(integral_kind), allocatable :: two_e_tmp_0(:,:)
double precision, allocatable :: bielec_tmp_1(:) double precision, allocatable :: two_e_tmp_1(:)
double precision, allocatable :: bielec_tmp_2(:,:) double precision, allocatable :: two_e_tmp_2(:,:)
double precision, allocatable :: bielec_tmp_3(:,:,:) double precision, allocatable :: two_e_tmp_3(:,:,:)
!DIR$ ATTRIBUTES ALIGN : 64 :: bielec_tmp_1, bielec_tmp_2, bielec_tmp_3 !DIR$ ATTRIBUTES ALIGN : 64 :: two_e_tmp_1, two_e_tmp_2, two_e_tmp_3
integer :: n_integrals integer :: n_integrals
integer :: size_buffer integer :: size_buffer
@ -191,7 +191,7 @@ subroutine add_integrals_to_map(mask_ijkl)
integer :: i2,i3,i4 integer :: i2,i3,i4
double precision,parameter :: thr_coef = 1.d-10 double precision,parameter :: thr_coef = 1.d-10
PROVIDE ao_bielec_integrals_in_map mo_coef PROVIDE ao_two_e_integrals_in_map mo_coef
!Get list of MOs for i,j,k and l !Get list of MOs for i,j,k and l
!------------------------------- !-------------------------------
@ -257,7 +257,7 @@ subroutine add_integrals_to_map(mask_ijkl)
accu_bis = 0.d0 accu_bis = 0.d0
!$OMP PARALLEL PRIVATE(l1,k1,j1,i1,i2,i3,i4,i,j,k,l,c, ii1,kmax, & !$OMP PARALLEL PRIVATE(l1,k1,j1,i1,i2,i3,i4,i,j,k,l,c, ii1,kmax, &
!$OMP bielec_tmp_0_idx, bielec_tmp_0, bielec_tmp_1,bielec_tmp_2,bielec_tmp_3,& !$OMP two_e_tmp_0_idx, two_e_tmp_0, two_e_tmp_1,two_e_tmp_2,two_e_tmp_3,&
!$OMP buffer_i,buffer_value,n_integrals,wall_2,i0,j0,k0,l0, & !$OMP buffer_i,buffer_value,n_integrals,wall_2,i0,j0,k0,l0, &
!$OMP wall_0,thread_num,accu_bis) & !$OMP wall_0,thread_num,accu_bis) &
!$OMP DEFAULT(NONE) & !$OMP DEFAULT(NONE) &
@ -268,11 +268,11 @@ subroutine add_integrals_to_map(mask_ijkl)
!$OMP mo_coef,mo_integrals_threshold,mo_integrals_map) !$OMP mo_coef,mo_integrals_threshold,mo_integrals_map)
n_integrals = 0 n_integrals = 0
wall_0 = wall_1 wall_0 = wall_1
allocate(bielec_tmp_3(mo_num, n_j, n_k), & allocate(two_e_tmp_3(mo_num, n_j, n_k), &
bielec_tmp_1(mo_num), & two_e_tmp_1(mo_num), &
bielec_tmp_0(ao_num,ao_num), & two_e_tmp_0(ao_num,ao_num), &
bielec_tmp_0_idx(ao_num), & two_e_tmp_0_idx(ao_num), &
bielec_tmp_2(mo_num, n_j), & two_e_tmp_2(mo_num, n_j), &
buffer_i(size_buffer), & buffer_i(size_buffer), &
buffer_value(size_buffer) ) buffer_value(size_buffer) )
@ -280,56 +280,56 @@ subroutine add_integrals_to_map(mask_ijkl)
!$ thread_num = omp_get_thread_num() !$ thread_num = omp_get_thread_num()
!$OMP DO SCHEDULE(guided) !$OMP DO SCHEDULE(guided)
do l1 = 1,ao_num do l1 = 1,ao_num
bielec_tmp_3 = 0.d0 two_e_tmp_3 = 0.d0
do k1 = 1,ao_num do k1 = 1,ao_num
bielec_tmp_2 = 0.d0 two_e_tmp_2 = 0.d0
do j1 = 1,ao_num do j1 = 1,ao_num
call get_ao_bielec_integrals(j1,k1,l1,ao_num,bielec_tmp_0(1,j1)) call get_ao_two_e_integrals(j1,k1,l1,ao_num,two_e_tmp_0(1,j1))
! call compute_ao_bielec_integrals(j1,k1,l1,ao_num,bielec_tmp_0(1,j1)) ! call compute_ao_two_e_integrals(j1,k1,l1,ao_num,two_e_tmp_0(1,j1))
enddo enddo
do j1 = 1,ao_num do j1 = 1,ao_num
kmax = 0 kmax = 0
do i1 = 1,ao_num do i1 = 1,ao_num
c = bielec_tmp_0(i1,j1) c = two_e_tmp_0(i1,j1)
if (c == 0.d0) then if (c == 0.d0) then
cycle cycle
endif endif
kmax += 1 kmax += 1
bielec_tmp_0(kmax,j1) = c two_e_tmp_0(kmax,j1) = c
bielec_tmp_0_idx(kmax) = i1 two_e_tmp_0_idx(kmax) = i1
enddo enddo
if (kmax==0) then if (kmax==0) then
cycle cycle
endif endif
bielec_tmp_1 = 0.d0 two_e_tmp_1 = 0.d0
ii1=1 ii1=1
do ii1 = 1,kmax-4,4 do ii1 = 1,kmax-4,4
i1 = bielec_tmp_0_idx(ii1) i1 = two_e_tmp_0_idx(ii1)
i2 = bielec_tmp_0_idx(ii1+1) i2 = two_e_tmp_0_idx(ii1+1)
i3 = bielec_tmp_0_idx(ii1+2) i3 = two_e_tmp_0_idx(ii1+2)
i4 = bielec_tmp_0_idx(ii1+3) i4 = two_e_tmp_0_idx(ii1+3)
do i = list_ijkl(1,1), list_ijkl(n_i,1) do i = list_ijkl(1,1), list_ijkl(n_i,1)
bielec_tmp_1(i) = bielec_tmp_1(i) + & two_e_tmp_1(i) = two_e_tmp_1(i) + &
mo_coef_transp(i,i1) * bielec_tmp_0(ii1,j1) + & mo_coef_transp(i,i1) * two_e_tmp_0(ii1,j1) + &
mo_coef_transp(i,i2) * bielec_tmp_0(ii1+1,j1) + & mo_coef_transp(i,i2) * two_e_tmp_0(ii1+1,j1) + &
mo_coef_transp(i,i3) * bielec_tmp_0(ii1+2,j1) + & mo_coef_transp(i,i3) * two_e_tmp_0(ii1+2,j1) + &
mo_coef_transp(i,i4) * bielec_tmp_0(ii1+3,j1) mo_coef_transp(i,i4) * two_e_tmp_0(ii1+3,j1)
enddo ! i enddo ! i
enddo ! ii1 enddo ! ii1
i2 = ii1 i2 = ii1
do ii1 = i2,kmax do ii1 = i2,kmax
i1 = bielec_tmp_0_idx(ii1) i1 = two_e_tmp_0_idx(ii1)
do i = list_ijkl(1,1), list_ijkl(n_i,1) do i = list_ijkl(1,1), list_ijkl(n_i,1)
bielec_tmp_1(i) = bielec_tmp_1(i) + mo_coef_transp(i,i1) * bielec_tmp_0(ii1,j1) two_e_tmp_1(i) = two_e_tmp_1(i) + mo_coef_transp(i,i1) * two_e_tmp_0(ii1,j1)
enddo ! i enddo ! i
enddo ! ii1 enddo ! ii1
c = 0.d0 c = 0.d0
do i = list_ijkl(1,1), list_ijkl(n_i,1) do i = list_ijkl(1,1), list_ijkl(n_i,1)
c = max(c,abs(bielec_tmp_1(i))) c = max(c,abs(two_e_tmp_1(i)))
if (c>mo_integrals_threshold) exit if (c>mo_integrals_threshold) exit
enddo enddo
if ( c < mo_integrals_threshold ) then if ( c < mo_integrals_threshold ) then
@ -343,11 +343,11 @@ subroutine add_integrals_to_map(mask_ijkl)
cycle cycle
endif endif
do i = list_ijkl(1,1), list_ijkl(n_i,1) do i = list_ijkl(1,1), list_ijkl(n_i,1)
bielec_tmp_2(i,j0) = bielec_tmp_2(i,j0) + c * bielec_tmp_1(i) two_e_tmp_2(i,j0) = two_e_tmp_2(i,j0) + c * two_e_tmp_1(i)
enddo ! i enddo ! i
enddo ! j enddo ! j
enddo !j1 enddo !j1
if ( maxval(abs(bielec_tmp_2)) < mo_integrals_threshold ) then if ( maxval(abs(two_e_tmp_2)) < mo_integrals_threshold ) then
cycle cycle
endif endif
@ -362,7 +362,7 @@ subroutine add_integrals_to_map(mask_ijkl)
do j0 = 1, n_j do j0 = 1, n_j
j = list_ijkl(j0,2) j = list_ijkl(j0,2)
do i = list_ijkl(1,1), k do i = list_ijkl(1,1), k
bielec_tmp_3(i,j0,k0) = bielec_tmp_3(i,j0,k0) + c* bielec_tmp_2(i,j0) two_e_tmp_3(i,j0,k0) = two_e_tmp_3(i,j0,k0) + c* two_e_tmp_2(i,j0)
enddo!i enddo!i
enddo !j enddo !j
@ -392,13 +392,13 @@ subroutine add_integrals_to_map(mask_ijkl)
else else
exit exit
endif endif
bielec_tmp_1 = 0.d0 two_e_tmp_1 = 0.d0
do i0 = 1, n_i do i0 = 1, n_i
i = list_ijkl(i0,1) i = list_ijkl(i0,1)
if (i>k) then if (i>k) then
exit exit
endif endif
bielec_tmp_1(i) = c*bielec_tmp_3(i,j0,k0) two_e_tmp_1(i) = c*two_e_tmp_3(i,j0,k0)
! i1+=1 ! i1+=1
enddo enddo
@ -407,13 +407,13 @@ subroutine add_integrals_to_map(mask_ijkl)
if(i> min(k,j1-i1+list_ijkl(1,1)-1))then if(i> min(k,j1-i1+list_ijkl(1,1)-1))then
exit exit
endif endif
if (abs(bielec_tmp_1(i)) < mo_integrals_threshold) then if (abs(two_e_tmp_1(i)) < mo_integrals_threshold) then
cycle cycle
endif endif
n_integrals += 1 n_integrals += 1
buffer_value(n_integrals) = bielec_tmp_1(i) buffer_value(n_integrals) = two_e_tmp_1(i)
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
call mo_bielec_integrals_index(i,j,k,l,buffer_i(n_integrals)) call mo_two_e_integrals_index(i,j,k,l,buffer_i(n_integrals))
if (n_integrals == size_buffer) then if (n_integrals == size_buffer) then
call insert_into_mo_integrals_map(n_integrals,buffer_i,buffer_value,& call insert_into_mo_integrals_map(n_integrals,buffer_i,buffer_value,&
real(mo_integrals_threshold,integral_kind)) real(mo_integrals_threshold,integral_kind))
@ -434,7 +434,7 @@ subroutine add_integrals_to_map(mask_ijkl)
endif endif
enddo enddo
!$OMP END DO NOWAIT !$OMP END DO NOWAIT
deallocate (bielec_tmp_1,bielec_tmp_2,bielec_tmp_3) deallocate (two_e_tmp_1,two_e_tmp_2,two_e_tmp_3)
integer :: index_needed integer :: index_needed
@ -478,12 +478,12 @@ subroutine add_integrals_to_map_three_indices(mask_ijk)
integer, allocatable :: list_ijkl(:,:) integer, allocatable :: list_ijkl(:,:)
integer :: n_i, n_j, n_k integer :: n_i, n_j, n_k
integer :: m integer :: m
integer, allocatable :: bielec_tmp_0_idx(:) integer, allocatable :: two_e_tmp_0_idx(:)
real(integral_kind), allocatable :: bielec_tmp_0(:,:) real(integral_kind), allocatable :: two_e_tmp_0(:,:)
double precision, allocatable :: bielec_tmp_1(:) double precision, allocatable :: two_e_tmp_1(:)
double precision, allocatable :: bielec_tmp_2(:,:) double precision, allocatable :: two_e_tmp_2(:,:)
double precision, allocatable :: bielec_tmp_3(:,:,:) double precision, allocatable :: two_e_tmp_3(:,:,:)
!DIR$ ATTRIBUTES ALIGN : 64 :: bielec_tmp_1, bielec_tmp_2, bielec_tmp_3 !DIR$ ATTRIBUTES ALIGN : 64 :: two_e_tmp_1, two_e_tmp_2, two_e_tmp_3
integer :: n_integrals integer :: n_integrals
integer :: size_buffer integer :: size_buffer
@ -495,7 +495,7 @@ subroutine add_integrals_to_map_three_indices(mask_ijk)
integer :: i2,i3,i4 integer :: i2,i3,i4
double precision,parameter :: thr_coef = 1.d-10 double precision,parameter :: thr_coef = 1.d-10
PROVIDE ao_bielec_integrals_in_map mo_coef PROVIDE ao_two_e_integrals_in_map mo_coef
!Get list of MOs for i,j,k and l !Get list of MOs for i,j,k and l
!------------------------------- !-------------------------------
@ -548,7 +548,7 @@ subroutine add_integrals_to_map_three_indices(mask_ijk)
double precision :: accu_bis double precision :: accu_bis
accu_bis = 0.d0 accu_bis = 0.d0
!$OMP PARALLEL PRIVATE(m,l1,k1,j1,i1,i2,i3,i4,i,j,k,l,c, ii1,kmax, & !$OMP PARALLEL PRIVATE(m,l1,k1,j1,i1,i2,i3,i4,i,j,k,l,c, ii1,kmax, &
!$OMP bielec_tmp_0_idx, bielec_tmp_0, bielec_tmp_1,bielec_tmp_2,bielec_tmp_3,& !$OMP two_e_tmp_0_idx, two_e_tmp_0, two_e_tmp_1,two_e_tmp_2,two_e_tmp_3,&
!$OMP buffer_i,buffer_value,n_integrals,wall_2,i0,j0,k0,l0, & !$OMP buffer_i,buffer_value,n_integrals,wall_2,i0,j0,k0,l0, &
!$OMP wall_0,thread_num,accu_bis) & !$OMP wall_0,thread_num,accu_bis) &
!$OMP DEFAULT(NONE) & !$OMP DEFAULT(NONE) &
@ -559,11 +559,11 @@ subroutine add_integrals_to_map_three_indices(mask_ijk)
!$OMP mo_coef,mo_integrals_threshold,mo_integrals_map) !$OMP mo_coef,mo_integrals_threshold,mo_integrals_map)
n_integrals = 0 n_integrals = 0
wall_0 = wall_1 wall_0 = wall_1
allocate(bielec_tmp_3(mo_num, n_j, n_k), & allocate(two_e_tmp_3(mo_num, n_j, n_k), &
bielec_tmp_1(mo_num), & two_e_tmp_1(mo_num), &
bielec_tmp_0(ao_num,ao_num), & two_e_tmp_0(ao_num,ao_num), &
bielec_tmp_0_idx(ao_num), & two_e_tmp_0_idx(ao_num), &
bielec_tmp_2(mo_num, n_j), & two_e_tmp_2(mo_num, n_j), &
buffer_i(size_buffer), & buffer_i(size_buffer), &
buffer_value(size_buffer) ) buffer_value(size_buffer) )
@ -571,55 +571,55 @@ subroutine add_integrals_to_map_three_indices(mask_ijk)
!$ thread_num = omp_get_thread_num() !$ thread_num = omp_get_thread_num()
!$OMP DO SCHEDULE(guided) !$OMP DO SCHEDULE(guided)
do l1 = 1,ao_num do l1 = 1,ao_num
bielec_tmp_3 = 0.d0 two_e_tmp_3 = 0.d0
do k1 = 1,ao_num do k1 = 1,ao_num
bielec_tmp_2 = 0.d0 two_e_tmp_2 = 0.d0
do j1 = 1,ao_num do j1 = 1,ao_num
call get_ao_bielec_integrals(j1,k1,l1,ao_num,bielec_tmp_0(1,j1)) call get_ao_two_e_integrals(j1,k1,l1,ao_num,two_e_tmp_0(1,j1))
enddo enddo
do j1 = 1,ao_num do j1 = 1,ao_num
kmax = 0 kmax = 0
do i1 = 1,ao_num do i1 = 1,ao_num
c = bielec_tmp_0(i1,j1) c = two_e_tmp_0(i1,j1)
if (c == 0.d0) then if (c == 0.d0) then
cycle cycle
endif endif
kmax += 1 kmax += 1
bielec_tmp_0(kmax,j1) = c two_e_tmp_0(kmax,j1) = c
bielec_tmp_0_idx(kmax) = i1 two_e_tmp_0_idx(kmax) = i1
enddo enddo
if (kmax==0) then if (kmax==0) then
cycle cycle
endif endif
bielec_tmp_1 = 0.d0 two_e_tmp_1 = 0.d0
ii1=1 ii1=1
do ii1 = 1,kmax-4,4 do ii1 = 1,kmax-4,4
i1 = bielec_tmp_0_idx(ii1) i1 = two_e_tmp_0_idx(ii1)
i2 = bielec_tmp_0_idx(ii1+1) i2 = two_e_tmp_0_idx(ii1+1)
i3 = bielec_tmp_0_idx(ii1+2) i3 = two_e_tmp_0_idx(ii1+2)
i4 = bielec_tmp_0_idx(ii1+3) i4 = two_e_tmp_0_idx(ii1+3)
do i = list_ijkl(1,1), list_ijkl(n_i,1) do i = list_ijkl(1,1), list_ijkl(n_i,1)
bielec_tmp_1(i) = bielec_tmp_1(i) + & two_e_tmp_1(i) = two_e_tmp_1(i) + &
mo_coef_transp(i,i1) * bielec_tmp_0(ii1,j1) + & mo_coef_transp(i,i1) * two_e_tmp_0(ii1,j1) + &
mo_coef_transp(i,i2) * bielec_tmp_0(ii1+1,j1) + & mo_coef_transp(i,i2) * two_e_tmp_0(ii1+1,j1) + &
mo_coef_transp(i,i3) * bielec_tmp_0(ii1+2,j1) + & mo_coef_transp(i,i3) * two_e_tmp_0(ii1+2,j1) + &
mo_coef_transp(i,i4) * bielec_tmp_0(ii1+3,j1) mo_coef_transp(i,i4) * two_e_tmp_0(ii1+3,j1)
enddo ! i enddo ! i
enddo ! ii1 enddo ! ii1
i2 = ii1 i2 = ii1
do ii1 = i2,kmax do ii1 = i2,kmax
i1 = bielec_tmp_0_idx(ii1) i1 = two_e_tmp_0_idx(ii1)
do i = list_ijkl(1,1), list_ijkl(n_i,1) do i = list_ijkl(1,1), list_ijkl(n_i,1)
bielec_tmp_1(i) = bielec_tmp_1(i) + mo_coef_transp(i,i1) * bielec_tmp_0(ii1,j1) two_e_tmp_1(i) = two_e_tmp_1(i) + mo_coef_transp(i,i1) * two_e_tmp_0(ii1,j1)
enddo ! i enddo ! i
enddo ! ii1 enddo ! ii1
c = 0.d0 c = 0.d0
do i = list_ijkl(1,1), list_ijkl(n_i,1) do i = list_ijkl(1,1), list_ijkl(n_i,1)
c = max(c,abs(bielec_tmp_1(i))) c = max(c,abs(two_e_tmp_1(i)))
if (c>mo_integrals_threshold) exit if (c>mo_integrals_threshold) exit
enddo enddo
if ( c < mo_integrals_threshold ) then if ( c < mo_integrals_threshold ) then
@ -633,11 +633,11 @@ subroutine add_integrals_to_map_three_indices(mask_ijk)
cycle cycle
endif endif
do i = list_ijkl(1,1), list_ijkl(n_i,1) do i = list_ijkl(1,1), list_ijkl(n_i,1)
bielec_tmp_2(i,j0) = bielec_tmp_2(i,j0) + c * bielec_tmp_1(i) two_e_tmp_2(i,j0) = two_e_tmp_2(i,j0) + c * two_e_tmp_1(i)
enddo ! i enddo ! i
enddo ! j enddo ! j
enddo !j1 enddo !j1
if ( maxval(abs(bielec_tmp_2)) < mo_integrals_threshold ) then if ( maxval(abs(two_e_tmp_2)) < mo_integrals_threshold ) then
cycle cycle
endif endif
@ -652,7 +652,7 @@ subroutine add_integrals_to_map_three_indices(mask_ijk)
do j0 = 1, n_j do j0 = 1, n_j
j = list_ijkl(j0,2) j = list_ijkl(j0,2)
do i = list_ijkl(1,1), k do i = list_ijkl(1,1), k
bielec_tmp_3(i,j0,k0) = bielec_tmp_3(i,j0,k0) + c* bielec_tmp_2(i,j0) two_e_tmp_3(i,j0,k0) = two_e_tmp_3(i,j0,k0) + c* two_e_tmp_2(i,j0)
enddo!i enddo!i
enddo !j enddo !j
@ -670,7 +670,7 @@ subroutine add_integrals_to_map_three_indices(mask_ijk)
do k0 = 1, n_k do k0 = 1, n_k
k = list_ijkl(k0,3) k = list_ijkl(k0,3)
i1 = shiftr((k*k-k),1) i1 = shiftr((k*k-k),1)
bielec_tmp_1 = 0.d0 two_e_tmp_1 = 0.d0
j0 = l0 j0 = l0
j = list_ijkl(j0,2) j = list_ijkl(j0,2)
do i0 = 1, n_i do i0 = 1, n_i
@ -678,7 +678,7 @@ subroutine add_integrals_to_map_three_indices(mask_ijk)
if (i>k) then if (i>k) then
exit exit
endif endif
bielec_tmp_1(i) = c*bielec_tmp_3(i,j0,k0) two_e_tmp_1(i) = c*two_e_tmp_3(i,j0,k0)
enddo enddo
do i0 = 1, n_i do i0 = 1, n_i
@ -686,16 +686,16 @@ subroutine add_integrals_to_map_three_indices(mask_ijk)
if (i>k) then !min(k,j1-i1) if (i>k) then !min(k,j1-i1)
exit exit
endif endif
if (abs(bielec_tmp_1(i)) < mo_integrals_threshold) then if (abs(two_e_tmp_1(i)) < mo_integrals_threshold) then
cycle cycle
endif endif
n_integrals += 1 n_integrals += 1
buffer_value(n_integrals) = bielec_tmp_1(i) buffer_value(n_integrals) = two_e_tmp_1(i)
if(i==k .and. j==l .and. i.ne.j)then if(i==k .and. j==l .and. i.ne.j)then
buffer_value(n_integrals) = buffer_value(n_integrals) *0.5d0 buffer_value(n_integrals) = buffer_value(n_integrals) *0.5d0
endif endif
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
call mo_bielec_integrals_index(i,j,k,l,buffer_i(n_integrals)) call mo_two_e_integrals_index(i,j,k,l,buffer_i(n_integrals))
if (n_integrals == size_buffer) then if (n_integrals == size_buffer) then
call insert_into_mo_integrals_map(n_integrals,buffer_i,buffer_value,& call insert_into_mo_integrals_map(n_integrals,buffer_i,buffer_value,&
real(mo_integrals_threshold,integral_kind)) real(mo_integrals_threshold,integral_kind))
@ -714,7 +714,7 @@ subroutine add_integrals_to_map_three_indices(mask_ijk)
do k0 = 1, n_k do k0 = 1, n_k
k = list_ijkl(k0,3) k = list_ijkl(k0,3)
i1 = shiftr((k*k-k),1) i1 = shiftr((k*k-k),1)
bielec_tmp_1 = 0.d0 two_e_tmp_1 = 0.d0
j0 = k0 j0 = k0
j = list_ijkl(k0,2) j = list_ijkl(k0,2)
i0 = l0 i0 = l0
@ -722,12 +722,12 @@ subroutine add_integrals_to_map_three_indices(mask_ijk)
if (k==l) then if (k==l) then
cycle cycle
endif endif
bielec_tmp_1(i) = c*bielec_tmp_3(i,j0,k0) two_e_tmp_1(i) = c*two_e_tmp_3(i,j0,k0)
n_integrals += 1 n_integrals += 1
buffer_value(n_integrals) = bielec_tmp_1(i) buffer_value(n_integrals) = two_e_tmp_1(i)
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
call mo_bielec_integrals_index(i,j,k,l,buffer_i(n_integrals)) call mo_two_e_integrals_index(i,j,k,l,buffer_i(n_integrals))
if (n_integrals == size_buffer) then if (n_integrals == size_buffer) then
call insert_into_mo_integrals_map(n_integrals,buffer_i,buffer_value,& call insert_into_mo_integrals_map(n_integrals,buffer_i,buffer_value,&
real(mo_integrals_threshold,integral_kind)) real(mo_integrals_threshold,integral_kind))
@ -746,7 +746,7 @@ subroutine add_integrals_to_map_three_indices(mask_ijk)
endif endif
enddo enddo
!$OMP END DO NOWAIT !$OMP END DO NOWAIT
deallocate (bielec_tmp_1,bielec_tmp_2,bielec_tmp_3) deallocate (two_e_tmp_1,two_e_tmp_2,two_e_tmp_3)
integer :: index_needed integer :: index_needed
@ -789,12 +789,12 @@ subroutine add_integrals_to_map_no_exit_34(mask_ijkl)
integer, allocatable :: list_ijkl(:,:) integer, allocatable :: list_ijkl(:,:)
integer :: n_i, n_j, n_k, n_l integer :: n_i, n_j, n_k, n_l
integer, allocatable :: bielec_tmp_0_idx(:) integer, allocatable :: two_e_tmp_0_idx(:)
real(integral_kind), allocatable :: bielec_tmp_0(:,:) real(integral_kind), allocatable :: two_e_tmp_0(:,:)
double precision, allocatable :: bielec_tmp_1(:) double precision, allocatable :: two_e_tmp_1(:)
double precision, allocatable :: bielec_tmp_2(:,:) double precision, allocatable :: two_e_tmp_2(:,:)
double precision, allocatable :: bielec_tmp_3(:,:,:) double precision, allocatable :: two_e_tmp_3(:,:,:)
!DIR$ ATTRIBUTES ALIGN : 64 :: bielec_tmp_1, bielec_tmp_2, bielec_tmp_3 !DIR$ ATTRIBUTES ALIGN : 64 :: two_e_tmp_1, two_e_tmp_2, two_e_tmp_3
integer :: n_integrals integer :: n_integrals
integer :: size_buffer integer :: size_buffer
@ -806,7 +806,7 @@ subroutine add_integrals_to_map_no_exit_34(mask_ijkl)
integer :: i2,i3,i4 integer :: i2,i3,i4
double precision,parameter :: thr_coef = 1.d-10 double precision,parameter :: thr_coef = 1.d-10
PROVIDE ao_bielec_integrals_in_map mo_coef PROVIDE ao_two_e_integrals_in_map mo_coef
!Get list of MOs for i,j,k and l !Get list of MOs for i,j,k and l
!------------------------------- !-------------------------------
@ -826,7 +826,7 @@ subroutine add_integrals_to_map_no_exit_34(mask_ijkl)
call cpu_time(cpu_1) call cpu_time(cpu_1)
!$OMP PARALLEL PRIVATE(l1,k1,j1,i1,i2,i3,i4,i,j,k,l,c, ii1,kmax, & !$OMP PARALLEL PRIVATE(l1,k1,j1,i1,i2,i3,i4,i,j,k,l,c, ii1,kmax, &
!$OMP bielec_tmp_0_idx, bielec_tmp_0, bielec_tmp_1,bielec_tmp_2,bielec_tmp_3,& !$OMP two_e_tmp_0_idx, two_e_tmp_0, two_e_tmp_1,two_e_tmp_2,two_e_tmp_3,&
!$OMP buffer_i,buffer_value,n_integrals,wall_2,i0,j0,k0,l0, & !$OMP buffer_i,buffer_value,n_integrals,wall_2,i0,j0,k0,l0, &
!$OMP wall_0,thread_num) & !$OMP wall_0,thread_num) &
!$OMP DEFAULT(NONE) & !$OMP DEFAULT(NONE) &
@ -837,11 +837,11 @@ subroutine add_integrals_to_map_no_exit_34(mask_ijkl)
!$OMP mo_coef,mo_integrals_threshold,mo_integrals_map) !$OMP mo_coef,mo_integrals_threshold,mo_integrals_map)
n_integrals = 0 n_integrals = 0
wall_0 = wall_1 wall_0 = wall_1
allocate(bielec_tmp_3(mo_num, n_j, n_k), & allocate(two_e_tmp_3(mo_num, n_j, n_k), &
bielec_tmp_1(mo_num), & two_e_tmp_1(mo_num), &
bielec_tmp_0(ao_num,ao_num), & two_e_tmp_0(ao_num,ao_num), &
bielec_tmp_0_idx(ao_num), & two_e_tmp_0_idx(ao_num), &
bielec_tmp_2(mo_num, n_j), & two_e_tmp_2(mo_num, n_j), &
buffer_i(size_buffer), & buffer_i(size_buffer), &
buffer_value(size_buffer) ) buffer_value(size_buffer) )
@ -854,56 +854,56 @@ subroutine add_integrals_to_map_no_exit_34(mask_ijkl)
! cycle ! cycle
! endif ! endif
!IRP_ENDIF !IRP_ENDIF
bielec_tmp_3 = 0.d0 two_e_tmp_3 = 0.d0
do k1 = 1,ao_num do k1 = 1,ao_num
bielec_tmp_2 = 0.d0 two_e_tmp_2 = 0.d0
do j1 = 1,ao_num do j1 = 1,ao_num
call get_ao_bielec_integrals(j1,k1,l1,ao_num,bielec_tmp_0(1,j1)) call get_ao_two_e_integrals(j1,k1,l1,ao_num,two_e_tmp_0(1,j1))
! call compute_ao_bielec_integrals(j1,k1,l1,ao_num,bielec_tmp_0(1,j1)) ! call compute_ao_two_e_integrals(j1,k1,l1,ao_num,two_e_tmp_0(1,j1))
enddo enddo
do j1 = 1,ao_num do j1 = 1,ao_num
kmax = 0 kmax = 0
do i1 = 1,ao_num do i1 = 1,ao_num
c = bielec_tmp_0(i1,j1) c = two_e_tmp_0(i1,j1)
if (c == 0.d0) then if (c == 0.d0) then
cycle cycle
endif endif
kmax += 1 kmax += 1
bielec_tmp_0(kmax,j1) = c two_e_tmp_0(kmax,j1) = c
bielec_tmp_0_idx(kmax) = i1 two_e_tmp_0_idx(kmax) = i1
enddo enddo
if (kmax==0) then if (kmax==0) then
cycle cycle
endif endif
bielec_tmp_1 = 0.d0 two_e_tmp_1 = 0.d0
ii1=1 ii1=1
do ii1 = 1,kmax-4,4 do ii1 = 1,kmax-4,4
i1 = bielec_tmp_0_idx(ii1) i1 = two_e_tmp_0_idx(ii1)
i2 = bielec_tmp_0_idx(ii1+1) i2 = two_e_tmp_0_idx(ii1+1)
i3 = bielec_tmp_0_idx(ii1+2) i3 = two_e_tmp_0_idx(ii1+2)
i4 = bielec_tmp_0_idx(ii1+3) i4 = two_e_tmp_0_idx(ii1+3)
do i = list_ijkl(1,1), list_ijkl(n_i,1) do i = list_ijkl(1,1), list_ijkl(n_i,1)
bielec_tmp_1(i) = bielec_tmp_1(i) + & two_e_tmp_1(i) = two_e_tmp_1(i) + &
mo_coef_transp(i,i1) * bielec_tmp_0(ii1,j1) + & mo_coef_transp(i,i1) * two_e_tmp_0(ii1,j1) + &
mo_coef_transp(i,i2) * bielec_tmp_0(ii1+1,j1) + & mo_coef_transp(i,i2) * two_e_tmp_0(ii1+1,j1) + &
mo_coef_transp(i,i3) * bielec_tmp_0(ii1+2,j1) + & mo_coef_transp(i,i3) * two_e_tmp_0(ii1+2,j1) + &
mo_coef_transp(i,i4) * bielec_tmp_0(ii1+3,j1) mo_coef_transp(i,i4) * two_e_tmp_0(ii1+3,j1)
enddo ! i enddo ! i
enddo ! ii1 enddo ! ii1
i2 = ii1 i2 = ii1
do ii1 = i2,kmax do ii1 = i2,kmax
i1 = bielec_tmp_0_idx(ii1) i1 = two_e_tmp_0_idx(ii1)
do i = list_ijkl(1,1), list_ijkl(n_i,1) do i = list_ijkl(1,1), list_ijkl(n_i,1)
bielec_tmp_1(i) = bielec_tmp_1(i) + mo_coef_transp(i,i1) * bielec_tmp_0(ii1,j1) two_e_tmp_1(i) = two_e_tmp_1(i) + mo_coef_transp(i,i1) * two_e_tmp_0(ii1,j1)
enddo ! i enddo ! i
enddo ! ii1 enddo ! ii1
c = 0.d0 c = 0.d0
do i = list_ijkl(1,1), list_ijkl(n_i,1) do i = list_ijkl(1,1), list_ijkl(n_i,1)
c = max(c,abs(bielec_tmp_1(i))) c = max(c,abs(two_e_tmp_1(i)))
if (c>mo_integrals_threshold) exit if (c>mo_integrals_threshold) exit
enddo enddo
if ( c < mo_integrals_threshold ) then if ( c < mo_integrals_threshold ) then
@ -917,11 +917,11 @@ subroutine add_integrals_to_map_no_exit_34(mask_ijkl)
cycle cycle
endif endif
do i = list_ijkl(1,1), list_ijkl(n_i,1) do i = list_ijkl(1,1), list_ijkl(n_i,1)
bielec_tmp_2(i,j0) = bielec_tmp_2(i,j0) + c * bielec_tmp_1(i) two_e_tmp_2(i,j0) = two_e_tmp_2(i,j0) + c * two_e_tmp_1(i)
enddo ! i enddo ! i
enddo ! j enddo ! j
enddo !j1 enddo !j1
if ( maxval(abs(bielec_tmp_2)) < mo_integrals_threshold ) then if ( maxval(abs(two_e_tmp_2)) < mo_integrals_threshold ) then
cycle cycle
endif endif
@ -936,7 +936,7 @@ subroutine add_integrals_to_map_no_exit_34(mask_ijkl)
do j0 = 1, n_j do j0 = 1, n_j
j = list_ijkl(j0,2) j = list_ijkl(j0,2)
do i = list_ijkl(1,1), k do i = list_ijkl(1,1), k
bielec_tmp_3(i,j0,k0) = bielec_tmp_3(i,j0,k0) + c* bielec_tmp_2(i,j0) two_e_tmp_3(i,j0,k0) = two_e_tmp_3(i,j0,k0) + c* two_e_tmp_2(i,j0)
enddo!i enddo!i
enddo !j enddo !j
@ -961,13 +961,13 @@ subroutine add_integrals_to_map_no_exit_34(mask_ijkl)
do k0 = 1, n_k do k0 = 1, n_k
k = list_ijkl(k0,3) k = list_ijkl(k0,3)
i1 = shiftr((k*k-k),1) i1 = shiftr((k*k-k),1)
bielec_tmp_1 = 0.d0 two_e_tmp_1 = 0.d0
do i0 = 1, n_i do i0 = 1, n_i
i = list_ijkl(i0,1) i = list_ijkl(i0,1)
if (i>k) then if (i>k) then
exit exit
endif endif
bielec_tmp_1(i) = c*bielec_tmp_3(i,j0,k0) two_e_tmp_1(i) = c*two_e_tmp_3(i,j0,k0)
enddo enddo
do i0 = 1, n_i do i0 = 1, n_i
@ -976,13 +976,13 @@ subroutine add_integrals_to_map_no_exit_34(mask_ijkl)
exit exit
endif endif
if (abs(bielec_tmp_1(i)) < mo_integrals_threshold) then if (abs(two_e_tmp_1(i)) < mo_integrals_threshold) then
cycle cycle
endif endif
n_integrals += 1 n_integrals += 1
buffer_value(n_integrals) = bielec_tmp_1(i) buffer_value(n_integrals) = two_e_tmp_1(i)
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
call mo_bielec_integrals_index(i,j,k,l,buffer_i(n_integrals)) call mo_two_e_integrals_index(i,j,k,l,buffer_i(n_integrals))
if (n_integrals == size_buffer) then if (n_integrals == size_buffer) then
call insert_into_mo_integrals_map(n_integrals,buffer_i,buffer_value,& call insert_into_mo_integrals_map(n_integrals,buffer_i,buffer_value,&
real(mo_integrals_threshold,integral_kind)) real(mo_integrals_threshold,integral_kind))
@ -1003,7 +1003,7 @@ subroutine add_integrals_to_map_no_exit_34(mask_ijkl)
endif endif
enddo enddo
!$OMP END DO NOWAIT !$OMP END DO NOWAIT
deallocate (bielec_tmp_1,bielec_tmp_2,bielec_tmp_3) deallocate (two_e_tmp_1,two_e_tmp_2,two_e_tmp_3)
call insert_into_mo_integrals_map(n_integrals,buffer_i,buffer_value,& call insert_into_mo_integrals_map(n_integrals,buffer_i,buffer_value,&
real(mo_integrals_threshold,integral_kind)) real(mo_integrals_threshold,integral_kind))
@ -1034,14 +1034,14 @@ end
BEGIN_PROVIDER [ double precision, mo_bielec_integral_jj_from_ao, (mo_num,mo_num) ] BEGIN_PROVIDER [ double precision, mo_two_e_integral_jj_from_ao, (mo_num,mo_num) ]
&BEGIN_PROVIDER [ double precision, mo_bielec_integral_jj_exchange_from_ao, (mo_num,mo_num) ] &BEGIN_PROVIDER [ double precision, mo_two_e_integrals_jj_exchange_from_ao, (mo_num,mo_num) ]
&BEGIN_PROVIDER [ double precision, mo_bielec_integral_jj_anti_from_ao, (mo_num,mo_num) ] &BEGIN_PROVIDER [ double precision, mo_two_e_integrals_jj_anti_from_ao, (mo_num,mo_num) ]
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! mo_bielec_integral_jj_from_ao(i,j) = J_ij ! mo_two_e_integral_jj_from_ao(i,j) = J_ij
! mo_bielec_integral_jj_exchange_from_ao(i,j) = J_ij ! mo_two_e_integrals_jj_exchange_from_ao(i,j) = J_ij
! mo_bielec_integral_jj_anti_from_ao(i,j) = J_ij - K_ij ! mo_two_e_integrals_jj_anti_from_ao(i,j) = J_ij - K_ij
END_DOC END_DOC
integer :: i,j,p,q,r,s integer :: i,j,p,q,r,s
@ -1054,11 +1054,11 @@ end
double precision, allocatable :: iqrs(:,:), iqsr(:,:), iqis(:), iqri(:) double precision, allocatable :: iqrs(:,:), iqsr(:,:), iqis(:), iqri(:)
if (.not.do_direct_integrals) then if (.not.do_direct_integrals) then
PROVIDE ao_bielec_integrals_in_map mo_coef PROVIDE ao_two_e_integrals_in_map mo_coef
endif endif
mo_bielec_integral_jj_from_ao = 0.d0 mo_two_e_integral_jj_from_ao = 0.d0
mo_bielec_integral_jj_exchange_from_ao = 0.d0 mo_two_e_integrals_jj_exchange_from_ao = 0.d0
!DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: iqrs, iqsr !DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: iqrs, iqsr
@ -1068,7 +1068,7 @@ end
!$OMP iqrs, iqsr,iqri,iqis) & !$OMP iqrs, iqsr,iqri,iqis) &
!$OMP SHARED(mo_num,mo_coef_transp,ao_num, & !$OMP SHARED(mo_num,mo_coef_transp,ao_num, &
!$OMP ao_integrals_threshold,do_direct_integrals) & !$OMP ao_integrals_threshold,do_direct_integrals) &
!$OMP REDUCTION(+:mo_bielec_integral_jj_from_ao,mo_bielec_integral_jj_exchange_from_ao) !$OMP REDUCTION(+:mo_two_e_integral_jj_from_ao,mo_two_e_integrals_jj_exchange_from_ao)
allocate( int_value(ao_num), int_idx(ao_num), & allocate( int_value(ao_num), int_idx(ao_num), &
iqrs(mo_num,ao_num), iqis(mo_num), iqri(mo_num), & iqrs(mo_num,ao_num), iqis(mo_num), iqri(mo_num), &
@ -1086,9 +1086,9 @@ end
enddo enddo
if (do_direct_integrals) then if (do_direct_integrals) then
double precision :: ao_bielec_integral double precision :: ao_two_e_integral
do r=1,ao_num do r=1,ao_num
call compute_ao_bielec_integrals(q,r,s,ao_num,int_value) call compute_ao_two_e_integrals(q,r,s,ao_num,int_value)
do p=1,ao_num do p=1,ao_num
integral = int_value(p) integral = int_value(p)
if (abs(integral) > ao_integrals_threshold) then if (abs(integral) > ao_integrals_threshold) then
@ -1097,7 +1097,7 @@ end
enddo enddo
endif endif
enddo enddo
call compute_ao_bielec_integrals(q,s,r,ao_num,int_value) call compute_ao_two_e_integrals(q,s,r,ao_num,int_value)
do p=1,ao_num do p=1,ao_num
integral = int_value(p) integral = int_value(p)
if (abs(integral) > ao_integrals_threshold) then if (abs(integral) > ao_integrals_threshold) then
@ -1111,7 +1111,7 @@ end
else else
do r=1,ao_num do r=1,ao_num
call get_ao_bielec_integrals_non_zero(q,r,s,ao_num,int_value,int_idx,n) call get_ao_two_e_integrals_non_zero(q,r,s,ao_num,int_value,int_idx,n)
do pp=1,n do pp=1,n
p = int_idx(pp) p = int_idx(pp)
integral = int_value(pp) integral = int_value(pp)
@ -1121,7 +1121,7 @@ end
enddo enddo
endif endif
enddo enddo
call get_ao_bielec_integrals_non_zero(q,s,r,ao_num,int_value,int_idx,n) call get_ao_two_e_integrals_non_zero(q,s,r,ao_num,int_value,int_idx,n)
do pp=1,n do pp=1,n
p = int_idx(pp) p = int_idx(pp)
integral = int_value(pp) integral = int_value(pp)
@ -1144,8 +1144,8 @@ end
do i=1,mo_num do i=1,mo_num
do j=1,mo_num do j=1,mo_num
c = mo_coef_transp(j,q)*mo_coef_transp(j,s) c = mo_coef_transp(j,q)*mo_coef_transp(j,s)
mo_bielec_integral_jj_from_ao(j,i) += c * iqis(i) mo_two_e_integral_jj_from_ao(j,i) += c * iqis(i)
mo_bielec_integral_jj_exchange_from_ao(j,i) += c * iqri(i) mo_two_e_integrals_jj_exchange_from_ao(j,i) += c * iqri(i)
enddo enddo
enddo enddo
@ -1155,19 +1155,19 @@ end
deallocate(iqrs,iqsr,int_value,int_idx) deallocate(iqrs,iqsr,int_value,int_idx)
!$OMP END PARALLEL !$OMP END PARALLEL
mo_bielec_integral_jj_anti_from_ao = mo_bielec_integral_jj_from_ao - mo_bielec_integral_jj_exchange_from_ao mo_two_e_integrals_jj_anti_from_ao = mo_two_e_integral_jj_from_ao - mo_two_e_integrals_jj_exchange_from_ao
END_PROVIDER END_PROVIDER
BEGIN_PROVIDER [ double precision, mo_bielec_integral_vv_from_ao, (mo_num,mo_num) ] BEGIN_PROVIDER [ double precision, mo_two_e_integrals_vv_from_ao, (mo_num,mo_num) ]
&BEGIN_PROVIDER [ double precision, mo_bielec_integral_vv_exchange_from_ao, (mo_num,mo_num) ] &BEGIN_PROVIDER [ double precision, mo_two_e_integrals_vv_exchange_from_ao, (mo_num,mo_num) ]
&BEGIN_PROVIDER [ double precision, mo_bielec_integral_vv_anti_from_ao, (mo_num,mo_num) ] &BEGIN_PROVIDER [ double precision, mo_two_e_integrals_vv_anti_from_ao, (mo_num,mo_num) ]
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! mo_bielec_integral_vv_from_ao(i,j) = J_ij ! mo_two_e_integrals_vv_from_ao(i,j) = J_ij
! mo_bielec_integral_vv_exchange_from_ao(i,j) = J_ij ! mo_two_e_integrals_vv_exchange_from_ao(i,j) = J_ij
! mo_bielec_integral_vv_anti_from_ao(i,j) = J_ij - K_ij ! mo_two_e_integrals_vv_anti_from_ao(i,j) = J_ij - K_ij
! but only for the virtual orbitals ! but only for the virtual orbitals
END_DOC END_DOC
@ -1182,11 +1182,11 @@ END_PROVIDER
double precision, allocatable :: iqrs(:,:), iqsr(:,:), iqis(:), iqri(:) double precision, allocatable :: iqrs(:,:), iqsr(:,:), iqis(:), iqri(:)
if (.not.do_direct_integrals) then if (.not.do_direct_integrals) then
PROVIDE ao_bielec_integrals_in_map mo_coef PROVIDE ao_two_e_integrals_in_map mo_coef
endif endif
mo_bielec_integral_vv_from_ao = 0.d0 mo_two_e_integrals_vv_from_ao = 0.d0
mo_bielec_integral_vv_exchange_from_ao = 0.d0 mo_two_e_integrals_vv_exchange_from_ao = 0.d0
!DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: iqrs, iqsr !DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: iqrs, iqsr
@ -1196,7 +1196,7 @@ END_PROVIDER
!$OMP iqrs, iqsr,iqri,iqis) & !$OMP iqrs, iqsr,iqri,iqis) &
!$OMP SHARED(n_virt_orb,mo_num,list_virt,mo_coef_transp,ao_num, & !$OMP SHARED(n_virt_orb,mo_num,list_virt,mo_coef_transp,ao_num, &
!$OMP ao_integrals_threshold,do_direct_integrals) & !$OMP ao_integrals_threshold,do_direct_integrals) &
!$OMP REDUCTION(+:mo_bielec_integral_vv_from_ao,mo_bielec_integral_vv_exchange_from_ao) !$OMP REDUCTION(+:mo_two_e_integrals_vv_from_ao,mo_two_e_integrals_vv_exchange_from_ao)
allocate( int_value(ao_num), int_idx(ao_num), & allocate( int_value(ao_num), int_idx(ao_num), &
iqrs(mo_num,ao_num), iqis(mo_num), iqri(mo_num),& iqrs(mo_num,ao_num), iqis(mo_num), iqri(mo_num),&
@ -1215,9 +1215,9 @@ END_PROVIDER
enddo enddo
if (do_direct_integrals) then if (do_direct_integrals) then
double precision :: ao_bielec_integral double precision :: ao_two_e_integral
do r=1,ao_num do r=1,ao_num
call compute_ao_bielec_integrals(q,r,s,ao_num,int_value) call compute_ao_two_e_integrals(q,r,s,ao_num,int_value)
do p=1,ao_num do p=1,ao_num
integral = int_value(p) integral = int_value(p)
if (abs(integral) > ao_integrals_threshold) then if (abs(integral) > ao_integrals_threshold) then
@ -1227,7 +1227,7 @@ END_PROVIDER
enddo enddo
endif endif
enddo enddo
call compute_ao_bielec_integrals(q,s,r,ao_num,int_value) call compute_ao_two_e_integrals(q,s,r,ao_num,int_value)
do p=1,ao_num do p=1,ao_num
integral = int_value(p) integral = int_value(p)
if (abs(integral) > ao_integrals_threshold) then if (abs(integral) > ao_integrals_threshold) then
@ -1242,7 +1242,7 @@ END_PROVIDER
else else
do r=1,ao_num do r=1,ao_num
call get_ao_bielec_integrals_non_zero(q,r,s,ao_num,int_value,int_idx,n) call get_ao_two_e_integrals_non_zero(q,r,s,ao_num,int_value,int_idx,n)
do pp=1,n do pp=1,n
p = int_idx(pp) p = int_idx(pp)
integral = int_value(pp) integral = int_value(pp)
@ -1253,7 +1253,7 @@ END_PROVIDER
enddo enddo
endif endif
enddo enddo
call get_ao_bielec_integrals_non_zero(q,s,r,ao_num,int_value,int_idx,n) call get_ao_two_e_integrals_non_zero(q,s,r,ao_num,int_value,int_idx,n)
do pp=1,n do pp=1,n
p = int_idx(pp) p = int_idx(pp)
integral = int_value(pp) integral = int_value(pp)
@ -1280,8 +1280,8 @@ END_PROVIDER
do j0=1,n_virt_orb do j0=1,n_virt_orb
j = list_virt(j0) j = list_virt(j0)
c = mo_coef_transp(j,q)*mo_coef_transp(j,s) c = mo_coef_transp(j,q)*mo_coef_transp(j,s)
mo_bielec_integral_vv_from_ao(j,i) += c * iqis(i) mo_two_e_integrals_vv_from_ao(j,i) += c * iqis(i)
mo_bielec_integral_vv_exchange_from_ao(j,i) += c * iqri(i) mo_two_e_integrals_vv_exchange_from_ao(j,i) += c * iqri(i)
enddo enddo
enddo enddo
@ -1291,11 +1291,11 @@ END_PROVIDER
deallocate(iqrs,iqsr,int_value,int_idx) deallocate(iqrs,iqsr,int_value,int_idx)
!$OMP END PARALLEL !$OMP END PARALLEL
mo_bielec_integral_vv_anti_from_ao = mo_bielec_integral_vv_from_ao - mo_bielec_integral_vv_exchange_from_ao mo_two_e_integrals_vv_anti_from_ao = mo_two_e_integrals_vv_from_ao - mo_two_e_integrals_vv_exchange_from_ao
! print*, '**********' ! print*, '**********'
! do i0 =1, n_virt_orb ! do i0 =1, n_virt_orb
! i = list_virt(i0) ! i = list_virt(i0)
! print*, mo_bielec_integral_vv_from_ao(i,i) ! print*, mo_two_e_integrals_vv_from_ao(i,i)
! enddo ! enddo
! print*, '**********' ! print*, '**********'
@ -1303,28 +1303,28 @@ END_PROVIDER
END_PROVIDER END_PROVIDER
BEGIN_PROVIDER [ double precision, mo_bielec_integral_jj, (mo_num,mo_num) ] BEGIN_PROVIDER [ double precision, mo_two_e_integrals_jj, (mo_num,mo_num) ]
&BEGIN_PROVIDER [ double precision, mo_bielec_integral_jj_exchange, (mo_num,mo_num) ] &BEGIN_PROVIDER [ double precision, mo_two_e_integrals_jj_exchange, (mo_num,mo_num) ]
&BEGIN_PROVIDER [ double precision, mo_bielec_integral_jj_anti, (mo_num,mo_num) ] &BEGIN_PROVIDER [ double precision, mo_two_e_integrals_jj_anti, (mo_num,mo_num) ]
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! mo_bielec_integral_jj(i,j) = J_ij ! mo_two_e_integrals_jj(i,j) = J_ij
! mo_bielec_integral_jj_exchange(i,j) = K_ij ! mo_two_e_integrals_jj_exchange(i,j) = K_ij
! mo_bielec_integral_jj_anti(i,j) = J_ij - K_ij ! mo_two_e_integrals_jj_anti(i,j) = J_ij - K_ij
END_DOC END_DOC
integer :: i,j integer :: i,j
double precision :: get_mo_bielec_integral double precision :: get_two_e_integral
PROVIDE mo_bielec_integrals_in_map PROVIDE mo_two_e_integrals_in_map
mo_bielec_integral_jj = 0.d0 mo_two_e_integrals_jj = 0.d0
mo_bielec_integral_jj_exchange = 0.d0 mo_two_e_integrals_jj_exchange = 0.d0
do j=1,mo_num do j=1,mo_num
do i=1,mo_num do i=1,mo_num
mo_bielec_integral_jj(i,j) = get_mo_bielec_integral(i,j,i,j,mo_integrals_map) mo_two_e_integrals_jj(i,j) = get_two_e_integral(i,j,i,j,mo_integrals_map)
mo_bielec_integral_jj_exchange(i,j) = get_mo_bielec_integral(i,j,j,i,mo_integrals_map) mo_two_e_integrals_jj_exchange(i,j) = get_two_e_integral(i,j,j,i,mo_integrals_map)
mo_bielec_integral_jj_anti(i,j) = mo_bielec_integral_jj(i,j) - mo_bielec_integral_jj_exchange(i,j) mo_two_e_integrals_jj_anti(i,j) = mo_two_e_integrals_jj(i,j) - mo_two_e_integrals_jj_exchange(i,j)
enddo enddo
enddo enddo
@ -1337,7 +1337,7 @@ subroutine clear_mo_map
! Frees the memory of the MO map ! Frees the memory of the MO map
END_DOC END_DOC
call map_deinit(mo_integrals_map) call map_deinit(mo_integrals_map)
FREE mo_integrals_map mo_bielec_integral_jj mo_bielec_integral_jj_anti FREE mo_integrals_map mo_two_e_integrals_jj mo_two_e_integrals_jj_anti
FREE mo_bielec_integral_jj_exchange mo_bielec_integrals_in_map FREE mo_two_e_integrals_jj_exchange mo_two_e_integrals_in_map
end end

View File

@ -47,7 +47,7 @@ subroutine pt2_h_core(det_pert,c_pert,e_2_pert,H_pert_diag,Nint,ndet,N_st,minili
endif endif
integer :: h1,p1,h2,p2,s1,s2 integer :: h1,p1,h2,p2,s1,s2
call decode_exc(exc,degree,h1,p1,h2,p2,s1,s2) call decode_exc(exc,degree,h1,p1,h2,p2,s1,s2)
c_pert = phase * mo_mono_elec_integrals(h1,p1) c_pert = phase * mo_one_e_integrals(h1,p1)
e_2_pert = -dabs(mo_mono_elec_integrals(h1,p1)+1.d0) e_2_pert = -dabs(mo_one_e_integrals(h1,p1)+1.d0)
end end

View File

@ -17,7 +17,7 @@ subroutine huckel_guess
do i=1,ao_num do i=1,ao_num
A(i,j) = c * ao_overlap(i,j) * (ao_one_e_integrals_diag(i) + ao_one_e_integrals_diag(j)) A(i,j) = c * ao_overlap(i,j) * (ao_one_e_integrals_diag(i) + ao_one_e_integrals_diag(j))
enddo enddo
A(j,j) = ao_one_e_integrals_diag(j) + ao_bi_elec_integral_alpha(j,j) A(j,j) = ao_one_e_integrals_diag(j) + ao_two_e_integral_alpha(j,j)
enddo enddo
Fock_matrix_ao_alpha(1:ao_num,1:ao_num) = A(1:ao_num,1:ao_num) Fock_matrix_ao_alpha(1:ao_num,1:ao_num) = A(1:ao_num,1:ao_num)

View File

@ -14,7 +14,7 @@ program slave
end end
subroutine provide_everything subroutine provide_everything
PROVIDE H_apply_buffer_allocated mo_bielec_integrals_in_map psi_det_generators psi_coef_generators psi_det_sorted_bit psi_selectors n_det_generators n_states generators_bitmask zmq_context N_states_diag PROVIDE H_apply_buffer_allocated mo_two_e_integrals_in_map psi_det_generators psi_coef_generators psi_det_sorted_bit psi_selectors n_det_generators n_states generators_bitmask zmq_context N_states_diag
PROVIDE pt2_e0_denominator mo_num N_int ci_energy mpi_master zmq_state zmq_context PROVIDE pt2_e0_denominator mo_num N_int ci_energy mpi_master zmq_state zmq_context
PROVIDE psi_det psi_coef threshold_generators state_average_weight PROVIDE psi_det psi_coef threshold_generators state_average_weight
PROVIDE N_det_selectors pt2_stoch_istate N_det PROVIDE N_det_selectors pt2_stoch_istate N_det

View File

@ -20,8 +20,8 @@ program qp_ao_ints
zmq_state = 'ao_integrals' zmq_state = 'ao_integrals'
! Provide everything needed ! Provide everything needed
double precision :: integral, ao_bielec_integral double precision :: integral, ao_two_e_integral
integral = ao_bielec_integral(1,1,1,1) integral = ao_two_e_integral(1,1,1,1)
do do
call wait_for_state('ao_integrals',zmq_state) call wait_for_state('ao_integrals',zmq_state)
@ -31,7 +31,7 @@ program qp_ao_ints
!$OMP PARALLEL DEFAULT(PRIVATE) PRIVATE(i) !$OMP PARALLEL DEFAULT(PRIVATE) PRIVATE(i)
i = omp_get_thread_num() i = omp_get_thread_num()
call ao_bielec_integrals_in_map_slave_tcp(i) call ao_two_e_integrals_in_map_slave_tcp(i)
!$OMP END PARALLEL !$OMP END PARALLEL
IRP_IF MPI IRP_IF MPI
call MPI_BARRIER(MPI_COMM_WORLD, ierr) call MPI_BARRIER(MPI_COMM_WORLD, ierr)

View File

@ -26,9 +26,9 @@ program fcidump
integer(key_kind), allocatable :: keys(:) integer(key_kind), allocatable :: keys(:)
double precision, allocatable :: values(:) double precision, allocatable :: values(:)
integer(cache_map_size_kind) :: n_elements, n_elements_max integer(cache_map_size_kind) :: n_elements, n_elements_max
PROVIDE mo_bielec_integrals_in_map PROVIDE mo_two_e_integrals_in_map
double precision :: get_mo_bielec_integral, integral double precision :: get_two_e_integral, integral
do l=1,n_act_orb do l=1,n_act_orb
l1 = list_act(l) l1 = list_act(l)
@ -39,7 +39,7 @@ program fcidump
do i=k,n_act_orb do i=k,n_act_orb
i1 = list_act(i) i1 = list_act(i)
if (i1>=j1) then if (i1>=j1) then
integral = get_mo_bielec_integral(i1,j1,k1,l1,mo_integrals_map) integral = get_two_e_integral(i1,j1,k1,l1,mo_integrals_map)
if (dabs(integral) > mo_integrals_threshold) then if (dabs(integral) > mo_integrals_threshold) then
write(i_unit_output,*) integral, i,k,j,l write(i_unit_output,*) integral, i,k,j,l
endif endif
@ -53,7 +53,7 @@ program fcidump
j1 = list_act(j) j1 = list_act(j)
do i=j,n_act_orb do i=j,n_act_orb
i1 = list_act(i) i1 = list_act(i)
integral = mo_mono_elec_integrals(i1,j1) + core_fock_operator(i1,j1) integral = mo_one_e_integrals(i1,j1) + core_fock_operator(i1,j1)
if (dabs(integral) > mo_integrals_threshold) then if (dabs(integral) > mo_integrals_threshold) then
write(i_unit_output,*) integral, i,j,0,0 write(i_unit_output,*) integral, i,j,0,0
endif endif

View File

@ -7,6 +7,6 @@ program four_idx_transform
io_mo_two_e_integrals = 'Write' io_mo_two_e_integrals = 'Write'
SOFT_TOUCH io_mo_two_e_integrals SOFT_TOUCH io_mo_two_e_integrals
if (.true.) then if (.true.) then
PROVIDE mo_bielec_integrals_in_map PROVIDE mo_two_e_integrals_in_map
endif endif
end end

View File

@ -25,7 +25,7 @@ subroutine routine
integer :: exc(0:2,2,2) integer :: exc(0:2,2,2)
double precision :: phase double precision :: phase
integer :: h1,p1,h2,p2,s1,s2 integer :: h1,p1,h2,p2,s1,s2
double precision :: get_mo_bielec_integral double precision :: get_two_e_integral
double precision :: norm_mono_a,norm_mono_b double precision :: norm_mono_a,norm_mono_b
double precision :: norm_mono_a_2,norm_mono_b_2 double precision :: norm_mono_a_2,norm_mono_b_2
double precision :: norm_mono_a_pert_2,norm_mono_b_pert_2 double precision :: norm_mono_a_pert_2,norm_mono_b_pert_2

View File

@ -1,7 +1,7 @@
program write_integrals program write_integrals
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! Saves the bielec erf integrals into the EZFIO ! Saves the two-electron erf integrals into the EZFIO
END_DOC END_DOC
io_mo_two_e_integrals = 'None' io_mo_two_e_integrals = 'None'
touch io_mo_two_e_integrals touch io_mo_two_e_integrals
@ -13,8 +13,8 @@ end
subroutine routine subroutine routine
implicit none implicit none
call save_erf_bi_elec_integrals_ao call save_erf_two_e_integrals_ao
call save_erf_bi_elec_integrals_mo call save_erf_two_e_integrals_mo
end end