19 USE dbcsr_api,
ONLY: dbcsr_deallocate_matrix,&
28 #include "./base/base_uses.f90"
34 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'preconditioner_types'
36 PUBLIC :: preconditioner_type, preconditioner_p_type
42 TYPE preconditioner_type
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
59 TYPE preconditioner_p_type
60 TYPE(preconditioner_type),
POINTER :: preconditioner
61 END TYPE preconditioner_p_type
87 TYPE(preconditioner_type) :: preconditioner_env
88 TYPE(mp_para_env_type),
POINTER :: para_env
89 TYPE(cp_blacs_env_type),
POINTER :: blacs_env
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)
100 preconditioner_env%para_env => para_env
101 preconditioner_env%ctxt => blacs_env
104 preconditioner_env%condition_num = -1.0_dp
105 preconditioner_env%ihistory = 0
107 CALL preconditioner_env%para_env%retain()
108 CALL preconditioner_env%ctxt%retain()
118 TYPE(preconditioner_type) :: preconditioner_env
120 CHARACTER(len=*),
PARAMETER :: routinen =
'destroy_preconditioner'
124 CALL timeset(routinen, handle)
126 IF (
ASSOCIATED(preconditioner_env%sparse_matrix))
THEN
127 CALL dbcsr_deallocate_matrix(preconditioner_env%sparse_matrix)
128 NULLIFY (preconditioner_env%sparse_matrix)
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)
136 IF (
ASSOCIATED(preconditioner_env%dbcsr_matrix))
THEN
137 CALL dbcsr_release_p(preconditioner_env%dbcsr_matrix)
139 IF (
ASSOCIATED(preconditioner_env%max_ev_vector))
THEN
140 CALL dbcsr_release_p(preconditioner_env%max_ev_vector)
142 IF (
ASSOCIATED(preconditioner_env%min_ev_vector))
THEN
143 CALL dbcsr_release_p(preconditioner_env%min_ev_vector)
145 IF (
ASSOCIATED(preconditioner_env%occ_evals))
THEN
146 DEALLOCATE (preconditioner_env%occ_evals)
148 IF (
ASSOCIATED(preconditioner_env%full_evals))
THEN
149 DEALLOCATE (preconditioner_env%full_evals)
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)
155 DEALLOCATE (preconditioner_env%inverse_history)
160 preconditioner_env%in_use = 0
163 CALL timestop(handle)
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
Defines the basic variable types.
integer, parameter, public dp
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)
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