(git:374b731)
Loading...
Searching...
No Matches
dielectric_types.F
Go to the documentation of this file.
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 dielectric constant data type
10!> \par History
11!> 06.2014 created [Hossein Bani-Hashemian]
12!> \author Mohammad Hossein Bani-Hashemian
13! **************************************************************************************************
15
16 USE kinds, ONLY: dp
18 USE pw_types, ONLY: pw_r3d_rs_type
19#include "../base/base_uses.f90"
20
21 IMPLICIT NONE
22
23 PRIVATE
24
25 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dielectric_types'
26
27 INTEGER, PARAMETER, PUBLIC :: derivative_cd3 = 1, &
28 derivative_cd5 = 2, &
29 derivative_cd7 = 3, &
30 derivative_fft = 100, &
33
34 INTEGER, PARAMETER, PUBLIC :: rho_dependent = 10, &
37
39 LOGICAL :: dielec_core_correction = .false.
40 INTEGER :: dielec_functiontype = rho_dependent
41 REAL(kind=dp) :: eps0 = 0.0_dp
42 REAL(kind=dp) :: rho_min = 0.0_dp
43 REAL(kind=dp) :: rho_max = 0.0_dp
44 INTEGER :: derivative_method = derivative_cd3
45 INTEGER :: times_called = 0
46
47 INTEGER :: n_aa_cuboidal = 0
48 REAL(kind=dp), DIMENSION(:, :), POINTER :: aa_cuboidal_xxtnt => null()
49 REAL(kind=dp), DIMENSION(:, :), POINTER :: aa_cuboidal_yxtnt => null()
50 REAL(kind=dp), DIMENSION(:, :), POINTER :: aa_cuboidal_zxtnt => null()
51 REAL(kind=dp), DIMENSION(:), POINTER :: aa_cuboidal_eps => null()
52 REAL(kind=dp), DIMENSION(:), POINTER :: aa_cuboidal_zeta => null()
53
54 INTEGER :: n_xaa_annular = 0
55 REAL(kind=dp), DIMENSION(:, :), POINTER :: xaa_annular_xxtnt => null()
56 REAL(kind=dp), DIMENSION(:, :), POINTER :: xaa_annular_bctr => null()
57 REAL(kind=dp), DIMENSION(:, :), POINTER :: xaa_annular_brad => null()
58 REAL(kind=dp), DIMENSION(:), POINTER :: xaa_annular_eps => null()
59 REAL(kind=dp), DIMENSION(:), POINTER :: xaa_annular_zeta => null()
61
64 TYPE(pw_r3d_rs_type), POINTER :: eps => null()
65 TYPE(pw_r3d_rs_type), POINTER :: deps_drho => null()
66 TYPE(pw_r3d_rs_type), DIMENSION(3) :: dln_eps = pw_r3d_rs_type()
67 END TYPE dielectric_type
68
70 PUBLIC :: dielectric_release
71
72CONTAINS
73
74! **************************************************************************************************
75!> \brief deallocates dielectric data type
76!> \param dielectric the dielectric data type to be released
77!> \param pw_pool pool of the plane wave grid
78!> \par History
79!> 06.2014 created [Hossein Bani-Hashemian]
80!> \author Mohammad Hossein Bani-Hashemian
81! **************************************************************************************************
82 SUBROUTINE dielectric_release(dielectric, pw_pool)
83 TYPE(dielectric_type), POINTER :: dielectric
84 TYPE(pw_pool_type), INTENT(IN), OPTIONAL, POINTER :: pw_pool
85
86 CHARACTER(len=*), PARAMETER :: routinen = 'dielectric_release'
87
88 INTEGER :: handle, i
89 LOGICAL :: can_give_back
90
91 CALL timeset(routinen, handle)
92 IF (ASSOCIATED(dielectric)) THEN
93 can_give_back = PRESENT(pw_pool)
94 IF (can_give_back) can_give_back = ASSOCIATED(pw_pool)
95 IF (can_give_back) THEN
96 CALL pw_pool%give_back_pw(dielectric%eps)
97 CALL pw_pool%give_back_pw(dielectric%deps_drho)
98 DEALLOCATE (dielectric%eps, dielectric%deps_drho)
99 DO i = 1, 3
100 CALL pw_pool%give_back_pw(dielectric%dln_eps(i))
101 END DO
102 ELSE
103 CALL dielectric%eps%release()
104 CALL dielectric%deps_drho%release()
105 DEALLOCATE (dielectric%eps, dielectric%deps_drho)
106 DO i = 1, 3
107 CALL dielectric%dln_eps(i)%release()
108 END DO
109 END IF
110 CALL dielectric_parameters_dealloc(dielectric%params)
111 DEALLOCATE (dielectric)
112 END IF
113
114 CALL timestop(handle)
115
116 END SUBROUTINE dielectric_release
117
118! **************************************************************************************************
119!> \brief deallocates dielectric_parameters type
120!> \param dielec_params dielectric parameters
121!> \par History
122!> 07.2015 created [Hossein Bani-Hashemian]
123!> \author Mohammad Hossein Bani-Hashemian
124! **************************************************************************************************
125 SUBROUTINE dielectric_parameters_dealloc(dielec_params)
126
127 TYPE(dielectric_parameters), INTENT(INOUT) :: dielec_params
128
129 IF (ASSOCIATED(dielec_params%aa_cuboidal_xxtnt)) DEALLOCATE (dielec_params%aa_cuboidal_xxtnt)
130 IF (ASSOCIATED(dielec_params%aa_cuboidal_yxtnt)) DEALLOCATE (dielec_params%aa_cuboidal_yxtnt)
131 IF (ASSOCIATED(dielec_params%aa_cuboidal_zxtnt)) DEALLOCATE (dielec_params%aa_cuboidal_zxtnt)
132 IF (ASSOCIATED(dielec_params%aa_cuboidal_eps)) DEALLOCATE (dielec_params%aa_cuboidal_eps)
133 IF (ASSOCIATED(dielec_params%aa_cuboidal_zeta)) DEALLOCATE (dielec_params%aa_cuboidal_zeta)
134
135 IF (ASSOCIATED(dielec_params%xaa_annular_xxtnt)) DEALLOCATE (dielec_params%xaa_annular_xxtnt)
136 IF (ASSOCIATED(dielec_params%xaa_annular_bctr)) DEALLOCATE (dielec_params%xaa_annular_bctr)
137 IF (ASSOCIATED(dielec_params%xaa_annular_brad)) DEALLOCATE (dielec_params%xaa_annular_brad)
138 IF (ASSOCIATED(dielec_params%xaa_annular_eps)) DEALLOCATE (dielec_params%xaa_annular_eps)
139 IF (ASSOCIATED(dielec_params%xaa_annular_zeta)) DEALLOCATE (dielec_params%xaa_annular_zeta)
140
141 END SUBROUTINE dielectric_parameters_dealloc
142
143END MODULE dielectric_types
dielectric constant data type
integer, parameter, public derivative_fft_use_drho
integer, parameter, public derivative_fft_use_deps
integer, parameter, public derivative_fft
integer, parameter, public derivative_cd5
integer, parameter, public spatially_rho_dependent
integer, parameter, public derivative_cd3
integer, parameter, public spatially_dependent
integer, parameter, public rho_dependent
subroutine, public dielectric_release(dielectric, pw_pool)
deallocates dielectric data type
integer, parameter, public derivative_cd7
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
Manages a pool of grids (to be used for example as tmp objects), but can also be used to instantiate ...
Manages a pool of grids (to be used for example as tmp objects), but can also be used to instantiate ...