42#include "./base/base_uses.f90"
48 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'mp2_types'
51 integ_mat_buffer_type, &
77 INTEGER,
DIMENSION(:),
ALLOCATABLE :: array
81 INTEGER,
DIMENSION(:, :),
ALLOCATABLE :: array
85 REAL(kind=
dp),
DIMENSION(:),
ALLOCATABLE :: array
89 REAL(kind=
dp),
DIMENSION(:, :),
ALLOCATABLE :: array
93 REAL(kind=
dp),
DIMENSION(:, :, :),
ALLOCATABLE :: array
97 INTEGER,
DIMENSION(:, :),
ALLOCATABLE :: index_table
100 TYPE mp2_laplace_type
101 INTEGER :: n_quadrature = -1, &
102 num_integ_groups = -1
103 END TYPE mp2_laplace_type
106 LOGICAL :: big_send = .false.
107 END TYPE mp2_direct_type
110 REAL(kind=
dp) :: eps_grid = 0.0_dp, &
111 eps_filter = 0.0_dp, &
112 eps_pgf_orb_s = 0.0_dp
113 INTEGER :: print_level = 0
114 REAL(kind=
dp) :: cutoff = 0.0_dp, &
115 relative_cutoff = 0.0_dp
116 INTEGER :: size_lattice_sum = 0
117 END TYPE mp2_gpw_type
120 INTEGER :: block_size = 0, &
121 number_integration_groups = 0
122 LOGICAL :: print_dgemm_info = .false.
126 INTEGER :: rpa_num_quad_points = -1, &
127 rpa_num_integ_groups = -1, &
129 TYPE(
hfx_type),
DIMENSION(:, :),
POINTER :: x_data => null()
131 xc_section_aux => null()
132 LOGICAL :: reuse_hfx = .false., &
133 minimax_quad = .false., &
134 do_ri_g0w0 = .false., &
137 print_dgemm_info = .false.
140 TYPE(
dbcsr_type),
DIMENSION(:),
POINTER :: mo_coeff_o => null(), &
143 exchange_block_size = -1
144 LOGICAL :: use_hfx_implementation = .false.
145 REAL(kind=
dp) :: ener_exchange = 0.0_dp, &
146 rse_corr_diag = 0.0_dp, &
151 INTEGER :: sigma_param = 0.0_dp
152 REAL(kind=
dp) :: e_sigma_corr = 0.0_dp
156 TYPE ri_rpa_im_time_type
157 INTEGER :: cut_memory = 0
158 LOGICAL :: memory_info = .false., &
159 make_chi_pos_definite = .false., &
160 make_overlap_mat_ao_pos_definite = .false., &
161 trunc_coulomb_ri_x = .false., &
162 keep_quad = .false., &
163 do_kpoints_from_gamma = .false., &
164 do_extrapolate_kpoints = .false.
165 REAL(kind=
dp) :: eps_filter = 0.0_dp, &
166 eps_filter_factor = 0.0_dp, &
167 eps_compress = 0.0_dp, &
168 exp_tailored_weights = 0.0_dp, &
169 regularization_ri = 0.0_dp, &
170 eps_eigval_s = 0.0_dp, &
171 eps_eigval_s_gamma = 0.0_dp, &
172 rel_cutoff_trunc_coulomb_ri_x = 0.0_dp
174 REAL(kind=
dp),
DIMENSION(:),
ALLOCATABLE :: eigenval_gamma, &
176 INTEGER :: group_size_p = 0, &
180 INTEGER,
DIMENSION(:),
POINTER :: kp_grid => null()
181 INTEGER,
DIMENSION(3) :: kp_grid_extra = -1
182 LOGICAL :: do_im_time_kpoints = .false.
183 INTEGER :: min_bsize = 0, &
187 TYPE(
kpoint_type),
POINTER :: kpoints_g => null(), &
188 kpoints_sigma => null(), &
189 kpoints_sigma_no_xc => null()
190 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: starts_array_mc_ri, ends_array_mc_ri, &
191 starts_array_mc_block_ri, &
192 ends_array_mc_block_ri, &
193 starts_array_mc, ends_array_mc, &
194 starts_array_mc_block, &
197 END TYPE ri_rpa_im_time_type
200 INTEGER :: corr_mos_occ = 0, &
202 corr_mos_occ_beta = 0, &
203 corr_mos_virt_beta = 0, &
207 REAL(kind=
dp) :: omega_max_fit = 0.0_dp
209 REAL(kind=
dp) :: fermi_level_offset = 0.0_dp
210 INTEGER :: iter_evgw = 0, &
212 REAL(kind=
dp) :: eps_iter = 0.0_dp
213 LOGICAL :: do_hedin_shift = .false., &
214 do_ri_sigma_x = .false., &
215 do_periodic = .false., &
216 print_self_energy = .false.
217 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :, :) :: vec_sigma_x_minus_vxc_gw
218 INTEGER,
DIMENSION(:),
POINTER :: kp_grid => null(), &
219 kp_grid_sigma => null()
220 INTEGER :: num_kp_grids = 0
221 REAL(kind=
dp) :: eps_kpoint = 0.0_dp
222 LOGICAL :: do_mo_coeff_gamma = .false., &
223 do_average_deg_levels = .false.
224 REAL(kind=
dp) :: eps_eigenval = 0.0_dp
225 LOGICAL :: do_extra_kpoints = .false., &
226 do_aux_bas_gw = .false.
227 REAL(kind=
dp) :: frac_aux_mos = 0.0_dp
228 INTEGER :: num_omega_points = 0
229 LOGICAL :: do_ic_model = .false., &
230 print_ic_values = .false.
231 REAL(kind=
dp) :: eps_dist = 0.0_dp
233 INTEGER :: print_exx = 0
234 LOGICAL :: do_gamma_only_sigma = .false.
235 LOGICAL :: update_xc_energy = .false., &
236 do_kpoints_sigma = .false., &
237 print_local_bandgap = .false.
238 INTEGER :: n_kp_in_kp_line = 0, &
240 nkp_self_energy = 0, &
241 nkp_self_energy_special_kp = 0, &
242 nkp_self_energy_monkh_pack = 0, &
244 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: xkp_special_kp
245 TYPE(
dbcsr_p_type),
DIMENSION(:),
ALLOCATABLE :: matrix_sigma_x_minus_vxc, &
248 LOGICAL :: do_static_cohsex = .false.
250 REAL(kind=
dp) :: cohsex_scale_occ = 1.0_dp, &
251 cohsex_scale_virt = 1.0_dp
252 REAL(kind=
dp) :: broadening_print_loc_bandgap = 0.0_dp, &
253 energy_window_print_loc_bandgap = 0.0_dp, &
254 ldos_thresh_print_loc_bandgap = 0.0_dp, &
255 energy_spacing_print_loc_bandgap = 0.0_dp, &
256 regularization_minimax = 0.0_dp, &
257 soc_energy_window = 0.0_dp
258 INTEGER,
DIMENSION(:),
POINTER :: stride_loc_bandgap => null()
261 REAL(kind=
dp) :: dos_upper = 0.0_dp, &
262 dos_lower = 0.0_dp, &
265 INTEGER :: max_level_self_energy = 0, &
266 min_level_self_energy = 0, &
269 END TYPE ri_g0w0_type
272 REAL(kind=
dp) :: di_rel = 0.0_dp, &
275 INTEGER :: max_num_iter = 0, &
277 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ri_nset_per_l
278 END TYPE ri_basis_opt
284 REAL(kind=
dp),
DIMENSION(:, :),
ALLOCATABLE :: operator_half, &
288 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
ALLOCATABLE :: g_p_ia
289 TYPE(
dbcsr_p_type),
DIMENSION(:),
ALLOCATABLE :: mo_coeff_o, &
291 TYPE(
cp_fm_type),
ALLOCATABLE,
DIMENSION(:) :: p_mo, w_mo, l_jb
292 REAL(kind=
dp) :: cphf_eps_conv = 0.0_dp, &
293 scale_step_size = 0.0_dp
294 INTEGER :: cphf_max_num_iter = 0, &
295 z_solver_method = 0, &
297 LOGICAL :: enforce_decrease = .false., &
298 recalc_residual = .false., &
299 polak_ribiere = .false.
301 TYPE(
qs_force_type),
DIMENSION(:),
POINTER :: mp2_force => null()
302 REAL(kind=
dp),
DIMENSION(3, 3) :: mp2_virial = 0.0_dp
303 REAL(
dp) :: eps_canonical = 0.0_dp
304 LOGICAL :: free_hfx_buffer = .false.
305 INTEGER :: dot_blksize = 0
306 INTEGER :: max_parallel_comm = 0
311 TYPE(mp2_laplace_type) :: ri_laplace = mp2_laplace_type()
312 TYPE(mp2_direct_type) :: direct_canonical = mp2_direct_type()
313 TYPE(libint_potential_type) :: potential_parameter = libint_potential_type()
314 TYPE(mp2_gpw_type) ::
mp2_gpw = mp2_gpw_type()
315 TYPE(ri_mp2_type) :: ri_mp2 = ri_mp2_type()
316 TYPE(ri_rpa_type) :: ri_rpa = ri_rpa_type()
318#if defined(FTN_NO_DEFAULT_INIT)
319 TYPE(ri_rpa_im_time_type) :: ri_rpa_im_time = ri_rpa_im_time_type( &
322 frequency_weights=null(), &
323 imaginary_time=null(), &
324 time_weights_at_zero_frequency=null(), &
326 cosine_frequency_to_time=null(), &
327 sine_time_to_frequency=null()), &
328 eigenval_gamma=null(), &
330 starts_array_mc_ri=null(), &
331 ends_array_mc_ri=null(), &
332 starts_array_mc_block_ri=null(), &
333 ends_array_mc_block_ri=null(), &
334 starts_array_mc=null(), ends_array_mc=null(), &
335 starts_array_mc_block=null(), &
336 ends_array_mc_block=null())
337 TYPE(ri_g0w0_type) :: ri_g0w0 = ri_g0w0_type(vec_sigma_x_minus_vxc_gw=null(), &
338 xkp_special_kp=null(), &
339 matrix_sigma_x_minus_vxc=null(), &
342 TYPE(ri_basis_opt) :: ri_opt_param = ri_basis_opt(ri_nset_per_l=null())
343 TYPE(grad_util) :: ri_grad = grad_util(operator_half=null(), &
350 p_mo=null(), w_mo=null(), l_jb=null())
352 homo_red=null(), virt_red=null(), &
353 homo_full=null(), gw_corr_lev_virt=null(), &
354 eigenval_dft=null(), eigenval_qp=null(), &
356 fm_s_ij=null(), fm_s_ab=null(), &
357 fm_s_bar_ia=null(), fm_s_bar_ij=null())
359 TYPE(ri_rpa_im_time_type) :: ri_rpa_im_time = ri_rpa_im_time_type()
360 TYPE(ri_g0w0_type) :: ri_g0w0 = ri_g0w0_type()
361 TYPE(ri_basis_opt) :: ri_opt_param = ri_basis_opt()
362 TYPE(grad_util) :: ri_grad = grad_util()
365 REAL(kind=
dp) :: mp2_memory = 0.0_dp, &
368 INTEGER :: mp2_num_proc = 0
369 INTEGER :: block_size_row = 0
370 INTEGER :: block_size_col = 0
371 LOGICAL :: calc_pq_cond_num = .false.
372 LOGICAL :: hf_fail = .false.
373 LOGICAL :: p_screen = .false.
374 LOGICAL :: not_last_hfx = .false.
375 LOGICAL :: do_im_time = .false.
378 INTEGER,
DIMENSION(:),
POINTER :: eri_blksize => null()
379 LOGICAL :: do_svd = .false.
380 REAL(kind=
dp) :: eps_svd = -1.0_dp
381 REAL(kind=
dp) :: eps_range = 0.0_dp
382 TYPE(libint_potential_type) :: ri_metric = libint_potential_type()
384 REAL(
dp) :: e_gap = 0.0_dp, &
386 LOGICAL :: ri_aux_auto_generated = .false.
390 REAL(kind=
dp),
DIMENSION(:, :),
ALLOCATABLE :: msg
397 ALLOCATABLE :: elements
398 INTEGER :: n_element = 0
410 CHARACTER(LEN=*),
PARAMETER :: routinen =
'mp2_env_release'
414 CALL timeset(routinen, handle)
417 IF (.NOT. mp2_env%ri_rpa%reuse_hfx)
THEN
418 IF (
ASSOCIATED(mp2_env%ri_rpa%x_data))
CALL hfx_release(mp2_env%ri_rpa%x_data)
420 IF (
ASSOCIATED(mp2_env%ri_rpa%xc_section_aux))
CALL section_vals_release(mp2_env%ri_rpa%xc_section_aux)
421 IF (
ASSOCIATED(mp2_env%ri_rpa%xc_section_primary))
CALL section_vals_release(mp2_env%ri_rpa%xc_section_primary)
424 IF (
ASSOCIATED(mp2_env%eri_mme_param))
DEALLOCATE (mp2_env%eri_mme_param)
427 CALL mp2_env%local_gemm_ctx%destroy()
430 CALL timestop(handle)
441 CHARACTER(LEN=*),
PARAMETER :: routinen =
'mp2_env_create'
445 CALL timeset(routinen, handle)
447 cpassert(.NOT.
ASSOCIATED(mp2_env))
451 NULLIFY (mp2_env%ri_rpa%x_data)
453 CALL timestop(handle)
The BSE environment: the settings of the &BSE section and the state a GW path prepares for the solver...
subroutine, public bse_env_release(bse_env)
Releases the state a GW path prepared and nullifies the QS pointers; the settings stay,...
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: ...
Exchange numerical matrix payloads and integer metadata between MPI ranks.
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.
Definition and construction of time/frequency grids for correlation methods.
integer, parameter cosine_time_to_frequency
subroutine, public time_frequency_grid_release(grid)
Release all data owned by a time_frequency_grid_type object.
Settings of the &BSE section (read_bse_section, re-read before every BSE run, normalised in place by ...
stores some data used in construction of Kohn-Sham matrix
Contains information about kpoints.
Represent a qs system that is perturbed. Can calculate the linear operator and the rhs of the system ...