10
0
mirror of https://github.com/LCPQ/quantum_package synced 2024-06-02 11:25:26 +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
.. 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
.. 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
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)
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
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)
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
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`
@ -664,11 +664,11 @@ Providers
.. c:var:: i_x2_pol_mult_mono_elec
.. c:var:: i_x2_pol_mult_one_e
.. 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`
@ -825,11 +825,11 @@ Subroutines / functions
.. c:function:: give_polynom_mult_center_mono_elec
.. c:function:: give_polynomial_mult_center_one_e
.. 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`

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.
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:
@ -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
.. 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
.. code:: text
@ -146,11 +146,11 @@ Subroutines / functions
.. c:function:: ao_bielec_integral_erf
.. c:function:: ao_two_e_integral_erf
.. 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`
@ -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
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`
@ -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
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`
@ -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
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`
@ -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
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`
@ -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
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`
@ -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
.. 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
.. code:: text
@ -294,49 +294,7 @@ Subroutines / functions
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)
.. 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.
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)
@ -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
.. 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
subroutine save_erf_bi_elec_integrals_ao
subroutine save_erf_two_e_integrals_ao
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
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`

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`.
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:
@ -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
.. 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
.. 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
.. code:: text
@ -354,29 +270,85 @@ Subroutines / functions
.. c:function:: bielec_integrals_index
.. c:function:: ao_two_e_integral
.. 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
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
.. 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
.. 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
.. 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
.. code:: text
@ -617,3 +589,31 @@ Subroutines / functions
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:
# `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
double precision, allocatable :: psi_energy_bielec (N_states)
double precision, allocatable :: psi_energy_two_e (N_states)
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
.. 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
.. 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
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`

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
.. 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
.. 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
.. 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
.. code:: text
@ -1403,7 +1335,7 @@ Providers
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
.. 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
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_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`
@ -1701,11 +1701,11 @@ Subroutines / functions
.. c:function:: a_operator_bielec
.. c:function:: a_operator_two_e
.. 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`
@ -1729,11 +1729,11 @@ Subroutines / functions
.. c:function:: ac_operator_bielec
.. c:function:: ac_operator_two_e
.. 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`
@ -2121,11 +2121,11 @@ Subroutines / functions
.. c:function:: diag_h_mat_elem_monoelec
.. c:function:: diag_h_mat_elem_one_e
.. 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`
@ -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
.. 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
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`
@ -3023,11 +3009,11 @@ Subroutines / functions
.. c:function:: i_h_j_monoelec
.. c:function:: i_h_j_one_e
.. 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`
@ -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
.. 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
double precision, allocatable :: ao_bi_elec_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_alpha (ao_num,ao_num)
double precision, allocatable :: ao_two_e_integral_beta (ao_num,ao_num)
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
double precision, allocatable :: ao_bi_elec_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_alpha (ao_num,ao_num)
double precision, allocatable :: ao_two_e_integral_beta (ao_num,ao_num)
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
: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:
* `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_mono_elec_integrals` which are the the h_core operator integrals on the |AO| basis (see :file:`mo_mono_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_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`.
@ -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
.. code:: text
@ -130,11 +156,11 @@ Providers
.. c:var:: mo_mono_elec_integrals
.. c:var:: mo_one_e_integrals
.. 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`
@ -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
.. 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`.
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:
@ -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
.. code:: text
@ -190,7 +177,7 @@ Providers
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`
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`
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`
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`
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`
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
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`
@ -317,11 +331,11 @@ Subroutines / functions
.. c:function:: get_mo_bielec_integrals_erf
.. c:function:: get_mo_two_e_integrals_erf
.. 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`
@ -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
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`
@ -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
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`
@ -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
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`
@ -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
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`
@ -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
.. code:: text
@ -419,11 +419,11 @@ Subroutines / functions
.. c:function:: mo_bielec_integral_erf
.. c:function:: mo_two_e_integral_erf
.. 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`
@ -433,11 +433,11 @@ Subroutines / functions
.. c:function:: mo_bielec_integrals_erf_index
.. c:function:: mo_two_e_integrals_erf_index
.. 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`
@ -461,11 +461,11 @@ Subroutines / functions
.. c:function:: save_erf_bi_elec_integrals_mo
.. c:function:: save_erf_two_e_integrals_mo
.. code:: text
subroutine save_erf_bi_elec_integrals_mo
subroutine save_erf_two_e_integrals_mo
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
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`

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`.
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
`get_mo_bielec_integral(i,j,k,l,mo_integrals_map)` or
`mo_bielec_integral(i,j,k,l)`.
`get_two_e_integral(i,j,k,l,mo_integrals_map)` or
`mo_two_e_integral(i,j,k,l)`.
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
.. 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
-----------------------
@ -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
.. 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
.. code:: text
@ -563,11 +563,11 @@ Subroutines / functions
.. c:function:: mo_bielec_integral
.. c:function:: mo_two_e_integral
.. 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`
@ -577,11 +577,11 @@ Subroutines / functions
.. c:function:: mo_bielec_integrals_index
.. c:function:: mo_two_e_integrals_index
.. 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`

View File

@ -189,7 +189,7 @@ Subroutines / functions
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:`alpha_knowles`
* :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_inv`
* :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_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_kinetic_integrals`
* :c:data:`ao_l`
@ -52,8 +48,6 @@ Index of Providers
* :c:data:`ao_l_max`
* :c:data:`ao_md5`
* :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_one_e_integrals`
* :c:data:`ao_one_e_integrals_diag`
@ -82,6 +76,12 @@ Index of Providers
* :c:data:`ao_spread_x`
* :c:data:`ao_spread_y`
* :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_beta_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_pbe_w`
* :c:data:`barycentric_electronic_energy`
* :c:data:`bi_elec_ref_bitmask_energy`
* :c:data:`big_array_coulomb_integrals`
* :c:data:`big_array_exchange_integrals`
* :c:data:`binom`
@ -165,8 +164,6 @@ Index of Providers
* :c:data:`dft_type`
* :c:data:`diag_algorithm`
* :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_based_davidson`
* :c:data:`distributed_davidson`
@ -244,8 +241,8 @@ Index of Providers
* :c:data:`generators_bitmask_restart`
* :c:data:`gga_sr_type_functionals`
* :c:data:`gga_type_functionals`
* :c:data:`give_polynom_mult_center_mono_elec_erf`
* :c:data:`give_polynom_mult_center_mono_elec_erf_opt`
* :c:data:`give_polynomial_mult_center_one_e_erf`
* :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_beta_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_pol_mult_a1`
* :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_x2_new`
* :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_non_cas`
* :c:data:`inact_bitmask`
@ -300,7 +297,6 @@ Index of Providers
* :c:data:`inv_selectors_coef_hf`
* :c:data:`inv_selectors_coef_hf_squared`
* :c:data:`io_ao_integrals_e_n`
* :c:data:`io_ao_integrals_erf`
* :c:data:`io_ao_integrals_kinetic`
* :c:data:`io_ao_integrals_overlap`
* :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_erf`
* :c:data:`io_mo_integrals_e_n`
* :c:data:`io_mo_integrals_erf`
* :c:data:`io_mo_integrals_kinetic`
* :c:data:`io_mo_integrals_pseudo`
* :c:data:`io_mo_one_e_integrals`
@ -316,7 +311,6 @@ Index of Providers
* :c:data:`io_mo_two_e_integrals_erf`
* :c:data:`iradix_sort`
* :c:data:`iradix_sort_big`
* :c:data:`kinetic_ref_bitmask_energy`
* :c:data:`ks_energy`
* :c:data:`l_to_charater`
* :c:data:`level_shift`
@ -336,17 +330,6 @@ Index of Providers
* :c:data:`max_degree_exc`
* :c:data:`max_dim_diis`
* :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_coef`
* :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_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_kinetic_integrals`
* :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_occ`
* :c:data:`mo_one_e_integrals`
* :c:data:`mo_overlap`
* :c:data:`mo_pseudo_integrals`
* :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_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_in_r_array`
* :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_y`
* :c:data:`nucl_dist_vec_z`
* :c:data:`nucl_elec_ref_bitmask_energy`
* :c:data:`nucl_label`
* :c:data:`nucl_list_shell_aos`
* :c:data:`nucl_n_aos`
@ -584,8 +576,8 @@ Index of Providers
* :c:data:`psi_dft_energy_kinetic`
* :c:data:`psi_dft_energy_nuclear_elec`
* :c:data:`psi_energy`
* :c:data:`psi_energy_bielec`
* :c:data:`psi_energy_h_core`
* :c:data:`psi_energy_two_e`
* :c:data:`psi_energy_with_nucl_rep`
* :c:data:`psi_non_cas`
* :c:data:`psi_non_cas_coef`
@ -619,7 +611,6 @@ Index of Providers
* :c:data:`qp_max_mem`
* :c:data:`qp_run_address`
* :c:data:`read_ao_integrals_e_n`
* :c:data:`read_ao_integrals_erf`
* :c:data:`read_ao_integrals_kinetic`
* :c:data:`read_ao_integrals_overlap`
* :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_erf`
* :c:data:`read_mo_integrals_e_n`
* :c:data:`read_mo_integrals_erf`
* :c:data:`read_mo_integrals_kinetic`
* :c:data:`read_mo_integrals_pseudo`
* :c:data:`read_mo_one_e_integrals`
@ -641,7 +631,11 @@ Index of Providers
* :c:data:`rec_i8_quicksort`
* :c:data:`rec_i_quicksort`
* :c:data:`ref_bitmask`
* :c:data:`ref_bitmask_e_n_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:`reunion_of_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_points`
* :c:data:`write_ao_integrals_e_n`
* :c:data:`write_ao_integrals_erf`
* :c:data:`write_ao_integrals_kinetic`
* :c:data:`write_ao_integrals_overlap`
* :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_erf`
* :c:data:`write_mo_integrals_e_n`
* :c:data:`write_mo_integrals_erf`
* :c:data:`write_mo_integrals_kinetic`
* :c:data:`write_mo_integrals_pseudo`
* :c:data:`write_mo_one_e_integrals`
@ -738,9 +730,9 @@ Index of Subroutines/Functions
* :c:func:`a_coef`
* :c:func:`a_operator`
* :c:func:`a_operator_bielec`
* :c:func:`a_operator_two_e`
* :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_erf`
* :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_task_to_taskserver`
* :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_ortho_cano_to_ao`
* :c:func:`ao_power_index`
* :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:`apply_excitation`
* :c:func:`apply_hole`
@ -776,8 +768,6 @@ Index of Subroutines/Functions
* :c:func:`au0_h_au0`
* :c:func:`b_coef`
* :c:func:`berf`
* :c:func:`bielec_integrals_index`
* :c:func:`bielec_integrals_index_reverse`
* :c:func:`binom_func`
* :c:func:`bitstring_to_hexa`
* :c:func:`bitstring_to_list`
@ -799,10 +789,10 @@ Index of Subroutines/Functions
* :c:func:`clear_bit_to_integer`
* :c:func:`clear_mo_erf_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_jl`
* :c:func:`compute_ao_two_e_integrals`
* :c:func:`compute_ao_two_e_integrals_erf`
* :c:func:`connect_to_taskserver`
* :c:func:`connected_to_ref`
* :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_au0_h_au0`
* :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_wee_mat_elem`
* :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_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_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_d1`
* :c:func:`get_d2`
@ -959,20 +949,19 @@ Index of Subroutines/Functions
* :c:func:`get_m1`
* :c:func:`get_m2`
* :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_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_from_fock`
* :c:func:`get_mono_excitation_spin`
@ -983,6 +972,7 @@ Index of Subroutines/Functions
* :c:func:`get_s2`
* :c:func:`get_task_from_taskserver`
* :c:func:`get_tasks_from_taskserver`
* :c:func:`get_two_e_integral`
* :c:func:`get_uj_s2_ui`
* :c:func:`getmobiles`
* :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_double`
* :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_polynomial_mult_center_one_e`
* :c:func:`gpw`
* :c:func:`grad_rho_ab_to_grad_rho_oc`
* :c:func:`gser`
@ -1012,13 +1002,6 @@ Index of Subroutines/Functions
* :c:func:`h_apply_cisd_diexcorg`
* :c:func:`h_apply_cisd_diexcp`
* :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_work`
* :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_n_int`
* :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:`heap_dsort`
* :c:func:`heap_dsort_big`
@ -1047,13 +1037,13 @@ Index of Subroutines/Functions
* :c:func:`i8set_order_big`
* :c:func:`i8sort`
* :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_spin`
* :c:func:`i_h_j_mono_spin`
* :c:func:`i_h_j_mono_spin_monoelec`
* :c:func:`i_h_j_monoelec`
* :c:func:`i_h_j_mono_spin_one_e`
* :c:func:`i_h_j_one_e`
* :c:func:`i_h_j_s2`
* :c:func:`i_h_j_two_e`
* :c:func:`i_h_j_verbose`
* :c:func:`i_h_psi`
* :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_svd_vectors_of_mo_matrix`
* :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_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_in_out`
* :c:func:`modify_bitmasks_for_particl`
@ -1243,10 +1233,10 @@ Index of Subroutines/Functions
* :c:func:`s2_u_0`
* :c:func:`s2_u_0_nstates`
* :c:func:`sabpartial`
* :c:func:`save_erf_bi_elec_integrals_ao`
* :c:func:`save_erf_bi_elec_integrals_mo`
* :c:func:`save_erf_bielec_ints_ao_into_ints_ao`
* :c:func:`save_erf_bielec_ints_mo_into_ints_mo`
* :c:func:`save_erf_two_e_integrals_ao`
* :c:func:`save_erf_two_e_integrals_mo`
* :c:func:`save_erf_two_e_ints_ao_into_ints_ao`
* :c:func:`save_erf_two_e_ints_mo_into_ints_mo`
* :c:func:`save_iterations`
* :c:func:`save_mos`
* :c:func:`save_mos_truncated`
@ -1295,8 +1285,10 @@ Index of Subroutines/Functions
* :c:func:`tasks_done_to_taskserver`
* :c:func:`testteethbuilding`
* :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_bielec`
* :c:func:`u_0_h_u_0_two_e`
* :c:func:`u_0_s2_u_0`
* :c:func:`u_dot_u`
* :c:func:`u_dot_v`

View File

@ -62,7 +62,11 @@ def main(arguments):
sys.exit(1)
# 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)
for mod in all_modules:

View File

@ -9,7 +9,7 @@
IF (read_ao_one_e_integrals) THEN
call ezfio_get_ao_one_e_ints_ao_one_e_integrals(ao_one_e_integrals)
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
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
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
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
@ -123,7 +123,7 @@ double precision function NAI_pol_mult_erf(A_center,B_center,power_A,power_B,alp
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)
BEGIN_DOC
! 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
a_x = power_A(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
n_pt_out = -1
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
a_y = power_A(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
n_pt_out = -1
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)
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
n_pt_out = -1
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)
BEGIN_DOC
! 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
a_x = power_A(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'
if(n_pt1<0)then
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
a_y = power_A(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'
if(n_pt2<0)then
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*,'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'
if(n_pt3<0)then
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
! 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
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'
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 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 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
@ -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)
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(m,i) * c
enddo
@ -77,13 +77,13 @@ BEGIN_PROVIDER [ double precision, ao_nucl_elec_integrals, (ao_num,ao_num)]
!$OMP END PARALLEL
endif
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'
endif
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
! 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
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 DEFAULT (NONE) &
!$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 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
!$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)
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
@ -214,7 +214,7 @@ double precision function NAI_pol_mult(A_center,B_center,power_A,power_B,alpha,b
return
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
@ -234,7 +234,7 @@ double precision function NAI_pol_mult(A_center,B_center,power_A,power_B,alpha,b
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
BEGIN_DOC
! 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
a_x = power_A(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
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)
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
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)
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
n_pt_out = -1
@ -361,7 +361,7 @@ subroutine give_polynom_mult_center_mono_elec(A_center,B_center,alpha,beta,power
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
BEGIN_DOC
! 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
return
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
nx = nd
do ix=0,n_pt_in
X(ix) = 0.d0
Y(ix) = 0.d0
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
X(ix) *= dble(c)
enddo
call multiply_poly(X,nx,R2x,2,d,nd)
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)
else
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
enddo
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
X(ix) *= dble(a-1)
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
X(ix) = 0.d0
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
X(ix) *= dble(c)
enddo
call multiply_poly(X,nx,R2x,2,d,nd)
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)
endif
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
BEGIN_DOC
! 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
enddo
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
X(ix) *= dble(c-1)
enddo
@ -469,7 +469,7 @@ recursive subroutine I_x2_pol_mult_mono_elec(c,R1x,R1xp,R2x,d,nd,dim)
Y(ix) = 0.d0
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
call multiply_poly(Y,ny,R1xp,2,d,nd)
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.
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:

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
integer, intent(in) :: i
BEGIN_DOC
! Computes a buffer of integrals. i is the ID of the current thread.
END_DOC
call ao_bielec_integrals_erf_in_map_slave(0,i)
call ao_two_e_integrals_erf_in_map_slave(0,i)
end
subroutine ao_bielec_integrals_erf_in_map_slave_inproc(i)
subroutine ao_two_e_integrals_erf_in_map_slave_inproc(i)
implicit none
integer, intent(in) :: i
BEGIN_DOC
! Computes a buffer of integrals. i is the ID of the current thread.
END_DOC
call ao_bielec_integrals_erf_in_map_slave(1,i)
call ao_two_e_integrals_erf_in_map_slave(1,i)
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 f77_zmq
implicit none
@ -86,7 +86,7 @@ subroutine ao_bielec_integrals_erf_in_map_slave(thread,iproc)
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 f77_zmq
implicit none

