LCOV - code coverage report
Current view: top level - src - mp2_types.F (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:2c0d679) Lines: 95.0 % 20 19
Test Date: 2026-09-25 00:58:37 Functions: 5.4 % 37 2

            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
        

Generated by: LCOV version 2.0-1