20 USE dbcsr_api,
ONLY: dbcsr_p_type,&
22 USE dbt_api,
ONLY: dbt_destroy,&
33 #include "./base/base_uses.f90"
39 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'post_scf_bandstructure_types'
41 PUBLIC :: post_scf_bandstructure_type, band_edges_type,
bs_env_release
46 REAL(KIND=
dp) :: vbm = -1.0_dp, &
50 END TYPE band_edges_type
52 TYPE post_scf_bandstructure_type
55 LOGICAL :: do_gw = .false., &
58 do_bs_primitive_cell = .false., &
63 REAL(KIND=
dp),
DIMENSION(:, :),
ALLOCATABLE :: eigenval_scf_gamma
64 REAL(KIND=
dp),
DIMENSION(:, :, :),
ALLOCATABLE :: eigenval_scf, &
66 REAL(KIND=
dp),
DIMENSION(:, :, :),
ALLOCATABLE :: eigenval_scgw0
67 REAL(KIND=
dp),
DIMENSION(:, :),
ALLOCATABLE :: eigenval_prim_cell_scf, &
68 eigenval_prim_cell_scf_soc, &
69 eigenval_prim_cell_g0w0, &
70 eigenval_prim_cell_g0w0_soc
71 REAL(KIND=
dp),
DIMENSION(:, :),
ALLOCATABLE :: eigenval_scf_soc, &
73 TYPE(band_edges_type),
DIMENSION(2) :: band_edges_scf_Gamma
74 TYPE(band_edges_type) :: band_edges_scf, &
78 INTEGER :: n_ao = -1, &
82 max_ao_bf_per_atom = -1
83 INTEGER,
DIMENSION(:),
ALLOCATABLE :: i_ao_start_from_atom, &
85 i_RI_start_from_atom, &
87 INTEGER,
DIMENSION(2) :: n_occ = -1, &
89 REAL(KIND=
dp) :: spin_degeneracy = -1.0_dp
90 REAL(KIND=
dp),
DIMENSION(2) :: e_fermi = -1.0_dp
93 INTEGER,
DIMENSION(:),
POINTER :: nkp_grid_DOS_input => null()
94 INTEGER,
DIMENSION(3) :: nkp_grid_chi_eps_W_orig = -1, &
95 nkp_grid_chi_eps_w_extra = -1
96 INTEGER :: nkp_chi_eps_W_orig = -1, &
97 nkp_chi_eps_w_extra = -1, &
98 nkp_chi_eps_w_orig_plus_extra = -1, &
99 nkp_chi_eps_w_batch = -1, &
100 num_chi_eps_w_batches = -1, &
101 size_lattice_sum_v = -1
102 TYPE(kpoint_type),
POINTER :: kpoints_chi_eps_W => null(), &
103 kpoints_dos => null(), &
104 kpoints_bandstructure => null()
105 LOGICAL :: approx_kp_extrapol = .false.
106 REAL(KIND=
dp) :: wkp_orig = -1.0_dp
107 REAL(KIND=
dp),
DIMENSION(:),
ALLOCATABLE :: wkp_s_p, &
109 INTEGER,
DIMENSION(:),
ALLOCATABLE :: l_RI
110 INTEGER :: input_kp_bs_npoints = -1, &
111 input_kp_bs_n_sp_pts = -1, &
114 REAL(KIND=
dp),
DIMENSION(:, :),
ALLOCATABLE :: xkp_special
115 CHARACTER(LEN=default_string_length), &
116 DIMENSION(:),
ALLOCATABLE :: kp_special_name
119 INTEGER,
DIMENSION(3) :: periodic = -1, &
120 multiple_unit_cell = -1
121 LOGICAL :: calculate_bandstructure_of_primitive_cell &
123 INTEGER :: n_atom_in_primitive_cell = -1, &
124 n_primitive_cells = -1
125 INTEGER,
DIMENSION(:),
ALLOCATABLE :: atoms_i_primitive_cell, &
126 ref_atom_primitive_cell
127 INTEGER,
DIMENSION(:, :),
ALLOCATABLE :: cell_of_i_atom
128 REAL(KIND=
dp),
DIMENSION(3, 3) :: hmat_primitive_cell = -1.0_dp, &
129 hinv_primitive_cell = -1.0_dp, &
133 INTEGER :: num_time_freq_points = -1, &
134 num_freq_points_fit = -1
135 REAL(KIND=
dp),
DIMENSION(:),
ALLOCATABLE :: imag_time_points, &
138 REAL(KIND=
dp),
DIMENSION(:, :),
ALLOCATABLE :: weights_cos_t_to_w, &
139 weights_cos_w_to_t, &
141 INTEGER :: nparam_pade = -1, &
142 num_points_per_magnitude = -1
143 REAL(KIND=
dp) :: freq_max_fit = -1.0_dp, &
144 regularization_minimax = -1.0_dp, &
145 stabilize_exp = -1.0_dp
148 REAL(KIND=
dp) :: eps_filter = -1.0_dp, &
149 eps_3c_int = -1.0_dp, &
150 eps_atom_grid_2d_mat = -1.0_dp
153 REAL(KIND=
dp) :: eps_eigval_mat_s = -1.0_dp, &
154 eps_eigval_mat_ri = -1.0_dp, &
155 regularization_ri = -1.0_dp
158 TYPE(cp_fm_type) :: fm_s_Gamma, &
161 TYPE(cp_fm_type),
DIMENSION(2) :: fm_ks_Gamma, &
164 TYPE(cp_fm_type),
DIMENSION(4) :: fm_work_mo
165 TYPE(cp_fm_type) :: fm_RI_RI, &
168 fm_W_MIC_freq_1_extra, &
169 fm_W_MIC_freq_1_no_extra, &
173 TYPE(dbcsr_p_type) :: mat_ao_ao, &
175 TYPE(dbcsr_p_type),
DIMENSION(:),
POINTER :: mat_chi_Gamma_tau => null()
178 TYPE(dbcsr_p_type) :: mat_ao_ao_tensor, &
180 mat_Sigma_from_Gocc_tensor, &
181 mat_Sigma_from_Gvir_tensor, &
182 mat_W_MIC_time_tensor
185 TYPE(dbt_type) :: t_G, &
192 INTEGER :: group_size_tensor = -1, &
193 tensor_group_color = -1, &
194 num_tensor_groups = -1, &
195 diag_group_color = -1, &
196 num_diag_groups = -1, &
198 REAL(KIND=
dp) :: input_memory_per_proc_gb = -1.0_dp
199 INTEGER(KIND=int_8) :: input_memory_per_proc = -1
200 TYPE(mp_para_env_type),
POINTER :: para_env => null(), &
201 para_env_tensor => null()
202 REAL(KIND=
dp) :: occupation_3c_int = -1.0_dp, &
203 max_dist_ao_atoms = -1.0_dp, &
204 safety_factor_memory = -1.0_dp
206 INTEGER,
DIMENSION(2) :: atoms_i = -1, &
208 INTEGER :: n_atom_i = -1, &
209 n_intervals_i = -1, &
211 n_intervals_j = -1, &
212 n_atom_per_interval_ij = -1, &
213 n_intervals_inner_loop_atoms = -1, &
214 n_atom_per_il_interval = -1
215 INTEGER,
DIMENSION(:, :),
ALLOCATABLE :: i_atom_intervals, &
217 inner_loop_atom_intervals, &
220 LOGICAL,
DIMENSION(:, :),
ALLOCATABLE :: skip_Sigma_occ, &
224 LOGICAL,
DIMENSION(:),
ALLOCATABLE :: read_chi, &
226 LOGICAL,
DIMENSION(:, :),
ALLOCATABLE :: Sigma_c_exists
227 LOGICAL :: all_W_exist = .false., &
228 sigma_x_exists = .false.
229 CHARACTER(LEN=3) :: chi_name =
"chi"
230 CHARACTER(LEN=6) :: W_time_name =
"W_time"
231 CHARACTER(LEN=7) :: Sigma_x_name =
"Sigma_x"
232 CHARACTER(LEN=13) :: Sigma_p_name =
"Sigma_pos_tau", &
233 sigma_n_name =
"Sigma_neg_tau"
234 CHARACTER(LEN=default_string_length) :: prefix =
""
236 REAL(KIND=
dp) :: t1 = -1.0_dp, &
238 INTEGER :: unit_nr = -1
241 TYPE(gto_basis_set_p_type),
DIMENSION(:), &
242 ALLOCATABLE :: basis_set_AO, &
244 INTEGER,
DIMENSION(:),
ALLOCATABLE :: sizes_AO, &
246 TYPE(neighbor_list_3c_type) :: nl_3c
247 TYPE(libint_potential_type) :: ri_metric, &
251 REAL(KIND=
dp) :: energy_window_soc = -1.0_dp
252 TYPE(dbcsr_p_type),
DIMENSION(:, :),
POINTER :: mat_V_SOC_xyz => null()
253 TYPE(cp_fm_type),
DIMENSION(3) :: fm_V_SOC_xyz_mo
254 TYPE(cp_cfm_type) :: cfm_ks_spinor_ao_Gamma, &
255 cfm_SOC_spinor_ao_Gamma, &
257 TYPE(band_edges_type) :: band_edges_scf_SOC, &
261 REAL(KIND=
dp) :: energy_window_dos = -1.0_dp, &
262 energy_step_dos = -1.0_dp, &
263 broadening_dos = -1.0_dp
266 INTEGER :: int_ldos_xyz = -1
267 INTEGER,
DIMENSION(:),
POINTER :: bin_mesh => null()
268 INTEGER :: n_bins_max_for_printing = -1
269 REAL(KIND=
dp) :: unit_ldos_int_z_inv_ang2_ev = -1.0_dp
271 END TYPE post_scf_bandstructure_type
280 TYPE(post_scf_bandstructure_type),
POINTER :: bs_env
282 CHARACTER(LEN=*),
PARAMETER :: routinen =
'bs_env_release'
286 CALL timeset(routinen, handle)
288 cpassert(
ASSOCIATED(bs_env))
290 CALL safe_kpoints_release(bs_env%kpoints_chi_eps_W)
291 CALL safe_kpoints_release(bs_env%kpoints_DOS)
292 CALL safe_kpoints_release(bs_env%kpoints_bandstructure)
294 IF (
ALLOCATED(bs_env%wkp_s_p))
DEALLOCATE (bs_env%wkp_s_p)
295 IF (
ALLOCATED(bs_env%wkp_no_extra))
DEALLOCATE (bs_env%wkp_no_extra)
296 IF (
ALLOCATED(bs_env%l_RI))
DEALLOCATE (bs_env%l_RI)
297 IF (
ALLOCATED(bs_env%xkp_special))
DEALLOCATE (bs_env%xkp_special)
298 IF (
ALLOCATED(bs_env%kp_special_name))
DEALLOCATE (bs_env%kp_special_name)
299 IF (
ALLOCATED(bs_env%atoms_i_primitive_cell))
DEALLOCATE (bs_env%atoms_i_primitive_cell)
300 IF (
ALLOCATED(bs_env%ref_atom_primitive_cell))
DEALLOCATE (bs_env%ref_atom_primitive_cell)
301 IF (
ALLOCATED(bs_env%cell_of_i_atom))
DEALLOCATE (bs_env%cell_of_i_atom)
302 IF (
ALLOCATED(bs_env%imag_time_points))
DEALLOCATE (bs_env%imag_time_points)
303 IF (
ALLOCATED(bs_env%imag_freq_points))
DEALLOCATE (bs_env%imag_freq_points)
304 IF (
ALLOCATED(bs_env%eigenval_scf_Gamma))
DEALLOCATE (bs_env%eigenval_scf_Gamma)
305 IF (
ALLOCATED(bs_env%eigenval_scf))
DEALLOCATE (bs_env%eigenval_scf)
306 IF (
ALLOCATED(bs_env%eigenval_G0W0))
DEALLOCATE (bs_env%eigenval_G0W0)
307 IF (
ALLOCATED(bs_env%eigenval_scGW0))
DEALLOCATE (bs_env%eigenval_scGW0)
308 IF (
ALLOCATED(bs_env%eigenval_prim_cell_scf))
DEALLOCATE (bs_env%eigenval_prim_cell_scf)
309 IF (
ALLOCATED(bs_env%eigenval_prim_cell_scf_soc))
DEALLOCATE (bs_env%eigenval_prim_cell_scf_soc)
310 IF (
ALLOCATED(bs_env%eigenval_prim_cell_G0W0))
DEALLOCATE (bs_env%eigenval_prim_cell_G0W0)
311 IF (
ALLOCATED(bs_env%eigenval_prim_cell_G0W0_soc))
DEALLOCATE (bs_env%eigenval_prim_cell_G0W0_soc)
312 IF (
ALLOCATED(bs_env%eigenval_scf_soc))
DEALLOCATE (bs_env%eigenval_scf_soc)
313 IF (
ALLOCATED(bs_env%eigenval_G0W0_soc))
DEALLOCATE (bs_env%eigenval_G0W0_soc)
314 IF (
ALLOCATED(bs_env%i_ao_start_from_atom))
DEALLOCATE (bs_env%i_ao_start_from_atom)
315 IF (
ALLOCATED(bs_env%i_ao_end_from_atom))
DEALLOCATE (bs_env%i_ao_end_from_atom)
316 IF (
ALLOCATED(bs_env%i_RI_start_from_atom))
DEALLOCATE (bs_env%i_RI_start_from_atom)
317 IF (
ALLOCATED(bs_env%i_RI_end_from_atom))
DEALLOCATE (bs_env%i_RI_end_from_atom)
318 IF (
ALLOCATED(bs_env%i_atom_intervals))
DEALLOCATE (bs_env%i_atom_intervals)
319 IF (
ALLOCATED(bs_env%j_atom_intervals))
DEALLOCATE (bs_env%j_atom_intervals)
320 IF (
ALLOCATED(bs_env%atoms_i_t_group))
DEALLOCATE (bs_env%atoms_i_t_group)
321 IF (
ALLOCATED(bs_env%atoms_j_t_group))
DEALLOCATE (bs_env%atoms_j_t_group)
322 IF (
ALLOCATED(bs_env%skip_Sigma_occ))
DEALLOCATE (bs_env%skip_Sigma_occ)
323 IF (
ALLOCATED(bs_env%skip_Sigma_vir))
DEALLOCATE (bs_env%skip_Sigma_vir)
324 IF (
ALLOCATED(bs_env%read_chi))
DEALLOCATE (bs_env%read_chi)
325 IF (
ALLOCATED(bs_env%calc_chi))
DEALLOCATE (bs_env%calc_chi)
326 IF (
ALLOCATED(bs_env%Sigma_c_exists))
DEALLOCATE (bs_env%Sigma_c_exists)
327 IF (
ALLOCATED(bs_env%sizes_AO))
DEALLOCATE (bs_env%sizes_AO)
328 IF (
ALLOCATED(bs_env%sizes_RI))
DEALLOCATE (bs_env%sizes_RI)
330 CALL cp_fm_release(bs_env%fm_s_Gamma)
331 CALL cp_fm_release(bs_env%fm_ks_Gamma(1))
332 CALL cp_fm_release(bs_env%fm_ks_Gamma(2))
333 CALL cp_fm_release(bs_env%fm_V_xc_Gamma(1))
334 CALL cp_fm_release(bs_env%fm_V_xc_Gamma(2))
335 CALL cp_fm_release(bs_env%fm_mo_coeff_Gamma(1))
336 CALL cp_fm_release(bs_env%fm_mo_coeff_Gamma(2))
337 CALL cp_fm_release(bs_env%fm_Gocc)
338 CALL cp_fm_release(bs_env%fm_Gvir)
339 CALL cp_fm_release(bs_env%fm_work_mo(1))
340 CALL cp_fm_release(bs_env%fm_work_mo(2))
341 CALL cp_fm_release(bs_env%fm_work_mo(3))
342 CALL cp_fm_release(bs_env%fm_work_mo(4))
343 CALL cp_fm_release(bs_env%fm_RI_RI)
344 CALL cp_fm_release(bs_env%fm_chi_Gamma_freq)
345 CALL cp_fm_release(bs_env%fm_W_MIC_freq)
346 CALL cp_fm_release(bs_env%fm_W_MIC_freq_1_extra)
347 CALL cp_fm_release(bs_env%fm_W_MIC_freq_1_no_extra)
348 CALL cp_fm_release(bs_env%fm_h_G0W0_Gamma)
350 CALL release_dbcsr_p_type(bs_env%mat_ao_ao)
351 CALL release_dbcsr_p_type(bs_env%mat_RI_RI)
352 CALL safe_dbcsr_deallocate_matrix_set_1d(bs_env%mat_chi_Gamma_tau)
354 CALL release_dbcsr_p_type(bs_env%mat_ao_ao_tensor)
355 CALL release_dbcsr_p_type(bs_env%mat_RI_RI_tensor)
356 CALL release_dbcsr_p_type(bs_env%mat_Sigma_from_Gocc_tensor)
357 CALL release_dbcsr_p_type(bs_env%mat_Sigma_from_Gvir_tensor)
358 CALL release_dbcsr_p_type(bs_env%mat_W_MIC_time_tensor)
363 CALL safe_dbt_destroy(bs_env%t_G)
364 CALL safe_dbt_destroy(bs_env%t_chi)
365 CALL safe_dbt_destroy(bs_env%t_W)
366 CALL safe_dbt_destroy(bs_env%t_RI_AO__AO)
367 CALL safe_dbt_destroy(bs_env%t_RI__AO_AO)
369 IF (
ALLOCATED(bs_env%basis_set_AO))
DEALLOCATE (bs_env%basis_set_AO)
370 IF (
ALLOCATED(bs_env%basis_set_RI))
DEALLOCATE (bs_env%basis_set_RI)
373 CALL safe_dbcsr_deallocate_matrix_set_2d(bs_env%mat_V_SOC_xyz)
374 CALL cp_fm_release(bs_env%fm_V_SOC_xyz_mo(1))
375 CALL cp_fm_release(bs_env%fm_V_SOC_xyz_mo(2))
376 CALL cp_fm_release(bs_env%fm_V_SOC_xyz_mo(3))
383 CALL timestop(handle)
391 SUBROUTINE safe_kpoints_release(kpoints)
392 TYPE(kpoint_type),
POINTER :: kpoints
396 END SUBROUTINE safe_kpoints_release
402 SUBROUTINE release_dbcsr_p_type(dbcsr_p_type_matrix)
403 TYPE(dbcsr_p_type) :: dbcsr_p_type_matrix
405 IF (
ASSOCIATED(dbcsr_p_type_matrix%matrix))
THEN
406 CALL dbcsr_release(dbcsr_p_type_matrix%matrix)
407 DEALLOCATE (dbcsr_p_type_matrix%matrix)
410 END SUBROUTINE release_dbcsr_p_type
416 SUBROUTINE safe_dbt_destroy(t)
419 IF (
ASSOCIATED(t%matrix_rep))
CALL dbt_destroy(t)
421 END SUBROUTINE safe_dbt_destroy
427 SUBROUTINE safe_dbcsr_deallocate_matrix_set_1d(dbcsr_p_type_matrix_array)
429 TYPE(dbcsr_p_type),
DIMENSION(:),
POINTER :: dbcsr_p_type_matrix_array
433 END SUBROUTINE safe_dbcsr_deallocate_matrix_set_1d
438 SUBROUTINE safe_dbcsr_deallocate_matrix_set_2d(dbcsr_p_type_matrix_array)
440 TYPE(dbcsr_p_type),
DIMENSION(:, :),
POINTER :: dbcsr_p_type_matrix_array
444 END SUBROUTINE safe_dbcsr_deallocate_matrix_set_2d
Represents a complex full matrix distributed on many processors.
subroutine, public cp_cfm_release(matrix)
Releases a full matrix.
DBCSR operations in CP2K.
represent a full matrix distributed on many processors
This is the start of a dbt_api, all publically needed functions are exported here....
Defines the basic variable types.
integer, parameter, public int_8
integer, parameter, public dp
integer, parameter, public default_string_length
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.