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)