View File

@ -10,7 +10,7 @@ BEGIN_PROVIDER [ type(map_type), ao_integrals_erf_map ]
END_DOC
integer(key_kind) :: key_max
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
call map_init(ao_integrals_erf_map,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
! Cache of |AO| integrals for fast access
END_DOC
PROVIDE ao_bielec_integrals_erf_in_map
PROVIDE ao_two_e_integrals_erf_in_map
integer :: i,j,k,l,ii
integer(key_kind) :: idx
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 i=ao_integrals_erf_cache_min,ao_integrals_erf_cache_max
!DIR$ FORCEINLINE
call bielec_integrals_index(i,j,k,l,idx)
call two_e_integrals_index(i,j,k,l,idx)
!DIR$ FORCEINLINE
call map_get(ao_integrals_erf_map,idx,integral)
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)
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
implicit none
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
integer :: ii
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
if (ao_overlap_abs(i,k)*ao_overlap_abs(j,l) < ao_integrals_threshold ) then
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
else
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)
if (iand(ii, -64) /= 0) then
!DIR$ FORCEINLINE
call bielec_integrals_index(i,j,k,l,idx)
call two_e_integrals_index(i,j,k,l,idx)
!DIR$ FORCEINLINE
call map_get(map,idx,tmp)
tmp = tmp
@ -114,7 +114,7 @@ double precision function get_ao_bielec_integral_erf(i,j,k,l,map) result(result)
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
BEGIN_DOC
! 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(key_kind) :: hash
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
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
endif
double precision :: get_ao_bielec_integral_erf
double precision :: get_ao_two_e_integral_erf
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
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
implicit none
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(key_kind) :: hash
double precision :: thresh,tmp
PROVIDE ao_bielec_integrals_erf_in_map
PROVIDE ao_two_e_integrals_erf_in_map
thresh = ao_integrals_threshold
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
do i=1,sze
integer, external :: ao_l4
double precision, external :: ao_bielec_integral_erf
double precision, external :: ao_two_e_integral_erf
!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
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)
if (dabs(tmp) < thresh ) cycle
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
use f77_zmq
use map_module
@ -9,7 +9,7 @@ BEGIN_PROVIDER [ logical, ao_bielec_integrals_erf_in_map ]
END_DOC
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
include 'utils/constants.include.F'
@ -22,7 +22,7 @@ BEGIN_PROVIDER [ logical, ao_bielec_integrals_erf_in_map ]
integer :: kk, m, j1, i1, lmax
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
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'
call map_load_from_disk(trim(ezfio_filename)//'/work/ao_ints_erf',ao_integrals_erf_map)
print*, 'AO ERF integrals provided'
ao_bielec_integrals_erf_in_map = .True.
ao_two_e_integrals_erf_in_map = .True.
return
endif
@ -63,9 +63,9 @@ BEGIN_PROVIDER [ logical, ao_bielec_integrals_erf_in_map ]
!$OMP PARALLEL DEFAULT(shared) private(i) num_threads(nproc+1)
i = omp_get_thread_num()
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
call ao_bielec_integrals_erf_in_map_slave_inproc(i)
call ao_two_e_integrals_erf_in_map_slave_inproc(i)
endif
!$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*, ' 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
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
BEGIN_DOC
! Needed to compute Schwartz inequalities
END_DOC
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 DEFAULT(NONE) &
!$OMP SHARED (ao_num,ao_bielec_integral_erf_schwartz) &
!$OMP SHARED (ao_num,ao_two_e_integral_erf_schwartz) &
!$OMP SCHEDULE(dynamic)
do i=1,ao_num
do k=1,i
ao_bielec_integral_erf_schwartz(i,k) = dsqrt(ao_bielec_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(i,k) = dsqrt(ao_two_e_integral_erf(i,k,i,k))
ao_two_e_integral_erf_schwartz(k,i) = ao_two_e_integral_erf_schwartz(i,k)
enddo
enddo
!$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
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 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')
end
subroutine save_erf_bielec_ints_ao_into_ints_ao
subroutine save_erf_two_e_ints_ao_into_ints_ao
implicit none
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 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')

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
BEGIN_DOC
! 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 :: Q_new(0:max_dim,3),Q_center(3),fact_q,qq
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
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
endif
@ -27,7 +27,7 @@ double precision function ao_bielec_integral_erf(i,j,k,l)
num_j = ao_nucl(j)
num_k = ao_nucl(k)
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
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, &
P_new,P_center,fact_p,pp,p_inv,iorder_p, &
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 ! r
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(2),J_power(2),K_power(2),L_power(2), &
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 ! r
enddo ! q
@ -103,7 +103,7 @@ double precision function ao_bielec_integral_erf(i,j,k,l)
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
BEGIN_DOC
! 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_k = ao_nucl(k)
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
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, &
P_new,P_center,fact_p,pp,p_inv,iorder_p, &
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 ! r
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(2),J_power(2),K_power(2),L_power(2), &
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 ! r
enddo ! q
@ -275,7 +275,7 @@ double precision function ao_bielec_integral_schwartz_accel_erf(i,j,k,l)
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
use map_module
@ -286,7 +286,7 @@ subroutine compute_ao_bielec_integrals_erf(j,k,l,sze,buffer_value)
include 'utils/constants.include.F'
integer, intent(in) :: j,k,l,sze
real(integral_kind), intent(out) :: buffer_value(sze)
double precision :: ao_bielec_integral_erf
double precision :: ao_two_e_integral_erf
integer :: i
@ -294,7 +294,7 @@ subroutine compute_ao_bielec_integrals_erf(j,k,l,sze,buffer_value)
buffer_value = 0._integral_kind
return
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
return
endif
@ -304,12 +304,12 @@ subroutine compute_ao_bielec_integrals_erf(j,k,l,sze,buffer_value)
buffer_value(i) = 0._integral_kind
cycle
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
cycle
endif
!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
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)
implicit none
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_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)
@ -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)
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 :: thr
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
cycle
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
endif
!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
cycle
endif
n_integrals += 1
!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
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`.
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:

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
integer, intent(in) :: i
BEGIN_DOC
! Computes a buffer of integrals. i is the ID of the current thread.
END_DOC
call ao_bielec_integrals_in_map_slave(0,i)
call ao_two_e_integrals_in_map_slave(0,i)
end
subroutine ao_bielec_integrals_in_map_slave_inproc(i)
subroutine ao_two_e_integrals_in_map_slave_inproc(i)
implicit none
integer, intent(in) :: i
BEGIN_DOC
! Computes a buffer of integrals. i is the ID of the current thread.
END_DOC
call ao_bielec_integrals_in_map_slave(1,i)
call ao_two_e_integrals_in_map_slave(1,i)
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 f77_zmq
implicit none
@ -136,7 +136,7 @@ subroutine ao_bielec_integrals_in_map_slave(thread,iproc)
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 f77_zmq
implicit none

View File

@ -10,13 +10,13 @@ BEGIN_PROVIDER [ type(map_type), ao_integrals_map ]
END_DOC
integer(key_kind) :: key_max
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
call map_init(ao_integrals_map,sze)
print*, 'AO map initialized : ', sze
END_PROVIDER
subroutine bielec_integrals_index(i,j,k,l,i1)
subroutine two_e_integrals_index(i,j,k,l,i1)
use map_module
implicit none
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)
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
implicit none
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
do ii=1,8
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
print *, i1, i2
print *, i(ii), j(ii), k(ii), l(ii)
stop 'bielec_integrals_index_reverse failed'
stop 'two_e_integrals_index_reverse failed'
endif
endif
enddo
@ -125,7 +125,7 @@ BEGIN_PROVIDER [ double precision, ao_integrals_cache, (0:64*64*64*64) ]
BEGIN_DOC
! Cache of AO integrals for fast access
END_DOC
PROVIDE ao_bielec_integrals_in_map
PROVIDE ao_two_e_integrals_in_map
integer :: i,j,k,l,ii
integer(key_kind) :: idx
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 i=ao_integrals_cache_min,ao_integrals_cache_max
!DIR$ FORCEINLINE
call bielec_integrals_index(i,j,k,l,idx)
call two_e_integrals_index(i,j,k,l,idx)
!DIR$ FORCEINLINE
call map_get(ao_integrals_map,idx,integral)
ii = l-ao_integrals_cache_min
@ -152,7 +152,7 @@ BEGIN_PROVIDER [ double precision, ao_integrals_cache, (0:64*64*64*64) ]
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
implicit none
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
integer :: ii
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
if (ao_overlap_abs(i,k)*ao_overlap_abs(j,l) < ao_integrals_threshold ) then
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
else
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)
if (iand(ii, -64) /= 0) then
!DIR$ FORCEINLINE
call bielec_integrals_index(i,j,k,l,idx)
call two_e_integrals_index(i,j,k,l,idx)
!DIR$ FORCEINLINE
call map_get(map,idx,tmp)
else
@ -191,7 +191,7 @@ double precision function get_ao_bielec_integral(i,j,k,l,map) result(result)
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
BEGIN_DOC
! 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(key_kind) :: hash
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
if (ao_overlap_abs(j,l) < thresh) then
@ -212,14 +212,14 @@ subroutine get_ao_bielec_integrals(j,k,l,sze,out_val)
return
endif
double precision :: get_ao_bielec_integral
double precision :: get_ao_two_e_integral
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
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
implicit none
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(key_kind) :: hash
double precision :: thresh,tmp
PROVIDE ao_bielec_integrals_in_map
PROVIDE ao_two_e_integrals_in_map
thresh = ao_integrals_threshold
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
do i=1,sze
integer, external :: ao_l4
double precision, external :: ao_bielec_integral
double precision, external :: ao_two_e_integral
!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
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)
if (dabs(tmp) < thresh ) cycle
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
BEGIN_DOC
! 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 :: Q_new(0:max_dim,3),Q_center(3),fact_q,qq
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
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
endif
@ -27,7 +27,7 @@ double precision function ao_bielec_integral(i,j,k,l)
num_j = ao_nucl(j)
num_k = ao_nucl(k)
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
do p = 1, 3
@ -64,7 +64,7 @@ double precision function ao_bielec_integral(i,j,k,l)
integral = general_primitive_integral(dim1, &
P_new,P_center,fact_p,pp,p_inv,iorder_p, &
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 ! r
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(2),J_power(2),K_power(2),L_power(2), &
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 ! r
enddo ! q
@ -103,7 +103,7 @@ double precision function ao_bielec_integral(i,j,k,l)
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
BEGIN_DOC
! 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_k = ao_nucl(k)
num_l = ao_nucl(l)
ao_bielec_integral_schwartz_accel = 0.d0
ao_two_e_integral_schwartz_accel = 0.d0
double precision :: thr
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, &
P_new,P_center,fact_p,pp,p_inv,iorder_p, &
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 ! r
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(2),J_power(2),K_power(2),L_power(2), &
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 ! r
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
use map_module
@ -297,7 +297,7 @@ subroutine compute_ao_bielec_integrals(j,k,l,sze,buffer_value)
include 'utils/constants.include.F'
integer, intent(in) :: j,k,l,sze
real(integral_kind), intent(out) :: buffer_value(sze)
double precision :: ao_bielec_integral
double precision :: ao_two_e_integral
integer :: i
@ -305,7 +305,7 @@ subroutine compute_ao_bielec_integrals(j,k,l,sze,buffer_value)
buffer_value = 0._integral_kind
return
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
return
endif
@ -315,17 +315,17 @@ subroutine compute_ao_bielec_integrals(j,k,l,sze,buffer_value)
buffer_value(i) = 0._integral_kind
cycle
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
cycle
endif
!DIR$ FORCEINLINE
buffer_value(i) = ao_bielec_integral(i,k,j,l)
buffer_value(i) = ao_two_e_integral(i,k,j,l)
enddo
end
BEGIN_PROVIDER [ logical, ao_bielec_integrals_in_map ]
BEGIN_PROVIDER [ logical, ao_two_e_integrals_in_map ]
implicit none
use f77_zmq
use map_module
@ -335,7 +335,7 @@ BEGIN_PROVIDER [ logical, ao_bielec_integrals_in_map ]
END_DOC
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
include 'utils/constants.include.F'
@ -348,7 +348,7 @@ BEGIN_PROVIDER [ logical, ao_bielec_integrals_in_map ]
integer :: kk, m, j1, i1, lmax
character*(64) :: fmt
integral = ao_bielec_integral(1,1,1,1)
integral = ao_two_e_integral(1,1,1,1)
double precision :: map_mb
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'
call map_load_from_disk(trim(ezfio_filename)//'/work/ao_ints',ao_integrals_map)
print*, 'AO integrals provided'
ao_bielec_integrals_in_map = .True.
ao_two_e_integrals_in_map = .True.
return
endif
@ -389,9 +389,9 @@ BEGIN_PROVIDER [ logical, ao_bielec_integrals_in_map ]
!$OMP PARALLEL DEFAULT(shared) private(i) num_threads(nproc+1)
i = omp_get_thread_num()
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
call ao_bielec_integrals_in_map_slave_inproc(i)
call ao_two_e_integrals_in_map_slave_inproc(i)
endif
!$OMP END PARALLEL
@ -411,7 +411,7 @@ BEGIN_PROVIDER [ logical, ao_bielec_integrals_in_map ]
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)), ' )'
ao_bielec_integrals_in_map = .True.
ao_two_e_integrals_in_map = .True.
if (write_ao_two_e_integrals.and.mpi_master) then
call ezfio_set_work_empty(.False.)
@ -421,24 +421,24 @@ BEGIN_PROVIDER [ logical, ao_bielec_integrals_in_map ]
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
BEGIN_DOC
! Needed to compute Schwartz inequalities
END_DOC
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 DEFAULT(NONE) &
!$OMP SHARED (ao_num,ao_bielec_integral_schwartz) &
!$OMP SHARED (ao_num,ao_two_e_integral_schwartz) &
!$OMP SCHEDULE(dynamic)
do i=1,ao_num
do k=1,i
ao_bielec_integral_schwartz(i,k) = dsqrt(ao_bielec_integral(i,k,i,k))
ao_bielec_integral_schwartz(k,i) = ao_bielec_integral_schwartz(i,k)
ao_two_e_integral_schwartz(i,k) = dsqrt(ao_two_e_integral(i,k,i,k))
ao_two_e_integral_schwartz(k,i) = ao_two_e_integral_schwartz(i,k)
enddo
enddo
!$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)
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 :: thr
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
cycle
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
endif
!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
cycle
endif
n_integrals += 1
!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
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:
# `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 (Nint > 0)
ASSERT (Nint == N_int)
PROVIDE mo_bielec_integrals_in_map
PROVIDE mo_two_e_integrals_in_map
allocate(H_jj(sze))
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
BEGIN_DOC
! Energy of the current wave function
END_DOC
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
psi_energy(i) = 0.d0
enddo
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
implicit none
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), &
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)
call dtranspose( &
@ -65,7 +65,7 @@ subroutine H_S2_u_0_bielec_nstates_openmp(v_0,s_0,u_0,N_st,sze)
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
implicit none
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)
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)
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)
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)
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
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
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
implicit none
BEGIN_DOC
@ -457,7 +457,7 @@ N_int;;
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
implicit none
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))
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,:)
deallocate(u_1)
double precision :: norm

View File

@ -138,7 +138,7 @@ subroutine routine_example_psi_det
enddo
enddo
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 '
! 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)

View File

@ -33,59 +33,59 @@ subroutine build_fock_tmp(fock_diag_tmp,det_ref,Nint)
! Occupied MOs
do ii=1,elec_alpha_num
i = occ(ii,1)
fock_diag_tmp(1,i) = fock_diag_tmp(1,i) + mo_mono_elec_integrals(i,i)
E0 = E0 + 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_one_e_integrals(i,i)
do jj=1,elec_alpha_num
j = occ(jj,1)
if (i==j) cycle
fock_diag_tmp(1,i) = fock_diag_tmp(1,i) + mo_bielec_integral_jj_anti(i,j)
E0 = E0 + 0.5d0*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_two_e_integrals_jj_anti(i,j)
enddo
do jj=1,elec_beta_num
j = occ(jj,2)
fock_diag_tmp(1,i) = fock_diag_tmp(1,i) + mo_bielec_integral_jj(i,j)
E0 = E0 + 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_two_e_integrals_jj(i,j)
enddo
enddo
do ii=1,elec_beta_num
i = occ(ii,2)
fock_diag_tmp(2,i) = fock_diag_tmp(2,i) + mo_mono_elec_integrals(i,i)
E0 = E0 + 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_one_e_integrals(i,i)
do jj=1,elec_beta_num
j = occ(jj,2)
if (i==j) cycle
fock_diag_tmp(2,i) = fock_diag_tmp(2,i) + mo_bielec_integral_jj_anti(i,j)
E0 = E0 + 0.5d0*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_two_e_integrals_jj_anti(i,j)
enddo
do jj=1,elec_alpha_num
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
! Virtual MOs
do i=1,mo_num
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
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
do jj=1,elec_beta_num
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
do i=1,mo_num
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
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
do jj=1,elec_alpha_num
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

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_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
integer, allocatable :: ia_ja_pairs(:,:,:)
integer, allocatable :: ib_jb_pairs(:,:)

