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

Working on doc

This commit is contained in:
Anthony Scemama 2018-11-26 13:45:32 +01:00
parent e03930e8b6
commit 2929828ae3
69 changed files with 20153 additions and 1306 deletions

1
data/.gitignore vendored
View File

@ -1,2 +1,3 @@
executables
ezfio_defaults
list_element.txt

44
data/module_gitignore Normal file
View File

@ -0,0 +1,44 @@
IRPF90_temp/
IRPF90_man/
irpf90.make
irpf90_entities
tags
AO_Basis
AO_one_e_integrals
Bitmask
CIS
CISD
Davidson
DavidsonDressed
DavidsonUndressed
Determinants
Dressing
dummy
Electrons
Ezfio_files
FCI
FourIdx
Generators_CAS
Generators_full
gitignore
Hartree_Fock
Integrals_Bielec
Iterations
MO_Basis
MOGuess
MO_one_e_integrals
MPI
MRPT_Utils
Nuclei
Perturbation
Pseudo
Psiref_CAS
Psiref_Utils
Selectors_CASSD
Selectors_full
Selectors_Utils
SingleRefMethod
Slave
Tools
Utils
ZMQ

2
docs/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
build

View File

@ -1,4 +1,4 @@
#!/bin/env python2
#!/usr/bin/env python2
from __future__ import print_function
import os
@ -38,9 +38,9 @@ def generate_modules(abs_module, entities):
providers = []
subroutines = []
for k in entities:
for k in sorted(entities.keys()):
e = entities[k]
if e["module"] == module:
if e["module"].lower() == module.lower():
if "/" not in e["file"] and e["file"] != "ezfio_interface.irp.f":
if e["type"] == 's':
subroutines.append(e)
@ -51,13 +51,13 @@ def generate_modules(abs_module, entities):
rst += [ "", "Providers", "---------", "" ]
for p in providers:
rst += [ """
.. option:: %s
.. c:var:: %s
.. code:: text
%s
File: %s
File: :file:`%s`
%s
@ -65,7 +65,31 @@ def generate_modules(abs_module, entities):
""" % ( p["name"],
"\n ".join(p["decl"]),
p["file"],
" ".join(p["doc"]).replace(".br","\n"),
" ".join(p["doc"]).replace("\n ","\n "),
) ]
if subroutines:
rst += [ "", "Subroutines / functions", "-----------------------", "" ]
for p in subroutines:
rst += [ """
.. c:function:: %s
.. code:: text
%s
File: :file:`%s`
%s
""" % ( p["name"],
"\n ".join(p["decl"]),
p["file"],
" ".join(p["doc"]).replace("\n ","\n "),
) ]
@ -114,11 +138,14 @@ def generate_providers(abs_module):
state = 3
continue
if line.startswith(".SH Need"):
break
state = 0
continue
if line.startswith(".SH Instability"):
break
state = 0
continue
if line.startswith(".SH Call"):
break
state = 0
continue
if state == 1:
entity["decl"] += [ line ]
@ -129,17 +156,49 @@ def generate_providers(abs_module):
else:
entity["type"] = 'p'
elif state == 2:
if line.startswith(".br"):
line = "\n"
entity["doc"] += [ line ]
elif state == 3:
if line.startswith(".br"):
continue
entity["file"] = line
entity["file"] = line.split("/")[-1]
try:
entity["module"] = line.split("/")[-2]
except: pass
break
entities [ entity["name"] ] = entity
return entities
def generate_index(entities):
rst_file = os.path.join('programmers_guide','index_providers.rst')
with open(rst_file,'w') as f:
rst = [ "Index of Providers",
"------------------",
"" ]
for e in sorted(entities.keys()):
e = entities[e]
if e["type"] == 'p':
rst.append("* :c:data:`%s`" % (e["name"]))
rst += [ "",
"Index of Subroutines/Functions",
"------------------------------",
"" ]
for e in sorted(entities.keys()):
e = entities[e]
if e["type"] == 's':
rst.append("* :c:func:`%s`" % (e["name"]))
f.write("\n".join(rst))
def main():
@ -159,8 +218,14 @@ def main():
if read_entities:
for k in read_entities:
entities[k] = read_entities[k]
for abs_module in os.listdir(SRC):
abs_module = os.path.join(SRC,abs_module)
if os.path.exists( os.path.join(abs_module, "README.rst") ):
generate_modules(abs_module,entities)
generate_index(entities)
if __name__ == '__main__':
main()

View File

@ -89,3 +89,460 @@ EZFIO parameters
If |true|, use |AOs| in Cartesian coordinates (6d,10f,...)
Default: false
Providers
---------
.. c:var:: ao_coef_normalization_factor
.. code:: text
double precision, allocatable :: ao_coef_normalized (ao_num,ao_prim_num_max)
double precision, allocatable :: ao_coef_normalization_factor (ao_num)
File: :file:`aos.irp.f`
Coefficients including the AO normalization
.. c:var:: ao_coef_normalization_libint_factor
.. code:: text
double precision, allocatable :: ao_coef_normalization_libint_factor (ao_num)
File: :file:`aos.irp.f`
Coefficients including the AO normalization
.. c:var:: ao_coef_normalized
.. code:: text
double precision, allocatable :: ao_coef_normalized (ao_num,ao_prim_num_max)
double precision, allocatable :: ao_coef_normalization_factor (ao_num)
File: :file:`aos.irp.f`
Coefficients including the AO normalization
.. c:var:: ao_coef_normalized_ordered
.. code:: text
double precision, allocatable :: ao_coef_normalized_ordered (ao_num,ao_prim_num_max)
double precision, allocatable :: ao_expo_ordered (ao_num,ao_prim_num_max)
File: :file:`aos.irp.f`
Sorted primitives to accelerate 4 index MO transformation
.. c:var:: ao_coef_normalized_ordered_transp
.. code:: text
double precision, allocatable :: ao_coef_normalized_ordered_transp (ao_prim_num_max,ao_num)
File: :file:`aos.irp.f`
Transposed ao_coef_normalized_ordered
.. c:var:: ao_expo_ordered
.. code:: text
double precision, allocatable :: ao_coef_normalized_ordered (ao_num,ao_prim_num_max)
double precision, allocatable :: ao_expo_ordered (ao_num,ao_prim_num_max)
File: :file:`aos.irp.f`
Sorted primitives to accelerate 4 index MO transformation
.. c:var:: ao_expo_ordered_transp
.. code:: text
double precision, allocatable :: ao_expo_ordered_transp (ao_prim_num_max,ao_num)
File: :file:`aos.irp.f`
Transposed ao_expo_ordered
.. c:var:: ao_l
.. code:: text
integer, allocatable :: ao_l (ao_num)
integer :: ao_l_max
character*(128), allocatable :: ao_l_char (ao_num)
File: :file:`aos.irp.f`
ao_l = l value of the AO: a+b+c in x^a y^b z^c
.. c:var:: ao_l_char
.. code:: text
integer, allocatable :: ao_l (ao_num)
integer :: ao_l_max
character*(128), allocatable :: ao_l_char (ao_num)
File: :file:`aos.irp.f`
ao_l = l value of the AO: a+b+c in x^a y^b z^c
.. c:var:: ao_l_char_space
.. code:: text
character*(4), allocatable :: ao_l_char_space (ao_num)
File: :file:`aos.irp.f`
.. c:var:: ao_l_max
.. code:: text
integer, allocatable :: ao_l (ao_num)
integer :: ao_l_max
character*(128), allocatable :: ao_l_char (ao_num)
File: :file:`aos.irp.f`
ao_l = l value of the AO: a+b+c in x^a y^b z^c
.. c:var:: ao_prim_num_max
.. code:: text
integer :: ao_prim_num_max
File: :file:`aos.irp.f`
max number of primitives
.. c:var:: cart_to_sphe_0
.. code:: text
double precision, allocatable :: cart_to_sphe_0 (1,1)
File: :file:`spherical_to_cartesian.irp.f`
Spherical -> Cartesian Transformation matrix for l=0
.. c:var:: cart_to_sphe_1
.. code:: text
double precision, allocatable :: cart_to_sphe_1 (3,3)
File: :file:`spherical_to_cartesian.irp.f`
Spherical -> Cartesian Transformation matrix for l=1
.. c:var:: cart_to_sphe_2
.. code:: text
double precision, allocatable :: cart_to_sphe_2 (6,5)
File: :file:`spherical_to_cartesian.irp.f`
Spherical -> Cartesian Transformation matrix for l=2
.. c:var:: cart_to_sphe_3
.. code:: text
double precision, allocatable :: cart_to_sphe_3 (10,7)
File: :file:`spherical_to_cartesian.irp.f`
Spherical -> Cartesian Transformation matrix for l=3
.. c:var:: cart_to_sphe_4
.. code:: text
double precision, allocatable :: cart_to_sphe_4 (15,9)
File: :file:`spherical_to_cartesian.irp.f`
Spherical -> Cartesian Transformation matrix for l=4
.. c:var:: cart_to_sphe_5
.. code:: text
double precision, allocatable :: cart_to_sphe_5 (21,11)
File: :file:`spherical_to_cartesian.irp.f`
Spherical -> Cartesian Transformation matrix for l=5
.. c:var:: cart_to_sphe_6
.. code:: text
double precision, allocatable :: cart_to_sphe_6 (28,13)
File: :file:`spherical_to_cartesian.irp.f`
Spherical -> Cartesian Transformation matrix for l=6
.. c:var:: cart_to_sphe_7
.. code:: text
double precision, allocatable :: cart_to_sphe_7 (36,15)
File: :file:`spherical_to_cartesian.irp.f`
Spherical -> Cartesian Transformation matrix for l=7
.. c:var:: cart_to_sphe_8
.. code:: text
double precision, allocatable :: cart_to_sphe_8 (45,17)
File: :file:`spherical_to_cartesian.irp.f`
Spherical -> Cartesian Transformation matrix for l=8
.. c:var:: cart_to_sphe_9
.. code:: text
double precision, allocatable :: cart_to_sphe_9 (55,19)
File: :file:`spherical_to_cartesian.irp.f`
Spherical -> Cartesian Transformation matrix for l=9
.. c:var:: l_to_charater
.. code:: text
character*(128), allocatable :: l_to_charater (0:7)
File: :file:`aos.irp.f`
character corresponding to the "L" value of an AO orbital
.. c:var:: n_aos_max
.. code:: text
integer, allocatable :: nucl_n_aos (nucl_num)
integer :: n_aos_max
File: :file:`aos.irp.f`
Number of AOs per atom
.. c:var:: n_pt_max_i_x
.. code:: text
integer :: n_pt_max_integrals
integer :: n_pt_max_i_x
File: :file:`dimensions_integrals.irp.f`
.. c:var:: n_pt_max_integrals
.. code:: text
integer :: n_pt_max_integrals
integer :: n_pt_max_i_x
File: :file:`dimensions_integrals.irp.f`
.. c:var:: nucl_aos
.. code:: text
integer, allocatable :: nucl_aos (nucl_num,N_AOs_max)
File: :file:`aos.irp.f`
List of AOs attached on each atom
.. c:var:: nucl_list_shell_aos
.. code:: text
integer, allocatable :: nucl_list_shell_aos (nucl_num,N_AOs_max)
integer, allocatable :: nucl_num_shell_aos (nucl_num)
File: :file:`aos.irp.f`
Index of the shell type Aos and of the corresponding Aos Per convention, for P,D,F and G AOs, we take the index of the AO with the the corresponding power in the "X" axis
.. c:var:: nucl_n_aos
.. code:: text
integer, allocatable :: nucl_n_aos (nucl_num)
integer :: n_aos_max
File: :file:`aos.irp.f`
Number of AOs per atom
.. c:var:: nucl_num_shell_aos
.. code:: text
integer, allocatable :: nucl_list_shell_aos (nucl_num,N_AOs_max)
integer, allocatable :: nucl_num_shell_aos (nucl_num)
File: :file:`aos.irp.f`
Index of the shell type Aos and of the corresponding Aos Per convention, for P,D,F and G AOs, we take the index of the AO with the the corresponding power in the "X" axis
Subroutines / functions
-----------------------
.. c:function:: ao_power_index
.. code:: text
integer function ao_power_index(nx,ny,nz)
File: :file:`aos.irp.f`
Unique index given to a triplet of powers:
1/2 (l-n_x)*(l-n_x+1) + n_z + 1
.. c:function:: ao_value
.. code:: text
double precision function ao_value(i,r)
File: :file:`aos_value.irp.f`
return the value of the ith ao at point r
.. c:function:: give_all_aos_at_r
.. code:: text
subroutine give_all_aos_at_r(r,aos_array)
File: :file:`aos_value.irp.f`
gives the values of aos at a given point r

View File

@ -41,3 +41,880 @@ EZFIO parameters
Read/Write |AO| one-electron integrals from/to disk [ Write | Read | None ]
Default: None
Providers
---------
.. c:var:: ao_cart_to_sphe_coef
.. code:: text
double precision, allocatable :: ao_cart_to_sphe_coef (ao_num,ao_num)
integer :: ao_cart_to_sphe_num
File: :file:`ao_ortho_canonical.irp.f`
ao_cart_to_sphe coefficients of the current basis set
.. c:var:: ao_cart_to_sphe_inv
.. code:: text
double precision, allocatable :: ao_cart_to_sphe_inv (ao_cart_to_sphe_num,ao_num)
File: :file:`ao_ortho_canonical.irp.f`
AO_cart_to_sphe_coef^(-1)
.. c:var:: ao_cart_to_sphe_num
.. code:: text
double precision, allocatable :: ao_cart_to_sphe_coef (ao_num,ao_num)
integer :: ao_cart_to_sphe_num
File: :file:`ao_ortho_canonical.irp.f`
ao_cart_to_sphe coefficients of the current basis set
.. c:var:: ao_cart_to_sphe_overlap
.. code:: text
double precision, allocatable :: ao_cart_to_sphe_overlap (ao_cart_to_sphe_num,ao_cart_to_sphe_num)
File: :file:`ao_ortho_canonical.irp.f`
AO overlap matrix in the spherical basis set
.. c:var:: ao_deriv2_x
.. code:: text
double precision, allocatable :: ao_deriv2_x (ao_num,ao_num)
double precision, allocatable :: ao_deriv2_y (ao_num,ao_num)
double precision, allocatable :: ao_deriv2_z (ao_num,ao_num)
File: :file:`kin_ao_ints.irp.f`
Second derivatives matrix elements in the |AO| basis.
math:`{\tt ao_deriv2_x} = \langle \chi_i(x,y,z) | \frac{\partial^2}{\partial x^2} |\chi_j (x,y,z) \rangle`
.. c:var:: ao_deriv2_y
.. code:: text
double precision, allocatable :: ao_deriv2_x (ao_num,ao_num)
double precision, allocatable :: ao_deriv2_y (ao_num,ao_num)
double precision, allocatable :: ao_deriv2_z (ao_num,ao_num)
File: :file:`kin_ao_ints.irp.f`
Second derivatives matrix elements in the |AO| basis.
math:`{\tt ao_deriv2_x} = \langle \chi_i(x,y,z) | \frac{\partial^2}{\partial x^2} |\chi_j (x,y,z) \rangle`
.. c:var:: ao_deriv2_z
.. code:: text
double precision, allocatable :: ao_deriv2_x (ao_num,ao_num)
double precision, allocatable :: ao_deriv2_y (ao_num,ao_num)
double precision, allocatable :: ao_deriv2_z (ao_num,ao_num)
File: :file:`kin_ao_ints.irp.f`
Second derivatives matrix elements in the |AO| basis.
math:`{\tt ao_deriv2_x} = \langle \chi_i(x,y,z) | \frac{\partial^2}{\partial x^2} |\chi_j (x,y,z) \rangle`
.. c:var:: ao_deriv_1_x
.. code:: text
double precision, allocatable :: ao_deriv_1_x (ao_num,ao_num)
double precision, allocatable :: ao_deriv_1_y (ao_num,ao_num)
double precision, allocatable :: ao_deriv_1_z (ao_num,ao_num)
File: :file:`spread_dipole_ao.irp.f`
array of the integrals of AO_i * d/dx AO_j array of the integrals of AO_i * d/dy AO_j array of the integrals of AO_i * d/dz AO_j
.. c:var:: ao_deriv_1_y
.. code:: text
double precision, allocatable :: ao_deriv_1_x (ao_num,ao_num)
double precision, allocatable :: ao_deriv_1_y (ao_num,ao_num)
double precision, allocatable :: ao_deriv_1_z (ao_num,ao_num)
File: :file:`spread_dipole_ao.irp.f`
array of the integrals of AO_i * d/dx AO_j array of the integrals of AO_i * d/dy AO_j array of the integrals of AO_i * d/dz AO_j
.. c:var:: ao_deriv_1_z
.. code:: text
double precision, allocatable :: ao_deriv_1_x (ao_num,ao_num)
double precision, allocatable :: ao_deriv_1_y (ao_num,ao_num)
double precision, allocatable :: ao_deriv_1_z (ao_num,ao_num)
File: :file:`spread_dipole_ao.irp.f`
array of the integrals of AO_i * d/dx AO_j array of the integrals of AO_i * d/dy AO_j array of the integrals of AO_i * d/dz AO_j
.. c:var:: ao_dipole_x
.. code:: text
double precision, allocatable :: ao_dipole_x (ao_num,ao_num)
double precision, allocatable :: ao_dipole_y (ao_num,ao_num)
double precision, allocatable :: ao_dipole_z (ao_num,ao_num)
File: :file:`spread_dipole_ao.irp.f`
array of the integrals of AO_i * x AO_j array of the integrals of AO_i * y AO_j array of the integrals of AO_i * z AO_j
.. c:var:: ao_dipole_y
.. code:: text
double precision, allocatable :: ao_dipole_x (ao_num,ao_num)
double precision, allocatable :: ao_dipole_y (ao_num,ao_num)
double precision, allocatable :: ao_dipole_z (ao_num,ao_num)
File: :file:`spread_dipole_ao.irp.f`
array of the integrals of AO_i * x AO_j array of the integrals of AO_i * y AO_j array of the integrals of AO_i * z AO_j
.. c:var:: ao_dipole_z
.. code:: text
double precision, allocatable :: ao_dipole_x (ao_num,ao_num)
double precision, allocatable :: ao_dipole_y (ao_num,ao_num)
double precision, allocatable :: ao_dipole_z (ao_num,ao_num)
File: :file:`spread_dipole_ao.irp.f`
array of the integrals of AO_i * x AO_j array of the integrals of AO_i * y AO_j array of the integrals of AO_i * z AO_j
.. c:var:: ao_kinetic_integral
.. code:: text
double precision, allocatable :: ao_kinetic_integral (ao_num,ao_num)
File: :file:`kin_ao_ints.irp.f`
Array of the priminitve basis kinetic integrals.
:math:`\langle \chi_i |\hat{T}| \chi_j \rangle`
.. c:var:: ao_mono_elec_integral
.. code:: text
double precision, allocatable :: ao_mono_elec_integral (ao_num,ao_num)
double precision, allocatable :: ao_mono_elec_integral_diag (ao_num)
File: :file:`ao_mono_ints.irp.f`
array of the mono electronic hamiltonian on the AOs basis : sum of the kinetic and nuclear electronic potential
.. c:var:: ao_mono_elec_integral_diag
.. code:: text
double precision, allocatable :: ao_mono_elec_integral (ao_num,ao_num)
double precision, allocatable :: ao_mono_elec_integral_diag (ao_num)
File: :file:`ao_mono_ints.irp.f`
array of the mono electronic hamiltonian on the AOs basis : sum of the kinetic and nuclear electronic potential
.. c:var:: ao_nucl_elec_integral
.. code:: text
double precision, allocatable :: ao_nucl_elec_integral (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_integral_per_atom
.. code:: text
double precision, allocatable :: ao_nucl_elec_integral_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_ortho_canonical_coef
.. code:: text
double precision, allocatable :: ao_ortho_canonical_coef (ao_num,ao_num)
integer :: ao_ortho_canonical_num
File: :file:`ao_ortho_canonical.irp.f`
matrix of the coefficients of the mos generated by the orthonormalization by the S^{-1/2} canonical transformation of the aos ao_ortho_canonical_coef(i,j) = coefficient of the ith ao on the jth ao_ortho_canonical orbital
.. c:var:: ao_ortho_canonical_coef_inv
.. code:: text
double precision, allocatable :: ao_ortho_canonical_coef_inv (ao_num,ao_num)
File: :file:`ao_ortho_canonical.irp.f`
ao_ortho_canonical_coef^(-1)
.. c:var:: ao_ortho_canonical_num
.. code:: text
double precision, allocatable :: ao_ortho_canonical_coef (ao_num,ao_num)
integer :: ao_ortho_canonical_num
File: :file:`ao_ortho_canonical.irp.f`
matrix of the coefficients of the mos generated by the orthonormalization by the S^{-1/2} canonical transformation of the aos ao_ortho_canonical_coef(i,j) = coefficient of the ith ao on the jth ao_ortho_canonical orbital
.. c:var:: ao_ortho_canonical_overlap
.. code:: text
double precision, allocatable :: ao_ortho_canonical_overlap (ao_ortho_canonical_num,ao_ortho_canonical_num)
File: :file:`ao_ortho_canonical.irp.f`
overlap matrix of the ao_ortho_canonical. Expected to be the Identity
.. c:var:: ao_overlap
.. code:: text
double precision, allocatable :: ao_overlap (ao_num,ao_num)
double precision, allocatable :: ao_overlap_x (ao_num,ao_num)
double precision, allocatable :: ao_overlap_y (ao_num,ao_num)
double precision, allocatable :: ao_overlap_z (ao_num,ao_num)
File: :file:`ao_overlap.irp.f`
Overlap between atomic basis functions: :math:`\int \chi_i(r) \chi_j(r) dr)`
.. c:var:: ao_overlap_abs
.. code:: text
double precision, allocatable :: ao_overlap_abs (ao_num,ao_num)
File: :file:`ao_overlap.irp.f`
Overlap between absolute value of atomic basis functions: :math:`\int |\chi_i(r)| |\chi_j(r)| dr)`
.. c:var:: ao_overlap_x
.. code:: text
double precision, allocatable :: ao_overlap (ao_num,ao_num)
double precision, allocatable :: ao_overlap_x (ao_num,ao_num)
double precision, allocatable :: ao_overlap_y (ao_num,ao_num)
double precision, allocatable :: ao_overlap_z (ao_num,ao_num)
File: :file:`ao_overlap.irp.f`
Overlap between atomic basis functions: :math:`\int \chi_i(r) \chi_j(r) dr)`
.. c:var:: ao_overlap_y
.. code:: text
double precision, allocatable :: ao_overlap (ao_num,ao_num)
double precision, allocatable :: ao_overlap_x (ao_num,ao_num)
double precision, allocatable :: ao_overlap_y (ao_num,ao_num)
double precision, allocatable :: ao_overlap_z (ao_num,ao_num)
File: :file:`ao_overlap.irp.f`
Overlap between atomic basis functions: :math:`\int \chi_i(r) \chi_j(r) dr)`
.. c:var:: ao_overlap_z
.. code:: text
double precision, allocatable :: ao_overlap (ao_num,ao_num)
double precision, allocatable :: ao_overlap_x (ao_num,ao_num)
double precision, allocatable :: ao_overlap_y (ao_num,ao_num)
double precision, allocatable :: ao_overlap_z (ao_num,ao_num)
File: :file:`ao_overlap.irp.f`
Overlap between atomic basis functions: :math:`\int \chi_i(r) \chi_j(r) dr)`
.. c:var:: ao_pseudo_integral
.. code:: text
double precision, allocatable :: ao_pseudo_integral (ao_num,ao_num)
File: :file:`pot_ao_pseudo_ints.irp.f`
Pseudo-potential integrals
.. c:var:: ao_pseudo_integral_local
.. code:: text
double precision, allocatable :: ao_pseudo_integral_local (ao_num,ao_num)
File: :file:`pot_ao_pseudo_ints.irp.f`
Local pseudo-potential
.. c:var:: ao_pseudo_integral_non_local
.. code:: text
double precision, allocatable :: ao_pseudo_integral_non_local (ao_num,ao_num)
File: :file:`pot_ao_pseudo_ints.irp.f`
Local pseudo-potential
.. c:var:: ao_spread_x
.. code:: text
double precision, allocatable :: ao_spread_x (ao_num,ao_num)
double precision, allocatable :: ao_spread_y (ao_num,ao_num)
double precision, allocatable :: ao_spread_z (ao_num,ao_num)
File: :file:`spread_dipole_ao.irp.f`
array of the integrals of AO_i * x^2 AO_j array of the integrals of AO_i * y^2 AO_j array of the integrals of AO_i * z^2 AO_j
.. c:var:: ao_spread_y
.. code:: text
double precision, allocatable :: ao_spread_x (ao_num,ao_num)
double precision, allocatable :: ao_spread_y (ao_num,ao_num)
double precision, allocatable :: ao_spread_z (ao_num,ao_num)
File: :file:`spread_dipole_ao.irp.f`
array of the integrals of AO_i * x^2 AO_j array of the integrals of AO_i * y^2 AO_j array of the integrals of AO_i * z^2 AO_j
.. c:var:: ao_spread_z
.. code:: text
double precision, allocatable :: ao_spread_x (ao_num,ao_num)
double precision, allocatable :: ao_spread_y (ao_num,ao_num)
double precision, allocatable :: ao_spread_z (ao_num,ao_num)
File: :file:`spread_dipole_ao.irp.f`
array of the integrals of AO_i * x^2 AO_j array of the integrals of AO_i * y^2 AO_j array of the integrals of AO_i * z^2 AO_j
.. c:var:: i_x1_pol_mult_mono_elec
.. code:: text
recursive subroutine I_x1_pol_mult_mono_elec(a,c,R1x,R1xp,R2x,d,nd,n_pt_in)
File: :file:`pot_ao_ints.irp.f`
Recursive routine involved in the electron-nucleus potential
.. c:var:: i_x2_pol_mult_mono_elec
.. code:: text
recursive subroutine I_x2_pol_mult_mono_elec(c,R1x,R1xp,R2x,d,nd,dim)
File: :file:`pot_ao_ints.irp.f`
Recursive routine involved in the electron-nucleus potential
.. c:var:: pseudo_dz_k_transp
.. code:: text
double precision, allocatable :: pseudo_v_k_transp (pseudo_klocmax,nucl_num)
integer, allocatable :: pseudo_n_k_transp (pseudo_klocmax,nucl_num)
double precision, allocatable :: pseudo_dz_k_transp (pseudo_klocmax,nucl_num)
File: :file:`pot_ao_pseudo_ints.irp.f`
Transposed arrays for pseudopotentials
.. c:var:: pseudo_dz_kl_transp
.. code:: text
double precision, allocatable :: pseudo_v_kl_transp (pseudo_kmax,0:pseudo_lmax,nucl_num)
integer, allocatable :: pseudo_n_kl_transp (pseudo_kmax,0:pseudo_lmax,nucl_num)
double precision, allocatable :: pseudo_dz_kl_transp (pseudo_kmax,0:pseudo_lmax,nucl_num)
File: :file:`pot_ao_pseudo_ints.irp.f`
Transposed arrays for pseudopotentials
.. c:var:: pseudo_n_k_transp
.. code:: text
double precision, allocatable :: pseudo_v_k_transp (pseudo_klocmax,nucl_num)
integer, allocatable :: pseudo_n_k_transp (pseudo_klocmax,nucl_num)
double precision, allocatable :: pseudo_dz_k_transp (pseudo_klocmax,nucl_num)
File: :file:`pot_ao_pseudo_ints.irp.f`
Transposed arrays for pseudopotentials
.. c:var:: pseudo_n_kl_transp
.. code:: text
double precision, allocatable :: pseudo_v_kl_transp (pseudo_kmax,0:pseudo_lmax,nucl_num)
integer, allocatable :: pseudo_n_kl_transp (pseudo_kmax,0:pseudo_lmax,nucl_num)
double precision, allocatable :: pseudo_dz_kl_transp (pseudo_kmax,0:pseudo_lmax,nucl_num)
File: :file:`pot_ao_pseudo_ints.irp.f`
Transposed arrays for pseudopotentials
.. c:var:: pseudo_v_k_transp
.. code:: text
double precision, allocatable :: pseudo_v_k_transp (pseudo_klocmax,nucl_num)
integer, allocatable :: pseudo_n_k_transp (pseudo_klocmax,nucl_num)
double precision, allocatable :: pseudo_dz_k_transp (pseudo_klocmax,nucl_num)
File: :file:`pot_ao_pseudo_ints.irp.f`
Transposed arrays for pseudopotentials
.. c:var:: pseudo_v_kl_transp
.. code:: text
double precision, allocatable :: pseudo_v_kl_transp (pseudo_kmax,0:pseudo_lmax,nucl_num)
integer, allocatable :: pseudo_n_kl_transp (pseudo_kmax,0:pseudo_lmax,nucl_num)
double precision, allocatable :: pseudo_dz_kl_transp (pseudo_kmax,0:pseudo_lmax,nucl_num)
File: :file:`pot_ao_pseudo_ints.irp.f`
Transposed arrays for pseudopotentials
.. c:var:: read_ao_one_integrals
.. code:: text
logical :: read_ao_one_integrals
logical :: write_ao_one_integrals
File: :file:`read_write.irp.f`
One level of abstraction for disk_access_ao_integrals and disk_access_mo_integrals
.. c:var:: s_half
.. code:: text
double precision, allocatable :: s_half (ao_num,ao_num)
File: :file:`ao_overlap.irp.f`
S^{1/2}
.. c:var:: s_half_inv
.. code:: text
double precision, allocatable :: s_half_inv (AO_num,AO_num)
File: :file:`ao_overlap.irp.f`
Matrix X = S^{-1/2} obtained by SVD
.. c:var:: s_inv
.. code:: text
double precision, allocatable :: s_inv (ao_num,ao_num)
File: :file:`ao_overlap.irp.f`
S^-1
.. c:var:: write_ao_one_integrals
.. code:: text
logical :: read_ao_one_integrals
logical :: write_ao_one_integrals
File: :file:`read_write.irp.f`
One level of abstraction for disk_access_ao_integrals and disk_access_mo_integrals
Subroutines / functions
-----------------------
.. c:function:: give_polynom_mult_center_mono_elec
.. 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)
File: :file:`pot_ao_ints.irp.f`
Returns the explicit polynomial in terms of the "t" variable of the following
:math:`I_x1(a_x, d_x,p,q) * I_x1(a_y, d_y,p,q) * I_x1(a_z, d_z,p,q)`
.. c:function:: int_gaus_pol
.. code:: text
double precision function int_gaus_pol(alpha,n)
File: :file:`pot_ao_ints.irp.f`
Computes the integral:
:math:`\int_{-\infty}^{\infty} x^n \exp(-\alpha x^2) dx`
.. c:function:: nai_pol_mult
.. code:: text
double precision function NAI_pol_mult(A_center,B_center,power_A,power_B,alpha,beta,C_center,n_pt_in)
File: :file:`pot_ao_ints.irp.f`
Computes the electron-nucleus attraction with two primitves.
:math:`\langle g_i | \frac{1}{|r-R_c|} | g_j \rangle`
.. c:function:: overlap_bourrin_deriv_x
.. code:: text
subroutine overlap_bourrin_deriv_x(i_component,A_center,B_center,alpha,beta,power_A,power_B,dx,lower_exp_val,overlap_x,nx)
File: :file:`spread_dipole_ao.irp.f`
.. c:function:: overlap_bourrin_dipole
.. code:: text
subroutine overlap_bourrin_dipole(A_center,B_center,alpha,beta,power_A,power_B,overlap_x,lower_exp_val,dx,nx)
File: :file:`spread_dipole_ao.irp.f`
.. c:function:: overlap_bourrin_spread
.. code:: text
subroutine overlap_bourrin_spread(A_center,B_center,alpha,beta,power_A,power_B,overlap_x,lower_exp_val,dx,nx)
File: :file:`spread_dipole_ao.irp.f`
.. c:function:: overlap_bourrin_x
.. code:: text
subroutine overlap_bourrin_x(A_center,B_center,alpha,beta,power_A,power_B,overlap_x,lower_exp_val,dx,nx)
File: :file:`spread_dipole_ao.irp.f`
.. c:function:: overlap_bourrin_x_abs
.. code:: text
subroutine overlap_bourrin_x_abs(A_center,B_center,alpha,beta,power_A,power_B,overlap_x,lower_exp_val,dx,nx)
File: :file:`spread_dipole_ao.irp.f`
.. c:function:: power
.. code:: text
double precision function power(n,x)
File: :file:`spread_dipole_ao.irp.f`
.. c:function:: v_e_n
.. code:: text
double precision function V_e_n(a_x,a_y,a_z,b_x,b_y,b_z,alpha,beta)
File: :file:`pot_ao_ints.irp.f`
Primitve nuclear attraction between the two primitves centered on the same atom.
primitive_1 = x**(a_x) y**(a_y) z**(a_z) exp(-alpha * r**2)
primitive_2 = x**(b_x) y**(b_y) z**(b_z) exp(- beta * r**2)
.. c:function:: v_phi
.. code:: text
double precision function V_phi(n,m)
File: :file:`pot_ao_ints.irp.f`
Computes the angular "phi" part of the nuclear attraction integral:
:math:`\int_{0}^{2 \pi} \cos(\phi)^n \sin(\phi)^m d\phi`
.. c:function:: v_r
.. code:: text
double precision function V_r(n,alpha)
File: :file:`pot_ao_ints.irp.f`
Computes the radial part of the nuclear attraction integral:
:math:`\int_{0}^{\infty} r^n \exp(-\alpha r^2) dr`
.. c:function:: v_theta
.. code:: text
double precision function V_theta(n,m)
File: :file:`pot_ao_ints.irp.f`
Computes the angular "theta" part of the nuclear attraction integral:
:math:`\int_{0}^{\pi} \cos(\theta)^n \sin(\theta)^m d\theta`
.. c:function:: wallis
.. code:: text
double precision function Wallis(n)
File: :file:`pot_ao_ints.irp.f`
Wallis integral:
:math:`\int_{0}^{\pi} \cos(\theta)^n d\theta`

