10
0
mirror of https://github.com/LCPQ/quantum_package synced 2024-06-02 11:25:26 +02:00
* minor changes in README.rst of many src files

* added ROHF_b2.gms.out

* modified some scripts

* modified README.rst

* modifs in docs/intro

* added qp_e_conv_fci

* changed the doc

* added some README.rst

* modifs in docs

* introduced the sgn grids

* added 21.rsks.bats
This commit is contained in:
Anthony Scemama 2019-01-02 21:48:54 +01:00 committed by GitHub
parent 590a0d5e41
commit c7894e3419
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
54 changed files with 743 additions and 1038 deletions

4
TODO
View File

@ -1,3 +1,4 @@
!!!!!!!!!! ENLEVER CETTE SALOPERIE DE TRUC DANS VI !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# qp_module
* Mettre le fichier LIB
@ -5,8 +6,7 @@
# Web/doc
* Creer une page web pas trop degueu et la mettre ici : http://lcpq.github.io/quantum_package
* Manu : README
* dm_for_dft
* Pour les README.rst des modules, mettre un deuxième saut à la ligne pour la doc en ligne.
* prendre des bouts du src/README.rst et en mettre partout

View File

@ -68,9 +68,11 @@
.. |QMC| replace:: :abbr:`QMC (Quantum Monte Carlo)`
.. |rst| replace:: :abbr:`RST (ReStructured Text)`
.. |SCF| replace:: :abbr:`SCF (Self Consistent Field)`
.. |RSH| replace:: :abbr:`RSH (Range-Separated-Hybrids)`
.. |RSH| replace:: :abbr:`RSH (Range Separated Hybrids)`
.. |RSDFT| replace:: :abbr:`RSDFT (Range Separated Density Functional Theory)`
.. |KS-DFT| replace:: :abbr:`KS-DFT (Kohn-Sham Density Functional Theory)`
.. |sCI| replace:: :abbr:`sCI (Selected-CI)`
.. |WFT| replace:: :abbr:`WFT (Wave Function Theory)`
.. |CASSCF| replace:: |CAS| - |SCF|
.. |FCIQMC| replace:: |FCI| - |QMC|

View File

@ -12,15 +12,16 @@ What it is
==========
The |qp| is an open-source programming environment for quantum chemistry,
especially for `wave function theory <https://en.wikipedia.org/wiki/Ab_initio_quantum_chemistry_methods>`_ (WFT).
especially for `wave function theory <https://en.wikipedia.org/wiki/Ab_initio_quantum_chemistry_methods>`_ (|WFT|).
The main goal is the development of selected configuration interaction |sCI|
methods and multi-reference perturbation theory |MRPT| in the
determinant-driven paradigm. It also contains the very basics of Kohn-Sham `density functional theory <https://en.wikipedia.org/wiki/Density_functional_theory>`_ |KS-DFT| and `range-separated hybrids <https://aip.scitation.org/doi/10.1063/1.1383587>`_ |RSH|.
Regarding the The determinant-driven framework allows the programmer to include any arbitrary set of
The determinant-driven framework allows the programmer to include any arbitrary set of
determinants in the variational space, and thus gives a complete freedom in the methodological
development. The basics of RSH together with the WFT framework also allow a simple coupling between DFT and WFT calculations (see the plugins of `<https://gitlab.com/eginer/qp_plugins_eginer>`_)
All the programs are developed with the `IRPF90`_ code generator, which simplifies
development. The basic ingredients of |RSH| together with those of the |WFT| framework available in the |qp| library allows one to easily develop range-separated DFT (|RSDFT|) approaches (see for instance the plugins at `<https://gitlab.com/eginer/qp_plugins_eginer>`_).
All the programs are developed with the `IRPF90`_ code generator, which considerably simplifies
the collaborative development, and the development of new features.
@ -29,13 +30,13 @@ What it is not
==============
The |qp| is *not* a general purpose quantum chemistry program.
First of all, it is a library. The users of the |qp| should develop
their own programs.
First of all, it is a *library* to develop new theories and algorithms in quantum chemistry.
Therefore, beside the use of the programs of the core modules, the users of the |qp| should develop their own programs.
The |qp| has been designed specifically for sCI, so all the
The |qp| has been designed specifically for |sCI|, so all the
algorithms which are programmed are not adapted to run SCF or DFT calculations
on thousands of atoms. Currently, the systems targeted have less than 600
molecular orbitals.
molecular orbitals. This limit is due to the memory bottleneck induced by the storring of the two-electron integrals (see ``mo_two_e_integrals`` and ``ao_two_e_integrals``).
The |qp| is *not* a massive production code. For conventional
methods such as Hartree-Fock, CISD or MP2, the users are recommended to use the
@ -54,14 +55,17 @@ Multiple programs were developed with the |qp|, such as:
- Selected Full-CI + Epstein-Nesbet PT2 (CIPSI) :cite:`Caffarel_2016,Caffarel_2016.2,Loos_2018,Scemama_2018,Dash_2018`
- Hybrid stochastic/deterministic MR-PT2 :cite:`Garniron_2017.2,Loos_2018`
- Orbital optimization for open-shell systems :cite:`Giner2016Mar,Giner_2017.3`
- CIS, CISD, MP2
- Selected CISD
- Jeziorsky-Monkhorst MR-PT2 :cite:`Giner_2017`
- Effective Hamiltonian for variational MR wave functions :cite:`Giner_2017.2`
- Selected CAS+SD
- Selected difference-dedicated CI (DD-CI)
- Multi-Reference Coupled Cluster (MR-CCSD) :cite:`Giner_2016,Garniron_2017`
- Shifted-Bk with CIPSI :cite:`Garniron_2018`
- CIPSI with range-separated DFT
- CIPSI with range-separated DFT (plugins at `<https://gitlab.com/eginer/qp_plugins_eginer>`_)
- DFT for basis set corrections :cite:`Giner_2018`
All these programs can generate ground and excited states, and spin pure wave
functions (eigenstates of |S^2|).

View File

@ -102,6 +102,8 @@ The determinants in |SetDI| will be characterized as **internal**.
the wave function, low |EPT|, ...).
Of course, such a procedure can be applied on any state and therefore can allow to treat both ground and excited states.
Approximations to accelerate the selection
------------------------------------------

View File

@ -12,9 +12,10 @@ All the one-electron integrals in the |AO| basis are here.
The most important providers for usual quantum-chemistry calculation are:
# `ao_kinetic_integral` which are the kinetic operator integrals on the |AO| basis (see :file:`kin_ao_ints.irp.f`)
# `ao_nucl_elec_integral` which are the nuclear-elctron operator integrals on the |AO| basis (see :file:`pot_ao_ints.irp.f`)
# `ao_mono_elec_integral` which are the the h_core operator integrals on the |AO| basis (see :file:`ao_mono_ints.irp.f`)
* `ao_kinetic_integral` which are the kinetic operator integrals on the |AO| basis (see :file:`kin_ao_ints.irp.f`)
* `ao_nucl_elec_integral` which are the nuclear-elctron operator integrals on the |AO| basis (see :file:`pot_ao_ints.irp.f`)
* `ao_mono_elec_integral` which are the the h_core operator integrals on the |AO| basis (see :file:`ao_mono_ints.irp.f`)
Note that you can find other interesting integrals related to the position operator in :file:`spread_dipole_ao.irp.f`.
@ -896,7 +897,7 @@ Subroutines / functions
File: :file:`spread_dipole_ao.irp.f`
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

View File

@ -13,7 +13,7 @@ This module contains some global variables (such as densities and energies) whic
The main providers of that module are:
# `data_one_body_alpha_dm_mo` and `data_one_body_beta_dm_mo` which are the one-body alpha and beta densities which are necessary read from the EZFIO folder.
* `data_one_body_alpha_dm_mo` and `data_one_body_beta_dm_mo` which are the one-body alpha and beta densities which are necessary read from the EZFIO folder.
Thanks to these providers you can use any density matrix that does not necessary corresponds to that of the current wave function.

View File

