Line data Source code
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 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_dbcsr_api, ONLY: dbcsr_p_type,&
16 : dbcsr_type
17 : USE cp_eri_mme_interface, ONLY: cp_eri_mme_finalize,&
18 : cp_eri_mme_param
19 : USE cp_fm_types, ONLY: cp_fm_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, rpa_exchange_none, soc_none, &
27 : wfc_mm_style_gemm
28 : USE input_section_types, ONLY: section_vals_release,&
29 : section_vals_type
30 : USE kinds, ONLY: dp
31 : USE kpoint_types, ONLY: kpoint_type
32 : USE libint_2c_3c, ONLY: libint_potential_type
33 : USE local_gemm_api, ONLY: local_gemm_ctxt_type
34 : USE message_passing, ONLY: mp_request_type
35 : USE qs_force_types, ONLY: qs_force_type
36 : USE qs_p_env_types, ONLY: qs_p_env_type
37 : USE time_frequency_grids, ONLY: time_frequency_grid_release,&
38 : time_frequency_grid_type
39 : #include "./base/base_uses.f90"
40 :
41 : IMPLICIT NONE
42 :
43 : PRIVATE
44 :
45 : CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'mp2_types'
46 :
47 : PUBLIC :: mp2_type, &
48 : integ_mat_buffer_type, &
49 : integ_mat_buffer_type_2D, &
50 : mp2_method_none, &
51 : mp2_method_direct, &
52 : mp2_method_gpw, &
53 : mp2_ri_optimize_basis, &
54 : ri_mp2_method_gpw, &
55 : ri_rpa_method_gpw, &
56 : ri_mp2_laplace, &
57 : init_TShPSC_lmax
58 :
59 : PUBLIC :: mp2_env_create, &
60 : mp2_env_release, &
61 : mp2_biel_type, &
62 : pair_list_type_mp2, &
63 : one_dim_int_array, &
64 : two_dim_int_array, &
65 : one_dim_real_array, &
66 : two_dim_real_array, &
67 : three_dim_real_array
68 :
69 : INTEGER, SAVE :: init_TShPSC_lmax = -1
70 :
71 : ! TYPE definitions
72 :
73 : TYPE one_dim_int_array
74 : INTEGER, DIMENSION(:), ALLOCATABLE :: array
75 : END TYPE one_dim_int_array
76 :
77 : TYPE two_dim_int_array
78 : INTEGER, DIMENSION(:, :), ALLOCATABLE :: array
79 : END TYPE two_dim_int_array
80 :
81 : TYPE one_dim_real_array
82 : REAL(KIND=dp), DIMENSION(:), ALLOCATABLE :: array
83 : END TYPE one_dim_real_array
84 :
85 : TYPE two_dim_real_array
86 : REAL(KIND=dp), DIMENSION(:, :), ALLOCATABLE :: array
87 : END TYPE two_dim_real_array
88 :
89 : TYPE three_dim_real_array
90 : REAL(KIND=dp), DIMENSION(:, :, :), ALLOCATABLE :: array
91 : END TYPE three_dim_real_array
92 :
93 : TYPE mp2_biel_type
94 : INTEGER, DIMENSION(:, :), ALLOCATABLE :: index_table
95 : END TYPE mp2_biel_type
96 :
97 : TYPE mp2_laplace_type
98 : INTEGER :: n_quadrature = -1, &
99 : num_integ_groups = -1
100 : END TYPE mp2_laplace_type
101 :
102 : TYPE mp2_direct_type
103 : LOGICAL :: big_send = .FALSE.
104 : END TYPE mp2_direct_type
105 :
106 : TYPE mp2_gpw_type
107 : REAL(KIND=dp) :: eps_grid = 0.0_dp, &
108 : eps_filter = 0.0_dp, &
109 : eps_pgf_orb_S = 0.0_dp
110 : INTEGER :: print_level = 0
111 : REAL(KIND=dp) :: cutoff = 0.0_dp, &
112 : relative_cutoff = 0.0_dp
113 : INTEGER :: size_lattice_sum = 0
114 : END TYPE mp2_gpw_type
115 :
116 : TYPE ri_mp2_type
117 : INTEGER :: block_size = 0, &
118 : number_integration_groups = 0
119 : LOGICAL :: print_dgemm_info = .FALSE.
120 : END TYPE ri_mp2_type
121 :
122 : TYPE ri_rpa_type
123 : INTEGER :: rpa_num_quad_points = -1, &
124 : rpa_num_integ_groups = -1, &
125 : mm_style = wfc_mm_style_gemm
126 : TYPE(hfx_type), DIMENSION(:, :), POINTER :: x_data => NULL()
127 : TYPE(section_vals_type), POINTER :: xc_section_primary => Null(), &
128 : xc_section_aux => Null()
129 : LOGICAL :: reuse_hfx = .FALSE., &
130 : minimax_quad = .FALSE., &
131 : do_ri_g0w0 = .FALSE., &
132 : do_admm = .FALSE., &
133 : do_rse = .FALSE., &
134 : print_dgemm_info = .FALSE.
135 :
136 : ! GCC 8 has an issue with this being an ALLOCATABLE
137 : TYPE(dbcsr_type), DIMENSION(:), POINTER :: mo_coeff_o => NULL(), &
138 : mo_coeff_v => NULL()
139 : INTEGER :: exchange_correction = rpa_exchange_none, &
140 : exchange_block_size = -1
141 : LOGICAL :: use_hfx_implementation = .FALSE.
142 : REAL(KIND=dp) :: ener_exchange = 0.0_dp, &
143 : rse_corr_diag = 0.0_dp, &
144 : rse_corr = 0.0_dp, &
145 : scale_rpa = 0.0_dp
146 :
147 : !LOGICAL :: do_sigma = .FALSE.
148 : INTEGER :: sigma_param = 0.0_dp
149 : REAL(KIND=dp) :: e_sigma_corr = 0.0_dp
150 :
151 : END TYPE ri_rpa_type
152 :
153 : TYPE ri_rpa_im_time_type
154 : INTEGER :: cut_memory = 0
155 : LOGICAL :: memory_info = .FALSE., &
156 : make_chi_pos_definite = .FALSE., &
157 : make_overlap_mat_ao_pos_definite = .FALSE., &
158 : trunc_coulomb_ri_x = .FALSE., &
159 : keep_quad = .FALSE., &
160 : do_kpoints_from_Gamma = .FALSE., &
161 : do_extrapolate_kpoints = .FALSE.
162 : REAL(KIND=dp) :: eps_filter = 0.0_dp, &
163 : eps_filter_factor = 0.0_dp, &
164 : eps_compress = 0.0_dp, &
165 : exp_tailored_weights = 0.0_dp, &
166 : regularization_RI = 0.0_dp, &
167 : eps_eigval_S = 0.0_dp, &
168 : eps_eigval_S_Gamma = 0.0_dp, &
169 : rel_cutoff_trunc_coulomb_ri_x = 0.0_dp
170 : TYPE(time_frequency_grid_type) :: time_frequency_grid
171 : REAL(KIND=dp), DIMENSION(:), ALLOCATABLE :: Eigenval_Gamma, &
172 : wkp_V
173 : INTEGER :: group_size_P = 0, &
174 : group_size_3c = 0, &
175 : kpoint_weights_W_method = kp_weights_W_auto, &
176 : k_mesh_g_factor = 0
177 : INTEGER, DIMENSION(:), POINTER :: kp_grid => NULL()
178 : INTEGER, DIMENSION(3) :: kp_grid_extra = -1
179 : LOGICAL :: do_im_time_kpoints = .FALSE.
180 : INTEGER :: min_bsize = 0, &
181 : min_bsize_mo = 0, &
182 : nkp_orig = 0, &
183 : nkp_extra = 0
184 : TYPE(kpoint_type), POINTER :: kpoints_G => NULL(), &
185 : kpoints_Sigma => NULL(), &
186 : kpoints_Sigma_no_xc => NULL()
187 : INTEGER, ALLOCATABLE, DIMENSION(:) :: starts_array_mc_RI, ends_array_mc_RI, &
188 : starts_array_mc_block_RI, &
189 : ends_array_mc_block_RI, &
190 : starts_array_mc, ends_array_mc, &
191 : starts_array_mc_block, &
192 : ends_array_mc_block
193 :
194 : END TYPE ri_rpa_im_time_type
195 :
196 : TYPE ri_g0w0_type
197 : INTEGER :: corr_mos_occ = 0, &
198 : corr_mos_virt = 0, &
199 : corr_mos_occ_beta = 0, &
200 : corr_mos_virt_beta = 0, &
201 : num_poles = 0, &
202 : nparam_pade = 0, &
203 : analytic_continuation = gw_pade_approx
204 : REAL(KIND=dp) :: omega_max_fit = 0.0_dp
205 : INTEGER :: crossing_search = ri_rpa_g0w0_crossing_z_shot
206 : REAL(KIND=dp) :: fermi_level_offset = 0.0_dp
207 : INTEGER :: iter_evGW = 0, &
208 : iter_sc_GW0 = 0
209 : REAL(KIND=dp) :: eps_iter = 0.0_dp
210 : LOGICAL :: do_hedin_shift = .FALSE., &
211 : do_ri_Sigma_x = .FALSE., &
212 : do_periodic = .FALSE., &
213 : print_self_energy = .FALSE.
214 : REAL(KIND=dp), ALLOCATABLE, DIMENSION(:, :, :) :: vec_Sigma_x_minus_vxc_gw
215 : INTEGER, DIMENSION(:), POINTER :: kp_grid => NULL(), &
216 : kp_grid_Sigma => NULL()
217 : INTEGER :: num_kp_grids = 0
218 : REAL(KIND=dp) :: eps_kpoint = 0.0_dp
219 : LOGICAL :: do_mo_coeff_gamma = .FALSE., &
220 : do_average_deg_levels = .FALSE.
221 : REAL(KIND=dp) :: eps_eigenval = 0.0_dp
222 : LOGICAL :: do_extra_kpoints = .FALSE., &
223 : do_aux_bas_gw = .FALSE.
224 : REAL(KIND=dp) :: frac_aux_mos = 0.0_dp
225 : INTEGER :: num_omega_points = 0
226 : LOGICAL :: do_ic_model = .FALSE., &
227 : print_ic_values = .FALSE.
228 : REAL(KIND=dp) :: eps_dist = 0.0_dp
229 : TYPE(one_dim_real_array), DIMENSION(2) :: ic_corr_list = one_dim_real_array(NULL())
230 : INTEGER :: print_exx = 0
231 : LOGICAL :: do_gamma_only_sigma = .FALSE.
232 : LOGICAL :: update_xc_energy = .FALSE., &
233 : do_kpoints_Sigma = .FALSE., &
234 : print_local_bandgap = .FALSE.
235 : INTEGER :: n_kp_in_kp_line = 0, &
236 : n_special_kp = 0, &
237 : nkp_self_energy = 0, &
238 : nkp_self_energy_special_kp = 0, &
239 : nkp_self_energy_monkh_pack = 0, &
240 : soc_type = soc_none
241 : REAL(KIND=dp), ALLOCATABLE, DIMENSION(:, :) :: xkp_special_kp
242 : TYPE(dbcsr_p_type), DIMENSION(:), ALLOCATABLE :: matrix_sigma_x_minus_vxc, &
243 : matrix_ks
244 : REAL(KIND=dp) :: broadening_print_loc_bandgap = 0.0_dp, &
245 : energy_window_print_loc_bandgap = 0.0_dp, &
246 : ldos_thresh_print_loc_bandgap = 0.0_dp, &
247 : energy_spacing_print_loc_bandgap = 0.0_dp, &
248 : regularization_minimax = 0.0_dp, &
249 : soc_energy_window = 0.0_dp
250 : INTEGER, DIMENSION(:), POINTER :: stride_loc_bandgap => NULL()
251 :
252 : !GW_DOS
253 : REAL(KIND=dp) :: dos_upper = 0.0_dp, &
254 : dos_lower = 0.0_dp, &
255 : dos_prec = 0.0_dp, &
256 : dos_eta = 0.0_dp
257 : INTEGER :: max_level_self_energy = 0, &
258 : min_level_self_energy = 0, &
259 : dos_min = 0, &
260 : dos_max = 0
261 : END TYPE ri_g0w0_type
262 :
263 : TYPE ri_basis_opt
264 : REAL(KIND=dp) :: DI_rel = 0.0_dp, &
265 : DRI = 0.0_dp, &
266 : eps_step = 0.0_dp
267 : INTEGER :: max_num_iter = 0, &
268 : basis_quality = 0
269 : INTEGER, DIMENSION(:), ALLOCATABLE :: RI_nset_per_l
270 : END TYPE ri_basis_opt
271 :
272 : TYPE grad_util
273 : TYPE(two_dim_real_array), DIMENSION(2) :: P_ij = two_dim_real_array(NULL()), &
274 : P_ab = two_dim_real_array(NULL())
275 : TYPE(three_dim_real_array), DIMENSION(2) :: Gamma_P_ia = three_dim_real_array(NULL())
276 : REAL(KIND=dp), DIMENSION(:, :), ALLOCATABLE :: operator_half, &
277 : PQ_half, &
278 : Gamma_PQ, &
279 : Gamma_PQ_2
280 : TYPE(dbcsr_p_type), DIMENSION(:, :), ALLOCATABLE :: G_P_ia
281 : TYPE(dbcsr_p_type), DIMENSION(:), ALLOCATABLE :: mo_coeff_o, &
282 : mo_coeff_v
283 : TYPE(cp_fm_type), ALLOCATABLE, DIMENSION(:) :: P_mo, W_mo, L_jb
284 : REAL(KIND=dp) :: cphf_eps_conv = 0.0_dp, &
285 : scale_step_size = 0.0_dp
286 : INTEGER :: cphf_max_num_iter = 0, &
287 : z_solver_method = 0, &
288 : cphf_restart = 0
289 : LOGICAL :: enforce_decrease = .FALSE., &
290 : recalc_residual = .FALSE., &
291 : polak_ribiere = .FALSE.
292 : TYPE(qs_p_env_type), POINTER :: p_env => NULL()
293 : TYPE(qs_force_type), DIMENSION(:), POINTER :: mp2_force => NULL()
294 : REAL(KIND=dp), DIMENSION(3, 3) :: mp2_virial = 0.0_dp
295 : REAL(dp) :: eps_canonical = 0.0_dp
296 : LOGICAL :: free_hfx_buffer = .FALSE.
297 : INTEGER :: dot_blksize = 0
298 : INTEGER :: max_parallel_comm = 0
299 : END TYPE grad_util
300 :
301 : TYPE bse_type
302 : INTEGER :: bse_spin_config = 0, &
303 : bse_diag_method = 0, &
304 : flag_tda = 0, &
305 : num_exc_en = 0, &
306 : num_print_exc = 0, &
307 : num_print_exc_descr = 0, &
308 : screening_method = 0, &
309 : num_buffer_states = 0, &
310 : block_size = 0, &
311 : num_guess_transitions = 0, &
312 : max_subspace_factor = 0, &
313 : matvec_block_columns = -1, &
314 : memory_check = 0, &
315 : max_iter = 0, &
316 : convergence_criterion = 0, &
317 : preconditioner = 0, &
318 : abba_solver = 0
319 : REAL(KIND=dp) :: eps_res = 0.0_dp, &
320 : memory_budget_gb = 0.0_dp, &
321 : eps_energy = 0.0_dp, &
322 : eps_x = 0.0_dp, &
323 : screening_factor = 0.0_dp, &
324 : bse_cutoff_occ = 0.0_dp, &
325 : bse_cutoff_empty = 0.0_dp
326 : LOGICAL :: do_bse = .FALSE., &
327 : bse_debug_print = .FALSE., &
328 : print_directional_exc_descr = .FALSE., &
329 : print_directional_crosscorrelation = .FALSE., &
330 : use_ks_energies = .FALSE.
331 : !BSE optical spectrum
332 : REAL(KIND=dp) :: bse_spectrum_freq_step_size = 0.0_dp, &
333 : bse_spectrum_freq_start = 0.0_dp, &
334 : bse_spectrum_freq_end = 0.0_dp
335 : LOGICAL :: bse_print_spectrum = .FALSE.
336 : REAL(KIND=dp), DIMENSION(:), POINTER :: bse_eta_spectrum_list => NULL()
337 :
338 : !BSE NTO prints
339 : LOGICAL :: do_nto_analysis = .FALSE., &
340 : explicit_nto_list = .FALSE.
341 : REAL(KIND=dp) :: eps_nto_eigval = 0.0_dp, &
342 : eps_nto_osc_str = 0.0_dp
343 : INTEGER :: num_print_exc_ntos = 0
344 : INTEGER, DIMENSION(:), POINTER :: bse_nto_state_list => NULL()
345 : INTEGER, DIMENSION(:), ALLOCATABLE :: bse_nto_state_list_final
346 : END TYPE bse_type
347 :
348 : TYPE mp2_type
349 : INTEGER :: method = mp2_method_none
350 : TYPE(mp2_laplace_type) :: ri_laplace = mp2_laplace_type()
351 : TYPE(mp2_direct_type) :: direct_canonical = mp2_direct_type()
352 : TYPE(libint_potential_type) :: potential_parameter = libint_potential_type()
353 : TYPE(mp2_gpw_type) :: mp2_gpw = mp2_gpw_type()
354 : TYPE(ri_mp2_type) :: ri_mp2 = ri_mp2_type()
355 : TYPE(ri_rpa_type) :: ri_rpa = ri_rpa_type()
356 : ! There is a bug with some older compilers preventing requiring an explicit initialization of allocatable components
357 : #if defined(FTN_NO_DEFAULT_INIT)
358 : TYPE(ri_rpa_im_time_type) :: ri_rpa_im_time = ri_rpa_im_time_type( &
359 : time_frequency_grid=time_frequency_grid_type( &
360 : frequency=NULL(), &
361 : frequency_weights=NULL(), &
362 : imaginary_time=NULL(), &
363 : time_weights_at_zero_frequency=NULL(), &
364 : cosine_time_to_frequency_weights=NULL(), &
365 : cosine_frequency_to_time_weights=NULL(), &
366 : sine_time_to_frequency_weights=NULL()), &
367 : Eigenval_Gamma=NULL(), &
368 : wkp_V=NULL(), &
369 : starts_array_mc_RI=NULL(), &
370 : ends_array_mc_RI=NULL(), &
371 : starts_array_mc_block_RI=NULL(), &
372 : ends_array_mc_block_RI=NULL(), &
373 : starts_array_mc=NULL(), ends_array_mc=NULL(), &
374 : starts_array_mc_block=NULL(), &
375 : ends_array_mc_block=NULL())
376 : TYPE(ri_g0w0_type) :: ri_g0w0 = ri_g0w0_type(vec_Sigma_x_minus_vxc_gw=NULL(), &
377 : xkp_special_kp=NULL(), &
378 : matrix_sigma_x_minus_vxc=NULL(), &
379 : matrix_ks=NULL())
380 : TYPE(ri_basis_opt) :: ri_opt_param = ri_basis_opt(RI_nset_per_l=NULL())
381 : TYPE(grad_util) :: ri_grad = grad_util(operator_half=NULL(), &
382 : PQ_half=NULL(), &
383 : Gamma_PQ=NULL(), &
384 : Gamma_PQ_2=NULL(), &
385 : G_P_ia=NULL(), &
386 : mo_coeff_o=NULL(), &
387 : mo_coeff_v=NULL(), &
388 : P_mo=NULL(), W_mo=NULL(), L_jb=NULL())
389 : TYPE(bse_type) :: bse = bse_type(bse_nto_state_list_final=NULL())
390 : #else
391 : TYPE(ri_rpa_im_time_type) :: ri_rpa_im_time = ri_rpa_im_time_type()
392 : TYPE(ri_g0w0_type) :: ri_g0w0 = ri_g0w0_type()
393 : TYPE(ri_basis_opt) :: ri_opt_param = ri_basis_opt()
394 : TYPE(grad_util) :: ri_grad = grad_util()
395 : TYPE(bse_type) :: bse = bse_type()
396 : #endif
397 : REAL(KIND=dp) :: mp2_memory = 0.0_dp, &
398 : scale_S = 0.0_dp, &
399 : scale_T = 0.0_dp
400 : INTEGER :: mp2_num_proc = 0
401 : INTEGER :: block_size_row = 0
402 : INTEGER :: block_size_col = 0
403 : LOGICAL :: calc_PQ_cond_num = .FALSE.
404 : LOGICAL :: hf_fail = .FALSE.
405 : LOGICAL :: p_screen = .FALSE.
406 : LOGICAL :: not_last_hfx = .FALSE.
407 : LOGICAL :: do_im_time = .FALSE.
408 : INTEGER :: eri_method = eri_default
409 : TYPE(cp_eri_mme_param), POINTER :: eri_mme_param => NULL()
410 : INTEGER, DIMENSION(:), POINTER :: eri_blksize => NULL()
411 : LOGICAL :: do_svd = .FALSE.
412 : REAL(KIND=dp) :: eps_svd = -1.0_dp
413 : REAL(KIND=dp) :: eps_range = 0.0_dp
414 : TYPE(libint_potential_type) :: ri_metric = libint_potential_type()
415 : TYPE(local_gemm_ctxt_type) :: local_gemm_ctx = local_gemm_ctxt_type()
416 : REAL(dp) :: e_gap = 0.0_dp, &
417 : e_range = 0.0_dp
418 : LOGICAL :: ri_aux_auto_generated = .FALSE.
419 : END TYPE mp2_type
420 :
421 : TYPE integ_mat_buffer_type
422 : REAL(KIND=dp), DIMENSION(:), ALLOCATABLE :: msg
423 : INTEGER, DIMENSION(:), ALLOCATABLE :: sizes
424 : INTEGER, DIMENSION(:, :), ALLOCATABLE :: indx
425 : INTEGER :: proc = -1
426 : TYPE(mp_request_type) :: msg_req = mp_request_type()
427 : END TYPE integ_mat_buffer_type
428 :
429 : TYPE integ_mat_buffer_type_2D
430 : REAL(KIND=dp), DIMENSION(:, :), ALLOCATABLE :: msg
431 : INTEGER :: proc = -1
432 : TYPE(mp_request_type) :: msg_req = mp_request_type()
433 : END TYPE integ_mat_buffer_type_2D
434 :
435 : TYPE pair_list_type_mp2
436 : TYPE(pair_list_element_type), DIMENSION(:), &
437 : ALLOCATABLE :: elements
438 : INTEGER :: n_element = 0
439 : END TYPE pair_list_type_mp2
440 :
441 : CONTAINS
442 :
443 : ! **************************************************************************************************
444 : !> \brief ...
445 : !> \param mp2_env ...
446 : ! **************************************************************************************************
447 500 : SUBROUTINE mp2_env_release(mp2_env)
448 : TYPE(mp2_type) :: mp2_env
449 :
450 : CHARACTER(LEN=*), PARAMETER :: routineN = 'mp2_env_release'
451 :
452 : INTEGER :: handle
453 :
454 500 : CALL timeset(routineN, handle)
455 :
456 : ! release the HFX section for the EXX calculation
457 500 : IF (.NOT. mp2_env%ri_rpa%reuse_hfx) THEN
458 482 : IF (ASSOCIATED(mp2_env%ri_rpa%x_data)) CALL hfx_release(mp2_env%ri_rpa%x_data)
459 : END IF
460 500 : IF (ASSOCIATED(mp2_env%ri_rpa%xc_section_aux)) CALL section_vals_release(mp2_env%ri_rpa%xc_section_aux)
461 500 : IF (ASSOCIATED(mp2_env%ri_rpa%xc_section_primary)) CALL section_vals_release(mp2_env%ri_rpa%xc_section_primary)
462 :
463 500 : IF (mp2_env%eri_method == do_eri_mme) CALL cp_eri_mme_finalize(mp2_env%eri_mme_param)
464 500 : IF (ASSOCIATED(mp2_env%eri_mme_param)) DEALLOCATE (mp2_env%eri_mme_param)
465 500 : CALL time_frequency_grid_release(mp2_env%ri_rpa_im_time%time_frequency_grid)
466 :
467 500 : CALL mp2_env%local_gemm_ctx%destroy()
468 :
469 500 : CALL timestop(handle)
470 :
471 500 : END SUBROUTINE mp2_env_release
472 :
473 : ! **************************************************************************************************
474 : !> \brief ...
475 : !> \param mp2_env ...
476 : ! **************************************************************************************************
477 500 : SUBROUTINE mp2_env_create(mp2_env)
478 : TYPE(mp2_type), POINTER :: mp2_env
479 :
480 : CHARACTER(LEN=*), PARAMETER :: routineN = 'mp2_env_create'
481 :
482 : INTEGER :: handle
483 :
484 500 : CALL timeset(routineN, handle)
485 :
486 500 : CPASSERT(.NOT. ASSOCIATED(mp2_env))
487 :
488 12000 : ALLOCATE (mp2_env)
489 :
490 500 : NULLIFY (mp2_env%ri_rpa%x_data)
491 :
492 500 : CALL timestop(handle)
493 :
494 500 : END SUBROUTINE mp2_env_create
495 :
496 0 : END MODULE mp2_types
|