(git:ccc2433)
mp2_types.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_types
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: &
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
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, &
60 
61  PUBLIC :: mp2_env_create, &
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  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  CALL timeset(routinen, handle)
411 
412  ! release the HFX section for the EXX calculation
413  IF (.NOT. mp2_env%ri_rpa%reuse_hfx) THEN
414  IF (ASSOCIATED(mp2_env%ri_rpa%x_data)) CALL hfx_release(mp2_env%ri_rpa%x_data)
415  END IF
416  IF (ASSOCIATED(mp2_env%ri_rpa%xc_section_aux)) CALL section_vals_release(mp2_env%ri_rpa%xc_section_aux)
417  IF (ASSOCIATED(mp2_env%ri_rpa%xc_section_primary)) CALL section_vals_release(mp2_env%ri_rpa%xc_section_primary)
418 
419  IF (mp2_env%eri_method .EQ. do_eri_mme) CALL cp_eri_mme_finalize(mp2_env%eri_mme_param)
420  IF (ASSOCIATED(mp2_env%eri_mme_param)) DEALLOCATE (mp2_env%eri_mme_param)
421  IF (ASSOCIATED(mp2_env%ri_rpa_im_time%tau_tj)) DEALLOCATE (mp2_env%ri_rpa_im_time%tau_tj)
422  IF (ASSOCIATED(mp2_env%ri_rpa_im_time%tau_wj)) DEALLOCATE (mp2_env%ri_rpa_im_time%tau_wj)
423  IF (ASSOCIATED(mp2_env%ri_rpa_im_time%tj)) DEALLOCATE (mp2_env%ri_rpa_im_time%tj)
424  IF (ASSOCIATED(mp2_env%ri_rpa_im_time%wj)) DEALLOCATE (mp2_env%ri_rpa_im_time%wj)
425  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  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  CALL local_gemm_destroy(mp2_env%local_gemm_ctx)
429 
430  CALL timestop(handle)
431 
432  END SUBROUTINE mp2_env_release
433 
434 ! **************************************************************************************************
435 !> \brief ...
436 !> \param mp2_env ...
437 ! **************************************************************************************************
438  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  CALL timeset(routinen, handle)
446 
447  cpassert(.NOT. ASSOCIATED(mp2_env))
448 
449  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  CALL local_gemm_create(mp2_env%local_gemm_ctx, local_gemm_pu_gpu)
455  CALL local_gemm_set_op_threshold_gpu(mp2_env%local_gemm_ctx, 128*128*128*2)
456 
457  NULLIFY (mp2_env%ri_rpa%x_data)
458 
459  CALL timestop(handle)
460 
461  END SUBROUTINE mp2_env_create
462 
463 END MODULE mp2_types
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
Definition: cp_fm_types.F:15
Types and set/get functions for HFX.
Definition: hfx_types.F:15
subroutine, public hfx_release(x_data)
This routine deallocates all data structures
Definition: hfx_types.F:1905
collects all constants needed in input so that they can be used without circular dependencies
integer, parameter, public gw_pade_approx
integer, parameter, public mp2_method_direct
integer, parameter, public mp2_ri_optimize_basis
integer, parameter, public kp_weights_w_auto
integer, parameter, public do_eri_mme
integer, parameter, public wfc_mm_style_gemm
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 eri_default
integer, parameter, public ri_rpa_g0w0_crossing_z_shot
integer, parameter, public soc_none
objects that represent the structure of input sections and the data contained in an input section
recursive subroutine, public section_vals_release(section_vals)
releases the given object
Defines the basic variable types.
Definition: kinds.F:23
integer, parameter, public dp
Definition: kinds.F:34
Types and basic routines needed for a kpoint calculation.
Definition: kpoint_types.F:15
2- and 3-center electron repulsion integral routines based on libint2 Currently available operators: ...
Definition: libint_2c_3c.F:14
subroutine, public local_gemm_set_op_threshold_gpu(ctx, opThresholdGPU)
...
integer, parameter, public local_gemm_pu_gpu
subroutine, public local_gemm_destroy(ctx)
release resources associated to a gemm context
subroutine, public local_gemm_create(ctx, pu)
create a context for handling gemm offloading
Interface to the message passing library MPI.
Calls routines to get RI integrals and calculate total energies.
Definition: mp2_gpw.F:14
Types needed for MP2 calculations.
Definition: mp2_types.F:14
subroutine, public mp2_env_create(mp2_env)
...
Definition: mp2_types.F:439
integer, save, public init_tshpsc_lmax
Definition: mp2_types.F:71
subroutine, public mp2_env_release(mp2_env)
...
Definition: mp2_types.F:404
basis types for the calculation of the perturbation of density theory.