@ -10,14 +10,20 @@ becke_numerical_grid
This module contains all quantities needed to build the Becke's grid used in general for DFT integration. Note that it can be used for whatever integration in R^3 as long as the functions to be integrated are mostly concentrated near the atomic regions.
This grid is built as the reunion of a spherical grid around each atom. Each spherical grid contains a certain number of radial and angular points.
This grid is built as the reunion of a spherical grid around each atom. Each spherical grid contains
a certain number of radial and angular points. No pruning is done on the angular part of the grid.
The main keyword for that modue is:
* :option:`becke_numerical_grid grid_type_sgn` which controls the precision of the grid according the standard **SG-n** grids. This keyword controls the two providers `n_points_integration_angular` `n_points_radial_grid`.
The main providers of that module are:
# :option:`becke_numerical_grid n_points_integration_angular` which is the number of angular integration points. WARNING: it obeys to specific rules so it cannot be any integer number. Some of the possible values are [ 50 | 74 | 266 | 590 | 1202 | 2030 | 5810 ] for instance. See :file:`angular.f` for more details.
# :option:`becke_numerical_grid n_points_radial_grid` which is the number of radial angular points. This can be any strictly positive integer. Nevertheless, a minimum of 50 is in general necessary.
# `final_grid_points` which are the (x,y,z) coordinates of the grid points.
# `final_weight_at_r_vector` which are the weights at each grid point
* `n_points_integration_angular` which is the number of angular integration points. WARNING: it obeys to specific rules so it cannot be any integer number. Some of the possible values are [ 50 | 74 | 170 | 194 | 266 | 302 | 590 | 1202 | 2030 | 5810 ] for instance. See :file:`angular.f` for more details.
* `n_points_radial_grid` which is the number of radial angular points. This can be any strictly positive integer. Nevertheless, a minimum of 50 is in general necessary.
* `final_grid_points` which are the (x,y,z) coordinates of the grid points.
* `final_weight_at_r_vector` which are the weights at each grid point
For a simple example of how to use the grid, see :file:`example.irp.f`.
@ -76,17 +82,11 @@ See next section for explanations and citation policies.
EZFIO parameters
----------------
.. option:: n_points_integration_angular
.. option:: grid_type_sgn
Number of angular points per atom for 3d numerical integration, needed for DFT for example [ 50 | 74 | 266 | 590 | 1202 | 2030 | 5810 ]
Type of grid used for the Becke's numerical grid. Can be, by increasing accuracy: [ 0 | 1 | 2 | 3 ]
Default: 590
.. option:: n_points_radial_grid
Number of radial points per atom for 3d numerical integration, needed for DFT for example
Default: 60
Default: 2
Providers
@ -139,44 +139,25 @@ Providers
.. code:: text
double precision, allocatable :: final_grid_points (3,n_points_final_grid)
double precision, allocatable :: final_weight_functions_at_final_grid_points (n_points_final_grid)
double precision, allocatable :: final_weight_at_r_vector (n_points_final_grid)
integer, allocatable :: index_final_points (3,n_points_final_grid)
integer, allocatable :: index_final_points_reverse (n_points_integration_angular,n_points_radial_grid,nucl_num)
File: :file:`grid_becke_vector.irp.f`
final_grid_points(1:3,j) = (/ x, y, z /) of the jth grid point
final_weight_functions_at_final_grid_points(i) = Total weight function of the ith grid point which contains the Lebedev, Voronoi and radial weights contributions
final_weight_at_r_vector(i) = Total weight function of the ith grid point which contains the Lebedev, Voronoi and radial weights contributions
index_final_points(1:3,i) = gives the angular, radial and atomic indices associated to the ith grid point
index_final_points_reverse(i,j,k) = index of the grid point having i as angular, j as radial and l as atomic indices
.. c:var:: final_weight_functions_at_final_grid_points
.. c:var:: final_weight_at_r
.. code:: text
double precision, allocatable :: final_grid_points (3,n_points_final_grid)
double precision, allocatable :: final_weight_functions_at_final_grid_points (n_points_final_grid)
integer, allocatable :: index_final_points (3,n_points_final_grid)
integer, allocatable :: index_final_points_reverse (n_points_integration_angular,n_points_radial_grid,nucl_num)
File: :file:`grid_becke_vector.irp.f`
final_grid_points(1:3,j) = (/ x, y, z /) of the jth grid point
final_weight_functions_at_final_grid_points(i) = Total weight function of the ith grid point which contains the Lebedev, Voronoi and radial weights contributions
index_final_points(1:3,i) = gives the angular, radial and atomic indices associated to the ith grid point
index_final_points_reverse(i,j,k) = index of the grid point having i as angular, j as radial and l as atomic indices
.. c:var:: final_weight_functions_at_grid_points
.. code:: text
double precision, allocatable :: final_weight_functions_at_grid_points (n_points_integration_angular,n_points_radial_grid,nucl_num)
double precision, allocatable :: final_weight_at_r (n_points_integration_angular,n_points_radial_grid,nucl_num)
File: :file:`grid_becke.irp.f`
@ -185,6 +166,25 @@ Providers
.. c:var:: final_weight_at_r_vector
.. code:: text
double precision, allocatable :: final_grid_points (3,n_points_final_grid)
double precision, allocatable :: final_weight_at_r_vector (n_points_final_grid)
integer, allocatable :: index_final_points (3,n_points_final_grid)
integer, allocatable :: index_final_points_reverse (n_points_integration_angular,n_points_radial_grid,nucl_num)
File: :file:`grid_becke_vector.irp.f`
final_grid_points(1:3,j) = (/ x, y, z /) of the jth grid point
final_weight_at_r_vector(i) = Total weight function of the ith grid point which contains the Lebedev, Voronoi and radial weights contributions
index_final_points(1:3,i) = gives the angular, radial and atomic indices associated to the ith grid point
index_final_points_reverse(i,j,k) = index of the grid point having i as angular, j as radial and l as atomic indices
.. c:var:: grid_points_per_atom
.. code:: text
@ -217,14 +217,14 @@ Providers
.. code:: text
double precision, allocatable :: final_grid_points (3,n_points_final_grid)
double precision, allocatable :: final_weight_functions_at_final_grid_points (n_points_final_grid)
double precision, allocatable :: final_weight_at_r_vector (n_points_final_grid)
integer, allocatable :: index_final_points (3,n_points_final_grid)
integer, allocatable :: index_final_points_reverse (n_points_integration_angular,n_points_radial_grid,nucl_num)
File: :file:`grid_becke_vector.irp.f`
final_grid_points(1:3,j) = (/ x, y, z /) of the jth grid point
final_weight_functions_at_final_grid_points(i) = Total weight function of the ith grid point which contains the Lebedev, Voronoi and radial weights contributions
final_weight_at_r_vector(i) = Total weight function of the ith grid point which contains the Lebedev, Voronoi and radial weights contributions
index_final_points(1:3,i) = gives the angular, radial and atomic indices associated to the ith grid point
index_final_points_reverse(i,j,k) = index of the grid point having i as angular, j as radial and l as atomic indices
@ -236,14 +236,14 @@ Providers
.. code:: text
double precision, allocatable :: final_grid_points (3,n_points_final_grid)
double precision, allocatable :: final_weight_functions_at_final_grid_points (n_points_final_grid)
double precision, allocatable :: final_weight_at_r_vector (n_points_final_grid)
integer, allocatable :: index_final_points (3,n_points_final_grid)
integer, allocatable :: index_final_points_reverse (n_points_integration_angular,n_points_radial_grid,nucl_num)
File: :file:`grid_becke_vector.irp.f`
final_grid_points(1:3,j) = (/ x, y, z /) of the jth grid point
final_weight_functions_at_final_grid_points(i) = Total weight function of the ith grid point which contains the Lebedev, Voronoi and radial weights contributions
final_weight_at_r_vector(i) = Total weight function of the ith grid point which contains the Lebedev, Voronoi and radial weights contributions
index_final_points(1:3,i) = gives the angular, radial and atomic indices associated to the ith grid point
index_final_points_reverse(i,j,k) = index of the grid point having i as angular, j as radial and l as atomic indices
@ -289,11 +289,43 @@ Providers
.. c:var:: weight_functions_at_grid_points
.. c:var:: n_points_integration_angular
.. code:: text
double precision, allocatable :: weight_functions_at_grid_points (n_points_integration_angular,n_points_radial_grid,nucl_num)
integer :: n_points_radial_grid
integer :: n_points_integration_angular
File: :file:`grid_becke.irp.f`
n_points_radial_grid = number of radial grid points per atom
n_points_integration_angular = number of angular grid points per atom
These numbers are automatically set by setting the grid_type_sgn parameter
.. c:var:: n_points_radial_grid
.. code:: text
integer :: n_points_radial_grid
integer :: n_points_integration_angular
File: :file:`grid_becke.irp.f`
n_points_radial_grid = number of radial grid points per atom
n_points_integration_angular = number of angular grid points per atom
These numbers are automatically set by setting the grid_type_sgn parameter
.. c:var:: weight_at_r
.. code:: text
double precision, allocatable :: weight_at_r (n_points_integration_angular,n_points_radial_grid,nucl_num)
File: :file:`grid_becke.irp.f`

View File

@ -189,7 +189,7 @@ Providers
File: :file:`u0_h_u0.irp.f`
Energy of the current wave function
Electronic energy of the current wave function

View File

@ -13,8 +13,8 @@ This module defines the *provider* of the density used for the DFT related calcu
This definition is done through the keyword :option:`density_for_dft density_for_dft`.
The density can be:
# WFT : the density is computed with a potentially multi determinant wave function (see variables `psi_det` and `psi_det`)# input_density : the density is set to a density previously stored in the |EZFIO| folder (see ``aux_quantities``)
# damping_rs_dft : the density is damped between the input_density and the WFT density, with a damping factor of :option:`density_for_dft damping_for_rs_dft`
* WFT : the density is computed with a potentially multi determinant wave function (see variables `psi_det` and `psi_det`)# input_density : the density is set to a density previously stored in the |EZFIO| folder (see ``aux_quantities``)
* damping_rs_dft : the density is damped between the input_density and the WFT density, with a damping factor of :option:`density_for_dft damping_for_rs_dft`

View File

@ -12,16 +12,16 @@ Contains everything for the computation of the Hamiltonian matrix elements in th
The main providers for this module are:
# :option:`determinants n_states`: number of states to be computed
# `psi_det`: list of determinants in the wave function used in many routines/providers of the |QP|.
# `psi_coef`: list of coefficients, for all :option:`determinants n_states` states, and all determinants.
* :option:`determinants n_states`: number of states to be computed
* `psi_det`: list of determinants in the wave function used in many routines/providers of the |QP|.
* `psi_coef`: list of coefficients, for all :option:`determinants n_states` states, and all determinants.
The main routines for this module are:
# `i_H_j`: computes the Hamiltonian matrix element between two arbitrary Slater determinants.
# `i_H_j_s2`: computes the Hamiltonian and (:math:`S^2`) matrix element between two arbitrary Slater determinants.
# `i_H_j_verbose`: returns the decomposition in terms of one- and two-body components of the Hamiltonian matrix elements between two arbitrary Slater determinants. Also return the fermionic phase factor.
# `i_H_psi`: computes the Hamiltonian matrix element between an arbitrary Slater determinant and a wave function composed of a sum of arbitrary Slater determinants.
* `i_H_j`: computes the Hamiltonian matrix element between two arbitrary Slater determinants.
* `i_H_j_s2`: computes the Hamiltonian and (:math:`S^2`) matrix element between two arbitrary Slater determinants.
* `i_H_j_verbose`: returns the decomposition in terms of one- and two-body components of the Hamiltonian matrix elements between two arbitrary Slater determinants. Also return the fermionic phase factor.
* `i_H_psi`: computes the Hamiltonian matrix element between an arbitrary Slater determinant and a wave function composed of a sum of arbitrary Slater determinants.
For an example of how to use these routines and providers, take a look at :file:`example.irp.f`.
@ -37,6 +37,12 @@ EZFIO parameters
Default: 1000000
.. option:: n_det_print_wf
Maximum number of determinants to be printed with the program print_wf
Default: 10000
.. option:: n_det_max_full
Maximum number of determinants where |H| is fully diagonalized

View File

@ -10,11 +10,11 @@ dft_keywords
This module contains the main keywords related to a DFT calculation or RS-DFT calculation, such as:
# :option:`dft_keywords exchange_functional`
# :option:`dft_keywords correlation_functional`
# :option:`dft_keywords HF_exchange` : only relevent for the :ref:`ks_scf` program
* :option:`dft_keywords exchange_functional`
* :option:`dft_keywords correlation_functional`
* :option:`dft_keywords HF_exchange` : only relevent for the :ref:`ks_scf` program
The keyword for the range separation parameter :math:`\mu` is the :option:`ao_two_e_erf_integrals mu_erf` keyword.
The keyword for the **range separation parameter** :math:`\mu` is the :option:`ao_two_e_erf_integrals mu_erf` keyword.
The keyword for the type of density used in RS-DFT calculation with a multi-configurational wave function is the :option:`density_for_dft density_for_dft` keyword.

