100 LOGICAL :: do_gw = .false., &
103 do_gw_ri_rs = .false., &
104 do_dos_pdos = .false., &
109 REAL(kind=
dp),
DIMENSION(:, :),
ALLOCATABLE :: eigenval_scf_gamma
110 REAL(kind=
dp),
DIMENSION(:, :, :),
ALLOCATABLE :: eigenval_scf, &
114 REAL(kind=
dp),
DIMENSION(:, :),
ALLOCATABLE :: eigenval_scf_soc, &
122 LOGICAL :: do_hedin_shift = .false.
125 TYPE(ri_rs_env) :: ri_rs
128 INTEGER :: n_ao = -1, &
132 max_ao_bf_per_atom = -1
133 INTEGER,
DIMENSION(:),
ALLOCATABLE :: i_ao_start_from_atom, &
134 i_ao_end_from_atom, &
135 i_ri_start_from_atom, &
137 INTEGER,
DIMENSION(:, :),
ALLOCATABLE :: min_ri_idx_from_ao_ao_atom, &
138 max_ri_idx_from_ao_ao_atom, &
139 min_ao_idx_from_ri_ao_atom, &
140 max_ao_idx_from_ri_ao_atom
141 INTEGER,
DIMENSION(2) :: n_occ = -1, &
143 REAL(kind=
dp) :: spin_degeneracy = -1.0_dp
144 REAL(kind=
dp),
DIMENSION(2) :: e_fermi = -1.0_dp
147 INTEGER,
DIMENSION(:),
POINTER :: nkp_grid_dos_input => null(), &
148 nkp_grid_chi_eps_w_input => null()
149 INTEGER,
DIMENSION(3) :: nkp_grid_chi_eps_w_orig = -1, &
150 nkp_grid_chi_eps_w_extra = -1
151 INTEGER :: nkp_chi_eps_w_orig = -1, &
152 nkp_chi_eps_w_extra = -1, &
153 nkp_chi_eps_w_orig_plus_extra = -1, &
154 nkp_chi_eps_w_batch = -1, &
155 num_chi_eps_w_batches = -1, &
156 size_lattice_sum_v = -1
158 kpoints_dos => null()
159 LOGICAL :: approx_kp_extrapol = .false.
161 REAL(kind=
dp) :: wkp_orig = -1.0_dp
162 REAL(kind=
dp),
DIMENSION(:),
ALLOCATABLE :: wkp_s_p, &
164 INTEGER,
DIMENSION(:),
ALLOCATABLE :: l_ri
165 INTEGER :: input_kp_bs_npoints = -1, &
166 input_kp_bs_n_sp_pts = -1, &
167 nkp_bs_and_dos = -1, &
170 REAL(kind=
dp),
DIMENSION(:, :),
ALLOCATABLE :: xkp_special
173 INTEGER :: small_cell_full_kp_or_large_cell_gamma = -1, &
175 INTEGER,
DIMENSION(3) :: periodic = -1
176 REAL(kind=
dp),
DIMENSION(3, 3) :: hmat = -1.0_dp
179 INTEGER :: num_time_freq_points = -1, &
180 num_freq_points_fit = -1
181 REAL(kind=
dp),
DIMENSION(:),
ALLOCATABLE :: imag_time_points, &
182 imag_time_weights_freq_zero, &
185 REAL(kind=
dp),
DIMENSION(:, :),
ALLOCATABLE :: weights_cos_t_to_w, &
186 weights_cos_w_to_t, &
188 INTEGER :: nparam_pade = -1, &
189 num_points_per_magnitude = -1
190 REAL(kind=
dp) :: freq_max_fit = -1.0_dp, &
191 input_regularization_minimax = -1.0_dp, &
192 regularization_minimax = -1.0_dp, &
193 stabilize_exp = -1.0_dp
196 REAL(kind=
dp) :: eps_filter = -1.0_dp, &
197 eps_atom_grid_2d_mat = -1.0_dp
200 REAL(kind=
dp) :: eps_eigval_mat_s = -1.0_dp, &
201 eps_eigval_mat_ri = -1.0_dp, &
202 input_regularization_ri = -1.0_dp, &
203 regularization_ri = -1.0_dp
226 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: mat_chi_gamma_tau => null()
233#if defined(FTN_NO_DEFAULT_INIT)
234 TYPE(dbt_type) :: t_g, &
240 TYPE(dbt_type) :: t_g = dbt_type(), &
241 t_chi = dbt_type(), &
243 t_ri_ao__ao = dbt_type(), &
244 t_ri__ao_ao = dbt_type()
248 INTEGER :: group_size_tensor = -1, &
249 tensor_group_color = -1, &
250 num_tensor_groups = -1
251 REAL(kind=
dp) :: input_memory_per_proc_gb = -1.0_dp
253 para_env_tensor => null()
254 REAL(kind=
dp) :: occupation_3c_int = -1.0_dp, &
255 max_dist_ao_atoms = -1.0_dp, &
256 safety_factor_memory = -1.0_dp
259 INTEGER,
DIMENSION(2) :: atoms_i = -1, &
261 INTEGER :: n_atom_i = -1, &
262 n_intervals_i = -1, &
264 n_intervals_j = -1, &
265 n_atom_per_interval_ij = -1, &
266 n_intervals_inner_loop_atoms = -1, &
267 n_atom_per_il_interval = -1, &
270 INTEGER,
DIMENSION(:, :),
ALLOCATABLE :: i_atom_intervals, &
272 inner_loop_atom_intervals, &
275 LOGICAL,
DIMENSION(:, :),
ALLOCATABLE :: skip_sigma_occ, &
282 LOGICAL,
DIMENSION(:),
ALLOCATABLE :: read_chi, &
284 LOGICAL,
DIMENSION(:, :),
ALLOCATABLE :: sigma_c_exists
285 LOGICAL :: all_w_exist = .false., &
286 sigma_x_exists = .false.
287 CHARACTER(LEN=3) :: chi_name =
"chi"
288 CHARACTER(LEN=6) :: w_time_name =
"W_time"
289 CHARACTER(LEN=7) :: sigma_x_name =
"Sigma_x"
290 CHARACTER(LEN=13) :: sigma_p_name =
"Sigma_pos_tau", &
291 sigma_n_name =
"Sigma_neg_tau"
292 CHARACTER(LEN=default_path_length) :: prefix =
""
293 INTEGER :: unit_nr = -1, &
294 unit_nr_contract = -1
298 DIMENSION(:),
ALLOCATABLE :: basis_set_ao, &
300 INTEGER,
DIMENSION(:),
ALLOCATABLE :: sizes_ao, &
307 REAL(kind=
dp) :: soc_window_occ = -1.0_dp
308 REAL(kind=
dp) :: soc_window_virt = -1.0_dp
309 REAL(kind=
dp) :: soc_window_smearing = 1.0_dp/
evolt
311 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: mat_v_soc_xyz => null()
319 REAL(kind=
dp) :: energy_window_dos = -1.0_dp, &
320 energy_step_dos = -1.0_dp, &
321 broadening_dos = -1.0_dp
324 INTEGER :: int_ldos_xyz = -1
325 INTEGER,
DIMENSION(:),
POINTER :: bin_mesh => null()
326 INTEGER :: n_bins_max_for_printing = -1
327 REAL(kind=
dp) :: unit_ldos_int_z_inv_ang2_ev = -1.0_dp
330 INTEGER :: max_floquet_index = -1
331 REAL(kind=
dp),
DIMENSION(:),
POINTER :: floquet_polarisation => null(), &
332 floquet_phi => null()
333 REAL(kind=
dp) :: floquet_omega = -1.0_dp, &
334 floquet_amplitude = -1.0_dp, &
335 eps_floquet = -1.0_dp, &
336 broadening_floquet = -1.0_dp, &
337 energy_step_floquet = -1.0_dp, &
338 energy_window_floquet = -1.0_dp
339 CHARACTER(LEN=default_string_length) :: floquet_dos_file =
"", &
343 INTEGER :: nkp_scf_desymm = -1, &
345 nimages_scf_desymm = -1, &
348 kpoints_scf_desymm_2 => null()
349 INTEGER,
DIMENSION(3) :: cell_grid_scf_desymm = -1
350 INTEGER,
DIMENSION(:, :),
ALLOCATABLE :: index_to_cell_3c, &
351 index_to_cell_delta_r
352 INTEGER,
DIMENSION(:, :, :),
POINTER :: cell_to_index_3c => null(), &
353 cell_to_index_delta_r => null()
354 REAL(kind=
dp) :: heuristic_filter_factor = -1.0_dp
357 INTEGER :: n_tasks_delta_r_local = -1
358 INTEGER,
DIMENSION(:),
ALLOCATABLE :: task_delta_r
359 INTEGER,
DIMENSION(:, :),
ALLOCATABLE :: nblocks_3c
360 LOGICAL,
DIMENSION(:),
ALLOCATABLE :: skip_dr_chi, &
362 LOGICAL,
DIMENSION(:, :, :),
ALLOCATABLE :: skip_dr_r_r2_mxm_chi, &
363 skip_dr_r1_r_mxm_sigma, &
364 skip_dr_r12_s_goccx3c_chi, &
365 skip_dr_r12_s_gvirx3c_chi, &
366 skip_dr_r1_s2_gx3c_sigma
370 TYPE(
cp_cfm_type),
DIMENSION(:, :),
ALLOCATABLE :: cfm_mo_coeff_kp, &
374 TYPE(
cp_fm_type),
DIMENSION(:, :),
ALLOCATABLE :: fm_v_xc_r, &
377 TYPE(
cp_fm_type),
DIMENSION(:, :, :),
ALLOCATABLE :: fm_sigma_c_r_neg_tau, &
379 REAL(kind=
dp),
DIMENSION(:, :, :),
ALLOCATABLE :: v_xc_n
380 TYPE(dbt_type),
ALLOCATABLE,
DIMENSION(:, :) :: t_3c_int
383 LOGICAL :: print_contract = .false., &
384 print_contract_verbose = .false.
397 CHARACTER(LEN=*),
PARAMETER :: routinen =
'bs_env_release'
401 CALL timeset(routinen, handle)
403 cpassert(
ASSOCIATED(bs_env))
405 CALL safe_kpoints_release(bs_env%kpoints_chi_eps_W)
406 CALL safe_kpoints_release(bs_env%kpoints_DOS)
407 CALL safe_kpoints_release(bs_env%kpoints_scf_desymm)
408 CALL safe_kpoints_release(bs_env%kpoints_scf_desymm_2)
410 IF (
ALLOCATED(bs_env%wkp_s_p))
DEALLOCATE (bs_env%wkp_s_p)
411 IF (
ALLOCATED(bs_env%wkp_no_extra))
DEALLOCATE (bs_env%wkp_no_extra)
412 IF (
ALLOCATED(bs_env%l_RI))
DEALLOCATE (bs_env%l_RI)
413 IF (
ALLOCATED(bs_env%xkp_special))
DEALLOCATE (bs_env%xkp_special)
414 IF (
ALLOCATED(bs_env%imag_time_points))
DEALLOCATE (bs_env%imag_time_points)
415 IF (
ALLOCATED(bs_env%imag_time_weights_freq_zero))
DEALLOCATE (bs_env%imag_time_weights_freq_zero)
416 IF (
ALLOCATED(bs_env%imag_freq_points))
DEALLOCATE (bs_env%imag_freq_points)
417 IF (
ALLOCATED(bs_env%eigenval_scf_Gamma))
DEALLOCATE (bs_env%eigenval_scf_Gamma)
418 IF (
ALLOCATED(bs_env%eigenval_scf))
DEALLOCATE (bs_env%eigenval_scf)
419 IF (
ALLOCATED(bs_env%eigenval_G0W0))
DEALLOCATE (bs_env%eigenval_G0W0)
420 IF (
ALLOCATED(bs_env%eigenval_HF))
DEALLOCATE (bs_env%eigenval_HF)
421 IF (
ALLOCATED(bs_env%eigenval_scGW0))
DEALLOCATE (bs_env%eigenval_scGW0)
422 IF (
ALLOCATED(bs_env%eigenval_scf_soc))
DEALLOCATE (bs_env%eigenval_scf_soc)
423 IF (
ALLOCATED(bs_env%eigenval_G0W0_soc))
DEALLOCATE (bs_env%eigenval_G0W0_soc)
424 IF (
ALLOCATED(bs_env%i_ao_start_from_atom))
DEALLOCATE (bs_env%i_ao_start_from_atom)
425 IF (
ALLOCATED(bs_env%i_ao_end_from_atom))
DEALLOCATE (bs_env%i_ao_end_from_atom)
426 IF (
ALLOCATED(bs_env%i_RI_start_from_atom))
DEALLOCATE (bs_env%i_RI_start_from_atom)
427 IF (
ALLOCATED(bs_env%i_RI_end_from_atom))
DEALLOCATE (bs_env%i_RI_end_from_atom)
428 IF (
ALLOCATED(bs_env%min_RI_idx_from_AO_AO_atom))
DEALLOCATE (bs_env%min_RI_idx_from_AO_AO_atom)
429 IF (
ALLOCATED(bs_env%max_RI_idx_from_AO_AO_atom))
DEALLOCATE (bs_env%max_RI_idx_from_AO_AO_atom)
430 IF (
ALLOCATED(bs_env%min_AO_idx_from_RI_AO_atom))
DEALLOCATE (bs_env%min_AO_idx_from_RI_AO_atom)
431 IF (
ALLOCATED(bs_env%max_AO_idx_from_RI_AO_atom))
DEALLOCATE (bs_env%max_AO_idx_from_RI_AO_atom)
432 IF (
ALLOCATED(bs_env%i_atom_intervals))
DEALLOCATE (bs_env%i_atom_intervals)
433 IF (
ALLOCATED(bs_env%j_atom_intervals))
DEALLOCATE (bs_env%j_atom_intervals)
434 IF (
ALLOCATED(bs_env%atoms_i_t_group))
DEALLOCATE (bs_env%atoms_i_t_group)
435 IF (
ALLOCATED(bs_env%atoms_j_t_group))
DEALLOCATE (bs_env%atoms_j_t_group)
436 IF (
ALLOCATED(bs_env%skip_Sigma_occ))
DEALLOCATE (bs_env%skip_Sigma_occ)
437 IF (
ALLOCATED(bs_env%skip_Sigma_vir))
DEALLOCATE (bs_env%skip_Sigma_vir)
438 IF (
ALLOCATED(bs_env%skip_chi))
DEALLOCATE (bs_env%skip_chi)
439 IF (
ALLOCATED(bs_env%read_chi))
DEALLOCATE (bs_env%read_chi)
440 IF (
ALLOCATED(bs_env%calc_chi))
DEALLOCATE (bs_env%calc_chi)
441 IF (
ALLOCATED(bs_env%Sigma_c_exists))
DEALLOCATE (bs_env%Sigma_c_exists)
442 IF (
ALLOCATED(bs_env%sizes_AO))
DEALLOCATE (bs_env%sizes_AO)
443 IF (
ALLOCATED(bs_env%sizes_RI))
DEALLOCATE (bs_env%sizes_RI)
444 IF (
ALLOCATED(bs_env%index_to_cell_3c))
DEALLOCATE (bs_env%index_to_cell_3c)
445 IF (
ALLOCATED(bs_env%index_to_cell_Delta_R))
DEALLOCATE (bs_env%index_to_cell_Delta_R)
446 IF (
ASSOCIATED(bs_env%cell_to_index_3c))
DEALLOCATE (bs_env%cell_to_index_3c)
447 IF (
ASSOCIATED(bs_env%cell_to_index_Delta_R))
DEALLOCATE (bs_env%cell_to_index_Delta_R)
448 IF (
ALLOCATED(bs_env%task_Delta_R))
DEALLOCATE (bs_env%task_Delta_R)
449 IF (
ALLOCATED(bs_env%nblocks_3c))
DEALLOCATE (bs_env%nblocks_3c)
450 IF (
ALLOCATED(bs_env%skip_DR_chi))
DEALLOCATE (bs_env%skip_DR_chi)
451 IF (
ALLOCATED(bs_env%skip_DR_Sigma))
DEALLOCATE (bs_env%skip_DR_Sigma)
452 IF (
ALLOCATED(bs_env%skip_DR_R_R2_MxM_chi))
DEALLOCATE (bs_env%skip_DR_R_R2_MxM_chi)
453 IF (
ALLOCATED(bs_env%skip_DR_R1_R_MxM_Sigma))
DEALLOCATE (bs_env%skip_DR_R1_R_MxM_Sigma)
454 IF (
ALLOCATED(bs_env%skip_DR_R12_S_Goccx3c_chi))
DEALLOCATE (bs_env%skip_DR_R12_S_Goccx3c_chi)
455 IF (
ALLOCATED(bs_env%skip_DR_R12_S_Gvirx3c_chi))
DEALLOCATE (bs_env%skip_DR_R12_S_Gvirx3c_chi)
456 IF (
ALLOCATED(bs_env%skip_DR_R1_S2_Gx3c_Sigma))
DEALLOCATE (bs_env%skip_DR_R1_S2_Gx3c_Sigma)
480 CALL safe_fm_destroy_1d(bs_env%fm_G_S)
481 CALL safe_fm_destroy_1d(bs_env%fm_Sigma_x_R)
482 CALL safe_fm_destroy_2d(bs_env%fm_V_xc_R)
483 CALL safe_fm_destroy_2d(bs_env%fm_chi_R_t)
484 CALL safe_fm_destroy_2d(bs_env%fm_MWM_R_t)
485 CALL safe_fm_destroy_3d(bs_env%fm_Sigma_c_R_neg_tau)
486 CALL safe_fm_destroy_3d(bs_env%fm_Sigma_c_R_pos_tau)
488 CALL t_destroy_2d(bs_env%t_3c_int)
490 CALL release_dbcsr_p_type(bs_env%mat_ao_ao)
491 CALL release_dbcsr_p_type(bs_env%mat_RI_RI)
492 CALL safe_dbcsr_deallocate_matrix_set_1d(bs_env%mat_chi_Gamma_tau)
494 CALL release_dbcsr_p_type(bs_env%mat_ao_ao_tensor)
495 CALL release_dbcsr_p_type(bs_env%mat_RI_RI_tensor)
497 CALL safe_cfm_destroy_1d(bs_env%cfm_s_kp)
498 CALL safe_cfm_destroy_2d(bs_env%cfm_ks_kp)
499 CALL safe_cfm_destroy_2d(bs_env%cfm_mo_coeff_kp)
504 CALL safe_dbt_destroy(bs_env%t_G)
505 CALL safe_dbt_destroy(bs_env%t_chi)
506 CALL safe_dbt_destroy(bs_env%t_W)
507 CALL safe_dbt_destroy(bs_env%t_RI_AO__AO)
508 CALL safe_dbt_destroy(bs_env%t_RI__AO_AO)
510 IF (
ALLOCATED(bs_env%basis_set_AO))
DEALLOCATE (bs_env%basis_set_AO)
511 IF (
ALLOCATED(bs_env%basis_set_RI))
DEALLOCATE (bs_env%basis_set_RI)
514 CALL safe_dbcsr_deallocate_matrix_set_2d(bs_env%mat_V_SOC_xyz)
518 CALL safe_cfm_destroy_1d(bs_env%cfm_SOC_spinor_ao)
521 IF (bs_env%do_gw_ri_rs)
CALL dbcsr_release(bs_env%ri_rs%mat_phi_mu_l)
522 IF (bs_env%do_gw_ri_rs)
CALL dbcsr_release(bs_env%ri_rs%mat_Z_lP)
523 IF (
ALLOCATED(bs_env%ri_rs%grid_points))
DEALLOCATE (bs_env%ri_rs%grid_points)
524 IF (
ALLOCATED(bs_env%ri_rs%grid_cache))
DEALLOCATE (bs_env%ri_rs%grid_cache)
525 IF (
ALLOCATED(bs_env%ri_rs%radius_ao_per_atom))
DEALLOCATE (bs_env%ri_rs%radius_ao_per_atom)
526 IF (
ALLOCATED(bs_env%ri_rs%radius_ri_per_atom))
DEALLOCATE (bs_env%ri_rs%radius_ri_per_atom)
530 CALL timestop(handle)