LCOV - code coverage report
Current view: top level - src - mp2_types.F (source / functions) Hit Total Coverage
Test: CP2K Regtests (git:e7e05ae) Lines: 26 27 96.3 %
Date: 2024-04-18 06:59:28 Functions: 2 35 5.7 %

          Line data    Source code
       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
      15             :    USE cp_eri_mme_interface,            ONLY: cp_eri_mme_finalize,&
      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: &
      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, soc_none, wfc_mm_style_gemm
      27             :    USE input_section_types,             ONLY: section_vals_release,&
      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
      34             :    USE local_gemm_api,                  ONLY: LOCAL_GEMM_PU_GPU,&
      35             :                                               local_gemm_create,&
      36             :                                               local_gemm_destroy,&
      37             :                                               local_gemm_set_op_threshold_gpu
      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, &
      52             :              mp2_method_none, &
      53             :              mp2_method_direct, &
      54             :              mp2_method_gpw, &
      55             :              mp2_ri_optimize_basis, &
      56             :              ri_mp2_method_gpw, &
      57             :              ri_rpa_method_gpw, &
      58             :              ri_mp2_laplace, &
      59             :              init_TShPSC_lmax
      60             : 
      61             :    PUBLIC :: mp2_env_create, &
      62             :              mp2_env_release, &
      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         412 :    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         412 :       CALL timeset(routineN, handle)
     411             : 
     412             :       ! release the HFX section for the EXX calculation
     413         412 :       IF (.NOT. mp2_env%ri_rpa%reuse_hfx) THEN
     414         394 :          IF (ASSOCIATED(mp2_env%ri_rpa%x_data)) CALL hfx_release(mp2_env%ri_rpa%x_data)
     415             :       END IF
     416         412 :       IF (ASSOCIATED(mp2_env%ri_rpa%xc_section_aux)) CALL section_vals_release(mp2_env%ri_rpa%xc_section_aux)
     417         412 :       IF (ASSOCIATED(mp2_env%ri_rpa%xc_section_primary)) CALL section_vals_release(mp2_env%ri_rpa%xc_section_primary)
     418             : 
     419         412 :       IF (mp2_env%eri_method .EQ. do_eri_mme) CALL cp_eri_mme_finalize(mp2_env%eri_mme_param)
     420         412 :       IF (ASSOCIATED(mp2_env%eri_mme_param)) DEALLOCATE (mp2_env%eri_mme_param)
     421         412 :       IF (ASSOCIATED(mp2_env%ri_rpa_im_time%tau_tj)) DEALLOCATE (mp2_env%ri_rpa_im_time%tau_tj)
     422         412 :       IF (ASSOCIATED(mp2_env%ri_rpa_im_time%tau_wj)) DEALLOCATE (mp2_env%ri_rpa_im_time%tau_wj)
     423         412 :       IF (ASSOCIATED(mp2_env%ri_rpa_im_time%tj)) DEALLOCATE (mp2_env%ri_rpa_im_time%tj)
     424         412 :       IF (ASSOCIATED(mp2_env%ri_rpa_im_time%wj)) DEALLOCATE (mp2_env%ri_rpa_im_time%wj)
     425         412 :       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         412 :       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         412 :       CALL local_gemm_destroy(mp2_env%local_gemm_ctx)
     429             : 
     430         412 :       CALL timestop(handle)
     431             : 
     432         412 :    END SUBROUTINE mp2_env_release
     433             : 
     434             : ! **************************************************************************************************
     435             : !> \brief ...
     436             : !> \param mp2_env ...
     437             : ! **************************************************************************************************
     438         412 :    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         412 :       CALL timeset(routineN, handle)
     446             : 
     447         412 :       CPASSERT(.NOT. ASSOCIATED(mp2_env))
     448             : 
     449        9888 :       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         412 :       CALL local_gemm_create(mp2_env%local_gemm_ctx, LOCAL_GEMM_PU_GPU)
     455         412 :       CALL local_gemm_set_op_threshold_gpu(mp2_env%local_gemm_ctx, 128*128*128*2)
     456             : 
     457         412 :       NULLIFY (mp2_env%ri_rpa%x_data)
     458             : 
     459         412 :       CALL timestop(handle)
     460             : 
     461         412 :    END SUBROUTINE mp2_env_create
     462             : 
     463           0 : END MODULE mp2_types

Generated by: LCOV version 1.15