File diff suppressed because it is too large Load Diff

View File

@ -27,3 +27,91 @@ EZFIO parameters
Variational CIS energy
Subroutines / functions
-----------------------
.. c:function:: cis
.. code:: text
subroutine cis
File: :file:`CIS.irp.f`
.. c:function:: h_apply_cis
.. code:: text
subroutine H_apply_cis()
File: :file:`H_apply.irp.f_shell_8`
Calls H_apply on the HF determinant and selects all connected single and double excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
.. c:function:: h_apply_cis_diexc
.. code:: text
subroutine H_apply_cis_diexc(key_in, key_prev, hole_1,particl_1, hole_2, particl_2, fock_diag_tmp, i_generator, iproc_in )
File: :file:`H_apply.irp.f_shell_8`
.. c:function:: h_apply_cis_diexcorg
.. code:: text
subroutine H_apply_cis_diexcOrg(key_in,key_mask,hole_1,particl_1,hole_2, particl_2, fock_diag_tmp, i_generator, iproc_in )
File: :file:`H_apply.irp.f_shell_8`
Generate all double excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided.
.. c:function:: h_apply_cis_diexcp
.. code:: text
subroutine H_apply_cis_diexcP(key_in, fs1, fh1, particl_1, fs2, fh2, particl_2, fock_diag_tmp, i_generator, iproc_in )
File: :file:`H_apply.irp.f_shell_8`
.. c:function:: h_apply_cis_monoexc
.. code:: text
subroutine H_apply_cis_monoexc(key_in, hole_1,particl_1,fock_diag_tmp,i_generator,iproc_in )
File: :file:`H_apply.irp.f_shell_8`
Generate all single excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided.

View File

@ -27,3 +27,77 @@ EZFIO parameters
Variational CISD energy
Subroutines / functions
-----------------------
.. c:function:: h_apply_cisd
.. code:: text
subroutine H_apply_cisd()
File: :file:`H_apply.irp.f_shell_8`
Calls H_apply on the HF determinant and selects all connected single and double excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
.. c:function:: h_apply_cisd_diexc
.. code:: text
subroutine H_apply_cisd_diexc(key_in, key_prev, hole_1,particl_1, hole_2, particl_2, fock_diag_tmp, i_generator, iproc_in )
File: :file:`H_apply.irp.f_shell_8`
.. c:function:: h_apply_cisd_diexcorg
.. code:: text
subroutine H_apply_cisd_diexcOrg(key_in,key_mask,hole_1,particl_1,hole_2, particl_2, fock_diag_tmp, i_generator, iproc_in )
File: :file:`H_apply.irp.f_shell_8`
Generate all double excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided.
.. c:function:: h_apply_cisd_diexcp
.. code:: text
subroutine H_apply_cisd_diexcP(key_in, fs1, fh1, particl_1, fs2, fh2, particl_2, fock_diag_tmp, i_generator, iproc_in )
File: :file:`H_apply.irp.f_shell_8`
.. c:function:: h_apply_cisd_monoexc
.. code:: text
subroutine H_apply_cisd_monoexc(key_in, hole_1,particl_1,fock_diag_tmp,i_generator,iproc_in )
File: :file:`H_apply.irp.f_shell_8`
Generate all single excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided.

View File

@ -56,3 +56,497 @@ EZFIO parameters
If |true|, use the distributed algorithm
Default: True
Providers
---------
.. c:var:: ci_eigenvectors
.. code:: text
double precision, allocatable :: ci_electronic_energy (N_states_diag)
double precision, allocatable :: ci_eigenvectors (N_det,N_states_diag)
double precision, allocatable :: ci_eigenvectors_s2 (N_states_diag)
File: :file:`diagonalize_CI.irp.f`
Eigenvectors/values of the CI matrix
.. c:var:: ci_eigenvectors_s2
.. code:: text
double precision, allocatable :: ci_electronic_energy (N_states_diag)
double precision, allocatable :: ci_eigenvectors (N_det,N_states_diag)
double precision, allocatable :: ci_eigenvectors_s2 (N_states_diag)
File: :file:`diagonalize_CI.irp.f`
Eigenvectors/values of the CI matrix
.. c:var:: ci_electronic_energy
.. code:: text
double precision, allocatable :: ci_electronic_energy (N_states_diag)
double precision, allocatable :: ci_eigenvectors (N_det,N_states_diag)
double precision, allocatable :: ci_eigenvectors_s2 (N_states_diag)
File: :file:`diagonalize_CI.irp.f`
Eigenvectors/values of the CI matrix
.. c:var:: ci_energy
.. code:: text
double precision, allocatable :: ci_energy (N_states_diag)
File: :file:`diagonalize_CI.irp.f`
N_states lowest eigenvalues of the CI matrix
.. c:var:: davidson_criterion
.. code:: text
character(64) :: davidson_criterion
File: :file:`parameters.irp.f`
Can be : [ energy | residual | both | wall_time | cpu_time | iterations ]
.. c:var:: dressed_column_idx
.. code:: text
integer, allocatable :: dressed_column_idx (N_states)
File: :file:`diagonalization_hs2_dressed.irp.f`
Index of the dressed columns
.. c:var:: n_states_diag
.. code:: text
integer :: n_states_diag
File: :file:`input.irp.f`
Number of states to consider during the Davdison diagonalization
.. c:var:: nthreads_davidson
.. code:: text
integer :: nthreads_davidson
File: :file:`davidson_parallel.irp.f`
Number of threads for Davdison
.. c:var:: psi_energy
.. code:: text
double precision, allocatable :: psi_energy (N_states)
File: :file:`u0Hu0.irp.f`
Energy of the current wave function
.. c:var:: psi_energy_with_nucl_rep
.. code:: text
double precision, allocatable :: psi_energy_with_nucl_rep (N_states)
File: :file:`u0Hu0.irp.f`
Energy of the wave function with the nuclear repulsion energy.
Subroutines / functions
-----------------------
.. c:function:: davidson_collector
.. code:: text
subroutine davidson_collector(zmq_to_qp_run_socket, zmq_socket_pull, v0, s0, sze, N_st)
File: :file:`davidson_parallel.irp.f`
.. c:function:: davidson_converged
.. code:: text
subroutine davidson_converged(energy,residual,wall,iterations,cpu,N_st,converged)
File: :file:`parameters.irp.f`
True if the Davidson algorithm is converged
.. c:function:: davidson_diag_hjj_sjj
.. code:: text
subroutine davidson_diag_hjj_sjj(dets_in,u_in,H_jj,s2_out,energies,dim_in,sze,N_st,N_st_diag,Nint,dressing_state,converged)
File: :file:`diagonalization_hs2_dressed.irp.f`
Davidson diagonalization with specific diagonal elements of the H matrix
H_jj : specific diagonal H matrix elements to diagonalize de Davidson
S2_out : Output : s^2
dets_in : bitmasks corresponding to determinants
u_in : guess coefficients on the various states. Overwritten on exit
dim_in : leftmost dimension of u_in
sze : Number of determinants
N_st : Number of eigenstates
N_st_diag : Number of states in which H is diagonalized. Assumed > sze
Initial guess vectors are not necessarily orthonormal
.. c:function:: davidson_diag_hs2
.. code:: text
subroutine davidson_diag_hs2(dets_in,u_in,s2_out,dim_in,energies,sze,N_st,N_st_diag,Nint,dressing_state)
File: :file:`diagonalization_hs2_dressed.irp.f`
Davidson diagonalization.
dets_in : bitmasks corresponding to determinants
u_in : guess coefficients on the various states. Overwritten on exit
dim_in : leftmost dimension of u_in
sze : Number of determinants
N_st : Number of eigenstates
Initial guess vectors are not necessarily orthonormal
.. c:function:: davidson_pull_results
.. code:: text
subroutine davidson_pull_results(zmq_socket_pull, v_t, s_t, imin, imax, task_id)
File: :file:`davidson_parallel.irp.f`
.. c:function:: davidson_push_results
.. code:: text
subroutine davidson_push_results(zmq_socket_push, v_t, s_t, imin, imax, task_id)
File: :file:`davidson_parallel.irp.f`
.. c:function:: davidson_run_slave
.. code:: text
subroutine davidson_run_slave(thread,iproc)
File: :file:`davidson_parallel.irp.f`
.. c:function:: davidson_slave_inproc
.. code:: text
subroutine davidson_slave_inproc(i)
File: :file:`davidson_parallel.irp.f`
.. c:function:: davidson_slave_tcp
.. code:: text
subroutine davidson_slave_tcp(i)
File: :file:`davidson_parallel.irp.f`
.. c:function:: davidson_slave_work
.. code:: text
subroutine davidson_slave_work(zmq_to_qp_run_socket, zmq_socket_push, N_st, sze, worker_id)
File: :file:`davidson_parallel.irp.f`
.. c:function:: diagonalize_ci
.. code:: text
subroutine diagonalize_CI
File: :file:`diagonalize_CI.irp.f`
Replace the coefficients of the CI states by the coefficients of the eigenstates of the CI matrix
.. c:function:: find_reference
.. code:: text
subroutine find_reference(thresh,n_ref,result)
File: :file:`find_reference.irp.f`
.. c:function:: h_s2_u_0_nstates_openmp
.. code:: text
subroutine H_S2_u_0_nstates_openmp(v_0,s_0,u_0,N_st,sze)
File: :file:`u0Hu0.irp.f`
Computes v_0 = H|u_0> and s_0 = S^2 |u_0>
Assumes that the determinants are in psi_det
istart, iend, ishift, istep are used in ZMQ parallelization.
.. c:function:: h_s2_u_0_nstates_openmp_work
.. code:: text
subroutine H_S2_u_0_nstates_openmp_work(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep)
File: :file:`u0Hu0.irp.f`
Computes v_t = H|u_t> and s_t = S^2 |u_t>
Default should be 1,N_det,0,1
.. c:function:: h_s2_u_0_nstates_openmp_work_1
.. code:: text
subroutine H_S2_u_0_nstates_openmp_work_1(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep)
File: :file:`u0Hu0.irp.f_template_468`
Computes v_t = H|u_t> and s_t = S^2 |u_t>
Default should be 1,N_det,0,1
.. c:function:: h_s2_u_0_nstates_openmp_work_2
.. code:: text
subroutine H_S2_u_0_nstates_openmp_work_2(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep)
File: :file:`u0Hu0.irp.f_template_468`
Computes v_t = H|u_t> and s_t = S^2 |u_t>
Default should be 1,N_det,0,1
.. c:function:: h_s2_u_0_nstates_openmp_work_3
.. code:: text
subroutine H_S2_u_0_nstates_openmp_work_3(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep)
File: :file:`u0Hu0.irp.f_template_468`
Computes v_t = H|u_t> and s_t = S^2 |u_t>
Default should be 1,N_det,0,1
.. c:function:: h_s2_u_0_nstates_openmp_work_4
.. code:: text
subroutine H_S2_u_0_nstates_openmp_work_4(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep)
File: :file:`u0Hu0.irp.f_template_468`
Computes v_t = H|u_t> and s_t = S^2 |u_t>
Default should be 1,N_det,0,1
.. c:function:: h_s2_u_0_nstates_openmp_work_n_int
.. code:: text
subroutine H_S2_u_0_nstates_openmp_work_N_int(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep)
File: :file:`u0Hu0.irp.f_template_468`
Computes v_t = H|u_t> and s_t = S^2 |u_t>
Default should be 1,N_det,0,1
.. c:function:: h_s2_u_0_nstates_zmq
.. code:: text
subroutine H_S2_u_0_nstates_zmq(v_0,s_0,u_0,N_st,sze)
File: :file:`davidson_parallel.irp.f`
Computes v_0 = H|u_0> and s_0 = S^2 |u_0>
n : number of determinants
H_jj : array of <j|H|j>
S2_jj : array of <j|S^2|j>
.. c:function:: u_0_h_u_0
.. code:: text
subroutine u_0_H_u_0(e_0,u_0,n,keys_tmp,Nint,N_st,sze)
File: :file:`u0Hu0.irp.f`
Computes e_0 = <u_0|H|u_0>/<u_0|u_0>
n : number of determinants
.. c:function:: zmq_get_n_states_diag
.. code:: text
integer function zmq_get_N_states_diag(zmq_to_qp_run_socket, worker_id)
File: :file:`davidson_parallel.irp.f`
Get N_states_diag from the qp_run scheduler
.. c:function:: zmq_put_n_states_diag
.. code:: text
integer function zmq_put_N_states_diag(zmq_to_qp_run_socket,worker_id)
File: :file:`davidson_parallel.irp.f`
Put N_states_diag on the qp_run scheduler

View File

@ -11,3 +11,35 @@ DavidsonUndressed
Module for main files Davidson's algorithm with no dressing.
Providers
---------
.. c:var:: dressing_column_h
.. code:: text
double precision, allocatable :: dressing_column_h (N_det,N_states)
double precision, allocatable :: dressing_column_s (N_det,N_states)
File: :file:`null_dressing_vector.irp.f`
Null dressing vectors
.. c:var:: dressing_column_s
.. code:: text
double precision, allocatable :: dressing_column_h (N_det,N_states)
double precision, allocatable :: dressing_column_s (N_det,N_states)
File: :file:`null_dressing_vector.irp.f`
Null dressing vectors

File diff suppressed because it is too large Load Diff

View File

@ -42,3 +42,35 @@ EZFIO parameters
Numbers total of electrons (alpha + beta)
Default: = electrons.elec_alpha_num + electrons.elec_beta_num
Providers
---------
.. c:var:: elec_num
.. code:: text
integer :: elec_num
integer, allocatable :: elec_num_tab (2)
File: :file:`electrons.irp.f`
Numbers of alpha ("up") , beta ("down") and total electrons
.. c:var:: elec_num_tab
.. code:: text
integer :: elec_num
integer, allocatable :: elec_num_tab (2)
File: :file:`electrons.irp.f`
Numbers of alpha ("up") , beta ("down") and total electrons

View File

@ -13,3 +13,137 @@ This modules essentially contains the name of the |EZFIO| directory in the
command-line, or as the :envvar:`QP_INPUT` environment variable.
Providers
---------
.. c:var:: ezfio_filename
.. code:: text
character*(128) :: ezfio_filename
File: :file:`ezfio.irp.f`
Name of EZFIO file. It is obtained from the QPACKAGE_INPUT environment variable if it is set, or as the 1st argument of the command line.
.. c:var:: ezfio_work_dir
.. code:: text
character*(128) :: ezfio_work_dir
File: :file:`ezfio.irp.f`
EZFIO/work/
.. c:var:: output_cpu_time_0
.. code:: text
double precision :: output_wall_time_0
double precision :: output_cpu_time_0
File: :file:`output.irp.f`
Initial CPU and wall times when printing in the output files
.. c:var:: output_wall_time_0
.. code:: text
double precision :: output_wall_time_0
double precision :: output_cpu_time_0
File: :file:`output.irp.f`
Initial CPU and wall times when printing in the output files
Subroutines / functions
-----------------------
.. c:function:: getunitandopen
.. code:: text
integer function getUnitAndOpen(f,mode)
File: :file:`get_unit_and_open.irp.f`
:f: file name
:mode: 'R' : READ, UNFORMATTED 'W' : WRITE, UNFORMATTED 'r' : READ, FORMATTED 'w' : WRITE, FORMATTED 'a' : APPEND, FORMATTED 'x' : READ/WRITE, FORMATTED
.. c:function:: write_bool
.. code:: text
subroutine write_bool(iunit,value,label)
File: :file:`output.irp.f`
Write an logical value in output
.. c:function:: write_double
.. code:: text
subroutine write_double(iunit,value,label)
File: :file:`output.irp.f`
Write a double precision value in output
.. c:function:: write_int
.. code:: text
subroutine write_int(iunit,value,label)
File: :file:`output.irp.f`
Write an integer value in output
.. c:function:: write_time
.. code:: text
subroutine write_time(iunit)
File: :file:`output.irp.f`
Write a time stamp in the output for chronological reconstruction

View File

