mirror of
https://github.com/QuantumPackage/qp2.git
synced 2024-12-23 04:43:45 +01:00
fixed gfortran
This commit is contained in:
parent
b53bfe5e4c
commit
7dd70991fe
Binary file not shown.
@ -1,29 +0,0 @@
|
|||||||
* popcnt pour avoir les determinants par NSOMO
|
|
||||||
* Trier par Nsomo
|
|
||||||
* Tableau (i) -> indice du 1er CFG qui a i SOMO
|
|
||||||
* Boucler sur toutes les CFG mono-excitees par rapport a toutes les autres
|
|
||||||
|
|
||||||
* p,q,cfg -> 0|1|2|3 (Type d'excitation)
|
|
||||||
|
|
||||||
|
|
||||||
222200000000
|
|
||||||
000010100101
|
|
||||||
p->q
|
|
||||||
222200200000
|
|
||||||
000000000101
|
|
||||||
|
|
||||||
SOMO->SOMO
|
|
||||||
|
|
||||||
DOMO -> SOMO
|
|
||||||
|
|
||||||
do p in DO
|
|
||||||
do q in not(DO or SO)
|
|
||||||
p->q + 2 DOMO->VMO
|
|
||||||
|
|
||||||
|
|
||||||
do p in DO
|
|
||||||
do q in not(DO or SO)
|
|
||||||
p->q + 2 DOMO->VMO
|
|
||||||
DOMO -> VMO
|
|
||||||
test si bit=1 dans DO
|
|
||||||
test si bit=1 dans VO
|
|
@ -1,184 +0,0 @@
|
|||||||
#+TITLE: CFG CIPSI
|
|
||||||
#+AUTHOR: Vijay Gopal Chilkuri
|
|
||||||
#+EMAIL: vijay.gopal.c@gmail.com
|
|
||||||
#+DATE: 2020-12-08 Tue 08:27
|
|
||||||
#+startup: latexpreview
|
|
||||||
#+STARTUP: inlineimages
|
|
||||||
|
|
||||||
|
|
||||||
#+LATEX_HEADER: \usepackage{braket}
|
|
||||||
|
|
||||||
* Biblio
|
|
||||||
* Theoretical background
|
|
||||||
|
|
||||||
Here we describe the main theoretical background and definitions of the
|
|
||||||
Configuration (CFG) based CIPSI algorithm. The outline of the document is as follows.
|
|
||||||
First, we give some definitions of the CFG many-particle basis follwed by the
|
|
||||||
definitions of the overlap, one-particle, and two-particle matrix-elements. Finally,
|
|
||||||
an algorithm is presented for the sigma-vector (\( \sigma \)-vector defined later) calculation using
|
|
||||||
the CFG basis.
|
|
||||||
|
|
||||||
|
|
||||||
** Definitinon of CI basis
|
|
||||||
|
|
||||||
In CFG based CIPSI, the wavefunction is represented in CFG basis
|
|
||||||
as shown in Eq: [[Eq:definebasis1]].
|
|
||||||
|
|
||||||
#+LATEX: \newcommand{\Ncfg}{N_{\text{CFG}}}
|
|
||||||
#+LATEX: \newcommand{\Ncsf}{N_{\text{CSF}}}
|
|
||||||
#+LATEX: \newcommand{\Nsomo}{N_{\text{SOMO}}}
|
|
||||||
#+NAME: Eq:definebasis1
|
|
||||||
\begin{equation}
|
|
||||||
\ket{\Psi} = \sum_{i=1}^{\Ncfg} \sum_{j=1}^{\Ncsf(i)} c_{ij} {^S\ket{\Phi^j_i}}
|
|
||||||
\end{equation}
|
|
||||||
|
|
||||||
|
|
||||||
where the \(\ket{\Phi^j_i}\) represent Configuration State Functions (CSFs)
|
|
||||||
which are expanded in terms of Bonded functions (BFs) as shown in
|
|
||||||
[[Eq:definebasis2]].
|
|
||||||
#+NAME: Eq:definebasis2
|
|
||||||
\begin{equation}
|
|
||||||
\ket{\Phi^j_i} = \sum_k O^{\Nsomo(i)}_{kj} \ket{^S\phi_k(i,j)}
|
|
||||||
\end{equation}
|
|
||||||
where the functions \(\ket{^S\phi_k(i,j)}\) represent the BFs for the CFG
|
|
||||||
\(\ket{^S\Phi_i}\).
|
|
||||||
The coefficients \(O^b_{a,k}\) depend only on the number of SOMOs
|
|
||||||
in \(\Phi_i\).
|
|
||||||
|
|
||||||
Each CFG contains a list of CSFs related to it which describes the
|
|
||||||
spin part of the wavefunction (see Eq: [[Eq:definebasis3]]) which is
|
|
||||||
encoded in the BFs as shown below in Eq: [[Eq:definebasis5]].
|
|
||||||
|
|
||||||
|
|
||||||
#+NAME: Eq:definebasis3
|
|
||||||
\begin{equation}
|
|
||||||
\ket{^S\Phi_i} = \left\{ \ket{^S\Phi^1_i}, \ket{^S\Phi^2_i}, \dots, \ket{^s\Phi^{\Ncsf}_i} \right\}
|
|
||||||
\end{equation}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#+NAME: Eq:definebasis4
|
|
||||||
\begin{equation}
|
|
||||||
\mathbf{c}_i = \left\{ c^1_i, c^2_i, \dots, c^{\Ncsf}_i \right\}
|
|
||||||
\end{equation}
|
|
||||||
|
|
||||||
|
|
||||||
Each of the CSFs belonging to the CFG \(\ket{^S\Phi_i}\) have coefficients
|
|
||||||
associated to them as shown in Eq: [[Eq:definebasis4]]. Crucially, the bonded functions
|
|
||||||
defined in Eq: [[Eq:definebasis5]] are not northogonal to each other.
|
|
||||||
|
|
||||||
|
|
||||||
#+NAME: Eq:definebasis5
|
|
||||||
\begin{equation}
|
|
||||||
\ket{^S\phi_k(i,j)} = (a\bar{a})\dots (b\ c) (d (e
|
|
||||||
\end{equation}
|
|
||||||
$i$ is the index of the CFG and $j$ determines the coupling.
|
|
||||||
|
|
||||||
|
|
||||||
The bonded functions are made up of products of slater determinants. There are
|
|
||||||
three types of determinants, first, the closed shell pairs \((a\bar{a})\). Second,
|
|
||||||
the open-shell singlet pairs \((b\ c)\) which are expanded as
|
|
||||||
\((b\ c) = \frac{\ket{b\bar{c}}-\ket{\bar{b}c}}{\sqrt{2}}\). Third, the
|
|
||||||
open-shell SOMOs which are coupled parallel and account for the total spin of the
|
|
||||||
wavefunction \((l (m \dots\). They are shown as open brackets.
|
|
||||||
|
|
||||||
** Overlap of the wavefunction
|
|
||||||
|
|
||||||
Once the wavefunction has been expanded in terms of the CSFs, the most fundamental
|
|
||||||
operation is to calculate the overlap between two states. The overlap in the
|
|
||||||
basis of CSFs is defined as shown in Eq: [[Eq:defineovlp1]].
|
|
||||||
|
|
||||||
|
|
||||||
#+NAME: Eq:defineovlp1
|
|
||||||
\begin{equation}
|
|
||||||
\braket{^S\Phi_i|^S\Phi_j} = \sum_{kl} C_i C_j \braket{^S\Psi^k_i|^S\Psi^l_j}
|
|
||||||
\end{equation}
|
|
||||||
|
|
||||||
|
|
||||||
Where the sum is over the CSFs \(k\) and \(l\) corresponding to the \(i\)
|
|
||||||
and \(j\) CFGs respectively. The overlap between the CSFs can be expanded in terms
|
|
||||||
of the BFs using the definition given in Eq: [[Eq:definebasis2]] and
|
|
||||||
Eq: [[Eq:definebasis3]] as given in Eq: [[Eq:defineovlp2]].
|
|
||||||
|
|
||||||
|
|
||||||
#+NAME: Eq:defineovlp2
|
|
||||||
\begin{equation}
|
|
||||||
\braket{^S\Phi^k_i|^S\Phi^l_j} = \sum_m \sum_n \left( O^k_{i,m}\right)^{\dagger} \braket{^S\phi_m(i,k)|^S\phi_n(j,l)} O^l_{j,n}
|
|
||||||
\end{equation}
|
|
||||||
|
|
||||||
|
|
||||||
Therefore, the overlap between two CSFs can be expanded in terms of the overlap
|
|
||||||
between the constituent BFs. The overlap matrix \(S_{mn}\) is of dimension \(\left( N^k_{N_{BF}} , N^l_{N_{BF}} \right)\).
|
|
||||||
The equation shown above (Eq: [[Eq:defineovlp2]]) can be written in marix-form as
|
|
||||||
shown below in Eq: [[Eq:defineovlp3]].
|
|
||||||
|
|
||||||
#+NAME: Eq:defineovlp3
|
|
||||||
\begin{equation}
|
|
||||||
\braket{^S\Phi_i|^S\Phi_j} = \left( C_{i,1} \right)^{\dagger} \mathbf{O}_i\cdot\mathbf{S}_{ij}\cdot\mathbf{O}_j C_{j,1}
|
|
||||||
\end{equation}
|
|
||||||
|
|
||||||
|
|
||||||
Note that the overlap between two CFGs does not depend on the orbital
|
|
||||||
labels. It only depends on the number of Singly Occupied Molecular Orbitals
|
|
||||||
(SOMOs) therefore it can be pretabulated. Actually, it is possible to
|
|
||||||
redefine the CSFs in terms of a linear combination of BFs such that
|
|
||||||
\(S_{ij}\) becomes the identity matrix. In this case, one needs to store the
|
|
||||||
orthogonalization matrix \(\mathbf{\tilde{O}}_i\) which is given by
|
|
||||||
\(\mathbf{O}_i\cdot S^{1/2}_i\) for a given CFG \(i\). Note that the a CFG
|
|
||||||
\(i\) is by definition of an orthonormal set of MOs automatically orthogonal
|
|
||||||
to a CFG \(j\) with a different occupation.
|
|
||||||
|
|
||||||
** Definition of matrix-elements
|
|
||||||
|
|
||||||
The matrix-element (ME) evaluation follows a similar logic as the evalulation of
|
|
||||||
the overlap. However, here the metric is the one-, or two-particle operator \(\hat{E}_{pq}\)
|
|
||||||
or \(\hat{E}_{pq}\hat{E}_{rs}\) as shown in Eq: [[Eq:defineme1]] and Eq: [[Eq:defineme2]].
|
|
||||||
|
|
||||||
#+NAME: Eq:defineme1
|
|
||||||
\begin{equation}
|
|
||||||
\braket{^S\Phi^k_i|\hat{O}_{pq}|^S\Phi^l_j} = \left( C_{i,1} \right)^{\dagger} \mathbf{O}_i\cdot\mathbf{A}^{pq}_{ij}\cdot\mathbf{O}_j C_{j,1}
|
|
||||||
\end{equation}
|
|
||||||
|
|
||||||
#+NAME: Eq:defineme2
|
|
||||||
\begin{equation}
|
|
||||||
\braket{^S\Phi^k_i|\hat{O}_{pq,rs}|^S\Phi^l_j} = \sum_K \left( C_{i,1} \right)^{\dagger} \mathbf{O}_i\cdot\mathbf{A}^{pq}_{ik}\cdot\mathbf{O}_k \mathbf{O}_k\cdot\mathbf{A}^{rs}_{kj}\cdot\mathbf{O}_j C_{j,1}
|
|
||||||
\end{equation}
|
|
||||||
|
|
||||||
|
|
||||||
Where, \(\hat{O}_{pq}\) and \(hat{O}_{pq,rs}\) represent an arbitrary one-, and
|
|
||||||
two-particle operators respectively. Importantly, the one-, and two-particle
|
|
||||||
matrix-element evaluation can be recast into an effecient matrix multiplication
|
|
||||||
form which is crucial for a fast evaluation of the action of the operators
|
|
||||||
\(\hat{O}_{pq}\) and \(hat{O}_{pq,rs}\). The matrix \(\mathbf{A}^{pq}_{ij}\) contains
|
|
||||||
the result of the operation \(\braket{^S\Phi^k_i|\hat{O}_{pq}|^S\Phi^l_j}\) in terms
|
|
||||||
of BFs and is therefore of size \(NCSF(i) \textit{x} NBF(i)\). In this formulation, the determinant basis is entirely avoided.
|
|
||||||
Note that the size and contents of the matrix \(\mathbf{A}^{pq}_{ij}\) depends
|
|
||||||
only on the total number of SOMOs and the total spin \(S\), therefore, an optimal
|
|
||||||
prototyping scheme can be deviced for a rapid calculaiton of these matrix contractions.
|
|
||||||
The resolution of identity (RI) is used to evaluate the two-particle operator since
|
|
||||||
this alleviates the necessacity to explicity construct two-particle matrix-elements
|
|
||||||
\(\braket{^S\Phi^k_i|\hat{O}_{pq,rs}|^S\Phi^l_j}\) directly.
|
|
||||||
|
|
||||||
** Sigma-vector evaluation
|
|
||||||
|
|
||||||
Once the \(\mathbf{A}^{pq}_{ij}\) matrices have been constructed for the given
|
|
||||||
selected list of CFGs, the prototype lists for the \(\mathbf{A}^{pq}_{ij}\) matrices
|
|
||||||
can be constructed. Following this, one can proceede to the evaluation of the sigma-vector
|
|
||||||
as defined in the Eq [[Eq:definesigma1]].
|
|
||||||
|
|
||||||
|
|
||||||
#+NAME: Eq:definesigma1
|
|
||||||
\begin{equation}
|
|
||||||
\sigma = \sum_{pq} \tilde{h}_{pq}\hat{E}_{pq}|\ket{^S\Phi^l_j} + \frac{1}{2}\sum_{pq,rs} g_{pq,rs} \hat{E}_{pq}\hat{E}_{rs}|\ket{^S\Phi^l_j}
|
|
||||||
\end{equation}
|
|
||||||
|
|
||||||
The one-electron part of the sigma-vector can be calculated as shown in Eq: [[Eq:defineme1]]
|
|
||||||
and the two-electron part can be calculated using the RI as shown in Eq: [[Eq:defineme2]].
|
|
||||||
The most expensive part involves the two-particle operator as shown on the RHS of Eq: [[Eq:definesigma1]].
|
|
||||||
In this CFG formulation, the cost intensive part of the sigma-vector evaluation has been recast
|
|
||||||
into an efficient BLAS matrix multiplication operation. Therefore, this formulation is the most efficient
|
|
||||||
albeit at the cost of storing the prototype matrices \(\mathbf{A}^{pq}_{ij}\). However, where the total spin
|
|
||||||
is small and the largest number of SOMOs does not exceed 14, the \(\mathbf{A}^{pq}_{ij}\) matrices
|
|
||||||
can be stored in memory.
|
|
||||||
|
|
||||||
|
|
@ -73,7 +73,7 @@
|
|||||||
- Added Shank function
|
- Added Shank function
|
||||||
- Added utilities for periodic calculations
|
- Added utilities for periodic calculations
|
||||||
- Added ~V_ne_psi_energy~
|
- Added ~V_ne_psi_energy~
|
||||||
- Added ~h_core_huess~ routine
|
- Added ~h_core_guess~ routine
|
||||||
- Fixed Laplacians in real space (indices)
|
- Fixed Laplacians in real space (indices)
|
||||||
-
|
-
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
BEGIN_PROVIDER [double precision, two_e_dm_mo, (mo_num,mo_num,mo_num,mo_num,1)]
|
BEGIN_PROVIDER [double precision, two_e_dm_mo, (mo_num,mo_num,mo_num,mo_num)]
|
||||||
implicit none
|
implicit none
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! two_e_dm_bb_mo(i,j,k,l,istate) = STATE SPECIFIC physicist notation for 2RDM of beta/beta electrons
|
! two_e_dm_bb_mo(i,j,k,l,istate) = STATE SPECIFIC physicist notation for 2RDM of beta/beta electrons
|
||||||
@ -29,12 +29,12 @@ BEGIN_PROVIDER [double precision, two_e_dm_mo, (mo_num,mo_num,mo_num,mo_num,1)]
|
|||||||
jorb = list_core_inact_act(j)
|
jorb = list_core_inact_act(j)
|
||||||
do i=1,mo_num
|
do i=1,mo_num
|
||||||
iorb = list_core_inact_act(i)
|
iorb = list_core_inact_act(i)
|
||||||
two_e_dm_mo(iorb,jorb,korb,lorb,1) = state_av_full_occ_2_rdm_spin_trace_mo(i,j,k,l)
|
two_e_dm_mo(iorb,jorb,korb,lorb) = state_av_full_occ_2_rdm_spin_trace_mo(i,j,k,l)
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
two_e_dm_mo(:,:,:,:,:) = two_e_dm_mo(:,:,:,:,:) * 2.d0
|
two_e_dm_mo(:,:,:,:) = two_e_dm_mo(:,:,:,:) * 2.d0
|
||||||
|
|
||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user