LCOV - code coverage report
Current view: top level - src - qs_p_env_types.F (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:42dac4a) Lines: 97.2 % 36 35
Test Date: 2025-07-25 12:55:17 Functions: 50.0 % 2 1

            Line data    Source code
       1              : !--------------------------------------------------------------------------------------------------!
       2              : !   CP2K: A general program to perform molecular dynamics simulations                              !
       3              : !   Copyright 2000-2025 CP2K developers group <https://cp2k.org>                                   !
       4              : !                                                                                                  !
       5              : !   SPDX-License-Identifier: GPL-2.0-or-later                                                      !
       6              : !--------------------------------------------------------------------------------------------------!
       7              : 
       8              : ! **************************************************************************************************
       9              : !> \brief basis types for the calculation of the perturbation of density theory.
      10              : !> \par History
      11              : !>      4.2002 created [fawzi]
      12              : !> \author Fawzi Mohamed
      13              : ! **************************************************************************************************
      14              : MODULE qs_p_env_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 hartree_local_types,             ONLY: hartree_local_release,&
      20              :                                               hartree_local_type
      21              :    USE preconditioner_types,            ONLY: destroy_preconditioner,&
      22              :                                               preconditioner_type
      23              :    USE qs_kpp1_env_types,               ONLY: kpp1_release,&
      24              :                                               qs_kpp1_env_type
      25              :    USE qs_local_rho_types,              ONLY: local_rho_set_release,&
      26              :                                               local_rho_type
      27              :    USE qs_rho_types,                    ONLY: qs_rho_release,&
      28              :                                               qs_rho_type
      29              : #include "./base/base_uses.f90"
      30              : 
      31              :    IMPLICIT NONE
      32              :    PRIVATE
      33              :    PUBLIC :: qs_p_env_type
      34              :    PUBLIC :: p_env_release
      35              : 
      36              :    LOGICAL, PRIVATE, PARAMETER :: debug_this_module = .TRUE.
      37              :    CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_p_env_types'
      38              : 
      39              : ! **************************************************************************************************
      40              : !> \brief Represent a qs system that is perturbed.
      41              : !>      Can calculate the linear operator and the rhs of the system
      42              : !>      of equations that needs to be solved for the perturbation.
      43              : !> \param orthogonal_orbitals if the orbitals are orthogonal
      44              : !> \param kpp 1: the kpp1 matrix (make it temporary?)
      45              : !> \param kpp1_admm: collects the parts in auxiliary basis, they have to be added to kpp1 later
      46              : !> \param m_epsilon minus epsilon: -<psi0d|H_rho|psi0d>
      47              : !> \param psi 0d: the dual basis of psi0: psi0 (psi0^T S psi0)^-1
      48              : !> \param S_psi 0: S times psi0, cached for performance reasons
      49              : !> \param Smo_inv inverse of the mo overlap: (psi0^T S psi0)^-1
      50              : !> \param rho 1: the density rho1
      51              : !> \param rho 1: the soft density rho1 for gapw_xc
      52              : !> \param rho 1_admm: density rho1 in auxiliary basis (for ADMM)
      53              : !> \param n_mo cached number of mo: n_mo(i)=qs_env%c(i)%nmo
      54              : !> \param n_ao cached number of ao: n_ao(i)=qs_env%c(i)%nao
      55              : !> \note
      56              : !>      for the moment no smearing of the orbitals.
      57              : ! **************************************************************************************************
      58              :    TYPE qs_p_env_type
      59              :       LOGICAL                                                      :: orthogonal_orbitals = .FALSE.
      60              :       TYPE(qs_kpp1_env_type), POINTER                              :: kpp1_env => NULL()
      61              :       TYPE(dbcsr_p_type), DIMENSION(:), POINTER                    :: kpp1 => NULL()
      62              :       TYPE(dbcsr_p_type), DIMENSION(:), POINTER                    :: kpp1_admm => NULL()
      63              :       TYPE(dbcsr_p_type), DIMENSION(:), POINTER                    :: p1 => NULL()
      64              :       TYPE(dbcsr_p_type), DIMENSION(:), POINTER                    :: p1_admm => NULL()
      65              :       TYPE(dbcsr_p_type), DIMENSION(:), POINTER                    :: w1 => NULL()
      66              :       TYPE(cp_fm_type), DIMENSION(:), POINTER                    :: m_epsilon => NULL()
      67              :       TYPE(cp_fm_type), DIMENSION(:), POINTER                    :: psi0d => NULL()
      68              :       TYPE(cp_fm_type), DIMENSION(:), POINTER                    :: S_psi0 => NULL()
      69              :       TYPE(cp_fm_type), DIMENSION(:), POINTER                    :: Smo_inv => NULL()
      70              :       TYPE(qs_rho_type), POINTER :: rho1 => NULL()
      71              :       TYPE(qs_rho_type), POINTER :: rho1_xc => NULL()
      72              :       TYPE(qs_rho_type), POINTER :: rho1_admm => NULL()
      73              :       INTEGER, DIMENSION(2)                                        :: n_mo = -1, & ! no of molecular orbitals
      74              :                                                                       n_ao = -1 ! no of basis functions
      75              :       ! GAPW stuff
      76              :       TYPE(hartree_local_type), POINTER                            :: hartree_local => NULL()
      77              :       TYPE(local_rho_type), POINTER                                :: local_rho_set => NULL()
      78              :       TYPE(local_rho_type), POINTER                                :: local_rho_set_admm => NULL()
      79              : 
      80              :       ! Linear Response Modules
      81              :       TYPE(cp_fm_type), DIMENSION(:), POINTER                    :: PS_psi0 => NULL()
      82              : 
      83              :       ! preconditioner matrix should be symmetric and positive definite
      84              :       LOGICAL                                                      :: new_preconditioner = .FALSE.
      85              :       TYPE(preconditioner_type), DIMENSION(:), POINTER             :: preconditioner => NULL()
      86              : 
      87              :    END TYPE qs_p_env_type
      88              : 
      89              : CONTAINS
      90              : 
      91              : ! **************************************************************************************************
      92              : !> \brief relases the given p_env (see doc/ReferenceCounting.html)
      93              : !> \param p_env the environment to release
      94              : !> \par History
      95              : !>      07.2002 created [fawzi]
      96              : !> \author Fawzi Mohamed
      97              : ! **************************************************************************************************
      98         1644 :    SUBROUTINE p_env_release(p_env)
      99              : 
     100              :       TYPE(qs_p_env_type)                                :: p_env
     101              : 
     102              :       INTEGER                                            :: ip
     103              : 
     104         1644 :       IF (ASSOCIATED(p_env%kpp1_env)) THEN
     105         1644 :          CALL kpp1_release(p_env%kpp1_env)
     106         1644 :          DEALLOCATE (p_env%kpp1_env)
     107              :          NULLIFY (p_env%kpp1_env)
     108              :       END IF
     109         1644 :       CALL cp_fm_release(p_env%S_psi0)
     110         1644 :       CALL cp_fm_release(p_env%m_epsilon)
     111         1644 :       CALL cp_fm_release(p_env%psi0d)
     112         1644 :       CALL cp_fm_release(p_env%Smo_inv)
     113         1644 :       IF (ASSOCIATED(p_env%rho1_xc)) THEN
     114         1644 :          CALL qs_rho_release(p_env%rho1_xc)
     115         1644 :          DEALLOCATE (p_env%rho1_xc)
     116              :       END IF
     117         1644 :       IF (ASSOCIATED(p_env%rho1)) THEN
     118         1644 :          CALL qs_rho_release(p_env%rho1)
     119         1644 :          DEALLOCATE (p_env%rho1)
     120              :       END IF
     121         1644 :       IF (ASSOCIATED(p_env%rho1_admm)) THEN
     122          194 :          CALL qs_rho_release(p_env%rho1_admm)
     123          194 :          DEALLOCATE (p_env%rho1_admm)
     124              :       END IF
     125         1644 :       IF (ASSOCIATED(p_env%kpp1)) CALL dbcsr_deallocate_matrix_set(p_env%kpp1)
     126         1644 :       IF (ASSOCIATED(p_env%kpp1_admm)) CALL dbcsr_deallocate_matrix_set(p_env%kpp1_admm)
     127         1644 :       IF (ASSOCIATED(p_env%p1)) CALL dbcsr_deallocate_matrix_set(p_env%p1)
     128         1644 :       IF (ASSOCIATED(p_env%w1)) CALL dbcsr_deallocate_matrix_set(p_env%w1)
     129         1644 :       IF (ASSOCIATED(p_env%p1_admm)) CALL dbcsr_deallocate_matrix_set(p_env%p1_admm)
     130         1644 :       IF (ASSOCIATED(p_env%local_rho_set)) THEN
     131          220 :          CALL local_rho_set_release(p_env%local_rho_set)
     132              :       END IF
     133         1644 :       IF (ASSOCIATED(p_env%hartree_local)) THEN
     134          192 :          CALL hartree_local_release(p_env%hartree_local)
     135              :       END IF
     136         1644 :       IF (ASSOCIATED(p_env%local_rho_set_admm)) THEN
     137           28 :          CALL local_rho_set_release(p_env%local_rho_set_admm)
     138              :       END IF
     139         1644 :       IF (ASSOCIATED(p_env%PS_psi0)) THEN
     140         1640 :          CALL cp_fm_release(p_env%PS_psi0)
     141              :       END IF
     142         1644 :       IF (ASSOCIATED(p_env%preconditioner)) THEN
     143         3562 :          DO ip = 1, SIZE(p_env%preconditioner, 1)
     144         3562 :             CALL destroy_preconditioner(p_env%preconditioner(ip))
     145              :          END DO
     146         1640 :          DEALLOCATE (p_env%preconditioner)
     147              :       END IF
     148         1644 :    END SUBROUTINE p_env_release
     149              : 
     150            0 : END MODULE qs_p_env_types
        

Generated by: LCOV version 2.0-1