@ -137,235 +137,785 @@ Providers
---------
.. option:: pt2_e0_denominator
.. code:: text
double precision, allocatable :: pt2_e0_denominator (N_states)
File: energy.irp.f
E0 in the denominator of the PT2
.. option:: pt2_u_0
.. code:: text
double precision, allocatable :: pt2_w (N_det_generators)
double precision, allocatable :: pt2_cw (0:N_det_generators)
double precision :: pt2_w_t
double precision :: pt2_u_0
integer, allocatable :: pt2_n_0 (pt2_N_teeth+1)
File: pt2_stoch_routines.irp.f
.. option:: pt2_r
.. code:: text
integer, allocatable :: pt2_j (N_det_generators)
integer, allocatable :: pt2_r (N_det_generators)
File: pt2_stoch_routines.irp.f
.. option:: pt2_w
.. code:: text
double precision, allocatable :: pt2_w (N_det_generators)
double precision, allocatable :: pt2_cw (0:N_det_generators)
double precision :: pt2_w_t
double precision :: pt2_u_0
integer, allocatable :: pt2_n_0 (pt2_N_teeth+1)
File: pt2_stoch_routines.irp.f
.. option:: pt2_u
.. code:: text
double precision, allocatable :: pt2_u (N_det_generators)
File: pt2_stoch_routines.irp.f
.. option:: pt2_j
.. code:: text
integer, allocatable :: pt2_j (N_det_generators)
integer, allocatable :: pt2_r (N_det_generators)
File: pt2_stoch_routines.irp.f
.. option:: pt2_f
.. code:: text
integer, allocatable :: pt2_f (N_det_generators)
integer :: pt2_n_tasks_max
File: pt2_stoch_routines.irp.f
.. option:: pt2_cw
.. code:: text
double precision, allocatable :: pt2_w (N_det_generators)
double precision, allocatable :: pt2_cw (0:N_det_generators)
double precision :: pt2_w_t
double precision :: pt2_u_0
integer, allocatable :: pt2_n_0 (pt2_N_teeth+1)
File: pt2_stoch_routines.irp.f
.. option:: pt2_w_t
.. code:: text
double precision, allocatable :: pt2_w (N_det_generators)
double precision, allocatable :: pt2_cw (0:N_det_generators)
double precision :: pt2_w_t
double precision :: pt2_u_0
integer, allocatable :: pt2_n_0 (pt2_N_teeth+1)
File: pt2_stoch_routines.irp.f
.. option:: pt2_n_tasks
.. code:: text
integer :: pt2_n_tasks
File: pt2_stoch_routines.irp.f
Number of parallel tasks for the Monte Carlo
.. option:: pt2_n_0
.. code:: text
double precision, allocatable :: pt2_w (N_det_generators)
double precision, allocatable :: pt2_cw (0:N_det_generators)
double precision :: pt2_w_t
double precision :: pt2_u_0
integer, allocatable :: pt2_n_0 (pt2_N_teeth+1)
File: pt2_stoch_routines.irp.f
.. option:: pt2_n_tasks_max
.. code:: text
integer, allocatable :: pt2_f (N_det_generators)
integer :: pt2_n_tasks_max
File: pt2_stoch_routines.irp.f
.. option:: pt2_n_teeth
.. code:: text
integer :: pt2_n_teeth
integer :: pt2_mindetinfirstteeth
File: pt2_stoch_routines.irp.f
.. option:: initialize_pt2_e0_denominator
.. c:var:: initialize_pt2_e0_denominator
.. code:: text
logical :: initialize_pt2_e0_denominator
File: energy.irp.f
File: :file:`energy.irp.f`
If true, initialize pt2_E0_denominator
.. option:: pt2_mindetinfirstteeth
.. c:var:: pt2_cw
.. code:: text
double precision, allocatable :: pt2_w (N_det_generators)
double precision, allocatable :: pt2_cw (0:N_det_generators)
double precision :: pt2_w_t
double precision :: pt2_u_0
integer, allocatable :: pt2_n_0 (pt2_N_teeth+1)
File: :file:`pt2_stoch_routines.irp.f`
.. c:var:: pt2_e0_denominator
.. code:: text
double precision, allocatable :: pt2_e0_denominator (N_states)
File: :file:`energy.irp.f`
E0 in the denominator of the PT2
.. c:var:: pt2_f
.. code:: text
integer, allocatable :: pt2_f (N_det_generators)
integer :: pt2_n_tasks_max
File: :file:`pt2_stoch_routines.irp.f`
.. c:var:: pt2_j
.. code:: text
integer, allocatable :: pt2_j (N_det_generators)
integer, allocatable :: pt2_r (N_det_generators)
File: :file:`pt2_stoch_routines.irp.f`
.. c:var:: pt2_mindetinfirstteeth
.. code:: text
integer :: pt2_n_teeth
integer :: pt2_mindetinfirstteeth
File: pt2_stoch_routines.irp.f
File: :file:`pt2_stoch_routines.irp.f`
.. option:: pt2_stoch_istate
.. c:var:: pt2_n_0
.. code:: text
double precision, allocatable :: pt2_w (N_det_generators)
double precision, allocatable :: pt2_cw (0:N_det_generators)
double precision :: pt2_w_t
double precision :: pt2_u_0
integer, allocatable :: pt2_n_0 (pt2_N_teeth+1)
File: :file:`pt2_stoch_routines.irp.f`
.. c:var:: pt2_n_tasks
.. code:: text
integer :: pt2_n_tasks
File: :file:`pt2_stoch_routines.irp.f`
Number of parallel tasks for the Monte Carlo
.. c:var:: pt2_n_tasks_max
.. code:: text
integer, allocatable :: pt2_f (N_det_generators)
integer :: pt2_n_tasks_max
File: :file:`pt2_stoch_routines.irp.f`
.. c:var:: pt2_n_teeth
.. code:: text
integer :: pt2_n_teeth
integer :: pt2_mindetinfirstteeth
File: :file:`pt2_stoch_routines.irp.f`
.. c:var:: pt2_r
.. code:: text
integer, allocatable :: pt2_j (N_det_generators)
integer, allocatable :: pt2_r (N_det_generators)
File: :file:`pt2_stoch_routines.irp.f`
.. c:var:: pt2_stoch_istate
.. code:: text
integer :: pt2_stoch_istate
File: pt2_stoch_routines.irp.f
File: :file:`pt2_stoch_routines.irp.f`
State for stochatsic PT2
.. c:var:: pt2_u
.. code:: text
double precision, allocatable :: pt2_u (N_det_generators)
File: :file:`pt2_stoch_routines.irp.f`
.. c:var:: pt2_u_0
.. code:: text
double precision, allocatable :: pt2_w (N_det_generators)
double precision, allocatable :: pt2_cw (0:N_det_generators)
double precision :: pt2_w_t
double precision :: pt2_u_0
integer, allocatable :: pt2_n_0 (pt2_N_teeth+1)
File: :file:`pt2_stoch_routines.irp.f`
.. c:var:: pt2_w
.. code:: text
double precision, allocatable :: pt2_w (N_det_generators)
double precision, allocatable :: pt2_cw (0:N_det_generators)
double precision :: pt2_w_t
double precision :: pt2_u_0
integer, allocatable :: pt2_n_0 (pt2_N_teeth+1)
File: :file:`pt2_stoch_routines.irp.f`
.. c:var:: pt2_w_t
.. code:: text
double precision, allocatable :: pt2_w (N_det_generators)
double precision, allocatable :: pt2_cw (0:N_det_generators)
double precision :: pt2_w_t
double precision :: pt2_u_0
integer, allocatable :: pt2_n_0 (pt2_N_teeth+1)
File: :file:`pt2_stoch_routines.irp.f`
Subroutines / functions
-----------------------
.. c:function:: add_to_selection_buffer
.. code:: text
subroutine add_to_selection_buffer(b, det, val)
File: :file:`selection_buffer.irp.f`
.. c:function:: bitstring_to_list_in_selection
.. code:: text
subroutine bitstring_to_list_in_selection( string, list, n_elements, Nint)
File: :file:`selection.irp.f`
Gives the inidices(+1) of the bits set to 1 in the bit string
.. c:function:: create_selection_buffer
.. code:: text
subroutine create_selection_buffer(N, siz_, res)
File: :file:`selection_buffer.irp.f`
.. c:function:: delete_selection_buffer
.. code:: text
subroutine delete_selection_buffer(b)
File: :file:`selection_buffer.irp.f`
.. c:function:: fci_zmq
.. code:: text
subroutine fci_zmq
File: :file:`FCI.irp.f`
.. c:function:: fill_buffer_double
.. code:: text
subroutine fill_buffer_double(i_generator, sp, h1, h2, bannedOrb, banned, fock_diag_tmp, E0, pt2, variance, norm, mat, buf)
File: :file:`selection.irp.f`
.. c:function:: get_d0
.. code:: text
subroutine get_d0(gen, phasemask, bannedOrb, banned, mat, mask, h, p, sp, coefs)
File: :file:`selection.irp.f`
.. c:function:: get_d1
.. code:: text
subroutine get_d1(gen, phasemask, bannedOrb, banned, mat, mask, h, p, sp, coefs)
File: :file:`selection.irp.f`
.. c:function:: get_d2
.. code:: text
subroutine get_d2(gen, phasemask, bannedOrb, banned, mat, mask, h, p, sp, coefs)
File: :file:`selection.irp.f`
.. c:function:: get_m0
.. code:: text
subroutine get_m0(gen, phasemask, bannedOrb, vect, mask, h, p, sp, coefs)
File: :file:`selection.irp.f`
.. c:function:: get_m1
.. code:: text
subroutine get_m1(gen, phasemask, bannedOrb, vect, mask, h, p, sp, coefs)
File: :file:`selection.irp.f`
.. c:function:: get_m2
.. code:: text
subroutine get_m2(gen, phasemask, bannedOrb, vect, mask, h, p, sp, coefs)
File: :file:`selection.irp.f`
.. c:function:: get_mask_phase
.. code:: text
subroutine get_mask_phase(det1, pm, Nint)
File: :file:`selection.irp.f`
.. c:function:: get_phase_bi
.. code:: text
double precision function get_phase_bi(phasemask, s1, s2, h1, p1, h2, p2, Nint)
File: :file:`selection.irp.f`
.. c:function:: make_selection_buffer_s2
.. code:: text
subroutine make_selection_buffer_s2(b)
File: :file:`selection_buffer.irp.f`
.. c:function:: merge_selection_buffers
.. code:: text
subroutine merge_selection_buffers(b1, b2)
File: :file:`selection_buffer.irp.f`
Merges the selection buffers b1 and b2 into b2
.. c:function:: past_d1
.. code:: text
subroutine past_d1(bannedOrb, p)
File: :file:`selection.irp.f`
.. c:function:: past_d2
.. code:: text
subroutine past_d2(banned, p, sp)
File: :file:`selection.irp.f`
.. c:function:: pt2_collector
.. code:: text
subroutine pt2_collector(zmq_socket_pull, E, relative_error, pt2, error, variance, norm)
File: :file:`pt2_stoch_routines.irp.f`
.. c:function:: pt2_find_sample
.. code:: text
integer function pt2_find_sample(v, w)
File: :file:`pt2_stoch_routines.irp.f`
.. c:function:: pt2_find_sample_lr
.. code:: text
integer function pt2_find_sample_lr(v, w, l_in, r_in)
File: :file:`pt2_stoch_routines.irp.f`
.. c:function:: pt2_slave_inproc
.. code:: text
subroutine pt2_slave_inproc(i)
File: :file:`pt2_stoch_routines.irp.f`
.. c:function:: pt2_stoch
.. code:: text
subroutine pt2_stoch
File: :file:`PT2.irp.f`
.. c:function:: pull_pt2_results
.. code:: text
subroutine pull_pt2_results(zmq_socket_pull, index, pt2, variance, norm, task_id, n_tasks)
File: :file:`run_pt2_slave.irp.f`
.. c:function:: pull_selection_results
.. code:: text
subroutine pull_selection_results(zmq_socket_pull, pt2, variance, norm, val, det, N, task_id, ntask)
File: :file:`run_selection_slave.irp.f`
.. c:function:: push_pt2_results
.. code:: text
subroutine push_pt2_results(zmq_socket_push, index, pt2, variance, norm, task_id, n_tasks)
File: :file:`run_pt2_slave.irp.f`
.. c:function:: push_selection_results
.. code:: text
subroutine push_selection_results(zmq_socket_push, pt2, variance, norm, b, task_id, ntask)
File: :file:`run_selection_slave.irp.f`
.. c:function:: run_pt2_slave
.. code:: text
subroutine run_pt2_slave(thread,iproc,energy)
File: :file:`run_pt2_slave.irp.f`
.. c:function:: run_selection_slave
.. code:: text
subroutine run_selection_slave(thread,iproc,energy)
File: :file:`run_selection_slave.irp.f`
.. c:function:: select_connected
.. code:: text
subroutine select_connected(i_generator,E0,pt2,variance,norm,b,subset,csubset)
File: :file:`selection.irp.f`
.. c:function:: select_singles_and_doubles
.. code:: text
subroutine select_singles_and_doubles(i_generator,hole_mask,particle_mask,fock_diag_tmp,E0,pt2,variance,norm,buf,subset,csubset)
File: :file:`selection.irp.f`
WARNING /!\ : It is assumed that the generators and selectors are psi_det_sorted
.. c:function:: selection_collector
.. code:: text
subroutine selection_collector(zmq_socket_pull, b, N, pt2, variance, norm)
File: :file:`zmq_selection.irp.f`
.. c:function:: selection_slave_inproc
.. code:: text
subroutine selection_slave_inproc(i)
File: :file:`zmq_selection.irp.f`
.. c:function:: sort_selection_buffer
.. code:: text
subroutine sort_selection_buffer(b)
File: :file:`selection_buffer.irp.f`
.. c:function:: splash_pq
.. code:: text
subroutine splash_pq(mask, sp, det, i_gen, N_sel, bannedOrb, banned, mat, interesting)
File: :file:`selection.irp.f`
.. c:function:: spot_isinwf
.. code:: text
subroutine spot_isinwf(mask, det, i_gen, N, banned, fullMatch, interesting)
File: :file:`selection.irp.f`
.. c:function:: testteethbuilding
.. code:: text
logical function testTeethBuilding(minF, N)
File: :file:`pt2_stoch_routines.irp.f`
.. c:function:: zmq_pt2
.. code:: text
subroutine ZMQ_pt2(E, pt2,relative_error, error, variance, norm)
File: :file:`pt2_stoch_routines.irp.f`
.. c:function:: zmq_selection
.. code:: text
subroutine ZMQ_selection(N_in, pt2, variance, norm)
File: :file:`zmq_selection.irp.f`

View File

@ -11,3 +11,21 @@ FourIdx
Four-index transformation.
Subroutines / functions
-----------------------
.. c:function:: four_idx
.. code:: text
subroutine four_idx
File: :file:`Four_idx_transform.irp.f`
4-index transformation from AO to MO integrals

View File

@ -14,3 +14,132 @@ variational space.
This module is intended to be included in the :file:`NEED` file to define
a full set of generators.
Providers
---------
.. c:var:: degree_max_generators
.. code:: text
integer :: degree_max_generators
File: :file:`generators.irp.f`
Max degree of excitation (respect to HF) of the generators
.. c:var:: n_det_generators
.. code:: text
integer :: n_det_generators
File: :file:`generators.irp.f`
For Single reference wave functions, the number of generators is 1 : the Hartree-Fock determinant
.. c:var:: psi_coef_generators
.. code:: text
integer(bit_kind), allocatable :: psi_det_generators (N_int,2,psi_det_size)
double precision, allocatable :: psi_coef_generators (psi_det_size,N_states)
File: :file:`generators.irp.f`
For Single reference wave functions, the generator is the Hartree-Fock determinant
.. c:var:: psi_coef_sorted_gen
.. code:: text
integer(bit_kind), allocatable :: psi_det_sorted_gen (N_int,2,psi_det_size)
double precision, allocatable :: psi_coef_sorted_gen (psi_det_size,N_states)
integer, allocatable :: psi_det_sorted_gen_order (psi_det_size)
File: :file:`generators.irp.f`
For Single reference wave functions, the generator is the Hartree-Fock determinant
.. c:var:: psi_det_generators
.. code:: text
integer(bit_kind), allocatable :: psi_det_generators (N_int,2,psi_det_size)
double precision, allocatable :: psi_coef_generators (psi_det_size,N_states)
File: :file:`generators.irp.f`
For Single reference wave functions, the generator is the Hartree-Fock determinant
.. c:var:: psi_det_sorted_gen
.. code:: text
integer(bit_kind), allocatable :: psi_det_sorted_gen (N_int,2,psi_det_size)
double precision, allocatable :: psi_coef_sorted_gen (psi_det_size,N_states)
integer, allocatable :: psi_det_sorted_gen_order (psi_det_size)
File: :file:`generators.irp.f`
For Single reference wave functions, the generator is the Hartree-Fock determinant
.. c:var:: psi_det_sorted_gen_order
.. code:: text
integer(bit_kind), allocatable :: psi_det_sorted_gen (N_int,2,psi_det_size)
double precision, allocatable :: psi_coef_sorted_gen (psi_det_size,N_states)
integer, allocatable :: psi_det_sorted_gen_order (psi_det_size)
File: :file:`generators.irp.f`
For Single reference wave functions, the generator is the Hartree-Fock determinant
.. c:var:: select_max
.. code:: text
double precision, allocatable :: select_max (size_select_max)
File: :file:`generators.irp.f`
Memo to skip useless selectors
.. c:var:: size_select_max
.. code:: text
integer :: size_select_max
File: :file:`generators.irp.f`
Size of the select_max array

View File

@ -101,20 +101,104 @@ Providers
---------
.. option:: fock_matrix_mo_alpha
.. c:var:: ao_bi_elec_integral_alpha
.. code:: text
double precision, allocatable :: fock_matrix_mo_alpha (mo_tot_num,mo_tot_num)
double precision, allocatable :: ao_bi_elec_integral_alpha (ao_num,ao_num)
double precision, allocatable :: ao_bi_elec_integral_beta (ao_num,ao_num)
File: Fock_matrix.irp.f
File: :file:`Fock_matrix.irp.f`
Fock matrix on the MO basis
Alpha Fock matrix in AO basis set
.. option:: extrapolate_fock_matrix
.. c:var:: ao_bi_elec_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)
File: :file:`Fock_matrix.irp.f`
Alpha Fock matrix in AO basis set
.. c:var:: diagonal_fock_matrix_mo
.. code:: text
double precision, allocatable :: diagonal_fock_matrix_mo (mo_tot_num)
double precision, allocatable :: eigenvectors_fock_matrix_mo (ao_num,mo_tot_num)
File: :file:`diagonalize_fock.irp.f`
Diagonal Fock matrix in the MO basis
.. c:var:: diagonal_fock_matrix_mo_sum
.. code:: text
double precision, allocatable :: diagonal_fock_matrix_mo_sum (mo_tot_num)
File: :file:`diagonalize_fock.irp.f`
diagonal element of the fock matrix calculated as the sum over all the interactions with all the electrons in the RHF determinant diagonal_Fock_matrix_mo_sum(i) = sum_{j=1, N_elec} 2 J_ij -K_ij
.. c:var:: eigenvalues_fock_matrix_ao
.. code:: text
double precision, allocatable :: eigenvalues_fock_matrix_ao (AO_num)
double precision, allocatable :: eigenvectors_fock_matrix_ao (AO_num,AO_num)
File: :file:`DIIS.irp.f`
Eigenvalues and eigenvectors of the Fock matrix over the AO basis
.. c:var:: eigenvectors_fock_matrix_ao
.. code:: text
double precision, allocatable :: eigenvalues_fock_matrix_ao (AO_num)
double precision, allocatable :: eigenvectors_fock_matrix_ao (AO_num,AO_num)
File: :file:`DIIS.irp.f`
Eigenvalues and eigenvectors of the Fock matrix over the AO basis
.. c:var:: eigenvectors_fock_matrix_mo
.. code:: text
double precision, allocatable :: diagonal_fock_matrix_mo (mo_tot_num)
double precision, allocatable :: eigenvectors_fock_matrix_mo (ao_num,mo_tot_num)
File: :file:`diagonalize_fock.irp.f`
Diagonal Fock matrix in the MO basis
.. c:var:: extrapolate_fock_matrix
.. code:: text
@ -124,286 +208,290 @@ Providers
iteration_SCF,dim_DIIS &
)
File: Roothaan_Hall_SCF.irp.f
File: :file:`Roothaan_Hall_SCF.irp.f`
Compute the extrapolated Fock matrix using the DIIS procedure
.. option:: fock_matrix_ao_alpha
.. code:: text
double precision, allocatable :: fock_matrix_ao_alpha (ao_num,ao_num)
double precision, allocatable :: fock_matrix_ao_beta (ao_num,ao_num)
File: Fock_matrix.irp.f
Alpha Fock matrix in AO basis set
.. option:: hf_energy
.. code:: text
double precision :: hf_energy
File: Fock_matrix.irp.f
Hartree-Fock energy
.. option:: fock_matrix_diag_mo
.. code:: text
double precision, allocatable :: fock_matrix_mo (mo_tot_num,mo_tot_num)
double precision, allocatable :: fock_matrix_diag_mo (mo_tot_num)
File: Fock_matrix.irp.f
Fock matrix on the MO basis. For open shells, the ROHF Fock Matrix is
| F-K | F + K/2 | F | |---------------------------------| | F + K/2 | F | F - K/2 | |---------------------------------| | F | F - K/2 | F + K |
F = 1/2 (Fa + Fb)
K = Fb - Fa
.. option:: fock_matrix_ao_beta
.. code:: text
double precision, allocatable :: fock_matrix_ao_alpha (ao_num,ao_num)
double precision, allocatable :: fock_matrix_ao_beta (ao_num,ao_num)
File: Fock_matrix.irp.f
Alpha Fock matrix in AO basis set
.. option:: hf_density_matrix_ao
.. code:: text
double precision, allocatable :: hf_density_matrix_ao (ao_num,ao_num)
File: HF_density_matrix_ao.irp.f
S^{-1}.P.S^{-1} where P = C.C^t
.. option:: fps_spf_matrix_ao
.. code:: text
double precision, allocatable :: fps_spf_matrix_ao (AO_num,AO_num)
File: DIIS.irp.f
Commutator FPS - SPF
.. option:: threshold_diis_nonzero
.. code:: text
double precision :: threshold_diis_nonzero
File: DIIS.irp.f
If threshold_DIIS is zero, choose sqrt(thresh_scf)
.. option:: ao_bi_elec_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)
File: Fock_matrix.irp.f
Alpha Fock matrix in AO basis set
.. option:: eigenvectors_fock_matrix_ao
.. code:: text
double precision, allocatable :: eigenvalues_fock_matrix_ao (AO_num)
double precision, allocatable :: eigenvectors_fock_matrix_ao (AO_num,AO_num)
File: DIIS.irp.f
Eigenvalues and eigenvectors of the Fock matrix over the AO basis
.. option:: fock_matrix_mo_beta
.. code:: text
double precision, allocatable :: fock_matrix_mo_beta (mo_tot_num,mo_tot_num)
File: Fock_matrix.irp.f
Fock matrix on the MO basis
.. option:: eigenvectors_fock_matrix_mo
.. code:: text
double precision, allocatable :: diagonal_fock_matrix_mo (mo_tot_num)
double precision, allocatable :: eigenvectors_fock_matrix_mo (ao_num,mo_tot_num)
File: diagonalize_fock.irp.f
Diagonal Fock matrix in the MO basis
.. option:: fock_matrix_mo
.. code:: text
double precision, allocatable :: fock_matrix_mo (mo_tot_num,mo_tot_num)
double precision, allocatable :: fock_matrix_diag_mo (mo_tot_num)
File: Fock_matrix.irp.f
Fock matrix on the MO basis. For open shells, the ROHF Fock Matrix is
| F-K | F + K/2 | F | |---------------------------------| | F + K/2 | F | F - K/2 | |---------------------------------| | F | F - K/2 | F + K |
F = 1/2 (Fa + Fb)
K = Fb - Fa
.. option:: fps_spf_matrix_mo
.. code:: text
double precision, allocatable :: fps_spf_matrix_mo (mo_tot_num,mo_tot_num)
File: DIIS.irp.f
Commutator FPS - SPF in MO basis
.. option:: diagonal_fock_matrix_mo_sum
.. code:: text
double precision, allocatable :: diagonal_fock_matrix_mo_sum (mo_tot_num)
File: diagonalize_fock.irp.f
diagonal element of the fock matrix calculated as the sum over all the interactions with all the electrons in the RHF determinant diagonal_Fock_matrix_mo_sum(i) = sum_{j=1, N_elec} 2 J_ij -K_ij
.. option:: hf_density_matrix_ao_alpha
.. code:: text
double precision, allocatable :: hf_density_matrix_ao_alpha (ao_num,ao_num)
File: HF_density_matrix_ao.irp.f
S^{-1}.P_alpha.S^{-1}
.. option:: hf_density_matrix_ao_beta
.. code:: text
double precision, allocatable :: hf_density_matrix_ao_beta (ao_num,ao_num)
File: HF_density_matrix_ao.irp.f
S^{-1}.P_beta.S^{-1}
.. option:: eigenvalues_fock_matrix_ao
.. code:: text
double precision, allocatable :: eigenvalues_fock_matrix_ao (AO_num)
double precision, allocatable :: eigenvectors_fock_matrix_ao (AO_num,AO_num)
File: DIIS.irp.f
Eigenvalues and eigenvectors of the Fock matrix over the AO basis
.. option:: ao_bi_elec_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)
File: Fock_matrix.irp.f
Alpha Fock matrix in AO basis set
.. option:: fock_matrix_ao
.. c:var:: fock_matrix_ao
.. code:: text
double precision, allocatable :: fock_matrix_ao (ao_num,ao_num)
File: Fock_matrix.irp.f
File: :file:`Fock_matrix.irp.f`
Fock matrix in AO basis set
.. option:: diagonal_fock_matrix_mo
.. c:var:: fock_matrix_ao_alpha
.. code:: text
double precision, allocatable :: diagonal_fock_matrix_mo (mo_tot_num)
double precision, allocatable :: eigenvectors_fock_matrix_mo (ao_num,mo_tot_num)
double precision, allocatable :: fock_matrix_ao_alpha (ao_num,ao_num)
double precision, allocatable :: fock_matrix_ao_beta (ao_num,ao_num)
File: diagonalize_fock.irp.f
File: :file:`Fock_matrix.irp.f`
Diagonal Fock matrix in the MO basis
Alpha Fock matrix in AO basis set
.. c:var:: fock_matrix_ao_beta
.. code:: text
double precision, allocatable :: fock_matrix_ao_alpha (ao_num,ao_num)
double precision, allocatable :: fock_matrix_ao_beta (ao_num,ao_num)
File: :file:`Fock_matrix.irp.f`
Alpha Fock matrix in AO basis set
.. c:var:: fock_matrix_diag_mo
.. code:: text
double precision, allocatable :: fock_matrix_mo (mo_tot_num,mo_tot_num)
double precision, allocatable :: fock_matrix_diag_mo (mo_tot_num)
File: :file:`Fock_matrix.irp.f`
Fock matrix on the MO basis. For open shells, the ROHF Fock Matrix is
| F-K | F + K/2 | F | |---------------------------------| | F + K/2 | F | F - K/2 | |---------------------------------| | F | F - K/2 | F + K |
F = 1/2 (Fa + Fb)
K = Fb - Fa
.. c:var:: fock_matrix_mo
.. code:: text
double precision, allocatable :: fock_matrix_mo (mo_tot_num,mo_tot_num)
double precision, allocatable :: fock_matrix_diag_mo (mo_tot_num)
File: :file:`Fock_matrix.irp.f`
Fock matrix on the MO basis. For open shells, the ROHF Fock Matrix is
| F-K | F + K/2 | F | |---------------------------------| | F + K/2 | F | F - K/2 | |---------------------------------| | F | F - K/2 | F + K |
F = 1/2 (Fa + Fb)
K = Fb - Fa
.. c:var:: fock_matrix_mo_alpha
.. code:: text
double precision, allocatable :: fock_matrix_mo_alpha (mo_tot_num,mo_tot_num)
File: :file:`Fock_matrix.irp.f`
Fock matrix on the MO basis
.. c:var:: fock_matrix_mo_beta
.. code:: text
double precision, allocatable :: fock_matrix_mo_beta (mo_tot_num,mo_tot_num)
File: :file:`Fock_matrix.irp.f`
Fock matrix on the MO basis
.. c:var:: fps_spf_matrix_ao
.. code:: text
double precision, allocatable :: fps_spf_matrix_ao (AO_num,AO_num)
File: :file:`DIIS.irp.f`
Commutator FPS - SPF
.. c:var:: fps_spf_matrix_mo
.. code:: text
double precision, allocatable :: fps_spf_matrix_mo (mo_tot_num,mo_tot_num)
File: :file:`DIIS.irp.f`
Commutator FPS - SPF in MO basis
.. c:var:: hf_density_matrix_ao
.. code:: text
double precision, allocatable :: hf_density_matrix_ao (ao_num,ao_num)
File: :file:`HF_density_matrix_ao.irp.f`
S^{-1}.P.S^{-1} where P = C.C^t
.. c:var:: hf_density_matrix_ao_alpha
.. code:: text
double precision, allocatable :: hf_density_matrix_ao_alpha (ao_num,ao_num)
File: :file:`HF_density_matrix_ao.irp.f`
S^{-1}.P_alpha.S^{-1}
.. c:var:: hf_density_matrix_ao_beta
.. code:: text
double precision, allocatable :: hf_density_matrix_ao_beta (ao_num,ao_num)
File: :file:`HF_density_matrix_ao.irp.f`
S^{-1}.P_beta.S^{-1}
.. c:var:: hf_energy
.. code:: text
double precision :: hf_energy
File: :file:`Fock_matrix.irp.f`
Hartree-Fock energy
.. c:var:: threshold_diis_nonzero
.. code:: text
double precision :: threshold_diis_nonzero
File: :file:`DIIS.irp.f`
If threshold_DIIS is zero, choose sqrt(thresh_scf)
Subroutines / functions
-----------------------
.. c:function:: create_guess
.. code:: text
subroutine create_guess
File: :file:`SCF.irp.f`
Create a MO guess if no MOs are present in the EZFIO directory
.. c:function:: damping_scf
.. code:: text
subroutine damping_SCF
File: :file:`damping_SCF.irp.f`
.. c:function:: huckel_guess
.. code:: text
subroutine huckel_guess
File: :file:`huckel.irp.f`
Build the MOs using the extended Huckel model
.. c:function:: roothaan_hall_scf
.. code:: text
subroutine Roothaan_Hall_SCF
File: :file:`Roothaan_Hall_SCF.irp.f`
Roothaan-Hall algorithm for SCF Hartree-Fock calculation
.. c:function:: run
.. code:: text
subroutine run
File: :file:`SCF.irp.f`
Run SCF calculation
.. c:function:: scf
.. code:: text
subroutine scf
File: :file:`SCF.irp.f`
Produce `Hartree_Fock` MO orbital output: mo_basis.mo_tot_num mo_basis.mo_label mo_basis.ao_md5 mo_basis.mo_coef mo_basis.mo_occ output: hartree_fock.energy optional: mo_basis.mo_coef

