cuEST Release Notes#
v0.2.0#
New Features#
Adds support for polarizable continuum model (PCM) derivatives with respect to each atomic cavity radius:
cuestPCMRadiiDerivativeCompute()for radius-rescaling solvent models such as DRACO.
Adds support for range-separated hybrid exchange and its nuclear derivatives.
The
cuestDFIntPlan_tcan be configured to use the full-range \(1/r\) operator, the long-range \(\mathrm{erf}(\omega r)/r\) operator and linear combinations thereof.
Adds native support for new exchange-correlation functionals:
\(\mathrm{LC\mbox{-}}\omega\mathrm{PBE}\)
\(\mathrm{LC\mbox{-}}\omega\mathrm{PBEh}\)
\(\omega\mathrm{B97X}\)
\(\omega\mathrm{B97X\mbox{-}V}\)
\(\omega\mathrm{B97M\mbox{-}V}\)
\(\mathrm{CAM\mbox{-}B3LYP}\)
\(\mathrm{HSE06}\)
\(\mathrm{M06}\)
\(\mathrm{M06\mbox{-}2X}\)
Adds support for general multipole integrals and their nuclear derivatives:
cuestMultipoleCompute()evaluates AO multipole matrices for arbitrary Cartesian orders \(x^l y^m z^n\) about a specified origin.cuestMultipoleDerivativeCompute()computes nuclear gradients of the multipole integrals contracted with a user-supplied density matrix.
Adds support for one-electron angular momentum integrals and their nuclear derivatives:
cuestAngularMomentumCompute()computes atomic orbital (AO) angular momentum matrices (\(L_x\), \(L_y\), \(L_z\)) about a user-defined origin.cuestAngularMomentumDerivativeCompute()computes nuclear gradients of angular momentum expectation integrals contracted with a user-supplied input density matrix.
Introduces nabla integrals and their nuclear derivatives:
cuestNablaCompute()evaluates AO nabla operator matrices (\(\nabla_x\), \(\nabla_y\), \(\nabla_z\)).cuestNablaDerivativeCompute()computes nuclear gradients of the nabla integrals contracted with a user-supplied density matrix.
Adds density-fitted nonsymmetric exchange (K) matrix computation:
cuestDFNonsymmetricExchangeCompute()computes AO exchange (K) matrices with nonsymmetric density matrices (e.g., for response or excited-state methods) within a density fitting (DF) framework.Supports batched evaluation over multiple density matrices. Densities are specified as a single left coefficient matrix and multiple right coefficient matrices.
Adds AO-to-MO transformation for density-fitted integrals:
cuestDFMOIntegralsCompute()transforms three-index DF AO tensors \((A|mn)\) into MO-space tensors \((A|ia)\) using pairs of left/right coefficient matrices.Supports batched transformations with variable numbers of left and right orbitals per matrix pair.
Applies the fitting metric (and, when configured, long-range corrected operators) as part of the transformation.
Adds detailed inspection of polarizable continuum model (PCM) calculations:
cuestPCMIntegrationGridCompute()allows the user to obtain the PCM grid.cuestPCMIntegrationWeightCompute()allows the user to obtain the PCM weights.
Adds support for float-float FP64 emulation:
Accelerates VV10 nonlocal correlation, potential, Coulomb, and PCM computations on GPUs with reduced native FP64 throughput, such as the GeForce and workstation-class architectures (compute capabilities 8.6, 8.9, and 12.0).
Defaults to using float-float emulation when beneficial based on the active hardware.
Adds just-in-time (JIT) compilation of specialized GPU kernels for select compute routines:
cuestPotentialCompute(),cuestPotentialDerivativeCompute(),cuestDFCoulombCompute(),cuestDFSymmetricDerivativeCompute(),cuestPCMPotentialCompute(),cuestPCMDerivativeCompute(), andcuestPCMRadiiDerivativeCompute().Requires CUDA Toolkit 13.x or newer (13.0.2 or later); on CUDA 12.x, affected routines run their precompiled kernels instead.
Compiled kernels are cached to disk (default
~/.cuest_cache/cuest-cuda<cuda_major>-v<cuest_version>/) and reused across runs, so the compile cost is paid once per machine.Configurable via
CUEST_HANDLE_PARAMETERS_JIT_CACHE_DIRandCUEST_HANDLE_PARAMETERS_JIT_COMPILE_THREADSon the handle parameters, and per-routine via each routine’s*_JIT_USAGE_MODEparameter.See Just-In-Time (JIT) Compilation in cuEST for details.
Changes#
To improve efficiency in the
cuestDFSymmetricDerivativeCompute(), thecuestDFSymmetricDerivativeComputeMemoryPolicy_toptions have been changed.The
CUEST_DFSYMMETRICDERIVATIVECOMPUTE_MEMORY_POLICY_FULLandCUEST_DFSYMMETRICDERIVATIVECOMPUTE_MEMORY_POLICY_BLOCKEDmemory policies have been deprecated.The
CUEST_DFSYMMETRICDERIVATIVECOMPUTE_MEMORY_POLICY_DEVICECACHEpolicy replacesCUEST_DFSYMMETRICDERIVATIVECOMPUTE_MEMORY_POLICY_FULL.If the new
CUEST_DFSYMMETRICDERIVATIVECOMPUTE_MEMORY_POLICY_OVERWRITEmemory policy is used whencuestDFSymmetricDerivativeCompute()is called, thecuestDFIntPlan_twill be placed in a “dirty” state and cannot continue to be used. Calls using acuestDFIntPlan_tin a dirty state return theCUEST_STATUS_INVALID_PLANstatus code.
The
cuestDFIntPlan_tcan now be constructed in an “integral direct” mode by settingCUEST_DFINTPLAN_PARAMETERS_THREE_INDEX_INTEGRAL_DIRECT.Currently, this option is only supported during calls to
cuestDFMOIntegralsCompute().Calls to other compute functions using a
cuestDFIntPlan_tbuilt in “integral direct” mode will fail with theCUEST_STATUS_INVALID_PLANstatus code.
The
cuestDFIntPlan_tnow only accepts values ofCUEST_DFINTPLAN_PARAMETERS_EXCHANGE_FRACTIONthat are greater than or equal to zero.The
CUEST_STATUS_INVALID_ARGUMENTstatus will be returned if this condition is violated.
The
cuestDFSymmetricDerivativeComputefunctions accept NULL pointers for the MO coefficients if no exchange calculation will be performed.This behavior is now consistent for both the C and Python APIs.
Python bindings now use nanobind and the 3.12 stable ABI. This means that Python 3.11 is deprecated and all 3.12+ versions are supported (free threaded Python is not currently supported). While regular usage is unchanged, nanobind introduces some extra type safety preventing, e.g., creation of enum variables from integers that do not correspond to a valid enumerator value.
The libcuest, libcuest-static, and libcuest-devel C packages are deployed only through the conda-forge channel from 0.2.0 onwards. Previous versions are still available on both conda-forge and the nvidia channel.
v0.1.1#
Bug Fixes#
Fixes a possible corruption bug in symmetrizing Vxc and VV10 potential matrices, in cases with large numbers of atomic orbitals. The bug can be observed for medium-sized problems using the
compute-sanitizertool, but is not known to be observable for matrices involving fewer than 10,000 atomic orbitals withoutcompute-sanitizer. Matrices computed by the following API calls are potentially impacted:This change does not modify the signature of any APIs and does not impact performance.
Disclaimer#
cuEST is in a pre-release state. Pre-release products may not be fully functional, may contain errors or design flaws, and may be changed at any time without notice. We appreciate your feedback to improve and iterate on our products.