Full Configuration Interaction

Calculate the ground state of a system via a full diagonalisation of the Hamiltonian matrix [Knowles89], or the Davidson iterative diagonalisation scheme [Davidson75] if only a few lowest eigenpairs are sought.

fci {
    sys = system,
    fci = { ... },
    reference = { ... },
    davidson = { ... },
}

Note

The FCI engine in HANDE is particularly simple (i.e. slow, dumb, memory hungry) and is designed mainly for testing. A conventional quantum chemistry package, such as MOLPRO, or PSI4, is highly recommended for production FCI calculations as these implement substantially more efficient algorithms.

Options

sys

type: system object.

Required.

The system on which to perform the calculation. Must be created via a system function.

fci

type: lua table.

Optional. No default.

Further FCI options. See below.

reference

type: lua table.

Optional. No default.

If not specified, the entire Hilbert space is used. See reference options.

davidson

type: lua table.

Optional. No default.

Davidson diagonalisation options. See below.

fci options

The fci table can take the following options:

write_hamiltonian

type: boolean.

Optional. Default: false.

Write out the diagonal and the non-zero off-diagonal elements of the Hamiltonian matrix.

hamiltonian_file

type: string.

Optional. Default: ‘HAMIL’.

Filename to which the Hamiltonian matrix is written.

hamiltonian_diagonal_only

type: boolean.

Optional. Default: false.

Overrides traditional exact diagonalization of the full system Hamiltonian and instead prints out the diagonal elements of the Hamiltonian matrix. The diagonal eigenspectrum can be used for generating exact THF comparison data for the grand canonical initialization in IP-DMQMC by performing a sum over thermal weights (See “propagate_fci.py” within the hande tools folder) [Malone15].

write_determinants

type: boolean.

Optional. Default: false.

Write out the enumerated list of determinants in the FCI Hilbert space.

determinant_file

type: string.

Optional. Default: ‘DETS’.

Filename to which the list of determinants (or, more generally, many-body basis functions) is written.

write_nwfns

type: integer.

Optional. Default: 0.

Number of wavefunctions to write out (in the basis of Slater determinants). A negative value indicates all wavefunctions are to be written out.

wfn_file

type: string.

Optional. Default: ‘FCI_WFN’.

Filename to which the wavefunctions are written.

nanalyse

type: integer.

Optional. Default: 0.

Calculate properties of the first nwfn FCI wavefunctions from each spin and symmetry block. If nwfn is negative (default) then all wavefunctions are analysed. This is slow, and uses a very simple algorithm. It is only designed for debugging purposes. The properties evaluated depend upon the system and are liable to change without warning.

blacs_block_size

type: integer.

Optional. Default: 64.

The block size used by BLACS to distribute the Hamiltonian matrix across the processors with MPI parallelism. The Hamiltonian matrix is divided into \(n \times n\) sub-matrices, where \(n\) is the block size, which are the distributed over the processors in a cyclic fashion.

rdm

type: table of integers.

Optional. No default.

If present, calculate the eigenvalues for the reduced density matrix consisting of the specified list of sites, with a trace performed over all other sites.

Note

The rdm option is only currently available for Heisenberg systems.

Note

The write_wfn, nanalyse and rdm options require the eigenvectors to be calculated in addition to the eigenvalues, which requires additional computational time.

davidson options

Note

Davidson diagonalisation currently only supports real Hamiltonians on a single node. Although multi-threaded BLAS/LAPACK libraries (MKL, OpenBLAS, etc.) are supported.

The davidson table can take the following options (specifying the table automatically enables Davidson diagonalisation):

ndavidson_eigv type: integer.

Optional. Default: 4.

Number of eigenpairs to solve for.

ndavidson_trialvec type: integer.

Optional. Default: 8.

Number of trial vectors to use, usually double ndavidson_eigv.

davidson_maxsize type: integer.

Optional. Default: 50.

Maximum number of guess vectors held at the same time. This should be very small compared to the dimensions of the full Hamiltonian you’re trying to diagonalise. If larger an error will be thrown. It also has to be at least double ndavidson_trialvec, as the first iteration after each subspace collapse produces a very small change in eigenvalues and hence cannot be used for convergence testing.

davidson_tol type: float.

Optional. Default: 1e-7.

Tolerance in the norm of the changes in all eigenvalues.

davidson_maxiter type: integer.

Optional. Default: 100.

Maximum number of iterations to run, if convergence is not reached a warning will be thrown, and the results will still be printed.