View File

@ -17,7 +17,7 @@ subroutine $subroutine($params_main)
double precision, allocatable :: fock_diag_tmp(:,:)
$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)

View File

@ -20,7 +20,7 @@ subroutine $subroutine($params_main)
double precision, allocatable :: fock_diag_tmp(:,:)
$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) :: 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
do i = 1, elec_num_tab_local(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)
jorb = occ(j,1)
hii += mo_bielec_integral_jj_anti(jorb,iorb)
hii += mo_two_e_integrals_jj_anti(jorb,iorb)
enddo
enddo
! beta - beta
do i = 1, elec_num_tab_local(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)
jorb = occ(j,2)
hii += mo_bielec_integral_jj_anti(jorb,iorb)
hii += mo_two_e_integrals_jj_anti(jorb,iorb)
enddo
enddo
@ -153,7 +153,7 @@ subroutine diag_H_mat_elem_au0_h_au0(det_in,Nint,hii)
iorb = occ(i,2)
do j = 1, elec_num_tab_local(1)
jorb = occ(j,1)
hii += mo_bielec_integral_jj(jorb,iorb)
hii += mo_two_e_integrals_jj(jorb,iorb)
enddo
enddo

View File

@ -27,33 +27,33 @@ subroutine mono_excitation_wee(det_1,det_2,h,p,spin,phase,hij)
! holes :: direct terms
do i0 = 1, n_occ_ab_hole(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
do i0 = 1, n_occ_ab_hole(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
! holes :: exchange terms
do i0 = 1, n_occ_ab_hole(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
! particles :: direct terms
do i0 = 1, n_occ_ab_partcl(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
do i0 = 1, n_occ_ab_partcl(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
! particles :: exchange terms
do i0 = 1, n_occ_ab_partcl(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
hij = hij * phase
@ -84,8 +84,8 @@ BEGIN_PROVIDER [double precision, fock_wee_closed_shell, (mo_num, mo_num) ]
i=occ(i0,1)
do j0 = 1, n_occ_ab_virt(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_bielec_integrals_exch_ii(i,j,mo_num,array_exchange,mo_integrals_map)
call get_mo_two_e_integrals_coulomb_ii(i,j,mo_num,array_coulomb,mo_integrals_map)
call get_mo_two_e_integrals_exch_ii(i,j,mo_num,array_exchange,mo_integrals_map)
double precision :: accu
accu = 0.d0
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)
do j0 = 1, n_occ_ab_virt(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_bielec_integrals_exch_ii(i,j,mo_num,array_exchange,mo_integrals_map)
call get_mo_two_e_integrals_coulomb_ii(i,j,mo_num,array_coulomb,mo_integrals_map)
call get_mo_two_e_integrals_exch_ii(i,j,mo_num,array_exchange,mo_integrals_map)
accu = 0.d0
do k0 = 1, n_occ_ab(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)
do j0 = 1, n_occ_ab(1)
j = occ(j0,1)
call get_mo_bielec_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_coulomb_ii(i,j,mo_num,array_coulomb,mo_integrals_map)
call get_mo_two_e_integrals_exch_ii(i,j,mo_num,array_exchange,mo_integrals_map)
accu = 0.d0
do k0 = 1, n_occ_ab(1)
k = occ(k0,1)

View File

@ -7,13 +7,13 @@
! psi_energy_h_core = $\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`
! :c:data:`one_body_dm_mo_beta` and :c:data:`mo_one_e_integrals`
END_DOC
psi_energy_h_core = 0.d0
do i = 1, N_states
do j = 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

View File

@ -1,8 +1,8 @@
BEGIN_PROVIDER [ double precision, ref_bitmask_energy ]
&BEGIN_PROVIDER [ double precision, mono_elec_ref_bitmask_energy ]
&BEGIN_PROVIDER [ double precision, kinetic_ref_bitmask_energy ]
&BEGIN_PROVIDER [ double precision, nucl_elec_ref_bitmask_energy ]
&BEGIN_PROVIDER [ double precision, bi_elec_ref_bitmask_energy ]
&BEGIN_PROVIDER [ double precision, ref_bitmask_one_e_energy ]
&BEGIN_PROVIDER [ double precision, ref_bitmask_kinetic_energy ]
&BEGIN_PROVIDER [ double precision, ref_bitmask_e_n_energy ]
&BEGIN_PROVIDER [ double precision, ref_bitmask_two_e_energy ]
use bitmasks
implicit none
BEGIN_DOC
@ -17,41 +17,41 @@
ref_bitmask_energy = 0.d0
mono_elec_ref_bitmask_energy = 0.d0
kinetic_ref_bitmask_energy = 0.d0
nucl_elec_ref_bitmask_energy = 0.d0
bi_elec_ref_bitmask_energy = 0.d0
ref_bitmask_one_e_energy = 0.d0
ref_bitmask_kinetic_energy = 0.d0
ref_bitmask_e_n_energy = 0.d0
ref_bitmask_two_e_energy = 0.d0
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))
kinetic_ref_bitmask_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_energy += mo_one_e_integrals(occ(i,1),occ(i,1)) + mo_one_e_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))
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
do i = elec_beta_num+1,elec_alpha_num
ref_bitmask_energy += mo_mono_elec_integrals(occ(i,1),occ(i,1))
kinetic_ref_bitmask_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_energy += mo_one_e_integrals(occ(i,1),occ(i,1))
ref_bitmask_kinetic_energy += mo_kinetic_integrals(occ(i,1),occ(i,1))
ref_bitmask_e_n_energy += mo_integrals_n_e(occ(i,1),occ(i,1))
enddo
do 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_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_two_e_integrals_jj_anti(occ(i,1),occ(j,1))
enddo
enddo
do 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_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_two_e_integrals_jj_anti(occ(i,2),occ(j,2))
enddo
do i= 1, elec_alpha_num
bi_elec_ref_bitmask_energy += mo_bielec_integral_jj(occ(i,1),occ(j,2))
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_two_e_integrals_jj(occ(i,1),occ(j,2))
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

View File

@ -44,16 +44,16 @@ BEGIN_PROVIDER [double precision, fock_operator_closed_shell_ref_bitmask, (mo_nu
i=occ(i0,1)
do j0 = 1, n_occ_ab_virt(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_bielec_integrals_exch_ii(i,j,mo_num,array_exchange,mo_integrals_map)
call get_mo_two_e_integrals_coulomb_ii(i,j,mo_num,array_coulomb,mo_integrals_map)
call get_mo_two_e_integrals_exch_ii(i,j,mo_num,array_exchange,mo_integrals_map)
double precision :: accu
accu = 0.d0
do k0 = 1, n_occ_ab(1)
k = occ(k0,1)
accu += 2.d0 * array_coulomb(k) - array_exchange(k)
enddo
fock_operator_closed_shell_ref_bitmask(i,j) = accu + mo_mono_elec_integrals(i,j)
fock_operator_closed_shell_ref_bitmask(j,i) = 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_one_e_integrals(i,j)
enddo
enddo
@ -62,15 +62,15 @@ BEGIN_PROVIDER [double precision, fock_operator_closed_shell_ref_bitmask, (mo_nu
i=occ_virt(i0,1)
do j0 = 1, n_occ_ab_virt(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_bielec_integrals_exch_ii(i,j,mo_num,array_exchange,mo_integrals_map)
call get_mo_two_e_integrals_coulomb_ii(i,j,mo_num,array_coulomb,mo_integrals_map)
call get_mo_two_e_integrals_exch_ii(i,j,mo_num,array_exchange,mo_integrals_map)
accu = 0.d0
do k0 = 1, n_occ_ab(1)
k = occ(k0,1)
accu += 2.d0 * array_coulomb(k) - array_exchange(k)
enddo
fock_operator_closed_shell_ref_bitmask(i,j) = accu+ mo_mono_elec_integrals(i,j)
fock_operator_closed_shell_ref_bitmask(j,i) = 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_one_e_integrals(i,j)
enddo
enddo
@ -79,15 +79,15 @@ BEGIN_PROVIDER [double precision, fock_operator_closed_shell_ref_bitmask, (mo_nu
i=occ(i0,1)
do j0 = 1, n_occ_ab(1)
j = occ(j0,1)
call get_mo_bielec_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_coulomb_ii(i,j,mo_num,array_coulomb,mo_integrals_map)
call get_mo_two_e_integrals_exch_ii(i,j,mo_num,array_exchange,mo_integrals_map)
accu = 0.d0
do k0 = 1, n_occ_ab(1)
k = occ(k0,1)
accu += 2.d0 * array_coulomb(k) - array_exchange(k)
enddo
fock_operator_closed_shell_ref_bitmask(i,j) = accu+ mo_mono_elec_integrals(i,j)
fock_operator_closed_shell_ref_bitmask(j,i) = 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_one_e_integrals(i,j)
enddo
enddo
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 :: degree
double precision :: get_mo_bielec_integral
double precision :: get_two_e_integral
integer :: m,n,p,q
integer :: i,j,k
integer :: occ(Nint*bit_kind_size,2)
double precision :: diag_H_mat_elem, phase
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 == 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
hij = phase * big_array_exchange_integrals(exc(1,2,1),exc(1,1,1),exc(1,2,2))
else
hij = phase*get_mo_bielec_integral( &
hij = phase*get_two_e_integral( &
exc(1,1,1), &
exc(1,1,2), &
exc(1,2,1), &
@ -517,24 +517,24 @@ subroutine i_H_j_s2(key_i,key_j,Nint,hij,s2)
endif
! Double alpha
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(2,1,1), &
exc(1,2,1), &
exc(2,2,1) ,mo_integrals_map) - &
get_mo_bielec_integral( &
get_two_e_integral( &
exc(1,1,1), &
exc(2,1,1), &
exc(2,2,1), &
exc(1,2,1) ,mo_integrals_map) )
! Double beta
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(2,1,2), &
exc(1,2,2), &
exc(2,2,2) ,mo_integrals_map) - &
get_mo_bielec_integral( &
get_two_e_integral( &
exc(1,1,2), &
exc(2,1,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 :: degree
double precision :: get_mo_bielec_integral
double precision :: get_two_e_integral
integer :: m,n,p,q
integer :: i,j,k
integer :: occ(Nint*bit_kind_size,2)
double precision :: diag_H_mat_elem, phase
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 == 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
hij = phase * big_array_exchange_integrals(exc(1,2,1),exc(1,1,1),exc(1,2,2))
else
hij = phase*get_mo_bielec_integral( &
hij = phase*get_two_e_integral( &
exc(1,1,1), &
exc(1,1,2), &
exc(1,2,1), &
@ -616,24 +616,24 @@ subroutine i_H_j(key_i,key_j,Nint,hij)
endif
else if (exc(0,1,1) == 2) then
! Double alpha
hij = phase*(get_mo_bielec_integral( &
hij = phase*(get_two_e_integral( &
exc(1,1,1), &
exc(2,1,1), &
exc(1,2,1), &
exc(2,2,1) ,mo_integrals_map) - &
get_mo_bielec_integral( &
get_two_e_integral( &
exc(1,1,1), &
exc(2,1,1), &
exc(2,2,1), &
exc(1,2,1) ,mo_integrals_map) )
else if (exc(0,1,2) == 2) then
! Double beta
hij = phase*(get_mo_bielec_integral( &
hij = phase*(get_two_e_integral( &
exc(1,1,2), &
exc(2,1,2), &
exc(1,2,2), &
exc(2,2,2) ,mo_integrals_map) - &
get_mo_bielec_integral( &
get_two_e_integral( &
exc(1,1,2), &
exc(2,1,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 :: degree
double precision :: get_mo_bielec_integral
double precision :: get_two_e_integral
integer :: m,n,p,q
integer :: i,j,k
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)
logical :: has_mipi(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 == 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)
if (exc(0,1,1) == 1) then
! Mono alpha, mono beta
hij = phase*get_mo_bielec_integral( &
hij = phase*get_two_e_integral( &
exc(1,1,1), &
exc(1,1,2), &
exc(1,2,1), &
exc(1,2,2) ,mo_integrals_map)
else if (exc(0,1,1) == 2) then
! Double alpha
hij = phase*(get_mo_bielec_integral( &
hij = phase*(get_two_e_integral( &
exc(1,1,1), &
exc(2,1,1), &
exc(1,2,1), &
exc(2,2,1) ,mo_integrals_map) - &
get_mo_bielec_integral( &
get_two_e_integral( &
exc(1,1,1), &
exc(2,1,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
! Double beta
hij = phase*(get_mo_bielec_integral( &
hij = phase*(get_two_e_integral( &
exc(1,1,2), &
exc(2,1,2), &
exc(1,2,2), &
exc(2,2,2) ,mo_integrals_map) - &
get_mo_bielec_integral( &
get_two_e_integral( &
exc(1,1,2), &
exc(2,1,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
i = occ(k,1)
if (.not.has_mipi(i)) then
mipi(i) = get_mo_bielec_integral(m,i,p,i,mo_integrals_map)
miip(i) = get_mo_bielec_integral(m,i,i,p,mo_integrals_map)
mipi(i) = get_two_e_integral(m,i,p,i,mo_integrals_map)
miip(i) = get_two_e_integral(m,i,i,p,mo_integrals_map)
has_mipi(i) = .True.
endif
enddo
do k = 1, elec_beta_num
i = occ(k,2)
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.
endif
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
i = occ(k,2)
if (.not.has_mipi(i)) then
mipi(i) = get_mo_bielec_integral(m,i,p,i,mo_integrals_map)
miip(i) = get_mo_bielec_integral(m,i,i,p,mo_integrals_map)
mipi(i) = get_two_e_integral(m,i,p,i,mo_integrals_map)
miip(i) = get_two_e_integral(m,i,i,p,mo_integrals_map)
has_mipi(i) = .True.
endif
enddo
do k = 1, elec_alpha_num
i = occ(k,1)
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.
endif
enddo
@ -795,7 +795,7 @@ subroutine i_H_j_verbose(key_i,key_j,Nint,hij,hmono,hdouble,phase)
enddo
endif
hmono = mo_mono_elec_integrals(m,p)
hmono = mo_one_e_integrals(m,p)
hij = phase*(hdouble + hmono)
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
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,h2) - mo_bielec_integral_jj_anti(h1,h2) &
+ mo_bielec_integral_jj_anti(p1,h2) ) &
+ ( fock_diag_tmp(1,p2) - mo_bielec_integral_jj_anti(h1,p2) &
+ mo_bielec_integral_jj_anti(p1,p2) - mo_bielec_integral_jj_anti(h2,p2) )
+ ( fock_diag_tmp(1,p1) - mo_two_e_integrals_jj_anti(h1,p1) ) &
- ( fock_diag_tmp(1,h2) - mo_two_e_integrals_jj_anti(h1,h2) &
+ mo_two_e_integrals_jj_anti(p1,h2) ) &
+ ( fock_diag_tmp(1,p2) - mo_two_e_integrals_jj_anti(h1,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
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,h2) - mo_bielec_integral_jj_anti(h1,h2) &
+ mo_bielec_integral_jj_anti(p1,h2) ) &
+ ( fock_diag_tmp(2,p2) - mo_bielec_integral_jj_anti(h1,p2) &
+ mo_bielec_integral_jj_anti(p1,p2) - mo_bielec_integral_jj_anti(h2,p2) )
+ ( fock_diag_tmp(2,p1) - mo_two_e_integrals_jj_anti(h1,p1) ) &
- ( fock_diag_tmp(2,h2) - mo_two_e_integrals_jj_anti(h1,h2) &
+ mo_two_e_integrals_jj_anti(p1,h2) ) &
+ ( fock_diag_tmp(2,p2) - mo_two_e_integrals_jj_anti(h1,p2) &
+ mo_two_e_integrals_jj_anti(p1,p2) - mo_two_e_integrals_jj_anti(h2,p2) )
else ! alpha/beta
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(2,h2) - mo_bielec_integral_jj(h1,h2) &
+ mo_bielec_integral_jj(p1,h2) ) &
+ ( fock_diag_tmp(2,p2) - mo_bielec_integral_jj(h1,p2) &
+ mo_bielec_integral_jj(p1,p2) - mo_bielec_integral_jj_anti(h2,p2) )
+ ( fock_diag_tmp(1,p1) - mo_two_e_integrals_jj_anti(h1,p1) ) &
- ( fock_diag_tmp(2,h2) - mo_two_e_integrals_jj(h1,h2) &
+ mo_two_e_integrals_jj(p1,h2) ) &
+ ( fock_diag_tmp(2,p2) - mo_two_e_integrals_jj(h1,p2) &
+ mo_two_e_integrals_jj(p1,p2) - mo_two_e_integrals_jj_anti(h2,p2) )
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)
if (s1 == 1) then
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
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
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)
na = na-1
hjj = hjj - mo_mono_elec_integrals(iorb,iorb)
hjj = hjj - mo_one_e_integrals(iorb,iorb)
! Same spin
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
! Opposite spin
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
end
@ -1798,16 +1798,16 @@ subroutine ac_operator(iorb,ispin,key,hjj,Nint,na,nb)
! print *, iorb, mo_num
! stop -1
! endif
hjj = hjj + mo_mono_elec_integrals(iorb,iorb)
hjj = hjj + mo_one_e_integrals(iorb,iorb)
! Same spin
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
! Opposite spin
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
na = na+1
end
@ -2183,7 +2183,7 @@ subroutine i_H_j_mono_spin(key_i,key_j,Nint,spin,hij)
integer :: exc(0:2,2)
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_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)
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)
hij = phase*(get_mo_bielec_integral( &
hij = phase*(get_two_e_integral( &
exc(1,1), &
exc(2,1), &
exc(1,2), &
exc(2,2), mo_integrals_map) - &
get_mo_bielec_integral( &
get_two_e_integral( &
exc(1,1), &
exc(2,1), &
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)
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,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
hij = phase * big_array_exchange_integrals(exc(1,2,1),exc(1,1,1),exc(1,2,2))
else
hij = phase*get_mo_bielec_integral( &
hij = phase*get_two_e_integral( &
exc(1,1,1), &
exc(1,1,2), &
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)
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 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))
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
return
endif
@ -75,15 +75,15 @@ double precision function diag_wee_mat_elem(det_in,Nint)
nb = elec_num_tab(iand(ispin,1)+1)
do i=1,nexc(ispin)
!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
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
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
implicit none
BEGIN_DOC
@ -116,18 +116,18 @@ subroutine a_operator_bielec(iorb,ispin,key,hjj,Nint,na,nb)
! Same spin
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
! Opposite spin
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
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
implicit none
BEGIN_DOC
@ -162,19 +162,19 @@ subroutine ac_operator_bielec(iorb,ispin,key,hjj,Nint,na,nb)
! Same spin
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
! Opposite spin
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
na = na+1
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
implicit none
BEGIN_DOC
@ -192,11 +192,11 @@ subroutine i_H_j_mono_spin_monoelec(key_i,key_j,Nint,spin,hij)
integer :: m,p
m = exc(1,1)
p = exc(1,2)
hij = phase * mo_mono_elec_integrals(m,p)
hij = phase * mo_one_e_integrals(m,p)
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
implicit none
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(:,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)
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)
do ispin = 1,2
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
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
implicit none
BEGIN_DOC
@ -242,7 +242,7 @@ subroutine i_H_j_monoelec(key_i,key_j,Nint,hij)
double precision, intent(out) :: hij
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)
call get_excitation_degree(key_i,key_j,degree,Nint)
hij = 0.d0
@ -250,7 +250,7 @@ subroutine i_H_j_monoelec(key_i,key_j,Nint,hij)
return
endif
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
call get_mono_excitation(key_i,key_j,exc,phase,Nint)
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)
p = exc(1,2,2)
endif
hij = phase * mo_mono_elec_integrals(m,p)
hij = phase * mo_one_e_integrals(m,p)
endif
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
implicit none
BEGIN_DOC
@ -279,13 +279,13 @@ subroutine i_H_j_bielec(key_i,key_j,Nint,hij)
integer :: exc(0:2,2,2)
integer :: degree
double precision :: get_mo_bielec_integral
double precision :: get_two_e_integral
integer :: m,n,p,q
integer :: i,j,k
integer :: occ(Nint*bit_kind_size,2)
double precision :: diag_H_mat_elem, phase,phase_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 == 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
hij = phase * big_array_exchange_integrals(exc(1,2,1),exc(1,1,1),exc(1,2,2))
else
hij = phase*get_mo_bielec_integral( &
hij = phase*get_two_e_integral( &
exc(1,1,1), &
exc(1,1,2), &
exc(1,2,1), &
@ -316,24 +316,24 @@ subroutine i_H_j_bielec(key_i,key_j,Nint,hij)
endif
else if (exc(0,1,1) == 2) then
! Double alpha
hij = phase*(get_mo_bielec_integral( &
hij = phase*(get_two_e_integral( &
exc(1,1,1), &
exc(2,1,1), &
exc(1,2,1), &
exc(2,2,1) ,mo_integrals_map) - &
get_mo_bielec_integral( &
get_two_e_integral( &
exc(1,1,1), &
exc(2,1,1), &
exc(2,2,1), &
exc(1,2,1) ,mo_integrals_map) )
else if (exc(0,1,2) == 2) then
! Double beta
hij = phase*(get_mo_bielec_integral( &
hij = phase*(get_two_e_integral( &
exc(1,1,2), &
exc(2,1,2), &
exc(1,2,2), &
exc(2,2,2) ,mo_integrals_map) - &
get_mo_bielec_integral( &
get_two_e_integral( &
exc(1,1,2), &
exc(2,1,2), &
exc(2,2,2), &

View File

@ -13,7 +13,7 @@
do i = 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_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

View File

@ -9,7 +9,7 @@
! = $1/2 \int dr \int r' \rho(r) \rho(r') W_{ee}^{sr}$
END_DOC
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 :: integrals_array(mo_num,mo_num),integrals_erf_array(mo_num,mo_num)
short_range_Hartree_operator = 0.d0
@ -17,8 +17,8 @@
do i = 1, mo_num
do j = 1, mo_num
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_bielec_integrals_erf_i1j1(i,j,mo_num,integrals_erf_array,mo_integrals_erf_map)
call get_mo_two_e_integrals_i1j1(i,j,mo_num,integrals_array,mo_integrals_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 k = 1, mo_num
do l = 1, mo_num
@ -54,10 +54,10 @@ END_PROVIDER
do istate = 1, N_states
do i = 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) &
+ 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) &
+ potential_x_beta_mo(i,j,istate) + potential_c_beta_mo(i,j,istate) )
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
!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 :: 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)
!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
abuf(indexes(putj, puti)) = i_gen
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
!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
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)
!p1 = p(i1, 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
indexes(puti, putj) += 1
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
!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
indexes(min(puti, putj), max(puti, putj)) += 1
end do
@ -828,7 +828,7 @@ subroutine get_d2(i_gen, gen, banned, bannedOrb, indexes, abuf, mask, h, p, sp)
!p2 = p(2, mi)
!h1 = h(1, 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
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
double precision :: hij, tmp_row(N_states, mo_num), tmp_row2(N_states, mo_num)
!double precision, external :: get_phase_bi
double precision, external :: mo_bielec_integral
double precision, external :: mo_two_e_integral
logical :: ok
logical, allocatable :: lbanned(:,:)
@ -892,12 +892,12 @@ subroutine get_d1(i_gen, gen, banned, bannedOrb, indexes, abuf, mask, h, p, sp)
!tmp_row = 0d0
!do putj=1, hfix-1
! 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)
!end do
!do putj=hfix+1, mo_num
! 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)
!end do
@ -923,13 +923,13 @@ subroutine get_d1(i_gen, gen, banned, bannedOrb, indexes, abuf, mask, h, p, sp)
!p1 fixed
! putj = p1
!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(:)
!end if
! putj = p2
!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(:)
!end if
!end do
@ -963,12 +963,12 @@ subroutine get_d1(i_gen, gen, banned, bannedOrb, indexes, abuf, mask, h, p, sp)
!tmp_row = 0d0
!do putj=1,hfix-1
! 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(:)
!end do
!do putj=hfix+1,mo_num
! 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(:)
!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
! putj = p2
!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(:)
!end if
! putj = p1
!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(:)
!end if
!end do

View File

@ -15,7 +15,7 @@ subroutine dress_slave
end
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
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
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 *, ' Samples Energy Stat. Error Seconds '

View File

@ -7,7 +7,7 @@ program pt2
read_wf = .True.
threshold_generators = 1.d0
SOFT_TOUCH read_wf threshold_generators
PROVIDE mo_bielec_integrals_in_map
PROVIDE mo_two_e_integrals_in_map
PROVIDE psi_energy
call run
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
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')
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 :: i, j, k, h1, h2, p1, p2, sfix, hfix, pfix, hmob, pmob, puti
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 :: turn2(2) = (/2,1/)
@ -129,7 +129,7 @@ subroutine get_m2(gen, phasemask, bannedOrb, vect, mask, h, p, sp, coefs)
if(bannedOrb(puti)) cycle
p1 = p(turn3_2(1,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)
do k=1,N_states
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)
if(bannedOrb(puti)) cycle
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)
do k=1,N_states
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)
h1 = h(1,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)
do k=1,N_states
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(:)
integer(bit_kind) :: det(N_int, 2)
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))
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)
call get_mo_bielec_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,p1,p2,mo_num,hij_cache(1,1),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
if(lbanned(i)) cycle
@ -235,7 +235,7 @@ subroutine get_m1(gen, phasemask, bannedOrb, vect, mask, h, p, sp, coefs)
enddo
else
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
if(lbanned(i)) cycle
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)
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 :: 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)
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
do k=1,N_states
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
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
mat(k, puti, putj) = mat(k, puti, putj) +coefs(k) * hij
enddo
@ -918,7 +918,7 @@ subroutine get_d2(gen, phasemask, bannedOrb, banned, mat, mask, h, p, sp, coefs)
i2 = turn2d(2, i, j)
p1 = p(i1, 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
mat(k, puti, putj) = mat(k, puti, putj) +coefs(k) * hij
enddo
@ -936,7 +936,7 @@ subroutine get_d2(gen, phasemask, bannedOrb, banned, mat, mask, h, p, sp, coefs)
if(banned(puti,putj,1)) cycle
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
mat(k, min(puti, putj), max(puti, putj)) = mat(k, min(puti, putj), max(puti, putj)) + coefs(k) * hij
enddo
@ -949,7 +949,7 @@ subroutine get_d2(gen, phasemask, bannedOrb, banned, mat, mask, h, p, sp, coefs)
p2 = p(2, mi)
h1 = h(1, 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
mat(k, puti, putj) = mat(k, puti, putj) +coefs(k) * hij
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)
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, external :: get_phase_bi, mo_bielec_integral
double precision, external :: get_phase_bi, mo_two_e_integral
logical :: ok
logical, allocatable :: lbanned(:,:)
@ -1010,8 +1010,8 @@ subroutine get_d1(gen, phasemask, bannedOrb, banned, mat, mask, h, p, sp, coefs)
p1 = p(1,ma)
p2 = p(2,ma)
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_bielec_integrals(hfix,p2,p1,mo_num,hij_cache(1,2),mo_integrals_map)
call get_mo_two_e_integrals(hfix,p1,p2,mo_num,hij_cache(1,1),mo_integrals_map)
call get_mo_two_e_integrals(hfix,p2,p1,mo_num,hij_cache(1,2),mo_integrals_map)
tmp_row = 0d0
do putj=1, hfix-1
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)
tmp_row = 0d0
tmp_row2 = 0d0
call get_mo_bielec_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,p1,mo_num,hij_cache(1,1),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
if(lbanned(puti,mi)) cycle
!p1 fixed
@ -1089,8 +1089,8 @@ subroutine get_d1(gen, phasemask, bannedOrb, banned, mat, mask, h, p, sp, coefs)
puti = p(i, ma)
p1 = p(turn3(1,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_bielec_integrals(hfix,p2,p1,mo_num,hij_cache(1,2),mo_integrals_map)
call get_mo_two_e_integrals(hfix,p1,p2,mo_num,hij_cache(1,1),mo_integrals_map)
call get_mo_two_e_integrals(hfix,p2,p1,mo_num,hij_cache(1,2),mo_integrals_map)
tmp_row = 0d0
do putj=1,hfix-1
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)
tmp_row = 0d0
tmp_row2 = 0d0
call get_mo_bielec_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,p1,pfix,mo_num,hij_cache(1,1),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
if(lbanned(puti,ma)) cycle
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
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
integer :: bant
@ -1210,7 +1210,7 @@ subroutine get_d0(gen, phasemask, bannedOrb, banned, mat, mask, h, p, sp, coefs)
h2 = p(1,2)
do p2=1, mo_num
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
if(bannedOrb(p1, 1) .or. banned(p1, p2, bant)) cycle
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)
do puti=1, mo_num
if(bannedOrb(puti, sp)) cycle
call get_mo_bielec_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,p2,p1,mo_num,hij_cache1,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
if(bannedOrb(putj, sp) .or. banned(putj, sp, bant)) cycle
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_bi_elec_integral_beta , (ao_num, ao_num) ]
BEGIN_PROVIDER [ double precision, ao_two_e_integral_alpha, (ao_num, ao_num) ]
&BEGIN_PROVIDER [ double precision, ao_two_e_integral_beta , (ao_num, ao_num) ]
use map_module
implicit none
BEGIN_DOC
@ -11,32 +11,32 @@
integer :: i0,j0,k0,l0
integer*8 :: p,q
double precision :: integral, c0, c1, c2
double precision :: ao_bielec_integral, local_threshold
double precision, allocatable :: ao_bi_elec_integral_alpha_tmp(:,:)
double precision, allocatable :: ao_bi_elec_integral_beta_tmp(:,:)
double precision :: ao_two_e_integral, local_threshold
double precision, allocatable :: ao_two_e_integral_alpha_tmp(:,:)
double precision, allocatable :: ao_two_e_integral_beta_tmp(:,:)
ao_bi_elec_integral_alpha = 0.d0
ao_bi_elec_integral_beta = 0.d0
ao_two_e_integral_alpha = 0.d0
ao_two_e_integral_beta = 0.d0
if (do_direct_integrals) then
!$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 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 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_overlap_abs, ao_bi_elec_integral_alpha, ao_bi_elec_integral_beta)
!$OMP ao_integrals_map,ao_integrals_threshold, ao_two_e_integral_schwartz, &
!$OMP ao_overlap_abs, ao_two_e_integral_alpha, ao_two_e_integral_beta)
allocate(keys(1), values(1))
allocate(ao_bi_elec_integral_alpha_tmp(ao_num,ao_num), &
ao_bi_elec_integral_beta_tmp(ao_num,ao_num))
ao_bi_elec_integral_alpha_tmp = 0.d0
ao_bi_elec_integral_beta_tmp = 0.d0
allocate(ao_two_e_integral_alpha_tmp(ao_num,ao_num), &
ao_two_e_integral_beta_tmp(ao_num,ao_num))
ao_two_e_integral_alpha_tmp = 0.d0
ao_two_e_integral_beta_tmp = 0.d0
q = ao_num*ao_num*ao_num*ao_num
!$OMP DO SCHEDULE(static,1)
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. &
(ii(1)>ao_num).or. &
(jj(1)>ao_num).or. &
@ -52,7 +52,7 @@
< ao_integrals_threshold) then
cycle
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
cycle
endif
@ -77,27 +77,27 @@
cycle
endif
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
integral = c0 * values(1)
ao_bi_elec_integral_alpha_tmp(i,j) += integral
ao_bi_elec_integral_beta_tmp (i,j) += integral
ao_two_e_integral_alpha_tmp(i,j) += integral
ao_two_e_integral_beta_tmp (i,j) += integral
integral = values(1)
ao_bi_elec_integral_alpha_tmp(l,j) -= c1 * integral
ao_bi_elec_integral_beta_tmp (l,j) -= c2 * integral
ao_two_e_integral_alpha_tmp(l,j) -= c1 * integral
ao_two_e_integral_beta_tmp (l,j) -= c2 * integral
enddo
enddo
!$OMP END DO NOWAIT
!$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 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
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
else
PROVIDE ao_bielec_integrals_in_map
PROVIDE ao_two_e_integrals_in_map
integer(omp_lock_kind) :: lck(ao_num)
integer(map_size_kind) :: i8
@ -108,23 +108,23 @@
!$OMP PARALLEL DEFAULT(NONE) &
!$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 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)
allocate(keys(n_elements_max), values(n_elements_max))
allocate(ao_bi_elec_integral_alpha_tmp(ao_num,ao_num), &
ao_bi_elec_integral_beta_tmp(ao_num,ao_num))
ao_bi_elec_integral_alpha_tmp = 0.d0
ao_bi_elec_integral_beta_tmp = 0.d0
allocate(ao_two_e_integral_alpha_tmp(ao_num,ao_num), &
ao_two_e_integral_beta_tmp(ao_num,ao_num))
ao_two_e_integral_alpha_tmp = 0.d0
ao_two_e_integral_beta_tmp = 0.d0
!$OMP DO SCHEDULE(static,1)
do i8=0_8,ao_integrals_map%map_size
n_elements = n_elements_max
call get_cache_map(ao_integrals_map,i8,keys,values,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
if (kk(k2)==0) then
@ -135,24 +135,24 @@
k = kk(k2)
l = ll(k2)
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_bi_elec_integral_beta_tmp (i,j) += integral
ao_two_e_integral_alpha_tmp(i,j) += integral
ao_two_e_integral_beta_tmp (i,j) += integral
integral = values(k1)
ao_bi_elec_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_alpha_tmp(l,j) -= SCF_density_matrix_ao_alpha(k,i) * integral
ao_two_e_integral_beta_tmp (l,j) -= SCF_density_matrix_ao_beta (k,i) * integral
enddo
enddo
enddo
!$OMP END DO
!$OMP BARRIER
!$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 BARRIER
!$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
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
endif
@ -169,8 +169,8 @@ END_PROVIDER
integer :: i,j
do j=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_beta (i,j) = ao_one_e_integrals(i,j) + ao_bi_elec_integral_beta (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_two_e_integral_beta (i,j)
enddo
enddo

View File

@ -22,8 +22,8 @@ END_PROVIDER
HF_energy = nuclear_repulsion
do j=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) &
+ao_bi_elec_integral_beta(i,j) * SCF_density_matrix_ao_beta(i,j) )
HF_two_electron_energy += 0.5d0 * ( ao_two_e_integral_alpha(i,j) * SCF_density_matrix_ao_alpha(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) )
enddo
enddo

View File

@ -26,9 +26,9 @@ subroutine create_guess
mo_coef = ao_ortho_lowdin_coef
TOUCH mo_coef
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), &
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,1,.false.)
SOFT_TOUCH mo_coef mo_label
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_bi_elec_integral_beta , (ao_num, ao_num) ]
BEGIN_PROVIDER [ double precision, ao_two_e_integral_alpha, (ao_num, ao_num) ]
&BEGIN_PROVIDER [ double precision, ao_two_e_integral_beta , (ao_num, ao_num) ]
use map_module
implicit none
BEGIN_DOC
@ -12,34 +12,34 @@
integer :: i0,j0,k0,l0
integer*8 :: p,q
double precision :: integral, c0, c1, c2
double precision :: ao_bielec_integral, local_threshold
double precision, allocatable :: ao_bi_elec_integral_alpha_tmp(:,:)
double precision, allocatable :: ao_bi_elec_integral_beta_tmp(:,:)
!DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: ao_bi_elec_integral_beta_tmp
!DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: ao_bi_elec_integral_alpha_tmp
double precision :: ao_two_e_integral, local_threshold
double precision, allocatable :: ao_two_e_integral_alpha_tmp(:,:)
double precision, allocatable :: ao_two_e_integral_beta_tmp(:,:)
!DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: ao_two_e_integral_beta_tmp
!DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: ao_two_e_integral_alpha_tmp
ao_bi_elec_integral_alpha = 0.d0
ao_bi_elec_integral_beta = 0.d0
ao_two_e_integral_alpha = 0.d0
ao_two_e_integral_beta = 0.d0
if (do_direct_integrals) then
!$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 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 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_overlap_abs, ao_bi_elec_integral_alpha, ao_bi_elec_integral_beta)
!$OMP ao_integrals_map,ao_integrals_threshold, ao_two_e_integral_schwartz, &
!$OMP ao_overlap_abs, ao_two_e_integral_alpha, ao_two_e_integral_beta)
allocate(keys(1), values(1))
allocate(ao_bi_elec_integral_alpha_tmp(ao_num,ao_num), &
ao_bi_elec_integral_beta_tmp(ao_num,ao_num))
ao_bi_elec_integral_alpha_tmp = 0.d0
ao_bi_elec_integral_beta_tmp = 0.d0
allocate(ao_two_e_integral_alpha_tmp(ao_num,ao_num), &
ao_two_e_integral_beta_tmp(ao_num,ao_num))
ao_two_e_integral_alpha_tmp = 0.d0
ao_two_e_integral_beta_tmp = 0.d0
q = ao_num*ao_num*ao_num*ao_num
!$OMP DO SCHEDULE(dynamic)
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. &
(ii(1)>ao_num).or. &
(jj(1)>ao_num).or. &
@ -55,7 +55,7 @@
< ao_integrals_threshold) then
cycle
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
cycle
endif
@ -80,27 +80,27 @@
cycle
endif
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
integral = c0 * values(1)
ao_bi_elec_integral_alpha_tmp(i,j) += integral
ao_bi_elec_integral_beta_tmp (i,j) += integral
ao_two_e_integral_alpha_tmp(i,j) += integral
ao_two_e_integral_beta_tmp (i,j) += integral
integral = values(1)
ao_bi_elec_integral_alpha_tmp(l,j) -= c1 * integral
ao_bi_elec_integral_beta_tmp (l,j) -= c2 * integral
ao_two_e_integral_alpha_tmp(l,j) -= c1 * integral
ao_two_e_integral_beta_tmp (l,j) -= c2 * integral
enddo
enddo
!$OMP END DO NOWAIT
!$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 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
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
else
PROVIDE ao_bielec_integrals_in_map
PROVIDE ao_two_e_integrals_in_map
integer(omp_lock_kind) :: lck(ao_num)
integer*8 :: i8
@ -114,16 +114,16 @@
!$OMP PARALLEL DEFAULT(NONE) &
!$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 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)
allocate(keys(n_elements_max), values(n_elements_max))
allocate(ao_bi_elec_integral_alpha_tmp(ao_num,ao_num), &
ao_bi_elec_integral_beta_tmp(ao_num,ao_num))
ao_bi_elec_integral_alpha_tmp = 0.d0
ao_bi_elec_integral_beta_tmp = 0.d0
allocate(ao_two_e_integral_alpha_tmp(ao_num,ao_num), &
ao_two_e_integral_beta_tmp(ao_num,ao_num))
ao_two_e_integral_alpha_tmp = 0.d0
ao_two_e_integral_beta_tmp = 0.d0
!$OMP DO SCHEDULE(dynamic,64)
!DIR$ NOVECTOR
@ -131,7 +131,7 @@
n_elements = n_elements_max
call get_cache_map(ao_integrals_map,i8,keys,values,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
if (kk(k2)==0) then
@ -142,22 +142,22 @@
k = kk(k2)
l = ll(k2)
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_bi_elec_integral_beta_tmp (i,j) += integral
ao_two_e_integral_alpha_tmp(i,j) += integral
ao_two_e_integral_beta_tmp (i,j) += integral
integral = values(k1)
ao_bi_elec_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_alpha_tmp(l,j) -= HF_exchange * (SCF_density_matrix_ao_alpha(k,i) * integral)
ao_two_e_integral_beta_tmp (l,j) -= HF_exchange * (SCF_density_matrix_ao_beta (k,i) * integral)
enddo
enddo
enddo
!$OMP END DO NOWAIT
!$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 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
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
endif
@ -192,8 +192,8 @@ END_PROVIDER
integer :: i,j
do j=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_beta_no_xc_ao(i,j) = ao_one_e_integrals(i,j) + ao_bi_elec_integral_beta (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_two_e_integral_beta (i,j)
enddo
enddo

View File

@ -19,8 +19,8 @@
do i=1,ao_num
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)
two_electron_energy += 0.5d0 * ( ao_bi_elec_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) )
two_electron_energy += 0.5d0 * ( ao_two_e_integral_alpha(i,j) * SCF_density_matrix_ao_alpha(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) )
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

View File

@ -64,7 +64,7 @@ subroutine create_guess
mo_coef = ao_ortho_lowdin_coef
TOUCH mo_coef
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
else if (mo_guess_type == "Huckel") then
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_bi_elec_integral_beta , (ao_num, ao_num) ]
BEGIN_PROVIDER [ double precision, ao_two_e_integral_alpha, (ao_num, ao_num) ]
&BEGIN_PROVIDER [ double precision, ao_two_e_integral_beta , (ao_num, ao_num) ]
use map_module
implicit none
BEGIN_DOC
@ -10,34 +10,34 @@
integer :: i0,j0,k0,l0
integer*8 :: p,q
double precision :: integral, c0, c1, c2
double precision :: ao_bielec_integral, local_threshold
double precision, allocatable :: ao_bi_elec_integral_alpha_tmp(:,:)
double precision, allocatable :: ao_bi_elec_integral_beta_tmp(:,:)
!DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: ao_bi_elec_integral_beta_tmp
!DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: ao_bi_elec_integral_alpha_tmp
double precision :: ao_two_e_integral, local_threshold
double precision, allocatable :: ao_two_e_integral_alpha_tmp(:,:)
double precision, allocatable :: ao_two_e_integral_beta_tmp(:,:)
!DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: ao_two_e_integral_beta_tmp
!DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: ao_two_e_integral_alpha_tmp
ao_bi_elec_integral_alpha = 0.d0
ao_bi_elec_integral_beta = 0.d0
ao_two_e_integral_alpha = 0.d0
ao_two_e_integral_beta = 0.d0
if (do_direct_integrals) then
!$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 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 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_overlap_abs, ao_bi_elec_integral_alpha, ao_bi_elec_integral_beta)
!$OMP ao_integrals_map,ao_integrals_threshold, ao_two_e_integral_schwartz, &
!$OMP ao_overlap_abs, ao_two_e_integral_alpha, ao_two_e_integral_beta)
allocate(keys(1), values(1))
allocate(ao_bi_elec_integral_alpha_tmp(ao_num,ao_num), &
ao_bi_elec_integral_beta_tmp(ao_num,ao_num))
ao_bi_elec_integral_alpha_tmp = 0.d0
ao_bi_elec_integral_beta_tmp = 0.d0
allocate(ao_two_e_integral_alpha_tmp(ao_num,ao_num), &
ao_two_e_integral_beta_tmp(ao_num,ao_num))
ao_two_e_integral_alpha_tmp = 0.d0
ao_two_e_integral_beta_tmp = 0.d0
q = ao_num*ao_num*ao_num*ao_num
!$OMP DO SCHEDULE(dynamic)
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. &
(ii(1)>ao_num).or. &
(jj(1)>ao_num).or. &
@ -53,7 +53,7 @@
< ao_integrals_threshold) then
cycle
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
cycle
endif
@ -78,28 +78,28 @@
cycle
endif
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
integral = c0 * values(1)
ao_bi_elec_integral_alpha_tmp(i,j) += integral
ao_bi_elec_integral_beta_tmp (i,j) += integral
ao_two_e_integral_alpha_tmp(i,j) += integral
ao_two_e_integral_beta_tmp (i,j) += integral
integral = values(1)
ao_bi_elec_integral_alpha_tmp(l,j) -= c1 * integral
ao_bi_elec_integral_beta_tmp (l,j) -= c2 * integral
ao_two_e_integral_alpha_tmp(l,j) -= c1 * integral
ao_two_e_integral_beta_tmp (l,j) -= c2 * integral
enddo
enddo
!$OMP END DO NOWAIT
!$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 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
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
else
PROVIDE ao_bielec_integrals_in_map
PROVIDE ao_bielec_integrals_erf_in_map
PROVIDE ao_two_e_integrals_in_map
PROVIDE ao_two_e_integrals_erf_in_map
integer(omp_lock_kind) :: lck(ao_num)
integer*8 :: i8
@ -113,16 +113,16 @@
!$OMP PARALLEL DEFAULT(NONE) &
!$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 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)
allocate(keys(n_elements_max), values(n_elements_max))
allocate(ao_bi_elec_integral_alpha_tmp(ao_num,ao_num), &
ao_bi_elec_integral_beta_tmp(ao_num,ao_num))
ao_bi_elec_integral_alpha_tmp = 0.d0
ao_bi_elec_integral_beta_tmp = 0.d0
allocate(ao_two_e_integral_alpha_tmp(ao_num,ao_num), &
ao_two_e_integral_beta_tmp(ao_num,ao_num))
ao_two_e_integral_alpha_tmp = 0.d0
ao_two_e_integral_beta_tmp = 0.d0
!$OMP DO SCHEDULE(dynamic,64)
!DIR$ NOVECTOR
@ -130,7 +130,7 @@
n_elements = n_elements_max
call get_cache_map(ao_integrals_map,i8,keys,values,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
if (kk(k2)==0) then
@ -141,42 +141,42 @@
k = kk(k2)
l = ll(k2)
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_bi_elec_integral_beta_tmp (i,j) += integral
ao_two_e_integral_alpha_tmp(i,j) += integral
ao_two_e_integral_beta_tmp (i,j) += integral
enddo
enddo
enddo
!$OMP END DO NOWAIT
!$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 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
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 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 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 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)
allocate(ao_bi_elec_integral_alpha_tmp(ao_num,ao_num), &
ao_bi_elec_integral_beta_tmp(ao_num,ao_num))
allocate(ao_two_e_integral_alpha_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))
ao_bi_elec_integral_alpha_tmp = 0.d0
ao_bi_elec_integral_beta_tmp = 0.d0
ao_two_e_integral_alpha_tmp = 0.d0
ao_two_e_integral_beta_tmp = 0.d0
!$OMP DO SCHEDULE(dynamic,64)
!DIR$ NOVECTOR
do i8=0_8,ao_integrals_erf_map%map_size
n_elements_erf = n_elements_max_erf
call get_cache_map(ao_integrals_erf_map,i8,keys_erf,values_erf,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
if (kk(k2)==0) then
@ -188,20 +188,20 @@
l = ll(k2)
double precision :: integral_erf
integral_erf = values_erf(k1)
ao_bi_elec_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_alpha_tmp(l,j) -= (SCF_density_matrix_ao_alpha(k,i) * integral_erf)
ao_two_e_integral_beta_tmp (l,j) -= (SCF_density_matrix_ao_beta (k,i) * integral_erf)
enddo
enddo
enddo
!$OMP END DO NOWAIT
!$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 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
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)
!$OMP END PARALLEL
@ -238,8 +238,8 @@ END_PROVIDER
integer :: i,j
do j=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_beta_no_xc_ao(i,j) = ao_one_e_integrals(i,j) + ao_bi_elec_integral_beta (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_two_e_integral_beta (i,j)
enddo
enddo

View File

@ -19,8 +19,8 @@
do i=1,ao_num
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)
two_electron_energy += 0.5d0 * ( ao_bi_elec_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) )
two_electron_energy += 0.5d0 * ( ao_two_e_integral_alpha(i,j) * SCF_density_matrix_ao_alpha(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) )
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

View File

@ -66,7 +66,7 @@ subroutine create_guess
mo_coef = ao_ortho_lowdin_coef
TOUCH mo_coef
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
else if (mo_guess_type == "Huckel") then
call huckel_guess

View File

@ -5,9 +5,9 @@ subroutine hcore_guess
implicit none
character*(64) :: label
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),label,1,.false.)
call mo_as_eigvectors_of_mo_matrix(mo_one_e_integrals, &
size(mo_one_e_integrals,1), &
size(mo_one_e_integrals,2),label,1,.false.)
call save_mos
SOFT_TOUCH mo_coef mo_label
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 PRIVATE(i,j,i1,j1,c_j1,c_i1) &
!$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 j = 1, mo_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
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) + &
c_j1 * ao_nucl_elec_integrals(j1,i1)
c_j1 * ao_integrals_n_e(j1,i1)
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 PRIVATE(i,j,i1,j1,c_j1,c_i1) &
!$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 j = 1, mo_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
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) + &
c_j1 * ao_nucl_elec_integrals(j1,i1)
c_j1 * ao_integrals_n_e(j1,i1)
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:
* `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_mono_elec_integrals` which are the the h_core operator integrals on the |AO| basis (see :file:`mo_mono_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_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`.

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
integer :: i,j,n,l
BEGIN_DOC
@ -8,18 +8,18 @@ BEGIN_PROVIDER [ double precision, mo_mono_elec_integrals,(mo_num,mo_num)]
print*,'Providing the mono electronic integrals'
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
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
mo_mono_elec_integrals += mo_pseudo_integrals
mo_one_e_integrals += mo_pseudo_integrals
ENDIF
ENDIF
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'
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
BEGIN_DOC
! Nucleus-electron interaction on the |MO| basis
END_DOC
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'
else
call ao_to_mo( &
ao_nucl_elec_integrals, &
size(ao_nucl_elec_integrals,1), &
mo_nucl_elec_integrals, &
size(mo_nucl_elec_integrals,1) &
ao_integrals_n_e, &
size(ao_integrals_n_e,1), &
mo_integrals_n_e, &
size(mo_integrals_n_e,1) &
)
endif
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'
endif
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
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$.
! where R_k is the coordinate of the k-th nucleus.
END_DOC
integer :: k
mo_nucl_elec_integrals_per_atom = 0.d0
mo_integrals_n_e_per_atom = 0.d0
do k = 1, nucl_num
call ao_to_mo( &
ao_nucl_elec_integrals_per_atom(1,1,k), &
size(ao_nucl_elec_integrals_per_atom,1), &
mo_nucl_elec_integrals_per_atom(1,1,k), &
size(mo_nucl_elec_integrals_per_atom,1) &
ao_integrals_n_e_per_atom(1,1,k), &
size(ao_integrals_n_e_per_atom,1), &
mo_integrals_n_e_per_atom(1,1,k), &
size(mo_integrals_n_e_per_atom,1) &
)
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`.
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:

View File

@ -7,7 +7,7 @@ BEGIN_PROVIDER [double precision, core_energy_erf]
core_energy_erf = 0.d0
do i = 1, n_core_orb
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
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))
@ -20,7 +20,7 @@ END_PROVIDER
BEGIN_PROVIDER [double precision, core_fock_operator_erf, (mo_num,mo_num)]
implicit none
integer :: i,j,k,l,m,n
double precision :: get_mo_bielec_integral_erf
double precision :: get_mo_two_e_integral_erf
BEGIN_DOC
! this is the contribution to the Fock operator from the core electrons with the erf interaction
END_DOC
@ -31,7 +31,7 @@ BEGIN_PROVIDER [double precision, core_fock_operator_erf, (mo_num,mo_num)]
l = list_act(k)
do m = 1, n_core_orb
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

View File

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

View File

@ -56,7 +56,7 @@ BEGIN_PROVIDER [ type(map_type), mo_integrals_erf_map ]
END_DOC
integer(key_kind) :: key_max
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
call map_init(mo_integrals_erf_map,sze)
print*, 'MO erf map initialized'
@ -94,7 +94,7 @@ BEGIN_PROVIDER [ double precision, mo_integrals_erf_cache, (0:64*64*64*64) ]
BEGIN_DOC
! Cache of |MO| integrals for fast access
END_DOC
PROVIDE mo_bielec_integrals_erf_in_map
PROVIDE mo_two_e_integrals_erf_in_map
integer :: i,j,k,l
integer :: ii
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 i=mo_integrals_erf_cache_min,mo_integrals_erf_cache_max
!DIR$ FORCEINLINE
call bielec_integrals_index(i,j,k,l,idx)
call two_e_integrals_index(i,j,k,l,idx)
!DIR$ FORCEINLINE
call map_get(mo_integrals_erf_map,idx,integral)
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
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
implicit none
BEGIN_DOC
@ -134,42 +134,42 @@ double precision function get_mo_bielec_integral_erf(i,j,k,l,map)
integer :: ii
type(map_type), intent(inout) :: map
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 = ior(ii, k-mo_integrals_erf_cache_min)
ii = ior(ii, j-mo_integrals_erf_cache_min)
ii = ior(ii, i-mo_integrals_erf_cache_min)
if (iand(ii, -64) /= 0) then
!DIR$ FORCEINLINE
call bielec_integrals_index(i,j,k,l,idx)
call two_e_integrals_index(i,j,k,l,idx)
!DIR$ FORCEINLINE
call map_get(map,idx,tmp)
get_mo_bielec_integral_erf = dble(tmp)
get_mo_two_e_integral_erf = dble(tmp)
else
ii = l-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), 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
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
BEGIN_DOC
! Returns one integral $\langle ij|kl \rangle$ in the |MO| basis
END_DOC
integer, intent(in) :: i,j,k,l
double precision :: get_mo_bielec_integral_erf
PROVIDE mo_bielec_integrals_erf_in_map mo_integrals_erf_cache
double precision :: get_mo_two_e_integral_erf
PROVIDE mo_two_e_integrals_erf_in_map mo_integrals_erf_cache
!DIR$ FORCEINLINE
PROVIDE mo_bielec_integrals_erf_in_map
mo_bielec_integral_erf = get_mo_bielec_integral_erf(i,j,k,l,mo_integrals_erf_map)
PROVIDE mo_two_e_integrals_erf_in_map
mo_two_e_integral_erf = get_mo_two_e_integral_erf(i,j,k,l,mo_integrals_erf_map)
return
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
implicit none
BEGIN_DOC
@ -182,11 +182,11 @@ subroutine get_mo_bielec_integrals_erf(j,k,l,sze,out_val,map)
integer :: i
integer(key_kind) :: hash(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
!DIR$ FORCEINLINE
call bielec_integrals_index(i,j,k,l,hash(i))
call two_e_integrals_index(i,j,k,l,hash(i))
enddo
if (key_kind == 8) then
@ -200,7 +200,7 @@ subroutine get_mo_bielec_integrals_erf(j,k,l,sze,out_val,map)
endif
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
implicit none
BEGIN_DOC
@ -216,7 +216,7 @@ subroutine get_mo_bielec_integrals_erf_ij(k,l,sze,out_array,map)
integer ,allocatable :: pairs(:,:), iorder(:)
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), &
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
kk += 1
!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(2,kk) = j
iorder(kk) = kk
@ -255,7 +255,7 @@ subroutine get_mo_bielec_integrals_erf_ij(k,l,sze,out_array,map)
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
implicit none
BEGIN_DOC
@ -271,7 +271,7 @@ subroutine get_mo_bielec_integrals_erf_i1j1(k,l,sze,out_array,map)
integer ,allocatable :: pairs(:,:), iorder(:)
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), &
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
kk += 1
!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(2,kk) = j
iorder(kk) = kk
@ -310,7 +310,7 @@ subroutine get_mo_bielec_integrals_erf_i1j1(k,l,sze,out_array,map)
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
implicit none
BEGIN_DOC
@ -325,12 +325,12 @@ subroutine get_mo_bielec_integrals_erf_coulomb_ii(k,l,sze,out_val,map)
integer :: i
integer(key_kind) :: hash(sze)
real(integral_kind) :: tmp_val(sze)
PROVIDE mo_bielec_integrals_erf_in_map
PROVIDE mo_two_e_integrals_erf_in_map
integer :: kk
do i=1,sze
!DIR$ FORCEINLINE
call bielec_integrals_index(k,i,l,i,hash(i))
call two_e_integrals_index(k,i,l,i,hash(i))
enddo
if (key_kind == 8) then
@ -344,7 +344,7 @@ subroutine get_mo_bielec_integrals_erf_coulomb_ii(k,l,sze,out_val,map)
endif
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
implicit none
BEGIN_DOC
@ -359,12 +359,12 @@ subroutine get_mo_bielec_integrals_erf_exch_ii(k,l,sze,out_val,map)
integer :: i
integer(key_kind) :: hash(sze)
real(integral_kind) :: tmp_val(sze)
PROVIDE mo_bielec_integrals_erf_in_map
PROVIDE mo_two_e_integrals_erf_in_map
integer :: kk
do i=1,sze
!DIR$ FORCEINLINE
call bielec_integrals_index(k,i,i,l,hash(i))
call two_e_integrals_index(k,i,i,l,hash(i))
enddo
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
implicit none
BEGIN_DOC
@ -19,26 +19,26 @@ subroutine mo_bielec_integrals_erf_index(i,j,k,l,i1)
end
BEGIN_PROVIDER [ logical, mo_bielec_integrals_erf_in_map ]
BEGIN_PROVIDER [ logical, mo_two_e_integrals_erf_in_map ]
use map_module
implicit none
integer(bit_kind) :: mask_ijkl(N_int,4)
integer(bit_kind) :: mask_ijk(N_int,3)
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
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
print*,'Reading the MO integrals_erf'
call map_load_from_disk(trim(ezfio_filename)//'/work/mo_ints_erf',mo_integrals_erf_map)
print*, 'MO integrals_erf provided'
return
else
PROVIDE ao_bielec_integrals_erf_in_map
PROVIDE ao_two_e_integrals_erf_in_map
endif
! 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_anti_from_ao, (mo_num,mo_num) ]
BEGIN_DOC
! 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
END_DOC
implicit none
integer :: i,j,p,q,r,s
@ -80,7 +80,7 @@ END_PROVIDER
double precision, allocatable :: iqrs(:,:), iqsr(:,:), iqis(:), iqri(:)
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
mo_two_e_int_erf_jj_from_ao = 0.d0
@ -113,9 +113,9 @@ END_PROVIDER
enddo
if (do_direct_integrals) then
double precision :: ao_bielec_integral_erf
double precision :: ao_two_e_integral_erf
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
integral = int_value(p)
if (abs(integral) > ao_integrals_threshold) then
@ -125,7 +125,7 @@ END_PROVIDER
enddo
endif
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
integral = int_value(p)
if (abs(integral) > ao_integrals_threshold) then
@ -140,7 +140,7 @@ END_PROVIDER
else
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
p = int_idx(pp)
integral = int_value(pp)
@ -151,7 +151,7 @@ END_PROVIDER
enddo
endif
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
p = int_idx(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) ]
implicit none
BEGIN_DOC
! 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
END_DOC
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_exchange = 0.d0
do j=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_exchange(i,j) = get_mo_bielec_integral_erf(i,j,j,i,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_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)
enddo
enddo
@ -230,7 +230,7 @@ subroutine clear_mo_erf_map
END_DOC
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_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
@ -238,7 +238,7 @@ end
subroutine provide_all_mo_integrals_erf
implicit none
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
@ -259,12 +259,12 @@ subroutine add_integrals_to_map_erf(mask_ijkl)
integer, allocatable :: list_ijkl(:,:)
integer :: n_i, n_j, n_k, n_l
integer, allocatable :: bielec_tmp_0_idx(:)
real(integral_kind), allocatable :: bielec_tmp_0(:,:)
double precision, allocatable :: bielec_tmp_1(:)
double precision, allocatable :: bielec_tmp_2(:,:)
double precision, allocatable :: bielec_tmp_3(:,:,:)
!DIR$ ATTRIBUTES ALIGN : 64 :: bielec_tmp_1, bielec_tmp_2, bielec_tmp_3
integer, allocatable :: two_e_tmp_0_idx(:)
real(integral_kind), allocatable :: two_e_tmp_0(:,:)
double precision, allocatable :: two_e_tmp_1(:)
double precision, allocatable :: two_e_tmp_2(:,:)
double precision, allocatable :: two_e_tmp_3(:,:,:)
!DIR$ ATTRIBUTES ALIGN : 64 :: two_e_tmp_1, two_e_tmp_2, two_e_tmp_3
integer :: n_integrals
integer :: size_buffer
@ -276,7 +276,7 @@ subroutine add_integrals_to_map_erf(mask_ijkl)
integer :: i2,i3,i4
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
!-------------------------------
@ -342,7 +342,7 @@ subroutine add_integrals_to_map_erf(mask_ijkl)
accu_bis = 0.d0
!$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 wall_0,thread_num,accu_bis) &
!$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)
n_integrals = 0
wall_0 = wall_1
allocate(bielec_tmp_3(mo_num, n_j, n_k), &
bielec_tmp_1(mo_num), &
bielec_tmp_0(ao_num,ao_num), &
bielec_tmp_0_idx(ao_num), &
bielec_tmp_2(mo_num, n_j), &
allocate(two_e_tmp_3(mo_num, n_j, n_k), &
two_e_tmp_1(mo_num), &
two_e_tmp_0(ao_num,ao_num), &
two_e_tmp_0_idx(ao_num), &
two_e_tmp_2(mo_num, n_j), &
buffer_i(size_buffer), &
buffer_value(size_buffer) )
@ -365,57 +365,57 @@ subroutine add_integrals_to_map_erf(mask_ijkl)
!$ thread_num = omp_get_thread_num()
!$OMP DO SCHEDULE(guided)
do l1 = 1,ao_num
bielec_tmp_3 = 0.d0
two_e_tmp_3 = 0.d0
do k1 = 1,ao_num
bielec_tmp_2 = 0.d0
two_e_tmp_2 = 0.d0
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 compute_ao_bielec_integrals(j1,k1,l1,ao_num,bielec_tmp_0(1,j1))
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_two_e_integrals(j1,k1,l1,ao_num,two_e_tmp_0(1,j1))
enddo
do j1 = 1,ao_num
kmax = 0
do i1 = 1,ao_num
c = bielec_tmp_0(i1,j1)
c = two_e_tmp_0(i1,j1)
if (c == 0.d0) then
cycle
endif
kmax += 1
bielec_tmp_0(kmax,j1) = c
bielec_tmp_0_idx(kmax) = i1
two_e_tmp_0(kmax,j1) = c
two_e_tmp_0_idx(kmax) = i1
enddo
if (kmax==0) then
cycle
endif
bielec_tmp_1 = 0.d0
two_e_tmp_1 = 0.d0
ii1=1
! sum_m c_m^i (m)
do ii1 = 1,kmax-4,4
i1 = bielec_tmp_0_idx(ii1)
i2 = bielec_tmp_0_idx(ii1+1)
i3 = bielec_tmp_0_idx(ii1+2)
i4 = bielec_tmp_0_idx(ii1+3)
i1 = two_e_tmp_0_idx(ii1)
i2 = two_e_tmp_0_idx(ii1+1)
i3 = two_e_tmp_0_idx(ii1+2)
i4 = two_e_tmp_0_idx(ii1+3)
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) + &
mo_coef_transp(i,i2) * bielec_tmp_0(ii1+1,j1) + &
mo_coef_transp(i,i3) * bielec_tmp_0(ii1+2,j1) + &
mo_coef_transp(i,i4) * bielec_tmp_0(ii1+3,j1)
two_e_tmp_1(i) = two_e_tmp_1(i) + &
mo_coef_transp(i,i1) * two_e_tmp_0(ii1,j1) + &
mo_coef_transp(i,i2) * two_e_tmp_0(ii1+1,j1) + &
mo_coef_transp(i,i3) * two_e_tmp_0(ii1+2,j1) + &
mo_coef_transp(i,i4) * two_e_tmp_0(ii1+3,j1)
enddo ! i
enddo ! ii1
i2 = ii1
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)
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 ! ii1
c = 0.d0
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
enddo
if ( c < mo_integrals_threshold ) then
@ -429,11 +429,11 @@ subroutine add_integrals_to_map_erf(mask_ijkl)
cycle
endif
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 ! j
enddo !j1
if ( maxval(abs(bielec_tmp_2)) < mo_integrals_threshold ) then
if ( maxval(abs(two_e_tmp_2)) < mo_integrals_threshold ) then
cycle
endif
@ -448,7 +448,7 @@ subroutine add_integrals_to_map_erf(mask_ijkl)
do j0 = 1, n_j
j = list_ijkl(j0,2)
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 !j
@ -478,13 +478,13 @@ subroutine add_integrals_to_map_erf(mask_ijkl)
else
exit
endif
bielec_tmp_1 = 0.d0
two_e_tmp_1 = 0.d0
do i0 = 1, n_i
i = list_ijkl(i0,1)
if (i>k) then
exit
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
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
exit
endif
if (abs(bielec_tmp_1(i)) < mo_integrals_threshold) then
if (abs(two_e_tmp_1(i)) < mo_integrals_threshold) then
cycle
endif
n_integrals += 1
buffer_value(n_integrals) = bielec_tmp_1(i)
buffer_value(n_integrals) = two_e_tmp_1(i)
!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
call insert_into_mo_integrals_erf_map(n_integrals,buffer_i,buffer_value,&
real(mo_integrals_threshold,integral_kind))
@ -520,7 +520,7 @@ subroutine add_integrals_to_map_erf(mask_ijkl)
endif
enddo
!$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

