19 #include "../base/base_uses.f90"
25 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'dielectric_types'
38 TYPE dielectric_parameters
39 LOGICAL :: dielec_core_correction = .false.
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
45 INTEGER :: times_called = 0
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()
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()
60 END TYPE dielectric_parameters
63 TYPE(dielectric_parameters) :: params = dielectric_parameters()
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
69 PUBLIC :: dielectric_type, dielectric_parameters
83 TYPE(dielectric_type),
POINTER :: dielectric
84 TYPE(pw_pool_type),
INTENT(IN),
OPTIONAL,
POINTER :: pw_pool
86 CHARACTER(len=*),
PARAMETER :: routinen =
'dielectric_release'
89 LOGICAL :: can_give_back
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)
100 CALL pw_pool%give_back_pw(dielectric%dln_eps(i))
103 CALL dielectric%eps%release()
104 CALL dielectric%deps_drho%release()
105 DEALLOCATE (dielectric%eps, dielectric%deps_drho)
107 CALL dielectric%dln_eps(i)%release()
110 CALL dielectric_parameters_dealloc(dielectric%params)
111 DEALLOCATE (dielectric)
114 CALL timestop(handle)
125 SUBROUTINE dielectric_parameters_dealloc(dielec_params)
127 TYPE(dielectric_parameters),
INTENT(INOUT) :: dielec_params
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)
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)
141 END SUBROUTINE dielectric_parameters_dealloc
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.
integer, parameter, public dp
Manages a pool of grids (to be used for example as tmp objects), but can also be used to instantiate ...