(git:e5b1968)
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 input_regularization_minimax = -1.0_dp, &
143 regularization_minimax = -1.0_dp, &
144 stabilize_exp = -1.0_dp
145
146 ! filter threshold for matrix-tensor operations
147 REAL(kind=dp) :: eps_filter = -1.0_dp, &
148 eps_atom_grid_2d_mat = -1.0_dp
149
150 ! threshold for inverting ao overlap matrix, RI cfm_1d
151 REAL(kind=dp) :: eps_eigval_mat_s = -1.0_dp, &
152 eps_eigval_mat_ri = -1.0_dp, &
153 input_regularization_ri = -1.0_dp, &
154 regularization_ri = -1.0_dp
155
156 ! global full cfm_1d used in GW
157 TYPE(cp_fm_type) :: fm_s_gamma = cp_fm_type(), &
158 fm_gocc = cp_fm_type(), &
159 fm_gvir = cp_fm_type()
160 TYPE(cp_fm_type), DIMENSION(2) :: fm_ks_gamma = cp_fm_type(), &
161 fm_v_xc_gamma = cp_fm_type(), &
162 fm_mo_coeff_gamma = cp_fm_type()
163 TYPE(cp_fm_type), DIMENSION(4) :: fm_work_mo = cp_fm_type()
164 TYPE(cp_fm_type) :: fm_ri_ri = cp_fm_type(), &
165 fm_chi_gamma_freq = cp_fm_type(), &
166 fm_w_mic_freq = cp_fm_type(), &
167 fm_w_mic_freq_1_extra = cp_fm_type(), &
168 fm_w_mic_freq_1_no_extra = cp_fm_type(), &
169 fm_w_mic_freq_zero = cp_fm_type(), &
170 fm_h_g0w0_gamma = cp_fm_type()
171 TYPE(cp_cfm_type) :: cfm_work_mo = cp_cfm_type(), &
172 cfm_work_mo_2 = cp_cfm_type()
173
174 ! global dbcsr cfm_1d used in GW
175 TYPE(dbcsr_p_type) :: mat_ao_ao = dbcsr_p_type(), &
176 mat_ri_ri = dbcsr_p_type()
177 TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: mat_chi_gamma_tau => null()
178
179 ! local dbcsr cfm_1d used in GW (local in tensor group)
180 TYPE(dbcsr_p_type) :: mat_ao_ao_tensor = dbcsr_p_type(), &
181 mat_ri_ri_tensor = dbcsr_p_type()
182
183 ! tensors for sparse matrix-tensor operations
184#if defined(FTN_NO_DEFAULT_INIT)
185 TYPE(dbt_type) :: t_g, &
186 t_chi, &
187 t_w, &
188 t_ri_ao__ao, &
189 t_ri__ao_ao
190#else
191 TYPE(dbt_type) :: t_g = dbt_type(), &
192 t_chi = dbt_type(), &
193 t_w = dbt_type(), &
194 t_ri_ao__ao = dbt_type(), &
195 t_ri__ao_ao = dbt_type()
196#endif
197
198 ! parameters and data for parallelization
199 INTEGER :: group_size_tensor = -1, &
200 tensor_group_color = -1, &
201 num_tensor_groups = -1
202 REAL(kind=dp) :: input_memory_per_proc_gb = -1.0_dp
203 TYPE(mp_para_env_type), POINTER :: para_env => null(), &
204 para_env_tensor => null()
205 REAL(kind=dp) :: occupation_3c_int = -1.0_dp, &
206 max_dist_ao_atoms = -1.0_dp, &
207 safety_factor_memory = -1.0_dp
208
209 ! parallelization: atom range i and atom range j for tensor group
210 INTEGER, DIMENSION(2) :: atoms_i = -1, &
211 atoms_j = -1
212 INTEGER :: n_atom_i = -1, &
213 n_intervals_i = -1, &
214 n_atom_j = -1, &
215 n_intervals_j = -1, &
216 n_atom_per_interval_ij = -1, &
217 n_intervals_inner_loop_atoms = -1, &
218 n_atom_per_il_interval = -1
219 INTEGER, DIMENSION(:, :), ALLOCATABLE :: i_atom_intervals, &
220 j_atom_intervals, &
221 inner_loop_atom_intervals, &
222 atoms_i_t_group, &
223 atoms_j_t_group
224 LOGICAL, DIMENSION(:, :), ALLOCATABLE :: skip_sigma_occ, &
225 skip_sigma_vir
226 ! Marek : rtbse_method
227 INTEGER :: rtp_method = rtp_method_bse
228
229 ! check-arrays and names for restarting
230 LOGICAL, DIMENSION(:), ALLOCATABLE :: read_chi, &
231 calc_chi
232 LOGICAL, DIMENSION(:, :), ALLOCATABLE :: sigma_c_exists
233 LOGICAL :: all_w_exist = .false., &
234 sigma_x_exists = .false.
235 CHARACTER(LEN=3) :: chi_name = "chi"
236 CHARACTER(LEN=6) :: w_time_name = "W_time"
237 CHARACTER(LEN=7) :: sigma_x_name = "Sigma_x"
238 CHARACTER(LEN=13) :: sigma_p_name = "Sigma_pos_tau", &
239 sigma_n_name = "Sigma_neg_tau"
240 CHARACTER(LEN=default_string_length) :: prefix = ""
241 INTEGER :: unit_nr = -1
242
243 ! parameters and data for basis sets
245 DIMENSION(:), ALLOCATABLE :: basis_set_ao, &
246 basis_set_ri
247 INTEGER, DIMENSION(:), ALLOCATABLE :: sizes_ao, &
248 sizes_ri
251 trunc_coulomb = libint_potential_type()
252
253 ! parameters for SOC calculation
254 REAL(kind=dp) :: energy_window_soc = -1.0_dp
255 ! sizes: mat_V_SOC_xyz: xyz, img
256 TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: mat_v_soc_xyz => null()
257 TYPE(cp_fm_type), DIMENSION(3) :: fm_v_soc_xyz_mo = cp_fm_type()
258 ! small-cell GW: dimension = number of kpoints; large-cell GW: Gamma-point, dimension = 1
259 TYPE(cp_cfm_type), DIMENSION(:), ALLOCATABLE :: cfm_soc_spinor_ao
260 TYPE(band_edges_type) :: band_edges_scf_soc = band_edges_type(), &
261 band_edges_g0w0_soc = band_edges_type()
262
263 ! parameters for DOS and PDOS calculation
264 REAL(kind=dp) :: energy_window_dos = -1.0_dp, &
265 energy_step_dos = -1.0_dp, &
266 broadening_dos = -1.0_dp
267
268 ! parameters for LDOS calculation (LDOS: local density of states)
269 INTEGER :: int_ldos_xyz = -1
270 INTEGER, DIMENSION(:), POINTER :: bin_mesh => null()
271 INTEGER :: n_bins_max_for_printing = -1
272 REAL(kind=dp) :: unit_ldos_int_z_inv_ang2_ev = -1.0_dp
273
274 ! quantities only needed for small cells and k-point sampling in DFT (small_cell_full_kp)
275 INTEGER :: nkp_scf_desymm = -1, &
276 nimages_3c = -1, &
277 nimages_scf_desymm = -1, &
278 nimages_delta_r = -1
279 TYPE(kpoint_type), POINTER :: kpoints_scf_desymm => null(), &
280 kpoints_scf_desymm_2 => null()
281 INTEGER, DIMENSION(3) :: cell_grid_scf_desymm = -1
282 INTEGER, DIMENSION(:, :), ALLOCATABLE :: index_to_cell_3c, &
283 index_to_cell_delta_r
284 INTEGER, DIMENSION(:, :, :), POINTER :: cell_to_index_3c => null(), &
285 cell_to_index_delta_r => null()
286 REAL(kind=dp) :: heuristic_filter_factor = -1.0_dp
287
288 ! small_cell_full_kp parallelization
289 INTEGER :: n_tasks_delta_r_local = -1
290 INTEGER, DIMENSION(:), ALLOCATABLE :: task_delta_r
291 INTEGER, DIMENSION(:, :), ALLOCATABLE :: nblocks_3c
292 LOGICAL, DIMENSION(:), ALLOCATABLE :: skip_dr_chi, &
293 skip_dr_sigma
294 LOGICAL, DIMENSION(:, :, :), ALLOCATABLE :: skip_dr_r_r2_mxm_chi, &
295 skip_dr_r1_r_mxm_sigma, &
296 skip_dr_r12_s_goccx3c_chi, &
297 skip_dr_r12_s_gvirx3c_chi, &
298 skip_dr_r1_s2_gx3c_sigma
299
300 ! cfm for k-dep overl mat S_µν(k), KS mat h_µν(k,spin) and mo coeff C_μn(k,spin) from SCF
301 TYPE(cp_cfm_type), DIMENSION(:), ALLOCATABLE :: cfm_s_kp
302 TYPE(cp_cfm_type), DIMENSION(:, :), ALLOCATABLE :: cfm_mo_coeff_kp, &
303 cfm_ks_kp
304 TYPE(cp_fm_type), DIMENSION(:), ALLOCATABLE :: fm_g_s, &
305 fm_sigma_x_r
306 TYPE(cp_fm_type), DIMENSION(:, :), ALLOCATABLE :: fm_v_xc_r, &
307 fm_chi_r_t, &
308 fm_mwm_r_t
309 TYPE(cp_fm_type), DIMENSION(:, :, :), ALLOCATABLE :: fm_sigma_c_r_neg_tau, &
310 fm_sigma_c_r_pos_tau
311 REAL(kind=dp), DIMENSION(:, :, :), ALLOCATABLE :: v_xc_n
312 TYPE(dbt_type), ALLOCATABLE, DIMENSION(:, :) :: t_3c_int
313
315
316CONTAINS
317
318! **************************************************************************************************
319!> \brief ...
320!> \param bs_env ...
321! **************************************************************************************************
322 SUBROUTINE bs_env_release(bs_env)
323 TYPE(post_scf_bandstructure_type), POINTER :: bs_env
324
325 CHARACTER(LEN=*), PARAMETER :: routinen = 'bs_env_release'
326
327 INTEGER :: handle
328
329 CALL timeset(routinen, handle)
330
331 cpassert(ASSOCIATED(bs_env))
332
333 CALL safe_kpoints_release(bs_env%kpoints_chi_eps_W)
334 CALL safe_kpoints_release(bs_env%kpoints_DOS)
335 CALL safe_kpoints_release(bs_env%kpoints_scf_desymm)
336 CALL safe_kpoints_release(bs_env%kpoints_scf_desymm_2)
337
338 IF (ALLOCATED(bs_env%wkp_s_p)) DEALLOCATE (bs_env%wkp_s_p)
339 IF (ALLOCATED(bs_env%wkp_no_extra)) DEALLOCATE (bs_env%wkp_no_extra)
340 IF (ALLOCATED(bs_env%l_RI)) DEALLOCATE (bs_env%l_RI)
341 IF (ALLOCATED(bs_env%xkp_special)) DEALLOCATE (bs_env%xkp_special)
342 IF (ALLOCATED(bs_env%imag_time_points)) DEALLOCATE (bs_env%imag_time_points)
343 IF (ALLOCATED(bs_env%imag_time_weights_freq_zero)) DEALLOCATE (bs_env%imag_time_weights_freq_zero)
344 IF (ALLOCATED(bs_env%imag_freq_points)) DEALLOCATE (bs_env%imag_freq_points)
345 IF (ALLOCATED(bs_env%eigenval_scf_Gamma)) DEALLOCATE (bs_env%eigenval_scf_Gamma)
346 IF (ALLOCATED(bs_env%eigenval_scf)) DEALLOCATE (bs_env%eigenval_scf)
347 IF (ALLOCATED(bs_env%eigenval_G0W0)) DEALLOCATE (bs_env%eigenval_G0W0)
348 IF (ALLOCATED(bs_env%eigenval_HF)) DEALLOCATE (bs_env%eigenval_HF)
349 IF (ALLOCATED(bs_env%eigenval_scGW0)) DEALLOCATE (bs_env%eigenval_scGW0)
350 IF (ALLOCATED(bs_env%eigenval_scf_soc)) DEALLOCATE (bs_env%eigenval_scf_soc)
351 IF (ALLOCATED(bs_env%eigenval_G0W0_soc)) DEALLOCATE (bs_env%eigenval_G0W0_soc)
352 IF (ALLOCATED(bs_env%i_ao_start_from_atom)) DEALLOCATE (bs_env%i_ao_start_from_atom)
353 IF (ALLOCATED(bs_env%i_ao_end_from_atom)) DEALLOCATE (bs_env%i_ao_end_from_atom)
354 IF (ALLOCATED(bs_env%i_RI_start_from_atom)) DEALLOCATE (bs_env%i_RI_start_from_atom)
355 IF (ALLOCATED(bs_env%i_RI_end_from_atom)) DEALLOCATE (bs_env%i_RI_end_from_atom)
356 IF (ALLOCATED(bs_env%i_atom_intervals)) DEALLOCATE (bs_env%i_atom_intervals)
357 IF (ALLOCATED(bs_env%j_atom_intervals)) DEALLOCATE (bs_env%j_atom_intervals)
358 IF (ALLOCATED(bs_env%atoms_i_t_group)) DEALLOCATE (bs_env%atoms_i_t_group)
359 IF (ALLOCATED(bs_env%atoms_j_t_group)) DEALLOCATE (bs_env%atoms_j_t_group)
360 IF (ALLOCATED(bs_env%skip_Sigma_occ)) DEALLOCATE (bs_env%skip_Sigma_occ)
361 IF (ALLOCATED(bs_env%skip_Sigma_vir)) DEALLOCATE (bs_env%skip_Sigma_vir)
362 IF (ALLOCATED(bs_env%read_chi)) DEALLOCATE (bs_env%read_chi)
363 IF (ALLOCATED(bs_env%calc_chi)) DEALLOCATE (bs_env%calc_chi)
364 IF (ALLOCATED(bs_env%Sigma_c_exists)) DEALLOCATE (bs_env%Sigma_c_exists)
365 IF (ALLOCATED(bs_env%sizes_AO)) DEALLOCATE (bs_env%sizes_AO)
366 IF (ALLOCATED(bs_env%sizes_RI)) DEALLOCATE (bs_env%sizes_RI)
367 IF (ALLOCATED(bs_env%index_to_cell_3c)) DEALLOCATE (bs_env%index_to_cell_3c)
368 IF (ALLOCATED(bs_env%index_to_cell_Delta_R)) DEALLOCATE (bs_env%index_to_cell_Delta_R)
369 IF (ASSOCIATED(bs_env%cell_to_index_3c)) DEALLOCATE (bs_env%cell_to_index_3c)
370 IF (ASSOCIATED(bs_env%cell_to_index_Delta_R)) DEALLOCATE (bs_env%cell_to_index_Delta_R)
371 IF (ALLOCATED(bs_env%task_Delta_R)) DEALLOCATE (bs_env%task_Delta_R)
372 IF (ALLOCATED(bs_env%nblocks_3c)) DEALLOCATE (bs_env%nblocks_3c)
373 IF (ALLOCATED(bs_env%skip_DR_chi)) DEALLOCATE (bs_env%skip_DR_chi)
374 IF (ALLOCATED(bs_env%skip_DR_Sigma)) DEALLOCATE (bs_env%skip_DR_Sigma)
375 IF (ALLOCATED(bs_env%skip_DR_R_R2_MxM_chi)) DEALLOCATE (bs_env%skip_DR_R_R2_MxM_chi)
376 IF (ALLOCATED(bs_env%skip_DR_R1_R_MxM_Sigma)) DEALLOCATE (bs_env%skip_DR_R1_R_MxM_Sigma)
377 IF (ALLOCATED(bs_env%skip_DR_R12_S_Goccx3c_chi)) DEALLOCATE (bs_env%skip_DR_R12_S_Goccx3c_chi)
378 IF (ALLOCATED(bs_env%skip_DR_R12_S_Gvirx3c_chi)) DEALLOCATE (bs_env%skip_DR_R12_S_Gvirx3c_chi)
379 IF (ALLOCATED(bs_env%skip_DR_R1_S2_Gx3c_Sigma)) DEALLOCATE (bs_env%skip_DR_R1_S2_Gx3c_Sigma)
380
381 CALL cp_fm_release(bs_env%fm_s_Gamma)
382 CALL cp_fm_release(bs_env%fm_ks_Gamma(1))
383 CALL cp_fm_release(bs_env%fm_ks_Gamma(2))
384 CALL cp_fm_release(bs_env%fm_V_xc_Gamma(1))
385 CALL cp_fm_release(bs_env%fm_V_xc_Gamma(2))
386 CALL cp_fm_release(bs_env%fm_mo_coeff_Gamma(1))
387 CALL cp_fm_release(bs_env%fm_mo_coeff_Gamma(2))
388 CALL cp_fm_release(bs_env%fm_Gocc)
389 CALL cp_fm_release(bs_env%fm_Gvir)
390 CALL cp_fm_release(bs_env%fm_work_mo(1))
391 CALL cp_fm_release(bs_env%fm_work_mo(2))
392 CALL cp_fm_release(bs_env%fm_work_mo(3))
393 CALL cp_fm_release(bs_env%fm_work_mo(4))
394 CALL cp_fm_release(bs_env%fm_RI_RI)
395 CALL cp_fm_release(bs_env%fm_chi_Gamma_freq)
396 CALL cp_fm_release(bs_env%fm_W_MIC_freq)
397 IF (bs_env%rtp_method == rtp_method_bse) CALL cp_fm_release(bs_env%fm_W_MIC_freq_zero)
398 CALL cp_fm_release(bs_env%fm_W_MIC_freq_1_extra)
399 CALL cp_fm_release(bs_env%fm_W_MIC_freq_1_no_extra)
400 CALL cp_cfm_release(bs_env%cfm_work_mo)
401 CALL cp_cfm_release(bs_env%cfm_work_mo_2)
402
403 CALL safe_fm_destroy_1d(bs_env%fm_G_S)
404 CALL safe_fm_destroy_1d(bs_env%fm_Sigma_x_R)
405 CALL safe_fm_destroy_2d(bs_env%fm_V_xc_R)
406 CALL safe_fm_destroy_2d(bs_env%fm_chi_R_t)
407 CALL safe_fm_destroy_2d(bs_env%fm_MWM_R_t)
408 CALL safe_fm_destroy_3d(bs_env%fm_Sigma_c_R_neg_tau)
409 CALL safe_fm_destroy_3d(bs_env%fm_Sigma_c_R_pos_tau)
410
411 CALL t_destroy_2d(bs_env%t_3c_int)
412
413 CALL release_dbcsr_p_type(bs_env%mat_ao_ao)
414 CALL release_dbcsr_p_type(bs_env%mat_RI_RI)
415 CALL safe_dbcsr_deallocate_matrix_set_1d(bs_env%mat_chi_Gamma_tau)
416
417 CALL release_dbcsr_p_type(bs_env%mat_ao_ao_tensor)
418 CALL release_dbcsr_p_type(bs_env%mat_RI_RI_tensor)
419
420 CALL safe_cfm_destroy_1d(bs_env%cfm_s_kp)
421 CALL safe_cfm_destroy_2d(bs_env%cfm_ks_kp)
422 CALL safe_cfm_destroy_2d(bs_env%cfm_mo_coeff_kp)
423
424 CALL mp_para_env_release(bs_env%para_env)
425 IF (ASSOCIATED(bs_env%para_env_tensor)) CALL mp_para_env_release(bs_env%para_env_tensor)
426
427 CALL safe_dbt_destroy(bs_env%t_G)
428 CALL safe_dbt_destroy(bs_env%t_chi)
429 CALL safe_dbt_destroy(bs_env%t_W)
430 CALL safe_dbt_destroy(bs_env%t_RI_AO__AO)
431 CALL safe_dbt_destroy(bs_env%t_RI__AO_AO)
432
433 IF (ALLOCATED(bs_env%basis_set_AO)) DEALLOCATE (bs_env%basis_set_AO)
434 IF (ALLOCATED(bs_env%basis_set_RI)) DEALLOCATE (bs_env%basis_set_RI)
435
436 ! SOC cfm_1d and arrays
437 CALL safe_dbcsr_deallocate_matrix_set_2d(bs_env%mat_V_SOC_xyz)
438 CALL cp_fm_release(bs_env%fm_V_SOC_xyz_mo(1))
439 CALL cp_fm_release(bs_env%fm_V_SOC_xyz_mo(2))
440 CALL cp_fm_release(bs_env%fm_V_SOC_xyz_mo(3))
441 CALL safe_cfm_destroy_1d(bs_env%cfm_SOC_spinor_ao)
442
443 DEALLOCATE (bs_env)
444
445 CALL timestop(handle)
446
447 END SUBROUTINE bs_env_release
448
449! **************************************************************************************************
450!> \brief ...
451!> \param kpoints ...
452! **************************************************************************************************
453 SUBROUTINE safe_kpoints_release(kpoints)
454 TYPE(kpoint_type), POINTER :: kpoints
455
456 IF (ASSOCIATED(kpoints)) CALL kpoint_release(kpoints)
457
458 END SUBROUTINE safe_kpoints_release
459
460! **************************************************************************************************
461!> \brief ...
462!> \param dbcsr_p_type_matrix ...
463! **************************************************************************************************
464 SUBROUTINE release_dbcsr_p_type(dbcsr_p_type_matrix)
465 TYPE(dbcsr_p_type) :: dbcsr_p_type_matrix
466
467 IF (ASSOCIATED(dbcsr_p_type_matrix%matrix)) THEN
468 CALL dbcsr_release(dbcsr_p_type_matrix%matrix)
469 DEALLOCATE (dbcsr_p_type_matrix%matrix)
470 END IF
471
472 END SUBROUTINE release_dbcsr_p_type
473
474! **************************************************************************************************
475!> \brief ...
476!> \param t ...
477! **************************************************************************************************
478 SUBROUTINE safe_dbt_destroy(t)
479 TYPE(dbt_type) :: t
480
481 IF (ASSOCIATED(t%matrix_rep)) CALL dbt_destroy(t)
482
483 END SUBROUTINE safe_dbt_destroy
484
485! **************************************************************************************************
486!> \brief ...
487!> \param dbcsr_array ...
488! **************************************************************************************************
489 SUBROUTINE safe_dbcsr_deallocate_matrix_set_1d(dbcsr_array)
490 TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: dbcsr_array
491
492 IF (ASSOCIATED(dbcsr_array)) CALL dbcsr_deallocate_matrix_set(dbcsr_array)
493
494 END SUBROUTINE safe_dbcsr_deallocate_matrix_set_1d
495
496! **************************************************************************************************
497!> \brief ...
498!> \param dbcsr_array ...
499! **************************************************************************************************
500 SUBROUTINE safe_dbcsr_deallocate_matrix_set_2d(dbcsr_array)
501 TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: dbcsr_array
502
503 IF (ASSOCIATED(dbcsr_array)) CALL dbcsr_deallocate_matrix_set(dbcsr_array)
504
505 END SUBROUTINE safe_dbcsr_deallocate_matrix_set_2d
506
507! **************************************************************************************************
508!> \brief ...
509!> \param fm_1d ...
510! **************************************************************************************************
511 SUBROUTINE safe_fm_destroy_1d(fm_1d)
512 TYPE(cp_fm_type), ALLOCATABLE, DIMENSION(:) :: fm_1d
513
514 INTEGER :: i
515
516 IF (ALLOCATED(fm_1d)) THEN
517 DO i = 1, SIZE(fm_1d, 1)
518 CALL cp_fm_release(fm_1d(i))
519 END DO
520 DEALLOCATE (fm_1d)
521 END IF
522
523 END SUBROUTINE safe_fm_destroy_1d
524
525! **************************************************************************************************
526!> \brief ...
527!> \param fm_2d ...
528! **************************************************************************************************
529 SUBROUTINE safe_fm_destroy_2d(fm_2d)
530 TYPE(cp_fm_type), ALLOCATABLE, DIMENSION(:, :) :: fm_2d
531
532 INTEGER :: i, j
533
534 IF (ALLOCATED(fm_2d)) THEN
535 DO i = 1, SIZE(fm_2d, 1)
536 DO j = 1, SIZE(fm_2d, 2)
537 CALL cp_fm_release(fm_2d(i, j))
538 END DO
539 END DO
540 DEALLOCATE (fm_2d)
541 END IF
542
543 END SUBROUTINE safe_fm_destroy_2d
544
545! **************************************************************************************************
546!> \brief ...
547!> \param fm_3d ...
548! **************************************************************************************************
549 SUBROUTINE safe_fm_destroy_3d(fm_3d)
550 TYPE(cp_fm_type), ALLOCATABLE, DIMENSION(:, :, :) :: fm_3d
551
552 INTEGER :: i, j, k
553
554 IF (ALLOCATED(fm_3d)) THEN
555 DO i = 1, SIZE(fm_3d, 1)
556 DO j = 1, SIZE(fm_3d, 2)
557 DO k = 1, SIZE(fm_3d, 3)
558 CALL cp_fm_release(fm_3d(i, j, k))
559 END DO
560 END DO
561 END DO
562 DEALLOCATE (fm_3d)
563 END IF
564
565 END SUBROUTINE safe_fm_destroy_3d
566
567! **************************************************************************************************
568!> \brief ...
569!> \param cfm_1d ...
570! **************************************************************************************************
571 SUBROUTINE safe_cfm_destroy_1d(cfm_1d)
572 TYPE(cp_cfm_type), ALLOCATABLE, DIMENSION(:) :: cfm_1d
573
574 INTEGER :: i
575
576 IF (ALLOCATED(cfm_1d)) THEN
577 DO i = 1, SIZE(cfm_1d, 1)
578 CALL cp_cfm_release(cfm_1d(i))
579 END DO
580 DEALLOCATE (cfm_1d)
581 END IF
582
583 END SUBROUTINE safe_cfm_destroy_1d
584
585! **************************************************************************************************
586!> \brief ...
587!> \param cfm_2d ...
588! **************************************************************************************************
589 SUBROUTINE safe_cfm_destroy_2d(cfm_2d)
590 TYPE(cp_cfm_type), ALLOCATABLE, DIMENSION(:, :) :: cfm_2d
591
592 INTEGER :: i, j
593
594 IF (ALLOCATED(cfm_2d)) THEN
595 DO i = 1, SIZE(cfm_2d, 1)
596 DO j = 1, SIZE(cfm_2d, 2)
597 CALL cp_cfm_release(cfm_2d(i, j))
598 END DO
599 END DO
600 DEALLOCATE (cfm_2d)
601 END IF
602
603 END SUBROUTINE safe_cfm_destroy_2d
604
605! **************************************************************************************************
606!> \brief ...
607!> \param t_2d ...
608! **************************************************************************************************
609 SUBROUTINE t_destroy_2d(t_2d)
610 TYPE(dbt_type), ALLOCATABLE, DIMENSION(:, :) :: t_2d
611
612 INTEGER :: i, j
613
614 IF (ALLOCATED(t_2d)) THEN
615 DO i = 1, SIZE(t_2d, 1)
616 DO j = 1, SIZE(t_2d, 2)
617 CALL dbt_destroy(t_2d(i, j))
618 END DO
619 END DO
620 DEALLOCATE (t_2d)
621 END IF
622
623 END SUBROUTINE t_destroy_2d
624
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