LCOV - code coverage report
Current view: top level - src - exstates_types.F (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:6d276e9) Lines: 93.9 % 82 77
Test Date: 2026-09-10 07:29:18 Functions: 57.1 % 7 4

            Line data    Source code
       1              : !--------------------------------------------------------------------------------------------------!
       2              : !   CP2K: A general program to perform molecular dynamics simulations                              !
       3              : !   Copyright 2000-2026 CP2K developers group <https://cp2k.org>                                   !
       4              : !                                                                                                  !
       5              : !   SPDX-License-Identifier: GPL-2.0-or-later                                                      !
       6              : !--------------------------------------------------------------------------------------------------!
       7              : 
       8              : ! **************************************************************************************************
       9              : !> \brief Types for excited states potential energies
      10              : !> \par History
      11              : !>       2020.01 created
      12              : !> \author JGH
      13              : ! **************************************************************************************************
      14              : MODULE exstates_types
      15              :    USE cp_dbcsr_api,                    ONLY: dbcsr_p_type
      16              :    USE cp_dbcsr_operations,             ONLY: dbcsr_deallocate_matrix_set
      17              :    USE cp_fm_types,                     ONLY: cp_fm_release,&
      18              :                                               cp_fm_type
      19              :    USE input_section_types,             ONLY: section_vals_type,&
      20              :                                               section_vals_val_get
      21              :    USE kinds,                           ONLY: dp
      22              :    USE pw_types,                        ONLY: pw_r3d_rs_type
      23              :    USE qs_local_rho_types,              ONLY: local_rho_set_release,&
      24              :                                               local_rho_type
      25              : #include "./base/base_uses.f90"
      26              : 
      27              :    IMPLICIT NONE
      28              : 
      29              :    PRIVATE
      30              : 
      31              :    CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'exstates_types'
      32              : 
      33              :    PUBLIC :: excited_energy_type, exstate_release, exstate_create
      34              :    PUBLIC :: exstate_matrix_release, exstate_potential_release
      35              :    PUBLIC :: wfn_history_type
      36              : 
      37              : ! *****************************************************************************
      38              : 
      39              :    TYPE wfn_history_type
      40              :       INTEGER                                            :: state = -1
      41              :       REAL(KIND=dp)                                      :: evalue = 0.0_dp
      42              :       TYPE(cp_fm_type), POINTER, DIMENSION(:)            :: evect => NULL()
      43              :       TYPE(cp_fm_type), POINTER, DIMENSION(:)            :: cpmos => NULL()
      44              :       REAL(KIND=dp)                                      :: xsval = 0.0_dp, gsval = 0.0_dp, gsmin = 0.0_dp
      45              :    END TYPE wfn_history_type
      46              : 
      47              : ! *****************************************************************************
      48              : !> \brief Contains information on the excited states energy
      49              : !> \par History
      50              : !>       01.2020 created
      51              : !> \author JGH
      52              : ! *****************************************************************************
      53              :    TYPE excited_energy_type
      54              :       INTEGER                                            :: state = -1
      55              :       REAL(KIND=dp)                                      :: evalue = 0.0_dp
      56              :       LOGICAL                                            :: debug_forces = .FALSE.
      57              :       TYPE(cp_fm_type), POINTER, DIMENSION(:)            :: evect => NULL()
      58              :       TYPE(cp_fm_type), POINTER, DIMENSION(:)            :: cpmos => NULL()
      59              :       TYPE(dbcsr_p_type), DIMENSION(:), POINTER          :: matrix_pe => NULL()
      60              :       TYPE(dbcsr_p_type), DIMENSION(:), POINTER          :: matrix_hz => NULL()
      61              :       TYPE(dbcsr_p_type), DIMENSION(:), POINTER          :: matrix_pe_admm => NULL()
      62              :       TYPE(dbcsr_p_type), DIMENSION(:), POINTER          :: matrix_px1 => NULL()
      63              :       TYPE(dbcsr_p_type), DIMENSION(:), POINTER          :: matrix_px1_admm => NULL()
      64              :       TYPE(dbcsr_p_type), DIMENSION(:), POINTER          :: matrix_px1_asymm => NULL()
      65              :       TYPE(dbcsr_p_type), DIMENSION(:), POINTER          :: matrix_px1_admm_asymm => NULL()
      66              :       TYPE(dbcsr_p_type), DIMENSION(:), POINTER          :: matrix_wx1 => NULL()
      67              :       TYPE(pw_r3d_rs_type)                               :: vh_rspace = pw_r3d_rs_type()
      68              :       TYPE(pw_r3d_rs_type), DIMENSION(:), POINTER        :: vxc_rspace => NULL()
      69              :       TYPE(pw_r3d_rs_type), DIMENSION(:), POINTER        :: vtau_rspace => NULL()
      70              :       TYPE(pw_r3d_rs_type), DIMENSION(:), POINTER        :: vadmm_rspace => NULL()
      71              :       TYPE(pw_r3d_rs_type), DIMENSION(:), POINTER        :: vadmm_tau_rspace => NULL()
      72              :       TYPE(local_rho_type), POINTER                      :: local_rho_set => NULL()
      73              :       TYPE(local_rho_type), POINTER                      :: local_rho_set_admm => NULL()
      74              :       TYPE(wfn_history_type)                             :: wfn_history = wfn_history_type()
      75              :       TYPE(cp_fm_type), POINTER, DIMENSION(:, :)         :: bse_w_matrix_MO => NULL()
      76              :       TYPE(cp_fm_type), POINTER, DIMENSION(:, :)         :: bse_a_matrix_MO => NULL()
      77              :       REAL(kind=dp), ALLOCATABLE, DIMENSION(:)           :: gw_eigen
      78              :       TYPE(dbcsr_p_type), DIMENSION(:), POINTER          :: matrix_ks => NULL()
      79              :    END TYPE excited_energy_type
      80              : 
      81              : CONTAINS
      82              : 
      83              : ! **************************************************************************************************
      84              : !> \brief ...
      85              : !> \param ex_env ...
      86              : ! **************************************************************************************************
      87         9060 :    SUBROUTINE exstate_release(ex_env)
      88              :       TYPE(excited_energy_type), POINTER                 :: ex_env
      89              : 
      90         9060 :       IF (ASSOCIATED(ex_env)) THEN
      91              : 
      92         9060 :          CALL cp_fm_release(ex_env%evect)
      93         9060 :          CALL cp_fm_release(ex_env%cpmos)
      94              :          !
      95         9060 :          CALL cp_fm_release(ex_env%bse_w_matrix_MO)
      96         9060 :          CALL cp_fm_release(ex_env%bse_a_matrix_MO)
      97              :          !
      98         9060 :          CALL exstate_matrix_release(ex_env)
      99              :          !
     100         9060 :          CALL exstate_potential_release(ex_env)
     101              :          !
     102         9060 :          CALL cp_fm_release(ex_env%wfn_history%evect)
     103         9060 :          CALL cp_fm_release(ex_env%wfn_history%cpmos)
     104              : 
     105         9060 :          IF (ALLOCATED(ex_env%gw_eigen)) THEN
     106            4 :             DEALLOCATE (ex_env%gw_eigen)
     107              :          END IF
     108              : 
     109         9060 :          DEALLOCATE (ex_env)
     110              : 
     111              :       END IF
     112              : 
     113         9060 :    END SUBROUTINE exstate_release
     114              : 
     115              : ! **************************************************************************************************
     116              : !> \brief ...
     117              : !> \param ex_env ...
     118              : ! **************************************************************************************************
     119         9060 :    SUBROUTINE exstate_matrix_release(ex_env)
     120              :       TYPE(excited_energy_type), POINTER                 :: ex_env
     121              : 
     122         9060 :       IF (ASSOCIATED(ex_env)) THEN
     123         9060 :          IF (ASSOCIATED(ex_env%matrix_ks)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_ks)
     124         9060 :          NULLIFY (ex_env%matrix_ks)
     125         9060 :          IF (ASSOCIATED(ex_env%matrix_pe)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_pe)
     126         9060 :          NULLIFY (ex_env%matrix_pe)
     127         9060 :          IF (ASSOCIATED(ex_env%matrix_hz)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_hz)
     128         9060 :          NULLIFY (ex_env%matrix_hz)
     129         9060 :          IF (ASSOCIATED(ex_env%matrix_pe_admm)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_pe_admm)
     130         9060 :          NULLIFY (ex_env%matrix_pe_admm)
     131         9060 :          IF (ASSOCIATED(ex_env%matrix_px1)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_px1)
     132         9060 :          NULLIFY (ex_env%matrix_px1)
     133         9060 :          IF (ASSOCIATED(ex_env%matrix_px1_admm)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_px1_admm)
     134         9060 :          NULLIFY (ex_env%matrix_px1_admm)
     135         9060 :          IF (ASSOCIATED(ex_env%matrix_px1_asymm)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_px1_asymm)
     136         9060 :          NULLIFY (ex_env%matrix_px1_asymm)
     137         9060 :          IF (ASSOCIATED(ex_env%matrix_px1_admm_asymm)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_px1_admm_asymm)
     138         9060 :          NULLIFY (ex_env%matrix_px1_admm_asymm)
     139         9060 :          IF (ASSOCIATED(ex_env%matrix_wx1)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_wx1)
     140         9060 :          NULLIFY (ex_env%matrix_wx1)
     141              :       END IF
     142              : 
     143         9060 :    END SUBROUTINE exstate_matrix_release
     144              : 
     145              : ! **************************************************************************************************
     146              : !> \brief ...
     147              : !> \param ex_env ...
     148              : ! **************************************************************************************************
     149         9736 :    SUBROUTINE exstate_potential_release(ex_env)
     150              :       TYPE(excited_energy_type), POINTER                 :: ex_env
     151              : 
     152              :       INTEGER                                            :: iab
     153              : 
     154         9736 :       IF (ASSOCIATED(ex_env)) THEN
     155         9736 :          IF (ASSOCIATED(ex_env%vh_rspace%pw_grid)) THEN
     156          676 :             CALL ex_env%vh_rspace%release()
     157              :          END IF
     158         9736 :          IF (ASSOCIATED(ex_env%vxc_rspace)) THEN
     159         1480 :             DO iab = 1, SIZE(ex_env%vxc_rspace)
     160         1480 :                CALL ex_env%vxc_rspace(iab)%release()
     161              :             END DO
     162          676 :             DEALLOCATE (ex_env%vxc_rspace)
     163          676 :             NULLIFY (ex_env%vxc_rspace)
     164              :          END IF
     165         9736 :          IF (ASSOCIATED(ex_env%vtau_rspace)) THEN
     166           36 :             DO iab = 1, SIZE(ex_env%vtau_rspace)
     167           36 :                CALL ex_env%vtau_rspace(iab)%release()
     168              :             END DO
     169           14 :             DEALLOCATE (ex_env%vtau_rspace)
     170           14 :             NULLIFY (ex_env%vtau_rspace)
     171              :          END IF
     172         9736 :          IF (ASSOCIATED(ex_env%vadmm_rspace)) THEN
     173          180 :             DO iab = 1, SIZE(ex_env%vadmm_rspace)
     174          180 :                CALL ex_env%vadmm_rspace(iab)%release()
     175              :             END DO
     176           86 :             DEALLOCATE (ex_env%vadmm_rspace)
     177           86 :             NULLIFY (ex_env%vadmm_rspace)
     178              :          END IF
     179         9736 :          IF (ASSOCIATED(ex_env%vadmm_tau_rspace)) THEN
     180            0 :             DO iab = 1, SIZE(ex_env%vadmm_tau_rspace)
     181            0 :                CALL ex_env%vadmm_tau_rspace(iab)%release()
     182              :             END DO
     183            0 :             DEALLOCATE (ex_env%vadmm_tau_rspace)
     184            0 :             NULLIFY (ex_env%vadmm_tau_rspace)
     185              :          END IF
     186         9736 :          IF (ASSOCIATED(ex_env%local_rho_set)) THEN
     187          156 :             CALL local_rho_set_release(ex_env%local_rho_set)
     188          156 :             NULLIFY (ex_env%local_rho_set)
     189              :          END IF
     190         9736 :          IF (ASSOCIATED(ex_env%local_rho_set_admm)) THEN
     191           24 :             CALL local_rho_set_release(ex_env%local_rho_set_admm)
     192           24 :             NULLIFY (ex_env%local_rho_set_admm)
     193              :          END IF
     194              :       END IF
     195              : 
     196         9736 :    END SUBROUTINE exstate_potential_release
     197              : 
     198              : ! **************************************************************************************************
     199              : !> \brief Allocates and intitializes exstate_env
     200              : !> \param ex_env the object to create
     201              : !> \param excited_state ...
     202              : !> \param dft_section ...
     203              : !> \par History
     204              : !>       2020.01 created
     205              : !> \author JGH
     206              : ! **************************************************************************************************
     207         9060 :    SUBROUTINE exstate_create(ex_env, excited_state, dft_section)
     208              :       TYPE(excited_energy_type), POINTER                 :: ex_env
     209              :       LOGICAL, INTENT(IN)                                :: excited_state
     210              :       TYPE(section_vals_type), POINTER                   :: dft_section
     211              : 
     212         9060 :       CPASSERT(.NOT. ASSOCIATED(ex_env))
     213         9060 :       ALLOCATE (ex_env)
     214              :       ex_env%evalue = 0.0_dp
     215              :       NULLIFY (ex_env%evect)
     216              :       NULLIFY (ex_env%cpmos)
     217              :       NULLIFY (ex_env%bse_w_matrix_MO)
     218              :       NULLIFY (ex_env%bse_a_matrix_MO)
     219         9060 :       IF (excited_state) THEN
     220          458 :          CALL section_vals_val_get(dft_section, "EXCITED_STATES%STATE", i_val=ex_env%state)
     221              :          CALL section_vals_val_get(dft_section, "EXCITED_STATES%DEBUG_FORCES", &
     222          458 :                                    l_val=ex_env%debug_forces)
     223              :       ELSE
     224         8602 :          ex_env%state = 0
     225              :       END IF
     226         9060 :       ex_env%wfn_history%evalue = 0.0_dp
     227         9060 :       ex_env%wfn_history%state = ex_env%state
     228         9060 :       ex_env%wfn_history%xsval = 1.0_dp
     229         9060 :       ex_env%wfn_history%gsval = 1.0_dp
     230         9060 :       ex_env%wfn_history%gsmin = 1.0_dp
     231         9060 :       NULLIFY (ex_env%wfn_history%cpmos)
     232         9060 :       NULLIFY (ex_env%wfn_history%evect)
     233              : 
     234         9060 :    END SUBROUTINE exstate_create
     235              : 
     236            0 : END MODULE exstates_types
        

Generated by: LCOV version 2.0-1