Wavefunction conversions

TurboRVB implements different types of Ansatz:

  1. Pfaffian (Pf)

  2. Pfaffian with a constrained number of molecular orbitals (Pfn)

  3. Antisymmetrized Geminal Power (AGP)

  4. Antisymmetrized Geminal Power with a constrained number of molecular orbitals (AGPn)

  5. Single Slater determinant (SD)

One can go back and forth between various Ansatz using the modules implemented in TurboRVB. Figures below show the hierarchy of Ansatz implemented in TurboRVB and their inter-conversion.

../../../_images/ansatz_hierarchy.png ../../../_images/ansatz_conversion.png
  • Adding molecular orbitals to an Ansatz (convertfort10mol.x): The first case is to add molecular orbitals to an Ansatz, i.e. JAGP => JSD, JAGP => JAGPn, or JPf => JPfn. In TurboRVB, this is done by rewriting the expansion of the geminal in terms of molecular orbitals.

  • The second important case is to convert an Ansatz among the available ones, i.e., JSD, JAGP, or JAGPn => JAGP. This is done using the convertfort10.x tool and is achieved by maximizing the overlap between the two WFs (the input fort.10_in and the output fort.10_out) to be filled by new geminal matrix coefficients (fort.10_new). The following overlap between two geminals is maximized:

\[max \: Q = \frac{\left \langle g^{new}|g^{ori} \right \rangle^2}{\left \langle g^{new}|g^{new} \right \rangle \left \langle g^{ori}|g^{ori} \right \rangle} \,,\]

in order to obtain new geminal matrix coefficients \(A^{new}_{\mu,\nu}\), defining the new pairing function as

\[g^{new}(\mathbf{i}, \mathbf{j}) = \sum_{\mu.\nu} A^{new}_{\mu.\nu} \psi^{new}_\mu(\mathbf{i}) \psi^{new}_\nu(\mathbf{j}) \,,\]

while the original geminal was given in terms of the parameter matrix \(A^{ori}_{\mu, \nu}\),

\[g^{ori}(\mathbf{i}, \mathbf{j}) = \sum_{\mu.\nu} A^{ori}_{\mu.\nu} \psi^{ori}_\mu(\mathbf{i}) \psi^{ori}_\nu(\mathbf{j}) .\]

Note

\(0 \leq Q \leq 1\); so, the larger the \(Q\), the better is the conversion. \(Q\) approaches unity if the conversion is perfect.

  • The final case is to convert a JAGP ansatz to JPf. Since the JAGP ansatz is a special case of the JPf ansatz, where only \(G_{ud}\) and \(G_{du}\) terms are defined, the conversion can just be realized by direct substitution. The primary challenge is to find a reasonable initialization for the two spin-triplet sectors, \(G_{uu}\) and \(G_{dd}\) that are not described in the JAGP and that otherwise have to be set to 0. There are two possible approaches:

    1. For polarized systems, we can build the \(G_{uu}\) block of the matrix by using an even number of \(\{ \phi_i\}\) and build an antisymmetric \(g_{uu}\), where the eigenvalues \(\lambda_k\) are chosen to be large enough to occupy certainly these unpaired states, as in the standard Slater determinant used for our initialization. Again, we emphasize that this works only for polarized systems.

    2. The second approach that also works in a spin-unpolarized case is to determine a standard broken symmetry single determinant ansatz (e.g., by TurboRVB built-in DFT within the LSDA) and modify it with a global spin rotation. Indeed, in the presence of finite local magnetic moments, it is often convenient to rotate the spin moments of the WF in a direction perpendicular to the spin quantization axis chosen for our spin-dependent Jastrow factor, i.e., the \(z\) quantization axis. In this way one can obtain reasonable initializations for \(G_{uu}\) and \(G_{dd}\). TurboRVB allows every possible rotation, including an arbitrary small one close to the identity. A particularly important case is when a rotation of \(\pi/2\) is applied around the \(y\) direction. This operation maps \(|\uparrow \rangle \rightarrow \frac{1} {\sqrt{2}} \left( | \uparrow \rangle + |\downarrow \rangle \right) \mbox{ and } |\downarrow \rangle \rightarrow \frac 1 {\sqrt{2}} \left( | \uparrow \rangle - |\downarrow \rangle \right).\) One can convert from a AGP the pairing function that is obtained from a VMC optimization \({g_{ud}}(\mathbf{i},\mathbf{j}) = {f_S}({{\mathbf{r}}_i}, {{\mathbf{r}}_j})\frac{{\left| { \uparrow \downarrow } \right\rangle - \left| { \downarrow \uparrow } \right\rangle }}{{\sqrt 2 }} + {f_T}({{\mathbf{r}}_i},{{\mathbf{r}}_j})\frac{{\left| { \uparrow \downarrow } \right\rangle + \left| { \downarrow \uparrow } \right\rangle }}{{\sqrt 2 }}\) to a Pf one \({g_{ud}}(\mathbf{i},\mathbf{j}) \to g\left( {\mathbf{i},\mathbf{j}} \right){\text{ }} = {f_S}({{\mathbf{r}}_i},{{\mathbf{r}}_j})\frac{{\left| { \uparrow \downarrow } \right\rangle - \left| { \downarrow \uparrow } \right\rangle }}{{\sqrt 2 }} + {f_T}({{\mathbf{r}}_i},{{\mathbf{r}}_j})\left( {\left| { \uparrow \uparrow } \right\rangle - \left| { \downarrow \downarrow } \right\rangle } \right).\) This transformation provides a meaningful initialization to the Pfaffian WF that can be then optimized for reaching the best possible description of the ground state within this ansatz.

