LCOV - code coverage report
Current view: top level - src - qs_p_env_types.F (source / functions) Hit Total Coverage
Test: CP2K Regtests (git:e7e05ae) Lines: 35 36 97.2 %
Date: 2024-04-18 06:59:28 Functions: 1 2 50.0 %

          Line data    Source code
       1             : !--------------------------------------------------------------------------------------------------!
       2             : !   CP2K: A general program to perform molecular dynamics simulations                              !
       3             : !   Copyright 2000-2024 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_operations,             ONLY: dbcsr_deallocate_matrix_set
      16             :    USE cp_fm_types,                     ONLY: cp_fm_release,&
      17             :                                               cp_fm_type
      18             :    USE dbcsr_api,                       ONLY: dbcsr_p_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
      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, & ! no of molecular orbitals
      74             :                                                                       n_ao ! 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
      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        1626 :    SUBROUTINE p_env_release(p_env)
      99             : 
     100             :       TYPE(qs_p_env_type)                                :: p_env
     101             : 
     102             :       INTEGER                                            :: ip
     103             : 
     104        1626 :       IF (ASSOCIATED(p_env%kpp1_env)) THEN
     105        1626 :          CALL kpp1_release(p_env%kpp1_env)
     106        1626 :          DEALLOCATE (p_env%kpp1_env)
     107             :          NULLIFY (p_env%kpp1_env)
     108             :       END IF
     109        1626 :       CALL cp_fm_release(p_env%S_psi0)
     110        1626 :       CALL cp_fm_release(p_env%m_epsilon)
     111        1626 :       CALL cp_fm_release(p_env%psi0d)
     112        1626 :       CALL cp_fm_release(p_env%Smo_inv)
     113        1626 :       IF (ASSOCIATED(p_env%rho1_xc)) THEN
     114        1626 :          CALL qs_rho_release(p_env%rho1_xc)
     115        1626 :          DEALLOCATE (p_env%rho1_xc)
     116             :       END IF
     117        1626 :       IF (ASSOCIATED(p_env%rho1)) THEN
     118        1626 :          CALL qs_rho_release(p_env%rho1)
     119        1626 :          DEALLOCATE (p_env%rho1)
     120             :       END IF
     121        1626 :       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        1626 :       IF (ASSOCIATED(p_env%kpp1)) CALL dbcsr_deallocate_matrix_set(p_env%kpp1)
     126        1626 :       IF (ASSOCIATED(p_env%kpp1_admm)) CALL dbcsr_deallocate_matrix_set(p_env%kpp1_admm)
     127        1626 :       IF (ASSOCIATED(p_env%p1)) CALL dbcsr_deallocate_matrix_set(p_env%p1)
     128        1626 :       IF (ASSOCIATED(p_env%w1)) CALL dbcsr_deallocate_matrix_set(p_env%w1)
     129        1626 :       IF (ASSOCIATED(p_env%p1_admm)) CALL dbcsr_deallocate_matrix_set(p_env%p1_admm)
     130        1626 :       IF (ASSOCIATED(p_env%local_rho_set)) THEN
     131         218 :          CALL local_rho_set_release(p_env%local_rho_set)
     132             :       END IF
     133        1626 :       IF (ASSOCIATED(p_env%hartree_local)) THEN
     134         190 :          CALL hartree_local_release(p_env%hartree_local)
     135             :       END IF
     136        1626 :       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        1626 :       IF (ASSOCIATED(p_env%PS_psi0)) THEN
     140        1610 :          CALL cp_fm_release(p_env%PS_psi0)
     141             :       END IF
     142        1626 :       IF (ASSOCIATED(p_env%preconditioner)) THEN
     143        3498 :          DO ip = 1, SIZE(p_env%preconditioner, 1)
     144        3498 :             CALL destroy_preconditioner(p_env%preconditioner(ip))
     145             :          END DO
     146        1610 :          DEALLOCATE (p_env%preconditioner)
     147             :       END IF
     148        1626 :    END SUBROUTINE p_env_release
     149             : 
     150           0 : END MODULE qs_p_env_types

Generated by: LCOV version 1.15