View File

@ -1,17 +1,17 @@
subroutine save_erf_bi_elec_integrals_mo
subroutine save_erf_two_e_integrals_mo
implicit none
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 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')
end
subroutine save_erf_bielec_ints_mo_into_ints_mo
subroutine save_erf_two_e_ints_mo_into_ints_mo
implicit none
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 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')

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`.
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
`get_mo_bielec_integral(i,j,k,l,mo_integrals_map)` or
`mo_bielec_integral(i,j,k,l)`.
`get_two_e_integral(i,j,k,l,mo_integrals_map)` or
`mo_two_e_integral(i,j,k,l)`.
The conventions are:

View File

@ -7,10 +7,10 @@ BEGIN_PROVIDER [double precision, core_energy]
core_energy = 0.d0
do i = 1, n_core_orb
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
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
core_energy += nuclear_repulsion
@ -20,7 +20,7 @@ END_PROVIDER
BEGIN_PROVIDER [double precision, core_fock_operator, (mo_num,mo_num)]
implicit none
integer :: i,j,k,l,m,n
double precision :: get_mo_bielec_integral
double precision :: get_two_e_integral
BEGIN_DOC
! this is the contribution to the Fock operator from the core electrons
END_DOC
@ -31,7 +31,7 @@ BEGIN_PROVIDER [double precision, core_fock_operator, (mo_num,mo_num)]
l = list_act(k)
do m = 1, n_core_orb
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

View File

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

View File

@ -10,7 +10,7 @@ BEGIN_PROVIDER [ type(map_type), mo_integrals_map ]
END_DOC
integer(key_kind) :: key_max
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
call map_init(mo_integrals_map,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
! Cache of MO integrals for fast access
END_DOC
PROVIDE mo_bielec_integrals_in_map
PROVIDE mo_two_e_integrals_in_map
integer*8 :: i,j,k,l
integer*4 :: i4,j4,k4,l4
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
i4 = int(i,4)
!DIR$ FORCEINLINE
call bielec_integrals_index(i4,j4,k4,l4,idx)
call two_e_integrals_index(i4,j4,k4,l4,idx)
!DIR$ FORCEINLINE
call map_get(mo_integrals_map,idx,integral)
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
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
implicit none
BEGIN_DOC
@ -98,42 +98,42 @@ double precision function get_mo_bielec_integral(i,j,k,l,map)
integer*8 :: ii_8
type(map_type), intent(inout) :: map
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 = ior(ii, k-mo_integrals_cache_min)
ii = ior(ii, j-mo_integrals_cache_min)
ii = ior(ii, i-mo_integrals_cache_min)
if (iand(ii, -128) /= 0) then
!DIR$ FORCEINLINE
call bielec_integrals_index(i,j,k,l,idx)
call two_e_integrals_index(i,j,k,l,idx)
!DIR$ FORCEINLINE
call map_get(map,idx,tmp)
get_mo_bielec_integral = dble(tmp)
get_two_e_integral = dble(tmp)
else
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(j,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
end
double precision function mo_bielec_integral(i,j,k,l)
double precision function mo_two_e_integral(i,j,k,l)
implicit none
BEGIN_DOC
! Returns one integral <ij|kl> in the MO basis
END_DOC
integer, intent(in) :: i,j,k,l
double precision :: get_mo_bielec_integral
PROVIDE mo_bielec_integrals_in_map mo_integrals_cache
PROVIDE mo_bielec_integrals_in_map
double precision :: get_two_e_integral
PROVIDE mo_two_e_integrals_in_map mo_integrals_cache
PROVIDE mo_two_e_integrals_in_map
!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
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
implicit none
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)
type(map_type), intent(inout) :: map
integer :: i
double precision, external :: get_mo_bielec_integral
PROVIDE mo_bielec_integrals_in_map mo_integrals_cache
double precision, external :: get_two_e_integral
PROVIDE mo_two_e_integrals_in_map mo_integrals_cache
integer :: ii, ii0
integer*8 :: ii_8, ii0_8
real(integral_kind) :: tmp
integer(key_kind) :: i1, idx
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 = ior(ii0, k-mo_integrals_cache_min)
@ -185,7 +185,7 @@ subroutine get_mo_bielec_integrals(j,k,l,sze,out_val,map)
enddo
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
implicit none
BEGIN_DOC
@ -201,7 +201,7 @@ subroutine get_mo_bielec_integrals_ij(k,l,sze,out_array,map)
integer ,allocatable :: pairs(:,:), iorder(:)
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), &
tmp_val(sze*sze))
@ -211,7 +211,7 @@ subroutine get_mo_bielec_integrals_ij(k,l,sze,out_array,map)
do i=1,sze
kk += 1
!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(2,kk) = j
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)
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
implicit none
BEGIN_DOC
@ -255,7 +255,7 @@ subroutine get_mo_bielec_integrals_i1j1(k,l,sze,out_array,map)
integer ,allocatable :: pairs(:,:), iorder(:)
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), &
tmp_val(sze*sze))
@ -265,7 +265,7 @@ subroutine get_mo_bielec_integrals_i1j1(k,l,sze,out_array,map)
do i=1,sze
kk += 1
!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(2,kk) = j
iorder(kk) = kk
@ -294,7 +294,7 @@ subroutine get_mo_bielec_integrals_i1j1(k,l,sze,out_array,map)
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
implicit none
BEGIN_DOC
@ -308,12 +308,12 @@ subroutine get_mo_bielec_integrals_coulomb_ii(k,l,sze,out_val,map)
integer :: i
integer(key_kind) :: hash(sze)
real(integral_kind) :: tmp_val(sze)
PROVIDE mo_bielec_integrals_in_map
PROVIDE mo_two_e_integrals_in_map
integer :: kk
do i=1,sze
!DIR$ FORCEINLINE
call bielec_integrals_index(k,i,l,i,hash(i))
call two_e_integrals_index(k,i,l,i,hash(i))
enddo
if (integral_kind == 8) then
@ -327,7 +327,7 @@ subroutine get_mo_bielec_integrals_coulomb_ii(k,l,sze,out_val,map)
endif
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
implicit none
BEGIN_DOC
@ -341,12 +341,12 @@ subroutine get_mo_bielec_integrals_exch_ii(k,l,sze,out_val,map)
integer :: i
integer(key_kind) :: hash(sze)
real(integral_kind) :: tmp_val(sze)
PROVIDE mo_bielec_integrals_in_map
PROVIDE mo_two_e_integrals_in_map
integer :: kk
do i=1,sze
!DIR$ FORCEINLINE
call bielec_integrals_index(k,i,i,l,hash(i))
call two_e_integrals_index(k,i,i,l,hash(i))
enddo
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
implicit none
BEGIN_DOC
@ -19,14 +19,14 @@ subroutine mo_bielec_integrals_index(i,j,k,l,i1)
end
BEGIN_PROVIDER [ logical, mo_bielec_integrals_in_map ]
BEGIN_PROVIDER [ logical, mo_two_e_integrals_in_map ]
use map_module
implicit none
integer(bit_kind) :: mask_ijkl(N_int,4)
integer(bit_kind) :: mask_ijk(N_int,3)
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
! 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
PROVIDE mo_class
mo_bielec_integrals_in_map = .True.
mo_two_e_integrals_in_map = .True.
if (read_mo_two_e_integrals) then
print*,'Reading the MO integrals'
call map_load_from_disk(trim(ezfio_filename)//'/work/mo_ints',mo_integrals_map)
print*, 'MO integrals provided'
return
else
PROVIDE ao_bielec_integrals_in_map
PROVIDE ao_two_e_integrals_in_map
endif
print *, ''
@ -174,12 +174,12 @@ subroutine add_integrals_to_map(mask_ijkl)
integer, allocatable :: list_ijkl(:,:)
integer :: n_i, n_j, n_k, n_l
integer, allocatable :: bielec_tmp_0_idx(:)
real(integral_kind), allocatable :: bielec_tmp_0(:,:)
double precision, allocatable :: bielec_tmp_1(:)
double precision, allocatable :: bielec_tmp_2(:,:)
double precision, allocatable :: bielec_tmp_3(:,:,:)
!DIR$ ATTRIBUTES ALIGN : 64 :: bielec_tmp_1, bielec_tmp_2, bielec_tmp_3
integer, allocatable :: two_e_tmp_0_idx(:)
real(integral_kind), allocatable :: two_e_tmp_0(:,:)
double precision, allocatable :: two_e_tmp_1(:)
double precision, allocatable :: two_e_tmp_2(:,:)
double precision, allocatable :: two_e_tmp_3(:,:,:)
!DIR$ ATTRIBUTES ALIGN : 64 :: two_e_tmp_1, two_e_tmp_2, two_e_tmp_3
integer :: n_integrals
integer :: size_buffer
@ -191,7 +191,7 @@ subroutine add_integrals_to_map(mask_ijkl)
integer :: i2,i3,i4
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
!-------------------------------
@ -257,7 +257,7 @@ subroutine add_integrals_to_map(mask_ijkl)
accu_bis = 0.d0
!$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 wall_0,thread_num,accu_bis) &
!$OMP DEFAULT(NONE) &
@ -268,11 +268,11 @@ subroutine add_integrals_to_map(mask_ijkl)
!$OMP mo_coef,mo_integrals_threshold,mo_integrals_map)
n_integrals = 0
wall_0 = wall_1
allocate(bielec_tmp_3(mo_num, n_j, n_k), &
bielec_tmp_1(mo_num), &
bielec_tmp_0(ao_num,ao_num), &
bielec_tmp_0_idx(ao_num), &
bielec_tmp_2(mo_num, n_j), &
allocate(two_e_tmp_3(mo_num, n_j, n_k), &
two_e_tmp_1(mo_num), &
two_e_tmp_0(ao_num,ao_num), &
two_e_tmp_0_idx(ao_num), &
two_e_tmp_2(mo_num, n_j), &
buffer_i(size_buffer), &
buffer_value(size_buffer) )
@ -280,56 +280,56 @@ subroutine add_integrals_to_map(mask_ijkl)
!$ thread_num = omp_get_thread_num()
!$OMP DO SCHEDULE(guided)
do l1 = 1,ao_num
bielec_tmp_3 = 0.d0
two_e_tmp_3 = 0.d0
do k1 = 1,ao_num
bielec_tmp_2 = 0.d0
two_e_tmp_2 = 0.d0
do j1 = 1,ao_num
call get_ao_bielec_integrals(j1,k1,l1,ao_num,bielec_tmp_0(1,j1))
! call compute_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_two_e_integrals(j1,k1,l1,ao_num,two_e_tmp_0(1,j1))
enddo
do j1 = 1,ao_num
kmax = 0
do i1 = 1,ao_num
c = bielec_tmp_0(i1,j1)
c = two_e_tmp_0(i1,j1)
if (c == 0.d0) then
cycle
endif
kmax += 1
bielec_tmp_0(kmax,j1) = c
bielec_tmp_0_idx(kmax) = i1
two_e_tmp_0(kmax,j1) = c
two_e_tmp_0_idx(kmax) = i1
enddo
if (kmax==0) then
cycle
endif
bielec_tmp_1 = 0.d0
two_e_tmp_1 = 0.d0
ii1=1
do ii1 = 1,kmax-4,4
i1 = bielec_tmp_0_idx(ii1)
i2 = bielec_tmp_0_idx(ii1+1)
i3 = bielec_tmp_0_idx(ii1+2)
i4 = bielec_tmp_0_idx(ii1+3)
i1 = two_e_tmp_0_idx(ii1)
i2 = two_e_tmp_0_idx(ii1+1)
i3 = two_e_tmp_0_idx(ii1+2)
i4 = two_e_tmp_0_idx(ii1+3)
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) + &
mo_coef_transp(i,i2) * bielec_tmp_0(ii1+1,j1) + &
mo_coef_transp(i,i3) * bielec_tmp_0(ii1+2,j1) + &
mo_coef_transp(i,i4) * bielec_tmp_0(ii1+3,j1)
two_e_tmp_1(i) = two_e_tmp_1(i) + &
mo_coef_transp(i,i1) * two_e_tmp_0(ii1,j1) + &
mo_coef_transp(i,i2) * two_e_tmp_0(ii1+1,j1) + &
mo_coef_transp(i,i3) * two_e_tmp_0(ii1+2,j1) + &
mo_coef_transp(i,i4) * two_e_tmp_0(ii1+3,j1)
enddo ! i
enddo ! ii1
i2 = ii1
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)
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 ! ii1
c = 0.d0
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
enddo
if ( c < mo_integrals_threshold ) then
@ -343,11 +343,11 @@ subroutine add_integrals_to_map(mask_ijkl)
cycle
endif
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 ! j
enddo !j1
if ( maxval(abs(bielec_tmp_2)) < mo_integrals_threshold ) then
if ( maxval(abs(two_e_tmp_2)) < mo_integrals_threshold ) then
cycle
endif
@ -362,7 +362,7 @@ subroutine add_integrals_to_map(mask_ijkl)
do j0 = 1, n_j
j = list_ijkl(j0,2)
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 !j
@ -392,13 +392,13 @@ subroutine add_integrals_to_map(mask_ijkl)
else
exit
endif
bielec_tmp_1 = 0.d0
two_e_tmp_1 = 0.d0
do i0 = 1, n_i
i = list_ijkl(i0,1)
if (i>k) then
exit
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
enddo
@ -407,13 +407,13 @@ subroutine add_integrals_to_map(mask_ijkl)
if(i> min(k,j1-i1+list_ijkl(1,1)-1))then
exit
endif
if (abs(bielec_tmp_1(i)) < mo_integrals_threshold) then
if (abs(two_e_tmp_1(i)) < mo_integrals_threshold) then
cycle
endif
n_integrals += 1
buffer_value(n_integrals) = bielec_tmp_1(i)
buffer_value(n_integrals) = two_e_tmp_1(i)
!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
call insert_into_mo_integrals_map(n_integrals,buffer_i,buffer_value,&
real(mo_integrals_threshold,integral_kind))
@ -434,7 +434,7 @@ subroutine add_integrals_to_map(mask_ijkl)
endif
enddo
!$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
@ -478,12 +478,12 @@ subroutine add_integrals_to_map_three_indices(mask_ijk)
integer, allocatable :: list_ijkl(:,:)
integer :: n_i, n_j, n_k
integer :: m
integer, allocatable :: bielec_tmp_0_idx(:)
real(integral_kind), allocatable :: bielec_tmp_0(:,:)
double precision, allocatable :: bielec_tmp_1(:)
double precision, allocatable :: bielec_tmp_2(:,:)
double precision, allocatable :: bielec_tmp_3(:,:,:)
!DIR$ ATTRIBUTES ALIGN : 64 :: bielec_tmp_1, bielec_tmp_2, bielec_tmp_3
integer, allocatable :: two_e_tmp_0_idx(:)
real(integral_kind), allocatable :: two_e_tmp_0(:,:)
double precision, allocatable :: two_e_tmp_1(:)
double precision, allocatable :: two_e_tmp_2(:,:)
double precision, allocatable :: two_e_tmp_3(:,:,:)
!DIR$ ATTRIBUTES ALIGN : 64 :: two_e_tmp_1, two_e_tmp_2, two_e_tmp_3
integer :: n_integrals
integer :: size_buffer
@ -495,7 +495,7 @@ subroutine add_integrals_to_map_three_indices(mask_ijk)
integer :: i2,i3,i4
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
!-------------------------------
@ -548,7 +548,7 @@ subroutine add_integrals_to_map_three_indices(mask_ijk)
double precision :: accu_bis
accu_bis = 0.d0
!$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 wall_0,thread_num,accu_bis) &
!$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)
n_integrals = 0
wall_0 = wall_1
allocate(bielec_tmp_3(mo_num, n_j, n_k), &
bielec_tmp_1(mo_num), &
bielec_tmp_0(ao_num,ao_num), &
bielec_tmp_0_idx(ao_num), &
bielec_tmp_2(mo_num, n_j), &
allocate(two_e_tmp_3(mo_num, n_j, n_k), &
two_e_tmp_1(mo_num), &
two_e_tmp_0(ao_num,ao_num), &
two_e_tmp_0_idx(ao_num), &
two_e_tmp_2(mo_num, n_j), &
buffer_i(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()
!$OMP DO SCHEDULE(guided)
do l1 = 1,ao_num
bielec_tmp_3 = 0.d0
two_e_tmp_3 = 0.d0
do k1 = 1,ao_num
bielec_tmp_2 = 0.d0
two_e_tmp_2 = 0.d0
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
do j1 = 1,ao_num
kmax = 0
do i1 = 1,ao_num
c = bielec_tmp_0(i1,j1)
c = two_e_tmp_0(i1,j1)
if (c == 0.d0) then
cycle
endif
kmax += 1
bielec_tmp_0(kmax,j1) = c
bielec_tmp_0_idx(kmax) = i1
two_e_tmp_0(kmax,j1) = c
two_e_tmp_0_idx(kmax) = i1
enddo
if (kmax==0) then
cycle
endif
bielec_tmp_1 = 0.d0
two_e_tmp_1 = 0.d0
ii1=1
do ii1 = 1,kmax-4,4
i1 = bielec_tmp_0_idx(ii1)
i2 = bielec_tmp_0_idx(ii1+1)
i3 = bielec_tmp_0_idx(ii1+2)
i4 = bielec_tmp_0_idx(ii1+3)
i1 = two_e_tmp_0_idx(ii1)
i2 = two_e_tmp_0_idx(ii1+1)
i3 = two_e_tmp_0_idx(ii1+2)
i4 = two_e_tmp_0_idx(ii1+3)
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) + &
mo_coef_transp(i,i2) * bielec_tmp_0(ii1+1,j1) + &
mo_coef_transp(i,i3) * bielec_tmp_0(ii1+2,j1) + &
mo_coef_transp(i,i4) * bielec_tmp_0(ii1+3,j1)
two_e_tmp_1(i) = two_e_tmp_1(i) + &
mo_coef_transp(i,i1) * two_e_tmp_0(ii1,j1) + &
mo_coef_transp(i,i2) * two_e_tmp_0(ii1+1,j1) + &
mo_coef_transp(i,i3) * two_e_tmp_0(ii1+2,j1) + &
mo_coef_transp(i,i4) * two_e_tmp_0(ii1+3,j1)
enddo ! i
enddo ! ii1
i2 = ii1
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)
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 ! ii1
c = 0.d0
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
enddo
if ( c < mo_integrals_threshold ) then
@ -633,11 +633,11 @@ subroutine add_integrals_to_map_three_indices(mask_ijk)
cycle
endif
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 ! j
enddo !j1
if ( maxval(abs(bielec_tmp_2)) < mo_integrals_threshold ) then
if ( maxval(abs(two_e_tmp_2)) < mo_integrals_threshold ) then
cycle
endif
@ -652,7 +652,7 @@ subroutine add_integrals_to_map_three_indices(mask_ijk)
do j0 = 1, n_j
j = list_ijkl(j0,2)
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 !j
@ -670,7 +670,7 @@ subroutine add_integrals_to_map_three_indices(mask_ijk)
do k0 = 1, n_k
k = list_ijkl(k0,3)
i1 = shiftr((k*k-k),1)
bielec_tmp_1 = 0.d0
two_e_tmp_1 = 0.d0
j0 = l0
j = list_ijkl(j0,2)
do i0 = 1, n_i
@ -678,7 +678,7 @@ subroutine add_integrals_to_map_three_indices(mask_ijk)
if (i>k) then
exit
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
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)
exit
endif
if (abs(bielec_tmp_1(i)) < mo_integrals_threshold) then
if (abs(two_e_tmp_1(i)) < mo_integrals_threshold) then
cycle
endif
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
buffer_value(n_integrals) = buffer_value(n_integrals) *0.5d0
endif
!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
call insert_into_mo_integrals_map(n_integrals,buffer_i,buffer_value,&
real(mo_integrals_threshold,integral_kind))
@ -714,7 +714,7 @@ subroutine add_integrals_to_map_three_indices(mask_ijk)
do k0 = 1, n_k
k = list_ijkl(k0,3)
i1 = shiftr((k*k-k),1)
bielec_tmp_1 = 0.d0
two_e_tmp_1 = 0.d0
j0 = k0
j = list_ijkl(k0,2)
i0 = l0
@ -722,12 +722,12 @@ subroutine add_integrals_to_map_three_indices(mask_ijk)
if (k==l) then
cycle
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
buffer_value(n_integrals) = bielec_tmp_1(i)
buffer_value(n_integrals) = two_e_tmp_1(i)
!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
call insert_into_mo_integrals_map(n_integrals,buffer_i,buffer_value,&
real(mo_integrals_threshold,integral_kind))
@ -746,7 +746,7 @@ subroutine add_integrals_to_map_three_indices(mask_ijk)
endif
enddo
!$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
@ -789,12 +789,12 @@ subroutine add_integrals_to_map_no_exit_34(mask_ijkl)
integer, allocatable :: list_ijkl(:,:)
integer :: n_i, n_j, n_k, n_l
integer, allocatable :: bielec_tmp_0_idx(:)
real(integral_kind), allocatable :: bielec_tmp_0(:,:)
double precision, allocatable :: bielec_tmp_1(:)
double precision, allocatable :: bielec_tmp_2(:,:)
double precision, allocatable :: bielec_tmp_3(:,:,:)
!DIR$ ATTRIBUTES ALIGN : 64 :: bielec_tmp_1, bielec_tmp_2, bielec_tmp_3
integer, allocatable :: two_e_tmp_0_idx(:)
real(integral_kind), allocatable :: two_e_tmp_0(:,:)
double precision, allocatable :: two_e_tmp_1(:)
double precision, allocatable :: two_e_tmp_2(:,:)
double precision, allocatable :: two_e_tmp_3(:,:,:)
!DIR$ ATTRIBUTES ALIGN : 64 :: two_e_tmp_1, two_e_tmp_2, two_e_tmp_3
integer :: n_integrals
integer :: size_buffer
@ -806,7 +806,7 @@ subroutine add_integrals_to_map_no_exit_34(mask_ijkl)
integer :: i2,i3,i4
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
!-------------------------------
@ -826,7 +826,7 @@ subroutine add_integrals_to_map_no_exit_34(mask_ijkl)
call cpu_time(cpu_1)
!$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 wall_0,thread_num) &
!$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)
n_integrals = 0
wall_0 = wall_1
allocate(bielec_tmp_3(mo_num, n_j, n_k), &
bielec_tmp_1(mo_num), &
bielec_tmp_0(ao_num,ao_num), &
bielec_tmp_0_idx(ao_num), &
bielec_tmp_2(mo_num, n_j), &
allocate(two_e_tmp_3(mo_num, n_j, n_k), &
two_e_tmp_1(mo_num), &
two_e_tmp_0(ao_num,ao_num), &
two_e_tmp_0_idx(ao_num), &
two_e_tmp_2(mo_num, n_j), &
buffer_i(size_buffer), &
buffer_value(size_buffer) )
@ -854,56 +854,56 @@ subroutine add_integrals_to_map_no_exit_34(mask_ijkl)
! cycle
! endif
!IRP_ENDIF
bielec_tmp_3 = 0.d0
two_e_tmp_3 = 0.d0
do k1 = 1,ao_num
bielec_tmp_2 = 0.d0
two_e_tmp_2 = 0.d0
do j1 = 1,ao_num
call get_ao_bielec_integrals(j1,k1,l1,ao_num,bielec_tmp_0(1,j1))
! call compute_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_two_e_integrals(j1,k1,l1,ao_num,two_e_tmp_0(1,j1))
enddo
do j1 = 1,ao_num
kmax = 0
do i1 = 1,ao_num
c = bielec_tmp_0(i1,j1)
c = two_e_tmp_0(i1,j1)
if (c == 0.d0) then
cycle
endif
kmax += 1
bielec_tmp_0(kmax,j1) = c
bielec_tmp_0_idx(kmax) = i1
two_e_tmp_0(kmax,j1) = c
two_e_tmp_0_idx(kmax) = i1
enddo
if (kmax==0) then
cycle
endif
bielec_tmp_1 = 0.d0
two_e_tmp_1 = 0.d0
ii1=1
do ii1 = 1,kmax-4,4
i1 = bielec_tmp_0_idx(ii1)
i2 = bielec_tmp_0_idx(ii1+1)
i3 = bielec_tmp_0_idx(ii1+2)
i4 = bielec_tmp_0_idx(ii1+3)
i1 = two_e_tmp_0_idx(ii1)
i2 = two_e_tmp_0_idx(ii1+1)
i3 = two_e_tmp_0_idx(ii1+2)
i4 = two_e_tmp_0_idx(ii1+3)
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) + &
mo_coef_transp(i,i2) * bielec_tmp_0(ii1+1,j1) + &
mo_coef_transp(i,i3) * bielec_tmp_0(ii1+2,j1) + &
mo_coef_transp(i,i4) * bielec_tmp_0(ii1+3,j1)
two_e_tmp_1(i) = two_e_tmp_1(i) + &
mo_coef_transp(i,i1) * two_e_tmp_0(ii1,j1) + &
mo_coef_transp(i,i2) * two_e_tmp_0(ii1+1,j1) + &
mo_coef_transp(i,i3) * two_e_tmp_0(ii1+2,j1) + &
mo_coef_transp(i,i4) * two_e_tmp_0(ii1+3,j1)
enddo ! i
enddo ! ii1
i2 = ii1
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)
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 ! ii1
c = 0.d0
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
enddo
if ( c < mo_integrals_threshold ) then
@ -917,11 +917,11 @@ subroutine add_integrals_to_map_no_exit_34(mask_ijkl)
cycle
endif
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 ! j
enddo !j1
if ( maxval(abs(bielec_tmp_2)) < mo_integrals_threshold ) then
if ( maxval(abs(two_e_tmp_2)) < mo_integrals_threshold ) then
cycle
endif
@ -936,7 +936,7 @@ subroutine add_integrals_to_map_no_exit_34(mask_ijkl)
do j0 = 1, n_j
j = list_ijkl(j0,2)
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 !j
@ -961,13 +961,13 @@ subroutine add_integrals_to_map_no_exit_34(mask_ijkl)
do k0 = 1, n_k
k = list_ijkl(k0,3)
i1 = shiftr((k*k-k),1)
bielec_tmp_1 = 0.d0
two_e_tmp_1 = 0.d0
do i0 = 1, n_i
i = list_ijkl(i0,1)
if (i>k) then
exit
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
do i0 = 1, n_i
@ -976,13 +976,13 @@ subroutine add_integrals_to_map_no_exit_34(mask_ijkl)
exit
endif
if (abs(bielec_tmp_1(i)) < mo_integrals_threshold) then
if (abs(two_e_tmp_1(i)) < mo_integrals_threshold) then
cycle
endif
n_integrals += 1
buffer_value(n_integrals) = bielec_tmp_1(i)
buffer_value(n_integrals) = two_e_tmp_1(i)
!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
call insert_into_mo_integrals_map(n_integrals,buffer_i,buffer_value,&
real(mo_integrals_threshold,integral_kind))
@ -1003,7 +1003,7 @@ subroutine add_integrals_to_map_no_exit_34(mask_ijkl)
endif
enddo
!$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,&
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_bielec_integral_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_integral_jj_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_two_e_integrals_jj_anti_from_ao, (mo_num,mo_num) ]
implicit none
BEGIN_DOC
! 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
END_DOC
integer :: i,j,p,q,r,s
@ -1054,11 +1054,11 @@ end
double precision, allocatable :: iqrs(:,:), iqsr(:,:), iqis(:), iqri(:)
if (.not.do_direct_integrals) then
PROVIDE ao_bielec_integrals_in_map mo_coef
PROVIDE ao_two_e_integrals_in_map mo_coef
endif
mo_bielec_integral_jj_from_ao = 0.d0
mo_bielec_integral_jj_exchange_from_ao = 0.d0
mo_two_e_integral_jj_from_ao = 0.d0
mo_two_e_integrals_jj_exchange_from_ao = 0.d0
!DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: iqrs, iqsr
@ -1068,7 +1068,7 @@ end
!$OMP iqrs, iqsr,iqri,iqis) &
!$OMP SHARED(mo_num,mo_coef_transp,ao_num, &
!$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), &
iqrs(mo_num,ao_num), iqis(mo_num), iqri(mo_num), &
@ -1086,9 +1086,9 @@ end
enddo
if (do_direct_integrals) then
double precision :: ao_bielec_integral
double precision :: ao_two_e_integral
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
integral = int_value(p)
if (abs(integral) > ao_integrals_threshold) then
@ -1097,7 +1097,7 @@ end
enddo
endif
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
integral = int_value(p)
if (abs(integral) > ao_integrals_threshold) then
@ -1111,7 +1111,7 @@ end
else
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
p = int_idx(pp)
integral = int_value(pp)
@ -1121,7 +1121,7 @@ end
enddo
endif
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
p = int_idx(pp)
integral = int_value(pp)
@ -1144,8 +1144,8 @@ end
do i=1,mo_num
do j=1,mo_num
c = mo_coef_transp(j,q)*mo_coef_transp(j,s)
mo_bielec_integral_jj_from_ao(j,i) += c * iqis(i)
mo_bielec_integral_jj_exchange_from_ao(j,i) += c * iqri(i)
mo_two_e_integral_jj_from_ao(j,i) += c * iqis(i)
mo_two_e_integrals_jj_exchange_from_ao(j,i) += c * iqri(i)
enddo
enddo
@ -1155,19 +1155,19 @@ end
deallocate(iqrs,iqsr,int_value,int_idx)
!$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
BEGIN_PROVIDER [ double precision, mo_bielec_integral_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_bielec_integral_vv_anti_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_two_e_integrals_vv_exchange_from_ao, (mo_num,mo_num) ]
&BEGIN_PROVIDER [ double precision, mo_two_e_integrals_vv_anti_from_ao, (mo_num,mo_num) ]
implicit none
BEGIN_DOC
! 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
! 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
END_DOC
@ -1182,11 +1182,11 @@ END_PROVIDER
double precision, allocatable :: iqrs(:,:), iqsr(:,:), iqis(:), iqri(:)
if (.not.do_direct_integrals) then
PROVIDE ao_bielec_integrals_in_map mo_coef
PROVIDE ao_two_e_integrals_in_map mo_coef
endif
mo_bielec_integral_vv_from_ao = 0.d0
mo_bielec_integral_vv_exchange_from_ao = 0.d0
mo_two_e_integrals_vv_from_ao = 0.d0
mo_two_e_integrals_vv_exchange_from_ao = 0.d0
!DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: iqrs, iqsr
@ -1196,7 +1196,7 @@ END_PROVIDER
!$OMP iqrs, iqsr,iqri,iqis) &
!$OMP SHARED(n_virt_orb,mo_num,list_virt,mo_coef_transp,ao_num, &
!$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), &
iqrs(mo_num,ao_num), iqis(mo_num), iqri(mo_num),&
@ -1215,9 +1215,9 @@ END_PROVIDER
enddo
if (do_direct_integrals) then
double precision :: ao_bielec_integral
double precision :: ao_two_e_integral
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
integral = int_value(p)
if (abs(integral) > ao_integrals_threshold) then
@ -1227,7 +1227,7 @@ END_PROVIDER
enddo
endif
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
integral = int_value(p)
if (abs(integral) > ao_integrals_threshold) then
@ -1242,7 +1242,7 @@ END_PROVIDER
else
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
p = int_idx(pp)
integral = int_value(pp)
@ -1253,7 +1253,7 @@ END_PROVIDER
enddo
endif
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
p = int_idx(pp)
integral = int_value(pp)
@ -1280,8 +1280,8 @@ END_PROVIDER
do j0=1,n_virt_orb
j = list_virt(j0)
c = mo_coef_transp(j,q)*mo_coef_transp(j,s)
mo_bielec_integral_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_from_ao(j,i) += c * iqis(i)
mo_two_e_integrals_vv_exchange_from_ao(j,i) += c * iqri(i)
enddo
enddo
@ -1291,11 +1291,11 @@ END_PROVIDER
deallocate(iqrs,iqsr,int_value,int_idx)
!$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*, '**********'
! do i0 =1, n_virt_orb
! i = list_virt(i0)
! print*, mo_bielec_integral_vv_from_ao(i,i)
! print*, mo_two_e_integrals_vv_from_ao(i,i)
! enddo
! print*, '**********'
@ -1303,28 +1303,28 @@ END_PROVIDER
END_PROVIDER
BEGIN_PROVIDER [ double precision, mo_bielec_integral_jj, (mo_num,mo_num) ]
&BEGIN_PROVIDER [ double precision, mo_bielec_integral_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, (mo_num,mo_num) ]
&BEGIN_PROVIDER [ double precision, mo_two_e_integrals_jj_exchange, (mo_num,mo_num) ]
&BEGIN_PROVIDER [ double precision, mo_two_e_integrals_jj_anti, (mo_num,mo_num) ]
implicit none
BEGIN_DOC
! 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
END_DOC
integer :: i,j
double precision :: get_mo_bielec_integral
double precision :: get_two_e_integral
PROVIDE mo_bielec_integrals_in_map
mo_bielec_integral_jj = 0.d0
mo_bielec_integral_jj_exchange = 0.d0
PROVIDE mo_two_e_integrals_in_map
mo_two_e_integrals_jj = 0.d0
mo_two_e_integrals_jj_exchange = 0.d0
do j=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_bielec_integral_jj_exchange(i,j) = get_mo_bielec_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(i,j) = get_two_e_integral(i,j,i,j,mo_integrals_map)
mo_two_e_integrals_jj_exchange(i,j) = get_two_e_integral(i,j,j,i,mo_integrals_map)
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
@ -1337,7 +1337,7 @@ subroutine clear_mo_map
! Frees the memory of the MO map
END_DOC
call map_deinit(mo_integrals_map)
FREE mo_integrals_map mo_bielec_integral_jj mo_bielec_integral_jj_anti
FREE mo_bielec_integral_jj_exchange mo_bielec_integrals_in_map
FREE mo_integrals_map mo_two_e_integrals_jj mo_two_e_integrals_jj_anti
FREE mo_two_e_integrals_jj_exchange mo_two_e_integrals_in_map
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
integer :: 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)
e_2_pert = -dabs(mo_mono_elec_integrals(h1,p1)+1.d0)
c_pert = phase * mo_one_e_integrals(h1,p1)
e_2_pert = -dabs(mo_one_e_integrals(h1,p1)+1.d0)
end

View File

@ -17,7 +17,7 @@ subroutine huckel_guess
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))
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
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
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 psi_det psi_coef threshold_generators state_average_weight
PROVIDE N_det_selectors pt2_stoch_istate N_det

View File

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

View File

@ -26,9 +26,9 @@ program fcidump
integer(key_kind), allocatable :: keys(:)
double precision, allocatable :: values(:)
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
l1 = list_act(l)
@ -39,7 +39,7 @@ program fcidump
do i=k,n_act_orb
i1 = list_act(i)
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
write(i_unit_output,*) integral, i,k,j,l
endif
@ -53,7 +53,7 @@ program fcidump
j1 = list_act(j)
do i=j,n_act_orb
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
write(i_unit_output,*) integral, i,j,0,0
endif

View File

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

View File

@ -25,7 +25,7 @@ subroutine routine
integer :: exc(0:2,2,2)
double precision :: phase
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_2,norm_mono_b_2
double precision :: norm_mono_a_pert_2,norm_mono_b_pert_2

View File

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