Converting a WF to AGP (convertfort10.x)

  1. Rename a fort.10 that you want to convert AGP as fort.10_in

  2. Prepare a template of an AGP fort.10 with new basis/new exponents... as fort.10_out

  3. Run convertfort10.x < convertfort10.input

The output is the fort.10_new is the converted file (with maximum overlap with the input) in the basis set you have decided in fort.10_out

The input parameters are described in Reference section.

Note

It works also with molecular orbitals. The unpaired orbitals are always assumed to be the last molecular orbitals in the order written in fort.10_out fort.10_in

Note

The numerical version of the algorithm (real_agp=.true. or rmax=xx) works only with AGPs, if you want to use it with molecular orbitals, convert the molecular WF in a AGP and then use the numerical version

Converting a WF to AGPn/SD (convertfort10mol.x)

This tool converts a generic input wf (fort.10_in) written with generic atomic orbitals into a new wf (fort.10_new) that includes the corresponding molecular orbitals. The unpaired orbitals are always assumed to be the last molecular orbitals in fort.10_new. The number of molecular orbitals appended in fort.10_new is the sum of nmol (input) and the number of unpaired orbitals= nelup-neldo.

Only the parameter molopt requires detailed explanation in this tool.

After running this tool the coefficient of the contracted atomic orbitals are arbitrary because all the original wave function (in fort.10_in) is rewritten (in fort.10_new) in terms of molecular orbitals defined in the original primitive basis (e.g. all independent atomic gaussian basis defining the original fort.10_in).

if molopt>= 2 then the coefficients of the contracted atomic orbitals will no longer be optimizable in a subsequent minimization. Otherwise all contracted atomic orbitals will be optimized with the corresponding option molopt=1 in datasminmol.input or molopt=0 (default) in datasmin.input

By using abs(molopt)>=2 this subroutine initialize the coefficients of the contracted atomic orbitals,using dmrg (the system has to represent at best the universe) to evaluate the best atomic contracted orbitals (the system) that can be connected to the full AGP matrix squared (the universe now written in terms of molecular orbitals). See the DMRG paper by S.R. White PRB 48, 10345 (1993). The algorithm is: be f(r1,r) the AGP obtained by restricting r1 to all atomic orbitals of given type (s,p,d) acting on a given atom. The density matrix is DMRG(r1,r2)=int_(r' in universe) f(r1,r') f(r2,r'). The best atomic orbitals are the eigenvector of the density matrix with highest eigenvalue.

In the code care should be taken because the localized basis used is not orthonormal, being the overlap matrix between atomic orbitals a generic full symmetric matrix. If unpaired orbitals are used (nelup> neldo) the DMRG is modified by adding the contribution of unpaired orbitals normalized to nelup-neldo vs a total norm = nelup+neldo.

When preparing input to DFT useful parameter input in the control section are:

only_molecular=.true./.false. ! If .true. only molecular orbitals are assumed in the contracted basis in order to minimize memory. It is not allowed for AGP optimization, rather for DFT or VMC/DMC at fixed variational parameters or optimization in the restricted molecular orbital basis.

add_offmol=.true./.false. If the above is true , add also off diagonal elements in the molecular orbital basis defined by the above option.

The input parameters are described in Reference section.