ExactExchangeParameters

Included in QATK.Calculators.DFT, QATK.Calculators.SemiEmpirical, QATK.Calculators.Parameters

class ExactExchangeParameters(aux_basis_tolerance=None, number_of_waves=None, maximum_wave_vector=None, integral_tolerance=None, relative_screening_tolerance=None, use_admm=None, basis_set_admm=None, auxiliary_basis_set=None, gpu_acceleration=None)

Class for representing the parameters for setting the numerical accuracy of an exact exchange calculation.

Parameters:
  • aux_basis_tolerance (dict of string to double, or just a single double used for all element.) – The auxiliary basis is constructed by taking a product basis of the regular basis and throwing away functions that are linearly dependent up to this tolerance.
    Default: 1.0e-3

  • number_of_waves (int) – Parameter for the radial FFT. Will determine accuracy of the exchange integrals.
    Default: 1024

  • maximum_wave_vector (double) – Parameter for the radial FFT. Will determine accuracy of the exchange integrals.
    Default: 50.0

  • integral_tolerance (double) – The integral tolerance for throwing away integral contributions to the exchange matrix
    Default: 1.0e-4

  • relative_screening_tolerance – The tolerance used to throw away contributions to the exchange matrix. Contributions that have an estimated contribution below this tolerance is not calculated. The tolerance is relative to the exchange_integral_tolerance, thus the actual tolerance used is relative_screening_tolerance * exchange_integral_tolerance. The screening tolerance is smaller than the exchange_integral_tolerance due to accumulation of errors.
    Default: 1.0e-2

  • use_admm (boolean) – If true, we use the admm approximation for exact exchange.

  • basis_set_admm (BasisSet) – If we use ADMM, we have a second smaller basis set for exchange, which is provided here.

  • auxiliary_basis_set (NLEngine.BasisSet) – If this is provided, we use this as an auxiliary basis set and not the product space.

  • gpu_acceleration (Enabled | Disabled | Automatic) – Whether to use GPU acceleration for the exact exchange calculation. If set to Automatic, the solver will use the GPU if available.
    Default: Automatic

auxBasisTolerance()
Returns:

The auxiliary basis is constructed by taking a product basis of the regular basis and throwing away functions that are linearly dependent up to this tolerance.

Return type:

dict of string to double, or just a single double used for all element.

auxiliaryBasisSet()
Returns:

The auxiliary basis set used for PARI, if this is None, the auxiliary basis set used will be the product basis of the exchange basis set.

Return type:

NLEngine.BasisSet

basisSetAdmm()
Returns:

The Auxiliary Density Matrix Method (ADMM) ‘exchange’ basis set.

Return type:

list

gpuAcceleration()
Returns:

Whether to use GPU acceleration for the exact exchange calculation. If set to Automatic, the solver will use the GPU if available.

Return type:

Enabled | Disabled | Automatic

integralTolerance()
Returns:

The integral screening tolerance for throwing away integral contributions to the exchange matrix

Return type:

double

maximumWaveVector()
Returns:

Parameter for the radial FFT. Will determine accuracy of the exchange integrals.

Return type:

double

minAuxBasisTolerance()
Returns:

The auxiliary basis is constructed by taking a product basis of the regular basis and throwing away functions that are linearly dependent up to this tolerance.

Return type:

double

nlinfo()
Returns:

The nlinfo.

Return type:

dict

numberOfWaves()
Returns:

Parameter for the radial FFT. Will determine accuracy of the exchange integrals.

Return type:

int

relativeScreeningTolerance()
Returns:

The integral screening tolerance for throwing away integral contributions to the exchange matrix

Return type:

double

uniqueString()

Return a unique string representing the state of the object.

useAdmm()
Returns:

True, then the Auxiliary Density Matrix Method (ADMM) is used.

Return type:

bool

Notes

GPU acceleration

The calculation of exact exchange is computationally intensive and can benefit significantly from GPU acceleration. The speedup factor depends mostly on the basis size: basis sets with a low number of orbitals (e.g., ADMM basis, SingleZeta or SingleZetaPolarized basis) will not benefit significantly from GPU acceleration, while larger basis sets (for example, Medium, DoubleZetaPolarized or higher) will have a significant speedup (3x or larger).

Warning

Exact exchange requires a large amount of GPU memory. For large systems (tens of thousands of orbitals), the data transfer to GPU memory will be capped, which may degrade performance. For extremely large systems, it may be necessary to disable GPU acceleration by setting gpu_acceleration=Disabled to avoid running out of memory. This allows the GPU to still be used for other parts of the calculation, such as matrix diagonalization.