21#include "./base/base_uses.f90"
26 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'hirshfeld_types'
37 LOGICAL :: iterative = .false., &
39 INTEGER :: shape_function_type = -1
40 INTEGER :: ref_charge = -1, &
42 TYPE(shape_fn),
DIMENSION(:), &
43 POINTER :: kind_shape_fn => null()
44 REAL(kind=
dp),
DIMENSION(:), &
45 POINTER :: charges => null()
50 INTEGER :: numexp = -1
51 REAL(kind=
dp),
DIMENSION(:), &
52 POINTER :: zet => null()
53 REAL(kind=
dp),
DIMENSION(:), &
54 POINTER :: coef => null()
68 IF (
ASSOCIATED(hirshfeld_env))
THEN
72 ALLOCATE (hirshfeld_env)
74 hirshfeld_env%iterative = .false.
75 hirshfeld_env%use_bohr = .false.
78 NULLIFY (hirshfeld_env%kind_shape_fn)
79 NULLIFY (hirshfeld_env%charges)
80 NULLIFY (hirshfeld_env%fnorm)
92 TYPE(shape_fn),
DIMENSION(:),
POINTER :: kind_shape
94 IF (
ASSOCIATED(hirshfeld_env))
THEN
96 IF (
ASSOCIATED(hirshfeld_env%kind_shape_fn))
THEN
97 kind_shape => hirshfeld_env%kind_shape_fn
98 DO ikind = 1,
SIZE(kind_shape)
99 IF (
ASSOCIATED(hirshfeld_env%kind_shape_fn(ikind)%zet))
THEN
100 DEALLOCATE (kind_shape(ikind)%zet)
102 IF (
ASSOCIATED(hirshfeld_env%kind_shape_fn(ikind)%coef))
THEN
103 DEALLOCATE (kind_shape(ikind)%coef)
106 DEALLOCATE (kind_shape)
109 IF (
ASSOCIATED(hirshfeld_env%charges))
THEN
110 DEALLOCATE (hirshfeld_env%charges)
113 IF (
ASSOCIATED(hirshfeld_env%fnorm))
THEN
114 CALL hirshfeld_env%fnorm%release()
115 DEALLOCATE (hirshfeld_env%fnorm)
118 DEALLOCATE (hirshfeld_env)
136 ref_charge, fnorm, radius_type, use_bohr)
138 INTEGER,
INTENT(OUT),
OPTIONAL :: shape_function_type
139 LOGICAL,
INTENT(OUT),
OPTIONAL :: iterative
140 INTEGER,
INTENT(OUT),
OPTIONAL :: ref_charge
142 INTEGER,
INTENT(OUT),
OPTIONAL :: radius_type
143 LOGICAL,
INTENT(OUT),
OPTIONAL :: use_bohr
145 cpassert(
ASSOCIATED(hirshfeld_env))
147 IF (
PRESENT(shape_function_type))
THEN
148 shape_function_type = hirshfeld_env%shape_function_type
150 IF (
PRESENT(iterative))
THEN
151 iterative = hirshfeld_env%iterative
153 IF (
PRESENT(use_bohr))
THEN
154 use_bohr = hirshfeld_env%use_bohr
156 IF (
PRESENT(radius_type))
THEN
157 radius_type = hirshfeld_env%radius_type
159 IF (
PRESENT(ref_charge))
THEN
160 ref_charge = hirshfeld_env%ref_charge
162 IF (
PRESENT(fnorm))
THEN
163 fnorm => hirshfeld_env%fnorm
180 ref_charge, fnorm, radius_type, use_bohr)
182 INTEGER,
INTENT(IN),
OPTIONAL :: shape_function_type
183 LOGICAL,
INTENT(IN),
OPTIONAL :: iterative
184 INTEGER,
INTENT(IN),
OPTIONAL :: ref_charge
186 INTEGER,
INTENT(IN),
OPTIONAL :: radius_type
187 LOGICAL,
INTENT(IN),
OPTIONAL :: use_bohr
189 cpassert(
ASSOCIATED(hirshfeld_env))
191 IF (
PRESENT(shape_function_type))
THEN
192 hirshfeld_env%shape_function_type = shape_function_type
194 IF (
PRESENT(iterative))
THEN
195 hirshfeld_env%iterative = iterative
197 IF (
PRESENT(use_bohr))
THEN
198 hirshfeld_env%use_bohr = use_bohr
200 IF (
PRESENT(radius_type))
THEN
201 hirshfeld_env%radius_type = radius_type
203 IF (
PRESENT(ref_charge))
THEN
204 hirshfeld_env%ref_charge = ref_charge
206 IF (
PRESENT(fnorm))
THEN
207 hirshfeld_env%fnorm => fnorm
The types needed for the calculation of Hirshfeld charges and related functions.
subroutine, public get_hirshfeld_info(hirshfeld_env, shape_function_type, iterative, ref_charge, fnorm, radius_type, use_bohr)
Get information from a Hirshfeld env.
subroutine, public create_hirshfeld_type(hirshfeld_env)
...
subroutine, public set_hirshfeld_info(hirshfeld_env, shape_function_type, iterative, ref_charge, fnorm, radius_type, use_bohr)
Set values of a Hirshfeld env.
subroutine, public release_hirshfeld_type(hirshfeld_env)
...
Defines the basic variable types.
integer, parameter, public dp
quantities needed for a Hirshfeld based partitioning of real space