File diff suppressed because it is too large Load Diff

View File

@ -35,3 +35,79 @@ EZFIO parameters
The |PT2| correction at each iteration
Providers
---------
.. c:var:: extrapolated_energy
.. code:: text
double precision, allocatable :: extrapolated_energy (N_iter,N_states)
File: :file:`iterations.irp.f`
Extrapolated energy, using E_var = f(PT2) where PT2=0
.. c:var:: n_iter
.. code:: text
integer :: n_iter
File: :file:`io.irp.f`
number of iterations
Subroutines / functions
-----------------------
.. c:function:: print_extrapolated_energy
.. code:: text
subroutine print_extrapolated_energy(e_,pt2_)
File: :file:`print_extrapolation.irp.f`
Print the extrapolated energy in the output
.. c:function:: print_summary
.. code:: text
subroutine print_summary(e_,pt2_,error_,variance_,norm_)
File: :file:`print_summary.irp.f`
Print the extrapolated energy in the output
.. c:function:: save_iterations
.. code:: text
subroutine save_iterations(e_, pt2_,n_)
File: :file:`iterations.irp.f`
Update the energy in the EZFIO file.

View File

@ -63,3 +63,287 @@ EZFIO parameters
MD5 checksum characterizing the |AO| basis set.
Providers
---------
.. c:var:: mo_coef
.. code:: text
double precision, allocatable :: mo_coef (ao_num,mo_tot_num)
File: :file:`mos.irp.f`
Molecular orbital coefficients on AO basis set mo_coef(i,j) = coefficient of the ith ao on the jth mo mo_label : Label characterizing the MOS (local, canonical, natural, etc)
.. c:var:: mo_coef_in_ao_ortho_basis
.. code:: text
double precision, allocatable :: mo_coef_in_ao_ortho_basis (ao_num,mo_tot_num)
File: :file:`mos.irp.f`
MO coefficients in orthogonalized AO basis
C^(-1).C_mo
.. c:var:: mo_coef_transp
.. code:: text
double precision, allocatable :: mo_coef_transp (mo_tot_num,ao_num)
File: :file:`mos.irp.f`
Molecular orbital coefficients on AO basis set
.. c:var:: mo_label
.. code:: text
character*(64) :: mo_label
File: :file:`mos.irp.f`
Molecular orbital coefficients on AO basis set mo_coef(i,j) = coefficient of the ith ao on the jth mo mo_label : Label characterizing the MOS (local, canonical, natural, etc)
.. c:var:: mo_num
.. code:: text
integer :: mo_num
File: :file:`mos.irp.f`
mo_tot_num without the highest deleted MOs
.. c:var:: mo_occ
.. code:: text
double precision, allocatable :: mo_occ (mo_tot_num)
File: :file:`mos.irp.f`
MO occupation numbers
.. c:var:: mo_tot_num
.. code:: text
integer :: mo_tot_num
File: :file:`mos.irp.f`
Number of MOs
Subroutines / functions
-----------------------
.. c:function:: ao_ortho_cano_to_ao
.. code:: text
subroutine ao_ortho_cano_to_ao(A_ao,LDA_ao,A,LDA)
File: :file:`mos.irp.f`
Transform A from the AO basis to the orthogonal AO basis
C^(-1).A_ao.Ct^(-1)
.. c:function:: ao_to_mo
.. code:: text
subroutine ao_to_mo(A_ao,LDA_ao,A_mo,LDA_mo)
File: :file:`mos.irp.f`
Transform A from the AO basis to the MO basis
Ct.A_ao.C
.. c:function:: give_all_mos_at_r
.. code:: text
subroutine give_all_mos_at_r(r,mos_array)
File: :file:`utils.irp.f`
.. c:function:: give_specific_mos_at_r
.. code:: text
subroutine give_specific_mos_at_r(r,mos_array, mo_coef_specific)
File: :file:`utils.irp.f`
.. c:function:: mix_mo_jk
.. code:: text
subroutine mix_mo_jk(j,k)
File: :file:`mos.irp.f`
subroutine that rotates the jth MO with the kth MO to give two new MO's that are '+' = 1/sqrt(2) (|j> + |k>) '-' = 1/sqrt(2) (|j> - |k>) by convention, the '+' MO is in the lower index (min(j,k)) by convention, the '-' MO is in the greater index (max(j,k))
.. c:function:: mo_as_eigvectors_of_mo_matrix
.. code:: text
subroutine mo_as_eigvectors_of_mo_matrix(matrix,n,m,label,sign,output)
File: :file:`utils.irp.f`
.. c:function:: mo_as_eigvectors_of_mo_matrix_sort_by_observable
.. code:: text
subroutine mo_as_eigvectors_of_mo_matrix_sort_by_observable(matrix,observable,n,m,label)
File: :file:`utils.irp.f`
.. c:function:: mo_as_svd_vectors_of_mo_matrix
.. code:: text
subroutine mo_as_svd_vectors_of_mo_matrix(matrix,lda,m,n,label)
File: :file:`utils.irp.f`
.. c:function:: mo_as_svd_vectors_of_mo_matrix_eig
.. code:: text
subroutine mo_as_svd_vectors_of_mo_matrix_eig(matrix,lda,m,n,eig,label)
File: :file:`utils.irp.f`
.. c:function:: mo_sort_by_observable
.. code:: text
subroutine mo_sort_by_observable(observable,label)
File: :file:`utils.irp.f`
.. c:function:: mo_to_ao_no_overlap
.. code:: text
subroutine mo_to_ao_no_overlap(A_mo,LDA_mo,A_ao,LDA_ao)
File: :file:`mos.irp.f`
Transform A from the MO basis to the S^-1 AO basis Useful for density matrix
.. c:function:: save_mos
.. code:: text
subroutine save_mos
File: :file:`utils.irp.f`
.. c:function:: save_mos_truncated
.. code:: text
subroutine save_mos_truncated(n)
File: :file:`utils.irp.f`

View File

@ -36,3 +36,249 @@ EZFIO parameters
Read/Write |MO| one-electron integrals from/to disk [ Write | Read | None ]
Default: None
Providers
---------
.. c:var:: mo_dipole_x
.. code:: text
double precision, allocatable :: mo_dipole_x (mo_tot_num,mo_tot_num)
double precision, allocatable :: mo_dipole_y (mo_tot_num,mo_tot_num)
double precision, allocatable :: mo_dipole_z (mo_tot_num,mo_tot_num)
File: :file:`spread_dipole_mo.irp.f`
array of the integrals of MO_i * x MO_j array of the integrals of MO_i * y MO_j array of the integrals of MO_i * z MO_j
.. c:var:: mo_dipole_y
.. code:: text
double precision, allocatable :: mo_dipole_x (mo_tot_num,mo_tot_num)
double precision, allocatable :: mo_dipole_y (mo_tot_num,mo_tot_num)
double precision, allocatable :: mo_dipole_z (mo_tot_num,mo_tot_num)
File: :file:`spread_dipole_mo.irp.f`
array of the integrals of MO_i * x MO_j array of the integrals of MO_i * y MO_j array of the integrals of MO_i * z MO_j
.. c:var:: mo_dipole_z
.. code:: text
double precision, allocatable :: mo_dipole_x (mo_tot_num,mo_tot_num)
double precision, allocatable :: mo_dipole_y (mo_tot_num,mo_tot_num)
double precision, allocatable :: mo_dipole_z (mo_tot_num,mo_tot_num)
File: :file:`spread_dipole_mo.irp.f`
array of the integrals of MO_i * x MO_j array of the integrals of MO_i * y MO_j array of the integrals of MO_i * z MO_j
.. c:var:: mo_kinetic_integral
.. code:: text
double precision, allocatable :: mo_kinetic_integral (mo_tot_num,mo_tot_num)
File: :file:`kin_mo_ints.irp.f`
Kinetic energy integrals in the MO basis
.. c:var:: mo_mono_elec_integral
.. code:: text
double precision, allocatable :: mo_mono_elec_integral (mo_tot_num,mo_tot_num)
File: :file:`mo_mono_ints.irp.f`
array of the mono electronic hamiltonian on the MOs basis : sum of the kinetic and nuclear electronic potential (and pseudo potential if needed)
.. c:var:: mo_nucl_elec_integral
.. code:: text
double precision, allocatable :: mo_nucl_elec_integral (mo_tot_num,mo_tot_num)
File: :file:`pot_mo_ints.irp.f`
interaction nuclear electron on the MO basis
.. c:var:: mo_nucl_elec_integral_per_atom
.. code:: text
double precision, allocatable :: mo_nucl_elec_integral_per_atom (mo_tot_num,mo_tot_num,nucl_num)
File: :file:`pot_mo_ints.irp.f`
mo_nucl_elec_integral_per_atom(i,j,k) = -<MO(i)|1/|r-Rk|MO(j)> where Rk is the geometry of the kth atom
.. c:var:: mo_overlap
.. code:: text
double precision, allocatable :: mo_overlap (mo_tot_num,mo_tot_num)
File: :file:`mo_overlap.irp.f`
.. c:var:: mo_pseudo_integral
.. code:: text
double precision, allocatable :: mo_pseudo_integral (mo_tot_num,mo_tot_num)
File: :file:`pot_mo_pseudo_ints.irp.f`
interaction nuclear electron on the MO basis
.. c:var:: mo_spread_x
.. code:: text
double precision, allocatable :: mo_spread_x (mo_tot_num,mo_tot_num)
double precision, allocatable :: mo_spread_y (mo_tot_num,mo_tot_num)
double precision, allocatable :: mo_spread_z (mo_tot_num,mo_tot_num)
File: :file:`spread_dipole_mo.irp.f`
array of the integrals of MO_i * x^2 MO_j array of the integrals of MO_i * y^2 MO_j array of the integrals of MO_i * z^2 MO_j
.. c:var:: mo_spread_y
.. code:: text
double precision, allocatable :: mo_spread_x (mo_tot_num,mo_tot_num)
double precision, allocatable :: mo_spread_y (mo_tot_num,mo_tot_num)
double precision, allocatable :: mo_spread_z (mo_tot_num,mo_tot_num)
File: :file:`spread_dipole_mo.irp.f`
array of the integrals of MO_i * x^2 MO_j array of the integrals of MO_i * y^2 MO_j array of the integrals of MO_i * z^2 MO_j
.. c:var:: mo_spread_z
.. code:: text
double precision, allocatable :: mo_spread_x (mo_tot_num,mo_tot_num)
double precision, allocatable :: mo_spread_y (mo_tot_num,mo_tot_num)
double precision, allocatable :: mo_spread_z (mo_tot_num,mo_tot_num)
File: :file:`spread_dipole_mo.irp.f`
array of the integrals of MO_i * x^2 MO_j array of the integrals of MO_i * y^2 MO_j array of the integrals of MO_i * z^2 MO_j
.. c:var:: read_mo_one_integrals
.. code:: text
logical :: read_mo_one_integrals
logical :: write_mo_one_integrals
File: :file:`read_write.irp.f`
One level of abstraction for disk_access_mo_integrals
.. c:var:: s_mo_coef
.. code:: text
double precision, allocatable :: s_mo_coef (ao_num,mo_tot_num)
File: :file:`ao_to_mo.irp.f`
Product S.C where S is the overlap matrix in the AO basis and C the mo_coef matrix.
.. c:var:: write_mo_one_integrals
.. code:: text
logical :: read_mo_one_integrals
logical :: write_mo_one_integrals
File: :file:`read_write.irp.f`
One level of abstraction for disk_access_mo_integrals
Subroutines / functions
-----------------------
.. c:function:: mo_to_ao
.. code:: text
subroutine mo_to_ao(A_mo,LDA_mo,A_ao,LDA_ao)
File: :file:`ao_to_mo.irp.f`
Transform A from the MO basis to the AO basis
(S.C).A_mo.(S.C)t
.. c:function:: orthonormalize_mos
.. code:: text
subroutine orthonormalize_mos
File: :file:`orthonormalize.irp.f`

View File

@ -11,3 +11,77 @@ MOGuess
Guess for |MOs|.
Providers
---------
.. c:var:: ao_ortho_canonical_nucl_elec_integral
.. code:: text
double precision, allocatable :: ao_ortho_canonical_nucl_elec_integral (mo_tot_num,mo_tot_num)
File: :file:`pot_mo_ortho_canonical_ints.irp.f`
.. c:var:: ao_ortho_lowdin_coef
.. code:: text
double precision, allocatable :: ao_ortho_lowdin_coef (ao_num,ao_num)
File: :file:`mo_ortho_lowdin.irp.f`
matrix of the coefficients of the mos generated by the orthonormalization by the S^{-1/2} canonical transformation of the aos ao_ortho_lowdin_coef(i,j) = coefficient of the ith ao on the jth ao_ortho_lowdin orbital
.. c:var:: ao_ortho_lowdin_nucl_elec_integral
.. code:: text
double precision, allocatable :: ao_ortho_lowdin_nucl_elec_integral (mo_tot_num,mo_tot_num)
File: :file:`pot_mo_ortho_lowdin_ints.irp.f`
.. c:var:: ao_ortho_lowdin_overlap
.. code:: text
double precision, allocatable :: ao_ortho_lowdin_overlap (ao_num,ao_num)
File: :file:`mo_ortho_lowdin.irp.f`
overlap matrix of the ao_ortho_lowdin supposed to be the Identity
Subroutines / functions
-----------------------
.. c:function:: hcore_guess
.. code:: text
subroutine hcore_guess
File: :file:`h_core_guess_routine.irp.f`
Produce `H_core` MO orbital

View File

@ -10,3 +10,107 @@ MPI
Contains all the functions and providers for parallelization with |MPI|.
Providers
---------
.. c:var:: mpi_initialized
.. code:: text
logical :: mpi_initialized
File: :file:`mpi.irp.f`
Always true. Initialized MPI
.. c:var:: mpi_master
.. code:: text
logical :: mpi_master
File: :file:`mpi.irp.f`
If true, rank is zero
.. c:var:: mpi_rank
.. code:: text
integer :: mpi_rank
integer :: mpi_size
File: :file:`mpi.irp.f`
Rank of MPI process and number of MPI processes
.. c:var:: mpi_size
.. code:: text
integer :: mpi_rank
integer :: mpi_size
File: :file:`mpi.irp.f`
Rank of MPI process and number of MPI processes
Subroutines / functions
-----------------------
.. c:function:: broadcast_chunks_double
.. code:: text
subroutine broadcast_chunks_double(A, LDA)
File: :file:`mpi.irp.f_template_97`
Broadcast with chunks of ~2GB
.. c:function:: broadcast_chunks_integer
.. code:: text
subroutine broadcast_chunks_integer(A, LDA)
File: :file:`mpi.irp.f_template_97`
Broadcast with chunks of ~2GB
.. c:function:: broadcast_chunks_integer8
.. code:: text
subroutine broadcast_chunks_integer8(A, LDA)
File: :file:`mpi.irp.f_template_97`
Broadcast with chunks of ~2GB

File diff suppressed because it is too large Load Diff

View File

@ -48,3 +48,304 @@ EZFIO parameters
Nuclear repulsion (Computed automaticaly or Read in the |EZFIO|)
Providers
---------
.. c:var:: center_of_mass
.. code:: text
double precision, allocatable :: center_of_mass (3)
File: :file:`nuclei.irp.f`
Center of mass of the molecule
.. c:var:: element_mass
.. code:: text
character*(4), allocatable :: element_name (0:127)
double precision, allocatable :: element_mass (0:127)
File: :file:`nuclei.irp.f`
Array of the name of element, sorted by nuclear charge (integer)
.. c:var:: element_name
.. code:: text
character*(4), allocatable :: element_name (0:127)
double precision, allocatable :: element_mass (0:127)
File: :file:`nuclei.irp.f`
Array of the name of element, sorted by nuclear charge (integer)
.. c:var:: inertia_tensor
.. code:: text
double precision, allocatable :: inertia_tensor (3,3)
File: :file:`inertia.irp.f`
Inertia tensor
.. c:var:: inertia_tensor_eigenvalues
.. code:: text
double precision, allocatable :: inertia_tensor_eigenvectors (3,3)
double precision, allocatable :: inertia_tensor_eigenvalues (3)
File: :file:`inertia.irp.f`
Eigenvectors/eigenvalues of the inertia_tensor. Used to find normal orientation.
.. c:var:: inertia_tensor_eigenvectors
.. code:: text
double precision, allocatable :: inertia_tensor_eigenvectors (3,3)
double precision, allocatable :: inertia_tensor_eigenvalues (3)
File: :file:`inertia.irp.f`
Eigenvectors/eigenvalues of the inertia_tensor. Used to find normal orientation.
.. c:var:: nucl_coord
.. code:: text
double precision, allocatable :: nucl_coord (nucl_num,3)
File: :file:`nuclei.irp.f`
Nuclear coordinates in the format (:, {x,y,z})
.. c:var:: nucl_coord_transp
.. code:: text
double precision, allocatable :: nucl_coord_transp (3,nucl_num)
File: :file:`nuclei.irp.f`
Transposed array of nucl_coord
.. c:var:: nucl_dist
.. code:: text
double precision, allocatable :: nucl_dist_2 (nucl_num,nucl_num)
double precision, allocatable :: nucl_dist_vec_x (nucl_num,nucl_num)
double precision, allocatable :: nucl_dist_vec_y (nucl_num,nucl_num)
double precision, allocatable :: nucl_dist_vec_z (nucl_num,nucl_num)
double precision, allocatable :: nucl_dist (nucl_num,nucl_num)
File: :file:`nuclei.irp.f`
nucl_dist : Nucleus-nucleus distances nucl_dist_2 : Nucleus-nucleus distances squared nucl_dist_vec : Nucleus-nucleus distances vectors
.. c:var:: nucl_dist_2
.. code:: text
double precision, allocatable :: nucl_dist_2 (nucl_num,nucl_num)
double precision, allocatable :: nucl_dist_vec_x (nucl_num,nucl_num)
double precision, allocatable :: nucl_dist_vec_y (nucl_num,nucl_num)
double precision, allocatable :: nucl_dist_vec_z (nucl_num,nucl_num)
double precision, allocatable :: nucl_dist (nucl_num,nucl_num)
File: :file:`nuclei.irp.f`
nucl_dist : Nucleus-nucleus distances nucl_dist_2 : Nucleus-nucleus distances squared nucl_dist_vec : Nucleus-nucleus distances vectors
.. c:var:: nucl_dist_vec_x
.. code:: text
double precision, allocatable :: nucl_dist_2 (nucl_num,nucl_num)
double precision, allocatable :: nucl_dist_vec_x (nucl_num,nucl_num)
double precision, allocatable :: nucl_dist_vec_y (nucl_num,nucl_num)
double precision, allocatable :: nucl_dist_vec_z (nucl_num,nucl_num)
double precision, allocatable :: nucl_dist (nucl_num,nucl_num)
File: :file:`nuclei.irp.f`
nucl_dist : Nucleus-nucleus distances nucl_dist_2 : Nucleus-nucleus distances squared nucl_dist_vec : Nucleus-nucleus distances vectors
.. c:var:: nucl_dist_vec_y
.. code:: text
double precision, allocatable :: nucl_dist_2 (nucl_num,nucl_num)
double precision, allocatable :: nucl_dist_vec_x (nucl_num,nucl_num)
double precision, allocatable :: nucl_dist_vec_y (nucl_num,nucl_num)
double precision, allocatable :: nucl_dist_vec_z (nucl_num,nucl_num)
double precision, allocatable :: nucl_dist (nucl_num,nucl_num)
File: :file:`nuclei.irp.f`
nucl_dist : Nucleus-nucleus distances nucl_dist_2 : Nucleus-nucleus distances squared nucl_dist_vec : Nucleus-nucleus distances vectors
.. c:var:: nucl_dist_vec_z
.. code:: text
double precision, allocatable :: nucl_dist_2 (nucl_num,nucl_num)
double precision, allocatable :: nucl_dist_vec_x (nucl_num,nucl_num)
double precision, allocatable :: nucl_dist_vec_y (nucl_num,nucl_num)
double precision, allocatable :: nucl_dist_vec_z (nucl_num,nucl_num)
double precision, allocatable :: nucl_dist (nucl_num,nucl_num)
File: :file:`nuclei.irp.f`
nucl_dist : Nucleus-nucleus distances nucl_dist_2 : Nucleus-nucleus distances squared nucl_dist_vec : Nucleus-nucleus distances vectors
.. c:var:: nuclear_repulsion
.. code:: text
double precision :: nuclear_repulsion
File: :file:`nuclei.irp.f`
Nuclear repulsion energy
.. c:var:: positive_charge_barycentre
.. code:: text
double precision, allocatable :: positive_charge_barycentre (3)
File: :file:`nuclei.irp.f`
Centroid of the positive charges
.. c:var:: slater_bragg_radii
.. code:: text
double precision, allocatable :: slater_bragg_radii (100)
File: :file:`atomic_radii.irp.f`
atomic radii in Angstrom defined in table I of JCP 41, 3199 (1964) Slater execpt for the Hydrogen atom where we took the value of Becke (1988, JCP)
.. c:var:: slater_bragg_radii_per_atom
.. code:: text
double precision, allocatable :: slater_bragg_radii_per_atom (nucl_num)
File: :file:`atomic_radii.irp.f`
.. c:var:: slater_bragg_radii_per_atom_ua
.. code:: text
double precision, allocatable :: slater_bragg_radii_per_atom_ua (nucl_num)
File: :file:`atomic_radii.irp.f`
.. c:var:: slater_bragg_radii_ua
.. code:: text
double precision, allocatable :: slater_bragg_radii_ua (100)
File: :file:`atomic_radii.irp.f`
.. c:var:: slater_bragg_type_inter_distance
.. code:: text
double precision, allocatable :: slater_bragg_type_inter_distance (nucl_num,nucl_num)
File: :file:`atomic_radii.irp.f`
.. c:var:: slater_bragg_type_inter_distance_ua
.. code:: text
double precision, allocatable :: slater_bragg_type_inter_distance_ua (nucl_num,nucl_num)
File: :file:`atomic_radii.irp.f`

View File

