(git:d18deda)
Loading...
Searching...
No Matches
post_scf_bandstructure_types.F
Go to the documentation of this file.
1!--------------------------------------------------------------------------------------------------!
2! CP2K: A general program to perform molecular dynamics simulations !
3! Copyright 2000-2025 CP2K developers group <https://cp2k.org> !
4! !
5! SPDX-License-Identifier: GPL-2.0-or-later !
6!--------------------------------------------------------------------------------------------------!
7
8! **************************************************************************************************
9!> \brief
10!> \author Jan Wilhelm
11!> \date 07.2023
12! **************************************************************************************************
15 USE cp_cfm_types, ONLY: cp_cfm_release,&
17 USE cp_dbcsr_api, ONLY: dbcsr_p_type,&
20 USE cp_fm_types, ONLY: cp_fm_release,&
22 USE dbt_api, ONLY: dbt_destroy,&
23 dbt_type
26 USE kinds, ONLY: default_string_length,&
27 dp
28 USE kpoint_types, ONLY: kpoint_release,&
34#include "./base/base_uses.f90"
35
36 IMPLICIT NONE
37
38 PRIVATE
39
40 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'post_scf_bandstructure_types'
41
43
44 ! valence band maximum (VBM), conduction band minimum (CBM), direct band gap (DBG),
45 ! indirect band gap (IDBG)
47 REAL(kind=dp) :: vbm = -1.0_dp, &
48 cbm = -1.0_dp, &
49 dbg = -1.0_dp, &
50 idbg = -1.0_dp
51 END TYPE band_edges_type
52
53 ! data type for storing 3-index quantities for small-cell, full-k-points GW code
55 REAL(kind=dp), DIMENSION(:, :, :), ALLOCATABLE :: data_3
56 END TYPE data_3_type
57
59
60 ! decide which calculations will be done
61 LOGICAL :: do_gw = .false., &
62 do_soc = .false., &
63 do_ldos = .false.
64
65 ! various eigenvalues computed in GW code, some depend on k-points
66 ! and have therefore three dimensions (band index, k-point, spin)
67 REAL(kind=dp), DIMENSION(:, :), ALLOCATABLE :: eigenval_scf_gamma
68 REAL(kind=dp), DIMENSION(:, :, :), ALLOCATABLE :: eigenval_scf, &
69 eigenval_g0w0, &
70 eigenval_hf, &
71 eigenval_scgw0
72 REAL(kind=dp), DIMENSION(:, :), ALLOCATABLE :: eigenval_scf_soc, &
73 eigenval_g0w0_soc
74 TYPE(band_edges_type), DIMENSION(2) :: band_edges_scf_gamma = band_edges_type()
75 TYPE(band_edges_type) :: band_edges_scf = band_edges_type(), &
76 band_edges_g0w0 = band_edges_type(), &
77 band_edges_hf = band_edges_type()
78
79 ! parameters that influence the GW flavor
80 LOGICAL :: do_hedin_shift = .false.
81
82 ! general parameters on molecular orbitals and basis sets
83 INTEGER :: n_ao = -1, &
84 n_ri = -1, &
85 n_spin = -1, &
86 n_atom = -1, &
87 max_ao_bf_per_atom = -1
88 INTEGER, DIMENSION(:), ALLOCATABLE :: i_ao_start_from_atom, &
89 i_ao_end_from_atom, &
90 i_ri_start_from_atom, &
91 i_ri_end_from_atom
92 INTEGER, DIMENSION(2) :: n_occ = -1, &
93 n_vir = -1
94 REAL(kind=dp) :: spin_degeneracy = -1.0_dp
95 REAL(kind=dp), DIMENSION(2) :: e_fermi = -1.0_dp
96
97 ! kpoint mesh for chi, eps, W
98 INTEGER, DIMENSION(:), POINTER :: nkp_grid_dos_input => null(), &
99 nkp_grid_chi_eps_w_input => null()
100 INTEGER, DIMENSION(3) :: nkp_grid_chi_eps_w_orig = -1, &
101 nkp_grid_chi_eps_w_extra = -1
102 INTEGER :: nkp_chi_eps_w_orig = -1, &
103 nkp_chi_eps_w_extra = -1, &
104 nkp_chi_eps_w_orig_plus_extra = -1, &
105 nkp_chi_eps_w_batch = -1, &
106 num_chi_eps_w_batches = -1, &
107 size_lattice_sum_v = -1
108 TYPE(kpoint_type), POINTER :: kpoints_chi_eps_w => null(), &
109 kpoints_dos => null()
110 LOGICAL :: approx_kp_extrapol = .false.
111
112 REAL(kind=dp) :: wkp_orig = -1.0_dp
113 REAL(kind=dp), DIMENSION(:), ALLOCATABLE :: wkp_s_p, &
114 wkp_no_extra
115 INTEGER, DIMENSION(:), ALLOCATABLE :: l_ri
116 INTEGER :: input_kp_bs_npoints = -1, &
117 input_kp_bs_n_sp_pts = -1, &
118 nkp_bs_and_dos = -1, &
119 nkp_only_bs = -1, &
120 nkp_only_dos = -1
121 REAL(kind=dp), DIMENSION(:, :), ALLOCATABLE :: xkp_special
122
123 ! parameters for GW band structure calculation of small unit cell (with multiple unit cell)
124 INTEGER :: small_cell_full_kp_or_large_cell_gamma = -1, &
125 nimages_scf = -1
126 INTEGER, DIMENSION(3) :: periodic = -1
127 REAL(kind=dp), DIMENSION(3, 3) :: hmat = -1.0_dp
128
129 ! imaginary time and frequency grids
130 INTEGER :: num_time_freq_points = -1, &
131 num_freq_points_fit = -1
132 REAL(kind=dp), DIMENSION(:), ALLOCATABLE :: imag_time_points, &
133 imag_time_weights_freq_zero, &
134 imag_freq_points, &
135 imag_freq_points_fit
136 REAL(kind=dp), DIMENSION(:, :), ALLOCATABLE :: weights_cos_t_to_w, &
137 weights_cos_w_to_t, &
138 weights_sin_t_to_w
139 INTEGER :: nparam_pade = -1, &
140 num_points_per_magnitude = -1
141 REAL(kind=dp) :: freq_max_fit = -1.0_dp, &
142 regularization_minimax = -1.0_dp, &
143 stabilize_exp = -1.0_dp
144
145 ! filter threshold for matrix-tensor operations
146 REAL(kind=dp) :: eps_filter = -1.0_dp, &
147 eps_atom_grid_2d_mat = -1.0_dp
148
149 ! threshold for inverting ao overlap matrix, RI cfm_1d
150 REAL(kind=dp) :: eps_eigval_mat_s = -1.0_dp, &
151 eps_eigval_mat_ri = -1.0_dp, &
152 input_regularization_ri = -1.0_dp, &
153 regularization_ri = -1.0_dp
154
155 ! global full cfm_1d used in GW
156 TYPE(cp_fm_type) :: fm_s_gamma = cp_fm_type(), &
157 fm_gocc = cp_fm_type(), &
158 fm_gvir = cp_fm_type()
159 TYPE(cp_fm_type), DIMENSION(2) :: fm_ks_gamma = cp_fm_type(), &
160 fm_v_xc_gamma = cp_fm_type(), &
161 fm_mo_coeff_gamma = cp_fm_type()
162 TYPE(cp_fm_type), DIMENSION(4) :: fm_work_mo = cp_fm_type()
163 TYPE(cp_fm_type) :: fm_ri_ri = cp_fm_type(), &
164 fm_chi_gamma_freq = cp_fm_type(), &
165 fm_w_mic_freq = cp_fm_type(), &
166 fm_w_mic_freq_1_extra = cp_fm_type(), &
167 fm_w_mic_freq_1_no_extra = cp_fm_type(), &
168 fm_w_mic_freq_zero = cp_fm_type(), &
169 fm_h_g0w0_gamma = cp_fm_type()
170 TYPE(cp_cfm_type) :: cfm_work_mo = cp_cfm_type(), &
171 cfm_work_mo_2 = cp_cfm_type()
172
173 ! global dbcsr cfm_1d used in GW
174 TYPE(dbcsr_p_type) :: mat_ao_ao = dbcsr_p_type(), &
175 mat_ri_ri = dbcsr_p_type()
176 TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: mat_chi_gamma_tau => null()
177
178 ! local dbcsr cfm_1d used in GW (local in tensor group)
179 TYPE(dbcsr_p_type) :: mat_ao_ao_tensor = dbcsr_p_type(), &
180 mat_ri_ri_tensor = dbcsr_p_type()
181
182 ! tensors for sparse matrix-tensor operations
183#if defined(FTN_NO_DEFAULT_INIT)
184 TYPE(dbt_type) :: t_g, &
185 t_chi, &
186 t_w, &
187 t_ri_ao__ao, &
188 t_ri__ao_ao
189#else
190 TYPE(dbt_type) :: t_g = dbt_type(), &
191 t_chi = dbt_type(), &
192 t_w = dbt_type(), &
193 t_ri_ao__ao = dbt_type(), &
194 t_ri__ao_ao = dbt_type()
195#endif
196
197 ! parameters and data for parallelization
198 INTEGER :: group_size_tensor = -1, &
199 tensor_group_color = -1, &
200 num_tensor_groups = -1
201 REAL(kind=dp) :: input_memory_per_proc_gb = -1.0_dp
202 TYPE(mp_para_env_type), POINTER :: para_env => null(), &
203 para_env_tensor => null()
204 REAL(kind=dp) :: occupation_3c_int = -1.0_dp, &
205 max_dist_ao_atoms = -1.0_dp, &
206 safety_factor_memory = -1.0_dp
207
208 ! parallelization: atom range i and atom range j for tensor group
209 INTEGER, DIMENSION(2) :: atoms_i = -1, &
210 atoms_j = -1
211 INTEGER :: n_atom_i = -1, &
212 n_intervals_i = -1, &
213 n_atom_j = -1, &
214 n_intervals_j = -1, &
215 n_atom_per_interval_ij = -1, &
216 n_intervals_inner_loop_atoms = -1, &
217 n_atom_per_il_interval = -1
218 INTEGER, DIMENSION(:, :), ALLOCATABLE :: i_atom_intervals, &
219 j_atom_intervals, &
220 inner_loop_atom_intervals, &
221 atoms_i_t_group, &
222 atoms_j_t_group
223 LOGICAL, DIMENSION(:, :), ALLOCATABLE :: skip_sigma_occ, &
224 skip_sigma_vir
225 ! Marek : rtbse_method
226 INTEGER :: rtp_method = rtp_method_bse
227
228 ! check-arrays and names for restarting
229 LOGICAL, DIMENSION(:), ALLOCATABLE :: read_chi, &
230 calc_chi
231 LOGICAL, DIMENSION(:, :), ALLOCATABLE :: sigma_c_exists
232 LOGICAL :: all_w_exist = .false., &
233 sigma_x_exists = .false.
234 CHARACTER(LEN=3) :: chi_name = "chi"
235 CHARACTER(LEN=6) :: w_time_name = "W_time"
236 CHARACTER(LEN=7) :: sigma_x_name = "Sigma_x"
237 CHARACTER(LEN=13) :: sigma_p_name = "Sigma_pos_tau", &
238 sigma_n_name = "Sigma_neg_tau"
239 CHARACTER(LEN=default_string_length) :: prefix = ""
240 INTEGER :: unit_nr = -1
241
242 ! parameters and data for basis sets
244 DIMENSION(:), ALLOCATABLE :: basis_set_ao, &
245 basis_set_ri
246 INTEGER, DIMENSION(:), ALLOCATABLE :: sizes_ao, &
247 sizes_ri
250 trunc_coulomb = libint_potential_type()
251
252 ! parameters for SOC calculation
253 REAL(kind=dp) :: energy_window_soc = -1.0_dp
254 ! sizes: mat_V_SOC_xyz: xyz, img
255 TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: mat_v_soc_xyz => null()
256 TYPE(cp_fm_type), DIMENSION(3) :: fm_v_soc_xyz_mo = cp_fm_type()
257 ! small-cell GW: dimension = number of kpoints; large-cell GW: Gamma-point, dimension = 1
258 TYPE(cp_cfm_type), DIMENSION(:), ALLOCATABLE :: cfm_soc_spinor_ao
259 TYPE(band_edges_type) :: band_edges_scf_soc = band_edges_type(), &
260 band_edges_g0w0_soc = band_edges_type()
261
262 ! parameters for DOS and PDOS calculation
263 REAL(kind=dp) :: energy_window_dos = -1.0_dp, &
264 energy_step_dos = -1.0_dp, &
265 broadening_dos = -1.0_dp
266
267 ! parameters for LDOS calculation (LDOS: local density of states)
268 INTEGER :: int_ldos_xyz = -1
269 INTEGER, DIMENSION(:), POINTER :: bin_mesh => null()
270 INTEGER :: n_bins_max_for_printing = -1
271 REAL(kind=dp) :: unit_ldos_int_z_inv_ang2_ev = -1.0_dp
272
273 ! quantities only needed for small cells and k-point sampling in DFT (small_cell_full_kp)
274 INTEGER :: nkp_scf_desymm = -1, &
275 nimages_3c = -1, &
276 nimages_scf_desymm = -1, &
277 nimages_delta_r = -1
278 TYPE(kpoint_type), POINTER :: kpoints_scf_desymm => null(), &
279 kpoints_scf_desymm_2 => null()
280 INTEGER, DIMENSION(3) :: cell_grid_scf_desymm = -1
281 INTEGER, DIMENSION(:, :), ALLOCATABLE :: index_to_cell_3c, &
282 index_to_cell_delta_r
283 INTEGER, DIMENSION(:, :, :), POINTER :: cell_to_index_3c => null(), &
284 cell_to_index_delta_r => null()
285 REAL(kind=dp) :: heuristic_filter_factor = -1.0_dp
286
287 ! small_cell_full_kp parallelization
288 INTEGER :: n_tasks_delta_r_local = -1
289 INTEGER, DIMENSION(:), ALLOCATABLE :: task_delta_r
290 INTEGER, DIMENSION(:, :), ALLOCATABLE :: nblocks_3c
291 LOGICAL, DIMENSION(:), ALLOCATABLE :: skip_dr_chi, &
292 skip_dr_sigma
293 LOGICAL, DIMENSION(:, :, :), ALLOCATABLE :: skip_dr_r_r2_mxm_chi, &
294 skip_dr_r1_r_mxm_sigma, &
295 skip_dr_r12_s_goccx3c_chi, &
296 skip_dr_r12_s_gvirx3c_chi, &
297 skip_dr_r1_s2_gx3c_sigma
298
299 ! cfm for k-dep overl mat S_µν(k), KS mat h_µν(k,spin) and mo coeff C_μn(k,spin) from SCF
300 TYPE(cp_cfm_type), DIMENSION(:), ALLOCATABLE :: cfm_s_kp
301 TYPE(cp_cfm_type), DIMENSION(:, :), ALLOCATABLE :: cfm_mo_coeff_kp, &
302 cfm_ks_kp
303 TYPE(cp_fm_type), DIMENSION(:), ALLOCATABLE :: fm_g_s, &
304 fm_sigma_x_r
305 TYPE(cp_fm_type), DIMENSION(:, :), ALLOCATABLE :: fm_v_xc_r, &
306 fm_chi_r_t, &
307 fm_mwm_r_t
308 TYPE(cp_fm_type), DIMENSION(:, :, :), ALLOCATABLE :: fm_sigma_c_r_neg_tau, &
309 fm_sigma_c_r_pos_tau
310 REAL(kind=dp), DIMENSION(:, :, :), ALLOCATABLE :: v_xc_n
311 TYPE(dbt_type), ALLOCATABLE, DIMENSION(:, :) :: t_3c_int
312
314
315CONTAINS
316
317! **************************************************************************************************
318!> \brief ...
319!> \param bs_env ...
320! **************************************************************************************************
321 SUBROUTINE bs_env_release(bs_env)
322 TYPE(post_scf_bandstructure_type), POINTER :: bs_env
323
324 CHARACTER(LEN=*), PARAMETER :: routinen = 'bs_env_release'
325
326 INTEGER :: handle
327
328 CALL timeset(routinen, handle)
329
330 cpassert(ASSOCIATED(bs_env))
331
332 CALL safe_kpoints_release(bs_env%kpoints_chi_eps_W)
333 CALL safe_kpoints_release(bs_env%kpoints_DOS)
334 CALL safe_kpoints_release(bs_env%kpoints_scf_desymm)
335 CALL safe_kpoints_release(bs_env%kpoints_scf_desymm_2)
336
337 IF (ALLOCATED(bs_env%wkp_s_p)) DEALLOCATE (bs_env%wkp_s_p)
338 IF (ALLOCATED(bs_env%wkp_no_extra)) DEALLOCATE (bs_env%wkp_no_extra)
339 IF (ALLOCATED(bs_env%l_RI)) DEALLOCATE (bs_env%l_RI)
340 IF (ALLOCATED(bs_env%xkp_special)) DEALLOCATE (bs_env%xkp_special)
341 IF (ALLOCATED(bs_env%imag_time_points)) DEALLOCATE (bs_env%imag_time_points)
342 IF (ALLOCATED(bs_env%imag_time_weights_freq_zero)) DEALLOCATE (bs_env%imag_time_weights_freq_zero)
343 IF (ALLOCATED(bs_env%imag_freq_points)) DEALLOCATE (bs_env%imag_freq_points)
344 IF (ALLOCATED(bs_env%eigenval_scf_Gamma)) DEALLOCATE (bs_env%eigenval_scf_Gamma)
345 IF (ALLOCATED(bs_env%eigenval_scf)) DEALLOCATE (bs_env%eigenval_scf)
346 IF (ALLOCATED(bs_env%eigenval_G0W0)) DEALLOCATE (bs_env%eigenval_G0W0)
347 IF (ALLOCATED(bs_env%eigenval_HF)) DEALLOCATE (bs_env%eigenval_HF)
348 IF (ALLOCATED(bs_env%eigenval_scGW0)) DEALLOCATE (bs_env%eigenval_scGW0)
349 IF (ALLOCATED(bs_env%eigenval_scf_soc)) DEALLOCATE (bs_env%eigenval_scf_soc)
350 IF (ALLOCATED(bs_env%eigenval_G0W0_soc)) DEALLOCATE (bs_env%eigenval_G0W0_soc)
351 IF (ALLOCATED(bs_env%i_ao_start_from_atom)) DEALLOCATE (bs_env%i_ao_start_from_atom)
352 IF (ALLOCATED(bs_env%i_ao_end_from_atom)) DEALLOCATE (bs_env%i_ao_end_from_atom)
353 IF (ALLOCATED(bs_env%i_RI_start_from_atom)) DEALLOCATE (bs_env%i_RI_start_from_atom)
354 IF (ALLOCATED(bs_env%i_RI_end_from_atom)) DEALLOCATE (bs_env%i_RI_end_from_atom)
355 IF (ALLOCATED(bs_env%i_atom_intervals)) DEALLOCATE (bs_env%i_atom_intervals)
356 IF (ALLOCATED(bs_env%j_atom_intervals)) DEALLOCATE (bs_env%j_atom_intervals)
357 IF (ALLOCATED(bs_env%atoms_i_t_group)) DEALLOCATE (bs_env%atoms_i_t_group)
358 IF (ALLOCATED(bs_env%atoms_j_t_group)) DEALLOCATE (bs_env%atoms_j_t_group)
359 IF (ALLOCATED(bs_env%skip_Sigma_occ)) DEALLOCATE (bs_env%skip_Sigma_occ)
360 IF (ALLOCATED(bs_env%skip_Sigma_vir)) DEALLOCATE (bs_env%skip_Sigma_vir)
361 IF (ALLOCATED(bs_env%read_chi)) DEALLOCATE (bs_env%read_chi)
362 IF (ALLOCATED(bs_env%calc_chi)) DEALLOCATE (bs_env%calc_chi)
363 IF (ALLOCATED(bs_env%Sigma_c_exists)) DEALLOCATE (bs_env%Sigma_c_exists)
364 IF (ALLOCATED(bs_env%sizes_AO)) DEALLOCATE (bs_env%sizes_AO)
365 IF (ALLOCATED(bs_env%sizes_RI)) DEALLOCATE (bs_env%sizes_RI)
366 IF (ALLOCATED(bs_env%index_to_cell_3c)) DEALLOCATE (bs_env%index_to_cell_3c)
367 IF (ALLOCATED(bs_env%index_to_cell_Delta_R)) DEALLOCATE (bs_env%index_to_cell_Delta_R)
368 IF (ASSOCIATED(bs_env%cell_to_index_3c)) DEALLOCATE (bs_env%cell_to_index_3c)
369 IF (ASSOCIATED(bs_env%cell_to_index_Delta_R)) DEALLOCATE (bs_env%cell_to_index_Delta_R)
370 IF (ALLOCATED(bs_env%task_Delta_R)) DEALLOCATE (bs_env%task_Delta_R)
371 IF (ALLOCATED(bs_env%nblocks_3c)) DEALLOCATE (bs_env%nblocks_3c)
372 IF (ALLOCATED(bs_env%skip_DR_chi)) DEALLOCATE (bs_env%skip_DR_chi)
373 IF (ALLOCATED(bs_env%skip_DR_Sigma)) DEALLOCATE (bs_env%skip_DR_Sigma)
374 IF (ALLOCATED(bs_env%skip_DR_R_R2_MxM_chi)) DEALLOCATE (bs_env%skip_DR_R_R2_MxM_chi)
375 IF (ALLOCATED(bs_env%skip_DR_R1_R_MxM_Sigma)) DEALLOCATE (bs_env%skip_DR_R1_R_MxM_Sigma)
376 IF (ALLOCATED(bs_env%skip_DR_R12_S_Goccx3c_chi)) DEALLOCATE (bs_env%skip_DR_R12_S_Goccx3c_chi)
377 IF (ALLOCATED(bs_env%skip_DR_R12_S_Gvirx3c_chi)) DEALLOCATE (bs_env%skip_DR_R12_S_Gvirx3c_chi)
378 IF (ALLOCATED(bs_env%skip_DR_R1_S2_Gx3c_Sigma)) DEALLOCATE (bs_env%skip_DR_R1_S2_Gx3c_Sigma)
379
380 CALL cp_fm_release(bs_env%fm_s_Gamma)
381 CALL cp_fm_release(bs_env%fm_ks_Gamma(1))
382 CALL cp_fm_release(bs_env%fm_ks_Gamma(2))
383 CALL cp_fm_release(bs_env%fm_V_xc_Gamma(1))
384 CALL cp_fm_release(bs_env%fm_V_xc_Gamma(2))
385 CALL cp_fm_release(bs_env%fm_mo_coeff_Gamma(1))
386 CALL cp_fm_release(bs_env%fm_mo_coeff_Gamma(2))
387 CALL cp_fm_release(bs_env%fm_Gocc)
388 CALL cp_fm_release(bs_env%fm_Gvir)
389 CALL cp_fm_release(bs_env%fm_work_mo(1))
390 CALL cp_fm_release(bs_env%fm_work_mo(2))
391 CALL cp_fm_release(bs_env%fm_work_mo(3))
392 CALL cp_fm_release(bs_env%fm_work_mo(4))
393 CALL cp_fm_release(bs_env%fm_RI_RI)
394 CALL cp_fm_release(bs_env%fm_chi_Gamma_freq)
395 CALL cp_fm_release(bs_env%fm_W_MIC_freq)
396 IF (bs_env%rtp_method == rtp_method_bse) CALL cp_fm_release(bs_env%fm_W_MIC_freq_zero)
397 CALL cp_fm_release(bs_env%fm_W_MIC_freq_1_extra)
398 CALL cp_fm_release(bs_env%fm_W_MIC_freq_1_no_extra)
399 CALL cp_cfm_release(bs_env%cfm_work_mo)
400 CALL cp_cfm_release(bs_env%cfm_work_mo_2)
401
402 CALL safe_fm_destroy_1d(bs_env%fm_G_S)
403 CALL safe_fm_destroy_1d(bs_env%fm_Sigma_x_R)
404 CALL safe_fm_destroy_2d(bs_env%fm_V_xc_R)
405 CALL safe_fm_destroy_2d(bs_env%fm_chi_R_t)
406 CALL safe_fm_destroy_2d(bs_env%fm_MWM_R_t)
407 CALL safe_fm_destroy_3d(bs_env%fm_Sigma_c_R_neg_tau)
408 CALL safe_fm_destroy_3d(bs_env%fm_Sigma_c_R_pos_tau)
409
410 CALL t_destroy_2d(bs_env%t_3c_int)
411
412 CALL release_dbcsr_p_type(bs_env%mat_ao_ao)
413 CALL release_dbcsr_p_type(bs_env%mat_RI_RI)
414 CALL safe_dbcsr_deallocate_matrix_set_1d(bs_env%mat_chi_Gamma_tau)
415
416 CALL release_dbcsr_p_type(bs_env%mat_ao_ao_tensor)
417 CALL release_dbcsr_p_type(bs_env%mat_RI_RI_tensor)
418
419 CALL safe_cfm_destroy_1d(bs_env%cfm_s_kp)
420 CALL safe_cfm_destroy_2d(bs_env%cfm_ks_kp)
421 CALL safe_cfm_destroy_2d(bs_env%cfm_mo_coeff_kp)
422
423 CALL mp_para_env_release(bs_env%para_env)
424 IF (ASSOCIATED(bs_env%para_env_tensor)) CALL mp_para_env_release(bs_env%para_env_tensor)
425
426 CALL safe_dbt_destroy(bs_env%t_G)
427 CALL safe_dbt_destroy(bs_env%t_chi)
428 CALL safe_dbt_destroy(bs_env%t_W)
429 CALL safe_dbt_destroy(bs_env%t_RI_AO__AO)
430 CALL safe_dbt_destroy(bs_env%t_RI__AO_AO)
431
432 IF (ALLOCATED(bs_env%basis_set_AO)) DEALLOCATE (bs_env%basis_set_AO)
433 IF (ALLOCATED(bs_env%basis_set_RI)) DEALLOCATE (bs_env%basis_set_RI)
434
435 ! SOC cfm_1d and arrays
436 CALL safe_dbcsr_deallocate_matrix_set_2d(bs_env%mat_V_SOC_xyz)
437 CALL cp_fm_release(bs_env%fm_V_SOC_xyz_mo(1))
438 CALL cp_fm_release(bs_env%fm_V_SOC_xyz_mo(2))
439 CALL cp_fm_release(bs_env%fm_V_SOC_xyz_mo(3))
440 CALL safe_cfm_destroy_1d(bs_env%cfm_SOC_spinor_ao)
441
442 DEALLOCATE (bs_env)
443
444 CALL timestop(handle)
445
446 END SUBROUTINE bs_env_release
447
448! **************************************************************************************************
449!> \brief ...
450!> \param kpoints ...
451! **************************************************************************************************
452 SUBROUTINE safe_kpoints_release(kpoints)
453 TYPE(kpoint_type), POINTER :: kpoints
454
455 IF (ASSOCIATED(kpoints)) CALL kpoint_release(kpoints)
456
457 END SUBROUTINE safe_kpoints_release
458
459! **************************************************************************************************
460!> \brief ...
461!> \param dbcsr_p_type_matrix ...
462! **************************************************************************************************
463 SUBROUTINE release_dbcsr_p_type(dbcsr_p_type_matrix)
464 TYPE(dbcsr_p_type) :: dbcsr_p_type_matrix
465
466 IF (ASSOCIATED(dbcsr_p_type_matrix%matrix)) THEN
467 CALL dbcsr_release(dbcsr_p_type_matrix%matrix)
468 DEALLOCATE (dbcsr_p_type_matrix%matrix)
469 END IF
470
471 END SUBROUTINE release_dbcsr_p_type
472
473! **************************************************************************************************
474!> \brief ...
475!> \param t ...
476! **************************************************************************************************
477 SUBROUTINE safe_dbt_destroy(t)
478 TYPE(dbt_type) :: t
479
480 IF (ASSOCIATED(t%matrix_rep)) CALL dbt_destroy(t)
481
482 END SUBROUTINE safe_dbt_destroy
483
484! **************************************************************************************************
485!> \brief ...
486!> \param dbcsr_array ...
487! **************************************************************************************************
488 SUBROUTINE safe_dbcsr_deallocate_matrix_set_1d(dbcsr_array)
489 TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: dbcsr_array
490
491 IF (ASSOCIATED(dbcsr_array)) CALL dbcsr_deallocate_matrix_set(dbcsr_array)
492
493 END SUBROUTINE safe_dbcsr_deallocate_matrix_set_1d
494
495! **************************************************************************************************
496!> \brief ...
497!> \param dbcsr_array ...
498! **************************************************************************************************
499 SUBROUTINE safe_dbcsr_deallocate_matrix_set_2d(dbcsr_array)
500 TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: dbcsr_array
501
502 IF (ASSOCIATED(dbcsr_array)) CALL dbcsr_deallocate_matrix_set(dbcsr_array)
503
504 END SUBROUTINE safe_dbcsr_deallocate_matrix_set_2d
505
506! **************************************************************************************************
507!> \brief ...
508!> \param fm_1d ...
509! **************************************************************************************************
510 SUBROUTINE safe_fm_destroy_1d(fm_1d)
511 TYPE(cp_fm_type), ALLOCATABLE, DIMENSION(:) :: fm_1d
512
513 INTEGER :: i
514
515 IF (ALLOCATED(fm_1d)) THEN
516 DO i = 1, SIZE(fm_1d, 1)
517 CALL cp_fm_release(fm_1d(i))
518 END DO
519 DEALLOCATE (fm_1d)
520 END IF
521
522 END SUBROUTINE safe_fm_destroy_1d
523
524! **************************************************************************************************
525!> \brief ...
526!> \param fm_2d ...
527! **************************************************************************************************
528 SUBROUTINE safe_fm_destroy_2d(fm_2d)
529 TYPE(cp_fm_type), ALLOCATABLE, DIMENSION(:, :) :: fm_2d
530
531 INTEGER :: i, j
532
533 IF (ALLOCATED(fm_2d)) THEN
534 DO i = 1, SIZE(fm_2d, 1)
535 DO j = 1, SIZE(fm_2d, 2)
536 CALL cp_fm_release(fm_2d(i, j))
537 END DO
538 END DO
539 DEALLOCATE (fm_2d)
540 END IF
541
542 END SUBROUTINE safe_fm_destroy_2d
543
544! **************************************************************************************************
545!> \brief ...
546!> \param fm_3d ...
547! **************************************************************************************************
548 SUBROUTINE safe_fm_destroy_3d(fm_3d)
549 TYPE(cp_fm_type), ALLOCATABLE, DIMENSION(:, :, :) :: fm_3d
550
551 INTEGER :: i, j, k
552
553 IF (ALLOCATED(fm_3d)) THEN
554 DO i = 1, SIZE(fm_3d, 1)
555 DO j = 1, SIZE(fm_3d, 2)
556 DO k = 1, SIZE(fm_3d, 3)
557 CALL cp_fm_release(fm_3d(i, j, k))
558 END DO
559 END DO
560 END DO
561 DEALLOCATE (fm_3d)
562 END IF
563
564 END SUBROUTINE safe_fm_destroy_3d
565
566! **************************************************************************************************
567!> \brief ...
568!> \param cfm_1d ...
569! **************************************************************************************************
570 SUBROUTINE safe_cfm_destroy_1d(cfm_1d)
571 TYPE(cp_cfm_type), ALLOCATABLE, DIMENSION(:) :: cfm_1d
572
573 INTEGER :: i
574
575 IF (ALLOCATED(cfm_1d)) THEN
576 DO i = 1, SIZE(cfm_1d, 1)
577 CALL cp_cfm_release(cfm_1d(i))
578 END DO
579 DEALLOCATE (cfm_1d)
580 END IF
581
582 END SUBROUTINE safe_cfm_destroy_1d
583
584! **************************************************************************************************
585!> \brief ...
586!> \param cfm_2d ...
587! **************************************************************************************************
588 SUBROUTINE safe_cfm_destroy_2d(cfm_2d)
589 TYPE(cp_cfm_type), ALLOCATABLE, DIMENSION(:, :) :: cfm_2d
590
591 INTEGER :: i, j
592
593 IF (ALLOCATED(cfm_2d)) THEN
594 DO i = 1, SIZE(cfm_2d, 1)
595 DO j = 1, SIZE(cfm_2d, 2)
596 CALL cp_cfm_release(cfm_2d(i, j))
597 END DO
598 END DO
599 DEALLOCATE (cfm_2d)
600 END IF
601
602 END SUBROUTINE safe_cfm_destroy_2d
603
604! **************************************************************************************************
605!> \brief ...
606!> \param t_2d ...
607! **************************************************************************************************
608 SUBROUTINE t_destroy_2d(t_2d)
609 TYPE(dbt_type), ALLOCATABLE, DIMENSION(:, :) :: t_2d
610
611 INTEGER :: i, j
612
613 IF (ALLOCATED(t_2d)) THEN
614 DO i = 1, SIZE(t_2d, 1)
615 DO j = 1, SIZE(t_2d, 2)
616 CALL dbt_destroy(t_2d(i, j))
617 END DO
618 END DO
619 DEALLOCATE (t_2d)
620 END IF
621
622 END SUBROUTINE t_destroy_2d
623
Represents a complex full matrix distributed on many processors.
subroutine, public cp_cfm_release(matrix)
Releases a full matrix.
subroutine, public dbcsr_release(matrix)
...
DBCSR operations in CP2K.
represent a full matrix distributed on many processors
Definition cp_fm_types.F:15
This is the start of a dbt_api, all publically needed functions are exported here....
Definition dbt_api.F:17
collects all constants needed in input so that they can be used without circular dependencies
integer, parameter, public rtp_method_bse
integer, parameter, public small_cell_full_kp
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
integer, parameter, public default_string_length
Definition kinds.F:57
Types and basic routines needed for a kpoint calculation.
subroutine, public kpoint_release(kpoint)
Release a kpoint environment, deallocate all data.
2- and 3-center electron repulsion integral routines based on libint2 Currently available operators: ...
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 bs_env_release(bs_env)
...
Utility methods to build 3-center integral tensors of various types.
Represent a complex full matrix.
represent a full matrix
Contains information about kpoints.
stores all the informations relevant to an mpi environment