1!--------------------------------------------------------------------------------------------------! 2! CP2K: A general program to perform molecular dynamics simulations ! 3! Copyright (C) 2000 - 2019 CP2K developers group ! 4!--------------------------------------------------------------------------------------------------! 5 6! ************************************************************************************************** 7!> \par History 8!> 05.2004 [tlaino] 9!> \author Teodoro Laino 10! ************************************************************************************************** 11MODULE qs_ks_qmmm_types 12 USE cp_dbcsr_operations, ONLY: dbcsr_deallocate_matrix_set 13 USE cube_utils, ONLY: cube_info_type,& 14 destroy_cube_info 15 USE dbcsr_api, ONLY: dbcsr_p_type 16 USE kinds, ONLY: dp 17 USE pw_env_types, ONLY: pw_env_get,& 18 pw_env_release,& 19 pw_env_type 20 USE pw_pool_types, ONLY: pw_pool_give_back_pw,& 21 pw_pool_type 22 USE pw_types, ONLY: pw_p_type 23#include "./base/base_uses.f90" 24 25 IMPLICIT NONE 26 PRIVATE 27 28 LOGICAL, PRIVATE, PARAMETER :: debug_this_module = .TRUE. 29 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_ks_qmmm_types' 30 31 PUBLIC :: qs_ks_qmmm_env_type 32 PUBLIC :: qs_ks_qmmm_release, qs_ks_qmmm_retain 33 34! ************************************************************************************************** 35!> \brief calculation environment to calculate the ks_qmmm matrix, 36!> holds the QM/MM potential and all the needed variables to 37!> compute the QM/MM electrostatic 1-electron ks matrix 38!> assumes that the core hamiltonian and energy are up to date. 39!> v_metal_rspace is the potential at the metal sites within the image 40!> charge approach 41!> \par History 42!> 05.2004 created [tlaino] 43!> 01.2012 added v_metal_rspace [dgolze] 44!> \author Teodoro Laino 45! ************************************************************************************************** 46 TYPE qs_ks_qmmm_env_type 47 INTEGER :: n_evals, & 48 id_nr, ref_count 49 REAL(KIND=dp) :: pc_ener 50 TYPE(pw_env_type), POINTER :: pw_env 51 TYPE(pw_p_type) :: v_qmmm_rspace 52 TYPE(pw_p_type) :: v_metal_rspace 53 TYPE(cube_info_type), DIMENSION(:), POINTER :: cube_info 54 TYPE(dbcsr_p_type), DIMENSION(:), & 55 POINTER :: matrix_h 56 END TYPE qs_ks_qmmm_env_type 57 58! ************************************************************************************************** 59!> \brief type to build arrays of pointers 60!> \param ks_env the ks_env pointer 61!> \par History 62!> 05.2004 [tlaino] 63!> \author Teodoro Laino 64! ************************************************************************************************** 65 TYPE qs_ks_qmmm_env_p_type 66 TYPE(qs_ks_qmmm_env_type), POINTER :: ks_env 67 END TYPE qs_ks_qmmm_env_p_type 68CONTAINS 69 70! ************************************************************************************************** 71!> \brief releases the ks_qmmm_env (see doc/ReferenceCounting.html) 72!> \param ks_qmmm_env the ks_qmmm_env to be released 73!> \par History 74!> 05.2004 created [tlaino] 75!> \author Teodoro Laino 76! ************************************************************************************************** 77 SUBROUTINE qs_ks_qmmm_release(ks_qmmm_env) 78 TYPE(qs_ks_qmmm_env_type), POINTER :: ks_qmmm_env 79 80 CHARACTER(len=*), PARAMETER :: routineN = 'qs_ks_qmmm_release', & 81 routineP = moduleN//':'//routineN 82 83 INTEGER :: i 84 TYPE(pw_pool_type), POINTER :: pool 85 86 IF (ASSOCIATED(ks_qmmm_env)) THEN 87 CPASSERT(ks_qmmm_env%ref_count > 0) 88 ks_qmmm_env%ref_count = ks_qmmm_env%ref_count - 1 89 90 IF (ks_qmmm_env%ref_count < 1) THEN 91 CALL pw_env_get(ks_qmmm_env%pw_env, auxbas_pw_pool=pool) 92 CALL pw_pool_give_back_pw(pool, ks_qmmm_env%v_qmmm_rspace%pw) 93 CALL pw_env_release(ks_qmmm_env%pw_env) 94 IF (ASSOCIATED(ks_qmmm_env%cube_info)) THEN 95 DO i = 1, SIZE(ks_qmmm_env%cube_info) 96 CALL destroy_cube_info(ks_qmmm_env%cube_info(i)) 97 END DO 98 DEALLOCATE (ks_qmmm_env%cube_info) 99 END IF 100 IF (ASSOCIATED(ks_qmmm_env%matrix_h)) THEN 101 CALL dbcsr_deallocate_matrix_set(ks_qmmm_env%matrix_h) 102 END IF 103 DEALLOCATE (ks_qmmm_env) 104 END IF 105 END IF 106 NULLIFY (ks_qmmm_env) 107 END SUBROUTINE qs_ks_qmmm_release 108 109! ************************************************************************************************** 110!> \brief retains the given ks_environment 111!> \param ks_qmmm_env the KohnSham QM/MM environment to retain 112!> \par History 113!> 05.2004 created [tlaino] 114!> \author Teodoro Laino 115! ************************************************************************************************** 116 SUBROUTINE qs_ks_qmmm_retain(ks_qmmm_env) 117 TYPE(qs_ks_qmmm_env_type), POINTER :: ks_qmmm_env 118 119 CHARACTER(len=*), PARAMETER :: routineN = 'qs_ks_qmmm_retain', & 120 routineP = moduleN//':'//routineN 121 122 CPASSERT(ASSOCIATED(ks_qmmm_env)) 123 CPASSERT(ks_qmmm_env%ref_count > 0) 124 ks_qmmm_env%ref_count = ks_qmmm_env%ref_count + 1 125 END SUBROUTINE qs_ks_qmmm_retain 126 127END MODULE qs_ks_qmmm_types 128