(git:0de0cc2)
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,&
20  dielectric_type
21  USE dirichlet_bc_types, ONLY: dbc_release,&
22  dirichlet_bc_p_type
23  USE kinds, ONLY: dp
24  USE pw_pool_types, ONLY: pw_pool_type
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, &
34  mixed_periodic_bc = 2, &
35  neumann_bc = 3
36 
37  TYPE :: ps_implicit_parameters
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
44  END TYPE ps_implicit_parameters
45 
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
69 
70  PUBLIC ps_implicit_type, ps_implicit_parameters
71  PUBLIC ps_implicit_release
72 
73 CONTAINS
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 
142 END 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 ...
Definition: pw_pool_types.F:24