(git:34ef472)
mp2_setup.F
Go to the documentation of this file.
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_setup
17  cp_logger_type
18  USE cp_output_handling, ONLY: cp_p_file,&
23  USE input_constants, ONLY: &
27  section_vals_type,&
29  USE kinds, ONLY: default_string_length,&
30  dp,&
32  USE machine, ONLY: m_flush
33  USE mathlib, ONLY: erfc_cutoff
34  USE mp2_types, ONLY: mp2_method_direct,&
38  mp2_type,&
42 #include "./base/base_uses.f90"
43 
44  IMPLICIT NONE
45 
46  PRIVATE
47 
48  CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'mp2_setup'
49 
50  PUBLIC :: read_mp2_section
51 
52 CONTAINS
53 
54 ! **************************************************************************************************
55 !> \brief ...
56 !> \param input ...
57 !> \param mp2_env ...
58 ! **************************************************************************************************
59  SUBROUTINE read_mp2_section(input, mp2_env)
60  TYPE(section_vals_type), POINTER :: input
61  TYPE(mp2_type), INTENT(INOUT) :: mp2_env
62 
63  CHARACTER(len=*), PARAMETER :: routinen = 'read_mp2_section'
64 
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, &
71  do_ri_sos_mp2, do_rpa
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
77 
78  CALL timeset(routinen, handle)
79  logger => cp_get_default_logger()
80 
81  mp2_section => section_vals_get_subs_vals(input, "DFT%XC%WF_CORRELATION")
82 
83  mp2_env%method = mp2_method_none
84 
85  ! should come from input
86  CALL section_vals_val_get(mp2_section, "MEMORY", r_val=mp2_env%mp2_memory)
87  CALL section_vals_val_get(mp2_section, "SCALE_S", r_val=mp2_env%scale_S)
88  CALL section_vals_val_get(mp2_section, "SCALE_T", r_val=mp2_env%scale_T)
89  CALL section_vals_val_get(mp2_section, "GROUP_SIZE", i_val=mp2_env%mp2_num_proc)
90  CALL section_vals_val_get(mp2_section, "E_GAP", r_val=mp2_env%e_gap)
91  CALL section_vals_val_get(mp2_section, "E_RANGE", r_val=mp2_env%e_range)
92 
93  CALL section_vals_val_get(mp2_section, "MP2%_SECTION_PARAMETERS_", l_val=do_mp2)
94  CALL section_vals_val_get(mp2_section, "MP2%BIG_SEND", l_val=mp2_env%direct_canonical%big_send)
95  IF (do_mp2) THEN
96  CALL check_method(mp2_env%method)
97  CALL section_vals_val_get(mp2_section, "MP2%METHOD", i_val=mp2_env%method)
98  END IF
99 
100  CALL section_vals_val_get(mp2_section, "RI_RPA%_SECTION_PARAMETERS_", l_val=do_rpa)
101  IF (do_rpa) THEN
102  CALL check_method(mp2_env%method)
103  mp2_env%method = ri_rpa_method_gpw
104  END IF
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)
107  CALL section_vals_val_get(mp2_section, "RI_RPA%MM_STYLE", i_val=mp2_env%ri_rpa%mm_style)
108  CALL section_vals_val_get(mp2_section, "RI_RPA%MINIMAX_QUADRATURE", l_val=mp2_env%ri_rpa%minimax_quad)
109  CALL section_vals_val_get(mp2_section, "RI_RPA%ADMM", l_val=mp2_env%ri_rpa%do_admm)
110  CALL section_vals_val_get(mp2_section, "RI_RPA%SCALE_RPA", r_val=mp2_env%ri_rpa%scale_rpa)
111  mp2_env%ri_rpa%reuse_hfx = .false.
112 
113  CALL section_vals_val_get(mp2_section, "RI_RPA%AXK", l_val=mp2_env%ri_rpa%do_ri_axk)
114 
115  CALL section_vals_val_get(mp2_section, "RI_RPA%RSE", l_val=mp2_env%ri_rpa%do_rse)
116  CALL section_vals_val_get(mp2_section, "RI_RPA%PRINT_DGEMM_INFO", l_val=mp2_env%ri_rpa%print_dgemm_info)
117 
118  NULLIFY (gw_section)
119  gw_section => section_vals_get_subs_vals(mp2_section, "RI_RPA%GW")
120  CALL section_vals_val_get(gw_section, "_SECTION_PARAMETERS_", &
121  l_val=mp2_env%ri_rpa%do_ri_g0w0)
122  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%CORR_MOS_OCC", &
123  i_val=mp2_env%ri_g0w0%corr_mos_occ)
124  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%CORR_MOS_VIRT", &
125  i_val=mp2_env%ri_g0w0%corr_mos_virt)
126  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%NUMB_POLES", &
127  i_val=mp2_env%ri_g0w0%num_poles)
128  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%NPARAM_PADE", &
129  i_val=mp2_env%ri_g0w0%nparam_pade)
130  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%ANALYTIC_CONTINUATION", &
131  i_val=mp2_env%ri_g0w0%analytic_continuation)
132  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%OMEGA_MAX_FIT", &
133  r_val=mp2_env%ri_g0w0%omega_max_fit)
134  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%CROSSING_SEARCH", &
135  i_val=mp2_env%ri_g0w0%crossing_search)
136  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%FERMI_LEVEL_OFFSET", &
137  r_val=mp2_env%ri_g0w0%fermi_level_offset)
138  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%EV_GW_ITER", &
139  i_val=mp2_env%ri_g0w0%iter_evGW)
140  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%SC_GW0_ITER", &
141  i_val=mp2_env%ri_g0w0%iter_sc_GW0)
142  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%EPS_ITER", &
143  r_val=mp2_env%ri_g0w0%eps_iter)
144  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%PRINT_EXX", &
145  i_val=mp2_env%ri_g0w0%print_exx)
146  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%PRINT_SELF_ENERGY", &
147  l_val=mp2_env%ri_g0w0%print_self_energy)
148  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%RI_SIGMA_X", &
149  l_val=mp2_env%ri_g0w0%do_ri_Sigma_x)
150  NULLIFY (r_vals)
151  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%IC_CORR_LIST", &
152  r_vals=r_vals)
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(:)
155  NULLIFY (r_vals)
156  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%IC_CORR_LIST_BETA", &
157  r_vals=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(:)
160  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%GAMMA_ONLY_SIGMA", &
161  l_val=mp2_env%ri_g0w0%do_gamma_only_sigma)
162  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%UPDATE_XC_ENERGY", &
163  l_val=mp2_env%ri_g0w0%update_xc_energy)
164  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%REGULARIZATION_MINIMAX", &
165  r_val=mp2_env%ri_g0w0%regularization_minimax)
166  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%SOC", &
167  i_val=mp2_env%ri_g0w0%soc_type)
168  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%SOC_ENERGY_WINDOW", &
169  r_val=mp2_env%ri_g0w0%soc_energy_window)
170 
171  NULLIFY (bse_section)
172  bse_section => section_vals_get_subs_vals(mp2_section, "RI_RPA%GW%BSE")
173  CALL section_vals_val_get(bse_section, "_SECTION_PARAMETERS_", &
174  l_val=mp2_env%ri_g0w0%do_bse)
175  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%BSE%SPIN_CONFIG", &
176  i_val=mp2_env%ri_g0w0%bse_spin_config)
177  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%BSE%ENERGY_CUTOFF_OCC", &
178  r_val=mp2_env%ri_g0w0%bse_cutoff_occ)
179  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%BSE%ENERGY_CUTOFF_VIRT", &
180  r_val=mp2_env%ri_g0w0%bse_cutoff_virt)
181  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%BSE%NUM_PRINT_EXC", &
182  i_val=mp2_env%ri_g0w0%num_print_exc)
183  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%BSE%EPS_X", &
184  r_val=mp2_env%ri_g0w0%eps_x)
185  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%BSE%BSE_ITERAT%DAVIDSON_ABORT_COND", &
186  i_val=mp2_env%ri_g0w0%davidson_abort_cond)
187  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%BSE%BSE_ITERAT%NUM_EXC_EN", &
188  i_val=mp2_env%ri_g0w0%num_exc_en)
189  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%BSE%BSE_ITERAT%NUM_ADD_START_Z_SPACE", &
190  i_val=mp2_env%ri_g0w0%num_add_start_z_space)
191  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%BSE%BSE_ITERAT%FAC_MAX_Z_SPACE", &
192  i_val=mp2_env%ri_g0w0%fac_max_z_space)
193  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%BSE%BSE_ITERAT%NUM_NEW_T", &
194  i_val=mp2_env%ri_g0w0%num_new_t)
195  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%BSE%BSE_ITERAT%EPS_RES", &
196  r_val=mp2_env%ri_g0w0%eps_res)
197  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%BSE%BSE_ITERAT%EPS_EXC_EN", &
198  r_val=mp2_env%ri_g0w0%eps_exc_en)
199  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%BSE%BSE_ITERAT%NUM_DAVIDSON_ITER", &
200  i_val=mp2_env%ri_g0w0%num_davidson_iter)
201  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%BSE%BSE_ITERAT%Z_SPACE_ENERGY_CUTOFF", &
202  r_val=mp2_env%ri_g0w0%z_space_energy_cutoff)
203  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%BSE%BSE_DIAG_METHOD", &
204  i_val=mp2_env%ri_g0w0%bse_diag_method)
205  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%BSE%BSE_APPROX", &
206  i_val=mp2_env%ri_g0w0%bse_approx)
207  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%BSE%BSE_DEBUG_PRINT", &
208  l_val=mp2_env%ri_g0w0%bse_debug_print)
209 
210  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%IMAGE_CHARGE_MODEL", &
211  l_val=mp2_env%ri_g0w0%do_ic_model)
212  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%IC%PRINT_IC_LIST", &
213  l_val=mp2_env%ri_g0w0%print_ic_values)
214  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%IC%EPS_DIST", &
215  r_val=mp2_env%ri_g0w0%eps_dist)
216 
217  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%PERIODIC_CORRECTION", &
218  l_val=mp2_env%ri_g0w0%do_periodic)
219  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%PERIODIC_CORRECTION%KPOINTS", &
220  i_vals=mp2_env%ri_g0w0%kp_grid)
221  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%PERIODIC_CORRECTION%NUM_KP_GRIDS", &
222  i_val=mp2_env%ri_g0w0%num_kp_grids)
223  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%PERIODIC_CORRECTION%EPS_KPOINT", &
224  r_val=mp2_env%ri_g0w0%eps_kpoint)
225  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%PERIODIC_CORRECTION%MO_COEFF_GAMMA", &
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)
229  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%PERIODIC_CORRECTION%EPS_EIGENVAL", &
230  r_val=mp2_env%ri_g0w0%eps_eigenval)
231  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%PERIODIC_CORRECTION%EXTRAPOLATE_KPOINTS", &
232  l_val=mp2_env%ri_g0w0%do_extra_kpoints)
233  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%PERIODIC_CORRECTION%DO_AUX_BAS_GW", &
234  l_val=mp2_env%ri_g0w0%do_aux_bas_gw)
235  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%PERIODIC_CORRECTION%FRACTION_AUX_MOS", &
236  r_val=mp2_env%ri_g0w0%frac_aux_mos)
237  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%PERIODIC_CORRECTION%NUM_OMEGA_POINTS", &
238  i_val=mp2_env%ri_g0w0%num_omega_points)
239 
240  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%KPOINT_SET%NPOINTS", &
241  i_val=mp2_env%ri_g0w0%n_kp_in_kp_line)
242  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%KPOINT_SET%SPECIAL_POINT", &
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
246  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%KPOINT_SET%SPECIAL_POINT", &
247  i_rep_val=i_special_kp, c_vals=string_pointer)
248  cpassert(SIZE(string_pointer(:), 1) == 3)
249  DO i = 1, 3
250  CALL read_float_object(string_pointer(i), &
251  mp2_env%ri_g0w0%xkp_special_kp(i, i_special_kp), &
252  error_message)
253  IF (len_trim(error_message) > 0) cpabort(trim(error_message))
254  END DO
255  END DO
256 
257  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%KPOINTS_SELF_ENERGY", &
258  i_vals=mp2_env%ri_g0w0%kp_grid_Sigma)
259 
260  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%PRINT%GW_DOS%LOWER_BOUND", &
261  r_val=mp2_env%ri_g0w0%dos_lower)
262  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%PRINT%GW_DOS%UPPER_BOUND", &
263  r_val=mp2_env%ri_g0w0%dos_upper)
264  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%PRINT%GW_DOS%STEP", &
265  r_val=mp2_env%ri_g0w0%dos_prec)
266  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%PRINT%GW_DOS%MIN_LEVEL_SPECTRAL", &
267  i_val=mp2_env%ri_g0w0%dos_min)
268  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%PRINT%GW_DOS%MAX_LEVEL_SPECTRAL", &
269  i_val=mp2_env%ri_g0w0%dos_max)
270  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%PRINT%GW_DOS%MIN_LEVEL_SELF_ENERGY", &
271  i_val=mp2_env%ri_g0w0%min_level_self_energy)
272  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%PRINT%GW_DOS%MAX_LEVEL_SELF_ENERGY", &
273  i_val=mp2_env%ri_g0w0%max_level_self_energy)
274  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%PRINT%GW_DOS%BROADENING", &
275  r_val=mp2_env%ri_g0w0%dos_eta)
276 
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
281 
282  mp2_env%ri_g0w0%print_local_bandgap = btest(cp_print_key_should_output(logger%iter_info, &
283  mp2_section, "RI_RPA%GW%PRINT%LOCAL_BANDGAP"), &
284  cp_p_file)
285  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%PRINT%LOCAL_BANDGAP%ENERGY_WINDOW", &
286  r_val=mp2_env%ri_g0w0%energy_window_print_loc_bandgap)
287  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%PRINT%LOCAL_BANDGAP%ENERGY_SPACING", &
288  r_val=mp2_env%ri_g0w0%energy_spacing_print_loc_bandgap)
289  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%PRINT%LOCAL_BANDGAP%LDOS_THRESHOLD_GAP", &
290  r_val=mp2_env%ri_g0w0%ldos_thresh_print_loc_bandgap)
291  CALL section_vals_val_get(mp2_section, "RI_RPA%GW%PRINT%LOCAL_BANDGAP%STRIDE", &
292  i_vals=mp2_env%ri_g0w0%stride_loc_bandgap)
293 
294  NULLIFY (low_scaling_section)
295  low_scaling_section => section_vals_get_subs_vals(mp2_section, "LOW_SCALING")
296  CALL section_vals_val_get(low_scaling_section, "_SECTION_PARAMETERS_", &
297  l_val=mp2_env%do_im_time)
298 
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)
306 
307  CALL section_vals_val_get(low_scaling_section, "DO_KPOINTS", &
308  l_val=mp2_env%ri_rpa_im_time%do_im_time_kpoints)
309  CALL section_vals_val_get(low_scaling_section, "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)
314  END IF
315  CALL section_vals_val_get(low_scaling_section, "KPOINT_WEIGHTS_W", &
316  i_val=mp2_env%ri_rpa_im_time%kpoint_weights_W_method)
317  CALL section_vals_val_get(low_scaling_section, "EXPONENT_TAILORED_WEIGHTS", &
318  r_val=mp2_env%ri_rpa_im_time%exp_tailored_weights)
319  CALL section_vals_val_get(low_scaling_section, "REGULARIZATION_RI", &
320  r_val=mp2_env%ri_rpa_im_time%regularization_RI)
321  CALL section_vals_val_get(low_scaling_section, "EPS_EIGVAL_S", &
322  r_val=mp2_env%ri_rpa_im_time%eps_eigval_S)
323  CALL section_vals_val_get(low_scaling_section, "EPS_EIGVAL_S_GAMMA", &
324  r_val=mp2_env%ri_rpa_im_time%eps_eigval_S_Gamma)
325  CALL section_vals_val_get(low_scaling_section, "MAKE_CHI_POS_DEFINITE", &
326  l_val=mp2_env%ri_rpa_im_time%make_chi_pos_definite)
327  CALL section_vals_val_get(low_scaling_section, "MAKE_OVERLAP_MAT_AO_POS_DEFINITE", &
328  l_val=mp2_env%ri_rpa_im_time%make_overlap_mat_ao_pos_definite)
329  CALL section_vals_val_get(low_scaling_section, "TRUNC_COULOMB_RI_X", &
330  l_val=mp2_env%ri_rpa_im_time%trunc_coulomb_ri_x)
331  CALL section_vals_val_get(low_scaling_section, "DO_EXTRAPOLATE_KPOINTS", &
332  l_val=mp2_env%ri_rpa_im_time%do_extrapolate_kpoints)
333  CALL section_vals_val_get(low_scaling_section, "REL_CUTOFF_TRUNC_COULOMB_RI_X", &
334  r_val=mp2_env%ri_rpa_im_time%rel_cutoff_trunc_coulomb_ri_x)
335  CALL section_vals_val_get(low_scaling_section, "K_MESH_G_FACTOR", &
336  i_val=mp2_env%ri_rpa_im_time%k_mesh_g_factor)
337 
338  CALL section_vals_val_get(low_scaling_section, "KEEP_QUADRATURE", &
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)
346 
347  CALL section_vals_val_get(low_scaling_section, "MIN_BLOCK_SIZE", &
348  i_val=mp2_env%ri_rpa_im_time%min_bsize)
349 
350  CALL section_vals_val_get(low_scaling_section, "MIN_BLOCK_SIZE_MO", &
351  i_val=mp2_env%ri_rpa_im_time%min_bsize_mo)
352 
353  CALL section_vals_val_get(mp2_section, "RI_SOS_MP2%_SECTION_PARAMETERS_", l_val=do_ri_sos_mp2)
354  IF (do_ri_sos_mp2) THEN
355  CALL check_method(mp2_env%method)
356  mp2_env%method = ri_mp2_laplace
357  END IF
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)
360 
361  CALL section_vals_val_get(mp2_section, "RI_MP2%_SECTION_PARAMETERS_", l_val=do_ri_mp2)
362  IF (do_ri_mp2) THEN
363  CALL check_method(mp2_env%method)
364  mp2_env%method = ri_mp2_method_gpw
365  END IF
366  CALL section_vals_val_get(mp2_section, "RI_MP2%BLOCK_SIZE", i_val=mp2_env%ri_mp2%block_size)
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)
369 
370  CALL section_vals_val_get(mp2_section, "RI%ROW_BLOCK", i_val=mp2_env%block_size_row)
371  CALL section_vals_val_get(mp2_section, "RI%COL_BLOCK", i_val=mp2_env%block_size_col)
372  CALL section_vals_val_get(mp2_section, "RI%CALC_COND_NUM", l_val=mp2_env%calc_PQ_cond_num)
373  CALL section_vals_val_get(mp2_section, "RI%DO_SVD", l_val=mp2_env%do_svd)
374  CALL section_vals_val_get(mp2_section, "RI%ERI_BLKSIZE", i_vals=mp2_env%eri_blksize)
375  CALL section_vals_val_get(mp2_section, "RI%RI_METRIC%POTENTIAL_TYPE", i_val=mp2_env%ri_metric%potential_type)
376  CALL section_vals_val_get(mp2_section, "RI%RI_METRIC%OMEGA", r_val=mp2_env%ri_metric%omega)
377  CALL section_vals_val_get(mp2_section, "RI%RI_METRIC%EPS_RANGE", r_val=mp2_env%eps_range)
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)
380  IF (mp2_env%ri_metric%potential_type == do_potential_short) THEN
381  CALL erfc_cutoff(mp2_env%eps_range, mp2_env%ri_metric%omega, mp2_env%ri_metric%cutoff_radius)
382  END IF
383 
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)
387  mp2_env%method = mp2_ri_optimize_basis
388  END IF
389  CALL section_vals_val_get(mp2_section, "RI%OPT_RI_BASIS%DELTA_I_REL", &
390  r_val=mp2_env%ri_opt_param%DI_rel)
391  CALL section_vals_val_get(mp2_section, "RI%OPT_RI_BASIS%DELTA_RI", &
392  r_val=mp2_env%ri_opt_param%DRI)
393  CALL section_vals_val_get(mp2_section, "RI%OPT_RI_BASIS%EPS_DERIV", &
394  r_val=mp2_env%ri_opt_param%eps_step)
395  CALL section_vals_val_get(mp2_section, "RI%OPT_RI_BASIS%MAX_ITER", &
396  i_val=mp2_env%ri_opt_param%max_num_iter)
397  CALL section_vals_val_get(mp2_section, "RI%OPT_RI_BASIS%BASIS_SIZE", &
398  i_val=mp2_env%ri_opt_param%basis_quality)
399  NULLIFY (tmplist)
400  CALL section_vals_val_get(mp2_section, "RI%OPT_RI_BASIS%NUM_FUNC", &
401  i_vals=tmplist)
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)
407  END DO
408  END IF
409 
410  CALL section_vals_val_get(mp2_section, "INTEGRALS%ERI_METHOD", i_val=mp2_env%eri_method)
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)
418  CALL section_vals_val_get(mp2_section, "INTEGRALS%INTERACTION_POTENTIAL%POTENTIAL_TYPE", &
419  i_val=mp2_env%potential_parameter%potential_type)
420  CALL section_vals_val_get(mp2_section, "INTEGRALS%INTERACTION_POTENTIAL%TRUNCATION_RADIUS", &
421  r_val=mp2_env%potential_parameter%cutoff_radius)
422  CALL section_vals_val_get(mp2_section, "INTEGRALS%INTERACTION_POTENTIAL%POTENTIAL_DATA", &
423  c_val=mp2_env%potential_parameter%filename)
424  CALL section_vals_val_get(mp2_section, "INTEGRALS%INTERACTION_POTENTIAL%OMEGA", &
425  r_val=mp2_env%potential_parameter%omega)
426  CALL section_vals_val_get(mp2_section, "INTEGRALS%INTERACTION_POTENTIAL%SCALE_COULOMB", &
427  r_val=mp2_env%potential_parameter%scale_coulomb)
428  CALL section_vals_val_get(mp2_section, "INTEGRALS%INTERACTION_POTENTIAL%SCALE_LONGRANGE", &
429  r_val=mp2_env%potential_parameter%scale_longrange)
430 
431  NULLIFY (mp2_env%eri_mme_param)
432  ALLOCATE (mp2_env%eri_mme_param)
433 
434  IF (mp2_env%eri_method .EQ. do_eri_mme) THEN
435  eri_mme_section => section_vals_get_subs_vals(mp2_section, "INTEGRALS%ERI_MME")
436  CALL cp_eri_mme_init_read_input(eri_mme_section, mp2_env%eri_mme_param)
437  END IF
438 
439  ! Set some parameters in case of P screening
440  mp2_env%not_last_hfx = .true.
441  mp2_env%p_screen = .true.
442 
443  ! Set the CPHF section
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)
449  cphf_section => section_vals_get_subs_vals(mp2_section, "CANONICAL_GRADIENTS%CPHF")
450  IF (ASSOCIATED(cphf_section)) THEN
451  CALL section_vals_val_get(cphf_section, "MAX_ITER", i_val=mp2_env%ri_grad%cphf_max_num_iter)
452  CALL section_vals_val_get(cphf_section, "EPS_CONV", r_val=mp2_env%ri_grad%cphf_eps_conv)
453  CALL section_vals_val_get(cphf_section, "SCALE_STEP_SIZE", r_val=mp2_env%ri_grad%scale_step_size)
454  CALL section_vals_val_get(cphf_section, "SOLVER_METHOD", i_val=mp2_env%ri_grad%z_solver_method)
455  CALL section_vals_val_get(cphf_section, "RESTART_EVERY", i_val=mp2_env%ri_grad%cphf_restart)
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)
459  END IF
460 
461  ! print some info about the MP2 parameters
462  unit_nr = cp_print_key_unit_nr(logger, mp2_section, "PRINT", &
463  extension=".mp2Log")
464  IF ((mp2_env%method .NE. mp2_method_none) .AND. unit_nr > 0) THEN
465  WRITE (unit_nr, '(T2,A)') ""
466  SELECT CASE (mp2_env%method)
467  CASE (mp2_method_direct)
468  WRITE (unit_nr, '(T2,A)') "MP2| using direct canonical MP2"
469  CASE (mp2_method_gpw)
470  WRITE (unit_nr, '(T2,A)') "MP2| using MP2 GPW style"
471  CASE (ri_mp2_method_gpw)
472  WRITE (unit_nr, '(T2,A)') "MP2| using RI-MP2-GPW"
473  CASE (ri_rpa_method_gpw)
474  WRITE (unit_nr, '(T2,A)') "RI-RPA| using GPW style"
475  CASE (ri_mp2_laplace)
476  WRITE (unit_nr, '(T2,A)') "RI-SOS-Laplace-MP2| using GPW style"
477  CASE (mp2_ri_optimize_basis)
478  WRITE (unit_nr, '(T2,A)') "MP2| Optimize RI auxiliary basis"
479  CASE DEFAULT
480  cpabort("")
481  END SELECT
482  WRITE (unit_nr, '(T2,A)') ""
483  CALL m_flush(unit_nr)
484  END IF
485 
486  CALL cp_print_key_finished_output(unit_nr, logger, mp2_section, &
487  "PRINT")
488 
489  CALL timestop(handle)
490 
491  END SUBROUTINE read_mp2_section
492 
493 ! **************************************************************************************************
494 !> \brief ...
495 !> \param method ...
496 ! **************************************************************************************************
497  SUBROUTINE check_method(method)
498  INTEGER, INTENT(IN) :: method
499 
500  CHARACTER(len=*), PARAMETER :: routinen = 'check_method'
501 
502  INTEGER :: handle
503 
504  CALL timeset(routinen, handle)
505 
506  IF (method .NE. mp2_method_none) THEN
507  cpabort("Please use not more than one method to compute the correlation energy.")
508  END IF
509 
510  CALL timestop(handle)
511 
512  END SUBROUTINE check_method
513 END MODULE mp2_setup
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.
collects all constants needed in input so that they can be used without circular dependencies
integer, parameter, public mp2_method_direct
integer, parameter, public mp2_ri_optimize_basis
integer, parameter, public do_eri_mme
integer, parameter, public ri_rpa_method_gpw
integer, parameter, public ri_mp2_method_gpw
integer, parameter, public mp2_method_gpw
integer, parameter, public mp2_method_none
integer, parameter, public ri_mp2_laplace
integer, parameter, public do_potential_short
objects that represent the structure of input sections and the data contained in an input section
recursive type(section_vals_type) function, pointer, public section_vals_get_subs_vals(section_vals, subsection_name, i_rep_section, can_return_null)
returns the values of the requested subsection
subroutine, public section_vals_val_get(section_vals, keyword_name, i_rep_section, i_rep_val, n_rep_val, val, l_val, i_val, r_val, c_val, l_vals, i_vals, r_vals, c_vals, explicit)
returns the requested value
Defines the basic variable types.
Definition: kinds.F:23
integer, parameter, public max_line_length
Definition: kinds.F:59
integer, parameter, public dp
Definition: kinds.F:34
integer, parameter, public default_string_length
Definition: kinds.F:57
Machine interface based on Fortran 2003 and POSIX.
Definition: machine.F:17
subroutine, public m_flush(lunit)
flushes units if the &GLOBAL flag is set accordingly
Definition: machine.F:106
Collection of simple mathematical functions and subroutines.
Definition: mathlib.F:15
subroutine, public erfc_cutoff(eps, omg, r_cutoff)
compute a truncation radius for the shortrange operator
Definition: mathlib.F:1689
Types needed for MP2 calculations.
Definition: mp2_setup.F:14
subroutine, public read_mp2_section(input, mp2_env)
...
Definition: mp2_setup.F:60
Types needed for MP2 calculations.
Definition: mp2_types.F:14