View File

@ -12,17 +12,20 @@ This module contains all the one-body related quantities needed to perform DFT o
Therefore, it contains most of the properties which depends on the one-body density and density matrix.
The most important files and variables are:
# The general *providers* for the x/c energies in :file:`e_xc_general.irp.f`
# The general *providers* for the x/c potentials in :file:`pot_general.irp.f`
# The short-range hartree operator and all related quantities in :file:`sr_coulomb.irp.f`
* The general *providers* for the x/c energies in :file:`e_xc_general.irp.f`
* The general *providers* for the x/c potentials in :file:`pot_general.irp.f`
* The short-range hartree operator and all related quantities in :file:`sr_coulomb.irp.f`
These *providers* will be used in many DFT-related programs, such as :file:`ks_scf.irp.f` or :file:`rs_ks_scf.irp.f`.
It is also needed to compute the effective one-body operator needed in multi-determinant RS-DFT (see plugins by eginer).
Some other interesting quantities:
# The LDA and PBE *providers* for the x/c energies in :file:`e_xc.irp.f` and :file:`sr_exc.irp.f`
# The LDA and PBE *providers* for the x/c potentials on the AO basis in :file:`pot_ao.irp.f` and :file:`sr_pot_ao.irp.f`
# The :math:`h_{core}` energy computed directly with the one-body density matrix in :file:`one_e_energy_dft.irp.f`
# LDA and PBE short-range functionals *subroutines* in :file:`exc_sr_lda.irp.f` and :file:`exc_sr_pbe.irp.f`
* The LDA and PBE *providers* for the x/c energies in :file:`e_xc.irp.f` and :file:`sr_exc.irp.f`
* The LDA and PBE *providers* for the x/c potentials on the AO basis in :file:`pot_ao.irp.f` and :file:`sr_pot_ao.irp.f`
* The :math:`h_{core}` energy computed directly with the one-body density matrix in :file:`one_e_energy_dft.irp.f`
* LDA and PBE short-range functionals *subroutines* in :file:`exc_sr_lda.irp.f` and :file:`exc_sr_pbe.irp.f`

View File

@ -33,33 +33,6 @@ Providers
.. 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
@ -75,20 +48,6 @@ Providers
.. 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
@ -117,29 +76,3 @@ Providers
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

@ -16,6 +16,7 @@ The Hartree-Fock in an SCF and therefore is based on the ``scf_utils`` structure
It performs the following actions:
#. Compute/Read all the one- and two-electron integrals, and store them in memory
#. Check in the |EZFIO| database if there is a set of |MOs|. If there is, it
will read them as initial guess. Otherwise, it will create a guess.
#. Perform the |SCF| iterations
@ -25,6 +26,7 @@ For the keywords related to the |SCF| procedure, see the ``scf_utils`` directory
The main are:
# :option:`scf_utils thresh_scf`
# :option:`scf_utils level_shift`
At each iteration, the |MOs| are saved in the |EZFIO| database. Hence, if the calculation
@ -55,13 +57,83 @@ EZFIO parameters
Energy HF
Default: 0.
Providers
---------
.. c:var:: 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: :file:`fock_matrix_hf.irp.f`
Alpha Fock matrix in AO basis set
.. 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_hf.irp.f`
Alpha Fock matrix in AO basis set
.. c:var:: extra_e_contrib_density
.. code:: text
double precision :: extra_e_contrib_density
File: :file:`hf_energy.irp.f`
Extra contribution to the SCF energy coming from the density.
For a Hartree-Fock calculation: extra_e_contrib_density = 0
For a Kohn-Sham or Range-separated Kohn-Sham: the exchange/correlation - trace of the V_xc potential
.. c:var:: 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: :file:`fock_matrix_hf.irp.f`
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_hf.irp.f`
Alpha Fock matrix in AO basis set
.. c:var:: hf_energy
.. code:: text
@ -112,6 +184,34 @@ Subroutines / functions
.. c:function:: create_guess
.. code:: text
subroutine create_guess
File: :file:`scf_old.irp.f`
Create a MO guess if no MOs are present in the EZFIO directory
.. c:function:: run
.. code:: text
subroutine run
File: :file:`scf_old.irp.f`
Run SCF calculation
.. c:function:: scf
.. code:: text

View File

@ -23,8 +23,9 @@ It performs the following actions:
The definition of the Fock matrix is in :file:`kohn_sham fock_matrix_ks.irp.f`
For the keywords related to the |SCF| procedure, see the ``scf_utils`` directory where you will find all options.
The main are:
# :option:`scf_utils thresh_scf`
# :option:`scf_utils level_shift`
#. :option:`scf_utils thresh_scf`
#. :option:`scf_utils level_shift`
At each iteration, the |MOs| are saved in the |EZFIO| database. Hence, if the calculation
crashes for any unexpected reason, the calculation can be restarted by running again
@ -51,34 +52,6 @@ Providers
---------
.. c:var:: 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: :file:`fock_matrix_ks.irp.f`
Alpha Fock matrix in ao basis set
.. 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_ks.irp.f`
Alpha Fock matrix in ao basis set
.. c:var:: ao_potential_alpha_xc
.. code:: text
@ -133,21 +106,6 @@ Providers
.. c:var:: extra_e_contrib_density
.. code:: text
double precision :: extra_e_contrib_density
File: :file:`ks_enery.irp.f`
Extra contribution to the SCF energy coming from the density.
For a Hartree-Fock calculation: extra_e_contrib_density = 0
For a Kohn-Sham or Range-separated Kohn-Sham: the exchange/correlation - 1/2 trace of the V_xc potential
.. c:var:: fock_matrix_alpha_no_xc_ao
.. code:: text
@ -162,34 +120,6 @@ Providers
.. c:var:: 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: :file:`fock_matrix_ks.irp.f`
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_ks.irp.f`
Alpha Fock matrix in ao basis set
.. c:var:: fock_matrix_beta_no_xc_ao
.. code:: text
@ -308,34 +238,6 @@ Subroutines / functions
.. c:function:: create_guess
.. code:: text
subroutine create_guess
File: :file:`ks_scf.irp.f`
Create a MO guess if no MOs are present in the EZFIO directory
.. c:function:: run
.. code:: text
subroutine run
File: :file:`ks_scf.irp.f`
Run SCF calculation
.. c:function:: srs_ks_cf
.. code:: text

View File

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

View File

@ -203,21 +203,6 @@ 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

View File

@ -12,166 +12,3 @@ 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,369 +14,3 @@ 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

@ -18,15 +18,18 @@ The ``scf_utils`` module is meant to be included in the :file:`NEED` of the vari
All SCF programs perform the following actions:
#. Compute/Read all the one- and two-electron integrals, and store them in memory
#. Check in the |EZFIO| database if there is a set of |MOs|. If there is, it
will read them as initial guess. Otherwise, it will create a guess.
#. Perform the |SCF| iterations based on the definition of the Fock matrix
The main keywords/options are:
# :option:`scf_utils thresh_scf`
# :option:`scf_utils level_shift`
* :option:`scf_utils thresh_scf`
* :option:`scf_utils level_shift`
At each iteration, the |MOs| are saved in the |EZFIO| database. Hence, if the calculation
crashes for any unexpected reason, the calculation can be restarted by running again
@ -75,7 +78,7 @@ EZFIO parameters
Energy shift on the virtual MOs to improve SCF convergence
Default: 0.1
Default: 0.
.. option:: scf_algorithm

View File

@ -12,3 +12,74 @@ Include this module for single reference methods.
Using this module, the only generator determinant is the Hartree-Fock determinant.
Providers
---------
.. 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_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:: select_max
.. code:: text
double precision, allocatable :: select_max (1)
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 select_max

View File

@ -73,6 +73,20 @@ Subroutines / functions
.. c:function:: print_r2
.. code:: text
subroutine print_r2
File: :file:`print_r2.irp.f`
.. c:function:: print_wf
.. code:: text

View File

