(git:24d69ee)
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! **************************************************************************************************
16 USE cell_types, ONLY: cell_type
17 USE cp_cfm_types, ONLY: cp_cfm_release,&
19 USE cp_dbcsr_api, ONLY: dbcsr_p_type,&
23 USE cp_fm_types, ONLY: cp_fm_release,&
25 USE dbt_api, ONLY: dbt_destroy,&
26 dbt_type
27 USE input_constants, ONLY: g0w0,&
31 USE kinds, ONLY: default_path_length,&
33 dp,&
34 int_4,&
35 int_8
36 USE kpoint_types, ONLY: kpoint_release,&
38 USE libint_2c_3c, ONLY: libint_potential_type
42 USE physcon, ONLY: angstrom,&
43 evolt
45#include "./base/base_uses.f90"
46
47 IMPLICIT NONE
48
49 PRIVATE
50
51 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'post_scf_bandstructure_types'
52
55
56 ! valence band maximum (VBM), conduction band minimum (CBM), direct band gap (DBG),
57 ! indirect band gap (IDBG)
59 REAL(kind=dp) :: vbm = -1.0_dp, &
60 cbm = -1.0_dp, &
61 dbg = -1.0_dp, &
62 idbg = -1.0_dp
63 END TYPE band_edges_type
64
65 ! data type for storing 3-index quantities for small-cell, full-k-points GW code
67 REAL(kind=dp), DIMENSION(:, :, :), ALLOCATABLE :: data_3
68 END TYPE data_3_type
69
70 ! data types for GW RI-RS code
72 INTEGER :: npts = 0
73 REAL(kind=dp), ALLOCATABLE :: raw_points(:, :)
74 END TYPE rirs_grid_type
75
76 ! Input for the optional in-memory GW RI-RS grid optimization.
78 LOGICAL :: enabled = .false.
79 REAL(kind=dp) :: cutoff_atomic_cluster = 3.0_dp/angstrom
80 INTEGER :: max_iter = 100
81 CHARACTER(LEN=2), ALLOCATABLE :: grid_elements(:)
82 INTEGER, ALLOCATABLE :: grid_npoints(:)
83 END TYPE ri_rs_grid_opt_type
84
86
87 ! Input parameters for RI-RS
88 INTEGER :: grid_select = 1
89 REAL(kind=dp) :: tikhonov = 1.0e-08_dp
90 REAL(kind=dp) :: cutoff_radius_ri_rs = -1.0_dp
91 REAL(kind=dp) :: cutoff_radius_ri_ao = -1.0_dp
92 INTEGER :: n_procs_per_atom_z_lp = -1
93 INTEGER :: n_panels = 1
94 LOGICAL :: keep_sparsity_rirs = .true.
95 REAL(kind=dp) :: cutoff_radius_v_w = -1.0_dp
96 REAL(kind=dp) :: cutoff_radius_g_w = -1.0_dp
97 CHARACTER(LEN=default_string_length) :: grid_file_suffix = ""
98 TYPE(ri_rs_grid_opt_type) :: grid_opt
99
100 ! Non-owning geometry references used by RI-RS grid setup and optimization.
101 ! They remain owned by qs_env and must never be deallocated here.
102 TYPE(cell_type), POINTER :: cell => null()
103 TYPE(particle_type), DIMENSION(:), POINTER :: particle_set => null()
104 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set => null()
105
106 ! Eigenvalue self-consistency (evGW0): G is rebuilt from the quasiparticle energies of
107 ! the previous cycle while W stays frozen at the RPA@DFT level.
108 INTEGER :: evgw0_iter = 20
109 REAL(kind=dp) :: evgw0_eps_iter = 5.0e-5_dp
110 ! index of the running evGW0 cycle
111 INTEGER :: evgw0_i_iter = 0
112
113 ! Data types for cutoffs based DBCSR matrices
114 REAL(kind=dp), ALLOCATABLE :: chunk_centroids(:, :)
115 REAL(kind=dp), ALLOCATABLE :: atom_centers(:, :)
116 INTEGER, ALLOCATABLE :: grid_atom_boundaries(:)
117 INTEGER, ALLOCATABLE :: pan_first(:), pan_last(:)
118
119 ! Atom-specific grids used directly by the GW grid assembler
120 TYPE(rirs_grid_type), ALLOCATABLE :: grid_cache(:)
121
122 ! Data types for storing RI-RS matrices
123 TYPE(dbcsr_type) :: mat_phi_mu_l
124 TYPE(dbcsr_type) :: mat_z_lp
125 REAL(kind=dp), ALLOCATABLE :: grid_points(:, :)
126 LOGICAL :: z_lp_exists = .false.
127
128 ! Per-atom spatial extent of the most diffuse Gaussian primitive in each basis
129 REAL(kind=dp), ALLOCATABLE :: radius_ao_per_atom(:)
130 REAL(kind=dp), ALLOCATABLE :: radius_ri_per_atom(:)
131
132 ! Precomputed grid-basis kernels for RT-BSE
133 ! mat_V_aux_rtbse(P, Q) = truncated-Coulomb V_PQ with M^-1 sandwich (RI x RI);
134 ! the Hartree grid kernel Z V Z^T is applied factorized, never materialized
135 ! mat_W0_grid_rtbse(l, l') = sum_PQ Z_lP W^{w=0}_PQ Z_l'Q
136 TYPE(dbcsr_type) :: mat_v_aux_rtbse
137 TYPE(dbcsr_type) :: mat_w0_grid_rtbse
138 LOGICAL :: rtbse_kernels_ready = .false.
139 ! RTBSE%EPS_FILTER_RHO: cuts Delta-rho_AO in compute_sigma_ri_rs, upstream of the projection
140 ! the Hartree shares, so it cuts SEX and Hartree alike.
141 REAL(kind=dp) :: eps_filter_rho = -1.0_dp
142 ! RTBSE%CUTOFF_RADIUS_W0 (bohr): drops grid block pairs of W0 beyond this centroid distance.
143 ! BSE-kernel-only -- the GW quasiparticle energies use their own &GW CUTOFF_RADIUS_* family.
144 REAL(kind=dp) :: cutoff_radius_w0 = -1.0_dp
145 ! Set TRUE once mat_phi_mu_l and mat_Z_lP have been populated in memory (by GW RI-RS
146 ! or on-demand by the RT-BSE RI-RS kernel path).
147 LOGICAL :: grid_built = .false.
148 ! Independent toggles for V_grid / W0_grid availability
149 LOGICAL :: v_grid_built = .false.
150 LOGICAL :: w0_grid_built = .false.
151
152 END TYPE ri_rs_env
153
155
156 ! decide which calculations will be done
157 LOGICAL :: do_gw = .false., &
158 do_soc = .false., &
159 do_ldos = .false., &
160 do_gw_ri_rs = .false., &
161 do_dos_pdos = .false., &
162 do_floquet = .false.
163
164 ! various eigenvalues computed in GW code, some depend on k-points
165 ! and have therefore three dimensions (band index, k-point, spin)
166 !
167 ! eigenval_GW carries the quasiparticle energies of the highest-level GW flavour requested
168 ! eigenval_G0W0 - the G0W0 result
169 ! eigenval_evGW0 - the evGW0 result
170 REAL(kind=dp), DIMENSION(:, :), ALLOCATABLE :: eigenval_scf_gamma
171 REAL(kind=dp), DIMENSION(:, :, :), ALLOCATABLE :: eigenval_scf, &
172 eigenval_gw, &
173 eigenval_g0w0, &
174 eigenval_evgw0, &
175 eigenval_hf
176 TYPE(band_edges_type), DIMENSION(2) :: band_edges_scf_gamma = band_edges_type()
177 TYPE(band_edges_type) :: band_edges_scf = band_edges_type(), &
178 band_edges_gw = band_edges_type(), &
179 band_edges_hf = band_edges_type()
180
181 ! parameters that influence the GW flavor
182 LOGICAL :: do_hedin_shift = .false.
183 ! which GW flavour was requested; constants from input_constants (G0W0, evGW0, ...)
184 INTEGER :: gw_flavour = g0w0
185
186 ! parameters for RI-RS implementation of GW
187 TYPE(ri_rs_env) :: ri_rs
188
189 ! DBCSR ships each rank's matrix panel in one MPI message whose length is stored in a
190 ! 32-bit default INTEGER (dbcsr_mpiwrap.F: msglen = SIZE(buffer)). Exceeding this ceiling
191 ! overflows the count to a negative/garbage value and multiply_cannon segfaults. This is
192 ! that hard limit in elements (= HUGE(int_4) = 2^31-1), the same bound DBCSR uses
193 ! internally as mp_max_memory_size. Panel sizing keeps every per-rank message below it.
194 INTEGER(KIND=int_8) :: dbcsr_msg_elem_limit = &
195 int(huge(0_int_4), int_8)
196
197 ! general parameters on molecular orbitals and basis sets
198 ! Number of real states; entries above it are linear-dependency placeholders, not states.
199 INTEGER :: n_mo_retained = -1
200 INTEGER :: n_ao = -1, &
201 n_ri = -1, &
202 n_spin = -1, &
203 n_atom = -1, &
204 max_ao_bf_per_atom = -1
205 INTEGER, DIMENSION(:), ALLOCATABLE :: i_ao_start_from_atom, &
206 i_ao_end_from_atom, &
207 i_ri_start_from_atom, &
208 i_ri_end_from_atom
209 INTEGER, DIMENSION(:, :), ALLOCATABLE :: min_ri_idx_from_ao_ao_atom, &
210 max_ri_idx_from_ao_ao_atom, &
211 min_ao_idx_from_ri_ao_atom, &
212 max_ao_idx_from_ri_ao_atom
213 INTEGER, DIMENSION(2) :: n_occ = -1, &
214 n_vir = -1
215 REAL(kind=dp) :: spin_degeneracy = -1.0_dp
216 REAL(kind=dp), DIMENSION(2) :: e_fermi = -1.0_dp
217
218 ! kpoint mesh for chi, eps, W
219 INTEGER, DIMENSION(:), POINTER :: nkp_grid_dos_input => null(), &
220 nkp_grid_chi_eps_w_input => null()
221 INTEGER, DIMENSION(3) :: nkp_grid_chi_eps_w_orig = -1, &
222 nkp_grid_chi_eps_w_extra = -1
223 INTEGER :: nkp_chi_eps_w_orig = -1, &
224 nkp_chi_eps_w_extra = -1, &
225 nkp_chi_eps_w_orig_plus_extra = -1, &
226 nkp_chi_eps_w_batch = -1, &
227 num_chi_eps_w_batches = -1, &
228 size_lattice_sum_v = -1
229 TYPE(kpoint_type), POINTER :: kpoints_chi_eps_w => null(), &
230 kpoints_dos => null()
231 LOGICAL :: approx_kp_extrapol = .false.
232
233 REAL(kind=dp) :: wkp_orig = -1.0_dp
234 REAL(kind=dp), DIMENSION(:), ALLOCATABLE :: wkp_s_p, &
235 wkp_no_extra
236 INTEGER, DIMENSION(:), ALLOCATABLE :: l_ri
237 INTEGER :: input_kp_bs_npoints = -1, &
238 input_kp_bs_n_sp_pts = -1, &
239 nkp_bs_and_dos = -1, &
240 nkp_only_bs = -1, &
241 nkp_only_dos = -1
242 REAL(kind=dp), DIMENSION(:, :), ALLOCATABLE :: xkp_special
243
244 ! parameters for GW band structure calculation of small unit cell (with multiple unit cell)
245 INTEGER :: small_cell_full_kp_or_large_cell_gamma = -1, &
246 nimages_scf = -1
247 INTEGER, DIMENSION(3) :: periodic = -1
248 REAL(kind=dp), DIMENSION(3, 3) :: hmat = -1.0_dp
249
250 ! imaginary time and frequency grids
251 INTEGER :: num_time_freq_points = -1, &
252 num_freq_points_fit = -1
253 REAL(kind=dp), DIMENSION(:), ALLOCATABLE :: imag_time_points, &
254 imag_time_weights_freq_zero, &
255 imag_freq_points, &
256 imag_freq_points_fit
257 REAL(kind=dp), DIMENSION(:, :), ALLOCATABLE :: weights_cos_t_to_w, &
258 weights_cos_w_to_t, &
259 weights_sin_t_to_w
260 INTEGER :: nparam_pade = -1, &
261 num_points_per_magnitude = -1
262 REAL(kind=dp) :: freq_max_fit = -1.0_dp, &
263 input_regularization_minimax = -1.0_dp, &
264 regularization_minimax = -1.0_dp, &
265 stabilize_exp = -1.0_dp
266
267 ! filter threshold for matrix-tensor operations
268 REAL(kind=dp) :: eps_filter = -1.0_dp, &
269 eps_atom_grid_2d_mat = -1.0_dp
270
271 ! threshold for inverting ao overlap matrix, RI cfm_1d
272 REAL(kind=dp) :: eps_eigval_mat_s = -1.0_dp, &
273 eps_eigval_mat_ri = -1.0_dp, &
274 input_regularization_ri = -1.0_dp, &
275 regularization_ri = -1.0_dp
276
277 ! global full cfm_1d used in GW
278 TYPE(cp_fm_type) :: fm_s_gamma = cp_fm_type(), &
279 fm_gocc = cp_fm_type(), &
280 fm_gvir = cp_fm_type()
281 TYPE(cp_fm_type), DIMENSION(2) :: fm_ks_gamma = cp_fm_type(), &
282 fm_v_xc_gamma = cp_fm_type(), &
283 fm_mo_coeff_gamma = cp_fm_type()
284 TYPE(cp_fm_type), DIMENSION(4) :: fm_work_mo = cp_fm_type()
285 TYPE(cp_fm_type) :: fm_ri_ri = cp_fm_type(), &
286 fm_chi_gamma_freq = cp_fm_type(), &
287 fm_w_mic_freq = cp_fm_type(), &
288 fm_w_mic_freq_1_extra = cp_fm_type(), &
289 fm_w_mic_freq_1_no_extra = cp_fm_type(), &
290 fm_w_mic_freq_zero = cp_fm_type(), &
291 fm_h_g0w0_gamma = cp_fm_type()
292 TYPE(cp_cfm_type) :: cfm_work_mo = cp_cfm_type(), &
293 cfm_work_mo_2 = cp_cfm_type()
294
295 ! global dbcsr cfm_1d used in GW
296 TYPE(dbcsr_p_type) :: mat_ao_ao = dbcsr_p_type(), &
297 mat_ri_ri = dbcsr_p_type()
298 TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: mat_chi_gamma_tau => null()
299
300 ! local dbcsr cfm_1d used in GW (local in tensor group)
301 TYPE(dbcsr_p_type) :: mat_ao_ao_tensor = dbcsr_p_type(), &
302 mat_ri_ri_tensor = dbcsr_p_type()
303
304 ! tensors for sparse matrix-tensor operations
305#if defined(FTN_NO_DEFAULT_INIT)
306 TYPE(dbt_type) :: t_g, &
307 t_chi, &
308 t_w, &
309 t_ri_ao__ao, &
310 t_ri__ao_ao
311#else
312 TYPE(dbt_type) :: t_g = dbt_type(), &
313 t_chi = dbt_type(), &
314 t_w = dbt_type(), &
315 t_ri_ao__ao = dbt_type(), &
316 t_ri__ao_ao = dbt_type()
317#endif
318
319 ! parameters and data for parallelization
320 INTEGER :: group_size_tensor = -1, &
321 tensor_group_color = -1, &
322 num_tensor_groups = -1
323 REAL(kind=dp) :: input_memory_per_proc_gb = -1.0_dp
324 TYPE(mp_para_env_type), POINTER :: para_env => null(), &
325 para_env_tensor => null()
326 REAL(kind=dp) :: occupation_3c_int = -1.0_dp, &
327 max_dist_ao_atoms = -1.0_dp, &
328 safety_factor_memory = -1.0_dp
329
330 ! parallelization: atom range i and atom range j for tensor group
331 INTEGER, DIMENSION(2) :: atoms_i = -1, &
332 atoms_j = -1
333 INTEGER :: n_atom_i = -1, &
334 n_intervals_i = -1, &
335 n_atom_j = -1, &
336 n_intervals_j = -1, &
337 n_atom_per_interval_ij = -1, &
338 n_intervals_inner_loop_atoms = -1, &
339 n_atom_per_il_interval = -1, &
340 n_skip_sigma = -1, &
341 n_skip_chi = -1
342 INTEGER, DIMENSION(:, :), ALLOCATABLE :: i_atom_intervals, &
343 j_atom_intervals, &
344 inner_loop_atom_intervals, &
345 atoms_i_t_group, &
346 atoms_j_t_group
347 LOGICAL, DIMENSION(:, :), ALLOCATABLE :: skip_sigma_occ, &
348 skip_sigma_vir, &
349 skip_chi
350 ! Marek : rtbse_method
351 INTEGER :: rtp_method = -1
352
353 ! check-arrays and names for restarting
354 LOGICAL, DIMENSION(:), ALLOCATABLE :: read_chi, &
355 calc_chi
356 LOGICAL, DIMENSION(:, :), ALLOCATABLE :: sigma_c_exists
357 LOGICAL :: all_w_exist = .false., &
358 sigma_x_exists = .false.
359 CHARACTER(LEN=3) :: chi_name = "chi"
360 CHARACTER(LEN=6) :: w_time_name = "W_time"
361 CHARACTER(LEN=7) :: sigma_x_name = "Sigma_x"
362 CHARACTER(LEN=13) :: sigma_p_name = "Sigma_pos_tau", &
363 sigma_n_name = "Sigma_neg_tau"
364 CHARACTER(LEN=default_path_length) :: prefix = ""
365 INTEGER :: unit_nr = -1
366
367 ! parameters and data for basis sets
369 DIMENSION(:), ALLOCATABLE :: basis_set_ao, &
370 basis_set_ri
371 INTEGER, DIMENSION(:), ALLOCATABLE :: sizes_ao, &
372 sizes_ri
374 TYPE(libint_potential_type) :: ri_metric = libint_potential_type(), &
375 trunc_coulomb = libint_potential_type()
376
377 ! parameters for SOC calculation
378 REAL(kind=dp) :: soc_window_occ = -1.0_dp
379 REAL(kind=dp) :: soc_window_virt = -1.0_dp
380 REAL(kind=dp) :: soc_window_smearing = 1.0_dp/evolt
381 ! sizes: mat_V_SOC_xyz: xyz, img
382 TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: mat_v_soc_xyz => null()
383 TYPE(cp_fm_type), DIMENSION(3) :: fm_v_soc_xyz_mo = cp_fm_type()
384 ! small-cell GW: dimension = number of kpoints; large-cell GW: Gamma-point, dimension = 1
385 TYPE(cp_cfm_type), DIMENSION(:), ALLOCATABLE :: cfm_soc_spinor_ao
386 TYPE(band_edges_type) :: band_edges_scf_soc = band_edges_type(), &
387 band_edges_gw_soc = band_edges_type()
388
389 ! parameters for DOS and PDOS calculation
390 REAL(kind=dp) :: energy_window_dos = -1.0_dp, &
391 energy_step_dos = -1.0_dp, &
392 broadening_dos = -1.0_dp
393
394 ! parameters for LDOS calculation (LDOS: local density of states)
395 INTEGER :: int_ldos_xyz = -1
396 INTEGER, DIMENSION(:), POINTER :: bin_mesh => null()
397 INTEGER :: n_bins_max_for_printing = -1
398 REAL(kind=dp) :: unit_ldos_int_z_inv_ang2_ev = -1.0_dp
399
400 ! parameters for Floquet band structure calculations
401 INTEGER :: max_floquet_index = -1
402 REAL(kind=dp), DIMENSION(:), POINTER :: floquet_polarisation => null(), &
403 floquet_phi => null()
404 REAL(kind=dp) :: floquet_omega = -1.0_dp, &
405 floquet_amplitude = -1.0_dp, &
406 eps_floquet = -1.0_dp, &
407 broadening_floquet = -1.0_dp, &
408 energy_step_floquet = -1.0_dp, &
409 energy_window_floquet = -1.0_dp, &
410 floquet_mem_fill_fraction = -1.0_dp, &
411 floquet_temperature = -1.0_dp
412 CHARACTER(LEN=default_string_length) :: floquet_dos_file = "", &
413 floquet_qe_file = "", &
414 floquet_bs_file = ""
415
416 ! quantities only needed for small cells and k-point sampling in DFT (small_cell_full_kp)
417 INTEGER :: nkp_scf_desymm = -1, &
418 nimages_3c = -1, &
419 nimages_scf_desymm = -1, &
420 nimages_delta_r = -1
421 TYPE(kpoint_type), POINTER :: kpoints_scf_desymm => null(), &
422 kpoints_scf_desymm_2 => null()
423 INTEGER, DIMENSION(3) :: cell_grid_scf_desymm = -1
424 INTEGER, DIMENSION(:, :), ALLOCATABLE :: index_to_cell_3c, &
425 index_to_cell_delta_r
426 INTEGER, DIMENSION(:, :, :), POINTER :: cell_to_index_3c => null(), &
427 cell_to_index_delta_r => null()
428 REAL(kind=dp) :: heuristic_filter_factor = -1.0_dp
429
430 ! small_cell_full_kp parallelization
431 INTEGER :: n_tasks_delta_r_local = -1
432 INTEGER, DIMENSION(:), ALLOCATABLE :: task_delta_r
433 INTEGER, DIMENSION(:, :), ALLOCATABLE :: nblocks_3c
434 LOGICAL, DIMENSION(:), ALLOCATABLE :: skip_dr_chi, &
435 skip_dr_sigma
436 LOGICAL, DIMENSION(:, :, :), ALLOCATABLE :: skip_dr_r_r2_mxm_chi, &
437 skip_dr_r1_r_mxm_sigma, &
438 skip_dr_r12_s_goccx3c_chi, &
439 skip_dr_r12_s_gvirx3c_chi, &
440 skip_dr_r1_s2_gx3c_sigma
441
442 ! cfm for k-dep overl mat S_µν(k), KS mat h_µν(k,spin) and mo coeff C_μn(k,spin) from SCF
443 TYPE(cp_cfm_type), DIMENSION(:), ALLOCATABLE :: cfm_s_kp
444 TYPE(cp_cfm_type), DIMENSION(:, :), ALLOCATABLE :: cfm_mo_coeff_kp, &
445 cfm_ks_kp
446 TYPE(cp_fm_type), DIMENSION(:), ALLOCATABLE :: fm_g_s, &
447 fm_sigma_x_r
448 TYPE(cp_fm_type), DIMENSION(:, :), ALLOCATABLE :: fm_v_xc_r, &
449 fm_chi_r_t, &
450 fm_mwm_r_t
451 TYPE(cp_fm_type), DIMENSION(:, :, :), ALLOCATABLE :: fm_sigma_c_r_neg_tau, &
452 fm_sigma_c_r_pos_tau
453 REAL(kind=dp), DIMENSION(:, :, :), ALLOCATABLE :: v_xc_n
454 TYPE(dbt_type), ALLOCATABLE, DIMENSION(:, :) :: t_3c_int
455
457
458 ! Sanity bounds on a quasiparticle gap (Hartree): inverted below -eps_qp_gap, diverged above max_qp_gap
459 REAL(kind=dp), PARAMETER, PUBLIC :: eps_qp_gap = 0.01_dp/evolt, &
460 max_qp_gap = 200.0_dp/evolt
461
462CONTAINS
463
464! **************************************************************************************************
465!> \brief ...
466!> \param bs_env ...
467! **************************************************************************************************
468 SUBROUTINE bs_env_release(bs_env)
469 TYPE(post_scf_bandstructure_type), POINTER :: bs_env
470
471 CHARACTER(LEN=*), PARAMETER :: routinen = 'bs_env_release'
472
473 INTEGER :: handle
474
475 CALL timeset(routinen, handle)
476
477 cpassert(ASSOCIATED(bs_env))
478
479 CALL safe_kpoints_release(bs_env%kpoints_chi_eps_W)
480 CALL safe_kpoints_release(bs_env%kpoints_DOS)
481 CALL safe_kpoints_release(bs_env%kpoints_scf_desymm)
482 CALL safe_kpoints_release(bs_env%kpoints_scf_desymm_2)
483
484 IF (ALLOCATED(bs_env%wkp_s_p)) DEALLOCATE (bs_env%wkp_s_p)
485 IF (ALLOCATED(bs_env%wkp_no_extra)) DEALLOCATE (bs_env%wkp_no_extra)
486 IF (ALLOCATED(bs_env%l_RI)) DEALLOCATE (bs_env%l_RI)
487 IF (ALLOCATED(bs_env%xkp_special)) DEALLOCATE (bs_env%xkp_special)
488 IF (ALLOCATED(bs_env%imag_time_points)) DEALLOCATE (bs_env%imag_time_points)
489 IF (ALLOCATED(bs_env%imag_time_weights_freq_zero)) DEALLOCATE (bs_env%imag_time_weights_freq_zero)
490 IF (ALLOCATED(bs_env%imag_freq_points)) DEALLOCATE (bs_env%imag_freq_points)
491 IF (ALLOCATED(bs_env%eigenval_scf_Gamma)) DEALLOCATE (bs_env%eigenval_scf_Gamma)
492 IF (ALLOCATED(bs_env%eigenval_scf)) DEALLOCATE (bs_env%eigenval_scf)
493 IF (ALLOCATED(bs_env%eigenval_GW)) DEALLOCATE (bs_env%eigenval_GW)
494 IF (ALLOCATED(bs_env%eigenval_G0W0)) DEALLOCATE (bs_env%eigenval_G0W0)
495 IF (ALLOCATED(bs_env%eigenval_HF)) DEALLOCATE (bs_env%eigenval_HF)
496 IF (ALLOCATED(bs_env%eigenval_evGW0)) DEALLOCATE (bs_env%eigenval_evGW0)
497 IF (ALLOCATED(bs_env%i_ao_start_from_atom)) DEALLOCATE (bs_env%i_ao_start_from_atom)
498 IF (ALLOCATED(bs_env%i_ao_end_from_atom)) DEALLOCATE (bs_env%i_ao_end_from_atom)
499 IF (ALLOCATED(bs_env%i_RI_start_from_atom)) DEALLOCATE (bs_env%i_RI_start_from_atom)
500 IF (ALLOCATED(bs_env%i_RI_end_from_atom)) DEALLOCATE (bs_env%i_RI_end_from_atom)
501 IF (ALLOCATED(bs_env%min_RI_idx_from_AO_AO_atom)) DEALLOCATE (bs_env%min_RI_idx_from_AO_AO_atom)
502 IF (ALLOCATED(bs_env%max_RI_idx_from_AO_AO_atom)) DEALLOCATE (bs_env%max_RI_idx_from_AO_AO_atom)
503 IF (ALLOCATED(bs_env%min_AO_idx_from_RI_AO_atom)) DEALLOCATE (bs_env%min_AO_idx_from_RI_AO_atom)
504 IF (ALLOCATED(bs_env%max_AO_idx_from_RI_AO_atom)) DEALLOCATE (bs_env%max_AO_idx_from_RI_AO_atom)
505 IF (ALLOCATED(bs_env%i_atom_intervals)) DEALLOCATE (bs_env%i_atom_intervals)
506 IF (ALLOCATED(bs_env%j_atom_intervals)) DEALLOCATE (bs_env%j_atom_intervals)
507 IF (ALLOCATED(bs_env%atoms_i_t_group)) DEALLOCATE (bs_env%atoms_i_t_group)
508 IF (ALLOCATED(bs_env%atoms_j_t_group)) DEALLOCATE (bs_env%atoms_j_t_group)
509 IF (ALLOCATED(bs_env%skip_Sigma_occ)) DEALLOCATE (bs_env%skip_Sigma_occ)
510 IF (ALLOCATED(bs_env%skip_Sigma_vir)) DEALLOCATE (bs_env%skip_Sigma_vir)
511 IF (ALLOCATED(bs_env%skip_chi)) DEALLOCATE (bs_env%skip_chi)
512 IF (ALLOCATED(bs_env%read_chi)) DEALLOCATE (bs_env%read_chi)
513 IF (ALLOCATED(bs_env%calc_chi)) DEALLOCATE (bs_env%calc_chi)
514 IF (ALLOCATED(bs_env%Sigma_c_exists)) DEALLOCATE (bs_env%Sigma_c_exists)
515 IF (ALLOCATED(bs_env%sizes_AO)) DEALLOCATE (bs_env%sizes_AO)
516 IF (ALLOCATED(bs_env%sizes_RI)) DEALLOCATE (bs_env%sizes_RI)
517 IF (ALLOCATED(bs_env%index_to_cell_3c)) DEALLOCATE (bs_env%index_to_cell_3c)
518 IF (ALLOCATED(bs_env%index_to_cell_Delta_R)) DEALLOCATE (bs_env%index_to_cell_Delta_R)
519 IF (ASSOCIATED(bs_env%cell_to_index_3c)) DEALLOCATE (bs_env%cell_to_index_3c)
520 IF (ASSOCIATED(bs_env%cell_to_index_Delta_R)) DEALLOCATE (bs_env%cell_to_index_Delta_R)
521 IF (ALLOCATED(bs_env%task_Delta_R)) DEALLOCATE (bs_env%task_Delta_R)
522 IF (ALLOCATED(bs_env%nblocks_3c)) DEALLOCATE (bs_env%nblocks_3c)
523 IF (ALLOCATED(bs_env%skip_DR_chi)) DEALLOCATE (bs_env%skip_DR_chi)
524 IF (ALLOCATED(bs_env%skip_DR_Sigma)) DEALLOCATE (bs_env%skip_DR_Sigma)
525 IF (ALLOCATED(bs_env%skip_DR_R_R2_MxM_chi)) DEALLOCATE (bs_env%skip_DR_R_R2_MxM_chi)
526 IF (ALLOCATED(bs_env%skip_DR_R1_R_MxM_Sigma)) DEALLOCATE (bs_env%skip_DR_R1_R_MxM_Sigma)
527 IF (ALLOCATED(bs_env%skip_DR_R12_S_Goccx3c_chi)) DEALLOCATE (bs_env%skip_DR_R12_S_Goccx3c_chi)
528 IF (ALLOCATED(bs_env%skip_DR_R12_S_Gvirx3c_chi)) DEALLOCATE (bs_env%skip_DR_R12_S_Gvirx3c_chi)
529 IF (ALLOCATED(bs_env%skip_DR_R1_S2_Gx3c_Sigma)) DEALLOCATE (bs_env%skip_DR_R1_S2_Gx3c_Sigma)
530
531 CALL cp_fm_release(bs_env%fm_s_Gamma)
532 CALL cp_fm_release(bs_env%fm_ks_Gamma(1))
533 CALL cp_fm_release(bs_env%fm_ks_Gamma(2))
534 CALL cp_fm_release(bs_env%fm_V_xc_Gamma(1))
535 CALL cp_fm_release(bs_env%fm_V_xc_Gamma(2))
536 CALL cp_fm_release(bs_env%fm_mo_coeff_Gamma(1))
537 CALL cp_fm_release(bs_env%fm_mo_coeff_Gamma(2))
538 CALL cp_fm_release(bs_env%fm_Gocc)
539 CALL cp_fm_release(bs_env%fm_Gvir)
540 CALL cp_fm_release(bs_env%fm_work_mo(1))
541 CALL cp_fm_release(bs_env%fm_work_mo(2))
542 CALL cp_fm_release(bs_env%fm_work_mo(3))
543 CALL cp_fm_release(bs_env%fm_work_mo(4))
544 CALL cp_fm_release(bs_env%fm_RI_RI)
545 CALL cp_fm_release(bs_env%fm_chi_Gamma_freq)
546 CALL cp_fm_release(bs_env%fm_W_MIC_freq)
547 IF (bs_env%rtp_method == rtp_method_bse .OR. bs_env%rtp_method == rtp_method_bse_linearized) THEN
548 CALL cp_fm_release(bs_env%fm_W_MIC_freq_zero)
549 END IF
550 CALL cp_fm_release(bs_env%fm_W_MIC_freq_1_extra)
551 CALL cp_fm_release(bs_env%fm_W_MIC_freq_1_no_extra)
552 CALL cp_cfm_release(bs_env%cfm_work_mo)
553 CALL cp_cfm_release(bs_env%cfm_work_mo_2)
554
555 CALL safe_fm_destroy_1d(bs_env%fm_G_S)
556 CALL safe_fm_destroy_1d(bs_env%fm_Sigma_x_R)
557 CALL safe_fm_destroy_2d(bs_env%fm_V_xc_R)
558 CALL safe_fm_destroy_2d(bs_env%fm_chi_R_t)
559 CALL safe_fm_destroy_2d(bs_env%fm_MWM_R_t)
560 CALL safe_fm_destroy_3d(bs_env%fm_Sigma_c_R_neg_tau)
561 CALL safe_fm_destroy_3d(bs_env%fm_Sigma_c_R_pos_tau)
562
563 CALL t_destroy_2d(bs_env%t_3c_int)
564
565 CALL release_dbcsr_p_type(bs_env%mat_ao_ao)
566 CALL release_dbcsr_p_type(bs_env%mat_RI_RI)
567 CALL safe_dbcsr_deallocate_matrix_set_1d(bs_env%mat_chi_Gamma_tau)
568
569 CALL release_dbcsr_p_type(bs_env%mat_ao_ao_tensor)
570 CALL release_dbcsr_p_type(bs_env%mat_RI_RI_tensor)
571
572 CALL safe_cfm_destroy_1d(bs_env%cfm_s_kp)
573 CALL safe_cfm_destroy_2d(bs_env%cfm_ks_kp)
574 CALL safe_cfm_destroy_2d(bs_env%cfm_mo_coeff_kp)
575
576 CALL mp_para_env_release(bs_env%para_env)
577 IF (ASSOCIATED(bs_env%para_env_tensor)) CALL mp_para_env_release(bs_env%para_env_tensor)
578
579 CALL safe_dbt_destroy(bs_env%t_G)
580 CALL safe_dbt_destroy(bs_env%t_chi)
581 CALL safe_dbt_destroy(bs_env%t_W)
582 CALL safe_dbt_destroy(bs_env%t_RI_AO__AO)
583 CALL safe_dbt_destroy(bs_env%t_RI__AO_AO)
584
585 IF (ALLOCATED(bs_env%basis_set_AO)) DEALLOCATE (bs_env%basis_set_AO)
586 IF (ALLOCATED(bs_env%basis_set_RI)) DEALLOCATE (bs_env%basis_set_RI)
587
588 ! SOC cfm_1d and arrays
589 CALL safe_dbcsr_deallocate_matrix_set_2d(bs_env%mat_V_SOC_xyz)
590 CALL cp_fm_release(bs_env%fm_V_SOC_xyz_mo(1))
591 CALL cp_fm_release(bs_env%fm_V_SOC_xyz_mo(2))
592 CALL cp_fm_release(bs_env%fm_V_SOC_xyz_mo(3))
593 CALL safe_cfm_destroy_1d(bs_env%cfm_SOC_spinor_ao)
594
595 ! Deallocate RI-RS matrices
596 IF (bs_env%ri_rs%grid_built) CALL dbcsr_release(bs_env%ri_rs%mat_phi_mu_l)
597 IF (bs_env%ri_rs%grid_built) CALL dbcsr_release(bs_env%ri_rs%mat_Z_lP)
598 IF (bs_env%ri_rs%V_grid_built) CALL dbcsr_release(bs_env%ri_rs%mat_V_aux_rtbse)
599 IF (bs_env%ri_rs%W0_grid_built) CALL dbcsr_release(bs_env%ri_rs%mat_W0_grid_rtbse)
600 IF (ALLOCATED(bs_env%ri_rs%grid_points)) DEALLOCATE (bs_env%ri_rs%grid_points)
601 IF (ALLOCATED(bs_env%ri_rs%grid_cache)) DEALLOCATE (bs_env%ri_rs%grid_cache)
602 IF (ALLOCATED(bs_env%ri_rs%radius_ao_per_atom)) DEALLOCATE (bs_env%ri_rs%radius_ao_per_atom)
603 IF (ALLOCATED(bs_env%ri_rs%radius_ri_per_atom)) DEALLOCATE (bs_env%ri_rs%radius_ri_per_atom)
604 IF (ALLOCATED(bs_env%ri_rs%chunk_centroids)) DEALLOCATE (bs_env%ri_rs%chunk_centroids)
605 IF (ALLOCATED(bs_env%ri_rs%atom_centers)) DEALLOCATE (bs_env%ri_rs%atom_centers)
606 IF (ALLOCATED(bs_env%ri_rs%grid_atom_boundaries)) DEALLOCATE (bs_env%ri_rs%grid_atom_boundaries)
607 NULLIFY (bs_env%ri_rs%atomic_kind_set, bs_env%ri_rs%cell, bs_env%ri_rs%particle_set)
608 IF (ALLOCATED(bs_env%ri_rs%pan_first)) DEALLOCATE (bs_env%ri_rs%pan_first)
609 IF (ALLOCATED(bs_env%ri_rs%pan_last)) DEALLOCATE (bs_env%ri_rs%pan_last)
610
611 DEALLOCATE (bs_env)
612
613 CALL timestop(handle)
614
615 END SUBROUTINE bs_env_release
616
617! **************************************************************************************************
618!> \brief ...
619!> \param kpoints ...
620! **************************************************************************************************
621 SUBROUTINE safe_kpoints_release(kpoints)
622 TYPE(kpoint_type), POINTER :: kpoints
623
624 IF (ASSOCIATED(kpoints)) CALL kpoint_release(kpoints)
625
626 END SUBROUTINE safe_kpoints_release
627
628! **************************************************************************************************
629!> \brief ...
630!> \param dbcsr_p_type_matrix ...
631! **************************************************************************************************
632 SUBROUTINE release_dbcsr_p_type(dbcsr_p_type_matrix)
633 TYPE(dbcsr_p_type) :: dbcsr_p_type_matrix
634
635 IF (ASSOCIATED(dbcsr_p_type_matrix%matrix)) THEN
636 CALL dbcsr_release(dbcsr_p_type_matrix%matrix)
637 DEALLOCATE (dbcsr_p_type_matrix%matrix)
638 END IF
639
640 END SUBROUTINE release_dbcsr_p_type
641
642! **************************************************************************************************
643!> \brief ...
644!> \param t ...
645! **************************************************************************************************
646 SUBROUTINE safe_dbt_destroy(t)
647 TYPE(dbt_type) :: t
648
649 IF (ASSOCIATED(t%matrix_rep)) CALL dbt_destroy(t)
650
651 END SUBROUTINE safe_dbt_destroy
652
653! **************************************************************************************************
654!> \brief ...
655!> \param dbcsr_array ...
656! **************************************************************************************************
657 SUBROUTINE safe_dbcsr_deallocate_matrix_set_1d(dbcsr_array)
658 TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: dbcsr_array
659
660 IF (ASSOCIATED(dbcsr_array)) CALL dbcsr_deallocate_matrix_set(dbcsr_array)
661
662 END SUBROUTINE safe_dbcsr_deallocate_matrix_set_1d
663
664! **************************************************************************************************
665!> \brief ...
666!> \param dbcsr_array ...
667! **************************************************************************************************
668 SUBROUTINE safe_dbcsr_deallocate_matrix_set_2d(dbcsr_array)
669 TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: dbcsr_array
670
671 IF (ASSOCIATED(dbcsr_array)) CALL dbcsr_deallocate_matrix_set(dbcsr_array)
672
673 END SUBROUTINE safe_dbcsr_deallocate_matrix_set_2d
674
675! **************************************************************************************************
676!> \brief ...
677!> \param fm_1d ...
678! **************************************************************************************************
679 SUBROUTINE safe_fm_destroy_1d(fm_1d)
680 TYPE(cp_fm_type), ALLOCATABLE, DIMENSION(:) :: fm_1d
681
682 INTEGER :: i
683
684 IF (ALLOCATED(fm_1d)) THEN
685 DO i = 1, SIZE(fm_1d, 1)
686 CALL cp_fm_release(fm_1d(i))
687 END DO
688 DEALLOCATE (fm_1d)
689 END IF
690
691 END SUBROUTINE safe_fm_destroy_1d
692
693! **************************************************************************************************
694!> \brief ...
695!> \param fm_2d ...
696! **************************************************************************************************
697 SUBROUTINE safe_fm_destroy_2d(fm_2d)
698 TYPE(cp_fm_type), ALLOCATABLE, DIMENSION(:, :) :: fm_2d
699
700 INTEGER :: i, j
701
702 IF (ALLOCATED(fm_2d)) THEN
703 DO i = 1, SIZE(fm_2d, 1)
704 DO j = 1, SIZE(fm_2d, 2)
705 CALL cp_fm_release(fm_2d(i, j))
706 END DO
707 END DO
708 DEALLOCATE (fm_2d)
709 END IF
710
711 END SUBROUTINE safe_fm_destroy_2d
712
713! **************************************************************************************************
714!> \brief ...
715!> \param fm_3d ...
716! **************************************************************************************************
717 SUBROUTINE safe_fm_destroy_3d(fm_3d)
718 TYPE(cp_fm_type), ALLOCATABLE, DIMENSION(:, :, :) :: fm_3d
719
720 INTEGER :: i, j, k
721
722 IF (ALLOCATED(fm_3d)) THEN
723 DO i = 1, SIZE(fm_3d, 1)
724 DO j = 1, SIZE(fm_3d, 2)
725 DO k = 1, SIZE(fm_3d, 3)
726 CALL cp_fm_release(fm_3d(i, j, k))
727 END DO
728 END DO
729 END DO
730 DEALLOCATE (fm_3d)
731 END IF
732
733 END SUBROUTINE safe_fm_destroy_3d
734
735! **************************************************************************************************
736!> \brief ...
737!> \param cfm_1d ...
738! **************************************************************************************************
739 SUBROUTINE safe_cfm_destroy_1d(cfm_1d)
740 TYPE(cp_cfm_type), ALLOCATABLE, DIMENSION(:) :: cfm_1d
741
742 INTEGER :: i
743
744 IF (ALLOCATED(cfm_1d)) THEN
745 DO i = 1, SIZE(cfm_1d, 1)
746 CALL cp_cfm_release(cfm_1d(i))
747 END DO
748 DEALLOCATE (cfm_1d)
749 END IF
750
751 END SUBROUTINE safe_cfm_destroy_1d
752
753! **************************************************************************************************
754!> \brief ...
755!> \param cfm_2d ...
756! **************************************************************************************************
757 SUBROUTINE safe_cfm_destroy_2d(cfm_2d)
758 TYPE(cp_cfm_type), ALLOCATABLE, DIMENSION(:, :) :: cfm_2d
759
760 INTEGER :: i, j
761
762 IF (ALLOCATED(cfm_2d)) THEN
763 DO i = 1, SIZE(cfm_2d, 1)
764 DO j = 1, SIZE(cfm_2d, 2)
765 CALL cp_cfm_release(cfm_2d(i, j))
766 END DO
767 END DO
768 DEALLOCATE (cfm_2d)
769 END IF
770
771 END SUBROUTINE safe_cfm_destroy_2d
772
773! **************************************************************************************************
774!> \brief ...
775!> \param t_2d ...
776! **************************************************************************************************
777 SUBROUTINE t_destroy_2d(t_2d)
778 TYPE(dbt_type), ALLOCATABLE, DIMENSION(:, :) :: t_2d
779
780 INTEGER :: i, j
781
782 IF (ALLOCATED(t_2d)) THEN
783 DO i = 1, SIZE(t_2d, 1)
784 DO j = 1, SIZE(t_2d, 2)
785 CALL dbt_destroy(t_2d(i, j))
786 END DO
787 END DO
788 DEALLOCATE (t_2d)
789 END IF
790
791 END SUBROUTINE t_destroy_2d
792
Define the atomic kind types and their sub types.
Handles all functions related to the CELL.
Definition cell_types.F:15
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_linearized
integer, parameter, public rtp_method_bse
integer, parameter, public g0w0
integer, parameter, public small_cell_full_kp
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public int_8
Definition kinds.F:54
integer, parameter, public dp
Definition kinds.F:34
integer, parameter, public default_string_length
Definition kinds.F:57
integer, parameter, public default_path_length
Definition kinds.F:58
integer, parameter, public int_4
Definition kinds.F:51
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)
Define the data structure for the particle information.
Definition of physical constants:
Definition physcon.F:68
real(kind=dp), parameter, public evolt
Definition physcon.F:183
real(kind=dp), parameter, public angstrom
Definition physcon.F:144
subroutine, public bs_env_release(bs_env)
...
real(kind=dp), parameter, public max_qp_gap
real(kind=dp), parameter, public eps_qp_gap
Utility methods to build 3-center integral tensors of various types.
Provides all information about an atomic kind.
Type defining parameters related to the simulation cell.
Definition cell_types.F:60
Represent a complex full matrix.
represent a full matrix
Contains information about kpoints.
stores all the informations relevant to an mpi environment