42 #include "./base/base_uses.f90"
48 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'mp2_setup'
60 TYPE(section_vals_type),
POINTER :: input
61 TYPE(mp2_type),
INTENT(INOUT) :: mp2_env
63 CHARACTER(len=*),
PARAMETER :: routinen =
'read_mp2_section'
65 CHARACTER(LEN=default_string_length), &
66 DIMENSION(:),
POINTER :: string_pointer
67 CHARACTER(LEN=max_line_length) :: error_message
68 INTEGER :: handle, i, i_special_kp, ival, unit_nr
69 INTEGER,
DIMENSION(:),
POINTER :: tmplist
70 LOGICAL :: do_mp2, do_opt_ri_basis, do_ri_mp2, &
72 REAL(kind=
dp),
DIMENSION(:),
POINTER :: r_vals
73 TYPE(cp_logger_type),
POINTER :: logger
74 TYPE(section_vals_type),
POINTER :: bse_section, cphf_section, &
75 eri_mme_section, gw_section, &
76 low_scaling_section, mp2_section
78 CALL timeset(routinen, handle)
96 CALL check_method(mp2_env%method)
102 CALL check_method(mp2_env%method)
105 CALL section_vals_val_get(mp2_section,
"RI_RPA%RPA_NUM_QUAD_POINTS", i_val=mp2_env%ri_rpa%rpa_num_quad_points)
106 CALL section_vals_val_get(mp2_section,
"RI_RPA%NUM_INTEG_GROUPS", i_val=mp2_env%ri_rpa%rpa_num_integ_groups)
108 CALL section_vals_val_get(mp2_section,
"RI_RPA%MINIMAX_QUADRATURE", l_val=mp2_env%ri_rpa%minimax_quad)
111 mp2_env%ri_rpa%reuse_hfx = .false.
116 CALL section_vals_val_get(mp2_section,
"RI_RPA%PRINT_DGEMM_INFO", l_val=mp2_env%ri_rpa%print_dgemm_info)
121 l_val=mp2_env%ri_rpa%do_ri_g0w0)
123 i_val=mp2_env%ri_g0w0%corr_mos_occ)
125 i_val=mp2_env%ri_g0w0%corr_mos_virt)
127 i_val=mp2_env%ri_g0w0%num_poles)
129 i_val=mp2_env%ri_g0w0%nparam_pade)
131 i_val=mp2_env%ri_g0w0%analytic_continuation)
133 r_val=mp2_env%ri_g0w0%omega_max_fit)
135 i_val=mp2_env%ri_g0w0%crossing_search)
137 r_val=mp2_env%ri_g0w0%fermi_level_offset)
139 i_val=mp2_env%ri_g0w0%iter_evGW)
141 i_val=mp2_env%ri_g0w0%iter_sc_GW0)
143 r_val=mp2_env%ri_g0w0%eps_iter)
145 i_val=mp2_env%ri_g0w0%print_exx)
147 l_val=mp2_env%ri_g0w0%print_self_energy)
149 l_val=mp2_env%ri_g0w0%do_ri_Sigma_x)
153 ALLOCATE (mp2_env%ri_g0w0%ic_corr_list(1)%array(
SIZE(r_vals)))
154 mp2_env%ri_g0w0%ic_corr_list(1)%array(:) = r_vals(:)
158 ALLOCATE (mp2_env%ri_g0w0%ic_corr_list(2)%array(
SIZE(r_vals)))
159 mp2_env%ri_g0w0%ic_corr_list(2)%array(:) = r_vals(:)
161 l_val=mp2_env%ri_g0w0%do_gamma_only_sigma)
163 l_val=mp2_env%ri_g0w0%update_xc_energy)
165 r_val=mp2_env%ri_g0w0%regularization_minimax)
167 i_val=mp2_env%ri_g0w0%soc_type)
169 r_val=mp2_env%ri_g0w0%soc_energy_window)
171 NULLIFY (bse_section)
174 l_val=mp2_env%ri_g0w0%do_bse)
176 i_val=mp2_env%ri_g0w0%bse_spin_config)
178 r_val=mp2_env%ri_g0w0%bse_cutoff_occ)
180 r_val=mp2_env%ri_g0w0%bse_cutoff_virt)
182 i_val=mp2_env%ri_g0w0%num_print_exc)
184 r_val=mp2_env%ri_g0w0%eps_x)
186 i_val=mp2_env%ri_g0w0%davidson_abort_cond)
188 i_val=mp2_env%ri_g0w0%num_exc_en)
190 i_val=mp2_env%ri_g0w0%num_add_start_z_space)
192 i_val=mp2_env%ri_g0w0%fac_max_z_space)
194 i_val=mp2_env%ri_g0w0%num_new_t)
196 r_val=mp2_env%ri_g0w0%eps_res)
198 r_val=mp2_env%ri_g0w0%eps_exc_en)
200 i_val=mp2_env%ri_g0w0%num_davidson_iter)
202 r_val=mp2_env%ri_g0w0%z_space_energy_cutoff)
204 i_val=mp2_env%ri_g0w0%bse_diag_method)
206 i_val=mp2_env%ri_g0w0%bse_approx)
208 l_val=mp2_env%ri_g0w0%bse_debug_print)
211 l_val=mp2_env%ri_g0w0%do_ic_model)
213 l_val=mp2_env%ri_g0w0%print_ic_values)
215 r_val=mp2_env%ri_g0w0%eps_dist)
218 l_val=mp2_env%ri_g0w0%do_periodic)
220 i_vals=mp2_env%ri_g0w0%kp_grid)
222 i_val=mp2_env%ri_g0w0%num_kp_grids)
224 r_val=mp2_env%ri_g0w0%eps_kpoint)
226 l_val=mp2_env%ri_g0w0%do_mo_coeff_gamma)
227 CALL section_vals_val_get(mp2_section,
"RI_RPA%GW%PERIODIC_CORRECTION%AVERAGE_DEGENERATE_LEVELS", &
228 l_val=mp2_env%ri_g0w0%do_average_deg_levels)
230 r_val=mp2_env%ri_g0w0%eps_eigenval)
232 l_val=mp2_env%ri_g0w0%do_extra_kpoints)
234 l_val=mp2_env%ri_g0w0%do_aux_bas_gw)
236 r_val=mp2_env%ri_g0w0%frac_aux_mos)
238 i_val=mp2_env%ri_g0w0%num_omega_points)
241 i_val=mp2_env%ri_g0w0%n_kp_in_kp_line)
243 n_rep_val=mp2_env%ri_g0w0%n_special_kp)
244 ALLOCATE (mp2_env%ri_g0w0%xkp_special_kp(3, mp2_env%ri_g0w0%n_special_kp))
245 DO i_special_kp = 1, mp2_env%ri_g0w0%n_special_kp
247 i_rep_val=i_special_kp, c_vals=string_pointer)
248 cpassert(
SIZE(string_pointer(:), 1) == 3)
251 mp2_env%ri_g0w0%xkp_special_kp(i, i_special_kp), &
253 IF (len_trim(error_message) > 0) cpabort(trim(error_message))
258 i_vals=mp2_env%ri_g0w0%kp_grid_Sigma)
261 r_val=mp2_env%ri_g0w0%dos_lower)
263 r_val=mp2_env%ri_g0w0%dos_upper)
265 r_val=mp2_env%ri_g0w0%dos_prec)
267 i_val=mp2_env%ri_g0w0%dos_min)
269 i_val=mp2_env%ri_g0w0%dos_max)
271 i_val=mp2_env%ri_g0w0%min_level_self_energy)
273 i_val=mp2_env%ri_g0w0%max_level_self_energy)
275 r_val=mp2_env%ri_g0w0%dos_eta)
277 mp2_env%ri_g0w0%do_kpoints_Sigma = mp2_env%ri_g0w0%n_special_kp > 0 .OR. &
278 mp2_env%ri_g0w0%kp_grid_Sigma(1)* &
279 mp2_env%ri_g0w0%kp_grid_Sigma(2)* &
280 mp2_env%ri_g0w0%kp_grid_Sigma(3) > 0
283 mp2_section,
"RI_RPA%GW%PRINT%LOCAL_BANDGAP"), &
286 r_val=mp2_env%ri_g0w0%energy_window_print_loc_bandgap)
288 r_val=mp2_env%ri_g0w0%energy_spacing_print_loc_bandgap)
290 r_val=mp2_env%ri_g0w0%ldos_thresh_print_loc_bandgap)
292 i_vals=mp2_env%ri_g0w0%stride_loc_bandgap)
294 NULLIFY (low_scaling_section)
297 l_val=mp2_env%do_im_time)
299 CALL section_vals_val_get(low_scaling_section,
"MEMORY_CUT", i_val=mp2_env%ri_rpa_im_time%cut_memory)
300 CALL section_vals_val_get(low_scaling_section,
"MEMORY_INFO", l_val=mp2_env%ri_rpa_im_time%memory_info)
301 CALL section_vals_val_get(low_scaling_section,
"EPS_FILTER", r_val=mp2_env%ri_rpa_im_time%eps_filter)
302 CALL section_vals_val_get(low_scaling_section,
"EPS_STORAGE_SCALING", r_val=mp2_env%ri_rpa_im_time%eps_compress)
303 mp2_env%ri_rpa_im_time%eps_compress = mp2_env%ri_rpa_im_time%eps_compress*mp2_env%ri_rpa_im_time%eps_filter
304 mp2_env%ri_rpa_im_time%eps_compress = max(mp2_env%ri_rpa_im_time%eps_compress, 1.0e-16_dp)
305 CALL section_vals_val_get(low_scaling_section,
"EPS_FILTER_FACTOR", r_val=mp2_env%ri_rpa_im_time%eps_filter_factor)
308 l_val=mp2_env%ri_rpa_im_time%do_im_time_kpoints)
310 i_vals=mp2_env%ri_rpa_im_time%kp_grid)
311 mp2_env%ri_rpa_im_time%do_kpoints_from_Gamma = sum(mp2_env%ri_rpa_im_time%kp_grid) > 0
312 IF (mp2_env%ri_rpa_im_time%do_kpoints_from_Gamma)
THEN
313 cpassert(mp2_env%ri_g0w0%do_kpoints_Sigma)
316 i_val=mp2_env%ri_rpa_im_time%kpoint_weights_W_method)
318 r_val=mp2_env%ri_rpa_im_time%exp_tailored_weights)
320 r_val=mp2_env%ri_rpa_im_time%regularization_RI)
322 r_val=mp2_env%ri_rpa_im_time%eps_eigval_S)
324 r_val=mp2_env%ri_rpa_im_time%eps_eigval_S_Gamma)
326 l_val=mp2_env%ri_rpa_im_time%make_chi_pos_definite)
328 l_val=mp2_env%ri_rpa_im_time%make_overlap_mat_ao_pos_definite)
330 l_val=mp2_env%ri_rpa_im_time%trunc_coulomb_ri_x)
332 l_val=mp2_env%ri_rpa_im_time%do_extrapolate_kpoints)
334 r_val=mp2_env%ri_rpa_im_time%rel_cutoff_trunc_coulomb_ri_x)
336 i_val=mp2_env%ri_rpa_im_time%k_mesh_g_factor)
339 l_val=mp2_env%ri_rpa_im_time%keep_quad)
340 NULLIFY (mp2_env%ri_rpa_im_time%tau_tj)
341 NULLIFY (mp2_env%ri_rpa_im_time%tau_wj)
342 NULLIFY (mp2_env%ri_rpa_im_time%tj)
343 NULLIFY (mp2_env%ri_rpa_im_time%wj)
344 NULLIFY (mp2_env%ri_rpa_im_time%weights_cos_tf_t_to_w)
345 NULLIFY (mp2_env%ri_rpa_im_time%weights_cos_tf_w_to_t)
348 i_val=mp2_env%ri_rpa_im_time%min_bsize)
351 i_val=mp2_env%ri_rpa_im_time%min_bsize_mo)
354 IF (do_ri_sos_mp2)
THEN
355 CALL check_method(mp2_env%method)
358 CALL section_vals_val_get(mp2_section,
"RI_SOS_MP2%QUADRATURE_POINTS", i_val=mp2_env%ri_laplace%n_quadrature)
359 CALL section_vals_val_get(mp2_section,
"RI_SOS_MP2%NUM_INTEG_GROUPS", i_val=mp2_env%ri_laplace%num_integ_groups)
363 CALL check_method(mp2_env%method)
367 CALL section_vals_val_get(mp2_section,
"RI_MP2%NUMBER_INTEGRATION_GROUPS", i_val=mp2_env%ri_mp2%number_integration_groups)
368 CALL section_vals_val_get(mp2_section,
"RI_MP2%PRINT_DGEMM_INFO", l_val=mp2_env%ri_mp2%print_dgemm_info)
375 CALL section_vals_val_get(mp2_section,
"RI%RI_METRIC%POTENTIAL_TYPE", i_val=mp2_env%ri_metric%potential_type)
378 CALL section_vals_val_get(mp2_section,
"RI%RI_METRIC%CUTOFF_RADIUS", r_val=mp2_env%ri_metric%cutoff_radius)
379 CALL section_vals_val_get(mp2_section,
"RI%RI_METRIC%T_C_G_DATA", c_val=mp2_env%ri_metric%filename)
381 CALL erfc_cutoff(mp2_env%eps_range, mp2_env%ri_metric%omega, mp2_env%ri_metric%cutoff_radius)
384 CALL section_vals_val_get(mp2_section,
"RI%OPT_RI_BASIS%_SECTION_PARAMETERS_", l_val=do_opt_ri_basis)
385 IF (do_opt_ri_basis)
THEN
386 CALL check_method(mp2_env%method)
390 r_val=mp2_env%ri_opt_param%DI_rel)
392 r_val=mp2_env%ri_opt_param%DRI)
394 r_val=mp2_env%ri_opt_param%eps_step)
396 i_val=mp2_env%ri_opt_param%max_num_iter)
398 i_val=mp2_env%ri_opt_param%basis_quality)
402 IF (tmplist(1) > 0)
THEN
403 ALLOCATE (mp2_env%ri_opt_param%RI_nset_per_l(0:
SIZE(tmplist) - 1))
404 mp2_env%ri_opt_param%RI_nset_per_l = 0
405 DO ival = 1,
SIZE(tmplist)
406 mp2_env%ri_opt_param%RI_nset_per_l(ival - 1) = tmplist(ival)
411 CALL section_vals_val_get(mp2_section,
"INTEGRALS%SIZE_LATTICE_SUM", i_val=mp2_env%mp2_gpw%size_lattice_sum)
412 CALL section_vals_val_get(mp2_section,
"INTEGRALS%WFC_GPW%EPS_FILTER", r_val=mp2_env%mp2_gpw%eps_filter)
413 CALL section_vals_val_get(mp2_section,
"INTEGRALS%WFC_GPW%EPS_GRID", r_val=mp2_env%mp2_gpw%eps_grid)
414 CALL section_vals_val_get(mp2_section,
"INTEGRALS%WFC_GPW%CUTOFF", r_val=mp2_env%mp2_gpw%cutoff)
415 CALL section_vals_val_get(mp2_section,
"INTEGRALS%WFC_GPW%REL_CUTOFF", r_val=mp2_env%mp2_gpw%relative_cutoff)
416 CALL section_vals_val_get(mp2_section,
"INTEGRALS%WFC_GPW%PRINT_LEVEL", i_val=mp2_env%mp2_gpw%print_level)
417 CALL section_vals_val_get(mp2_section,
"INTEGRALS%WFC_GPW%EPS_PGF_ORB_S", r_val=mp2_env%mp2_gpw%eps_pgf_orb_S)
419 i_val=mp2_env%potential_parameter%potential_type)
421 r_val=mp2_env%potential_parameter%cutoff_radius)
423 c_val=mp2_env%potential_parameter%filename)
425 r_val=mp2_env%potential_parameter%omega)
427 r_val=mp2_env%potential_parameter%scale_coulomb)
429 r_val=mp2_env%potential_parameter%scale_longrange)
431 NULLIFY (mp2_env%eri_mme_param)
432 ALLOCATE (mp2_env%eri_mme_param)
440 mp2_env%not_last_hfx = .true.
441 mp2_env%p_screen = .true.
444 CALL section_vals_val_get(mp2_section,
"CANONICAL_GRADIENTS%FREE_HFX_BUFFER", l_val=mp2_env%ri_grad%free_hfx_buffer)
445 CALL section_vals_val_get(mp2_section,
"CANONICAL_GRADIENTS%EPS_CANONICAL", r_val=mp2_env%ri_grad%eps_canonical)
446 CALL section_vals_val_get(mp2_section,
"CANONICAL_GRADIENTS%USE_OLD_GRADIENT_CODE", l_val=mp2_env%ri_grad%use_old_grad)
447 CALL section_vals_val_get(mp2_section,
"CANONICAL_GRADIENTS%DOT_PRODUCT_BLKSIZE", i_val=mp2_env%ri_grad%dot_blksize)
448 CALL section_vals_val_get(mp2_section,
"CANONICAL_GRADIENTS%MAX_PARALLEL_COMM", i_val=mp2_env%ri_grad%max_parallel_comm)
450 IF (
ASSOCIATED(cphf_section))
THEN
453 CALL section_vals_val_get(cphf_section,
"SCALE_STEP_SIZE", r_val=mp2_env%ri_grad%scale_step_size)
456 CALL section_vals_val_get(cphf_section,
"ENFORCE_DECREASE", l_val=mp2_env%ri_grad%enforce_decrease)
457 CALL section_vals_val_get(cphf_section,
"RECALC_RESIDUAL", l_val=mp2_env%ri_grad%recalc_residual)
458 CALL section_vals_val_get(cphf_section,
"DO_POLAK_RIBIERE", l_val=mp2_env%ri_grad%polak_ribiere)
465 WRITE (unit_nr,
'(T2,A)')
""
466 SELECT CASE (mp2_env%method)
468 WRITE (unit_nr,
'(T2,A)')
"MP2| using direct canonical MP2"
470 WRITE (unit_nr,
'(T2,A)')
"MP2| using MP2 GPW style"
472 WRITE (unit_nr,
'(T2,A)')
"MP2| using RI-MP2-GPW"
474 WRITE (unit_nr,
'(T2,A)')
"RI-RPA| using GPW style"
476 WRITE (unit_nr,
'(T2,A)')
"RI-SOS-Laplace-MP2| using GPW style"
478 WRITE (unit_nr,
'(T2,A)')
"MP2| Optimize RI auxiliary basis"
482 WRITE (unit_nr,
'(T2,A)')
""
489 CALL timestop(handle)
497 SUBROUTINE check_method(method)
498 INTEGER,
INTENT(IN) :: method
500 CHARACTER(len=*),
PARAMETER :: routinen =
'check_method'
504 CALL timeset(routinen, handle)
507 cpabort(
"Please use not more than one method to compute the correlation energy.")
510 CALL timestop(handle)
512 END SUBROUTINE check_method
Interface to Minimax-Ewald method for periodic ERI's to be used in CP2K.
subroutine, public cp_eri_mme_init_read_input(mme_section, param)
Read input and initialize parameter type.
various routines to log and control the output. The idea is that decisions about where to log should ...
type(cp_logger_type) function, pointer, public cp_get_default_logger()
returns the default logger
routines to handle the output, The idea is to remove the decision of wheter to output and what to out...
integer function, public cp_print_key_unit_nr(logger, basis_section, print_key_path, extension, middle_name, local, log_filename, ignore_should_output, file_form, file_position, file_action, file_status, do_backup, on_file, is_new_file, mpi_io, fout)
...
subroutine, public cp_print_key_finished_output(unit_nr, logger, basis_section, print_key_path, local, ignore_should_output, on_file, mpi_io)
should be called after you finish working with a unit obtained with cp_print_key_unit_nr,...
integer, parameter, public cp_p_file
integer function, public cp_print_key_should_output(iteration_info, basis_section, print_key_path, used_print_key, first_time)
returns what should be done with the given property if btest(res,cp_p_store) then the property should...
Utility routines to read data from files. Kept as close as possible to the old parser because.
elemental subroutine, public read_float_object(string, object, error_message)
Returns a floating point number read from a string including fraction like z1/z2.
Defines the basic variable types.
integer, parameter, public max_line_length
integer, parameter, public dp
integer, parameter, public default_string_length
Machine interface based on Fortran 2003 and POSIX.
subroutine, public m_flush(lunit)
flushes units if the &GLOBAL flag is set accordingly
Collection of simple mathematical functions and subroutines.
subroutine, public erfc_cutoff(eps, omg, r_cutoff)
compute a truncation radius for the shortrange operator
Types needed for MP2 calculations.
subroutine, public read_mp2_section(input, mp2_env)
...
Types needed for MP2 calculations.