(git:374b731)
Loading...
Searching...
No Matches
ps_implicit_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 Types containing essential information for running implicit (iterative)
10!> Poisson solver
11!> \par History
12!> 08.2014 created [Hossein Bani-Hashemian]
13!> \author Hossein Bani-Hashemian
14! **************************************************************************************************
16
17 USE dct, ONLY: dct_type,&
23 USE kinds, ONLY: dp
25 USE pw_types, ONLY: pw_r3d_rs_type
26#include "../base/base_uses.f90"
27
28 IMPLICIT NONE
29 PRIVATE
30 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'ps_implicit_types'
31
32 INTEGER, PARAMETER, PUBLIC :: periodic_bc = 0, &
33 mixed_bc = 1, &
35 neumann_bc = 3
36
38 INTEGER :: boundary_condition = periodic_bc
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
45
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
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
69
72
73CONTAINS
74
75! **************************************************************************************************
76!> \brief Deallocates ps_implicit
77!> \param ps_implicit_env the implicit_env to be deallocated
78!> \param ps_implicit_params implicit env parameters
79!> \param pw_pool pool of plane-wave grid
80!> \par History
81!> 08.2014 created [Hossein Bani-Hashemian]
82!> \author Mohammad Hossein Bani-Hashemian
83! **************************************************************************************************
84 SUBROUTINE ps_implicit_release(ps_implicit_env, ps_implicit_params, pw_pool)
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
88
89 CHARACTER(len=*), PARAMETER :: routinen = 'ps_implicit_release'
90
91 INTEGER :: boundary_condition, handle
92 LOGICAL :: can_give_back, do_dbc_cube
93
94 CALL timeset(routinen, handle)
95
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
100
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)
107 ELSE
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)
113 END IF
114 DEALLOCATE (ps_implicit_env%initial_guess, ps_implicit_env%v_eps)
115 CALL dbc_release(ps_implicit_env%contacts, do_dbc_cube)
116 END IF
117
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)
128
129 CALL dielectric_release(ps_implicit_env%dielectric, pw_pool)
130 boundary_condition = ps_implicit_params%boundary_condition
131 IF (boundary_condition .EQ. mixed_bc .OR. boundary_condition .EQ. neumann_bc) THEN
132 CALL dct_type_release(ps_implicit_env%dct_env)
133 END IF
134
135 DEALLOCATE (ps_implicit_env)
136 END IF
137
138 CALL timestop(handle)
139
140 END SUBROUTINE ps_implicit_release
141
142END MODULE ps_implicit_types
the type I Discrete Cosine Transform (DCT-I)
Definition dct.F:16
subroutine, public dct_type_release(dct_env)
Releases a dct_type.
Definition dct.F:132
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.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
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 ...
Manages a pool of grids (to be used for example as tmp objects), but can also be used to instantiate ...