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: (default corresponding to double-precision calculation), (single-precision calculation), and (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 and 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 a.u. for energies and for amplitudes.
Calculations of intermediates, density matrices, and 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: corresponds to calculation in double precision, 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.
$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