18 USE dbcsr_api,
ONLY: dbcsr_p_type,&
22 pair_list_element_type
29 USE iso_c_binding,
ONLY: c_null_ptr,&
41 #include "./base/base_uses.f90"
47 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'mp2_types'
50 integ_mat_buffer_type, &
51 integ_mat_buffer_type_2d, &
75 TYPE one_dim_int_array
76 INTEGER,
DIMENSION(:),
ALLOCATABLE :: array
77 END TYPE one_dim_int_array
79 TYPE two_dim_int_array
80 INTEGER,
DIMENSION(:, :),
ALLOCATABLE :: array
81 END TYPE two_dim_int_array
83 TYPE one_dim_real_array
84 REAL(kind=
dp),
DIMENSION(:),
ALLOCATABLE :: array
85 END TYPE one_dim_real_array
87 TYPE two_dim_real_array
88 REAL(kind=
dp),
DIMENSION(:, :),
ALLOCATABLE :: array
89 END TYPE two_dim_real_array
91 TYPE three_dim_real_array
92 REAL(kind=
dp),
DIMENSION(:, :, :),
ALLOCATABLE :: array
93 END TYPE three_dim_real_array
96 INTEGER,
DIMENSION(:, :),
ALLOCATABLE :: index_table
97 END TYPE mp2_biel_type
100 INTEGER :: n_quadrature = -1, &
101 num_integ_groups = -1
102 END TYPE mp2_laplace_type
105 LOGICAL :: big_send = .false.
108 TYPE mp2_gpw_r3d_rs_type
109 REAL(kind=
dp) :: eps_grid = 0.0_dp, &
110 eps_filter = 0.0_dp, &
111 eps_pgf_orb_s = 0.0_dp
112 INTEGER :: print_level = 0
113 REAL(kind=
dp) :: cutoff = 0.0_dp, &
114 relative_cutoff = 0.0_dp
115 INTEGER :: size_lattice_sum = 0
116 END TYPE mp2_gpw_r3d_rs_type
119 INTEGER :: block_size = 0, &
120 number_integration_groups = 0
121 LOGICAL :: print_dgemm_info = .false.
125 INTEGER :: rpa_num_quad_points = -1, &
126 rpa_num_integ_groups = -1, &
128 TYPE(hfx_type),
DIMENSION(:, :),
POINTER :: x_data => null()
129 TYPE(section_vals_type),
POINTER :: xc_section_primary => null(), &
130 xc_section_aux => null()
131 LOGICAL :: reuse_hfx = .false., &
132 minimax_quad = .false., &
133 do_ri_g0w0 = .false., &
135 do_ri_axk = .false., &
137 print_dgemm_info = .false.
138 TYPE(dbcsr_type),
POINTER :: mo_coeff_o => null(), &
140 REAL(kind=
dp) :: ener_axk = 0.0_dp, &
141 rse_corr_diag = 0.0_dp, &
146 TYPE ri_rpa_im_time_type
147 INTEGER :: cut_memory = 0
148 LOGICAL :: memory_info = .false., &
149 make_chi_pos_definite = .false., &
150 make_overlap_mat_ao_pos_definite = .false., &
151 trunc_coulomb_ri_x = .false., &
152 keep_quad = .false., &
153 do_kpoints_from_gamma = .false., &
154 do_extrapolate_kpoints = .false.
155 REAL(kind=
dp) :: eps_filter = 0.0_dp, &
156 eps_filter_factor = 0.0_dp, &
157 eps_compress = 0.0_dp, &
158 exp_tailored_weights = 0.0_dp, &
159 regularization_ri = 0.0_dp, &
160 eps_eigval_s = 0.0_dp, &
161 eps_eigval_s_gamma = 0.0_dp, &
162 rel_cutoff_trunc_coulomb_ri_x = 0.0_dp
163 REAL(kind=
dp),
DIMENSION(:),
POINTER :: tau_tj => null(), &
167 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: weights_cos_tf_t_to_w => null(), &
168 weights_cos_tf_w_to_t => null()
169 REAL(kind=
dp),
DIMENSION(:),
ALLOCATABLE :: eigenval_gamma, &
171 INTEGER :: group_size_p = 0, &
175 INTEGER,
DIMENSION(:),
POINTER :: kp_grid => null()
176 INTEGER,
DIMENSION(3) :: kp_grid_extra = -1
177 LOGICAL :: do_im_time_kpoints = .false.
178 INTEGER :: min_bsize = 0, &
182 TYPE(kpoint_type),
POINTER :: kpoints_g => null(), &
183 kpoints_sigma => null(), &
184 kpoints_sigma_no_xc => null()
185 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: starts_array_mc_ri, ends_array_mc_ri, &
186 starts_array_mc_block_ri, &
187 ends_array_mc_block_ri, &
188 starts_array_mc, ends_array_mc, &
189 starts_array_mc_block, &
192 END TYPE ri_rpa_im_time_type
195 INTEGER :: corr_mos_occ = 0, &
197 corr_mos_occ_beta = 0, &
198 corr_mos_virt_beta = 0, &
202 REAL(kind=
dp) :: omega_max_fit = 0.0_dp
204 REAL(kind=
dp) :: fermi_level_offset = 0.0_dp
205 INTEGER :: iter_evgw = 0, &
207 REAL(kind=
dp) :: eps_iter = 0.0_dp
208 LOGICAL :: do_ri_sigma_x = .false., &
209 do_periodic = .false., &
210 print_self_energy = .false.
211 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :, :) :: vec_sigma_x_minus_vxc_gw
212 INTEGER,
DIMENSION(:),
POINTER :: kp_grid => null(), &
213 kp_grid_sigma => null()
214 INTEGER :: num_kp_grids = 0
215 REAL(kind=
dp) :: eps_kpoint = 0.0_dp
216 LOGICAL :: do_mo_coeff_gamma = .false., &
217 do_average_deg_levels = .false.
218 REAL(kind=
dp) :: eps_eigenval = 0.0_dp
219 LOGICAL :: do_extra_kpoints = .false., &
220 do_aux_bas_gw = .false.
221 REAL(kind=
dp) :: frac_aux_mos = 0.0_dp
222 INTEGER :: num_omega_points = 0
223 INTEGER :: bse_spin_config = 0, &
224 bse_diag_method = 0, &
228 num_add_start_z_space = 0, &
229 fac_max_z_space = 0, &
231 num_davidson_iter = 0, &
232 davidson_abort_cond = 0
233 REAL(kind=
dp) :: eps_res = 0.0_dp, &
234 eps_exc_en = 0.0_dp, &
236 bse_cutoff_occ = 0.0_dp, &
237 bse_cutoff_virt = 0.0_dp, &
238 z_space_energy_cutoff = 0.0_dp
239 LOGICAL :: do_bse = .false., &
240 bse_debug_print = .false., &
241 do_ic_model = .false., &
242 print_ic_values = .false.
243 REAL(kind=
dp) :: eps_dist = 0.0_dp
244 TYPE(one_dim_real_array),
DIMENSION(2) :: ic_corr_list = one_dim_real_array(null())
245 INTEGER :: print_exx = 0
246 LOGICAL :: do_gamma_only_sigma = .false.
247 LOGICAL :: update_xc_energy = .false., &
248 do_kpoints_sigma = .false., &
249 print_local_bandgap = .false.
250 INTEGER :: n_kp_in_kp_line = 0, &
252 nkp_self_energy = 0, &
253 nkp_self_energy_special_kp = 0, &
254 nkp_self_energy_monkh_pack = 0, &
256 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: xkp_special_kp
257 TYPE(dbcsr_p_type),
DIMENSION(:),
ALLOCATABLE :: matrix_sigma_x_minus_vxc, &
259 REAL(kind=
dp) :: broadening_print_loc_bandgap = 0.0_dp, &
260 energy_window_print_loc_bandgap = 0.0_dp, &
261 ldos_thresh_print_loc_bandgap = 0.0_dp, &
262 energy_spacing_print_loc_bandgap = 0.0_dp, &
263 regularization_minimax = 0.0_dp, &
264 soc_energy_window = 0.0_dp
265 INTEGER,
DIMENSION(:),
POINTER :: stride_loc_bandgap => null()
268 REAL(kind=
dp) :: dos_upper = 0.0_dp, &
269 dos_lower = 0.0_dp, &
272 INTEGER :: max_level_self_energy = 0, &
273 min_level_self_energy = 0, &
276 END TYPE ri_g0w0_type
279 REAL(kind=
dp) :: di_rel = 0.0_dp, &
282 INTEGER :: max_num_iter = 0, &
284 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ri_nset_per_l
285 END TYPE ri_basis_opt
288 TYPE(two_dim_real_array),
DIMENSION(2) :: p_ij = two_dim_real_array(null()), &
289 p_ab = two_dim_real_array(null())
290 TYPE(three_dim_real_array),
DIMENSION(2) :: gamma_p_ia = three_dim_real_array(null())
291 REAL(kind=
dp),
DIMENSION(:, :),
ALLOCATABLE :: operator_half, &
295 TYPE(dbcsr_p_type),
DIMENSION(:, :),
ALLOCATABLE :: g_p_ia
296 TYPE(dbcsr_p_type),
DIMENSION(:),
ALLOCATABLE :: mo_coeff_o, &
298 TYPE(cp_fm_type),
ALLOCATABLE,
DIMENSION(:) :: p_mo, w_mo, l_jb
299 REAL(kind=
dp) :: cphf_eps_conv = 0.0_dp, &
300 scale_step_size = 0.0_dp
301 INTEGER :: cphf_max_num_iter = 0, &
302 z_solver_method = 0, &
304 LOGICAL :: enforce_decrease = .false., &
305 recalc_residual = .false., &
306 polak_ribiere = .false.
307 TYPE(qs_p_env_type),
POINTER :: p_env => null()
308 TYPE(qs_force_type),
DIMENSION(:),
POINTER :: mp2_force => null()
309 REAL(kind=
dp),
DIMENSION(3, 3) :: mp2_virial = 0.0_dp
310 REAL(
dp) :: eps_canonical = 0.0_dp
311 LOGICAL :: free_hfx_buffer = .false.
312 LOGICAL :: use_old_grad = .false.
313 INTEGER :: dot_blksize = 0
314 INTEGER :: max_parallel_comm = 0
319 TYPE(mp2_laplace_type) :: ri_laplace = mp2_laplace_type()
320 TYPE(mp2_direct_type) :: direct_canonical = mp2_direct_type()
321 TYPE(libint_potential_type) :: potential_parameter = libint_potential_type()
322 TYPE(mp2_gpw_r3d_rs_type) ::
mp2_gpw = mp2_gpw_r3d_rs_type()
323 TYPE(ri_mp2_type) :: ri_mp2 = ri_mp2_type()
324 TYPE(ri_rpa_type) :: ri_rpa = ri_rpa_type()
326 #if __GNUC__ < 9 || (__GNUC__ == 9 && __GNUC_MINOR__ < 5)
327 TYPE(ri_rpa_im_time_type) :: ri_rpa_im_time = ri_rpa_im_time_type(eigenval_gamma=null(), &
329 starts_array_mc_ri=null(), &
330 ends_array_mc_ri=null(), &
331 starts_array_mc_block_ri=null(), &
332 ends_array_mc_block_ri=null(), &
333 starts_array_mc=null(), ends_array_mc=null(), &
334 starts_array_mc_block=null(), &
335 ends_array_mc_block=null())
336 TYPE(ri_g0w0_type) :: ri_g0w0 = ri_g0w0_type(vec_sigma_x_minus_vxc_gw=null(), &
337 xkp_special_kp=null(), &
338 matrix_sigma_x_minus_vxc=null(), &
340 TYPE(ri_basis_opt) :: ri_opt_param = ri_basis_opt(ri_nset_per_l=null())
341 TYPE(grad_util) :: ri_grad = grad_util(operator_half=null(), &
348 p_mo=null(), w_mo=null(), l_jb=null())
350 TYPE(ri_rpa_im_time_type) :: ri_rpa_im_time = ri_rpa_im_time_type()
351 TYPE(ri_g0w0_type) :: ri_g0w0 = ri_g0w0_type()
352 TYPE(ri_basis_opt) :: ri_opt_param = ri_basis_opt()
353 TYPE(grad_util) :: ri_grad = grad_util()
355 REAL(kind=
dp) :: mp2_memory = 0.0_dp, &
358 INTEGER :: mp2_num_proc = 0
359 INTEGER :: block_size_row = 0
360 INTEGER :: block_size_col = 0
361 LOGICAL :: calc_pq_cond_num = .false.
362 LOGICAL :: hf_fail = .false.
363 LOGICAL :: p_screen = .false.
364 LOGICAL :: not_last_hfx = .false.
365 LOGICAL :: do_im_time = .false.
367 TYPE(cp_eri_mme_param),
POINTER :: eri_mme_param => null()
368 INTEGER,
DIMENSION(:),
POINTER :: eri_blksize => null()
369 LOGICAL :: do_svd = .false.
370 REAL(kind=
dp) :: eps_range = 0.0_dp
371 TYPE(libint_potential_type) :: ri_metric = libint_potential_type()
372 TYPE(c_ptr) :: local_gemm_ctx = c_null_ptr
373 REAL(
dp) :: e_gap = 0.0_dp, &
377 TYPE integ_mat_buffer_type
378 REAL(kind=
dp),
DIMENSION(:),
ALLOCATABLE :: msg
379 INTEGER,
DIMENSION(:),
ALLOCATABLE :: sizes
380 INTEGER,
DIMENSION(:, :),
ALLOCATABLE :: indx
382 TYPE(mp_request_type) :: msg_req = mp_request_type()
383 END TYPE integ_mat_buffer_type
385 TYPE integ_mat_buffer_type_2d
386 REAL(kind=
dp),
DIMENSION(:, :),
ALLOCATABLE :: msg
388 TYPE(mp_request_type) :: msg_req = mp_request_type()
389 END TYPE integ_mat_buffer_type_2d
391 TYPE pair_list_type_mp2
392 TYPE(pair_list_element_type),
DIMENSION(:), &
393 ALLOCATABLE :: elements
394 INTEGER :: n_element = 0
395 END TYPE pair_list_type_mp2
404 TYPE(mp2_type) :: mp2_env
406 CHARACTER(LEN=*),
PARAMETER :: routinen =
'mp2_env_release'
410 CALL timeset(routinen, handle)
413 IF (.NOT. mp2_env%ri_rpa%reuse_hfx)
THEN
414 IF (
ASSOCIATED(mp2_env%ri_rpa%x_data))
CALL hfx_release(mp2_env%ri_rpa%x_data)
416 IF (
ASSOCIATED(mp2_env%ri_rpa%xc_section_aux))
CALL section_vals_release(mp2_env%ri_rpa%xc_section_aux)
417 IF (
ASSOCIATED(mp2_env%ri_rpa%xc_section_primary))
CALL section_vals_release(mp2_env%ri_rpa%xc_section_primary)
420 IF (
ASSOCIATED(mp2_env%eri_mme_param))
DEALLOCATE (mp2_env%eri_mme_param)
421 IF (
ASSOCIATED(mp2_env%ri_rpa_im_time%tau_tj))
DEALLOCATE (mp2_env%ri_rpa_im_time%tau_tj)
422 IF (
ASSOCIATED(mp2_env%ri_rpa_im_time%tau_wj))
DEALLOCATE (mp2_env%ri_rpa_im_time%tau_wj)
423 IF (
ASSOCIATED(mp2_env%ri_rpa_im_time%tj))
DEALLOCATE (mp2_env%ri_rpa_im_time%tj)
424 IF (
ASSOCIATED(mp2_env%ri_rpa_im_time%wj))
DEALLOCATE (mp2_env%ri_rpa_im_time%wj)
425 IF (
ASSOCIATED(mp2_env%ri_rpa_im_time%weights_cos_tf_t_to_w))
DEALLOCATE (mp2_env%ri_rpa_im_time%weights_cos_tf_t_to_w)
426 IF (
ASSOCIATED(mp2_env%ri_rpa_im_time%weights_cos_tf_w_to_t))
DEALLOCATE (mp2_env%ri_rpa_im_time%weights_cos_tf_w_to_t)
430 CALL timestop(handle)
439 TYPE(mp2_type),
POINTER :: mp2_env
441 CHARACTER(LEN=*),
PARAMETER :: routinen =
'mp2_env_create'
445 CALL timeset(routinen, handle)
447 cpassert(.NOT.
ASSOCIATED(mp2_env))
457 NULLIFY (mp2_env%ri_rpa%x_data)
459 CALL timestop(handle)
Interface to Minimax-Ewald method for periodic ERI's to be used in CP2K.
subroutine, public cp_eri_mme_finalize(param)
Release eri mme data. Prints some statistics on summation methods chosen.
represent a full matrix distributed on many processors
Types and set/get functions for HFX.
subroutine, public hfx_release(x_data)
This routine deallocates all data structures
Defines the basic variable types.
integer, parameter, public dp
Types and basic routines needed for a kpoint calculation.
2- and 3-center electron repulsion integral routines based on libint2 Currently available operators: ...
subroutine, public local_gemm_set_op_threshold_gpu(ctx, opThresholdGPU)
...
integer, parameter, public local_gemm_pu_gpu
subroutine, public local_gemm_destroy(ctx)
release resources associated to a gemm context
subroutine, public local_gemm_create(ctx, pu)
create a context for handling gemm offloading
Interface to the message passing library MPI.
Calls routines to get RI integrals and calculate total energies.
Types needed for MP2 calculations.
subroutine, public mp2_env_create(mp2_env)
...
integer, save, public init_tshpsc_lmax
subroutine, public mp2_env_release(mp2_env)
...
basis types for the calculation of the perturbation of density theory.