17 USE dct,
ONLY: dct_type,&
26 #include "../base/base_uses.f90"
30 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'ps_implicit_types'
37 TYPE :: ps_implicit_parameters
39 LOGICAL :: zero_initial_guess = .false.
40 INTEGER :: max_iter = 0
41 REAL(kind=
dp) :: tol = 0.0_dp
42 REAL(kind=
dp) :: omega = 0.0_dp
43 INTEGER :: neumann_directions = 0
44 END TYPE ps_implicit_parameters
46 TYPE :: ps_implicit_type
47 LOGICAL :: do_dbc_cube = .false.
48 TYPE(dielectric_type),
POINTER :: dielectric => null()
49 TYPE(dct_type) :: dct_env = dct_type()
50 TYPE(pw_r3d_rs_type),
POINTER :: initial_guess => null()
51 TYPE(pw_r3d_rs_type),
POINTER :: v_eps => null()
52 TYPE(pw_r3d_rs_type),
POINTER :: cstr_charge => null()
53 REAL(
dp),
DIMENSION(:),
ALLOCATABLE :: initial_lambda
54 REAL(
dp) :: ehartree = 0.0_dp
55 REAL(
dp) :: electric_enthalpy = 0.0_dp
56 INTEGER :: times_called = 0
57 TYPE(dirichlet_bc_p_type), &
58 DIMENSION(:),
ALLOCATABLE :: contacts
59 REAL(
dp),
DIMENSION(:, :),
ALLOCATABLE :: qs
60 REAL(
dp),
DIMENSION(:, :),
ALLOCATABLE :: rinv
61 REAL(
dp),
DIMENSION(:, :),
ALLOCATABLE :: b
62 REAL(
dp),
DIMENSION(:, :),
ALLOCATABLE :: bt
63 REAL(
dp),
DIMENSION(:),
ALLOCATABLE :: v_d
64 REAL(
dp),
DIMENSION(:),
ALLOCATABLE :: osc_frac
65 REAL(
dp),
DIMENSION(:),
ALLOCATABLE :: frequency
66 REAL(
dp),
DIMENSION(:),
ALLOCATABLE :: phase
67 INTEGER,
DIMENSION(:),
ALLOCATABLE :: idx_1dto3d
68 END TYPE ps_implicit_type
70 PUBLIC ps_implicit_type, ps_implicit_parameters
85 TYPE(ps_implicit_type),
POINTER :: ps_implicit_env
86 TYPE(ps_implicit_parameters),
INTENT(INOUT) :: ps_implicit_params
87 TYPE(pw_pool_type),
INTENT(IN),
OPTIONAL,
POINTER :: pw_pool
89 CHARACTER(len=*),
PARAMETER :: routinen =
'ps_implicit_release'
91 INTEGER :: boundary_condition, handle
92 LOGICAL :: can_give_back, do_dbc_cube
94 CALL timeset(routinen, handle)
96 IF (
ASSOCIATED(ps_implicit_env))
THEN
97 can_give_back =
PRESENT(pw_pool)
98 IF (can_give_back) can_give_back =
ASSOCIATED(pw_pool)
99 do_dbc_cube = ps_implicit_env%do_dbc_cube
101 IF (can_give_back)
THEN
102 CALL pw_pool%give_back_pw(ps_implicit_env%initial_guess)
103 CALL pw_pool%give_back_pw(ps_implicit_env%v_eps)
104 CALL pw_pool%give_back_pw(ps_implicit_env%cstr_charge)
105 DEALLOCATE (ps_implicit_env%initial_guess, ps_implicit_env%v_eps, ps_implicit_env%cstr_charge)
106 CALL dbc_release(ps_implicit_env%contacts, do_dbc_cube, pw_pool=pw_pool)
108 CALL ps_implicit_env%initial_guess%release()
109 CALL ps_implicit_env%v_eps%release()
110 IF (
ASSOCIATED(ps_implicit_env%cstr_charge))
THEN
111 CALL ps_implicit_env%cstr_charge%release()
112 DEALLOCATE (ps_implicit_env%cstr_charge)
114 DEALLOCATE (ps_implicit_env%initial_guess, ps_implicit_env%v_eps)
115 CALL dbc_release(ps_implicit_env%contacts, do_dbc_cube)
118 DEALLOCATE (ps_implicit_env%initial_lambda)
119 DEALLOCATE (ps_implicit_env%B)
120 DEALLOCATE (ps_implicit_env%Bt)
121 DEALLOCATE (ps_implicit_env%QS)
122 DEALLOCATE (ps_implicit_env%Rinv)
123 DEALLOCATE (ps_implicit_env%v_D)
124 DEALLOCATE (ps_implicit_env%osc_frac)
125 DEALLOCATE (ps_implicit_env%frequency)
126 DEALLOCATE (ps_implicit_env%phase)
127 DEALLOCATE (ps_implicit_env%idx_1dto3d)
130 boundary_condition = ps_implicit_params%boundary_condition
135 DEALLOCATE (ps_implicit_env)
138 CALL timestop(handle)
the type I Discrete Cosine Transform (DCT-I)
subroutine, public dct_type_release(dct_env)
Releases a dct_type.
dielectric constant data type
subroutine, public dielectric_release(dielectric, pw_pool)
deallocates dielectric data type
Dirichlet boundary condition data types.
subroutine, public dbc_release(contacts, do_dbc_cube, pw_pool)
releases the defined Dirichlet boundary region
Defines the basic variable types.
integer, parameter, public dp
Types containing essential information for running implicit (iterative) Poisson solver.
integer, parameter, public neumann_bc
subroutine, public ps_implicit_release(ps_implicit_env, ps_implicit_params, pw_pool)
Deallocates ps_implicit.
integer, parameter, public mixed_bc
integer, parameter, public mixed_periodic_bc
integer, parameter, public periodic_bc
Manages a pool of grids (to be used for example as tmp objects), but can also be used to instantiate ...