(git:374b731)
Loading...
Searching...
No Matches
preconditioner_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 of preconditioners
10!> \par History
11!> Separate types from construction and application
12!> \author Joost VandeVondele (09.2002)
13! **************************************************************************************************
17 USE cp_fm_types, ONLY: cp_fm_release,&
19 USE dbcsr_api, ONLY: dbcsr_deallocate_matrix,&
20 dbcsr_p_type,&
21 dbcsr_release_p,&
22 dbcsr_type
25 USE kinds, ONLY: dp
28#include "./base/base_uses.f90"
29
30 IMPLICIT NONE
31
32 PRIVATE
33
34 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'preconditioner_types'
35
37 PUBLIC :: init_preconditioner
38 PUBLIC :: preconditioner_in_use
40
41! **************************************************************************************************
43! PRIVATE
44 TYPE(dbcsr_type), POINTER :: sparse_matrix
45 TYPE(cp_fm_type), POINTER :: fm
46 TYPE(dbcsr_type), POINTER :: dbcsr_matrix
47 TYPE(dbcsr_type), POINTER :: max_ev_vector
48 TYPE(dbcsr_type), POINTER :: min_ev_vector
49 TYPE(dbcsr_p_type), POINTER, DIMENSION(:) :: inverse_history
50 TYPE(mp_para_env_type), POINTER :: para_env
51 TYPE(cp_blacs_env_type), POINTER :: ctxt
52 INTEGER :: in_use, solver, ihistory, cholesky_use
53 REAL(kind=dp), DIMENSION(:), POINTER :: occ_evals, full_evals
54 REAL(kind=dp) :: energy_gap
55 REAL(kind=dp) :: condition_num
56 END TYPE preconditioner_type
57
58! **************************************************************************************************
62
63CONTAINS
64
65! **************************************************************************************************
66
67! **************************************************************************************************
68!> \brief ...
69!> \param preconditioner ...
70!> \return ...
71! **************************************************************************************************
72 FUNCTION preconditioner_in_use(preconditioner)
74 LOGICAL :: preconditioner_in_use
75
76 preconditioner_in_use = .NOT. (preconditioner%in_use .EQ. 0)
77 END FUNCTION
78
79! **************************************************************************************************
80!> \brief ...
81!> \param preconditioner_env ...
82!> \param para_env ...
83!> \param blacs_env ...
84! **************************************************************************************************
85 SUBROUTINE init_preconditioner(preconditioner_env, para_env, blacs_env)
86
87 TYPE(preconditioner_type) :: preconditioner_env
88 TYPE(mp_para_env_type), POINTER :: para_env
89 TYPE(cp_blacs_env_type), POINTER :: blacs_env
90
91 NULLIFY (preconditioner_env%sparse_matrix)
92 NULLIFY (preconditioner_env%fm)
93 NULLIFY (preconditioner_env%dbcsr_matrix)
94 NULLIFY (preconditioner_env%occ_evals)
95 NULLIFY (preconditioner_env%full_evals)
96 NULLIFY (preconditioner_env%inverse_history)
97 NULLIFY (preconditioner_env%max_ev_vector)
98 NULLIFY (preconditioner_env%min_ev_vector)
99 preconditioner_env%solver = ot_precond_solver_default
100 preconditioner_env%para_env => para_env
101 preconditioner_env%ctxt => blacs_env
102 !inverse is used for filtering in update set it to something huge to
103 ! avoid filtering if the information is not available
104 preconditioner_env%condition_num = -1.0_dp
105 preconditioner_env%ihistory = 0
106
107 CALL preconditioner_env%para_env%retain()
108 CALL preconditioner_env%ctxt%retain()
109
110 END SUBROUTINE init_preconditioner
111
112! **************************************************************************************************
113!> \brief ...
114!> \param preconditioner_env ...
115! **************************************************************************************************
116 SUBROUTINE destroy_preconditioner(preconditioner_env)
117
118 TYPE(preconditioner_type) :: preconditioner_env
119
120 CHARACTER(len=*), PARAMETER :: routinen = 'destroy_preconditioner'
121
122 INTEGER :: handle, i
123
124 CALL timeset(routinen, handle)
125
126 IF (ASSOCIATED(preconditioner_env%sparse_matrix)) THEN
127 CALL dbcsr_deallocate_matrix(preconditioner_env%sparse_matrix)
128 NULLIFY (preconditioner_env%sparse_matrix)
129 END IF
130
131 IF (ASSOCIATED(preconditioner_env%fm)) THEN
132 CALL cp_fm_release(preconditioner_env%fm)
133 DEALLOCATE (preconditioner_env%fm)
134 NULLIFY (preconditioner_env%fm)
135 END IF
136 IF (ASSOCIATED(preconditioner_env%dbcsr_matrix)) THEN
137 CALL dbcsr_release_p(preconditioner_env%dbcsr_matrix)
138 END IF
139 IF (ASSOCIATED(preconditioner_env%max_ev_vector)) THEN
140 CALL dbcsr_release_p(preconditioner_env%max_ev_vector)
141 END IF
142 IF (ASSOCIATED(preconditioner_env%min_ev_vector)) THEN
143 CALL dbcsr_release_p(preconditioner_env%min_ev_vector)
144 END IF
145 IF (ASSOCIATED(preconditioner_env%occ_evals)) THEN
146 DEALLOCATE (preconditioner_env%occ_evals)
147 END IF
148 IF (ASSOCIATED(preconditioner_env%full_evals)) THEN
149 DEALLOCATE (preconditioner_env%full_evals)
150 END IF
151 IF (ASSOCIATED(preconditioner_env%inverse_history)) THEN
152 DO i = 1, SIZE(preconditioner_env%inverse_history)
153 CALL dbcsr_release_p(preconditioner_env%inverse_history(i)%matrix)
154 END DO
155 DEALLOCATE (preconditioner_env%inverse_history)
156 END IF
157 CALL mp_para_env_release(preconditioner_env%para_env)
158 CALL cp_blacs_env_release(preconditioner_env%ctxt)
159
160 preconditioner_env%in_use = 0
161 preconditioner_env%cholesky_use = cholesky_reduce
162
163 CALL timestop(handle)
164
165 END SUBROUTINE destroy_preconditioner
166
167END MODULE preconditioner_types
168
methods related to the blacs parallel environment
subroutine, public cp_blacs_env_release(blacs_env)
releases the given blacs_env
represent a full matrix distributed on many processors
Definition cp_fm_types.F:15
collects all constants needed in input so that they can be used without circular dependencies
integer, parameter, public cholesky_reduce
integer, parameter, public ot_precond_solver_default
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
Interface to the message passing library MPI.
subroutine, public mp_para_env_release(para_env)
releases the para object (to be called when you don't want anymore the shared copy of this object)
types of preconditioners
subroutine, public init_preconditioner(preconditioner_env, para_env, blacs_env)
...
subroutine, public destroy_preconditioner(preconditioner_env)
...
logical function, public preconditioner_in_use(preconditioner)
...
computes preconditioners, and implements methods to apply them currently used in qs_ot
represent a blacs multidimensional parallel environment (for the mpi corrispective see cp_paratypes/m...
represent a full matrix
stores all the informations relevant to an mpi environment