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