@ -112,7 +112,6 @@ Index of Providers
* :c:data:`aos_vx_alpha_pbe_w`
* :c:data:`aos_vx_beta_lda_w`
* :c:data:`aos_vx_beta_pbe_w`
* :c:data:`apply_exc_to_psi`
* :c:data:`barycentric_electronic_energy`
* :c:data:`bi_elec_ref_bitmask_energy`
* :c:data:`big_array_coulomb_integrals`
@ -134,12 +133,8 @@ Index of Providers
* :c:data:`cart_to_sphe_9`
* :c:data:`cas_bitmask`
* :c:data:`center_of_mass`
* :c:data:`ci_dressed_pt2_new_eigenvectors`
* :c:data:`ci_dressed_pt2_new_eigenvectors_s2`
* :c:data:`ci_dressed_pt2_new_energy`
* :c:data:`ci_eigenvectors`
* :c:data:`ci_eigenvectors_s2`
* :c:data:`ci_electronic_dressed_pt2_new_energy`
* :c:data:`ci_electronic_energy`
* :c:data:`ci_energy`
* :c:data:`closed_shell_ref_bitmask`
@ -151,7 +146,6 @@ Index of Providers
* :c:data:`core_fock_operator_erf`
* :c:data:`core_inact_act_bitmask_4`
* :c:data:`core_inact_virt_bitmask`
* :c:data:`corr_e_from_1h1p`
* :c:data:`correlation_energy_ratio_max`
* :c:data:`correlation_functional`
* :c:data:`damping_for_rs_dft`
@ -164,7 +158,6 @@ Index of Providers
* :c:data:`degree_max_generators`
* :c:data:`degree_max_integration_lebedev`
* :c:data:`delta_e_per_selector`
* :c:data:`delta_ij_mrpt`
* :c:data:`density_for_dft`
* :c:data:`det_alpha_norm`
* :c:data:`det_beta_norm`
@ -184,7 +177,6 @@ Index of Providers
* :c:data:`do_direct_integrals`
* :c:data:`do_pseudo`
* :c:data:`do_pt2`
* :c:data:`do_third_order_1h1p`
* :c:data:`double_exc_bitmask`
* :c:data:`double_index_selectors`
* :c:data:`dr_radial_integral`
@ -211,8 +203,6 @@ Index of Providers
* :c:data:`energy_c`
* :c:data:`energy_c_lda`
* :c:data:`energy_c_pbe`
* :c:data:`energy_cas_dyall`
* :c:data:`energy_cas_dyall_no_exchange`
* :c:data:`energy_iterations`
* :c:data:`energy_sr_c_lda`
* :c:data:`energy_sr_c_pbe`
@ -232,12 +222,8 @@ Index of Providers
* :c:data:`fact_inv`
* :c:data:`fill_h_apply_buffer_selection`
* :c:data:`final_grid_points`
* :c:data:`final_weight_functions_at_final_grid_points`
* :c:data:`final_weight_functions_at_grid_points`
* :c:data:`fock_core_inactive`
* :c:data:`fock_core_inactive_from_act`
* :c:data:`fock_core_inactive_total`
* :c:data:`fock_core_inactive_total_spin_trace`
* :c:data:`final_weight_at_r`
* :c:data:`final_weight_at_r_vector`
* :c:data:`fock_matrix_alpha_no_xc_ao`
* :c:data:`fock_matrix_ao`
* :c:data:`fock_matrix_ao_alpha`
@ -248,12 +234,7 @@ Index of Providers
* :c:data:`fock_matrix_mo`
* :c:data:`fock_matrix_mo_alpha`
* :c:data:`fock_matrix_mo_beta`
* :c:data:`fock_operator_active_from_core_inact`
* :c:data:`fock_operator_closed_shell_ref_bitmask`
* :c:data:`fock_virt_from_act`
* :c:data:`fock_virt_from_core_inact`
* :c:data:`fock_virt_total`
* :c:data:`fock_virt_total_spin_trace`
* :c:data:`fock_wee_closed_shell`
* :c:data:`fps_spf_matrix_ao`
* :c:data:`fps_spf_matrix_mo`
@ -261,17 +242,12 @@ Index of Providers
* :c:data:`full_ijkl_bitmask_4`
* :c:data:`gauleg_t2`
* :c:data:`gauleg_w`
* :c:data:`gen_det_ref_idx`
* :c:data:`gen_det_ref_shortcut`
* :c:data:`gen_det_ref_sorted`
* :c:data:`gen_det_ref_version`
* :c:data:`general_primitive_integral`
* :c:data:`general_primitive_integral_erf`
* :c:data:`generators_bitmask`
* :c:data:`generators_bitmask_restart`
* :c:data:`gga_sr_type_functionals`
* :c:data:`gga_type_functionals`
* :c:data:`give_holes_and_particles_in_active_space`
* :c:data:`grad_aos_dsr_vc_alpha_pbe_w`
* :c:data:`grad_aos_dsr_vc_beta_pbe_w`
* :c:data:`grad_aos_dsr_vx_alpha_pbe_w`
@ -282,20 +258,17 @@ Index of Providers
* :c:data:`grad_aos_dvx_beta_pbe_w`
* :c:data:`grid_points_per_atom`
* :c:data:`grid_points_radial`
* :c:data:`grid_type_sgn`
* :c:data:`h0_type`
* :c:data:`h_apply_buffer_allocated`
* :c:data:`h_apply_buffer_lock`
* :c:data:`h_matrix_all_dets`
* :c:data:`h_matrix_cas`
* :c:data:`h_matrix_ref`
* :c:data:`hf_bitmask`
* :c:data:`hf_energy`
* :c:data:`hf_exchange`
* :c:data:`hf_one_electron_energy`
* :c:data:`hf_two_electron_energy`
* :c:data:`hmatrix_dressed_pt2_new`
* :c:data:`hmatrix_dressed_pt2_new_symmetrized`
* :c:data:`holes_operators`
* :c:data:`i2radix_sort`
* :c:data:`i8radix_sort`
* :c:data:`i8radix_sort_big`
@ -311,10 +284,6 @@ Index of Providers
* :c:data:`i_x2_pol_mult_mono_elec`
* :c:data:`idx_cas`
* :c:data:`idx_non_cas`
* :c:data:`idx_non_ref`
* :c:data:`idx_non_ref_from_sorted`
* :c:data:`idx_non_ref_rev`
* :c:data:`idx_ref`
* :c:data:`inact_bitmask`
* :c:data:`inact_virt_bitmask`
* :c:data:`index_final_points`
@ -329,10 +298,7 @@ Index of Providers
* :c:data:`insert_into_mo_integrals_map`
* :c:data:`int_erf_3_index`
* :c:data:`int_erf_3_index_exc`
* :c:data:`integral_density_alpha_knowles_becke_per_atom`
* :c:data:`integral_density_beta_knowles_becke_per_atom`
* :c:data:`inv_int`
* :c:data:`inv_norm_psi_ref`
* :c:data:`inv_selectors_coef_hf`
* :c:data:`inv_selectors_coef_hf_squared`
* :c:data:`iradix_sort`
@ -437,8 +403,7 @@ Index of Providers
* :c:data:`n_det_max`
* :c:data:`n_det_max_full`
* :c:data:`n_det_non_cas`
* :c:data:`n_det_non_ref`
* :c:data:`n_det_ref`
* :c:data:`n_det_print_wf`
* :c:data:`n_det_selectors`
* :c:data:`n_double_exc_bitmasks`
* :c:data:`n_double_selectors`
@ -466,7 +431,6 @@ Index of Providers
* :c:data:`no_oa_or_av_opt`
* :c:data:`no_vvv_integrals`
* :c:data:`no_vvvv_integrals`
* :c:data:`norm_psi_ref`
* :c:data:`nproc`
* :c:data:`nthreads_davidson`
* :c:data:`nucl_aos`
@ -488,31 +452,19 @@ Index of Providers
* :c:data:`nucl_num`
* :c:data:`nucl_num_shell_aos`
* :c:data:`nuclear_repulsion`
* :c:data:`one_anhil`
* :c:data:`one_anhil_inact`
* :c:data:`one_anhil_one_creat`
* :c:data:`one_anhil_one_creat_inact_virt`
* :c:data:`one_anhil_one_creat_inact_virt_bis`
* :c:data:`one_anhil_one_creat_inact_virt_norm`
* :c:data:`one_body_dm_alpha_and_grad_at_r`
* :c:data:`one_body_dm_alpha_ao_for_dft`
* :c:data:`one_body_dm_alpha_at_r`
* :c:data:`one_body_dm_ao_alpha`
* :c:data:`one_body_dm_ao_beta`
* :c:data:`one_body_dm_average_mo_for_dft`
* :c:data:`one_body_dm_beta_and_grad_at_r`
* :c:data:`one_body_dm_beta_ao_for_dft`
* :c:data:`one_body_dm_beta_at_r`
* :c:data:`one_body_dm_dagger_mo_spin_index`
* :c:data:`one_body_dm_mo`
* :c:data:`one_body_dm_mo_alpha`
* :c:data:`one_body_dm_mo_alpha_and_grad_at_grid_points`
* :c:data:`one_body_dm_mo_alpha_at_grid_points`
* :c:data:`one_body_dm_mo_alpha_average`
* :c:data:`one_body_dm_mo_alpha_for_dft`
* :c:data:`one_body_dm_mo_beta`
* :c:data:`one_body_dm_mo_beta_and_grad_at_grid_points`
* :c:data:`one_body_dm_mo_beta_at_grid_points`
* :c:data:`one_body_dm_mo_beta_average`
* :c:data:`one_body_dm_mo_beta_for_dft`
* :c:data:`one_body_dm_mo_diff`
@ -524,14 +476,15 @@ Index of Providers
* :c:data:`one_body_single_double_dm_mo_beta`
* :c:data:`one_body_spin_density_ao`
* :c:data:`one_body_spin_density_mo`
* :c:data:`one_creat`
* :c:data:`one_creat_virt`
* :c:data:`one_dm_alpha_in_r`
* :c:data:`one_dm_and_grad_alpha_in_r`
* :c:data:`one_dm_and_grad_beta_in_r`
* :c:data:`one_dm_beta_in_r`
* :c:data:`one_electron_energy`
* :c:data:`only_expected_s2`
* :c:data:`output_cpu_time_0`
* :c:data:`output_wall_time_0`
* :c:data:`overlap_gaussian_xyz`
* :c:data:`particles_operators`
* :c:data:`phi_angular_integration_lebedev`
* :c:data:`potential_c_alpha_ao`
* :c:data:`potential_c_alpha_ao_lda`
@ -574,7 +527,6 @@ Index of Providers
* :c:data:`pseudo_v_k_transp`
* :c:data:`pseudo_v_kl`
* :c:data:`pseudo_v_kl_transp`
* :c:data:`psi_active`
* :c:data:`psi_average_norm_contrib`
* :c:data:`psi_average_norm_contrib_sorted`
* :c:data:`psi_bilinear_matrix`
@ -628,30 +580,8 @@ Index of Providers
* :c:data:`psi_non_cas_coef`
* :c:data:`psi_non_cas_coef_sorted_bit`
* :c:data:`psi_non_cas_sorted_bit`
* :c:data:`psi_non_ref`
* :c:data:`psi_non_ref_coef`
* :c:data:`psi_non_ref_coef_interm_norm`
* :c:data:`psi_non_ref_coef_restart`
* :c:data:`psi_non_ref_coef_sorted_bit`
* :c:data:`psi_non_ref_coef_transp`
* :c:data:`psi_non_ref_restart`
* :c:data:`psi_non_ref_sorted_bit`
* :c:data:`psi_occ_pattern`
* :c:data:`psi_occ_pattern_hii`
* :c:data:`psi_ref`
* :c:data:`psi_ref_bis_lock`
* :c:data:`psi_ref_coef`
* :c:data:`psi_ref_coef_diagonalized`
* :c:data:`psi_ref_coef_interm_norm`
* :c:data:`psi_ref_coef_inv`
* :c:data:`psi_ref_coef_normalized`
* :c:data:`psi_ref_coef_restart`
* :c:data:`psi_ref_coef_sorted_bit`
* :c:data:`psi_ref_coef_transp`
* :c:data:`psi_ref_energy`
* :c:data:`psi_ref_energy_diagonalized`
* :c:data:`psi_ref_restart`
* :c:data:`psi_ref_sorted_bit`
* :c:data:`psi_selectors`
* :c:data:`psi_selectors_coef`
* :c:data:`psi_selectors_coef_transp`
@ -692,7 +622,6 @@ Index of Providers
* :c:data:`ref_bitmask`
* :c:data:`ref_bitmask_energy`
* :c:data:`ref_closed_shell_bitmask`
* :c:data:`ref_hamiltonian_matrix`
* :c:data:`reunion_of_bitmask`
* :c:data:`reunion_of_cas_inact_bitmask`
* :c:data:`reunion_of_core_inact_act_bitmask`
@ -711,15 +640,6 @@ Index of Providers
* :c:data:`scf_density_matrix_ao_alpha`
* :c:data:`scf_density_matrix_ao_beta`
* :c:data:`scf_energy`
* :c:data:`second_order_pt_new`
* :c:data:`second_order_pt_new_1h`
* :c:data:`second_order_pt_new_1h1p`
* :c:data:`second_order_pt_new_1h2p`
* :c:data:`second_order_pt_new_1p`
* :c:data:`second_order_pt_new_2h`
* :c:data:`second_order_pt_new_2h1p`
* :c:data:`second_order_pt_new_2h2p`
* :c:data:`second_order_pt_new_2p`
* :c:data:`select_max`
* :c:data:`selection_criterion`
* :c:data:`selection_criterion_factor`
@ -743,8 +663,6 @@ Index of Providers
* :c:data:`state_following`
* :c:data:`target_energy`
* :c:data:`theta_angular_integration_lebedev`
* :c:data:`three_anhil`
* :c:data:`three_creat`
* :c:data:`thresh_scf`
* :c:data:`threshold_davidson`
* :c:data:`threshold_diis`
@ -756,17 +674,13 @@ Index of Providers
* :c:data:`trace_v_hxc`
* :c:data:`trace_v_xc`
* :c:data:`transpose`
* :c:data:`two_anhil`
* :c:data:`two_anhil_one_creat`
* :c:data:`two_creat`
* :c:data:`two_creat_one_anhil`
* :c:data:`two_electron_energy`
* :c:data:`unpaired_alpha_electrons`
* :c:data:`used_weight`
* :c:data:`var_pt2_ratio`
* :c:data:`virt_bitmask`
* :c:data:`virt_bitmask_4`
* :c:data:`weight_functions_at_grid_points`
* :c:data:`weight_at_r`
* :c:data:`weight_occ_pattern`
* :c:data:`weights_angular_integration_lebedev`
* :c:data:`weights_angular_points`
@ -860,11 +774,8 @@ Index of Subroutines/Functions
* :c:func:`connect_to_taskserver`
* :c:func:`connected_to_ref`
* :c:func:`connected_to_ref_by_mono`
* :c:func:`contrib_1h2p_dm_based`
* :c:func:`contrib_2h1p_dm_based`
* :c:func:`copy_h_apply_buffer_to_wf`
* :c:func:`copy_psi_bilinear_to_psi`
* :c:func:`coulomb_value_no_check`
* :c:func:`create_guess`
* :c:func:`create_microlist`
* :c:func:`create_minilist`
@ -903,8 +814,6 @@ Index of Subroutines/Functions
* :c:func:`diag_h_mat_elem_au0_h_au0`
* :c:func:`diag_h_mat_elem_fock`
* :c:func:`diag_h_mat_elem_monoelec`
* :c:func:`diag_h_mat_elem_no_elec_check`
* :c:func:`diag_h_mat_elem_no_elec_check_no_exchange`
* :c:func:`diag_s_mat_elem`
* :c:func:`diag_wee_mat_elem`
* :c:func:`diagonalize_ci`
@ -947,7 +856,6 @@ Index of Subroutines/Functions
* :c:func:`example_bitmask`
* :c:func:`example_determinants`
* :c:func:`example_determinants_psi_det`
* :c:func:`extract_ref`
* :c:func:`extrapolate_data`
* :c:func:`f_function_becke`
* :c:func:`f_integral`
@ -959,7 +867,6 @@ Index of Subroutines/Functions
* :c:func:`filter_connected`
* :c:func:`filter_connected_i_h_psi0`
* :c:func:`filter_not_connected`
* :c:func:`find_connections_previous`
* :c:func:`find_rotation`
* :c:func:`four_idx_transform`
* :c:func:`g0d`
@ -1001,8 +908,6 @@ Index of Subroutines/Functions
* :c:func:`get_d0`
* :c:func:`get_d1`
* :c:func:`get_d2`
* :c:func:`get_delta_e_dyall`
* :c:func:`get_delta_e_dyall_general_mp`
* :c:func:`get_double_excitation`
* :c:func:`get_double_excitation_spin`
* :c:func:`get_excitation`
@ -1017,7 +922,6 @@ Index of Subroutines/Functions
* :c:func:`get_index_in_psi_det_alpha_unique`
* :c:func:`get_index_in_psi_det_beta_unique`
* :c:func:`get_index_in_psi_det_sorted_bit`
* :c:func:`get_index_in_psi_ref_sorted_bit`
* :c:func:`get_inverse`
* :c:func:`get_m0`
* :c:func:`get_m1`
@ -1050,19 +954,6 @@ Index of Subroutines/Functions
* :c:func:`get_uj_s2_ui`
* :c:func:`getmobiles`
* :c:func:`getunitandopen`
* :c:func:`give_1h1p_contrib`
* :c:func:`give_1h1p_only_doubles_spin_cross`
* :c:func:`give_1h1p_sec_order_singles_contrib`
* :c:func:`give_1h2p_contrib`
* :c:func:`give_1h2p_contrib_sec_order`
* :c:func:`give_1h2p_new`
* :c:func:`give_1p_sec_order_singles_contrib`
* :c:func:`give_2h1p_contrib`
* :c:func:`give_2h1p_contrib_sec_order`
* :c:func:`give_2h1p_new`
* :c:func:`give_2h2p`
* :c:func:`give_2p_new`
* :c:func:`give_active_part_determinant`
* :c:func:`give_all_aos_and_grad_and_lapl_at_r`
* :c:func:`give_all_aos_and_grad_at_r`
* :c:func:`give_all_aos_at_r`
@ -1071,18 +962,13 @@ Index of Subroutines/Functions
* :c:func:`give_all_mos_and_grad_and_lapl_at_r`
* :c:func:`give_all_mos_and_grad_at_r`
* :c:func:`give_all_mos_at_r`
* :c:func:`give_core_inactive_part_determinant`
* :c:func:`give_explicit_poly_and_gaussian`
* :c:func:`give_explicit_poly_and_gaussian_double`
* :c:func:`give_explicit_poly_and_gaussian_x`
* :c:func:`give_holes_in_inactive_space`
* :c:func:`give_particles_in_virt_space`
* :c:func:`give_polynom_mult_center_mono_elec`
* :c:func:`give_polynom_mult_center_mono_elec_erf`
* :c:func:`give_polynom_mult_center_mono_elec_erf_opt`
* :c:func:`give_polynom_mult_center_x`
* :c:func:`give_singles_and_partial_doubles_1h1p_contrib`
* :c:func:`give_virt_part_determinant`
* :c:func:`gpw`
* :c:func:`grad_rho_ab_to_grad_rho_oc`
* :c:func:`gser`
@ -1096,51 +982,6 @@ Index of Subroutines/Functions
* :c:func:`h_apply_cisd_diexcorg`
* :c:func:`h_apply_cisd_diexcp`
* :c:func:`h_apply_cisd_monoexc`
* :c:func:`h_apply_mrpt`
* :c:func:`h_apply_mrpt_1h`
* :c:func:`h_apply_mrpt_1h1p`
* :c:func:`h_apply_mrpt_1h1p_diexc`
* :c:func:`h_apply_mrpt_1h1p_diexcorg`
* :c:func:`h_apply_mrpt_1h1p_diexcp`
* :c:func:`h_apply_mrpt_1h1p_monoexc`
* :c:func:`h_apply_mrpt_1h2p`
* :c:func:`h_apply_mrpt_1h2p_diexc`
* :c:func:`h_apply_mrpt_1h2p_diexcorg`
* :c:func:`h_apply_mrpt_1h2p_diexcp`
* :c:func:`h_apply_mrpt_1h2p_monoexc`
* :c:func:`h_apply_mrpt_1h_diexc`
* :c:func:`h_apply_mrpt_1h_diexcorg`
* :c:func:`h_apply_mrpt_1h_diexcp`
* :c:func:`h_apply_mrpt_1h_monoexc`
* :c:func:`h_apply_mrpt_1p`
* :c:func:`h_apply_mrpt_1p_diexc`
* :c:func:`h_apply_mrpt_1p_diexcorg`
* :c:func:`h_apply_mrpt_1p_diexcp`
* :c:func:`h_apply_mrpt_1p_monoexc`
* :c:func:`h_apply_mrpt_2h`
* :c:func:`h_apply_mrpt_2h1p`
* :c:func:`h_apply_mrpt_2h1p_diexc`
* :c:func:`h_apply_mrpt_2h1p_diexcorg`
* :c:func:`h_apply_mrpt_2h1p_diexcp`
* :c:func:`h_apply_mrpt_2h1p_monoexc`
* :c:func:`h_apply_mrpt_2h2p`
* :c:func:`h_apply_mrpt_2h2p_diexc`
* :c:func:`h_apply_mrpt_2h2p_diexcorg`
* :c:func:`h_apply_mrpt_2h2p_diexcp`
* :c:func:`h_apply_mrpt_2h2p_monoexc`
* :c:func:`h_apply_mrpt_2h_diexc`
* :c:func:`h_apply_mrpt_2h_diexcorg`
* :c:func:`h_apply_mrpt_2h_diexcp`
* :c:func:`h_apply_mrpt_2h_monoexc`
* :c:func:`h_apply_mrpt_2p`
* :c:func:`h_apply_mrpt_2p_diexc`
* :c:func:`h_apply_mrpt_2p_diexcorg`
* :c:func:`h_apply_mrpt_2p_diexcp`
* :c:func:`h_apply_mrpt_2p_monoexc`
* :c:func:`h_apply_mrpt_diexc`
* :c:func:`h_apply_mrpt_diexcorg`
* :c:func:`h_apply_mrpt_diexcp`
* :c:func:`h_apply_mrpt_monoexc`
* :c:func:`h_s2_u_0_bielec_nstates_openmp`
* :c:func:`h_s2_u_0_bielec_nstates_openmp_work`
* :c:func:`h_s2_u_0_bielec_nstates_openmp_work_1`
@ -1179,8 +1020,6 @@ Index of Subroutines/Functions
* :c:func:`i_h_j_bielec`
* :c:func:`i_h_j_double_alpha_beta`
* :c:func:`i_h_j_double_spin`
* :c:func:`i_h_j_dyall`
* :c:func:`i_h_j_dyall_no_exchange`
* :c:func:`i_h_j_mono_spin`
* :c:func:`i_h_j_mono_spin_monoelec`
* :c:func:`i_h_j_monoelec`
@ -1188,7 +1027,6 @@ Index of Subroutines/Functions
* :c:func:`i_h_j_verbose`
* :c:func:`i_h_psi`
* :c:func:`i_h_psi_minilist`
* :c:func:`i_h_psi_pert_new_minilist`
* :c:func:`i_s2_psi_minilist`
* :c:func:`i_wee_j_mono`
* :c:func:`i_x1_pol_mult`
@ -1221,7 +1059,6 @@ Index of Subroutines/Functions
* :c:func:`is_connected_to_by_mono`
* :c:func:`is_generable_cassd`
* :c:func:`is_i_in_virtual`
* :c:func:`is_in_psi_ref`
* :c:func:`is_in_wavefunction`
* :c:func:`is_spin_flip_possible`
* :c:func:`is_the_hole_in_det`
@ -1261,7 +1098,6 @@ Index of Subroutines/Functions
* :c:func:`molden`
* :c:func:`mono_excitation_wee`
* :c:func:`mpi_print`
* :c:func:`mrpt_dress`
* :c:func:`multiply_poly`
* :c:func:`n_pt_sup`
* :c:func:`nai_pol_mult`
@ -1321,6 +1157,7 @@ Index of Subroutines/Functions
* :c:func:`print_generators_bitmasks_particles`
* :c:func:`print_generators_bitmasks_particles_for_one_generator`
* :c:func:`print_memory_usage`
* :c:func:`print_r2`
* :c:func:`print_spindet`
* :c:func:`print_summary`
* :c:func:`print_wf`
@ -1408,7 +1245,6 @@ Index of Subroutines/Functions
* :c:func:`set_bit_to_integer`
* :c:func:`set_bitmask_hole_as_input`
* :c:func:`set_bitmask_particl_as_input`
* :c:func:`set_generators_bitmasks_as_holes_and_particles`
* :c:func:`set_natural_mos`
* :c:func:`set_order`
* :c:func:`set_order_big`
@ -1436,8 +1272,6 @@ Index of Subroutines/Functions
* :c:func:`tasks_done_to_taskserver`
* :c:func:`testteethbuilding`
* :c:func:`total_memory`
* :c:func:`u0_h_dyall_u0`
* :c:func:`u0_h_dyall_u0_no_exchange`
* :c:func:`u_0_h_u_0`
* :c:func:`u_0_h_u_0_bielec`
* :c:func:`u_0_s2_u_0`

