mirror of
https://github.com/LCPQ/quantum_package
synced 2024-10-19 22:41:48 +02:00
Rename one_e and two_e
This commit is contained in:
parent
ec67a21235
commit
beddd31c60
146
REPLACE
Normal file
146
REPLACE
Normal 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
|
@ -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`
|
||||
|
||||
|
@ -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`
|
||||
|
||||
|
@ -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`
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -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`
|
||||
|
||||
|
@ -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
|
||||
|
@ -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`
|
||||
|
||||
|
@ -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}`
|
||||
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
@ -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`
|
||||
|
||||
|
@ -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`
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
||||
|
@ -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`
|
||||
|
@ -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:
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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:
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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')
|
||||
|
@ -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
|
||||
|
@ -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:
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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`.
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
||||
|
@ -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(:,:)
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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), &
|
||||
|
@ -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), &
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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 '
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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`.
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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:
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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')
|
||||
|
@ -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:
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user