refactor: Remove OneDFT branding from GauXC interface (#5563)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
Stefano Battaglia 2026-07-10 09:05:04 +02:00 committed by GitHub
parent 3c427e6f4d
commit ad1d558f05
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
23 changed files with 121 additions and 125 deletions

View file

@ -1,9 +1,8 @@
# GauXC
[GauXC](https://github.com/wavefunction91/GauXC) provides an external exchange-correlation (XC)
integrator for Quickstep. It can evaluate selected conventional functionals and GauXC OneDFT models,
including SKALA models, through the [GAUXC](#CP2K_INPUT.FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.GAUXC)
section.
integrator for Quickstep. It can evaluate selected conventional functionals and GauXC Skala models
through the [GAUXC](#CP2K_INPUT.FORCE_EVAL.DFT.XC.XC_FUNCTIONAL.GAUXC) section.
The CP2K interface currently provides two distinct paths:
@ -29,8 +28,8 @@ a conventional functional evaluated by GauXC:
&END XC
```
A non-`NONE` model selects a GauXC OneDFT model. The model can be a `.fun` file or an installed
model name. The underlying functional is optional in this case and defaults to `PBE`:
A non-`NONE` model selects a GauXC Skala model. The model can be a `.fun` file or an installed model
name. The underlying functional is optional in this case and defaults to `PBE`:
```text
&XC
@ -56,10 +55,9 @@ Select the downloaded checkpoint with `MODEL ./skala-1.1.fun`. Alternatively, se
[GauXC/Skala model documentation](https://microsoft.github.io/skala/gauxc/c-library.html#download-checkpoint-from-huggingface)
for the model interface and available checkpoints. Obtain `.fun` files only from trusted sources.
The molecular-quadrature OneDFT/SKALA path defaults to `GRID SUPERFINE` and
`PRUNING_SCHEME UNPRUNED` unless these settings are provided explicitly. These settings are
recommended for force checks; coarser grids are accuracy settings and should be converged for the
target calculation.
The molecular-quadrature Skala path defaults to `GRID SUPERFINE` and `PRUNING_SCHEME UNPRUNED`
unless these settings are provided explicitly. These settings are recommended for force checks;
coarser grids are accuracy settings and should be converged for the target calculation.
## Molecular-Quadrature Path
@ -89,28 +87,27 @@ It uses a molecular quadrature and must not be used to validate compact periodic
neighbor-cell AO blocks, k-points, compact-cell quadrature, and periodic stress tensors require a
dedicated periodic GauXC interface.
### OneDFT and SKALA Runtime Controls
### Skala Runtime Controls
`ONEDFT_ATOM_CHUNK_SIZE` controls atom-blocked Torch inference. A positive value selects the number
`MODEL_ATOM_CHUNK_SIZE` controls atom-blocked Torch inference. A positive value selects the number
of atoms per block, zero disables chunking, and the default lets GauXC or the
`GAUXC_ONEDFT_ATOM_CHUNK_SIZE` environment variable choose the policy.
For MPI calculations, `SKALA_RUNTIME` controls the communicator used for OneDFT/SKALA energy and
potential evaluation. `AUTO` uses the force-evaluation communicator for closed-shell calculations
and a replicated rank-local runtime for open-shell calculations. The corresponding
`ONEDFT_GRADIENT_RUNTIME` setting defaults to a conservative replicated runtime for nuclear
gradients. Select `MPI` only with a GauXC installation that supports distributed OneDFT gradients.
For MPI calculations, `SKALA_RUNTIME` controls the communicator used for Skala energy and potential
evaluation. `AUTO` uses the force-evaluation communicator for closed-shell calculations and a
replicated rank-local runtime for open-shell calculations. The corresponding
`MODEL_GRADIENT_RUNTIME` setting defaults to a conservative replicated runtime for nuclear
gradients. Select `MPI` only with a GauXC installation that supports distributed Skala gradients.
### GAPW and Other Restrictions
- Conventional GauXC with `METHOD GAPW` requires all-electron potentials. With pseudopotentials,
`METHOD GAPW` is available only for OneDFT/SKALA-style models and evaluates the molecular
`METHOD GAPW` is available only for Skala-style models and evaluates the molecular
AO/valence-density XC term directly.
- OneDFT/SKALA with `METHOD GAPW` and GTH/ECP pseudopotentials currently supports energies only;
forces and molecular virials are unavailable. CP2K's GAPW one-center XC correction is not used on
this path.
- `METHOD GAPW_XC`, NLCC pseudopotentials with OneDFT/SKALA, and non-local `VDW_POTENTIAL`
corrections are not supported by the molecular GauXC path.
- Skala with `METHOD GAPW` and GTH/ECP pseudopotentials currently supports energies only; forces and
molecular virials are unavailable. CP2K's GAPW one-center XC correction is not used on this path.
- `METHOD GAPW_XC`, NLCC pseudopotentials with Skala, and non-local `VDW_POTENTIAL` corrections are
not supported by the molecular GauXC path.
- Higher-XC-derivative response and kernel properties are not available through GauXC. Real-time
propagation is also unsupported.

View file

@ -150,7 +150,7 @@ LIBXC is a library that provides wider choice of XC functionals.
GauXC can be used to evaluate selected exchange-correlation functionals through an external
integrator.
- Libtorch is required for OneDFT/SKALA support.
- Libtorch is required for Skala support.
- Pass `-DCP2K_USE_GAUXC=ON` to CMake to enable GauXC. An MPI-enabled CP2K build requires a GauXC
installation built with MPI support.
- TorchScript-based GauXC models require a libtorch installation compatible with CP2K's BLAS and
@ -221,7 +221,7 @@ of each atom.
## Torch (PyTorch C++ library)
LibTorch is the C++ distribution of PyTorch. CP2K uses it for the NequIP interface and for GauXC
OneDFT/SKALA models.
Skala models.
- LibTorch can be downloaded from the
[PyTorch installation page](https://pytorch.org/get-started/locally/).

View file

@ -1330,10 +1330,10 @@ CONTAINS
CALL keyword_release(keyword)
CALL keyword_create(keyword, __LOCATION__, name="MODEL", &
description="GauXC OneDFT model name or path. Use NONE for conventional GauXC. "// &
description="GauXC Skala model name or path. Use NONE for conventional GauXC. "// &
"MODEL SKALA selects the installed Skala-1.1 model when available; "// &
"other OneDFT models are supplied as .fun files or model names. "// &
"NLCC pseudopotentials are rejected in the molecular GauXC OneDFT/SKALA "// &
"other Skala models are supplied as .fun files or model names. "// &
"NLCC pseudopotentials are rejected in the molecular GauXC Skala "// &
"path; use the CP2K-native SKALA grid path for NLCC calculations.", &
usage="MODEL SKALA", &
default_c_val="NONE")
@ -1341,7 +1341,7 @@ CONTAINS
CALL keyword_release(keyword)
CALL keyword_create(keyword, __LOCATION__, name="GRID", &
description="Atomic grid size for GauXC. OneDFT/SKALA defaults to SUPERFINE "// &
description="Atomic grid size for GauXC. Skala defaults to SUPERFINE "// &
"unless this keyword is set explicitly.", &
usage="GRID fine", &
enum_c_vals=s2a("FINE", "ULTRAFINE", "SUPERFINE", "GM3", "GM5"), &
@ -1369,7 +1369,7 @@ CONTAINS
CALL keyword_release(keyword)
CALL keyword_create(keyword, __LOCATION__, name="PRUNING_SCHEME", &
description="Pruning scheme for GauXC. OneDFT/SKALA defaults to UNPRUNED "// &
description="Pruning scheme for GauXC. Skala defaults to UNPRUNED "// &
"unless this keyword is set explicitly.", &
usage="PRUNING_SCHEME robust", &
enum_c_vals=s2a("ROBUST", "TREUTLER", "UNPRUNED"), &
@ -1390,19 +1390,19 @@ CONTAINS
CALL keyword_create(keyword, __LOCATION__, name="DEVICE_RUNTIME_FILL_FRACTION", &
description="Fraction of currently available GPU memory preallocated by "// &
"a GauXC device runtime. Lower values leave more memory for OneDFT/SKALA "// &
"a GauXC device runtime. Lower values leave more memory for Skala "// &
"Torch inference; this keyword is used only with LB_EXECUTION_SPACE DEVICE.", &
usage="DEVICE_RUNTIME_FILL_FRACTION 0.1", &
default_r_val=0.1_dp)
CALL section_add_keyword(section, keyword)
CALL keyword_release(keyword)
CALL keyword_create(keyword, __LOCATION__, name="ONEDFT_ATOM_CHUNK_SIZE", &
description="Atom chunk size for GauXC OneDFT/SKALA Torch inference. "// &
CALL keyword_create(keyword, __LOCATION__, name="MODEL_ATOM_CHUNK_SIZE", &
description="Atom chunk size for GauXC Skala Torch inference. "// &
"A positive value evaluates the Torch model atom block by atom block; "// &
"zero disables chunking; the default leaves GauXC's model-specific policy "// &
"or the GAUXC_ONEDFT_ATOM_CHUNK_SIZE environment variable in control.", &
usage="ONEDFT_ATOM_CHUNK_SIZE 3", &
usage="MODEL_ATOM_CHUNK_SIZE 3", &
default_i_val=-1)
CALL section_add_keyword(section, keyword)
CALL keyword_release(keyword)
@ -1484,7 +1484,7 @@ CONTAINS
CALL keyword_create(keyword, __LOCATION__, name="NATIVE_GRID_GAPW_DENSITY_PARTITION", &
description="Hard/soft one-center density contribution used by METHOD "// &
"GAPW and METHOD GAPW_XC in OneDFT/SKALA atomic-grid corrections. "// &
"GAPW and METHOD GAPW_XC in Skala atomic-grid corrections. "// &
"HARD_MINUS_SOFT evaluates the SKALA model on hard and soft atomic "// &
"densities separately and adds the GAPW hard-minus-soft correction; this "// &
"is the default because it follows CP2K's GAPW XC expression. For "// &
@ -1597,7 +1597,7 @@ CONTAINS
CALL keyword_release(keyword)
CALL keyword_create(keyword, __LOCATION__, name="SKALA_RUNTIME", &
description="MPI communicator policy for GauXC OneDFT/SKALA. AUTO uses "// &
description="MPI communicator policy for GauXC Skala. AUTO uses "// &
"the force-evaluation communicator for closed-shell calculations and a "// &
"rank-local replicated runtime for open-shell calculations. MPI forces the "// &
"force-evaluation communicator. SELF forces the previous replicated mode.", &
@ -1611,13 +1611,13 @@ CONTAINS
CALL section_add_keyword(section, keyword)
CALL keyword_release(keyword)
CALL keyword_create(keyword, __LOCATION__, name="ONEDFT_GRADIENT_RUNTIME", &
description="MPI communicator policy for GauXC OneDFT/SKALA nuclear gradients. "// &
CALL keyword_create(keyword, __LOCATION__, name="MODEL_GRADIENT_RUNTIME", &
description="MPI communicator policy for GauXC Skala nuclear gradients. "// &
"AUTO keeps the conservative rank-local gradient runtime when energy/VXC uses "// &
"the MPI communicator. MPI uses the force-evaluation communicator for gradients "// &
"and requires GauXC support for distributed OneDFT/SKALA gradients. SELF forces "// &
"and requires GauXC support for distributed Skala gradients. SELF forces "// &
"rank-local replicated gradient runtimes.", &
usage="ONEDFT_GRADIENT_RUNTIME AUTO", &
usage="MODEL_GRADIENT_RUNTIME AUTO", &
enum_c_vals=s2a("AUTO", "MPI", "SELF"), &
enum_i_vals=[1, 2, 3], &
enum_desc=s2a("Conservative replicated gradient runtime (default)", &

View file

@ -45,7 +45,7 @@ MODULE qs_vxc_atom
skala_gapw_density_partition_hard_only,&
skala_gapw_density_partition_none,&
skala_gapw_density_partition_soft_only,&
xc_section_uses_onedft_model
xc_section_uses_gauxc_model
USE util, ONLY: get_limit
USE virial_types, ONLY: virial_type
USE xc_atom, ONLY: fill_rho_set,&
@ -207,7 +207,7 @@ CONTAINS
xc_fun_section => section_vals_get_subs_vals(my_xc_section, "XC_FUNCTIONAL")
CALL section_vals_val_get(xc_fun_section, "_SECTION_PARAMETERS_", &
i_val=myfun)
skala_atom_grid = xc_section_uses_onedft_model(my_xc_section)
skala_atom_grid = xc_section_uses_gauxc_model(my_xc_section)
gapw_density_partition = skala_gapw_density_partition_hard_minus_soft
IF (skala_atom_grid) THEN
gapw_density_partition = native_skala_gapw_density_partition(my_xc_section)

View file

@ -76,7 +76,7 @@ MODULE skala_gpw_functional
PUBLIC :: ensure_native_skala_grid_scope, get_gauxc_section, skala_gapw_atom_vxc_of_r, &
native_skala_gapw_density_partition, skala_gpw_eval, skala_gpw_exc_density, &
xc_section_uses_native_skala_grid, xc_section_uses_onedft_model
xc_section_uses_native_skala_grid, xc_section_uses_gauxc_model
TYPE(skala_torch_model_type), SAVE :: cached_model
CHARACTER(len=default_path_length), SAVE :: cached_model_path = ""
@ -109,27 +109,27 @@ CONTAINS
END FUNCTION xc_section_uses_native_skala_grid
! **************************************************************************************************
!> \brief Return true if the GAUXC subsection requests a OneDFT/SKALA-style model.
!> \brief Return true if the GAUXC subsection requests a Skala-style model.
!> \param xc_section ...
!> \return ...
! **************************************************************************************************
FUNCTION xc_section_uses_onedft_model(xc_section) RESULT(uses_onedft_model)
FUNCTION xc_section_uses_gauxc_model(xc_section) RESULT(uses_gauxc_model)
TYPE(section_vals_type), INTENT(IN), POINTER :: xc_section
LOGICAL :: uses_onedft_model
LOGICAL :: uses_gauxc_model
CHARACTER(len=default_path_length) :: model_key, model_name
TYPE(section_vals_type), POINTER :: gauxc_section
uses_onedft_model = .FALSE.
uses_gauxc_model = .FALSE.
gauxc_section => get_gauxc_section(xc_section)
IF (ASSOCIATED(gauxc_section)) THEN
CALL section_vals_val_get(gauxc_section, "MODEL", c_val=model_name)
model_key = ADJUSTL(model_name)
CALL uppercase(model_key)
uses_onedft_model = (TRIM(model_key) /= "" .AND. TRIM(model_key) /= "NONE")
uses_gauxc_model = (TRIM(model_key) /= "" .AND. TRIM(model_key) /= "NONE")
END IF
END FUNCTION xc_section_uses_onedft_model
END FUNCTION xc_section_uses_gauxc_model
! **************************************************************************************************
!> \brief Return the hard/soft GAPW one-center density partition for native SKALA.

View file

@ -81,7 +81,7 @@ MODULE xc
LOGICAL, PRIVATE, PARAMETER :: debug_this_module = .TRUE.
CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'xc'
CHARACTER(len=*), PARAMETER, PRIVATE :: gauxc_high_deriv_message = &
"Response and kernel properties with GauXC/OneDFT/SKALA require higher XC derivatives, "// &
"Response and kernel properties with GauXC/Skala require higher XC derivatives, "// &
"which are not implemented. Use a native CP2K XC functional or disable the coupled XC kernel."
CONTAINS

View file

@ -85,11 +85,11 @@ MODULE xc_gauxc_functional
CONTAINS
! **************************************************************************************************
!> \brief Set the GauXC OneDFT atom chunk environment knob when the CP2K keyword is explicit.
!> \brief Set the GauXC Skala atom chunk environment knob when the CP2K keyword is explicit.
!> \param atom_chunk_size ...
!> \param is_explicit ...
! **************************************************************************************************
SUBROUTINE set_gauxc_onedft_atom_chunk_env(atom_chunk_size, is_explicit)
SUBROUTINE set_gauxc_model_atom_chunk_env(atom_chunk_size, is_explicit)
INTEGER, INTENT(IN) :: atom_chunk_size
LOGICAL, INTENT(IN) :: is_explicit
@ -109,9 +109,9 @@ CONTAINS
END IF
IF (ierr /= 0_c_int) THEN
CALL cp_abort(__LOCATION__, &
"Could not set GAUXC_ONEDFT_ATOM_CHUNK_SIZE for GauXC OneDFT/SKALA.")
"Could not set GAUXC_ONEDFT_ATOM_CHUNK_SIZE for GauXC Skala.")
END IF
END SUBROUTINE set_gauxc_onedft_atom_chunk_env
END SUBROUTINE set_gauxc_model_atom_chunk_env
! **************************************************************************************************
!> \brief ...
@ -908,14 +908,14 @@ CONTAINS
IF (TRIM(model_key) == "NONE" .OR. TRIM(model_key) == "") THEN
reference = "Functional computed by GauXC (underlying: "//TRIM(xc_fun_name)//")"
ELSE
reference = "Functional computed by GauXC OneDFT model "//TRIM(model_name)
reference = "Functional computed by GauXC Skala model "//TRIM(model_name)
END IF
END IF
IF (PRESENT(shortform)) THEN
IF (TRIM(model_key) == "NONE" .OR. TRIM(model_key) == "") THEN
shortform = "GAUXC ("//TRIM(xc_fun_name)//")"
ELSE
shortform = "GAUXC OneDFT"
shortform = "GAUXC Skala"
END IF
END IF
IF (PRESENT(needs)) THEN
@ -961,16 +961,15 @@ CONTAINS
REAL(KIND=dp), PARAMETER :: gapw_fd_gradient_dx = 1.0E-4_dp
CHARACTER(len=default_path_length) :: model_key, model_name, output_path
CHARACTER(len=default_string_length) :: grid_key, grid_type, int_exec_space, lb_exec_space, &
lwd_kernel, onedft_gradient_runtime, onedft_gradient_runtime_key, pruning_key, &
pruning_scheme, radial_quadrature, skala_runtime, skala_runtime_key, xc_fun_name
INTEGER :: batch_size, env_status, img, ispin, &
natom, nimages, nspins, &
onedft_atom_chunk_size
LOGICAL :: do_kpoints, gapw_method, gapw_paw_pseudopotentials, gapw_pseudopotentials, &
grid_explicit, hdf5_output, is_periodic, molecular_virial, molecular_virial_debug, &
need_xc_gradient, onedft_atom_chunk_size_explicit, periodic_reference, pruning_explicit, &
use_fd_gradient, use_gradient_mpi_runtime, use_gradient_self_runtime, use_onedft, &
CHARACTER(len=default_string_length) :: gradient_runtime, gradient_runtime_key, grid_key, &
grid_type, int_exec_space, lb_exec_space, lwd_kernel, pruning_key, pruning_scheme, &
radial_quadrature, skala_runtime, skala_runtime_key, xc_fun_name
INTEGER :: atom_chunk_size, batch_size, env_status, &
img, ispin, natom, nimages, nspins
LOGICAL :: atom_chunk_size_explicit, do_kpoints, gapw_method, gapw_paw_pseudopotentials, &
gapw_pseudopotentials, grid_explicit, hdf5_output, is_periodic, molecular_virial, &
molecular_virial_debug, need_xc_gradient, periodic_reference, pruning_explicit, &
use_fd_gradient, use_gauxc_model, use_gradient_mpi_runtime, use_gradient_self_runtime, &
use_self_runtime, use_skala_model, write_hdf5_output
REAL(KIND=dp) :: device_runtime_fill_fraction, &
molecular_virial_debug_dx
@ -1095,9 +1094,9 @@ CONTAINS
r_val=device_runtime_fill_fraction)
CALL section_vals_val_get( &
gauxc_functional_section, &
"ONEDFT_ATOM_CHUNK_SIZE", &
i_val=onedft_atom_chunk_size, &
explicit=onedft_atom_chunk_size_explicit)
"MODEL_ATOM_CHUNK_SIZE", &
i_val=atom_chunk_size, &
explicit=atom_chunk_size_explicit)
CALL section_vals_val_get( &
gauxc_functional_section, &
"PERIODIC_REFERENCE", &
@ -1132,8 +1131,8 @@ CONTAINS
c_val=skala_runtime)
CALL section_vals_val_get( &
gauxc_functional_section, &
"ONEDFT_GRADIENT_RUNTIME", &
c_val=onedft_gradient_runtime)
"MODEL_GRADIENT_RUNTIME", &
c_val=gradient_runtime)
CALL section_vals_val_get( &
gauxc_functional_section, &
"OUTPUT_PATH", &
@ -1143,23 +1142,23 @@ CONTAINS
CALL uppercase(model_key)
skala_runtime_key = ADJUSTL(skala_runtime)
CALL uppercase(skala_runtime_key)
onedft_gradient_runtime_key = ADJUSTL(onedft_gradient_runtime)
CALL uppercase(onedft_gradient_runtime_key)
use_onedft = (TRIM(model_key) /= "" .AND. TRIM(model_key) /= "NONE")
gradient_runtime_key = ADJUSTL(gradient_runtime)
CALL uppercase(gradient_runtime_key)
use_gauxc_model = (TRIM(model_key) /= "" .AND. TRIM(model_key) /= "NONE")
use_skala_model = (INDEX(TRIM(model_key), "SKALA") > 0)
IF (gapw_pseudopotentials .AND. .NOT. use_onedft) THEN
IF (gapw_pseudopotentials .AND. .NOT. use_gauxc_model) THEN
CALL cp_abort(__LOCATION__, &
"GauXC with METHOD GAPW/GAPW_XC and pseudopotentials is supported only for "// &
"OneDFT/SKALA-style models that replace the molecular XC term. "// &
"Skala-style models that replace the molecular XC term. "// &
"Use POTENTIAL ALL for local/semi-local GauXC GAPW validation or METHOD GPW "// &
"with pseudopotentials.")
END IF
IF (gapw_pseudopotentials .AND. use_onedft .AND. .NOT. dft_control%qs_control%gapw_xc .AND. &
IF (gapw_pseudopotentials .AND. use_gauxc_model .AND. .NOT. dft_control%qs_control%gapw_xc .AND. &
.NOT. gapw_paw_pseudopotentials .AND. para_env%mepos == 0 .AND. ASSOCIATED(scf_env)) THEN
IF (scf_env%iter_count == 1) THEN
CALL cp_warn( &
__LOCATION__, &
"GauXC OneDFT/SKALA with METHOD GAPW and GPW_TYPE pseudopotentials evaluates "// &
"GauXC Skala with METHOD GAPW and GPW_TYPE pseudopotentials evaluates "// &
"the XC term directly on the molecular AO/valence density; no GAPW one-center "// &
"XC correction is used for those regular-grid kinds.")
END IF
@ -1168,9 +1167,9 @@ CONTAINS
CALL cp_abort(__LOCATION__, &
"GAUXC%DEVICE_RUNTIME_FILL_FRACTION must be > 0 and <= 1.")
END IF
IF (onedft_atom_chunk_size < -1) THEN
IF (atom_chunk_size < -1) THEN
CALL cp_abort(__LOCATION__, &
"GAUXC%ONEDFT_ATOM_CHUNK_SIZE must be -1, zero, or positive.")
"GAUXC%MODEL_ATOM_CHUNK_SIZE must be -1, zero, or positive.")
END IF
IF (molecular_virial_debug) THEN
IF (molecular_virial_debug_dx <= 0.0_dp) THEN
@ -1192,16 +1191,16 @@ CONTAINS
END IF
END IF
END IF
IF (use_onedft) THEN
IF (use_gauxc_model) THEN
IF (has_nlcc(qs_kind_set)) THEN
CALL cp_abort(__LOCATION__, &
"GauXC OneDFT/SKALA with NLCC pseudopotentials is not implemented. "// &
"GauXC Skala with NLCC pseudopotentials is not implemented. "// &
"The frozen core density would need a SKALA-consistent feature definition.")
END IF
END IF
IF (use_onedft) THEN
CALL set_gauxc_onedft_atom_chunk_env( &
onedft_atom_chunk_size, onedft_atom_chunk_size_explicit)
IF (use_gauxc_model) THEN
CALL set_gauxc_model_atom_chunk_env( &
atom_chunk_size, atom_chunk_size_explicit)
IF (.NOT. grid_explicit) grid_type = "SUPERFINE"
IF (.NOT. pruning_explicit) pruning_scheme = "UNPRUNED"
@ -1213,7 +1212,7 @@ CONTAINS
(TRIM(grid_key) /= "SUPERFINE" .OR. TRIM(pruning_key) /= "UNPRUNED")) THEN
CALL cp_warn( &
__LOCATION__, &
"GauXC OneDFT/SKALA nuclear gradients are sensitive to the GauXC molecular grid. "// &
"GauXC Skala nuclear gradients are sensitive to the GauXC molecular grid. "// &
"Use GRID SUPERFINE and PRUNING_SCHEME UNPRUNED for quantitative force checks.")
END IF
IF (TRIM(model_key) == "SKALA") THEN
@ -1234,18 +1233,18 @@ CONTAINS
CALL cp_abort(__LOCATION__, "Unknown GAUXC%SKALA_RUNTIME value.")
END SELECT
IF (.NOT. use_skala_model) use_self_runtime = .FALSE.
SELECT CASE (TRIM(onedft_gradient_runtime_key))
SELECT CASE (TRIM(gradient_runtime_key))
CASE ("AUTO", "SELF")
use_gradient_mpi_runtime = .FALSE.
use_gradient_self_runtime = need_xc_gradient .AND. use_onedft .AND. &
use_gradient_self_runtime = need_xc_gradient .AND. use_gauxc_model .AND. &
para_env%num_pe > 1 .AND. .NOT. use_self_runtime
CASE ("MPI")
use_gradient_mpi_runtime = need_xc_gradient .AND. use_onedft .AND. para_env%num_pe > 1
use_gradient_mpi_runtime = need_xc_gradient .AND. use_gauxc_model .AND. para_env%num_pe > 1
use_gradient_self_runtime = .FALSE.
CASE DEFAULT
CALL cp_abort(__LOCATION__, "Unknown GAUXC%ONEDFT_GRADIENT_RUNTIME value.")
CALL cp_abort(__LOCATION__, "Unknown GAUXC%MODEL_GRADIENT_RUNTIME value.")
END SELECT
IF (.NOT. use_onedft) THEN
IF (.NOT. use_gauxc_model) THEN
use_gradient_mpi_runtime = .FALSE.
use_gradient_self_runtime = .FALSE.
END IF
@ -1344,7 +1343,7 @@ CONTAINS
CALL gauxc_check_status(gauxc_status)
IF (use_gradient_self_runtime) THEN
! Upstream GauXC does not yet support OneDFT/SKALA nuclear gradients
! Upstream GauXC does not yet support Skala nuclear gradients
! on an MPI runtime. Keep the energy/VXC path on the normal MPI
! runtime and use an isolated runtime only for the replicated gradient.
gauxc_gradient_grid_result = gauxc_create_grid( &

View file

@ -733,7 +733,7 @@ CONTAINS
#ifdef __GAUXC
CHARACTER(len=default_path_length) :: model_key
LOGICAL :: use_onedft
LOGICAL :: use_gauxc_model
#ifdef GAUXC_HAS_ONEDFT
REAL(c_double), ALLOCATABLE, DIMENSION(:, :) :: density_zeta_zero
#if defined (__HAS_IEEE_EXCEPTIONS)
@ -742,11 +742,11 @@ CONTAINS
INTEGER :: omp_max_threads_restore
#endif
use_onedft = .FALSE.
use_gauxc_model = .FALSE.
IF (PRESENT(model)) THEN
model_key = ADJUSTL(model)
CALL uppercase(model_key)
use_onedft = (TRIM(model_key) /= "" .AND. TRIM(model_key) /= "NONE")
use_gauxc_model = (TRIM(model_key) /= "" .AND. TRIM(model_key) /= "NONE")
END IF
IF (.NOT. ALLOCATED(res%vxc_scalar)) THEN
@ -756,11 +756,11 @@ CONTAINS
END IF
res%vxc_scalar = 0._dp
IF (use_onedft) THEN
IF (use_gauxc_model) THEN
#ifndef GAUXC_HAS_ONEDFT
CPABORT("GauXC lacks OneDFT support")
CPABORT("GauXC lacks Skala support")
#else
! OneDFT may change the OpenMP team size for later parallel regions.
! Skala may change the OpenMP team size for later parallel regions.
! Restore max threads only; omp_get_num_threads() is 1 here.
omp_max_threads_restore = omp_get_max_threads()
#if defined (__HAS_IEEE_EXCEPTIONS)
@ -811,7 +811,7 @@ CONTAINS
IF (nspins == 1) THEN
! xmat factor 2 is applied by both CP2K and GauXC
! "unapply" it here to even things back out.
! This is NOT necessary in the OneDFT branch.
! This is NOT necessary in the Skala branch.
density_scalar = 0.5_dp*density_scalar
CALL gauxc_integrator_eval_exc_vxc_rks( &
status%status, &
@ -882,7 +882,7 @@ CONTAINS
#ifdef __GAUXC
CHARACTER(len=default_path_length) :: model_key
LOGICAL :: use_onedft
LOGICAL :: use_gauxc_model
#ifdef GAUXC_HAS_ONEDFT
REAL(c_double), ALLOCATABLE, DIMENSION(:, :) :: density_zeta_zero
#if defined (__HAS_IEEE_EXCEPTIONS)
@ -894,18 +894,18 @@ CONTAINS
ALLOCATE (res%exc_grad(3*natom))
res%exc_grad = 0._dp
use_onedft = .FALSE.
use_gauxc_model = .FALSE.
IF (PRESENT(model)) THEN
model_key = ADJUSTL(model)
CALL uppercase(model_key)
use_onedft = (TRIM(model_key) /= "" .AND. TRIM(model_key) /= "NONE")
use_gauxc_model = (TRIM(model_key) /= "" .AND. TRIM(model_key) /= "NONE")
END IF
IF (use_onedft) THEN
IF (use_gauxc_model) THEN
#ifndef GAUXC_HAS_ONEDFT
CPABORT("GauXC lacks OneDFT support")
CPABORT("GauXC lacks Skala support")
#else
! OneDFT may change the OpenMP team size for later parallel regions.
! Skala may change the OpenMP team size for later parallel regions.
! Restore max threads only; omp_get_num_threads() is 1 here.
omp_max_threads_restore = omp_get_max_threads()
#if defined (__HAS_IEEE_EXCEPTIONS)

View file

@ -1,6 +1,6 @@
&GLOBAL
PRINT_LEVEL LOW
PROJECT_NAME H2_ONEDFT_PBE_FORCE_DEBUG
PROJECT_NAME H2_GAUXC_MODEL_PBE_FORCE_DEBUG
RUN_TYPE DEBUG
&END GLOBAL
@ -43,7 +43,7 @@
&GAUXC
GRID FINE
MODEL PBE
ONEDFT_GRADIENT_RUNTIME SELF
MODEL_GRADIENT_RUNTIME SELF
PERIODIC_REFERENCE T
PRUNING_SCHEME ROBUST
&END GAUXC

View file

@ -1,6 +1,6 @@
&GLOBAL
PRINT_LEVEL LOW
PROJECT_NAME NH3_ONEDFT_PBE_FORCE_DEBUG
PROJECT_NAME NH3_GAUXC_MODEL_PBE_FORCE_DEBUG
RUN_TYPE DEBUG
&END GLOBAL

View file

@ -1,2 +1,2 @@
"H2_ONEDFT_PBE_FORCE_DEBUG.inp" = [{matcher="DEBUG_force_sum", tol=5e-5, ref=0.0}]
"NH3_ONEDFT_PBE_FORCE_DEBUG.inp" = [{matcher="DEBUG_force_sum", tol=5e-5, ref=0.0}]
"H2_GAUXC_MODEL_PBE_FORCE_DEBUG.inp" = [{matcher="DEBUG_force_sum", tol=5e-5, ref=0.0}]
"NH3_GAUXC_MODEL_PBE_FORCE_DEBUG.inp" = [{matcher="DEBUG_force_sum", tol=5e-5, ref=0.0}]

View file

@ -1,6 +1,6 @@
&GLOBAL
PRINT_LEVEL LOW
PROJECT_NAME 1H2_ONEDFT_PBE
PROJECT_NAME 1H2_GAUXC_MODEL_PBE
RUN_TYPE ENERGY
&END GLOBAL

View file

@ -1,6 +1,6 @@
&GLOBAL
PRINT_LEVEL LOW
PROJECT_NAME NH3_ONEDFT_PBE
PROJECT_NAME NH3_GAUXC_MODEL_PBE
RUN_TYPE ENERGY
&END GLOBAL

View file

@ -1,6 +1,6 @@
&GLOBAL
PRINT_LEVEL LOW
PROJECT_NAME NH3_ONEDFT_PBE_REFERENCE
PROJECT_NAME NH3_GAUXC_MODEL_PBE_REFERENCE
RUN_TYPE ENERGY
&END GLOBAL

View file

@ -1,6 +1,6 @@
&GLOBAL
PRINT_LEVEL LOW
PROJECT_NAME OH_ONEDFT_PBE_UKS
PROJECT_NAME OH_GAUXC_MODEL_PBE_UKS
RUN_TYPE ENERGY
&END GLOBAL

View file

@ -1,7 +1,7 @@
"1H2_ONEDFT_PBE_REFERENCE.inp" = [{matcher="E_total", tol=1e-10, ref=-1.163125608332391}]
"1H2_GAUXC_MODEL_PBE_REFERENCE.inp" = [{matcher="E_total", tol=1e-10, ref=-1.163125608332391}]
"1H2_GAUXC_PBE.inp" = [{matcher="E_total", tol=1e-10, ref=-1.163121772046629}]
"1H2_ONEDFT_PBE.inp" = [{matcher="E_total", tol=1e-10, ref=-1.163121899608445}]
"NH3_ONEDFT_PBE_REFERENCE.inp" = [{matcher="E_total", tol=1e-9, ref=-11.722432805445091}]
"NH3_ONEDFT_PBE.inp" = [{matcher="E_total", tol=1e-9, ref=-11.722558568119791}]
"OH_ONEDFT_PBE_UKS.inp" = [{matcher="E_total", tol=5e-6, ref=-16.541584062034670}]
"1H2_GAUXC_MODEL_PBE.inp" = [{matcher="E_total", tol=1e-10, ref=-1.163121899608445}]
"NH3_GAUXC_MODEL_PBE_REFERENCE.inp" = [{matcher="E_total", tol=1e-9, ref=-11.722432805445091}]
"NH3_GAUXC_MODEL_PBE.inp" = [{matcher="E_total", tol=1e-9, ref=-11.722558568119791}]
"OH_GAUXC_MODEL_PBE_UKS.inp" = [{matcher="E_total", tol=5e-6, ref=-16.541584062034670}]
"CH4_DIMER_GAUXC_PBE_D3.inp" = [{matcher="M033", tol=1e-14, ref=-0.00355123783846}]

View file

@ -1,6 +1,6 @@
&GLOBAL
PRINT_LEVEL MEDIUM
PROJECT_NAME H2_ONEDFT_PBE_CDFT
PROJECT_NAME H2_GAUXC_MODEL_PBE_CDFT
RUN_TYPE ENERGY
&END GLOBAL

View file

@ -1,6 +1,6 @@
&GLOBAL
PRINT_LEVEL MEDIUM
PROJECT_NAME H2_ONEDFT_PBE_CDFT_CI_NGROUPS
PROJECT_NAME H2_GAUXC_MODEL_PBE_CDFT_CI_NGROUPS
RUN_TYPE ENERGY
&END GLOBAL

View file

@ -1,11 +1,11 @@
"H2_PBE_CDFT_REFERENCE.inp" = [{matcher="E_total", tol=1e-9, ref=-1.157232743213941},
{matcher="M071", tol=1e-8, ref=0.197625731046}]
"H2_ONEDFT_PBE_CDFT.inp" = [{matcher="E_total", tol=1e-9, ref=-1.157229554329094},
"H2_GAUXC_MODEL_PBE_CDFT.inp" = [{matcher="E_total", tol=1e-9, ref=-1.157229554329094},
{matcher="M071", tol=1e-8, ref=0.197624070585}]
"H2_SKALA_CDFT.inp" = [{matcher="M071", tol=1e-3, ref=0.216557647288}]
"H2_GAPW_SKALA_CDFT.inp" = [{matcher="M071", tol=1e-3, ref=0.217417757774}]
"H2_PBE_CDFT_CI_REFERENCE.inp" = [{matcher="M073", tol=1e-8, ref=345.364329058819},
{matcher="M077", tol=1e-8, ref=-1.16295181842678}]
"H2_ONEDFT_PBE_CDFT_CI_NGROUPS.inp" = [{matcher="M073", tol=1e-8, ref=345.325437357859},
"H2_GAUXC_MODEL_PBE_CDFT_CI_NGROUPS.inp" = [{matcher="M073", tol=1e-8, ref=345.325437357859},
{matcher="M077", tol=1e-8, ref=-1.16294823026735}]
"H2_SKALA_CDFT_CI.inp" = [{matcher="M077", tol=5e-8, ref=-1.39020335005227}]

View file

@ -35,7 +35,7 @@
&GAUXC
GRID FINE
MODEL SKALA
ONEDFT_ATOM_CHUNK_SIZE 1
MODEL_ATOM_CHUNK_SIZE 1
PERIODIC_REFERENCE T
PRUNING_SCHEME ROBUST
&END GAUXC

View file

@ -102,7 +102,7 @@ proprietary software packages, like e.g. MKL, these have to be installed separat
| elpa | [LGPL](https://gitlab.mpcdf.mpg.de/elpa/elpa/blob/master/LICENSE) | Yes |
| fftw | [GPL](http://www.fftw.org/doc/License-and-Copyright.html) | Yes |
| gcc | [GPL](https://gcc.gnu.org/git/?p=gcc.git;a=blob_plain;f=COPYING;hb=HEAD) | Yes |
| gauxc | [BSD 3-Clause](https://github.com/wavefunction91/GauXC/blob/master/LICENSE.txt) | Yes, with libtorch and Skala-1.1 model for OneDFT/SKALA support |
| gauxc | [BSD 3-Clause](https://github.com/wavefunction91/GauXC/blob/master/LICENSE.txt) | Yes, with libtorch and Skala-1.1 model for Skala support |
| gsl | [GPL](https://www.gnu.org/software/gsl/doc/html/gpl.html) | Yes |
| hdf5 | [BSD 3-Clause](https://support.hdfgroup.org/ftp/HDF5/releases/COPYING) | Yes |
| libint | [GPL](https://github.com/evaleev/libint/blob/master/LICENSE) | Yes |

View file

@ -256,7 +256,7 @@ Specific options of --with-PKG:
DFT (pure and hybrid functionals) calculations.
Default = install
--with-gauxc Enable GauXC for external exchange-correlation
integration. Installing GauXC with OneDFT/SKALA
integration. Installing GauXC with Skala
support also enables libtorch and installs Skala-1.1.
Default = no
--with-eigen Enable Eigen3; required by libint and SIRIUS.