View File

@ -177,6 +177,20 @@
title = {Orthogonal Valence Bond Hamiltonians incorporating dynamical correlation effects},
journal = {Computational and Theoretical Chemistry}
}
@article{Giner_2017.3,
author = {Giner, Emmanuel and Tenti, Lorenzo and Angeli, Celestino and Ferré, Nicolas},
title = {Computation of the Isotropic Hyperfine Coupling Constant: Efficiency and Insights from a New Approach Based on Wave Function Theory},
journal = {Journal of Chemical Theory and Computation},
volume = {13},
number = {2},
pages = {475-487},
year = {2017},
doi = {10.1021/acs.jctc.6b00827},
note ={PMID: 28094936},
URL = {https://doi.org/10.1021/acs.jctc.6b00827},
eprint = {https://doi.org/10.1021/acs.jctc.6b00827}
}
@article{Giner2016Mar,
author = {Giner, Emmanuel and Angeli, Celestino},
title = {{Spin density and orbital optimization in open shell systems: A rational and computationally efficient proposal}},

View File

@ -75,19 +75,30 @@ The expected energy is ``-92.827856698`` au.
The documentation of the :ref:`hartree_fock` module.
This creates the |MOs| in the |EZFIO| database that will be used to perform any other post-SCF method.
The |qp| does not handle symmetry and the |MOs| are stored by increasing order of Fock energies.
Choose the target |MO| space
----------------------------
Now, modify to |EZFIO| database to make |CIPSI| calculation in the
full set of valence |MOs|, keeping the core |MOs| frozen. The simple
command :command:`qp_set_frozen_core` does this automatically:
command :ref:`qp_set_frozen_core` does this automatically:
.. code:: bash
qp_set_frozen_core hcn
The general command to specify core and active orbitals is :ref:`qp_set_mo_class`.
In the case of HCN molecule in the 631G basis, one has 20 |MOs| in total and the two first orbitals are frozen:
.. code::
qp_set_mo_class -core "[1-2]" -act "[3-20]" hcn
Run the |CIPSI| calculation
----------------------------
@ -95,7 +106,7 @@ We will now use the |CIPSI| algorithm to estimate the |FCI| energy.
.. code::
qp_run fci hcn
qp_run fci hcn | tee hcn.fci.out
The program will start with a single determinant and will iteratively:
@ -112,18 +123,108 @@ The program will start with a single determinant and will iteratively:
By default, the program will stop when more than one million determinants have
entered in the internal space, or when the |PT2| energy is below :math:`10^{-4}`.
To have a pictural illustration of the convergence of the |CIPSI| algorithm, just run
.. code::
qp_e_conv_fci hcn.fci.out
This will create the files "hcn.fci.out.conv" containing the data of the convergence of the energy that can be plotted, together with the file "hcn.fci.out.conv.eps" which is obtained from the gnuplot plot file "hcn.fci.out.conv.plt".
The estimated |FCI| energy of HCN is ``-93.0501`` au.
.. seealso::
The documentation of the :ref:`fci` module.
Extracting natural orbitals
---------------------------
Once obtained the near |FCI| wave function, one can obtain many quantities related to it.
One of these quantities are the natural orbitals which have the properties of diagonalizing the one-body density matrix:
.. math::
\rho_{ij} = \delta_{ij}
where the element of the one-body density matrix :math:`\rho_{ij}` is define as:
.. math::
\rho_{ij} = \langle \Psi | \left( a^{\dagger}_{j,\alpha} a_{i,\alpha} + a^{\dagger}_{j,\beta} a_{i,\beta} \right) | \Psi \rangle
These orbitals are in general known to be better than the usual |HF| |MOs| as they are obtained from a correlated wave function. To use these orbitals for future calculations, one has to replace the current |MOs| by the natural orbitals. To do so, just run:
.. code::
qp_run save_natorb hcn
Hands on
========
.. important::
As the |MOs| are changed, for the sake of coherence of future calculations, the save_natorb program
*automatically removes the current wave function* stored in the |EZFIO| database and replace
it by a single Slater determinant.
Then, you can run another |CIPSI| calculation to see how the use of natural orbital affect the convergence of the algorithm. For instance:
.. code::
qp_run fci hcn | tee hcn.fci_natorb.out
and then
.. code::
qp_e_conv_fci hcn.fci_natorb.out
Printing the near |FCI| wave function
-------------------------------------
Once obtained the near |FCI| energy, one can also take a closer look at the wave function stored in the |EZFIO| database.
If the wave function contains less than :math:`10^4` determinants, you can directly read it with the
:ref:`qp_edit` command. Just run
.. code::
qp_edit hcn
.. important::
The :ref:`qp_edit` mode virtually makes human-friendly the architecture of the |EZFIO| database
through *vim*-like editor.
Then, look for "hand" when you are in the :ref:`qp_edit` mode. If the research is negative,
then it means that the wave function stored in the |EZFIO| database is too large to be edited in :ref:`qp_edit` mode.
An alternative is to use the :command:`print_wf` command:
.. code::
qp_run print_wf hcn | tee hcn.fci_natorb.wf
This program will, by default, print out the first :math:`10^4` determinants whatever the size of the wave function stored in the |EZFIO| folder. If you want to change the number of printed Slater determinants, just change the :option:`determinants n_det_print_wf` keyword using the :ref:`qp_edit` tool.
The Range Separated Hybrids
---------------------------
TODO
.. important:: TODO
.. include:: /work.rst
* Natural orbitals
* Parameters for Hartree-Fock
* Parameters for Davidson
* Running in parallel

67
scripts/qp_e_conv_fci Executable file
View File

@ -0,0 +1,67 @@
#!/bin/bash
file=$1
out=${file}.conv
Ndet=`grep "N_det =" $file | cut -d "=" -f 2`
Evar=`grep "E =" $file | cut -d "=" -f 2`
EPT2=`grep "E+rPT2 =" $file | cut -d "=" -f 2 | cut -d "+" -f 1`
err=`grep "E+rPT2 =" $file | cut -d "=" -f 2 | cut -d "+" -f 2 | cut -d "/" -f 2 | cut -d " " -f 5`
Ndetarray=[]
j=0
for i in $Ndet
do
Ndetarray[$j]=$i
let "j=j+1"
done
Nmax=${#Ndetarray[*]}
let "Nmax-=1"
Evararray=[]
j=0
for i in $Evar
do
Evararray[$j]=$i
let "j=j+1"
done
EPT2array=[]
j=0
for i in $EPT2
do
EPT2array[$j]=$i
let "j=j+1"
done
errarray=[]
j=0
for i in $err
do
errarray[$j]=$i
let "j=j+1"
done
echo "#Ndet E_var E+PT2 statistical error " > $out
for i in `seq 0 $Nmax`
do
echo ${Ndetarray[$i]} ${Evararray[$i]} ${EPT2array[$i]} ${errarray[$i]} >> $out
done
cat << EOF > ${out}.plt
set term eps
set output "$out.eps"
set log x
set xlabel "Number of determinants"
set ylabel "Total Energy (a.u.)"
plot "$out" w lp title "E_{var}", "$out" u 1:3:4 w errorlines title "E_{var} + PT2"
EOF
gnuplot ${out}.plt

View File

@ -6,8 +6,9 @@ All the one-electron integrals in the |AO| basis are here.
The most important providers for usual quantum-chemistry calculation are:
# `ao_kinetic_integral` which are the kinetic operator integrals on the |AO| basis (see :file:`kin_ao_ints.irp.f`)
# `ao_nucl_elec_integral` which are the nuclear-elctron operator integrals on the |AO| basis (see :file:`pot_ao_ints.irp.f`)
# `ao_mono_elec_integral` which are the the h_core operator integrals on the |AO| basis (see :file:`ao_mono_ints.irp.f`)
* `ao_kinetic_integral` which are the kinetic operator integrals on the |AO| basis (see :file:`kin_ao_ints.irp.f`)
* `ao_nucl_elec_integral` which are the nuclear-elctron operator integrals on the |AO| basis (see :file:`pot_ao_ints.irp.f`)
* `ao_mono_elec_integral` which are the the h_core operator integrals on the |AO| basis (see :file:`ao_mono_ints.irp.f`)
Note that you can find other interesting integrals related to the position operator in :file:`spread_dipole_ao.irp.f`.

View File

@ -0,0 +1,19 @@
======================
ao_two_e_erf_integrals
======================
Here, all two-electron integrals (:math:`erf(\mu r_{12})/r_{12}`) are computed.
As they have 4 indices and many are zero, they are stored in a map, as defined
in :file:`utils/map_module.f90`.
The main parameter of this module is :option:`ao_two_e_erf_integrals mu_erf` which is the range-separation parameter.
To fetch an |AO| integral, use the
`get_ao_bielec_integral_erf(i,j,k,l,ao_integrals_erf_map)` function.
The conventions are:
* For |AO| integrals : (ij|kl) = (11|22) = <ik|jl> = <12|12>

View File

@ -0,0 +1,17 @@
==================
ao_two_e_integrals
==================
Here, all two-electron integrals (:math:`1/r_{12}`) are computed.
As they have 4 indices and many are zero, they are stored in a map, as defined
in :file:`utils/map_module.f90`.
To fetch an |AO| integral, use the
`get_ao_bielec_integral(i,j,k,l,ao_integrals_map)` function.
The conventions are:
* For |AO| integrals : (ij|kl) = (11|22) = <ik|jl> = <12|12>

View File

@ -7,7 +7,7 @@ This module contains some global variables (such as densities and energies) whic
The main providers of that module are:
# `data_one_body_alpha_dm_mo` and `data_one_body_beta_dm_mo` which are the one-body alpha and beta densities which are necessary read from the EZFIO folder.
* `data_one_body_alpha_dm_mo` and `data_one_body_beta_dm_mo` which are the one-body alpha and beta densities which are necessary read from the EZFIO folder.
Thanks to these providers you can use any density matrix that does not necessary corresponds to that of the current wave function.

View File

@ -1,16 +1,5 @@
[n_points_integration_angular]
[grid_type_sgn]
type: integer
doc: Number of angular points per atom for 3d numerical integration, needed for DFT for example [ 50 | 74 | 266 | 590 | 1202 | 2030 | 5810 ]
doc: Type of grid used for the Becke's numerical grid. Can be, by increasing accuracy: [ 0 | 1 | 2 | 3 ]
interface: ezfio,provider,ocaml
default: 590
[n_points_radial_grid]
type: integer
doc: Number of radial points per atom for 3d numerical integration, needed for DFT for example
interface: ezfio,provider,ocaml
default: 60
default: 2

View File

@ -4,14 +4,20 @@ becke_numerical_grid
This module contains all quantities needed to build the Becke's grid used in general for DFT integration. Note that it can be used for whatever integration in R^3 as long as the functions to be integrated are mostly concentrated near the atomic regions.
This grid is built as the reunion of a spherical grid around each atom. Each spherical grid contains a certain number of radial and angular points.
This grid is built as the reunion of a spherical grid around each atom. Each spherical grid contains
a certain number of radial and angular points. No pruning is done on the angular part of the grid.
The main keyword for that modue is:
* :option:`becke_numerical_grid grid_type_sgn` which controls the precision of the grid according the standard **SG-n** grids. This keyword controls the two providers `n_points_integration_angular` `n_points_radial_grid`.
The main providers of that module are:
# :option:`becke_numerical_grid n_points_integration_angular` which is the number of angular integration points. WARNING: it obeys to specific rules so it cannot be any integer number. Some of the possible values are [ 50 | 74 | 266 | 590 | 1202 | 2030 | 5810 ] for instance. See :file:`angular.f` for more details.
# :option:`becke_numerical_grid n_points_radial_grid` which is the number of radial angular points. This can be any strictly positive integer. Nevertheless, a minimum of 50 is in general necessary.
# `final_grid_points` which are the (x,y,z) coordinates of the grid points.
# `final_weight_at_r_vector` which are the weights at each grid point
* `n_points_integration_angular` which is the number of angular integration points. WARNING: it obeys to specific rules so it cannot be any integer number. Some of the possible values are [ 50 | 74 | 170 | 194 | 266 | 302 | 590 | 1202 | 2030 | 5810 ] for instance. See :file:`angular.f` for more details.
* `n_points_radial_grid` which is the number of radial angular points. This can be any strictly positive integer. Nevertheless, a minimum of 50 is in general necessary.
* `final_grid_points` which are the (x,y,z) coordinates of the grid points.
* `final_weight_at_r_vector` which are the weights at each grid point
For a simple example of how to use the grid, see :file:`example.irp.f`.

View File

@ -1,3 +1,32 @@
BEGIN_PROVIDER [integer, n_points_radial_grid]
&BEGIN_PROVIDER [integer, n_points_integration_angular]
implicit none
BEGIN_DOC
! n_points_radial_grid = number of radial grid points per atom
!
! n_points_integration_angular = number of angular grid points per atom
!
! These numbers are automatically set by setting the grid_type_sgn parameter
END_DOC
select case (grid_type_sgn)
case(0)
n_points_radial_grid = 23
n_points_integration_angular = 170
case(1)
n_points_radial_grid = 50
n_points_integration_angular = 194
case(2)
n_points_radial_grid = 75
n_points_integration_angular = 302
case(3)
n_points_radial_grid = 99
n_points_integration_angular = 590
case default
write(*,*) '!!! Quadrature grid not available !!!'
stop
end select
END_PROVIDER
BEGIN_PROVIDER [integer, n_points_grid_per_atom]
implicit none
BEGIN_DOC
@ -42,9 +71,18 @@ END_PROVIDER
case (0590)
call LD0590(X,Y,Z,W,n_points_integration_angular)
case (302)
call LD0302(X,Y,Z,W,n_points_integration_angular)
case (266)
call LD0266(X,Y,Z,W,n_points_integration_angular)
case (194)
call LD0194(X,Y,Z,W,n_points_integration_angular)
case (170)
call LD0170(X,Y,Z,W,n_points_integration_angular)
case (74)
call LD0074(X,Y,Z,W,n_points_integration_angular)
@ -53,7 +91,7 @@ END_PROVIDER
case default
print *, irp_here//': wrong n_points_integration_angular. Expected:'
print *, '[ 50 | 74 | 266 | 590 | 1202 | 2030 | 5810 ]'
print *, '[ 50 | 74 | 170 | 194 | 266 | 302 | 590 | 1202 | 2030 | 5810 ]'
stop -1
end select

View File

@ -20,7 +20,7 @@ BEGIN_PROVIDER [integer, n_points_final_grid]
enddo
enddo
print*,'n_points_final_grid = ',n_points_final_grid
print*,'n max point = ',n_points_integration_angular*n_points_radial_grid*nucl_num
print*,'n max point = ',n_points_integration_angular*(n_points_radial_grid*nucl_num - 1)
END_PROVIDER
BEGIN_PROVIDER [double precision, final_grid_points, (3,n_points_final_grid)]

View File

@ -18,6 +18,12 @@ subroutine run
do i = 1,N_states
print *, i, CI_energy(i)
enddo
print*,'******************************'
print*,'Excitation energy '
do i = 2, N_states
print*, i ,CI_energy(i) - CI_energy(1)
enddo
call ezfio_set_cis_energy(CI_energy)
psi_coef = ci_eigenvectors
SOFT_TOUCH psi_coef

View File

@ -7,6 +7,6 @@ This module defines the *provider* of the density used for the DFT related calcu
This definition is done through the keyword :option:`density_for_dft density_for_dft`.
The density can be:
# WFT : the density is computed with a potentially multi determinant wave function (see variables `psi_det` and `psi_det`)# input_density : the density is set to a density previously stored in the |EZFIO| folder (see ``aux_quantities``)
# damping_rs_dft : the density is damped between the input_density and the WFT density, with a damping factor of :option:`density_for_dft damping_for_rs_dft`
* WFT : the density is computed with a potentially multi determinant wave function (see variables `psi_det` and `psi_det`)# input_density : the density is set to a density previously stored in the |EZFIO| folder (see ``aux_quantities``)
* damping_rs_dft : the density is damped between the input_density and the WFT density, with a damping factor of :option:`density_for_dft damping_for_rs_dft`

View File

@ -4,6 +4,12 @@ doc: Maximum number of determinants in the wave function
interface: ezfio,provider,ocaml
default: 1000000
[n_det_print_wf]
type: Det_number_max
doc: Maximum number of determinants to be printed with the program print_wf
interface: ezfio,provider,ocaml
default: 10000
[n_det_max_full]
type: Det_number_max
doc: Maximum number of determinants where |H| is fully diagonalized

View File

@ -6,16 +6,16 @@ Contains everything for the computation of the Hamiltonian matrix elements in th
The main providers for this module are:
# :option:`determinants n_states`: number of states to be computed
# `psi_det`: list of determinants in the wave function used in many routines/providers of the |QP|.
# `psi_coef`: list of coefficients, for all :option:`determinants n_states` states, and all determinants.
* :option:`determinants n_states`: number of states to be computed
* `psi_det`: list of determinants in the wave function used in many routines/providers of the |QP|.
* `psi_coef`: list of coefficients, for all :option:`determinants n_states` states, and all determinants.
The main routines for this module are:
# `i_H_j`: computes the Hamiltonian matrix element between two arbitrary Slater determinants.
# `i_H_j_s2`: computes the Hamiltonian and (:math:`S^2`) matrix element between two arbitrary Slater determinants.
# `i_H_j_verbose`: returns the decomposition in terms of one- and two-body components of the Hamiltonian matrix elements between two arbitrary Slater determinants. Also return the fermionic phase factor.
# `i_H_psi`: computes the Hamiltonian matrix element between an arbitrary Slater determinant and a wave function composed of a sum of arbitrary Slater determinants.
* `i_H_j`: computes the Hamiltonian matrix element between two arbitrary Slater determinants.
* `i_H_j_s2`: computes the Hamiltonian and (:math:`S^2`) matrix element between two arbitrary Slater determinants.
* `i_H_j_verbose`: returns the decomposition in terms of one- and two-body components of the Hamiltonian matrix elements between two arbitrary Slater determinants. Also return the fermionic phase factor.
* `i_H_psi`: computes the Hamiltonian matrix element between an arbitrary Slater determinant and a wave function composed of a sum of arbitrary Slater determinants.
For an example of how to use these routines and providers, take a look at :file:`example.irp.f`.

View File

@ -4,10 +4,10 @@ dft_keywords
This module contains the main keywords related to a DFT calculation or RS-DFT calculation, such as:
# :option:`dft_keywords exchange_functional`
# :option:`dft_keywords correlation_functional`
# :option:`dft_keywords HF_exchange` : only relevent for the :ref:`ks_scf` program
* :option:`dft_keywords exchange_functional`
* :option:`dft_keywords correlation_functional`
* :option:`dft_keywords HF_exchange` : only relevent for the :ref:`ks_scf` program
The keyword for the range separation parameter :math:`\mu` is the :option:`ao_two_e_erf_integrals mu_erf` keyword.
The keyword for the **range separation parameter** :math:`\mu` is the :option:`ao_two_e_erf_integrals mu_erf` keyword.
The keyword for the type of density used in RS-DFT calculation with a multi-configurational wave function is the :option:`density_for_dft density_for_dft` keyword.

View File

@ -0,0 +1,14 @@
==============
dft_utils_in_r
==============
This module contains most of the fundamental quantities (AOs, MOs or density derivatives) evaluated in real-space representation that are needed for the various DFT modules.
As these quantities might be used and re-used, the values at each point of the grid are stored (see ``becke_numerical_grid`` for more information on the grid).
The main providers for this module are:
* `aos_in_r_array`: values of the |AO| basis on the grid point.
* `mos_in_r_array`: values of the |MO| basis on the grid point.
* `one_dm_and_grad_alpha_in_r`: values of the density and its gradienst on the grid points.

View File

@ -6,16 +6,19 @@ This module contains all the one-body related quantities needed to perform DFT o
Therefore, it contains most of the properties which depends on the one-body density and density matrix.
The most important files and variables are:
# The general *providers* for the x/c energies in :file:`e_xc_general.irp.f`
# The general *providers* for the x/c potentials in :file:`pot_general.irp.f`
# The short-range hartree operator and all related quantities in :file:`sr_coulomb.irp.f`
* The general *providers* for the x/c energies in :file:`e_xc_general.irp.f`
* The general *providers* for the x/c potentials in :file:`pot_general.irp.f`
* The short-range hartree operator and all related quantities in :file:`sr_coulomb.irp.f`
These *providers* will be used in many DFT-related programs, such as :file:`ks_scf.irp.f` or :file:`rs_ks_scf.irp.f`.
It is also needed to compute the effective one-body operator needed in multi-determinant RS-DFT (see plugins by eginer).
Some other interesting quantities:
# The LDA and PBE *providers* for the x/c energies in :file:`e_xc.irp.f` and :file:`sr_exc.irp.f`
# The LDA and PBE *providers* for the x/c potentials on the AO basis in :file:`pot_ao.irp.f` and :file:`sr_pot_ao.irp.f`
# The :math:`h_{core}` energy computed directly with the one-body density matrix in :file:`one_e_energy_dft.irp.f`
# LDA and PBE short-range functionals *subroutines* in :file:`exc_sr_lda.irp.f` and :file:`exc_sr_pbe.irp.f`
* The LDA and PBE *providers* for the x/c energies in :file:`e_xc.irp.f` and :file:`sr_exc.irp.f`
* The LDA and PBE *providers* for the x/c potentials on the AO basis in :file:`pot_ao.irp.f` and :file:`sr_pot_ao.irp.f`
* The :math:`h_{core}` energy computed directly with the one-body density matrix in :file:`one_e_energy_dft.irp.f`
* LDA and PBE short-range functionals *subroutines* in :file:`exc_sr_lda.irp.f` and :file:`exc_sr_pbe.irp.f`

View File

@ -52,7 +52,6 @@
call dgemm('N','N',ao_num,ao_num,n_points_final_grid,1.d0,aos_in_r_array,ao_num,aos_sr_vx_beta_LDA_w(1,1,istate) ,n_points_final_grid,0.d0,potential_sr_x_beta_ao_LDA(1,1,istate),ao_num)
enddo
call wall_time(wall_2)
print*,'time to provide potential_sr_x/c_alpha/beta_ao_LDA = ',wall_2 - wall_1
END_PROVIDER

View File

@ -10,6 +10,7 @@ The Hartree-Fock in an SCF and therefore is based on the ``scf_utils`` structure
It performs the following actions:
#. Compute/Read all the one- and two-electron integrals, and store them in memory
#. Check in the |EZFIO| database if there is a set of |MOs|. If there is, it
will read them as initial guess. Otherwise, it will create a guess.
#. Perform the |SCF| iterations
@ -19,6 +20,7 @@ For the keywords related to the |SCF| procedure, see the ``scf_utils`` directory
The main are:
# :option:`scf_utils thresh_scf`
# :option:`scf_utils level_shift`
At each iteration, the |MOs| are saved in the |EZFIO| database. Hence, if the calculation

View File

@ -5,6 +5,10 @@ program scf
! output: hartree_fock.energy
! optional: mo_basis.mo_coef
END_DOC
disk_access_mo_one_integrals = "None"
touch disk_access_mo_one_integrals
disk_access_ao_one_integrals = "None"
touch disk_access_ao_one_integrals
call create_guess
call orthonormalize_mos
call run
@ -54,6 +58,7 @@ subroutine run
! Choose SCF algorithm
call Roothaan_Hall_SCF
call ezfio_set_hartree_fock_energy(SCF_energy)
end

View File

@ -5,6 +5,11 @@ program scf
! output: hartree_fock.energy
! optional: mo_basis.mo_coef
END_DOC
disk_access_mo_one_integrals = "None"
touch disk_access_mo_one_integrals
disk_access_ao_one_integrals = "None"
touch disk_access_ao_one_integrals
call create_guess
call orthonormalize_mos
call run

View File

@ -17,8 +17,9 @@ It performs the following actions:
The definition of the Fock matrix is in :file:`kohn_sham fock_matrix_ks.irp.f`
For the keywords related to the |SCF| procedure, see the ``scf_utils`` directory where you will find all options.
The main are:
# :option:`scf_utils thresh_scf`
# :option:`scf_utils level_shift`
#. :option:`scf_utils thresh_scf`
#. :option:`scf_utils level_shift`
At each iteration, the |MOs| are saved in the |EZFIO| database. Hence, if the calculation
crashes for any unexpected reason, the calculation can be restarted by running again

View File

@ -5,6 +5,11 @@ program srs_ks_cf
! output: kohn_sham.energy
! optional: mo_basis.mo_coef
END_DOC
disk_access_mo_one_integrals = "None"
touch disk_access_mo_one_integrals
disk_access_ao_one_integrals = "None"
touch disk_access_ao_one_integrals
read_wf = .False.
density_for_dft ="WFT"
touch density_for_dft

View File

@ -0,0 +1,37 @@
#!/usr/bin/env bats
source $QP_ROOT/tests/bats/common.bats.sh
function run() {
thresh=1.e-8
qp_edit -c $1
ezfio set_file $1
ezfio set scf_utils thresh_scf 1.e-10
echo "short_range_PBE" > $1/dft_keywords/exchange_functional
echo "short_range_PBE" > $1/dft_keywords/correlation_functional
echo "0.5" > $1/ao_two_e_erf_integrals/mu_erf
echo "1" > $1/becke_numerical_grid/grid_type_sgn
qp_run rs_ks_scf $1
energy="$(ezfio get kohn_sham_rs energy)"
eq $energy $2 $thresh
}
@test "H3COH" {
run h3coh.ezfio -115.50238225208
}
@test "HCN" {
run hcn.ezfio -93.26674673761752
}
@test "N2" {
run n2.ezfio -109.404692225719
}
@test "SiH2_3B1" {
run sih2_3b1.ezfio -290.371745382958
}

View File

@ -5,6 +5,12 @@ program srs_ks_cf
! output: kohn_sham.energy
! optional: mo_basis.mo_coef
END_DOC
disk_access_mo_one_integrals = "None"
touch disk_access_mo_one_integrals
disk_access_ao_one_integrals = "None"
touch disk_access_ao_one_integrals
read_wf = .False.
density_for_dft ="WFT"
touch density_for_dft
@ -86,10 +92,8 @@ subroutine run
mo_label = "Canonical"
! Choose SCF algorithm
! call damping_SCF ! Deprecated routine
call Roothaan_Hall_SCF
call ezfio_set_kohn_sham_rs_energy(SCF_energy)
write(*, '(A22,X,F16.10)') 'one_electron_energy = ',one_electron_energy
write(*, '(A22,X,F16.10)') 'two_electron_energy = ',two_electron_energy

View File

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

View File

@ -12,15 +12,18 @@ The ``scf_utils`` module is meant to be included in the :file:`NEED` of the vari
All SCF programs perform the following actions:
#. Compute/Read all the one- and two-electron integrals, and store them in memory
#. Check in the |EZFIO| database if there is a set of |MOs|. If there is, it
will read them as initial guess. Otherwise, it will create a guess.
#. Perform the |SCF| iterations based on the definition of the Fock matrix
The main keywords/options are:
# :option:`scf_utils thresh_scf`
# :option:`scf_utils level_shift`
* :option:`scf_utils thresh_scf`
* :option:`scf_utils level_shift`
At each iteration, the |MOs| are saved in the |EZFIO| database. Hence, if the calculation
crashes for any unexpected reason, the calculation can be restarted by running again

View File

@ -158,8 +158,8 @@ END_DOC
call save_mos
endif
call write_double(6, Energy_SCF, 'Hartree-Fock energy')
call ezfio_set_hartree_fock_energy(Energy_SCF)
call write_double(6, Energy_SCF, 'SCF energy ')
! call ezfio_set_hartree_fock_energy(Energy_SCF)
call write_time(6)

View File

@ -39,7 +39,7 @@ subroutine routine
norm_mono_b_pert = 0.d0
norm_mono_a_pert_2 = 0.d0
norm_mono_b_pert_2 = 0.d0
do i = 1, min(10000,N_det)
do i = 1, min(N_det_print_wf,N_det)
print*,''
print*,'i = ',i
call debug_det(psi_det(1,1,i),N_int)