Memory footprint and execution time of coupled-cluster calculations can be
reduced by approximately a factor of 2 by using single-precision
arithmetic.^{Pokhilko:2018} The errors due to using single precision
are small and comparable with typical convergence thresholds.^{Pokhilko:2018}
If loss of accuracy is undesirable, one can follow up a converged single-precision
calculation with a small number of “clean-up” iterations in double precision,
which recover the full accuracy of a double-precision calculation.
Eventually, single-precision execution of
coupled-cluster calculations will become the default, however, for now setting
the single precision calculation needs to be done manually, as described below.

Single-precision capabilities are only available for the CCMAN2 suite. They work with both variants of the tensor-contraction backend (controlled by CC_BACKEND). Currently enabled features include energies, gradients, and properties calculations for both canonical and RI/CD versions. Single-precision versions of most EOM-CC methods are also available; the respective keywords are described in Section 7.9.10.

Note: When using single-precision, the thresholds need to be adjusted accordingly, as explained below. Using too tight convergence thresholds in single precision results in a non-convergent behavior.

Note: In rare cases, slow performance of the current code in single precision with default CC_BACKEND was noted; this issue is being investigated. Please monitor the performance and report any issues you encounter.

To deploy a single- or a mixed-precision coupled-cluster calculation, use CC_SINGLE_PREC. Its possible values are: $0$ (default corresponding to double-precision calculation), $1$ (single-precision calculation), and $2$ (single-precision calculation followed by a couple of iterations in double precision, to recover full accuracy).

To adjust the convergence thresholds in single-precision calculation, use CC_SP_T_CONV (threshold for $T$ and $\mathrm{\Lambda}$ amplitudes) and CC_SP_E_CONV (threshold for energies). Because too tight convergence criteria can cause non-convergent behavior, these thresholds should not be tighter than ${10}^{-6}$ a.u. for energies and ${10}^{-4}$ for amplitudes.

Calculations of intermediates, density matrices, and ${S}^{2}$ can also be done in single precision, leading to negligible errors in energies and optimized geometries. This is controlled by the CC_SP_DM variable: $0$ corresponds to calculation in double precision, $1$ corresponds to calculation in single precision.

Calculation of perturbative triples corrections, (T) and (fT), can be executed in single precision using libpt; additional keywords deploying these features are USE_LIBPT and LIBPT_MIXED_PRECISION.

Note: Calculation of numerical derivatives in single precision, such as finite difference evaluation of nuclear gradients and finite-field calculations, require using larger step sizes or field strengths, respectively.

CC_SINGLE_PREC

Precision selection for CCSD calculation. Available in CCMAN2 only.

TYPE:

INTEGER

DEFAULT:

0
double-precision calculation

OPTIONS:

1
single-precision calculation
2
single-precision calculation followed by double-precision clean-up iterations

RECOMMENDATION:

Do not set too tight convergence thresholds when using single precision

CC_SP_T_CONV

Amplitude convergence threshold in single precision in CCSD calculations.

TYPE:

INTEGER

DEFAULT:

3

OPTIONS:

$n$
Corresponding to ${10}^{-n}$ convergence criterion

RECOMMENDATION:

Set 4 to be consistent with the default threshold in double precision in a pure
single-precision run. When used with clean-up version, it should be smaller
than double-precision threshold not to introduce extra iterations.

CC_SP_E_CONV

Energy convergence criterion in single precision in CCSD calculations.

TYPE:

INTEGER

DEFAULT:

5

OPTIONS:

$n$
Corresponding to ${10}^{-n}$ convergence criterion

RECOMMENDATION:

Set 6 to be consistent with the default threshold in double precision in a pure
single-precision calculation.
When used with clean-up version, it should be smaller than double-precision
threshold not to introduce extra iterations.

CC_SP_DM

Precision selection for CCSD and EOM-CCSD intermediates, density matrices, gradients, and ${S}^{2}$

TYPE:

INTEGER

DEFAULT:

0
double-precision calculation

OPTIONS:

1
single-precision calculation

RECOMMENDATION:

NONE

CC_ERASE_DP_INTEGRALS

Controls storage of requisite objects computed with double precision in a single-precision calculation

TYPE:

INTEGER

DEFAULT:

0
store

OPTIONS:

1
do not store

RECOMMENDATION:

Do not erase integrals if clean-up in double precision is intended.

LIBPT_MIXED_PRECISION

Deploys single-precision evaluation of (T) and (fT) within libpt

TYPE:

INTEGER

DEFAULT:

0
do not use single precision

OPTIONS:

1
use single precision

RECOMMENDATION:

Use in combination with USE_LIBPT.

$comment Uracil+H2O cc-pvdz CCSD(T) energy $end $molecule 0 1 N .034130 -.986909 0.000000 N -1.173397 .981920 0.000000 C -1.218805 -.408164 0.000000 C -.007302 1.702153 0.000000 C 1.196200 1.107045 0.000000 C 1.289085 -.345905 0.000000 O 2.310232 -.996874 0.000000 O -2.257041 -1.026495 0.000000 H .049329 -1.997961 0.000000 H -2.070598 1.437050 0.000000 H -.125651 2.776484 0.000000 H 2.111671 1.674079 0.000000 O 1.747914 -1.338382 -3.040233 H 2.180817 -1.817552 -2.333676 H 0.813180 -1.472188 -2.883392 $end $rem method = ccsd(t) basis = cc-pvdz use_libpt = true evaluate triples with libpt code ! use SP code cc_single_prec=1 eom_single_prec=1 cc_sp_dm = 1 cc_sp_t_conv = 4 cc_sp_e_conv = 6 cc_erase_dp_integrals = 1 libpt_mixed_precision = 1 $end