@ -107,3 +107,694 @@ EZFIO parameters
Type of zeroth-order Hamiltonian [ EN | Barycentric | Variance | SOP ]
Default: EN
Providers
---------
.. c:var:: fill_h_apply_buffer_selection
.. code:: text
subroutine fill_H_apply_buffer_selection(n_selected,det_buffer,e_2_pert_buffer,coef_pert_buffer, &
N_st,Nint,iproc,select_max_out)
File: :file:`selection.irp.f`
Fill the H_apply buffer with determiants for the selection
.. c:var:: max_exc_pert
.. code:: text
integer :: max_exc_pert
File: :file:`exc_max.irp.f`
.. c:var:: selection_criterion
.. code:: text
double precision :: selection_criterion
double precision :: selection_criterion_min
double precision :: selection_criterion_factor
File: :file:`selection.irp.f`
Threshold to select determinants. Set by selection routines.
.. c:var:: selection_criterion_factor
.. code:: text
double precision :: selection_criterion
double precision :: selection_criterion_min
double precision :: selection_criterion_factor
File: :file:`selection.irp.f`
Threshold to select determinants. Set by selection routines.
.. c:var:: selection_criterion_min
.. code:: text
double precision :: selection_criterion
double precision :: selection_criterion_min
double precision :: selection_criterion_factor
File: :file:`selection.irp.f`
Threshold to select determinants. Set by selection routines.
.. c:var:: var_pt2_ratio
.. code:: text
double precision :: var_pt2_ratio
File: :file:`var_pt2_ratio_provider.irp.f`
The selection process stops when the energy ratio variational/(variational+PT2) is equal to var_pt2_ratio
Subroutines / functions
-----------------------
.. c:function:: i_h_psi_pert_new_minilist
.. code:: text
subroutine i_H_psi_pert_new_minilist(key,keys,idx_key,N_minilist,coef,Nint,Ndet,Ndet_max,Nstate,i_H_psi_array,coef_pert)
File: :file:`pt2_new.irp.f`
Computes <i|H|Psi> = \sum_J c_J <i|H|J>.
Uses filter_connected_i_H_psi0 to get all the |J> to which |i> is connected. The |J> are searched in short pre-computed lists.
.. c:function:: perturb_buffer_by_mono_decontracted
.. code:: text
subroutine perturb_buffer_by_mono_decontracted(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)
File: :file:`perturbation.irp.f_shell_13`
Applly pertubration ``decontracted`` to the buffer of determinants generated in the H_apply routine.
.. c:function:: perturb_buffer_by_mono_dummy
.. code:: text
subroutine perturb_buffer_by_mono_dummy(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)
File: :file:`perturbation.irp.f_shell_13`
Applly pertubration ``dummy`` to the buffer of determinants generated in the H_apply routine.
.. c:function:: perturb_buffer_by_mono_epstein_nesbet
.. code:: text
subroutine perturb_buffer_by_mono_epstein_nesbet(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)
File: :file:`perturbation.irp.f_shell_13`
Applly pertubration ``epstein_nesbet`` to the buffer of determinants generated in the H_apply routine.
.. c:function:: perturb_buffer_by_mono_epstein_nesbet_2x2
.. code:: text
subroutine perturb_buffer_by_mono_epstein_nesbet_2x2(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)
File: :file:`perturbation.irp.f_shell_13`
Applly pertubration ``epstein_nesbet_2x2`` to the buffer of determinants generated in the H_apply routine.
.. c:function:: perturb_buffer_by_mono_epstein_nesbet_2x2_no_ci_diag
.. code:: text
subroutine perturb_buffer_by_mono_epstein_nesbet_2x2_no_ci_diag(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)
File: :file:`perturbation.irp.f_shell_13`
Applly pertubration ``epstein_nesbet_2x2_no_ci_diag`` to the buffer of determinants generated in the H_apply routine.
.. c:function:: perturb_buffer_by_mono_epstein_nesbet_sc2
.. code:: text
subroutine perturb_buffer_by_mono_epstein_nesbet_sc2(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)
File: :file:`perturbation.irp.f_shell_13`
Applly pertubration ``epstein_nesbet_sc2`` to the buffer of determinants generated in the H_apply routine.
.. c:function:: perturb_buffer_by_mono_epstein_nesbet_sc2_no_projected
.. code:: text
subroutine perturb_buffer_by_mono_epstein_nesbet_sc2_no_projected(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)
File: :file:`perturbation.irp.f_shell_13`
Applly pertubration ``epstein_nesbet_sc2_no_projected`` to the buffer of determinants generated in the H_apply routine.
.. c:function:: perturb_buffer_by_mono_epstein_nesbet_sc2_projected
.. code:: text
subroutine perturb_buffer_by_mono_epstein_nesbet_sc2_projected(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)
File: :file:`perturbation.irp.f_shell_13`
Applly pertubration ``epstein_nesbet_sc2_projected`` to the buffer of determinants generated in the H_apply routine.
.. c:function:: perturb_buffer_by_mono_h_core
.. code:: text
subroutine perturb_buffer_by_mono_h_core(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)
File: :file:`perturbation.irp.f_shell_13`
Applly pertubration ``h_core`` to the buffer of determinants generated in the H_apply routine.
.. c:function:: perturb_buffer_by_mono_moller_plesset
.. code:: text
subroutine perturb_buffer_by_mono_moller_plesset(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)
File: :file:`perturbation.irp.f_shell_13`
Applly pertubration ``moller_plesset`` to the buffer of determinants generated in the H_apply routine.
.. c:function:: perturb_buffer_by_mono_moller_plesset_general
.. code:: text
subroutine perturb_buffer_by_mono_moller_plesset_general(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)
File: :file:`perturbation.irp.f_shell_13`
Applly pertubration ``moller_plesset_general`` to the buffer of determinants generated in the H_apply routine.
.. c:function:: perturb_buffer_by_mono_qdpt
.. code:: text
subroutine perturb_buffer_by_mono_qdpt(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)
File: :file:`perturbation.irp.f_shell_13`
Applly pertubration ``qdpt`` to the buffer of determinants generated in the H_apply routine.
.. c:function:: perturb_buffer_decontracted
.. code:: text
subroutine perturb_buffer_decontracted(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)
File: :file:`perturbation.irp.f_shell_13`
Applly pertubration ``decontracted`` to the buffer of determinants generated in the H_apply routine.
.. c:function:: perturb_buffer_dummy
.. code:: text
subroutine perturb_buffer_dummy(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)
File: :file:`perturbation.irp.f_shell_13`
Applly pertubration ``dummy`` to the buffer of determinants generated in the H_apply routine.
.. c:function:: perturb_buffer_epstein_nesbet
.. code:: text
subroutine perturb_buffer_epstein_nesbet(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)
File: :file:`perturbation.irp.f_shell_13`
Applly pertubration ``epstein_nesbet`` to the buffer of determinants generated in the H_apply routine.
.. c:function:: perturb_buffer_epstein_nesbet_2x2
.. code:: text
subroutine perturb_buffer_epstein_nesbet_2x2(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)
File: :file:`perturbation.irp.f_shell_13`
Applly pertubration ``epstein_nesbet_2x2`` to the buffer of determinants generated in the H_apply routine.
.. c:function:: perturb_buffer_epstein_nesbet_2x2_no_ci_diag
.. code:: text
subroutine perturb_buffer_epstein_nesbet_2x2_no_ci_diag(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)
File: :file:`perturbation.irp.f_shell_13`
Applly pertubration ``epstein_nesbet_2x2_no_ci_diag`` to the buffer of determinants generated in the H_apply routine.
.. c:function:: perturb_buffer_epstein_nesbet_sc2
.. code:: text
subroutine perturb_buffer_epstein_nesbet_sc2(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)
File: :file:`perturbation.irp.f_shell_13`
Applly pertubration ``epstein_nesbet_sc2`` to the buffer of determinants generated in the H_apply routine.
.. c:function:: perturb_buffer_epstein_nesbet_sc2_no_projected
.. code:: text
subroutine perturb_buffer_epstein_nesbet_sc2_no_projected(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)
File: :file:`perturbation.irp.f_shell_13`
Applly pertubration ``epstein_nesbet_sc2_no_projected`` to the buffer of determinants generated in the H_apply routine.
.. c:function:: perturb_buffer_epstein_nesbet_sc2_projected
.. code:: text
subroutine perturb_buffer_epstein_nesbet_sc2_projected(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)
File: :file:`perturbation.irp.f_shell_13`
Applly pertubration ``epstein_nesbet_sc2_projected`` to the buffer of determinants generated in the H_apply routine.
.. c:function:: perturb_buffer_h_core
.. code:: text
subroutine perturb_buffer_h_core(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)
File: :file:`perturbation.irp.f_shell_13`
Applly pertubration ``h_core`` to the buffer of determinants generated in the H_apply routine.
.. c:function:: perturb_buffer_moller_plesset
.. code:: text
subroutine perturb_buffer_moller_plesset(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)
File: :file:`perturbation.irp.f_shell_13`
Applly pertubration ``moller_plesset`` to the buffer of determinants generated in the H_apply routine.
.. c:function:: perturb_buffer_moller_plesset_general
.. code:: text
subroutine perturb_buffer_moller_plesset_general(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)
File: :file:`perturbation.irp.f_shell_13`
Applly pertubration ``moller_plesset_general`` to the buffer of determinants generated in the H_apply routine.
.. c:function:: perturb_buffer_qdpt
.. code:: text
subroutine perturb_buffer_qdpt(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)
File: :file:`perturbation.irp.f_shell_13`
Applly pertubration ``qdpt`` to the buffer of determinants generated in the H_apply routine.
.. c:function:: pt2_decontracted
.. code:: text
subroutine pt2_decontracted (electronic_energy,det_ref,det_pert,fock_diag_tmp,c_pert,e_2_pert,H_pert_diag,Nint,ndet,N_st,minilist,idx_minilist,N_minilist)
File: :file:`pt2_equations.irp.f_template_606`
.. c:function:: pt2_dummy
.. code:: text
subroutine pt2_dummy (electronic_energy,det_ref,det_pert,fock_diag_tmp,c_pert,e_2_pert,H_pert_diag,Nint,ndet,N_st,minilist,idx_minilist,N_minilist)
File: :file:`pt2_equations.irp.f_template_606`
Dummy perturbation to add all connected determinants.
.. c:function:: pt2_epstein_nesbet
.. code:: text
subroutine pt2_epstein_nesbet (electronic_energy,det_ref,det_pert,fock_diag_tmp,c_pert,e_2_pert,H_pert_diag,Nint,ndet,N_st,minilist,idx_minilist,N_minilist)
File: :file:`pt2_equations.irp.f_template_606`
compute the standard Epstein-Nesbet perturbative first order coefficient and second order energetic contribution
for the various N_st states.
c_pert(i) = <psi(i)|H|det_pert>/( E(i) - <det_pert|H|det_pert> )
e_2_pert(i) = <psi(i)|H|det_pert>^2/( E(i) - <det_pert|H|det_pert> )
.. c:function:: pt2_epstein_nesbet_2x2
.. code:: text
subroutine pt2_epstein_nesbet_2x2 (electronic_energy,det_ref,det_pert,fock_diag_tmp,c_pert,e_2_pert,H_pert_diag,Nint,ndet,N_st,minilist,idx_minilist,N_minilist)
File: :file:`pt2_equations.irp.f_template_606`
compute the Epstein-Nesbet 2x2 diagonalization coefficient and energetic contribution
for the various N_st states.
e_2_pert(i) = 0.5 * (( <det_pert|H|det_pert> - E(i) ) - sqrt( ( <det_pert|H|det_pert> - E(i)) ^2 + 4 <psi(i)|H|det_pert>^2 )
c_pert(i) = e_2_pert(i)/ <psi(i)|H|det_pert>
.. c:function:: pt2_epstein_nesbet_2x2_no_ci_diag
.. code:: text
subroutine pt2_epstein_nesbet_2x2_no_ci_diag(electronic_energy,det_ref,det_pert,fock_diag_tmp,c_pert,e_2_pert,H_pert_diag,Nint,ndet,N_st,minilist,idx_minilist,N_minilist)
File: :file:`pt2_equations.irp.f_template_606`
compute the Epstein-Nesbet 2x2 diagonalization coefficient and energetic contribution
for the various N_st states.
e_2_pert(i) = 0.5 * (( <det_pert|H|det_pert> - E(i) ) - sqrt( ( <det_pert|H|det_pert> - E(i)) ^2 + 4 <psi(i)|H|det_pert>^2 )
c_pert(i) = e_2_pert(i)/ <psi(i)|H|det_pert>
.. c:function:: pt2_epstein_nesbet_sc2
.. code:: text
subroutine pt2_epstein_nesbet_sc2 (electronic_energy,det_ref,det_pert,fock_diag_tmp,c_pert,e_2_pert,H_pert_diag,Nint,ndet,N_st,minilist,idx_minilist,N_minilist)
File: :file:`pt2_equations.irp.f_template_606`
compute the standard Epstein-Nesbet perturbative first order coefficient and second order energetic contribution
for the various N_st states, but with the CISD_SC2 energies and coefficients
c_pert(i) = <psi(i)|H|det_pert>/( E(i) - <det_pert|H|det_pert> )
e_2_pert(i) = <psi(i)|H|det_pert>^2/( E(i) - <det_pert|H|det_pert> )
.. c:function:: pt2_epstein_nesbet_sc2_no_projected
.. code:: text
subroutine pt2_epstein_nesbet_SC2_no_projected (electronic_energy,det_ref,det_pert,fock_diag_tmp,c_pert,e_2_pert,H_pert_diag,Nint,ndet,N_st,minilist,idx_minilist,N_minilist)
File: :file:`pt2_equations.irp.f_template_606`
compute the Epstein-Nesbet perturbative first order coefficient and second order energetic contribution
for the various N_st states,
but with the correction in the denominator
comming from the interaction of that determinant with all the others determinants
that can be repeated by repeating all the double excitations
: you repeat all the correlation energy already taken into account in electronic_energy(1)
that could be repeated to this determinant.
In addition, for the perturbative energetic contribution you have the standard second order
e_2_pert = <psi_i|H|det_pert>^2/(Delta_E)
and also the purely projected contribution
H_pert_diag = <HF|H|det_pert> c_pert
.. c:function:: pt2_epstein_nesbet_sc2_projected
.. code:: text
subroutine pt2_epstein_nesbet_SC2_projected (electronic_energy,det_ref,det_pert,fock_diag_tmp,c_pert,e_2_pert,H_pert_diag,Nint,ndet,N_st,minilist,idx_minilist,N_minilist)
File: :file:`pt2_equations.irp.f_template_606`
compute the Epstein-Nesbet perturbative first order coefficient and second order energetic contribution
for the various N_st states,
but with the correction in the denominator
comming from the interaction of that determinant with all the others determinants
that can be repeated by repeating all the double excitations
: you repeat all the correlation energy already taken into account in electronic_energy(1)
that could be repeated to this determinant.
In addition, for the perturbative energetic contribution you have the standard second order
e_2_pert = <psi_i|H|det_pert>^2/(Delta_E)
and also the purely projected contribution
H_pert_diag = <HF|H|det_pert> c_pert
.. c:function:: pt2_h_core
.. code:: text
subroutine pt2_h_core(det_pert,c_pert,e_2_pert,H_pert_diag,Nint,ndet,N_st,minilist,idx_minilist,N_minilist)
File: :file:`pert_single.irp.f`
compute the standard Epstein-Nesbet perturbative first order coefficient and second order energetic contribution
for the various N_st states.
c_pert(i) = <psi(i)|H|det_pert>/( E(i) - <det_pert|H|det_pert> )
e_2_pert(i) = <psi(i)|H|det_pert>^2/( E(i) - <det_pert|H|det_pert> )
.. c:function:: pt2_moller_plesset
.. code:: text
subroutine pt2_moller_plesset (electronic_energy,det_ref,det_pert,fock_diag_tmp,c_pert,e_2_pert,H_pert_diag,Nint,ndet,N_st,minilist,idx_minilist,N_minilist)
File: :file:`pt2_equations.irp.f_template_606`
compute the standard Moller-Plesset perturbative first order coefficient and second order energetic contribution
for the various n_st states.
c_pert(i) = <psi(i)|H|det_pert>/(difference of orbital energies)
e_2_pert(i) = <psi(i)|H|det_pert>^2/(difference of orbital energies)
.. c:function:: pt2_moller_plesset_general
.. code:: text
subroutine pt2_moller_plesset_general (electronic_energy,det_ref,det_pert,fock_diag_tmp,c_pert,e_2_pert,H_pert_diag,Nint,ndet,N_st,minilist,idx_minilist,N_minilist)
File: :file:`pt2_equations.irp.f_template_606`
compute the general Moller-Plesset perturbative first order coefficient and second order energetic contribution
for the various n_st states.
c_pert(i) = <psi(i)|H|det_pert>/(difference of orbital energies)
e_2_pert(i) = <psi(i)|H|det_pert>^2/(difference of orbital energies)
.. c:function:: pt2_qdpt
.. code:: text
subroutine pt2_qdpt (electronic_energy,det_ref,det_pert,fock_diag_tmp,c_pert,e_2_pert,H_pert_diag,Nint,ndet,N_st,minilist,idx_minilist,N_minilist)
File: :file:`pt2_equations.irp.f_template_606`
compute the QDPT first order coefficient and second order energetic contribution
for the various N_st states.
c_pert(i) = <psi(i)|H|det_pert>/( <psi(i)|H|psi(i)> - <det_pert|H|det_pert> )
.. c:function:: remove_small_contributions
.. code:: text
subroutine remove_small_contributions
File: :file:`selection.irp.f`
Remove determinants with small contributions. N_states is assumed to be provided.
.. c:function:: repeat_all_e_corr
.. code:: text
double precision function repeat_all_e_corr(key_in)
File: :file:`pert_sc2.irp.f`

View File

@ -12,3 +12,166 @@ Reference wave function is defined as a |CAS| wave function.
This module is required for |CAS-SD|, |MRPT| or |MRCC|.
Providers
---------
.. c:var:: idx_ref
.. code:: text
integer(bit_kind), allocatable :: psi_ref (N_int,2,psi_det_size)
double precision, allocatable :: psi_ref_coef (psi_det_size,n_states)
integer, allocatable :: idx_ref (psi_det_size)
integer :: n_det_ref
File: :file:`psi_ref.irp.f`
CAS wave function, defined from the application of the CAS bitmask on the determinants. idx_cas gives the indice of the CAS determinant in psi_det.
.. c:var:: inv_norm_psi_ref
.. code:: text
double precision, allocatable :: norm_psi_ref (N_states)
double precision, allocatable :: inv_norm_psi_ref (N_states)
File: :file:`psi_ref.irp.f`
.. c:var:: n_det_ref
.. code:: text
integer(bit_kind), allocatable :: psi_ref (N_int,2,psi_det_size)
double precision, allocatable :: psi_ref_coef (psi_det_size,n_states)
integer, allocatable :: idx_ref (psi_det_size)
integer :: n_det_ref
File: :file:`psi_ref.irp.f`
CAS wave function, defined from the application of the CAS bitmask on the determinants. idx_cas gives the indice of the CAS determinant in psi_det.
.. c:var:: norm_psi_ref
.. code:: text
double precision, allocatable :: norm_psi_ref (N_states)
double precision, allocatable :: inv_norm_psi_ref (N_states)
File: :file:`psi_ref.irp.f`
.. c:var:: psi_non_ref_coef_interm_norm
.. code:: text
double precision, allocatable :: psi_non_ref_coef_interm_norm (N_det_non_ref,N_states)
File: :file:`psi_ref.irp.f`
.. c:var:: psi_ref
.. code:: text
integer(bit_kind), allocatable :: psi_ref (N_int,2,psi_det_size)
double precision, allocatable :: psi_ref_coef (psi_det_size,n_states)
integer, allocatable :: idx_ref (psi_det_size)
integer :: n_det_ref
File: :file:`psi_ref.irp.f`
CAS wave function, defined from the application of the CAS bitmask on the determinants. idx_cas gives the indice of the CAS determinant in psi_det.
.. c:var:: psi_ref_coef
.. code:: text
integer(bit_kind), allocatable :: psi_ref (N_int,2,psi_det_size)
double precision, allocatable :: psi_ref_coef (psi_det_size,n_states)
integer, allocatable :: idx_ref (psi_det_size)
integer :: n_det_ref
File: :file:`psi_ref.irp.f`
CAS wave function, defined from the application of the CAS bitmask on the determinants. idx_cas gives the indice of the CAS determinant in psi_det.
.. c:var:: psi_ref_coef_interm_norm
.. code:: text
double precision, allocatable :: psi_ref_coef_interm_norm (N_det_ref,N_states)
File: :file:`psi_ref.irp.f`
.. c:var:: psi_ref_coef_inv
.. code:: text
double precision, allocatable :: psi_ref_coef_inv (psi_det_size,n_states)
File: :file:`psi_ref.irp.f`
1/psi_ref_coef
.. c:var:: psi_ref_coef_restart
.. code:: text
integer(bit_kind), allocatable :: psi_ref_restart (N_int,2,psi_det_size)
double precision, allocatable :: psi_ref_coef_restart (psi_det_size,n_states)
File: :file:`psi_ref.irp.f`
Projection of the CAS wave function on the restart wave function.
.. c:var:: psi_ref_restart
.. code:: text
integer(bit_kind), allocatable :: psi_ref_restart (N_int,2,psi_det_size)
double precision, allocatable :: psi_ref_coef_restart (psi_det_size,n_states)
File: :file:`psi_ref.irp.f`
Projection of the CAS wave function on the restart wave function.

View File

@ -14,3 +14,369 @@ needs to be loaded with any `psi_ref_*` module.
Providers
---------
.. c:var:: h_matrix_ref
.. code:: text
double precision, allocatable :: h_matrix_ref (N_det_ref,N_det_ref)
File: :file:`psi_ref_utils.irp.f`
.. c:var:: holes_operators
.. code:: text
integer(bit_kind), allocatable :: holes_operators (N_int,2)
integer(bit_kind), allocatable :: particles_operators (N_int,2)
File: :file:`psi_ref_excitations_operators.irp.f`
holes_operators represents an array of integers where all the holes have been done going from psi_ref to psi_non_ref particles_operators represents an array of integers where all the particles have been done going from psi_ref to psi_non_ref
.. c:var:: idx_non_ref
.. code:: text
integer(bit_kind), allocatable :: psi_non_ref (N_int,2,psi_det_size)
double precision, allocatable :: psi_non_ref_coef (psi_det_size,n_states)
integer, allocatable :: idx_non_ref (psi_det_size)
integer, allocatable :: idx_non_ref_rev (psi_det_size)
integer :: n_det_non_ref
File: :file:`psi_ref_utils.irp.f`
Set of determinants which are not part of the reference, defined from the application of the reference bitmask on the determinants. idx_non_ref gives the indice of the determinant in psi_det. idx_non_ref_rev gives the reverse.
.. c:var:: idx_non_ref_from_sorted
.. code:: text
integer, allocatable :: idx_non_ref_from_sorted (N_det)
File: :file:`psi_ref_utils.irp.f`
.. c:var:: idx_non_ref_rev
.. code:: text
integer(bit_kind), allocatable :: psi_non_ref (N_int,2,psi_det_size)
double precision, allocatable :: psi_non_ref_coef (psi_det_size,n_states)
integer, allocatable :: idx_non_ref (psi_det_size)
integer, allocatable :: idx_non_ref_rev (psi_det_size)
integer :: n_det_non_ref
File: :file:`psi_ref_utils.irp.f`
Set of determinants which are not part of the reference, defined from the application of the reference bitmask on the determinants. idx_non_ref gives the indice of the determinant in psi_det. idx_non_ref_rev gives the reverse.
.. c:var:: n_det_non_ref
.. code:: text
integer(bit_kind), allocatable :: psi_non_ref (N_int,2,psi_det_size)
double precision, allocatable :: psi_non_ref_coef (psi_det_size,n_states)
integer, allocatable :: idx_non_ref (psi_det_size)
integer, allocatable :: idx_non_ref_rev (psi_det_size)
integer :: n_det_non_ref
File: :file:`psi_ref_utils.irp.f`
Set of determinants which are not part of the reference, defined from the application of the reference bitmask on the determinants. idx_non_ref gives the indice of the determinant in psi_det. idx_non_ref_rev gives the reverse.
.. c:var:: particles_operators
.. code:: text
integer(bit_kind), allocatable :: holes_operators (N_int,2)
integer(bit_kind), allocatable :: particles_operators (N_int,2)
File: :file:`psi_ref_excitations_operators.irp.f`
holes_operators represents an array of integers where all the holes have been done going from psi_ref to psi_non_ref particles_operators represents an array of integers where all the particles have been done going from psi_ref to psi_non_ref
.. c:var:: psi_non_ref
.. code:: text
integer(bit_kind), allocatable :: psi_non_ref (N_int,2,psi_det_size)
double precision, allocatable :: psi_non_ref_coef (psi_det_size,n_states)
integer, allocatable :: idx_non_ref (psi_det_size)
integer, allocatable :: idx_non_ref_rev (psi_det_size)
integer :: n_det_non_ref
File: :file:`psi_ref_utils.irp.f`
Set of determinants which are not part of the reference, defined from the application of the reference bitmask on the determinants. idx_non_ref gives the indice of the determinant in psi_det. idx_non_ref_rev gives the reverse.
.. c:var:: psi_non_ref_coef
.. code:: text
integer(bit_kind), allocatable :: psi_non_ref (N_int,2,psi_det_size)
double precision, allocatable :: psi_non_ref_coef (psi_det_size,n_states)
integer, allocatable :: idx_non_ref (psi_det_size)
integer, allocatable :: idx_non_ref_rev (psi_det_size)
integer :: n_det_non_ref
File: :file:`psi_ref_utils.irp.f`
Set of determinants which are not part of the reference, defined from the application of the reference bitmask on the determinants. idx_non_ref gives the indice of the determinant in psi_det. idx_non_ref_rev gives the reverse.
.. c:var:: psi_non_ref_coef_restart
.. code:: text
integer(bit_kind), allocatable :: psi_non_ref_restart (N_int,2,psi_det_size)
double precision, allocatable :: psi_non_ref_coef_restart (psi_det_size,n_states)
File: :file:`psi_ref_utils.irp.f`
Set of determinants which are not part of the reference, defined from the application of the reference bitmask on the determinants. idx_non_ref gives the indice of the determinant in psi_det. But this is with respect to the restart wave function.
.. c:var:: psi_non_ref_coef_sorted_bit
.. code:: text
integer(bit_kind), allocatable :: psi_non_ref_sorted_bit (N_int,2,psi_det_size)
double precision, allocatable :: psi_non_ref_coef_sorted_bit (psi_det_size,N_states)
File: :file:`psi_ref_utils.irp.f`
Reference determinants sorted to accelerate the search of a random determinant in the wave function.
.. c:var:: psi_non_ref_coef_transp
.. code:: text
double precision, allocatable :: psi_non_ref_coef_transp (n_states,psi_det_size)
File: :file:`psi_ref_utils.irp.f`
Transposed psi_non_ref_coef
.. c:var:: psi_non_ref_restart
.. code:: text
integer(bit_kind), allocatable :: psi_non_ref_restart (N_int,2,psi_det_size)
double precision, allocatable :: psi_non_ref_coef_restart (psi_det_size,n_states)
File: :file:`psi_ref_utils.irp.f`
Set of determinants which are not part of the reference, defined from the application of the reference bitmask on the determinants. idx_non_ref gives the indice of the determinant in psi_det. But this is with respect to the restart wave function.
.. c:var:: psi_non_ref_sorted_bit
.. code:: text
integer(bit_kind), allocatable :: psi_non_ref_sorted_bit (N_int,2,psi_det_size)
double precision, allocatable :: psi_non_ref_coef_sorted_bit (psi_det_size,N_states)
File: :file:`psi_ref_utils.irp.f`
Reference determinants sorted to accelerate the search of a random determinant in the wave function.
.. c:var:: psi_ref_coef_diagonalized
.. code:: text
double precision, allocatable :: psi_ref_coef_diagonalized (N_det_ref,N_states)
double precision, allocatable :: psi_ref_energy_diagonalized (N_states)
File: :file:`psi_ref_utils.irp.f`
.. c:var:: psi_ref_coef_normalized
.. code:: text
double precision, allocatable :: psi_ref_coef_normalized (psi_det_size,n_states)
File: :file:`psi_ref_utils.irp.f`
Normalized coefficients of the reference
.. c:var:: psi_ref_coef_sorted_bit
.. code:: text
integer(bit_kind), allocatable :: psi_ref_sorted_bit (N_int,2,psi_det_size)
double precision, allocatable :: psi_ref_coef_sorted_bit (psi_det_size,N_states)
File: :file:`psi_ref_utils.irp.f`
Reference determinants sorted to accelerate the search of a random determinant in the wave function.
.. c:var:: psi_ref_coef_transp
.. code:: text
double precision, allocatable :: psi_ref_coef_transp (n_states,psi_det_size)
File: :file:`psi_ref_utils.irp.f`
Transposed psi_ref_coef
.. c:var:: psi_ref_energy
.. code:: text
double precision, allocatable :: psi_ref_energy (N_states)
File: :file:`psi_ref_utils.irp.f`
.. c:var:: psi_ref_energy_diagonalized
.. code:: text
double precision, allocatable :: psi_ref_coef_diagonalized (N_det_ref,N_states)
double precision, allocatable :: psi_ref_energy_diagonalized (N_states)
File: :file:`psi_ref_utils.irp.f`
.. c:var:: psi_ref_sorted_bit
.. code:: text
integer(bit_kind), allocatable :: psi_ref_sorted_bit (N_int,2,psi_det_size)
double precision, allocatable :: psi_ref_coef_sorted_bit (psi_det_size,N_states)
File: :file:`psi_ref_utils.irp.f`
Reference determinants sorted to accelerate the search of a random determinant in the wave function.
.. c:var:: ref_hamiltonian_matrix
.. code:: text
double precision, allocatable :: ref_hamiltonian_matrix (n_det_ref,n_det_ref)
File: :file:`psi_ref_utils.irp.f`
H matrix in the Reference space
Subroutines / functions
-----------------------
.. c:function:: extract_ref
.. code:: text
subroutine extract_ref
File: :file:`extract_ref.irp.f`
Replaces the total wave function by the normalized projection on the reference
.. c:function:: get_index_in_psi_ref_sorted_bit
.. code:: text
integer function get_index_in_psi_ref_sorted_bit(key,Nint)
File: :file:`psi_ref_utils.irp.f`
Returns the index of the determinant in the ``psi_ref_sorted_bit`` array
.. c:function:: is_in_psi_ref
.. code:: text
logical function is_in_psi_ref(key,Nint)
File: :file:`psi_ref_utils.irp.f`
True if the determinant ``det`` is in the wave function

View File

@ -12,3 +12,48 @@ All the determinants are possible selectors. Only the largest contributions are
a threshold is applied to the squared norm of the wave function, with the :option:`determinants
threshold_selectors` flag.
Providers
---------
.. c:var:: n_det_selectors
.. code:: text
integer :: n_det_selectors
File: :file:`selectors.irp.f`
For Single reference wave functions, the number of selectors is 1 : the Hartree-Fock determinant
.. c:var:: psi_selectors
.. code:: text
integer(bit_kind), allocatable :: psi_selectors (N_int,2,psi_selectors_size)
double precision, allocatable :: psi_selectors_coef (psi_selectors_size,N_states)
File: :file:`selectors.irp.f`
Determinants on which we apply <i|H|psi> for perturbation.
.. c:var:: psi_selectors_coef
.. code:: text
integer(bit_kind), allocatable :: psi_selectors (N_int,2,psi_selectors_size)
double precision, allocatable :: psi_selectors_coef (psi_selectors_size,N_states)
File: :file:`selectors.irp.f`
Determinants on which we apply <i|H|psi> for perturbation.

View File

@ -11,3 +11,352 @@ Selectors_Utils
Helper functions for selectors.
Providers
---------
.. c:var:: coef_hf_selector
.. code:: text
double precision :: coef_hf_selector
double precision :: inv_selectors_coef_hf
double precision :: inv_selectors_coef_hf_squared
double precision, allocatable :: e_corr_per_selectors (N_det_selectors)
double precision, allocatable :: i_h_hf_per_selectors (N_det_selectors)
double precision, allocatable :: delta_e_per_selector (N_det_selectors)
double precision :: e_corr_double_only
double precision :: e_corr_second_order
File: :file:`e_corr_selectors.irp.f`
energy of correlation per determinant respect to the Hartree Fock determinant
for the all the double excitations in the selectors determinants
E_corr_per_selectors(i) = <D_i|H|HF> * c(D_i)/c(HF) if |D_i> is a double excitation
E_corr_per_selectors(i) = -1000.d0 if it is not a double excitation
coef_hf_selector = coefficient of the Hartree Fock determinant in the selectors determinants
.. c:var:: delta_e_per_selector
.. code:: text
double precision :: coef_hf_selector
double precision :: inv_selectors_coef_hf
double precision :: inv_selectors_coef_hf_squared
double precision, allocatable :: e_corr_per_selectors (N_det_selectors)
double precision, allocatable :: i_h_hf_per_selectors (N_det_selectors)
double precision, allocatable :: delta_e_per_selector (N_det_selectors)
double precision :: e_corr_double_only
double precision :: e_corr_second_order
File: :file:`e_corr_selectors.irp.f`
energy of correlation per determinant respect to the Hartree Fock determinant
for the all the double excitations in the selectors determinants
E_corr_per_selectors(i) = <D_i|H|HF> * c(D_i)/c(HF) if |D_i> is a double excitation
E_corr_per_selectors(i) = -1000.d0 if it is not a double excitation
coef_hf_selector = coefficient of the Hartree Fock determinant in the selectors determinants
.. c:var:: double_index_selectors
.. code:: text
integer, allocatable :: exc_degree_per_selectors (N_det_selectors)
integer, allocatable :: double_index_selectors (N_det_selectors)
integer :: n_double_selectors
File: :file:`e_corr_selectors.irp.f`
degree of excitation respect to Hartree Fock for the wave function
for the all the selectors determinants
double_index_selectors = list of the index of the double excitations
n_double_selectors = number of double excitations in the selectors determinants
.. c:var:: e_corr_double_only
.. code:: text
double precision :: coef_hf_selector
double precision :: inv_selectors_coef_hf
double precision :: inv_selectors_coef_hf_squared
double precision, allocatable :: e_corr_per_selectors (N_det_selectors)
double precision, allocatable :: i_h_hf_per_selectors (N_det_selectors)
double precision, allocatable :: delta_e_per_selector (N_det_selectors)
double precision :: e_corr_double_only
double precision :: e_corr_second_order
File: :file:`e_corr_selectors.irp.f`
energy of correlation per determinant respect to the Hartree Fock determinant
for the all the double excitations in the selectors determinants
E_corr_per_selectors(i) = <D_i|H|HF> * c(D_i)/c(HF) if |D_i> is a double excitation
E_corr_per_selectors(i) = -1000.d0 if it is not a double excitation
coef_hf_selector = coefficient of the Hartree Fock determinant in the selectors determinants
.. c:var:: e_corr_per_selectors
.. code:: text
double precision :: coef_hf_selector
double precision :: inv_selectors_coef_hf
double precision :: inv_selectors_coef_hf_squared
double precision, allocatable :: e_corr_per_selectors (N_det_selectors)
double precision, allocatable :: i_h_hf_per_selectors (N_det_selectors)
double precision, allocatable :: delta_e_per_selector (N_det_selectors)
double precision :: e_corr_double_only
double precision :: e_corr_second_order
File: :file:`e_corr_selectors.irp.f`
energy of correlation per determinant respect to the Hartree Fock determinant
for the all the double excitations in the selectors determinants
E_corr_per_selectors(i) = <D_i|H|HF> * c(D_i)/c(HF) if |D_i> is a double excitation
E_corr_per_selectors(i) = -1000.d0 if it is not a double excitation
coef_hf_selector = coefficient of the Hartree Fock determinant in the selectors determinants
.. c:var:: e_corr_second_order
.. code:: text
double precision :: coef_hf_selector
double precision :: inv_selectors_coef_hf
double precision :: inv_selectors_coef_hf_squared
double precision, allocatable :: e_corr_per_selectors (N_det_selectors)
double precision, allocatable :: i_h_hf_per_selectors (N_det_selectors)
double precision, allocatable :: delta_e_per_selector (N_det_selectors)
double precision :: e_corr_double_only
double precision :: e_corr_second_order
File: :file:`e_corr_selectors.irp.f`
energy of correlation per determinant respect to the Hartree Fock determinant
for the all the double excitations in the selectors determinants
E_corr_per_selectors(i) = <D_i|H|HF> * c(D_i)/c(HF) if |D_i> is a double excitation
E_corr_per_selectors(i) = -1000.d0 if it is not a double excitation
coef_hf_selector = coefficient of the Hartree Fock determinant in the selectors determinants
.. c:var:: exc_degree_per_selectors
.. code:: text
integer, allocatable :: exc_degree_per_selectors (N_det_selectors)
integer, allocatable :: double_index_selectors (N_det_selectors)
integer :: n_double_selectors
File: :file:`e_corr_selectors.irp.f`
degree of excitation respect to Hartree Fock for the wave function
for the all the selectors determinants
double_index_selectors = list of the index of the double excitations
n_double_selectors = number of double excitations in the selectors determinants
.. c:var:: i_h_hf_per_selectors
.. code:: text
double precision :: coef_hf_selector
double precision :: inv_selectors_coef_hf
double precision :: inv_selectors_coef_hf_squared
double precision, allocatable :: e_corr_per_selectors (N_det_selectors)
double precision, allocatable :: i_h_hf_per_selectors (N_det_selectors)
double precision, allocatable :: delta_e_per_selector (N_det_selectors)
double precision :: e_corr_double_only
double precision :: e_corr_second_order
File: :file:`e_corr_selectors.irp.f`
energy of correlation per determinant respect to the Hartree Fock determinant
for the all the double excitations in the selectors determinants
E_corr_per_selectors(i) = <D_i|H|HF> * c(D_i)/c(HF) if |D_i> is a double excitation
E_corr_per_selectors(i) = -1000.d0 if it is not a double excitation
coef_hf_selector = coefficient of the Hartree Fock determinant in the selectors determinants
.. c:var:: inv_selectors_coef_hf
.. code:: text
double precision :: coef_hf_selector
double precision :: inv_selectors_coef_hf
double precision :: inv_selectors_coef_hf_squared
double precision, allocatable :: e_corr_per_selectors (N_det_selectors)
double precision, allocatable :: i_h_hf_per_selectors (N_det_selectors)
double precision, allocatable :: delta_e_per_selector (N_det_selectors)
double precision :: e_corr_double_only
double precision :: e_corr_second_order
File: :file:`e_corr_selectors.irp.f`
energy of correlation per determinant respect to the Hartree Fock determinant
for the all the double excitations in the selectors determinants
E_corr_per_selectors(i) = <D_i|H|HF> * c(D_i)/c(HF) if |D_i> is a double excitation
E_corr_per_selectors(i) = -1000.d0 if it is not a double excitation
coef_hf_selector = coefficient of the Hartree Fock determinant in the selectors determinants
.. c:var:: inv_selectors_coef_hf_squared
.. code:: text
double precision :: coef_hf_selector
double precision :: inv_selectors_coef_hf
double precision :: inv_selectors_coef_hf_squared
double precision, allocatable :: e_corr_per_selectors (N_det_selectors)
double precision, allocatable :: i_h_hf_per_selectors (N_det_selectors)
double precision, allocatable :: delta_e_per_selector (N_det_selectors)
double precision :: e_corr_double_only
double precision :: e_corr_second_order
File: :file:`e_corr_selectors.irp.f`
energy of correlation per determinant respect to the Hartree Fock determinant
for the all the double excitations in the selectors determinants
E_corr_per_selectors(i) = <D_i|H|HF> * c(D_i)/c(HF) if |D_i> is a double excitation
E_corr_per_selectors(i) = -1000.d0 if it is not a double excitation
coef_hf_selector = coefficient of the Hartree Fock determinant in the selectors determinants
.. c:var:: n_double_selectors
.. code:: text
integer, allocatable :: exc_degree_per_selectors (N_det_selectors)
integer, allocatable :: double_index_selectors (N_det_selectors)
integer :: n_double_selectors
File: :file:`e_corr_selectors.irp.f`
degree of excitation respect to Hartree Fock for the wave function
for the all the selectors determinants
double_index_selectors = list of the index of the double excitations
n_double_selectors = number of double excitations in the selectors determinants
.. c:var:: psi_selectors_coef_transp
.. code:: text
double precision, allocatable :: psi_selectors_coef_transp (N_states,psi_selectors_size)
File: :file:`selectors.irp.f`
Transposed psi_selectors
.. c:var:: psi_selectors_diag_h_mat
.. code:: text
double precision, allocatable :: psi_selectors_diag_h_mat (psi_selectors_size)
File: :file:`selectors.irp.f`
Diagonal elements of the H matrix for each selectors
.. c:var:: psi_selectors_size
.. code:: text
integer :: psi_selectors_size
File: :file:`selectors.irp.f`
Subroutines / functions
-----------------------
.. c:function:: zmq_get_n_det_generators
.. code:: text
integer function zmq_get_N_det_generators(zmq_to_qp_run_socket, worker_id)
File: :file:`zmq.irp.f_template_102`
Get N_det_generators from the qp_run scheduler
.. c:function:: zmq_get_n_det_selectors
.. code:: text
integer function zmq_get_N_det_selectors(zmq_to_qp_run_socket, worker_id)
File: :file:`zmq.irp.f_template_102`
Get N_det_selectors from the qp_run scheduler
.. c:function:: zmq_put_n_det_generators
.. code:: text
integer function zmq_put_N_det_generators(zmq_to_qp_run_socket,worker_id)
File: :file:`zmq.irp.f_template_102`
Put N_det_generators on the qp_run scheduler
.. c:function:: zmq_put_n_det_selectors
.. code:: text
integer function zmq_put_N_det_selectors(zmq_to_qp_run_socket,worker_id)
File: :file:`zmq.irp.f_template_102`
Put N_det_selectors on the qp_run scheduler

View File

@ -11,3 +11,63 @@ Slave
Slave processes for distributed parallelism.
Subroutines / functions
-----------------------
.. c:function:: provide_everything
.. code:: text
subroutine provide_everything
File: :file:`slave_cipsi.irp.f`
.. c:function:: qp_ao_ints
.. code:: text
subroutine qp_ao_ints
File: :file:`slave_eri.irp.f`
Slave for electron repulsion integrals
.. c:function:: run_wf
.. code:: text
subroutine run_wf
File: :file:`slave_cipsi.irp.f`
.. c:function:: slave
.. code:: text
subroutine slave
File: :file:`slave_cipsi.irp.f`
Helper program for distributed parallelism

View File

@ -10,3 +10,119 @@ Tools
Useful tools are grouped in this module.
Subroutines / functions
-----------------------
.. c:function:: fcidump
.. code:: text
subroutine fcidump
File: :file:`fcidump.irp.f`
.. c:function:: print_mos
.. code:: text
subroutine print_mos
File: :file:`molden.irp.f`
.. c:function:: save_natorb
.. code:: text
subroutine save_natorb
File: :file:`save_natorb.irp.f`
.. c:function:: save_ortho_mos
.. code:: text
subroutine save_ortho_mos
File: :file:`save_ortho_mos.irp.f`
.. c:function:: write_ao_basis
.. code:: text
subroutine write_Ao_basis(i_unit_output)
File: :file:`molden.irp.f`
.. c:function:: write_geometry
.. code:: text
subroutine write_geometry(i_unit_output)
File: :file:`molden.irp.f`
.. c:function:: write_intro_gamess
.. code:: text
subroutine write_intro_gamess(i_unit_output)
File: :file:`molden.irp.f`
.. c:function:: write_mo_basis
.. code:: text
subroutine write_Mo_basis(i_unit_output)
File: :file:`molden.irp.f`

File diff suppressed because it is too large Load Diff

View File

@ -12,3 +12,874 @@ Definition of |ZeroMQ| sockets and messages.
Providers
---------
.. c:var:: qp_run_address
.. code:: text
character*(128) :: qp_run_address
integer :: zmq_port_start
File: :file:`utils.irp.f`
Address of the qp_run socket Example : tcp://130.120.229.139:12345
.. c:var:: zmq_context
.. code:: text
integer(ZMQ_PTR) :: zmq_context
integer(omp_lock_kind) :: zmq_lock
File: :file:`utils.irp.f`
Context for the ZeroMQ library
.. c:var:: zmq_lock
.. code:: text
integer(ZMQ_PTR) :: zmq_context
integer(omp_lock_kind) :: zmq_lock
File: :file:`utils.irp.f`
Context for the ZeroMQ library
.. c:var:: zmq_port_start
.. code:: text
character*(128) :: qp_run_address
integer :: zmq_port_start
File: :file:`utils.irp.f`
Address of the qp_run socket Example : tcp://130.120.229.139:12345
.. c:var:: zmq_socket_pair_inproc_address
.. code:: text
character*(128) :: zmq_socket_pull_tcp_address
character*(128) :: zmq_socket_pair_inproc_address
character*(128) :: zmq_socket_push_tcp_address
character*(128) :: zmq_socket_pull_inproc_address
character*(128) :: zmq_socket_push_inproc_address
character*(128) :: zmq_socket_sub_tcp_address
File: :file:`utils.irp.f`
Socket which pulls the results (2)
.. c:var:: zmq_socket_pull_inproc_address
.. code:: text
character*(128) :: zmq_socket_pull_tcp_address
character*(128) :: zmq_socket_pair_inproc_address
character*(128) :: zmq_socket_push_tcp_address
character*(128) :: zmq_socket_pull_inproc_address
character*(128) :: zmq_socket_push_inproc_address
character*(128) :: zmq_socket_sub_tcp_address
File: :file:`utils.irp.f`
Socket which pulls the results (2)
.. c:var:: zmq_socket_pull_tcp_address
.. code:: text
character*(128) :: zmq_socket_pull_tcp_address
character*(128) :: zmq_socket_pair_inproc_address
character*(128) :: zmq_socket_push_tcp_address
character*(128) :: zmq_socket_pull_inproc_address
character*(128) :: zmq_socket_push_inproc_address
character*(128) :: zmq_socket_sub_tcp_address
File: :file:`utils.irp.f`
Socket which pulls the results (2)
.. c:var:: zmq_socket_push_inproc_address
.. code:: text
character*(128) :: zmq_socket_pull_tcp_address
character*(128) :: zmq_socket_pair_inproc_address
character*(128) :: zmq_socket_push_tcp_address
character*(128) :: zmq_socket_pull_inproc_address
character*(128) :: zmq_socket_push_inproc_address
character*(128) :: zmq_socket_sub_tcp_address
File: :file:`utils.irp.f`
Socket which pulls the results (2)
.. c:var:: zmq_socket_push_tcp_address
.. code:: text
character*(128) :: zmq_socket_pull_tcp_address
character*(128) :: zmq_socket_pair_inproc_address
character*(128) :: zmq_socket_push_tcp_address
character*(128) :: zmq_socket_pull_inproc_address
character*(128) :: zmq_socket_push_inproc_address
character*(128) :: zmq_socket_sub_tcp_address
File: :file:`utils.irp.f`
Socket which pulls the results (2)
.. c:var:: zmq_socket_sub_tcp_address
.. code:: text
character*(128) :: zmq_socket_pull_tcp_address
character*(128) :: zmq_socket_pair_inproc_address
character*(128) :: zmq_socket_push_tcp_address
character*(128) :: zmq_socket_pull_inproc_address
character*(128) :: zmq_socket_push_inproc_address
character*(128) :: zmq_socket_sub_tcp_address
File: :file:`utils.irp.f`
Socket which pulls the results (2)
.. c:var:: zmq_state
.. code:: text
character*(128) :: zmq_state
File: :file:`utils.irp.f`
Threads executing work through the ZeroMQ interface
Subroutines / functions
-----------------------
.. c:function:: add_task_to_taskserver
.. code:: text
integer function add_task_to_taskserver(zmq_to_qp_run_socket,task)
File: :file:`utils.irp.f`
Get a task from the task server
.. c:function:: connect_to_taskserver
.. code:: text
integer function connect_to_taskserver(zmq_to_qp_run_socket,worker_id,thread)
File: :file:`utils.irp.f`
Connect to the task server and obtain the worker ID
.. c:function:: disconnect_from_taskserver
.. code:: text
integer function disconnect_from_taskserver(zmq_to_qp_run_socket, worker_id)
File: :file:`utils.irp.f`
Disconnect from the task server
.. c:function:: disconnect_from_taskserver_state
.. code:: text
integer function disconnect_from_taskserver_state(zmq_to_qp_run_socket, worker_id, state)
File: :file:`utils.irp.f`
Disconnect from the task server
.. c:function:: end_parallel_job
.. code:: text
subroutine end_parallel_job(zmq_to_qp_run_socket,zmq_socket_pull,name_in)
File: :file:`utils.irp.f`
End a new parallel job with name 'name'. The slave tasks execute subroutine 'slave'
.. c:function:: end_zmq_pair_socket
.. code:: text
subroutine end_zmq_pair_socket(zmq_socket_pair)
File: :file:`utils.irp.f`
Terminate socket on which the results are sent.
.. c:function:: end_zmq_pull_socket
.. code:: text
subroutine end_zmq_pull_socket(zmq_socket_pull)
File: :file:`utils.irp.f`
Terminate socket on which the results are sent.
.. c:function:: end_zmq_push_socket
.. code:: text
subroutine end_zmq_push_socket(zmq_socket_push,thread)
File: :file:`utils.irp.f`
Terminate socket on which the results are sent.
.. c:function:: end_zmq_sub_socket
.. code:: text
subroutine end_zmq_sub_socket(zmq_socket_sub)
File: :file:`utils.irp.f`
Terminate socket on which the results are sent.
.. c:function:: end_zmq_to_qp_run_socket
.. code:: text
subroutine end_zmq_to_qp_run_socket(zmq_to_qp_run_socket)
File: :file:`utils.irp.f`
Terminate the socket from the application to qp_run
.. c:function:: get_task_from_taskserver
.. code:: text
integer function get_task_from_taskserver(zmq_to_qp_run_socket,worker_id,task_id,task)
File: :file:`utils.irp.f`
Get a task from the task server
.. c:function:: get_tasks_from_taskserver
.. code:: text
integer function get_tasks_from_taskserver(zmq_to_qp_run_socket,worker_id,task_id,task,n_tasks)
File: :file:`utils.irp.f`
Get multiple tasks from the task server
.. c:function:: new_parallel_job
.. code:: text
subroutine new_parallel_job(zmq_to_qp_run_socket,zmq_socket_pull,name_in)
File: :file:`utils.irp.f`
Start a new parallel job with name 'name'. The slave tasks execute subroutine 'slave'
.. c:function:: new_zmq_pair_socket
.. code:: text
function new_zmq_pair_socket(bind)
File: :file:`utils.irp.f`
Socket on which the collector and the main communicate
.. c:function:: new_zmq_pull_socket
.. code:: text
function new_zmq_pull_socket()
File: :file:`utils.irp.f`
Socket on which the results are sent. If thread is 1, use inproc
.. c:function:: new_zmq_push_socket
.. code:: text
function new_zmq_push_socket(thread)
File: :file:`utils.irp.f`
Socket on which the results are sent. If thread is 1, use inproc
.. c:function:: new_zmq_sub_socket
.. code:: text
function new_zmq_sub_socket()
File: :file:`utils.irp.f`
Socket to read the state published by the Task server
.. c:function:: new_zmq_to_qp_run_socket
.. code:: text
function new_zmq_to_qp_run_socket()
File: :file:`utils.irp.f`
Socket on which the qp_run process replies
.. c:function:: reset_zmq_addresses
.. code:: text
subroutine reset_zmq_addresses
File: :file:`utils.irp.f`
Socket which pulls the results (2)
.. c:function:: switch_qp_run_to_master
.. code:: text
subroutine switch_qp_run_to_master
File: :file:`utils.irp.f`
Address of the master qp_run socket Example : tcp://130.120.229.139:12345
.. c:function:: task_done_to_taskserver
.. code:: text
integer function task_done_to_taskserver(zmq_to_qp_run_socket, worker_id, task_id)
File: :file:`utils.irp.f`
Get a task from the task server
.. c:function:: tasks_done_to_taskserver
.. code:: text
integer function tasks_done_to_taskserver(zmq_to_qp_run_socket, worker_id, task_id, n_tasks)
File: :file:`utils.irp.f`
Get a task from the task server
.. c:function:: wait_for_next_state
.. code:: text
subroutine wait_for_next_state(state)
File: :file:`utils.irp.f`
.. c:function:: wait_for_state
.. code:: text
subroutine wait_for_state(state_wait,state)
File: :file:`utils.irp.f`
Wait for the ZMQ state to be ready
.. c:function:: wait_for_states
.. code:: text
subroutine wait_for_states(state_wait,state,n)
File: :file:`utils.irp.f`
Wait for the ZMQ state to be ready
.. c:function:: zmq_abort
.. code:: text
integer function zmq_abort(zmq_to_qp_run_socket)
File: :file:`utils.irp.f`
Aborts a running parallel computation
.. c:function:: zmq_delete_task
.. code:: text
integer function zmq_delete_task(zmq_to_qp_run_socket,zmq_socket_pull,task_id,more)
File: :file:`utils.irp.f`
When a task is done, it has to be removed from the list of tasks on the qp_run queue. This guarantees that the results have been received in the pull.
.. c:function:: zmq_delete_tasks
.. code:: text
integer function zmq_delete_tasks(zmq_to_qp_run_socket,zmq_socket_pull,task_id,n_tasks,more)
File: :file:`utils.irp.f`
When a task is done, it has to be removed from the list of tasks on the qp_run queue. This guarantees that the results have been received in the pull.
.. c:function:: zmq_delete_tasks_async_recv
.. code:: text
integer function zmq_delete_tasks_async_recv(zmq_to_qp_run_socket,zmq_socket_pull,task_id,n_tasks,more)
File: :file:`utils.irp.f`
When a task is done, it has to be removed from the list of tasks on the qp_run queue. This guarantees that the results have been received in the pull.
.. c:function:: zmq_delete_tasks_async_send
.. code:: text
integer function zmq_delete_tasks_async_send(zmq_to_qp_run_socket,zmq_socket_pull,task_id,n_tasks,more)
File: :file:`utils.irp.f`
When a task is done, it has to be removed from the list of tasks on the qp_run queue. This guarantees that the results have been received in the pull.
.. c:function:: zmq_get8_dvector
.. code:: text
integer function zmq_get8_dvector(zmq_to_qp_run_socket, worker_id, name, x, size_x)
File: :file:`put_get.irp.f`
Get a float vector from the qp_run scheduler
.. c:function:: zmq_get8_ivector
.. code:: text
integer function zmq_get8_ivector(zmq_to_qp_run_socket, worker_id, name, x, size_x)
File: :file:`put_get.irp.f`
Get a vector of integers from the qp_run scheduler
.. c:function:: zmq_get_dmatrix
.. code:: text
integer function zmq_get_dmatrix(zmq_to_qp_run_socket, worker_id, name, x, size_x1, size_x2, sze)
File: :file:`put_get.irp.f`
Get a float vector from the qp_run scheduler
.. c:function:: zmq_get_dvector
.. code:: text
integer function zmq_get_dvector(zmq_to_qp_run_socket, worker_id, name, x, size_x)
File: :file:`put_get.irp.f`
Get a float vector from the qp_run scheduler
.. c:function:: zmq_get_i8matrix
.. code:: text
integer function zmq_get_i8matrix(zmq_to_qp_run_socket, worker_id, name, x, size_x1, size_x2, sze)
File: :file:`put_get.irp.f`
Get a float vector from the qp_run scheduler
.. c:function:: zmq_get_imatrix
.. code:: text
integer function zmq_get_imatrix(zmq_to_qp_run_socket, worker_id, name, x, size_x1, size_x2, sze)
File: :file:`put_get.irp.f`
Get a float vector from the qp_run scheduler
.. c:function:: zmq_get_int
.. code:: text
integer function zmq_get_int(zmq_to_qp_run_socket, worker_id, name, x)
File: :file:`put_get.irp.f`
Get a vector of integers from the qp_run scheduler
.. c:function:: zmq_get_int_nompi
.. code:: text
integer function zmq_get_int_nompi(zmq_to_qp_run_socket, worker_id, name, x)
File: :file:`put_get.irp.f`
Get a vector of integers from the qp_run scheduler
.. c:function:: zmq_get_ivector
.. code:: text
integer function zmq_get_ivector(zmq_to_qp_run_socket, worker_id, name, x, size_x)
File: :file:`put_get.irp.f`
Get a vector of integers from the qp_run scheduler
.. c:function:: zmq_port
.. code:: text
function zmq_port(ishift)
File: :file:`utils.irp.f`
Return the value of the ZMQ port from the corresponding integer
.. c:function:: zmq_put8_dvector
.. code:: text
integer function zmq_put8_dvector(zmq_to_qp_run_socket, worker_id, name, x, size_x)
File: :file:`put_get.irp.f`
Put a float vector on the qp_run scheduler
.. c:function:: zmq_put8_ivector
.. code:: text
integer function zmq_put8_ivector(zmq_to_qp_run_socket, worker_id, name, x, size_x)
File: :file:`put_get.irp.f`
Put a vector of integers on the qp_run scheduler
.. c:function:: zmq_put_dmatrix
.. code:: text
integer function zmq_put_dmatrix(zmq_to_qp_run_socket, worker_id, name, x, size_x1, size_x2, sze)
File: :file:`put_get.irp.f`
Put a float vector on the qp_run scheduler
.. c:function:: zmq_put_dvector
.. code:: text
integer function zmq_put_dvector(zmq_to_qp_run_socket, worker_id, name, x, size_x)
File: :file:`put_get.irp.f`
Put a float vector on the qp_run scheduler
.. c:function:: zmq_put_i8matrix
.. code:: text
integer function zmq_put_i8matrix(zmq_to_qp_run_socket, worker_id, name, x, size_x1, size_x2, sze)
File: :file:`put_get.irp.f`
Put a float vector on the qp_run scheduler
.. c:function:: zmq_put_imatrix
.. code:: text
integer function zmq_put_imatrix(zmq_to_qp_run_socket, worker_id, name, x, size_x1, size_x2, sze)
File: :file:`put_get.irp.f`
Put a float vector on the qp_run scheduler
.. c:function:: zmq_put_int
.. code:: text
integer function zmq_put_int(zmq_to_qp_run_socket, worker_id, name, x)
File: :file:`put_get.irp.f`
Put a vector of integers on the qp_run scheduler
.. c:function:: zmq_put_ivector
.. code:: text
integer function zmq_put_ivector(zmq_to_qp_run_socket, worker_id, name, x, size_x)
File: :file:`put_get.irp.f`
Put a vector of integers on the qp_run scheduler
.. c:function:: zmq_set_running
.. code:: text
integer function zmq_set_running(zmq_to_qp_run_socket)
File: :file:`utils.irp.f`
Set the job to Running in QP-run

View File

@ -12,23 +12,9 @@ Index of Modules
/modules/*
Index of Providers
------------------
.. Auto-generated file
.. toctree::
:maxdepth: 1
:glob:
/providers/*
.. include:: index_providers.rst
Index of Subroutines/Functions
------------------------------
.. toctree::
:maxdepth: 1
:glob:
/subroutines/*

File diff suppressed because it is too large Load Diff

1
include/.gitignore vendored
View File

@ -1,2 +1,3 @@
zmq.h
zmq_utils.h
f77_zmq_free.h

View File

@ -1,7 +1,7 @@
BEGIN_PROVIDER [ integer, ao_prim_num_max ]
implicit none
BEGIN_DOC
! max number of primitives
! Max number of primitives.
END_DOC
ao_prim_num_max = maxval(ao_prim_num)
END_PROVIDER
@ -10,7 +10,7 @@ END_PROVIDER
&BEGIN_PROVIDER [ double precision, ao_coef_normalization_factor, (ao_num) ]
implicit none
BEGIN_DOC
! Coefficients including the AO normalization
! Coefficients including the |AO| normalization
END_DOC
double precision :: norm,overlap_x,overlap_y,overlap_z,C_A(3), c
integer :: l, powA(3), nz
@ -46,7 +46,7 @@ END_PROVIDER
BEGIN_PROVIDER [ double precision, ao_coef_normalization_libint_factor, (ao_num) ]
implicit none
BEGIN_DOC
! Coefficients including the AO normalization
! |AO| normalization for interfacing with libint
END_DOC
double precision :: norm,overlap_x,overlap_y,overlap_z,C_A(3), c
integer :: l, powA(3), nz
@ -80,7 +80,7 @@ END_PROVIDER
&BEGIN_PROVIDER [ double precision, ao_expo_ordered, (ao_num,ao_prim_num_max) ]
implicit none
BEGIN_DOC
! Sorted primitives to accelerate 4 index MO transformation
! Sorted primitives to accelerate 4 index |MO| transformation
END_DOC
integer :: iorder(ao_prim_num_max)
@ -105,7 +105,7 @@ END_PROVIDER
BEGIN_PROVIDER [ double precision, ao_coef_normalized_ordered_transp, (ao_prim_num_max,ao_num) ]
implicit none
BEGIN_DOC
! Transposed ao_coef_normalized_ordered
! Transposed :c:var:`ao_coef_normalized_ordered`
END_DOC
integer :: i,j
do j=1, ao_num
@ -119,7 +119,7 @@ END_PROVIDER
BEGIN_PROVIDER [ double precision, ao_expo_ordered_transp, (ao_prim_num_max,ao_num) ]
implicit none
BEGIN_DOC
! Transposed ao_expo_ordered
! Transposed :c:var:`ao_expo_ordered`
END_DOC
integer :: i,j
do j=1, ao_num
@ -135,7 +135,7 @@ END_PROVIDER
&BEGIN_PROVIDER [ character*(128), ao_l_char, (ao_num) ]
implicit none
BEGIN_DOC
! ao_l = l value of the AO: a+b+c in x^a y^b z^c
! :math:`l` value of the |AO|: :math`a+b+c` in :math:`x^a y^b z^c`
END_DOC
integer :: i
do i=1,ao_num
@ -151,7 +151,7 @@ integer function ao_power_index(nx,ny,nz)
BEGIN_DOC
! Unique index given to a triplet of powers:
!
! 1/2 (l-n_x)*(l-n_x+1) + n_z + 1
! :math:`\frac{1}{2} (l-n_x) (l-n_x+1) + n_z + 1`
END_DOC
integer :: l
l = nx + ny + nz
@ -161,7 +161,7 @@ end
BEGIN_PROVIDER [ character*(128), l_to_charater, (0:7)]
BEGIN_DOC
! character corresponding to the "L" value of an AO orbital
! Character corresponding to the "l" value of an |AO|
END_DOC
implicit none
l_to_charater(0)='S'
@ -178,10 +178,10 @@ END_PROVIDER
BEGIN_PROVIDER [ integer, Nucl_N_Aos, (nucl_num)]
&BEGIN_PROVIDER [ integer, N_AOs_max ]
implicit none
integer :: i
BEGIN_DOC
! Number of AOs per atom
! Number of |AOs| per atom
END_DOC
integer :: i
Nucl_N_Aos = 0
do i = 1, ao_num
Nucl_N_Aos(ao_nucl(i)) +=1
@ -192,7 +192,7 @@ END_PROVIDER
BEGIN_PROVIDER [ integer, Nucl_Aos, (nucl_num,N_AOs_max)]
implicit none
BEGIN_DOC
! List of AOs attached on each atom
! List of |AOs| centered on each atom
END_DOC
integer :: i
integer, allocatable :: nucl_tmp(:)
@ -212,9 +212,9 @@ END_PROVIDER
implicit none
integer :: i,j,k
BEGIN_DOC
! Index of the shell type Aos and of the corresponding Aos
! Per convention, for P,D,F and G AOs, we take the index
! of the AO with the the corresponding power in the "X" axis
! Index of the shell type |AOs| and of the corresponding |AOs|
! By convention, for p,d,f and g |AOs|, we take the index
! of the |AO| with the the corresponding power in the x axis
END_DOC
do i = 1, nucl_num
Nucl_num_shell_Aos(i) = 0
@ -258,6 +258,9 @@ END_PROVIDER
BEGIN_PROVIDER [ character*(4), ao_l_char_space, (ao_num) ]
implicit none
BEGIN_DOC
! Converts an l value to a string
END_DOC
integer :: i
character*(4) :: give_ao_character_space
do i=1,ao_num

View File

@ -1,7 +1,7 @@
double precision function ao_value(i,r)
implicit none
BEGIN_DOC
! return the value of the ith ao at point r
! Returns the value of the i-th |AO| at point r
END_DOC
double precision, intent(in) :: r(3)
integer, intent(in) :: i
@ -34,7 +34,7 @@ end
subroutine give_all_aos_at_r(r,aos_array)
implicit none
BEGIN_dOC
! gives the values of aos at a given point r
! Gives the values of |AOs| at a given point r
END_DOC
double precision, intent(in) :: r(3)
double precision, intent(out) :: aos_array(ao_num)
@ -44,5 +44,4 @@ subroutine give_all_aos_at_r(r,aos_array)
aos_array(i) = ao_value(i,r)
enddo
end

View File

@ -1,6 +1,9 @@
BEGIN_PROVIDER [ integer, n_pt_max_integrals ]
&BEGIN_PROVIDER [ integer, n_pt_max_i_x]
implicit none
BEGIN_DOC
! Number of points used in the numerical integrations.
END_DOC
integer :: n_pt_sup
integer :: prim_power_l_max
include 'Utils/constants.include.F'

View File

@ -1 +1,2 @@
AO_Basis Pseudo
AO_Basis
Pseudo

View File

@ -3,8 +3,7 @@
implicit none
integer :: i,j,n,l
BEGIN_DOC
! array of the mono electronic hamiltonian on the AOs basis
! : sum of the kinetic and nuclear electronic potential
! Array of the one-electron Hamiltonian on the |AO| basis.
END_DOC
do j = 1, ao_num
do i = 1, ao_num

View File

@ -2,7 +2,8 @@
&BEGIN_PROVIDER [ integer, ao_cart_to_sphe_num ]
implicit none
BEGIN_DOC
! ao_cart_to_sphe coefficients of the current basis set
! Coefficients to go from cartesian to spherical coordinates in the current
! basis set
END_DOC
integer :: i
integer, external :: ao_power_index
@ -49,7 +50,7 @@ END_PROVIDER
BEGIN_PROVIDER [ double precision, ao_cart_to_sphe_overlap, (ao_cart_to_sphe_num,ao_cart_to_sphe_num) ]
implicit none
BEGIN_DOC
! AO overlap matrix in the spherical basis set
! |AO| overlap matrix in the spherical basis set
END_DOC
double precision, allocatable :: S(:,:)
allocate (S(ao_cart_to_sphe_num,ao_num))
@ -71,7 +72,7 @@ END_PROVIDER
BEGIN_PROVIDER [ double precision, ao_cart_to_sphe_inv, (ao_cart_to_sphe_num,ao_num) ]
implicit none
BEGIN_DOC
! AO_cart_to_sphe_coef^(-1)
! Inverse of :c:var:`ao_cart_to_sphe_coef`
END_DOC
call get_pseudo_inverse(ao_cart_to_sphe_coef,size(ao_cart_to_sphe_coef,1),&

View File

@ -5,7 +5,8 @@
implicit none
BEGIN_DOC
! Overlap between atomic basis functions:
! :math:`\int \chi_i(r) \chi_j(r) dr)`
!
! :math:`\int \chi_i(r) \chi_j(r) dr`
END_DOC
integer :: i,j,n,l
double precision :: f
@ -73,8 +74,9 @@ END_PROVIDER
BEGIN_PROVIDER [ double precision, ao_overlap_abs,(ao_num,ao_num) ]
implicit none
BEGIN_DOC
! Overlap between absolute value of atomic basis functions:
! :math:`\int |\chi_i(r)| |\chi_j(r)| dr)`
! Overlap between absolute values of atomic basis functions:
!
! :math:`\int |\chi_i(r)| |\chi_j(r)| dr`
END_DOC
integer :: i,j,n,l
double precision :: f
@ -127,7 +129,7 @@ END_PROVIDER
BEGIN_PROVIDER [ double precision, S_inv,(ao_num,ao_num) ]
implicit none
BEGIN_DOC
! S^-1
! Inverse of the overlap matrix
END_DOC
call get_pseudo_inverse(ao_overlap,size(ao_overlap,1),ao_num,ao_num,S_inv,size(S_inv,1))
END_PROVIDER
@ -135,7 +137,7 @@ END_PROVIDER
BEGIN_PROVIDER [ double precision, S_half_inv, (AO_num,AO_num) ]
BEGIN_DOC
! Matrix X = S^{-1/2} obtained by SVD
! :math:`X = S^{-1/2}` obtained by SVD
END_DOC
implicit none
@ -194,7 +196,7 @@ END_PROVIDER
BEGIN_PROVIDER [ double precision, S_half, (ao_num,ao_num) ]
implicit none
BEGIN_DOC
! S^{1/2}
! :math:`S^{1/2}`
END_DOC
integer :: i,j,k

View File

@ -2,6 +2,13 @@
&BEGIN_PROVIDER [ double precision, ao_deriv2_y,(ao_num,ao_num) ]
&BEGIN_PROVIDER [ double precision, ao_deriv2_z,(ao_num,ao_num) ]
implicit none
BEGIN_DOC
! Second derivative matrix elements in the |AO| basis.
!
! :math:`{\tt ao_deriv2_x} =
! \langle \chi_i(x,y,z) | \frac{\partial^2}{\partial x^2} |\chi_j (x,y,z) \rangle`
!
END_DOC
integer :: i,j,n,l
double precision :: f
integer :: dim1
@ -12,12 +19,6 @@
integer :: power_A(3), power_B(3)
double precision :: d_a_2,d_2
dim1=100
BEGIN_DOC
! second derivatives matrix elements in the ao basis
! .. math::
!
! {\tt ao_deriv2_x} = \langle \chi_i(x,y,z) \frac{\partial^2}{\partial x^2} |\chi_j (x,y,z) \rangle
END_DOC
! -- Dummy call to provide everything
A_center(:) = 0.d0
@ -61,9 +62,6 @@
beta = ao_expo_ordered_transp(l,i)
call overlap_gaussian_xyz(A_center,B_center,alpha,beta,power_A,power_B,overlap_x0,overlap_y0,overlap_z0,overlap,dim1)
c = ao_coef_normalized_ordered_transp(n,j) * ao_coef_normalized_ordered_transp(l,i)
! if (abs(c) < 1.d-8) then
! cycle
! endif
power_A(1) = power_A(1)-2
if (power_A(1)>-1) then
@ -122,8 +120,9 @@ END_PROVIDER
BEGIN_PROVIDER [double precision, ao_kinetic_integral, (ao_num,ao_num)]
implicit none
BEGIN_DOC
! array of the priminitve basis kinetic integrals
! \langle \chi_i |\hat{T}| \chi_j \rangle
! Kinetic energy integrals in the |AO| basis.
!
! :math:`\langle \chi_i |\hat{T}| \chi_j \rangle`
END_DOC
integer :: i,j,k,l

View File

@ -1,6 +1,8 @@
BEGIN_PROVIDER [ double precision, ao_nucl_elec_integral, (ao_num,ao_num)]
BEGIN_DOC
! interaction nuclear electron
! Nucleus-electron interaction, in the |AO| basis set.
!
! :math:`\langle \chi_i | -\sum_A \frac{1}{|r-R_A|} | \chi_j \rangle`
END_DOC
implicit none
double precision :: alpha, beta, gama, delta
@ -59,11 +61,13 @@ BEGIN_PROVIDER [ double precision, ao_nucl_elec_integral, (ao_num,ao_num)]
C_center(1:3) = nucl_coord(k,1:3)
c = c - Z*NAI_pol_mult(A_center,B_center,power_A,power_B,alpha,beta,C_center,n_pt_in)
c = c - Z * NAI_pol_mult(A_center,B_center, &
power_A,power_B,alpha,beta,C_center,n_pt_in)
enddo
ao_nucl_elec_integral(i,j) = ao_nucl_elec_integral(i,j) +&
ao_coef_normalized_ordered_transp(l,j)*ao_coef_normalized_ordered_transp(m,i)*c
ao_nucl_elec_integral(i,j) = ao_nucl_elec_integral(i,j) &
+ ao_coef_normalized_ordered_transp(l,j) &
* ao_coef_normalized_ordered_transp(m,i) * c
enddo
enddo
enddo
@ -77,13 +81,13 @@ BEGIN_PROVIDER [ double precision, ao_nucl_elec_integral, (ao_num,ao_num)]
print *, 'AO N-e integrals written to disk'
endif
END_PROVIDER
BEGIN_PROVIDER [ double precision, ao_nucl_elec_integral_per_atom, (ao_num,ao_num,nucl_num)]
BEGIN_PROVIDER [ double precision, ao_nucl_elec_integral_per_atom, (ao_num,ao_num,nucl_num)]
BEGIN_DOC
! ao_nucl_elec_integral_per_atom(i,j,k) = -<AO(i)|1/|r-Rk|AO(j)>
! where Rk is the geometry of the kth atom
! Nucleus-electron interaction in the |AO| basis set, per atom A.
!
! :math:`\langle \chi_i | -\frac{1}{|r-R_A|} | \chi_j \rangle`
END_DOC
implicit none
double precision :: alpha, beta, gama, delta
@ -91,15 +95,15 @@ END_PROVIDER
double precision :: A_center(3),B_center(3),C_center(3)
integer :: power_A(3),power_B(3)
integer :: i,j,k,l,n_pt_in,m
double precision ::overlap_x,overlap_y,overlap_z,overlap,dx,NAI_pol_mult
double precision :: overlap_x,overlap_y,overlap_z,overlap,dx,NAI_pol_mult
ao_nucl_elec_integral_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 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 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_integral_per_atom,nucl_num)
n_pt_in = n_pt_max_integrals
!$OMP DO SCHEDULE (dynamic)
@ -130,8 +134,10 @@ END_PROVIDER
alpha = ao_expo_ordered_transp(l,j)
do m=1,ao_prim_num(i)
beta = ao_expo_ordered_transp(m,i)
c = c + NAI_pol_mult(A_center,B_center,power_A,power_B,alpha,beta,C_center,n_pt_in) &
* ao_coef_normalized_ordered_transp(l,j)*ao_coef_normalized_ordered_transp(m,i)
c = c + NAI_pol_mult(A_center,B_center,power_A,power_B, &
alpha,beta,C_center,n_pt_in) &
* ao_coef_normalized_ordered_transp(l,j) &
* ao_coef_normalized_ordered_transp(m,i)
enddo
enddo
ao_nucl_elec_integral_per_atom(i,j,k) = -c
@ -146,21 +152,24 @@ END_PROVIDER
double precision function NAI_pol_mult(A_center,B_center,power_A,power_B,alpha,beta,C_center,n_pt_in)
! function that calculate the folowing integral :
! int{dr} of (x-A_x)^ax (x-B_X)^bx exp(-alpha (x-A_x)^2 - beta (x-B_x)^2 ) 1/(r-R_c)
BEGIN_DOC
! Computes the electron-nucleus attraction with two primitves.
!
! :math:`\langle g_i | \frac{1}{|r-R_c|} | g_j \rangle`
END_DOC
implicit none
integer, intent(in) :: n_pt_in
double precision,intent(in) :: C_center(3),A_center(3),B_center(3),alpha,beta
integer :: power_A(3),power_B(3)
integer :: i,j,k,l,n_pt
double precision :: P_center(3)
double precision :: d(0:n_pt_in),pouet,coeff,rho,dist,const,pouet_2,p,p_inv,factor
double precision :: I_n_special_exact,integrate_bourrin,I_n_bibi
double precision :: V_e_n,const_factor,dist_integral,tmp
double precision :: accu,epsilo,rint
integer :: n_pt_out,lmax
include 'Utils/constants.include.F'
implicit none
integer, intent(in) :: n_pt_in
double precision,intent(in) :: C_center(3),A_center(3),B_center(3),alpha,beta
integer :: power_A(3),power_B(3)
integer :: i,j,k,l,n_pt
double precision :: P_center(3)
double precision :: d(0:n_pt_in),pouet,coeff,rho,dist,const,pouet_2,p,p_inv,factor
double precision :: I_n_special_exact,integrate_bourrin,I_n_bibi
double precision :: V_e_n,const_factor,dist_integral,tmp
double precision :: accu,epsilo,rint
integer :: n_pt_out,lmax
include 'Utils/constants.include.F'
if ( (A_center(1)/=B_center(1)).or. &
(A_center(2)/=B_center(2)).or. &
(A_center(3)/=B_center(3)).or. &
@ -169,11 +178,11 @@ include 'Utils/constants.include.F'
(A_center(3)/=C_center(3))) then
continue
else
NAI_pol_mult = V_e_n(power_A(1),power_A(2),power_A(3),power_B(1),power_B(2),power_B(3),alpha,beta)
NAI_pol_mult = V_e_n(power_A(1),power_A(2),power_A(3), &
power_B(1),power_B(2),power_B(3),alpha,beta)
return
endif
p = alpha + beta
! print*, "a"
p_inv = 1.d0/p
rho = alpha * beta * p_inv
dist = 0.d0
@ -214,9 +223,9 @@ include 'Utils/constants.include.F'
endif
accu = 0.d0
! 1/r1 standard attraction integral
! 1/r1 standard attraction integral
epsilo = 1.d0
! sum of integrals of type : int {t,[0,1]} exp-(rho.(P-Q)^2 * t^2) * t^i
! sum of integrals of type : int {t,[0,1]} exp-(rho.(P-Q)^2 * t^2) * t^i
do i =0 ,n_pt_out,2
accu += d(i) * rint(i/2,const)
enddo
@ -226,25 +235,27 @@ 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 that returns the explicit polynom in term of the "t" variable of the following polynomw ::
!!!! I_x1(a_x, d_x,p,q) * I_x1(a_y, d_y,p,q) * I_x1(a_z, d_z,p,q)
!!!! it is for the nuclear electron atraction
implicit none
integer, intent(in) :: n_pt_in
integer,intent(out) :: n_pt_out
double precision, intent(in) :: A_center(3), B_center(3),C_center(3)
double precision, intent(in) :: alpha,beta
integer, intent(in) :: power_A(3), power_B(3)
integer :: a_x,b_x,a_y,b_y,a_z,b_z
double precision :: d(0:n_pt_in)
double precision :: d1(0:n_pt_in)
double precision :: d2(0:n_pt_in)
double precision :: d3(0:n_pt_in)
double precision :: accu, pq_inv, p10_1, p10_2, p01_1, p01_2
double precision :: p,P_center(3),rho,p_inv,p_inv_2
!print*,'n_pt_in = ',n_pt_in
implicit none
BEGIN_DOC
! Returns the explicit polynomial in terms of the "t" variable of the following
!
! :math:`I_x1(a_x, d_x,p,q) * I_x1(a_y, d_y,p,q) * I_x1(a_z, d_z,p,q)`
END_DOC
integer, intent(in) :: n_pt_in
integer,intent(out) :: n_pt_out
double precision, intent(in) :: A_center(3), B_center(3),C_center(3)
double precision, intent(in) :: alpha,beta
integer, intent(in) :: power_A(3), power_B(3)
integer :: a_x,b_x,a_y,b_y,a_z,b_z
double precision :: d(0:n_pt_in)
double precision :: d1(0:n_pt_in)
double precision :: d2(0:n_pt_in)
double precision :: d3(0:n_pt_in)
double precision :: accu, pq_inv, p10_1, p10_2, p01_1, p01_2
double precision :: p,P_center(3),rho,p_inv,p_inv_2
accu = 0.d0
!COMPTEUR irp_rdtsc1 = irp_rdtsc()
ASSERT (n_pt_in > 1)
p = alpha+beta
p_inv = 1.d0/p
@ -252,21 +263,20 @@ double precision :: p,P_center(3),rho,p_inv,p_inv_2
do i =1, 3
P_center(i) = (alpha * A_center(i) + beta * B_center(i)) * p_inv
enddo
! print*,'passed the P_center'
double precision :: R1x(0:2), B01(0:2), R1xp(0:2),R2x(0:2)
R1x(0) = (P_center(1) - A_center(1))
R1x(1) = 0.d0
R1x(2) = -(P_center(1) - C_center(1))
! R1x = (P_x - A_x) - (P_x - C_x) t^2
R1xp(0) = (P_center(1) - B_center(1))
R1xp(1) = 0.d0
R1xp(2) =-(P_center(1) - C_center(1))
!R1xp = (P_x - B_x) - (P_x - C_x) t^2
R2x(0) = p_inv_2
R2x(1) = 0.d0
R2x(2) = -p_inv_2
!R2x = 0.5 / p - 0.5/p t^2
do i = 0,n_pt_in
d(i) = 0.d0
enddo
@ -286,7 +296,7 @@ double precision :: p,P_center(3),rho,p_inv,p_inv_2
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)
! print*,'passed the first I_x1'
if(n_pt1<0)then
n_pt_out = -1
do i = 0,n_pt_in
@ -298,15 +308,15 @@ double precision :: p,P_center(3),rho,p_inv,p_inv_2
R1x(0) = (P_center(2) - A_center(2))
R1x(1) = 0.d0
R1x(2) = -(P_center(2) - C_center(2))
! R1x = (P_x - A_x) - (P_x - C_x) t^2
R1xp(0) = (P_center(2) - B_center(2))
R1xp(1) = 0.d0
R1xp(2) =-(P_center(2) - C_center(2))
!R1xp = (P_x - B_x) - (P_x - C_x) t^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)
! print*,'passed the second I_x1'
if(n_pt2<0)then
n_pt_out = -1
do i = 0,n_pt_in
@ -319,18 +329,16 @@ double precision :: p,P_center(3),rho,p_inv,p_inv_2
R1x(0) = (P_center(3) - A_center(3))
R1x(1) = 0.d0
R1x(2) = -(P_center(3) - C_center(3))
! R1x = (P_x - A_x) - (P_x - C_x) t^2
R1xp(0) = (P_center(3) - B_center(3))
R1xp(1) = 0.d0
R1xp(2) =-(P_center(3) - C_center(3))
!R2x = 0.5 / p - 0.5/p t^2
a_z = power_A(3)
b_z = power_B(3)
! 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)
! print*,'passed the third I_x1'
if(n_pt3<0)then
n_pt_out = -1
do i = 0,n_pt_in
@ -354,12 +362,14 @@ end
recursive subroutine I_x1_pol_mult_mono_elec(a,c,R1x,R1xp,R2x,d,nd,n_pt_in)
!!!! recursive function involved in the electron nucleus potential
implicit none
BEGIN_DOC
! Recursive routine involved in the electron-nucleus potential
END_DOC
integer , intent(in) :: n_pt_in
double precision,intent(inout) :: d(0:n_pt_in)
integer,intent(inout) :: nd
integer, intent(in):: a,c
integer, intent(in) :: a,c
double precision, intent(in) :: R1x(0:2),R1xp(0:2),R2x(0:2)
include 'Utils/constants.include.F'
double precision :: X(0:max_dim)
@ -367,8 +377,8 @@ recursive subroutine I_x1_pol_mult_mono_elec(a,c,R1x,R1xp,R2x,d,nd,n_pt_in)
!DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: X, Y
integer :: nx, ix,dim,iy,ny
dim = n_pt_in
! print*,'a,c = ',a,c
! print*,'nd_in = ',nd
! print*,'a,c = ',a,c
! print*,'nd_in = ',nd
if( (a==0) .and. (c==0))then
nd = 0
@ -379,7 +389,6 @@ recursive subroutine I_x1_pol_mult_mono_elec(a,c,R1x,R1xp,R2x,d,nd,n_pt_in)
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)
! print*,'nd 0,c',nd
else if (a==1) then
nx = nd
do ix=0,n_pt_in
@ -401,19 +410,16 @@ recursive subroutine I_x1_pol_mult_mono_elec(a,c,R1x,R1xp,R2x,d,nd,n_pt_in)
enddo
nx = 0
call I_x1_pol_mult_mono_elec(a-2,c,R1x,R1xp,R2x,X,nx,n_pt_in)
! print*,'nx a-2,c= ',nx
do ix=0,nx
X(ix) *= dble(a-1)
enddo
call multiply_poly(X,nx,R2x,2,d,nd)
! print*,'nd out = ',nd
nx = nd
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)
! print*,'nx a-1,c-1 = ',nx
do ix=0,nx
X(ix) *= dble(c)
enddo
@ -426,20 +432,20 @@ end
recursive subroutine I_x2_pol_mult_mono_elec(c,R1x,R1xp,R2x,d,nd,dim)
implicit none
BEGIN_DOC
! Recursive routine involved in the electron-nucleus potential
END_DOC
integer , intent(in) :: dim
include 'Utils/constants.include.F'
double precision :: d(0:max_dim)
integer,intent(inout) :: nd
integer, intent(in):: c
integer, intent(in) :: c
double precision, intent(in) :: R1x(0:2),R1xp(0:2),R2x(0:2)
integer :: i
!print*,'X2,c = ',c
!print*,'nd_in = ',nd
if(c==0) then
nd = 0
d(0) = 1.d0
! print*,'nd IX2 = ',nd
return
elseif ((nd<0).or.(c<0))then
nd = -1
@ -454,22 +460,16 @@ recursive subroutine I_x2_pol_mult_mono_elec(c,R1x,R1xp,R2x,d,nd,dim)
enddo
nx = 0
call I_x1_pol_mult_mono_elec(0,c-2,R1x,R1xp,R2x,X,nx,dim)
! print*,'nx 0,c-2 = ',nx
do ix=0,nx
X(ix) *= dble(c-1)
enddo
call multiply_poly(X,nx,R2x,2,d,nd)
! print*,'nd = ',nd
ny = 0
do ix=0,dim
Y(ix) = 0.d0
enddo
call I_x1_pol_mult_mono_elec(0,c-1,R1x,R1xp,R2x,Y,ny,dim)
! print*,'ny = ',ny
! do ix=0,ny
! print*,'Y(ix) = ',Y(ix)
! enddo
if(ny.ge.0)then
call multiply_poly(Y,ny,R1xp,2,d,nd)
endif
@ -477,38 +477,39 @@ recursive subroutine I_x2_pol_mult_mono_elec(c,R1x,R1xp,R2x,d,nd,dim)
end
double precision function V_e_n(a_x,a_y,a_z,b_x,b_y,b_z,alpha,beta)
implicit none
!!! primitve nuclear attraction between the two primitves centered on the same atom ::
!!!! primitive_1 = x**(a_x) y**(a_y) z**(a_z) exp(-alpha * r**2)
!!!! primitive_2 = x**(b_x) y**(b_y) z**(b_z) exp(- beta * r**2)
integer :: a_x,a_y,a_z,b_x,b_y,b_z
double precision :: alpha,beta
double precision :: V_r, V_phi, V_theta
if(iand((a_x+b_x),1)==1.or.iand(a_y+b_y,1)==1.or.iand((a_z+b_z),1)==1)then
implicit none
BEGIN_DOC
! Primitve nuclear attraction between the two primitves centered on the same atom.
!
! primitive_1 = x**(a_x) y**(a_y) z**(a_z) exp(-alpha * r**2)
!
! primitive_2 = x**(b_x) y**(b_y) z**(b_z) exp(- beta * r**2)
END_DOC
integer :: a_x,a_y,a_z,b_x,b_y,b_z
double precision :: alpha,beta
double precision :: V_r, V_phi, V_theta
if(iand((a_x+b_x),1)==1.or.iand(a_y+b_y,1)==1.or.iand((a_z+b_z),1)==1)then
V_e_n = 0.d0
else
else
V_e_n = V_r(a_x+b_x+a_y+b_y+a_z+b_z+1,alpha+beta) &
& * V_phi(a_x+b_x,a_y+b_y) &
& * V_theta(a_z+b_z,a_x+b_x+a_y+b_y+1)
endif
* V_phi(a_x+b_x,a_y+b_y) &
* V_theta(a_z+b_z,a_x+b_x+a_y+b_y+1)
endif
end
double precision function int_gaus_pol(alpha,n)
!!!! calculate the integral of
!! integral on "x" with boundaries (- infinity; + infinity) of [ x**n exp(-alpha * x**2) ]
implicit none
double precision :: alpha
integer :: n
double precision :: dble_fact
include 'Utils/constants.include.F'
!if(iand(n,1).eq.1)then
! int_gaus_pol= 0.d0
!else
! int_gaus_pol = dsqrt(pi/alpha) * dble_fact(n -1)/(alpha+alpha)**(n/2)
!endif
implicit none
BEGIN_DOC
! Computes the integral:
!
! :math:`\int_{-\infty}^{\infty} x^n \exp(-\alpha x^2) dx`
END_DOC
double precision :: alpha
integer :: n
double precision :: dble_fact
include 'Utils/constants.include.F'
int_gaus_pol = 0.d0
if(iand(n,1).eq.0)then
@ -525,27 +526,33 @@ include 'Utils/constants.include.F'
end
double precision function V_r(n,alpha)
!!!! calculate the radial part of the nuclear attraction integral which is the following integral :
!! integral on "r" with boundaries ( 0 ; + infinity) of [ r**n exp(-alpha * r**2) ]
!!! CAUTION :: this function requires the constant sqpi = dsqrt(pi)
implicit none
double precision :: alpha, fact
integer :: n
include 'Utils/constants.include.F'
if(iand(n,1).eq.1)then
implicit none
BEGIN_DOC
! Computes the radial part of the nuclear attraction integral:
!
! :math:`\int_{0}^{\infty} r^n \exp(-\alpha r^2) dr`
!
END_DOC
double precision :: alpha, fact
integer :: n
include 'Utils/constants.include.F'
if(iand(n,1).eq.1)then
V_r = 0.5d0 * fact(shiftr(n,1)) / (alpha ** (shiftr(n,1) + 1))
else
else
V_r = sqpi * fact(n) / fact(shiftr(n,1)) * (0.5d0/sqrt(alpha)) ** (n+1)
endif
endif
end
double precision function V_phi(n,m)
implicit none
!!!! calculate the angular "phi" part of the nuclear attraction integral wich is the following integral :
!! integral on "phi" with boundaries ( 0 ; 2 pi) of [ cos(phi) **n sin(phi) **m ]
integer :: n,m, i
double precision :: prod, Wallis
implicit none
BEGIN_DOC
! Computes the angular "phi" part of the nuclear attraction integral:
!
! :math:`\int_{0}^{2 \pi} \cos(\phi)^n \sin(\phi)^m d\phi`
END_DOC
integer :: n,m, i
double precision :: prod, Wallis
prod = 1.d0
do i = 0,shiftr(n,1)-1
prod = prod/ (1.d0 + dfloat(m+1)/dfloat(n-i-i-1))
@ -553,13 +560,17 @@ double precision :: prod, Wallis
V_phi = 4.d0 * prod * Wallis(m)
end
double precision function V_theta(n,m)
implicit none
!!!! calculate the angular "theta" part of the nuclear attraction integral wich is the following integral :
!! integral on "theta" with boundaries ( 0 ; pi) of [ cos(theta) **n sin(theta) **m ]
integer :: n,m,i
double precision :: Wallis, prod
include 'Utils/constants.include.F'
implicit none
BEGIN_DOC
! Computes the angular "theta" part of the nuclear attraction integral:
!
! :math:`\int_{0}^{\pi} \cos(\theta)^n \sin(\theta)^m d\theta`
END_DOC
integer :: n,m,i
double precision :: Wallis, prod
include 'Utils/constants.include.F'
V_theta = 0.d0
prod = 1.d0
do i = 0,shiftr(n,1)-1
@ -570,20 +581,23 @@ end
double precision function Wallis(n)
!!!! calculate the Wallis integral :
!! integral on "theta" with boundaries ( 0 ; pi/2) of [ cos(theta) **n ]
implicit none
double precision :: fact
integer :: n,p
include 'Utils/constants.include.F'
if(iand(n,1).eq.0)then
implicit none
BEGIN_DOC
! Wallis integral:
!
! :math:`\int_{0}^{\pi} \cos(\theta)^n d\theta`
END_DOC
double precision :: fact
integer :: n,p
include 'Utils/constants.include.F'
if(iand(n,1).eq.0)then
Wallis = fact(shiftr(n,1))
Wallis = pi * fact(n) / (dble(ibset(0_8,n)) * (Wallis+Wallis)*Wallis)
else
else
p = shiftr(n,1)
Wallis = fact(p)
Wallis = dble(ibset(0_8,p+p)) * Wallis*Wallis / fact(p+p+1)
endif
endif
end

View File

@ -1,7 +1,7 @@
BEGIN_PROVIDER [ double precision, ao_pseudo_integral, (ao_num,ao_num)]
implicit none
BEGIN_DOC
! Pseudo-potential integrals
! Pseudo-potential integrals in the |AO| basis set.
END_DOC
if (read_ao_one_integrals) then
@ -137,7 +137,7 @@ BEGIN_PROVIDER [ double precision, ao_pseudo_integral_local, (ao_num,ao_num)]
BEGIN_PROVIDER [ double precision, ao_pseudo_integral_non_local, (ao_num,ao_num)]
implicit none
BEGIN_DOC
! Local pseudo-potential
! Non-local pseudo-potential
END_DOC
include 'Utils/constants.include.F'
double precision :: alpha, beta, gama, delta

View File

@ -2,7 +2,7 @@
&BEGIN_PROVIDER [ logical, write_ao_one_integrals ]
BEGIN_DOC
! One level of abstraction for disk_access_ao_integrals and disk_access_mo_integrals
! If |true|, read/write one-electrons from/to disk.
END_DOC
implicit none

View File

@ -2,9 +2,11 @@
&BEGIN_PROVIDER [ double precision, ao_spread_y, (ao_num,ao_num)]
&BEGIN_PROVIDER [ double precision, ao_spread_z, (ao_num,ao_num)]
BEGIN_DOC
! array of the integrals of AO_i * x^2 AO_j
! array of the integrals of AO_i * y^2 AO_j
! array of the integrals of AO_i * z^2 AO_j
! * array of the integrals of AO_i * x^2 AO_j
!
! * array of the integrals of AO_i * y^2 AO_j
!
! * array of the integrals of AO_i * z^2 AO_j
END_DOC
implicit none
integer :: i,j,n,l
@ -73,9 +75,11 @@
&BEGIN_PROVIDER [ double precision, ao_dipole_y, (ao_num,ao_num)]
&BEGIN_PROVIDER [ double precision, ao_dipole_z, (ao_num,ao_num)]
BEGIN_DOC
! array of the integrals of AO_i * x AO_j
! array of the integrals of AO_i * y AO_j
! array of the integrals of AO_i * z AO_j
! * array of the integrals of AO_i * x AO_j
!
! * array of the integrals of AO_i * y AO_j
!
! * array of the integrals of AO_i * z AO_j
END_DOC
implicit none
integer :: i,j,n,l
@ -143,9 +147,11 @@
&BEGIN_PROVIDER [ double precision, ao_deriv_1_y, (ao_num,ao_num)]
&BEGIN_PROVIDER [ double precision, ao_deriv_1_z, (ao_num,ao_num)]
BEGIN_DOC
! array of the integrals of AO_i * d/dx AO_j
! array of the integrals of AO_i * d/dy AO_j
! array of the integrals of AO_i * d/dz AO_j
! * array of the integrals of AO_i * d/dx AO_j
!
! * array of the integrals of AO_i * d/dy AO_j
!
! * array of the integrals of AO_i * d/dz AO_j
END_DOC
implicit none
integer :: i,j,n,l
@ -214,47 +220,9 @@
subroutine overlap_bourrin_x_abs(A_center,B_center,alpha,beta,power_A,power_B,overlap_x,lower_exp_val,dx,nx)
implicit none
! compute the following integral :
! int [-infty ; +infty] of [(x-A_center)^(power_A) * (x-B_center)^power_B * exp(-alpha(x-A_center)^2) * exp(-beta(x-B_center)^2) ]
integer :: i,j,k,l
integer,intent(in) :: power_A,power_B
double precision, intent(in) :: lower_exp_val
double precision,intent(in) :: A_center, B_center,alpha,beta
double precision, intent(out) :: overlap_x,dx
integer, intent(in) :: nx
double precision :: x_min,x_max,domain,x,power,factor,dist,p,p_inv,rho
double precision :: P_center,pouet_timy
if(power_A.lt.0.or.power_B.lt.0)then
overlap_x = 0.d0
dx = 0.d0
return
endif
p = alpha + beta
p_inv= 1.d0/p
rho = alpha * beta * p_inv
dist = (A_center - B_center)*(A_center - B_center)
P_center = (alpha * A_center + beta * B_center) * p_inv
factor = dexp(-rho * dist)
pouet_timy = dsqrt(lower_exp_val/p)
x_min = P_center - pouet_timy
x_max = P_center + pouet_timy
!print*,'xmin = ',x_min
!print*,'xmax = ',x_max
domain = x_max-x_min
dx = domain/dble(nx)
overlap_x = 0.d0
x = x_min
do i = 1, nx
x += dx
overlap_x += (power(power_A,x-A_center) * power(power_B,x-B_center)) * dexp(-p * (x-P_center)*(x-P_center))
enddo
overlap_x *= factor * dx
end
subroutine overlap_bourrin_spread(A_center,B_center,alpha,beta,power_A,power_B,overlap_x,lower_exp_val,dx,nx)
! compute the following integral :
! Computes the following integral :
! int [-infty ; +infty] of [(x-A_center)^(power_A) * (x-B_center)^power_B * exp(-alpha(x-A_center)^2) * exp(-beta(x-B_center)^2) * x ]
! needed for the dipole and those things
implicit none
@ -264,7 +232,7 @@ end
double precision,intent(in) :: A_center, B_center,alpha,beta
double precision, intent(out) :: overlap_x,dx
integer, intent(in) :: nx
double precision :: x_min,x_max,domain,x,power,factor,dist,p,p_inv,rho
double precision :: x_min,x_max,domain,x,factor,dist,p,p_inv,rho
double precision :: P_center,pouet_timy
if(power_A.lt.0.or.power_B.lt.0)then
overlap_x = 0.d0
@ -292,19 +260,12 @@ end
x = x_min
do i = 1, nx
x += dx
overlap_x += power(power_A,x-A_center) * power(power_B,x-B_center) * dexp(-p * (x-P_center)*(x-P_center)) * x * x
overlap_x += (x-A_center)**(power_A) * (x-B_center)**(power_B) * dexp(-p * (x-P_center)*(x-P_center)) * x * x
enddo
overlap_x *= factor * dx
end
double precision function power(n,x)
implicit none
integer :: i,n
double precision :: x,accu
power = x**n
return
end
subroutine overlap_bourrin_dipole(A_center,B_center,alpha,beta,power_A,power_B,overlap_x,lower_exp_val,dx,nx)
! compute the following integral :
@ -317,7 +278,7 @@ end
double precision,intent(in) :: A_center, B_center,alpha,beta
double precision, intent(out) :: overlap_x,dx
integer, intent(in) :: nx
double precision :: x_min,x_max,domain,x,power,factor,dist,p,p_inv,rho
double precision :: x_min,x_max,domain,x,factor,dist,p,p_inv,rho
double precision :: P_center
if(power_A.lt.0.or.power_B.lt.0)then
overlap_x = 0.d0
@ -347,7 +308,7 @@ end
x = x_min
do i = 1, nx
x += dx
overlap_x += power(power_A,x-A_center) * power(power_B,x-B_center) * dexp(-p * (x-P_center)*(x-P_center)) * x
overlap_x += (x-A_center)**(power_A) * (x-B_center)**(power_B) * dexp(-p * (x-P_center)*(x-P_center)) * x
enddo
overlap_x *= factor * dx
@ -378,7 +339,7 @@ end
double precision,intent(in) :: A_center, B_center,alpha,beta
double precision, intent(out) :: overlap_x,dx
integer, intent(in) :: nx
double precision :: x_min,x_max,domain,x,power,factor,dist,p,p_inv,rho
double precision :: x_min,x_max,domain,x,factor,dist,p,p_inv,rho
double precision :: P_center,pouet_timy
if(power_A.lt.0.or.power_B.lt.0)then
overlap_x = 0.d0
@ -406,7 +367,7 @@ end
x = x_min
do i = 1, nx
x += dx
overlap_x += power(power_A,x-A_center) * power(power_B,x-B_center) * dexp(-p * (x-P_center)*(x-P_center))
overlap_x += (x-A_center)**(power_A) * (x-B_center)**(power_B) * dexp(-p * (x-P_center)*(x-P_center))
enddo
overlap_x *= factor * dx
end

View File

@ -1 +1,3 @@
Selectors_full SingleRefMethod DavidsonUndressed
Selectors_full
SingleRefMethod
DavidsonUndressed

View File

@ -1 +1,3 @@
Selectors_full SingleRefMethod DavidsonUndressed
Selectors_full
SingleRefMethod
DavidsonUndressed

View File

@ -1 +1,3 @@
MO_Basis MO_one_e_integrals Integrals_Bielec
MO_Basis
MO_one_e_integrals
Integrals_Bielec

View File

@ -1 +1,7 @@
Perturbation Selectors_full Generators_full ZMQ MPI DavidsonUndressed Iterations
Perturbation
Selectors_full
Generators_full
ZMQ
MPI
DavidsonUndressed
Iterations

View File

@ -1 +1,2 @@
Determinants Hartree_Fock
Determinants
Hartree_Fock

View File

@ -1 +1,4 @@
Integrals_Bielec AO_one_e_integrals MOGuess Bitmask
Integrals_Bielec
AO_one_e_integrals
MOGuess
Bitmask

View File

@ -1 +1,7 @@
AO_one_e_integrals MO_one_e_integrals Pseudo Bitmask ZMQ AO_Basis MO_Basis
AO_one_e_integrals
MO_one_e_integrals
Pseudo
Bitmask
ZMQ
AO_Basis
MO_Basis

View File

@ -1 +1,2 @@
MO_Basis MO_one_e_integrals
MO_Basis
MO_one_e_integrals

View File

@ -1 +1,3 @@
AO_Basis AO_one_e_integrals Electrons
AO_Basis
AO_one_e_integrals
Electrons

View File

@ -1 +1,3 @@
AO_one_e_integrals MO_Basis Pseudo
AO_one_e_integrals
MO_Basis
Pseudo

View File

@ -1 +1,3 @@
Determinants Davidson Psiref_CAS
Determinants
Davidson
Psiref_CAS

View File

@ -1 +1,2 @@
Ezfio_files Utils
Ezfio_files
Utils

View File

@ -1 +1,4 @@
Determinants Hartree_Fock Davidson MRPT_Utils
Determinants
Hartree_Fock
Davidson
MRPT_Utils

View File

@ -1 +1,2 @@
Bitmask Determinants
Bitmask
Determinants

View File

@ -1 +1,3 @@
Determinants Hartree_Fock Selectors_Utils
Determinants
Hartree_Fock
Selectors_Utils

View File

@ -1 +1,2 @@
FCI MPI
FCI
MPI

View File

@ -1 +1,34 @@
AO_Basis AO_one_e_integrals Bitmask CIS CISD Davidson DavidsonDressed DavidsonUndressed Determinants Dressing Electrons Ezfio_files FCI FourIdx Generators_CAS Generators_full Hartree_Fock Integrals_Bielec MO_Basis MOGuess MO_one_e_integrals MPI Nuclei Perturbation Pseudo Psiref_CAS Psiref_Utils Selectors_CASSD Selectors_full Selectors_Utils SingleRefMethod Utils ZMQ MRPT_Utils
AO_Basis
AO_one_e_integrals
Bitmask
CIS
CISD
Davidson
DavidsonDressed
DavidsonUndressed
Determinants
Dressing
Electrons
Ezfio_files
FCI
FourIdx
Generators_CAS
Generators_full
Hartree_Fock
Integrals_Bielec
MO_Basis
MOGuess
MO_one_e_integrals
MPI
Nuclei
Perturbation
Pseudo
Psiref_CAS
Psiref_Utils
Selectors_CASSD
Selectors_full
Selectors_Utils
SingleRefMethod
Utils
ZMQ
MRPT_Utils