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