Line data Source code
1 : !--------------------------------------------------------------------------------------------------!
2 : ! CP2K: A general program to perform molecular dynamics simulations !
3 : ! Copyright 2000-2024 CP2K developers group <https://cp2k.org> !
4 : ! !
5 : ! SPDX-License-Identifier: GPL-2.0-or-later !
6 : !--------------------------------------------------------------------------------------------------!
7 :
8 : ! **************************************************************************************************
9 : !> \brief Types needed for MP2 calculations
10 : !> \par History
11 : !> 2011.05 created [Mauro Del Ben]
12 : !> \author MDB
13 : ! **************************************************************************************************
14 : MODULE mp2_types
15 : USE cp_eri_mme_interface, ONLY: cp_eri_mme_finalize,&
16 : cp_eri_mme_param
17 : USE cp_fm_types, ONLY: cp_fm_type
18 : USE dbcsr_api, ONLY: dbcsr_p_type,&
19 : dbcsr_type
20 : USE hfx_types, ONLY: hfx_release,&
21 : hfx_type,&
22 : pair_list_element_type
23 : USE input_constants, ONLY: &
24 : do_eri_mme, eri_default, gw_pade_approx, kp_weights_W_auto, mp2_method_direct, &
25 : mp2_method_gpw, mp2_method_none, mp2_ri_optimize_basis, ri_mp2_laplace, ri_mp2_method_gpw, &
26 : ri_rpa_g0w0_crossing_z_shot, ri_rpa_method_gpw, soc_none, wfc_mm_style_gemm
27 : USE input_section_types, ONLY: section_vals_release,&
28 : section_vals_type
29 : USE iso_c_binding, ONLY: c_null_ptr,&
30 : c_ptr
31 : USE kinds, ONLY: dp
32 : USE kpoint_types, ONLY: kpoint_type
33 : USE libint_2c_3c, ONLY: libint_potential_type
34 : USE local_gemm_api, ONLY: LOCAL_GEMM_PU_GPU,&
35 : local_gemm_create,&
36 : local_gemm_destroy,&
37 : local_gemm_set_op_threshold_gpu
38 : USE message_passing, ONLY: mp_request_type
39 : USE qs_force_types, ONLY: qs_force_type
40 : USE qs_p_env_types, ONLY: qs_p_env_type
41 : #include "./base/base_uses.f90"
42 :
43 : IMPLICIT NONE
44 :
45 : PRIVATE
46 :
47 : CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'mp2_types'
48 :
49 : PUBLIC :: mp2_type, &
50 : integ_mat_buffer_type, &
51 : integ_mat_buffer_type_2D, &
52 : mp2_method_none, &
53 : mp2_method_direct, &
54 : mp2_method_gpw, &
55 : mp2_ri_optimize_basis, &
56 : ri_mp2_method_gpw, &
57 : ri_rpa_method_gpw, &
58 : ri_mp2_laplace, &
59 : init_TShPSC_lmax
60 :
61 : PUBLIC :: mp2_env_create, &
62 : mp2_env_release, &
63 : mp2_biel_type, &
64 : pair_list_type_mp2, &
65 : one_dim_int_array, &
66 : two_dim_int_array, &
67 : one_dim_real_array, &
68 : two_dim_real_array, &
69 : three_dim_real_array
70 :
71 : INTEGER, SAVE :: init_TShPSC_lmax = -1
72 :
73 : ! TYPE definitions
74 :
75 : TYPE one_dim_int_array
76 : INTEGER, DIMENSION(:), ALLOCATABLE :: array
77 : END TYPE one_dim_int_array
78 :
79 : TYPE two_dim_int_array
80 : INTEGER, DIMENSION(:, :), ALLOCATABLE :: array
81 : END TYPE two_dim_int_array
82 :
83 : TYPE one_dim_real_array
84 : REAL(KIND=dp), DIMENSION(:), ALLOCATABLE :: array
85 : END TYPE one_dim_real_array
86 :
87 : TYPE two_dim_real_array
88 : REAL(KIND=dp), DIMENSION(:, :), ALLOCATABLE :: array
89 : END TYPE two_dim_real_array
90 :
91 : TYPE three_dim_real_array
92 : REAL(KIND=dp), DIMENSION(:, :, :), ALLOCATABLE :: array
93 : END TYPE three_dim_real_array
94 :
95 : TYPE mp2_biel_type
96 : INTEGER, DIMENSION(:, :), ALLOCATABLE :: index_table
97 : END TYPE mp2_biel_type
98 :
99 : TYPE mp2_laplace_type
100 : INTEGER :: n_quadrature = -1, &
101 : num_integ_groups = -1
102 : END TYPE mp2_laplace_type
103 :
104 : TYPE mp2_direct_type
105 : LOGICAL :: big_send = .FALSE.
106 : END TYPE
107 :
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
117 :
118 : TYPE ri_mp2_type
119 : INTEGER :: block_size = 0, &
120 : number_integration_groups = 0
121 : LOGICAL :: print_dgemm_info = .FALSE.
122 : END TYPE ri_mp2_type
123 :
124 : TYPE ri_rpa_type
125 : INTEGER :: rpa_num_quad_points = -1, &
126 : rpa_num_integ_groups = -1, &
127 : mm_style = wfc_mm_style_gemm
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., &
134 : do_admm = .FALSE., &
135 : do_ri_axk = .FALSE., &
136 : do_rse = .FALSE., &
137 : print_dgemm_info = .FALSE.
138 : TYPE(dbcsr_type), POINTER :: mo_coeff_o => NULL(), &
139 : mo_coeff_v => NULL()
140 : REAL(KIND=dp) :: ener_axk = 0.0_dp, &
141 : rse_corr_diag = 0.0_dp, &
142 : rse_corr = 0.0_dp, &
143 : scale_rpa = 0.0_dp
144 : END TYPE ri_rpa_type
145 :
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(), &
164 : tau_wj => NULL(), &
165 : tj => NULL(), &
166 : wj => 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, &
170 : wkp_V
171 : INTEGER :: group_size_P = 0, &
172 : group_size_3c = 0, &
173 : kpoint_weights_W_method = kp_weights_W_auto, &
174 : k_mesh_g_factor = 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, &
179 : min_bsize_mo = 0, &
180 : nkp_orig = 0, &
181 : nkp_extra = 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, &
190 : ends_array_mc_block
191 :
192 : END TYPE ri_rpa_im_time_type
193 :
194 : TYPE ri_g0w0_type
195 : INTEGER :: corr_mos_occ = 0, &
196 : corr_mos_virt = 0, &
197 : corr_mos_occ_beta = 0, &
198 : corr_mos_virt_beta = 0, &
199 : num_poles = 0, &
200 : nparam_pade = 0, &
201 : analytic_continuation = gw_pade_approx
202 : REAL(KIND=dp) :: omega_max_fit = 0.0_dp
203 : INTEGER :: crossing_search = ri_rpa_g0w0_crossing_z_shot
204 : REAL(KIND=dp) :: fermi_level_offset = 0.0_dp
205 : INTEGER :: iter_evGW = 0, &
206 : iter_sc_GW0 = 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, &
225 : bse_approx = 0, &
226 : num_exc_en = 0, &
227 : num_print_exc = 0, &
228 : num_add_start_z_space = 0, &
229 : fac_max_z_space = 0, &
230 : num_new_t = 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, &
235 : eps_x = 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, &
251 : n_special_kp = 0, &
252 : nkp_self_energy = 0, &
253 : nkp_self_energy_special_kp = 0, &
254 : nkp_self_energy_monkh_pack = 0, &
255 : soc_type = soc_none
256 : REAL(KIND=dp), ALLOCATABLE, DIMENSION(:, :) :: xkp_special_kp
257 : TYPE(dbcsr_p_type), DIMENSION(:), ALLOCATABLE :: matrix_sigma_x_minus_vxc, &
258 : matrix_ks
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()
266 :
267 : !GW_DOS
268 : REAL(KIND=dp) :: dos_upper = 0.0_dp, &
269 : dos_lower = 0.0_dp, &
270 : dos_prec = 0.0_dp, &
271 : dos_eta = 0.0_dp
272 : INTEGER :: max_level_self_energy = 0, &
273 : min_level_self_energy = 0, &
274 : dos_min = 0, &
275 : dos_max = 0
276 : END TYPE ri_g0w0_type
277 :
278 : TYPE ri_basis_opt
279 : REAL(KIND=dp) :: DI_rel = 0.0_dp, &
280 : DRI = 0.0_dp, &
281 : eps_step = 0.0_dp
282 : INTEGER :: max_num_iter = 0, &
283 : basis_quality = 0
284 : INTEGER, DIMENSION(:), ALLOCATABLE :: RI_nset_per_l
285 : END TYPE ri_basis_opt
286 :
287 : TYPE grad_util
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, &
292 : PQ_half, &
293 : Gamma_PQ, &
294 : Gamma_PQ_2
295 : TYPE(dbcsr_p_type), DIMENSION(:, :), ALLOCATABLE :: G_P_ia
296 : TYPE(dbcsr_p_type), DIMENSION(:), ALLOCATABLE :: mo_coeff_o, &
297 : mo_coeff_v
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, &
303 : cphf_restart = 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
315 : END TYPE grad_util
316 :
317 : TYPE mp2_type
318 : INTEGER :: method = mp2_method_none
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()
325 : ! There is a bug with some older compilers preventing requiring an explicit initialization of allocatable components
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(), &
328 : wkp_V=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(), &
339 : matrix_ks=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(), &
342 : PQ_half=NULL(), &
343 : Gamma_PQ=NULL(), &
344 : Gamma_PQ_2=NULL(), &
345 : G_P_ia=NULL(), &
346 : mo_coeff_o=NULL(), &
347 : mo_coeff_v=NULL(), &
348 : P_mo=NULL(), W_mo=NULL(), L_jb=NULL())
349 : #else
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()
354 : #endif
355 : REAL(KIND=dp) :: mp2_memory = 0.0_dp, &
356 : scale_S = 0.0_dp, &
357 : scale_T = 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.
366 : INTEGER :: eri_method = eri_default
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, &
374 : e_range = 0.0_dp
375 : END TYPE mp2_type
376 :
377 : TYPE integ_mat_buffer_type
378 : REAL(KIND=dp), DIMENSION(:), ALLOCATABLE :: msg
379 : INTEGER, DIMENSION(:), ALLOCATABLE :: sizes
380 : INTEGER, DIMENSION(:, :), ALLOCATABLE :: indx
381 : INTEGER :: proc = -1
382 : TYPE(mp_request_type) :: msg_req = mp_request_type()
383 : END TYPE integ_mat_buffer_type
384 :
385 : TYPE integ_mat_buffer_type_2D
386 : REAL(KIND=dp), DIMENSION(:, :), ALLOCATABLE :: msg
387 : INTEGER :: proc = -1
388 : TYPE(mp_request_type) :: msg_req = mp_request_type()
389 : END TYPE integ_mat_buffer_type_2D
390 :
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
396 :
397 : CONTAINS
398 :
399 : ! **************************************************************************************************
400 : !> \brief ...
401 : !> \param mp2_env ...
402 : ! **************************************************************************************************
403 412 : SUBROUTINE mp2_env_release(mp2_env)
404 : TYPE(mp2_type) :: mp2_env
405 :
406 : CHARACTER(LEN=*), PARAMETER :: routineN = 'mp2_env_release'
407 :
408 : INTEGER :: handle
409 :
410 412 : CALL timeset(routineN, handle)
411 :
412 : ! release the HFX section for the EXX calculation
413 412 : IF (.NOT. mp2_env%ri_rpa%reuse_hfx) THEN
414 394 : IF (ASSOCIATED(mp2_env%ri_rpa%x_data)) CALL hfx_release(mp2_env%ri_rpa%x_data)
415 : END IF
416 412 : IF (ASSOCIATED(mp2_env%ri_rpa%xc_section_aux)) CALL section_vals_release(mp2_env%ri_rpa%xc_section_aux)
417 412 : IF (ASSOCIATED(mp2_env%ri_rpa%xc_section_primary)) CALL section_vals_release(mp2_env%ri_rpa%xc_section_primary)
418 :
419 412 : IF (mp2_env%eri_method .EQ. do_eri_mme) CALL cp_eri_mme_finalize(mp2_env%eri_mme_param)
420 412 : IF (ASSOCIATED(mp2_env%eri_mme_param)) DEALLOCATE (mp2_env%eri_mme_param)
421 412 : IF (ASSOCIATED(mp2_env%ri_rpa_im_time%tau_tj)) DEALLOCATE (mp2_env%ri_rpa_im_time%tau_tj)
422 412 : IF (ASSOCIATED(mp2_env%ri_rpa_im_time%tau_wj)) DEALLOCATE (mp2_env%ri_rpa_im_time%tau_wj)
423 412 : IF (ASSOCIATED(mp2_env%ri_rpa_im_time%tj)) DEALLOCATE (mp2_env%ri_rpa_im_time%tj)
424 412 : IF (ASSOCIATED(mp2_env%ri_rpa_im_time%wj)) DEALLOCATE (mp2_env%ri_rpa_im_time%wj)
425 412 : 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 412 : 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)
427 :
428 412 : CALL local_gemm_destroy(mp2_env%local_gemm_ctx)
429 :
430 412 : CALL timestop(handle)
431 :
432 412 : END SUBROUTINE mp2_env_release
433 :
434 : ! **************************************************************************************************
435 : !> \brief ...
436 : !> \param mp2_env ...
437 : ! **************************************************************************************************
438 412 : SUBROUTINE mp2_env_create(mp2_env)
439 : TYPE(mp2_type), POINTER :: mp2_env
440 :
441 : CHARACTER(LEN=*), PARAMETER :: routineN = 'mp2_env_create'
442 :
443 : INTEGER :: handle
444 :
445 412 : CALL timeset(routineN, handle)
446 :
447 412 : CPASSERT(.NOT. ASSOCIATED(mp2_env))
448 :
449 9888 : ALLOCATE (mp2_env)
450 :
451 : ! these two functions are empty if spla is build without gpu support and
452 : ! OFFLOAD_GEMM is not given at compilation time
453 :
454 412 : CALL local_gemm_create(mp2_env%local_gemm_ctx, LOCAL_GEMM_PU_GPU)
455 412 : CALL local_gemm_set_op_threshold_gpu(mp2_env%local_gemm_ctx, 128*128*128*2)
456 :
457 412 : NULLIFY (mp2_env%ri_rpa%x_data)
458 :
459 412 : CALL timestop(handle)
460 :
461 412 : END SUBROUTINE mp2_env_create
462 :
463 0 : END MODULE mp2_types
|