DensityMatrixSolversModule Module

A Module For Solving Quantum Chemistry Systems using Purification.



Contents


Subroutines

public subroutine PM(H, ISQ, trace, K, energy_value_out, chemical_potential_out, solver_parameters_in)

Compute the density matrix from a Hamiltonian using the PM method. Based on the PM algorithm presented in \cite palser1998canonical

Arguments

Type IntentOptional Attributes Name
type(Matrix_ps), intent(in) :: H

The matrix to compute the corresponding density from.

type(Matrix_ps), intent(in) :: ISQ

The inverse square root of the overlap matrix.

real(kind=NTREAL), intent(in) :: trace

The trace of the density matrix (usually the number of electrons)

type(Matrix_ps), intent(inout) :: K

The density matrix computed by this routine.

real(kind=NTREAL), intent(out), optional :: energy_value_out

The energy of the system (optional).

real(kind=NTREAL), intent(out), optional :: chemical_potential_out

The chemical potential (optional).

type(SolverParameters_t), intent(in), optional :: solver_parameters_in

Parameters for the solver (optional).

public subroutine TRS2(H, ISQ, trace, K, energy_value_out, chemical_potential_out, solver_parameters_in)

Compute the density matrix from a Hamiltonian using the TRS2 method. Based on the TRS2 algorithm presented in \cite niklasson2002.

Arguments

Type IntentOptional Attributes Name
type(Matrix_ps), intent(in) :: H

The matrix to compute the corresponding density from

type(Matrix_ps), intent(in) :: ISQ

The inverse square root of the overlap matrix.

real(kind=NTREAL), intent(in) :: trace

The trace of the density matrix (usually the number of electrons)

type(Matrix_ps), intent(inout) :: K

The density matrix computed by this routine.

real(kind=NTREAL), intent(out), optional :: energy_value_out

The energy of the system (optional).

real(kind=NTREAL), intent(out), optional :: chemical_potential_out

The chemical potential (optional).

type(SolverParameters_t), intent(in), optional :: solver_parameters_in

Parameters for the solver (optional).

public subroutine TRS4(H, ISQ, trace, K, energy_value_out, chemical_potential_out, solver_parameters_in)

Compute the density matrix from a Hamiltonian using the TRS4 method. Based on the TRS4 algorithm presented in \cite niklasson2002

Arguments

Type IntentOptional Attributes Name
type(Matrix_ps), intent(in) :: H

The matrix to compute the corresponding density from.

type(Matrix_ps), intent(in) :: ISQ

The inverse square root of the overlap matrix.

real(kind=NTREAL), intent(in) :: trace

The trace of the density matrix (usually the number of electrons)

type(Matrix_ps), intent(inout) :: K

The density matrix computed by this routine.

real(kind=NTREAL), intent(out), optional :: energy_value_out

The energy of the system (optional).

real(kind=NTREAL), intent(out), optional :: chemical_potential_out

The chemical potential (optional).

type(SolverParameters_t), intent(in), optional :: solver_parameters_in

Parameters for the solver (optional).

public subroutine HPCP(H, ISQ, trace, K, energy_value_out, chemical_potential_out, solver_parameters_in)

Compute the density matrix from a Hamiltonian using the HPCP method. Based on the algorithm presented in \cite truflandier2016communication.

Arguments

Type IntentOptional Attributes Name
type(Matrix_ps), intent(in) :: H

The matrix to compute the corresponding density from.

type(Matrix_ps), intent(in) :: ISQ

The inverse square root of the overlap matrix.

real(kind=NTREAL), intent(in) :: trace

The trace of the density matrix (usually the number of electrons)

type(Matrix_ps), intent(inout) :: K

The density matrix computed by this routine.

real(kind=NTREAL), intent(out), optional :: energy_value_out

The energy of the system (optional).

real(kind=NTREAL), intent(out), optional :: chemical_potential_out

The chemical potential (optional).

type(SolverParameters_t), intent(in), optional :: solver_parameters_in

Parameters for the solver (optional).

public subroutine ScaleAndFold(H, ISQ, trace, K, homo, lumo, energy_value_out, solver_parameters_in)

Compute the density matrix from a Hamiltonian using the Scale and Fold method. Based on the method of \cite rubensson2011nonmonotonic . Note that for this method, you must provide the value of the homo and lumo gap. It is not necessary for these to be accurate, but give a conservative value.

Arguments

Type IntentOptional Attributes Name
type(Matrix_ps), intent(in) :: H

The matrix to compute the corresponding density from

type(Matrix_ps), intent(in) :: ISQ

The inverse square root of the overlap matrix.

real(kind=NTREAL), intent(in) :: trace

The trace of the density matrix (usually the number of electrons)

type(Matrix_ps), intent(inout) :: K

The density matrix computed by this routine.

real(kind=NTREAL), intent(in) :: homo

A conservative estimate of the highest occupied eigenvalue.

real(kind=NTREAL), intent(in) :: lumo

A conservative estimate of the lowest unoccupied eigenvalue.

real(kind=NTREAL), intent(out), optional :: energy_value_out

The energy of the system (optional).

type(SolverParameters_t), intent(in), optional :: solver_parameters_in

Parameters for the solver (optional).

public subroutine DenseDensity(H, ISQ, trace, K, energy_value_out, chemical_potential_out, solver_parameters_in)

Compute the density matrix using a dense routine.

Arguments

Type IntentOptional Attributes Name
type(Matrix_ps), intent(in) :: H

The matrix to compute the corresponding density from.

type(Matrix_ps), intent(in) :: ISQ

The inverse square root of the overlap matrix.

real(kind=NTREAL), intent(in) :: trace

The trace of the density matrix (usually the number of electrons)

type(Matrix_ps), intent(inout) :: K

The density matrix computed by this routine.

real(kind=NTREAL), intent(out), optional :: energy_value_out

The energy of the system (optional).

real(kind=NTREAL), intent(out), optional :: chemical_potential_out

The chemical potential (optional).

type(SolverParameters_t), intent(in), optional :: solver_parameters_in

Parameters for the solver (optional).

public subroutine EnergyDensityMatrix(H, D, ED, threshold_in)

Compute the energy-weighted density matrix.

Arguments

Type IntentOptional Attributes Name
type(Matrix_ps), intent(in) :: H

The matrix to compute from.

type(Matrix_ps), intent(in) :: D

The density matrix.

type(Matrix_ps), intent(inout) :: ED

The energy-weighted density matrix.

real(kind=NTREAL), intent(in), optional :: threshold_in

Threshold for flushing small values (default = 0).

public subroutine McWeenyStep(D, DOut, S_in, threshold_in)

Take one McWeeny Step DOut = 3DSD - 2DSDSD

Arguments

Type IntentOptional Attributes Name
type(Matrix_ps), intent(in) :: D

The density matrix.

type(Matrix_ps), intent(inout) :: DOut

The resulting purified matrix.

type(Matrix_ps), intent(in), optional :: S_in

The overlap matrix (optional)

real(kind=NTREAL), intent(in), optional :: threshold_in

Threshold for flushing small values (default = 0).