From 62f158b7e855768419844cfcd39c09df7d5e9402 Mon Sep 17 00:00:00 2001 From: AI Agent Date: Thu, 16 Jul 2026 15:52:13 +0200 Subject: [PATCH] make gauxc_cache a POINTER in qs_environment_type and allocate on first use --- src/qs_environment_types.F | 33 ++++++++++++++++++++------------- src/xc/xc_gauxc_functional.F | 7 ++++--- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/src/qs_environment_types.F b/src/qs_environment_types.F index 68fb602d1c..d8a5251d80 100644 --- a/src/qs_environment_types.F +++ b/src/qs_environment_types.F @@ -324,7 +324,7 @@ MODULE qs_environment_types TYPE(mo_set_type), DIMENSION(:), POINTER :: mos_last_converged => NULL() ! tblite TYPE(tblite_type), POINTER :: tb_tblite => Null() - TYPE(cp_gauxc_cache_type) :: gauxc_cache + TYPE(cp_gauxc_cache_type), POINTER :: gauxc_cache => NULL() END TYPE qs_environment_type CONTAINS @@ -1010,9 +1010,10 @@ CONTAINS IF (.NOT. ASSOCIATED(qs_env%molecular_scf_guess_env)) ALLOCATE (qs_env%molecular_scf_guess_env) - NULLIFY (qs_env%tb_tblite) + NULLIFY (qs_env%tb_tblite) + NULLIFY (qs_env%gauxc_cache) - END SUBROUTINE init_qs_env + END SUBROUTINE init_qs_env ! ************************************************************************************************** !> \brief Set the QUICKSTEP environment. @@ -1688,13 +1689,16 @@ CONTAINS IF (ASSOCIATED(qs_env%rhs)) DEALLOCATE (qs_env%rhs) ! tblite - IF (ASSOCIATED(qs_env%tb_tblite)) THEN - CALL deallocate_tblite_type(qs_env%tb_tblite) - END IF + IF (ASSOCIATED(qs_env%tb_tblite)) THEN + CALL deallocate_tblite_type(qs_env%tb_tblite) + END IF - CALL gauxc_cache_release(qs_env%gauxc_cache) + IF (ASSOCIATED(qs_env%gauxc_cache)) THEN + CALL gauxc_cache_release(qs_env%gauxc_cache) + DEALLOCATE (qs_env%gauxc_cache) + END IF - END SUBROUTINE qs_env_release + END SUBROUTINE qs_env_release ! ************************************************************************************************** !> \brief releases part of the given qs_env in order to save memory @@ -1916,12 +1920,15 @@ CONTAINS IF (ASSOCIATED(qs_env%rhs)) DEALLOCATE (qs_env%rhs) ! tblite - IF (ASSOCIATED(qs_env%tb_tblite)) THEN - CALL deallocate_tblite_type(qs_env%tb_tblite) - END IF + IF (ASSOCIATED(qs_env%tb_tblite)) THEN + CALL deallocate_tblite_type(qs_env%tb_tblite) + END IF - CALL gauxc_cache_release(qs_env%gauxc_cache) + IF (ASSOCIATED(qs_env%gauxc_cache)) THEN + CALL gauxc_cache_release(qs_env%gauxc_cache) + DEALLOCATE (qs_env%gauxc_cache) + END IF - END SUBROUTINE qs_env_part_release + END SUBROUTINE qs_env_part_release END MODULE qs_environment_types diff --git a/src/xc/xc_gauxc_functional.F b/src/xc/xc_gauxc_functional.F index 50adf633b9..8215ac60a7 100644 --- a/src/xc/xc_gauxc_functional.F +++ b/src/xc/xc_gauxc_functional.F @@ -1264,10 +1264,11 @@ CONTAINS END IF END IF - ! After creating the basisset, we will have to check max_l>3 as a further condition - params%use_fd_gradient = gapw_method .AND. need_xc_gradient + ! After creating the basisset, we will have to check max_l>3 as a further condition + params%use_fd_gradient = gapw_method .AND. need_xc_gradient - cache => qs_env%gauxc_cache + IF (.NOT. ASSOCIATED(qs_env%gauxc_cache)) ALLOCATE (qs_env%gauxc_cache) + cache => qs_env%gauxc_cache CALL gauxc_cache_init( & cache, & params, &