mirror of
https://github.com/QuantumPackage/qp2.git
synced 20241112 00:13:39 +01:00
129 lines
5.2 KiB
ReStructuredText
129 lines
5.2 KiB
ReStructuredText
=====


cipsi


=====




CIPSI algorithm.




The :c:func:`run_stochastic_cipsi` and :c:func:`run_cipsi` subroutines start with a single


determinant, or with the wave function in the EZFIO database if


:option:`determinants read_wf` is true.




The :c:func:`run_cipsi` subroutine iteratively:




* Selects the most important determinants from the external space and adds them to the


internal space


* If :option:`determinants s2_eig` is true, it adds all the necessary


determinants to allow the eigenstates of H to be eigenstates of S^2


* Diagonalizes H in the enlarged internal space


* Computes the PT2 contribution to the energy stochastically :cite:`Garniron_2017.2`


or deterministically, depending on :option:`perturbation do_pt2`


* Extrapolates the variational energy by fitting


:math:`E=E_\text{FCI}  \alpha\, E_\text{PT2}`




The difference between :c:func:`run_stochastic_cipsi` and :c:func:`run_cipsi` is that


:c:func:`run_stochastic_cipsi` selects the determinants on the fly with the computation


of the stochastic PT2 :cite:`Garniron_2017.2`. Hence, it is a semistochastic selection. It




* Selects the most important determinants from the external space and adds them to the


internal space, on the fly with the computation of the PT2 with the stochastic algorithm


presented in :cite:`Garniron_2017.2`.


* If :option:`determinants s2_eig` is true, it adds all the necessary


determinants to allow the eigenstates of H to be eigenstates of S^2


* Extrapolates the variational energy by fitting


:math:`E=E_\text{FCI}  \alpha\, E_\text{PT2}`


* Diagonalizes H in the enlarged internal space






The number of selected determinants at each iteration will be such that the


size of the wave function will double at every iteration. If :option:`determinants


s2_eig` is true, then the number of selected determinants will be 1.5x the


current number, and then all the additional determinants will be added.




By default, the program will stop when more than one million determinants have


been selected, or when the PT2 energy is below :math:`10^{4}`.




The variational and PT2 energies of the iterations are stored in the


EZFIO database, in the :ref:`module_iterations` module.








Computation of the PT2 energy







At each iteration, the PT2 energy is computed considering the EpsteinNesbet


zerothorder Hamiltonian:




.. math::




E_{\text{PT2}} = \sum_{ \alpha }


\frac{\langle \Psi_S  \hat{H}  \alpha \rangle^2}


{E  \langle \alpha  \hat{H}  \alpha \rangle}




where the kalpha determinants are generated by applying all the single and


double excitation operators to all the determinants of the wave function


:math:`\Psi_G`.




When the hybriddeterministic/stochastic algorithm is chosen


(default), :math:`Psi_G = \Psi_S = \Psi`, the full wavefunction expanded in the


internal space.


When the deterministic algorithm is chosen (:option:`perturbation do_pt2`


is set to false), :math:`Psi_G` is a truncation of Psi using


:option:`determinants threshold_generators`, and :math:`Psi_S` is a truncation


of Psi using :option:`determinants threshold_selectors`, and reweighted


by :math:`1/\langle \Psi_s  \Psi_s \rangle`.




At every iteration, while computing the PT2, the variance of the wave


function is also computed:




.. math::




\sigma^2 & = \langle \Psi  \hat{H}^2  \Psi \rangle 


\langle \Psi  \hat{H}  \Psi \rangle^2 \\


& = \sum_{i \in \text{FCI}}


\langle \Psi  \hat{H}  i \rangle


\langle i  \hat{H}  \Psi \rangle 


\langle \Psi  \hat{H}  \Psi \rangle^2 \\


& = \sum_{ \alpha }


\langle \Psi  \hat{H}  \alpha \rangle^2.




The expression of the variance is the same as the expression of the PT2, with


a denominator of 1. It measures how far the wave function is from the FCI


solution. Note that the absence of denominator in the HeatBath selected CI


method is selection method by minimization of the variance, whereas CIPSI is


a selection method by minimization of the energy.






If :option:`perturbation do_pt2` is set to false, then the stochastic


PT2 is not computed, and an approximate value is obtained from the CIPSI


selection. The calculation is faster, but the extrapolated FCI value is


less accurate. This way of running the code should be used when the only


goal is to generate a wave function, as for using CIPSI wave functions as


trial wave functions of QMC calculations for example.






The :command:`PT2` program reads the wave function of the EZFIO database


and computes the energy and the PT2 contribution.






Stateaveraging







Extrapolated FCI energy







An estimate of the FCI energy is computed by extrapolating




.. math::




E=E_\text{FCI}  \alpha\, E_\text{PT2}




This extrapolation is done for all the requested states, and excitation


energies are printed as energy differences between the extrapolated


energies of the excited states and the extrapolated energy of the ground


state.




The extrapolations are given considering the 2 last points, the 3 last points, ...,


the 7 last points. The extrapolated value should be chosen such that the extrpolated


value is stable with the number of points.


