ao_basis
This module describes the atomic orbitals basis set.
An AO \(\chi\) centered on nucleus A is represented as:
The AO coefficients are normalized as:
Warning
ao_coef contains the AO coefficients given in input. These do not
include the normalization constant of the AO. The ao_coef_normalized_factor
provider includes this normalization factor.
The AOs are also sorted by increasing exponent to accelerate the calculation of the two electron integrals.
Complex Gaussian-Type Orbitals (cGTOs)
Complex Gaussian-Type Orbitals (cGTOs) are also supported:
- where:
\(\alpha \in \mathbb{C}\) and \(\Re(\alpha) > 0\) (specified by
ao_expoandao_expo_im),\(\mathbf{k} = (k_x, k_y, k_z) \in \mathbb{R}^3\) (specified by
ao_expo_pw),\(\phi = \phi_x + \phi_y + \phi_z \in \mathbb{R}\) (specified by
ao_expo_phase).
EZFIO parameters
- ao_basis
Name of the AO basis set
- ao_num
Number of AOs
- ao_prim_num
Number of primitives per AO
- ao_prim_num_max
Maximum number of primitives
Default: =maxval(ao_basis.ao_prim_num)
- ao_nucl
Index of the nucleus on which the AO is centered
- ao_power
Powers of x, y and z for each AO
- ao_coef
Primitive coefficients, read from input. Those should not be used directly, as the MOs are expressed on the basis of normalized AOs.
- ao_expo
Exponents for each primitive of each AO
- ao_md5
MD5 key, specific of the AO basis
- ao_cartesian
If
true, use AOs in Cartesian coordinates (6d,10f,…)Default: false
- ao_normalized
Use normalized basis functions
Default: true
- primitives_normalized
Use normalized primitive functions
Default: true
- use_cgtos
If true, use cgtos for AO integrals
Default: False
- ao_expo_im
imag part for Exponents for each primitive of each cGTOs AO
- ao_expo_pw
plane wave part for each primitive GTOs AO
- ao_expo_phase
phase shift for each primitive GTOs AO
Providers
- ao_coef_normalization_factor
File :
ao_basis/aos.irp.fdouble precision, allocatable :: ao_coef_normalized (ao_num,ao_prim_num_max) double precision, allocatable :: ao_coef_normalization_factor (ao_num)
Coefficients including the AO normalization
Needs:
ao_coefao_expoao_normalized
ao_numao_powerao_prim_num
ao_prim_num_maxprimitives_normalized
Needed by:
ao_coef_normalized_ordered
- ao_coef_normalized
File :
ao_basis/aos.irp.fdouble precision, allocatable :: ao_coef_normalized (ao_num,ao_prim_num_max) double precision, allocatable :: ao_coef_normalization_factor (ao_num)
Coefficients including the AO normalization
Needs:
ao_coefao_expoao_normalized
ao_numao_powerao_prim_num
ao_prim_num_maxprimitives_normalized
Needed by:
ao_coef_normalized_ordered
- ao_coef_normalized_ordered
File :
ao_basis/aos.irp.fdouble precision, allocatable :: ao_coef_normalized_ordered (ao_num,ao_prim_num_max) double precision, allocatable :: ao_expo_ordered (ao_num,ao_prim_num_max)
Sorted primitives to accelerate 4 index MO transformation
Needs:
ao_coef_normalizedao_expo
ao_numao_prim_num
ao_prim_num_max
Needed by:
ao_coef_normalized_ordered_transp
ao_expo_ordered_transp
- ao_coef_normalized_ordered_transp
File :
ao_basis/aos.irp.fdouble precision, allocatable :: ao_coef_normalized_ordered_transp (ao_prim_num_max,ao_num)
Transposed
ao_coef_normalized_orderedNeeds:
ao_coef_normalized_ordered
ao_num
ao_prim_num_max
Needed by:
ao_coef_normalized_ordered_transp_per_nuclao_deriv2_xao_deriv_1_xao_dipole_xao_integrals_n_eao_integrals_n_e_per_atom
ao_integrals_pt_chrgao_overlapao_overlap_absao_pseudo_integrals_localao_pseudo_integrals_non_localao_spread_x
ao_two_e_integral_alphaao_two_e_integral_erf_schwartzao_two_e_integral_schwartzao_two_e_integrals_erf_in_mapao_two_e_integrals_in_mapcholesky_ao_num
- ao_coef_normalized_ordered_transp_per_nucl
File :
ao_basis/aos_transp.irp.fdouble precision, allocatable :: ao_coef_normalized_ordered_transp_per_nucl (ao_prim_num_max,N_AOs_max,nucl_num)
Needs:
ao_coef_normalized_ordered_transpao_prim_num
ao_prim_num_maxnucl_aos_transposed
nucl_n_aosnucl_num
- ao_expo_ordered
File :
ao_basis/aos.irp.fdouble precision, allocatable :: ao_coef_normalized_ordered (ao_num,ao_prim_num_max) double precision, allocatable :: ao_expo_ordered (ao_num,ao_prim_num_max)
Sorted primitives to accelerate 4 index MO transformation
Needs:
ao_coef_normalizedao_expo
ao_numao_prim_num
ao_prim_num_max
Needed by:
ao_coef_normalized_ordered_transp
ao_expo_ordered_transp
- ao_expo_ordered_transp
File :
ao_basis/aos.irp.fdouble precision, allocatable :: ao_expo_ordered_transp (ao_prim_num_max,ao_num)
Transposed
ao_expo_orderedNeeds:
ao_coef_normalized_ordered
ao_num
ao_prim_num_max
Needed by:
ao_deriv2_xao_deriv_1_xao_dipole_xao_expo_ordered_transp_per_nuclao_integrals_n_eao_integrals_n_e_per_atom
ao_integrals_pt_chrgao_overlapao_overlap_absao_pseudo_integrals_localao_pseudo_integrals_non_localao_spread_x
ao_two_e_integral_alphaao_two_e_integral_erf_schwartzao_two_e_integral_schwartzao_two_e_integrals_erf_in_mapao_two_e_integrals_in_mapcholesky_ao_num
- ao_expo_ordered_transp_per_nucl
File :
ao_basis/aos_transp.irp.fdouble precision, allocatable :: ao_expo_ordered_transp_per_nucl (ao_prim_num_max,N_AOs_max,nucl_num)
Needs:
ao_expo_ordered_transpao_prim_num
ao_prim_num_maxnucl_aos_transposed
nucl_n_aosnucl_num
- ao_first_of_shell
File :
ao_basis/aos.irp.finteger, allocatable :: ao_first_of_shell (shell_num)
Index of the shell to which the AO corresponds
Needs:
shell_ang_mom
shell_num
- ao_l
File :
ao_basis/aos.irp.finteger, allocatable :: ao_l (ao_num) integer :: ao_l_max character*(128), allocatable :: ao_l_char (ao_num)
\(l\) value of the AO: :math`a+b+c` in \(x^a y^b z^c\)
Needs:
ao_num
ao_power
l_to_character
Needed by:
ao_cart_to_sphe_coef
ao_l_char_space
nucl_list_shell_aos
- ao_l_char
File :
ao_basis/aos.irp.finteger, allocatable :: ao_l (ao_num) integer :: ao_l_max character*(128), allocatable :: ao_l_char (ao_num)
\(l\) value of the AO: :math`a+b+c` in \(x^a y^b z^c\)
Needs:
ao_num
ao_power
l_to_character
Needed by:
ao_cart_to_sphe_coef
ao_l_char_space
nucl_list_shell_aos
- ao_l_char_space
File :
ao_basis/aos.irp.fcharacter*(4), allocatable :: ao_l_char_space (ao_num)
Converts an l value to a string
Needs:
ao_l
ao_num
ao_power
- ao_l_max
File :
ao_basis/aos.irp.finteger, allocatable :: ao_l (ao_num) integer :: ao_l_max character*(128), allocatable :: ao_l_char (ao_num)
\(l\) value of the AO: :math`a+b+c` in \(x^a y^b z^c\)
Needs:
ao_num
ao_power
l_to_character
Needed by:
ao_cart_to_sphe_coef
ao_l_char_space
nucl_list_shell_aos
- ao_power_ordered_transp_per_nucl
File :
ao_basis/aos_transp.irp.finteger, allocatable :: ao_power_ordered_transp_per_nucl (3,N_AOs_max,nucl_num)
Needs:
ao_powernucl_aos_transposed
nucl_n_aos
nucl_num
- ao_prim_num_max
File :
ao_basis/aos.irp.finteger :: ao_prim_num_max
Max number of primitives.
Needs:
ao_prim_num
Needed by:
ao_coefao_coef_cgtos_norm_ord_transpao_coef_norm_cgtosao_coef_norm_cgtos_ordao_coef_normalized
ao_coef_normalized_orderedao_coef_normalized_ordered_transpao_coef_normalized_ordered_transp_per_nuclao_expoao_expo_cgtos_ord_transp
ao_expo_imao_expo_ordered_transpao_expo_ordered_transp_per_nuclao_expo_phaseao_expo_pw
- ao_shell
File :
ao_basis/aos.irp.finteger, allocatable :: ao_shell (ao_num)
Index of the shell to which the AO corresponds
Needs:
ao_num
shell_ang_mom
shell_num
- cart_to_sphe_0
File :
ao_basis/spherical_to_cartesian.irp.fdouble precision, allocatable :: cart_to_sphe_0 (1,1)
Spherical -> Cartesian Transformation matrix for l=0
- cart_to_sphe_1
File :
ao_basis/spherical_to_cartesian.irp.fdouble precision, allocatable :: cart_to_sphe_1 (3,3)
Spherical -> Cartesian Transformation matrix for l=1
Needed by:
ao_cart_to_sphe_coef
- cart_to_sphe_2
File :
ao_basis/spherical_to_cartesian.irp.fdouble precision, allocatable :: cart_to_sphe_2 (6,5)
Spherical -> Cartesian Transformation matrix for l=2
Needed by:
ao_cart_to_sphe_coef
- cart_to_sphe_3
File :
ao_basis/spherical_to_cartesian.irp.fdouble precision, allocatable :: cart_to_sphe_3 (10,7)
Spherical -> Cartesian Transformation matrix for l=3
Needed by:
ao_cart_to_sphe_coef
- cart_to_sphe_4
File :
ao_basis/spherical_to_cartesian.irp.fdouble precision, allocatable :: cart_to_sphe_4 (15,9)
Spherical -> Cartesian Transformation matrix for l=4
Needed by:
ao_cart_to_sphe_coef
- cart_to_sphe_5
File :
ao_basis/spherical_to_cartesian.irp.fdouble precision, allocatable :: cart_to_sphe_5 (21,11)
Spherical -> Cartesian Transformation matrix for l=5
Needed by:
ao_cart_to_sphe_coef
- cart_to_sphe_6
File :
ao_basis/spherical_to_cartesian.irp.fdouble precision, allocatable :: cart_to_sphe_6 (28,13)
Spherical -> Cartesian Transformation matrix for l=6
Needed by:
ao_cart_to_sphe_coef
- cart_to_sphe_7
File :
ao_basis/spherical_to_cartesian.irp.fdouble precision, allocatable :: cart_to_sphe_7 (36,15)
Spherical -> Cartesian Transformation matrix for l=7
Needed by:
ao_cart_to_sphe_coef
- cart_to_sphe_8
File :
ao_basis/spherical_to_cartesian.irp.fdouble precision, allocatable :: cart_to_sphe_8 (45,17)
Spherical -> Cartesian Transformation matrix for l=8
Needed by:
ao_cart_to_sphe_coef
- cart_to_sphe_9
File :
ao_basis/spherical_to_cartesian.irp.fdouble precision, allocatable :: cart_to_sphe_9 (55,19)
Spherical -> Cartesian Transformation matrix for l=9
Needed by:
ao_cart_to_sphe_coef
- l_to_character
File :
ao_basis/aos.irp.fcharacter*(128), allocatable :: l_to_character (0:7)
Character corresponding to the “l” value of an AO
Needed by:
ao_l
- n_aos_max
File :
ao_basis/aos.irp.finteger, allocatable :: nucl_n_aos (nucl_num) integer :: n_aos_max
Number of AOs per atom
Needs:
ao_nucl
ao_num
nucl_num
Needed by:
ao_coef_normalized_ordered_transp_per_nuclao_expo_ordered_transp_per_nucl
ao_power_ordered_transp_per_nuclnucl_aos
nucl_aos_transposednucl_list_shell_aos
- n_pt_max_i_x
File :
ao_basis/dimensions_integrals.irp.finteger :: n_pt_max_integrals integer :: n_pt_max_i_x
Number of points used in the numerical integrations.
Needs:
ao_power
Needed by:
ao_2e_cgtos_schwartzao_integrals_n_eao_integrals_n_e_cgtosao_integrals_n_e_per_atom
ao_integrals_pt_chrgao_two_e_integral_alphaao_two_e_integral_erf_schwartzao_two_e_integral_schwartz
ao_two_e_integrals_erf_in_mapao_two_e_integrals_in_mapcholesky_ao_numgauleg_t2
- n_pt_max_integrals
File :
ao_basis/dimensions_integrals.irp.finteger :: n_pt_max_integrals integer :: n_pt_max_i_x
Number of points used in the numerical integrations.
Needs:
ao_power
Needed by:
ao_2e_cgtos_schwartzao_integrals_n_eao_integrals_n_e_cgtosao_integrals_n_e_per_atom
ao_integrals_pt_chrgao_two_e_integral_alphaao_two_e_integral_erf_schwartzao_two_e_integral_schwartz
ao_two_e_integrals_erf_in_mapao_two_e_integrals_in_mapcholesky_ao_numgauleg_t2
- nucl_aos
File :
ao_basis/aos.irp.finteger, allocatable :: nucl_aos (nucl_num,N_AOs_max)
List of AOs centered on each atom
Needs:
ao_nuclao_num
nucl_n_aos
nucl_num
Needed by:
nucl_list_shell_aos
- nucl_aos_transposed
File :
ao_basis/aos_transp.irp.finteger, allocatable :: nucl_aos_transposed (N_AOs_max,nucl_num)
List of AOs attached on each atom
Needs:
ao_nuclao_num
nucl_n_aos
nucl_num
Needed by:
ao_coef_normalized_ordered_transp_per_nucl
ao_expo_ordered_transp_per_nucl
ao_power_ordered_transp_per_nucl
- nucl_list_shell_aos
File :
ao_basis/aos.irp.finteger, allocatable :: nucl_list_shell_aos (nucl_num,N_AOs_max) integer, allocatable :: nucl_num_shell_aos (nucl_num)
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
Needs:
ao_lao_power
nucl_aosnucl_n_aos
nucl_num
- nucl_n_aos
File :
ao_basis/aos.irp.finteger, allocatable :: nucl_n_aos (nucl_num) integer :: n_aos_max
Number of AOs per atom
Needs:
ao_nucl
ao_num
nucl_num
Needed by:
ao_coef_normalized_ordered_transp_per_nuclao_expo_ordered_transp_per_nucl
ao_power_ordered_transp_per_nuclnucl_aos
nucl_aos_transposednucl_list_shell_aos
- nucl_num_shell_aos
File :
ao_basis/aos.irp.finteger, allocatable :: nucl_list_shell_aos (nucl_num,N_AOs_max) integer, allocatable :: nucl_num_shell_aos (nucl_num)
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
Needs:
ao_lao_power
nucl_aosnucl_n_aos
nucl_num
- use_cgtos
File :
ao_basis/cgtos.irp.flogical :: use_cgtos
If true, use cgtos for AO integrals
Needs:
ezfio_filename
mpi_master
Needed by:
ao_deriv2_xao_integrals_n_eao_overlap
ao_two_e_integral_alphaao_two_e_integral_schwartz
ao_two_e_integrals_in_mapcholesky_ao_num
- use_cosgtos
File :
ao_basis/cosgtos.irp.flogical :: use_cosgtos
If true, use cosgtos for AO integrals
Needs:
ezfio_filename
mpi_master
Needed by:
ao_deriv2_xao_integrals_n_eao_overlap
ao_two_e_integral_alphaao_two_e_integral_schwartz
ao_two_e_integrals_in_mapcholesky_ao_num
Subroutines / functions
- ao_power_index:
File :
ao_basis/aos.irp.finteger function ao_power_index(nx,ny,nz)
Unique index given to a triplet of powers:
\(\frac{1}{2} (l-n_x) (l-n_x+1) + n_z + 1\)
- ao_value:
File :
ao_basis/aos_in_r.irp.fdouble precision function ao_value(i, r)
Returns the value of the i-th ao at point $textbf{r}$
Needs:
ao_coef_normalized_ordered_transpao_expo_ordered_transp
ao_nuclao_power
ao_prim_numnucl_coord
- give_all_aos_and_grad_and_lapl_at_r:
File :
ao_basis/aos_in_r.irp.fsubroutine give_all_aos_and_grad_and_lapl_at_r(r, aos_array, aos_grad_array, aos_lapl_array)
input : r(1) ==> r(1) = x, r(2) = y, r(3) = z
output :
aos_array(i) = ao(i) evaluated at $textbf{r}$
aos_grad_array(1,i) = $nabla_x$ of the ao(i) evaluated at $textbf{r}$
Needs:
ao_coef_normalized_ordered_transp_per_nuclao_expo_ordered_transp_per_nuclao_num
ao_power_ordered_transp_per_nuclao_prim_numnucl_aos_transposed
nucl_coordnucl_n_aosnucl_num
Called by:
give_all_mos_and_grad_and_lapl_at_r()
- give_all_aos_and_grad_at_r:
File :
ao_basis/aos_in_r.irp.fsubroutine give_all_aos_and_grad_at_r(r, aos_array, aos_grad_array)
input : r(1) ==> r(1) = x, r(2) = y, r(3) = z
output :
aos_array(i) = ao(i) evaluated at ro
aos_grad_array(1,i) = gradient X of the ao(i) evaluated at $textbf{r}$
Needs:
ao_coef_normalized_ordered_transp_per_nuclao_expo_ordered_transp_per_nuclao_num
ao_power_ordered_transp_per_nuclao_prim_numnucl_aos_transposed
nucl_coordnucl_n_aosnucl_num
Called by:
give_all_mos_and_grad_at_r()
- give_all_aos_at_r:
File :
ao_basis/aos_in_r.irp.fsubroutine give_all_aos_at_r(r, tmp_array)
input : r == r(1) = x and so on
output : tmp_array(i) = aos(i) evaluated in $textbf{r}$
Needs:
ao_coef_normalized_ordered_transp_per_nuclao_expo_ordered_transp_per_nuclao_num
ao_power_ordered_transp_per_nuclao_prim_numnucl_aos_transposed
nucl_coordnucl_n_aosnucl_num
Called by:
give_all_mos_at_r()
- primitive_value:
File :
ao_basis/aos_in_r.irp.fdouble precision function primitive_value(i, j, r)
Returns the value of the j-th primitive of the i-th AO at point $textbf{r} without the coefficient
Needs:
ao_expo_ordered_transpao_nucl
ao_power
nucl_coord