96#include "./base/base_uses.f90" 
  102   CHARACTER(len=*), 
PARAMETER, 
PRIVATE :: moduleN = 
'mp2_gpw' 
  127   SUBROUTINE mp2_gpw_main(qs_env, mp2_env, Emp2, Emp2_Cou, Emp2_EX, Emp2_S, Emp2_T, &
 
  128                           mos_mp2, para_env, unit_nr, calc_forces, calc_ex, do_ri_mp2, do_ri_rpa, &
 
  129                           do_ri_sos_laplace_mp2)
 
  132      REAL(kind=
dp), 
INTENT(OUT)                         :: emp2, emp2_cou, emp2_ex, emp2_s, emp2_t
 
  133      TYPE(
mo_set_type), 
DIMENSION(:), 
INTENT(IN)        :: mos_mp2
 
  135      INTEGER, 
INTENT(IN)                                :: unit_nr
 
  136      LOGICAL, 
INTENT(IN)                                :: calc_forces, calc_ex
 
  137      LOGICAL, 
INTENT(IN), 
OPTIONAL                      :: do_ri_mp2, do_ri_rpa, &
 
  138                                                            do_ri_sos_laplace_mp2
 
  140      CHARACTER(LEN=*), 
PARAMETER                        :: routinen = 
'mp2_gpw_main' 
  142      INTEGER :: blacs_grid_layout, bse_lev_virt, color_sub, dimen_ri, dimen_ri_red, eri_method, &
 
  143         handle, ispin, local_unit_nr, my_group_l_end, my_group_l_size, my_group_l_start, nmo, &
 
  144         nspins, potential_type, ri_metric_type
 
  145      INTEGER, 
ALLOCATABLE, 
DIMENSION(:) :: ends_array_mc, ends_array_mc_block, gw_corr_lev_occ, &
 
  146         gw_corr_lev_virt, homo, starts_array_mc, starts_array_mc_block
 
  147      INTEGER, 
DIMENSION(3)                              :: periodic
 
  148      LOGICAL :: blacs_repeatable, do_bse, do_im_time, do_kpoints_cubic_rpa, my_do_gw, &
 
  149         my_do_ri_mp2, my_do_ri_rpa, my_do_ri_sos_laplace_mp2
 
  150      REAL(kind=
dp)                                      :: emp2_ab, emp2_bb, emp2_cou_bb, &
 
  151                                                            emp2_ex_bb, eps_gvg_rspace_old, &
 
  152                                                            eps_pgf_orb_old, eps_rho_rspace_old
 
  153      REAL(kind=
dp), 
ALLOCATABLE, 
DIMENSION(:, :)        :: eigenval
 
  154      REAL(kind=
dp), 
ALLOCATABLE, 
DIMENSION(:, :, :)     :: bib_c_bse_ab, bib_c_bse_ij
 
  155      REAL(kind=
dp), 
DIMENSION(:), 
POINTER               :: mo_eigenvalues
 
  158         DIMENSION(:, :, :)                              :: t_3c_o_ind
 
  162      TYPE(
cp_fm_type), 
ALLOCATABLE, 
DIMENSION(:)        :: mo_coeff
 
  163      TYPE(
cp_fm_type), 
ALLOCATABLE, 
DIMENSION(:, :)     :: fm_matrix_l_kpoints, fm_matrix_minv, &
 
  164                                                            fm_matrix_minv_l_kpoints, &
 
  165                                                            fm_matrix_minv_vtrunc_minv
 
  169      TYPE(
dbcsr_p_type), 
ALLOCATABLE, 
DIMENSION(:)      :: mo_coeff_all, mo_coeff_gw, mo_coeff_o, &
 
  170                                                            mo_coeff_o_bse, mo_coeff_v, &
 
  173      TYPE(
dbcsr_p_type), 
DIMENSION(:, :), 
POINTER       :: matrix_s_kp
 
  174      TYPE(dbt_type)                                     :: t_3c_m
 
  175      TYPE(dbt_type), 
ALLOCATABLE, 
DIMENSION(:, :)       :: t_3c_o
 
  180         DIMENSION(:)                                    :: gd_b_virtual
 
  182         DIMENSION(:, :, :)                              :: t_3c_o_compressed
 
  183      TYPE(
kpoint_type), 
POINTER                         :: kpoints, kpoints_from_dft
 
  187         POINTER                                         :: sab_orb_sub
 
  189      TYPE(
qs_kind_type), 
DIMENSION(:), 
POINTER          :: qs_kind_set
 
  192         DIMENSION(:)                                    :: bib_c, bib_c_gw
 
  194      CALL timeset(routinen, handle)
 
  197      my_do_ri_mp2 = .false.
 
  198      IF (
PRESENT(do_ri_mp2)) my_do_ri_mp2 = do_ri_mp2
 
  201      my_do_ri_rpa = .false.
 
  202      IF (
PRESENT(do_ri_rpa)) my_do_ri_rpa = do_ri_rpa
 
  205      my_do_ri_sos_laplace_mp2 = .false.
 
  206      IF (
PRESENT(do_ri_sos_laplace_mp2)) my_do_ri_sos_laplace_mp2 = do_ri_sos_laplace_mp2
 
  209      IF (my_do_ri_sos_laplace_mp2) 
THEN 
  210         cpassert(.NOT. mp2_env%ri_rpa%do_ri_g0w0)
 
  214      do_im_time = mp2_env%do_im_time
 
  215      do_bse = qs_env%mp2_env%bse%do_bse
 
  216      do_kpoints_cubic_rpa = qs_env%mp2_env%ri_rpa_im_time%do_im_time_kpoints
 
  218      IF (do_kpoints_cubic_rpa .AND. mp2_env%ri_rpa%do_ri_g0w0) 
THEN 
  219         cpabort(
"Full RPA k-points (DO_KPOINTS in LOW_SCALING section) not implemented with GW")
 
  223      nspins = 
SIZE(mos_mp2)
 
  226      IF (do_kpoints_cubic_rpa) 
THEN 
  227         CALL get_qs_env(qs_env=qs_env, dft_control=dft_control, kpoints=kpoints_from_dft)
 
  228         mos(1:nspins) => kpoints_from_dft%kp_env(1)%kpoint_env%mos(1:nspins, 1)
 
  230         CALL get_qs_env(qs_env=qs_env, dft_control=dft_control, mos=mos)
 
  233      ALLOCATE (homo(nspins), eigenval(nmo, nspins), mo_coeff(nspins))
 
  236                         eigenvalues=mo_eigenvalues, homo=homo(ispin), &
 
  237                         mo_coeff=mo_coeff_ptr)
 
  238         mo_coeff(ispin) = mo_coeff_ptr
 
  239         eigenval(:, ispin) = mo_eigenvalues(1:nmo)
 
  243      color_sub = para_env%mepos/mp2_env%mp2_num_proc
 
  244      ALLOCATE (para_env_sub)
 
  245      CALL para_env_sub%from_split(para_env, color_sub)
 
  249      IF (para_env%is_source()) 
THEN 
  258                      qs_kind_set=qs_kind_set, &
 
  260                      particle_set=particle_set, &
 
  261                      atomic_kind_set=atomic_kind_set, &
 
  262                      dft_control=dft_control, &
 
  263                      matrix_s_kp=matrix_s_kp)
 
  265      CALL get_cell(cell=cell, periodic=periodic)
 
  268         IF (mp2_env%ri_metric%potential_type == 
ri_default) 
THEN 
  269            IF (sum(periodic) == 1 .OR. sum(periodic) == 3) 
THEN 
  281      IF (mp2_env%ri_metric%potential_type == 
ri_default) 
THEN 
  286         IF (sum(periodic) > 0) mp2_env%eri_method = 
do_eri_gpw 
  287         IF (sum(periodic) == 0) mp2_env%eri_method = 
do_eri_os 
  288         IF (sum(mp2_env%ri_rpa_im_time%kp_grid) > 0) mp2_env%eri_method = 
do_eri_os 
  291         IF (mp2_env%ri_rpa_im_time%do_im_time_kpoints) mp2_env%eri_method = 
do_eri_os 
  294      eri_method = mp2_env%eri_method
 
  296      IF (unit_nr > 0 .AND. mp2_env%eri_method == 
do_eri_gpw) 
THEN 
  297         WRITE (unit=unit_nr, fmt=
"(T3,A,T71,F10.1)") &
 
  298            "GPW_INFO| Density cutoff [a.u.]:", mp2_env%mp2_gpw%cutoff*0.5_dp
 
  299         WRITE (unit=unit_nr, fmt=
"(T3,A,T71,F10.1)") &
 
  300            "GPW_INFO| Relative density cutoff [a.u.]:", mp2_env%mp2_gpw%relative_cutoff*0.5_dp
 
  305      IF (.NOT. (mp2_env%ri_g0w0%print_local_bandgap .OR. mp2_env%bse%do_nto_analysis)) 
THEN 
  309                               default_global_unit_nr=local_unit_nr, &
 
  310                               close_global_unit_on_dealloc=.false.)
 
  311         CALL cp_logger_set(logger_sub, local_filename=
"MP2_localLog")
 
  313         logger_sub%iter_info%print_level = mp2_env%mp2_gpw%print_level
 
  319      blacs_repeatable = .true.
 
  320      NULLIFY (blacs_env_sub)
 
  325      blacs_env_sub_mat_munu => blacs_env_sub
 
  327      matrix_s(1:1) => matrix_s_kp(1:1, 1)
 
  329      CALL get_eps_old(dft_control, eps_pgf_orb_old, eps_rho_rspace_old, eps_gvg_rspace_old)
 
  332                           blacs_env_sub_mat_munu, do_alloc_blocks_from_nbl=.NOT. do_im_time, sab_orb_sub=sab_orb_sub, &
 
  333                           do_kpoints=mp2_env%ri_rpa_im_time%do_im_time_kpoints, &
 
  334                           dbcsr_sym_type=dbcsr_type_symmetric)
 
  337      ri_metric_type = mp2_env%ri_metric%potential_type
 
  340      potential_type = mp2_env%potential_parameter%potential_type
 
  343      my_do_gw = mp2_env%ri_rpa%do_ri_g0w0
 
  344      ALLOCATE (gw_corr_lev_occ(nspins), gw_corr_lev_virt(nspins))
 
  345      gw_corr_lev_occ(1) = mp2_env%ri_g0w0%corr_mos_occ
 
  346      gw_corr_lev_virt(1) = mp2_env%ri_g0w0%corr_mos_virt
 
  347      IF (nspins == 2) 
THEN 
  348         gw_corr_lev_occ(2) = mp2_env%ri_g0w0%corr_mos_occ_beta
 
  349         gw_corr_lev_virt(2) = mp2_env%ri_g0w0%corr_mos_virt_beta
 
  354            cpabort(
"BSE not implemented for open shell calculations")
 
  359         bse_lev_virt = gw_corr_lev_virt(1)
 
  363      ALLOCATE (mo_coeff_o(nspins), mo_coeff_v(nspins), mo_coeff_all(nspins), mo_coeff_gw(nspins))
 
  366      ALLOCATE (mo_coeff_o_bse(1), mo_coeff_v_bse(1))
 
  369      IF (.NOT. do_im_time) 
THEN 
  376            CALL replicate_mat_to_subgroup(para_env, para_env_sub, mo_coeff(ispin), homo(ispin), mat_munu%matrix, &
 
  377                                           mo_coeff_o(ispin)%matrix, mo_coeff_v(ispin)%matrix, &
 
  378                                           mo_coeff_all(ispin)%matrix, mo_coeff_gw(ispin)%matrix, &
 
  379                                           my_do_gw, gw_corr_lev_occ(ispin), gw_corr_lev_virt(ispin), do_bse, &
 
  380                                           bse_lev_virt, mo_coeff_o_bse(1)%matrix, mo_coeff_v_bse(1)%matrix, &
 
  381                                           mp2_env%mp2_gpw%eps_filter)
 
  390      IF (my_do_ri_mp2 .OR. my_do_ri_rpa .OR. my_do_ri_sos_laplace_mp2) 
THEN 
  392         IF (nspins == 2) 
THEN 
  395               bib_c, bib_c_gw, bib_c_bse_ij, bib_c_bse_ab, gd_array, gd_b_virtual, dimen_ri, dimen_ri_red, qs_env, &
 
  396               para_env, para_env_sub, color_sub, cell, particle_set, &
 
  397               atomic_kind_set, qs_kind_set, fm_matrix_pq, fm_matrix_l_kpoints, fm_matrix_minv_l_kpoints, &
 
  398               fm_matrix_minv, fm_matrix_minv_vtrunc_minv, nmo, homo, mat_munu, sab_orb_sub, &
 
  399               mo_coeff_o, mo_coeff_v, mo_coeff_all, mo_coeff_gw, mo_coeff_o_bse, mo_coeff_v_bse, &
 
  400               mp2_env%mp2_gpw%eps_filter, unit_nr, &
 
  401               mp2_env%mp2_memory, mp2_env%calc_PQ_cond_num, calc_forces, blacs_env_sub, my_do_gw .AND. .NOT. do_im_time, &
 
  402               do_bse, gd_b_all, starts_array_mc, ends_array_mc, starts_array_mc_block, ends_array_mc_block, &
 
  403               gw_corr_lev_occ(1), gw_corr_lev_virt(1), &
 
  405               do_im_time, do_kpoints_cubic_rpa, kpoints, &
 
  406               t_3c_m, t_3c_o, t_3c_o_compressed, t_3c_o_ind, &
 
  408               gd_b_occ_bse, gd_b_virt_bse)
 
  412                                       dimen_ri, dimen_ri_red, qs_env, para_env, para_env_sub, &
 
  413                                       color_sub, cell, particle_set, &
 
  414                                       atomic_kind_set, qs_kind_set, fm_matrix_pq, &
 
  415                                       fm_matrix_l_kpoints, fm_matrix_minv_l_kpoints, &
 
  416                                       fm_matrix_minv, fm_matrix_minv_vtrunc_minv, nmo, homo, &
 
  417                                       mat_munu, sab_orb_sub, &
 
  418                                       mo_coeff_o, mo_coeff_v, mo_coeff_all, mo_coeff_gw, mo_coeff_o_bse, mo_coeff_v_bse, &
 
  419                                       mp2_env%mp2_gpw%eps_filter, unit_nr, &
 
  420                                       mp2_env%mp2_memory, mp2_env%calc_PQ_cond_num, calc_forces, &
 
  421                                       blacs_env_sub, my_do_gw .AND. .NOT. do_im_time, do_bse, gd_b_all, &
 
  422                                       starts_array_mc, ends_array_mc, &
 
  423                                       starts_array_mc_block, ends_array_mc_block, &
 
  424                                       gw_corr_lev_occ(1), gw_corr_lev_virt(1), &
 
  426                                       do_im_time, do_kpoints_cubic_rpa, kpoints, &
 
  427                                       t_3c_m, t_3c_o, t_3c_o_compressed, t_3c_o_ind, &
 
  428                                       mp2_env%ri_metric, gd_b_occ_bse, gd_b_virt_bse)
 
  433         IF (nspins == 2) 
THEN 
  435            IF (unit_nr > 0) 
WRITE (unit_nr, *)
 
  436            IF (unit_nr > 0) 
WRITE (unit_nr, 
'(T3,A)') 
'Alpha (ia|' 
  438               emp2, emp2_cou, emp2_ex, qs_env, para_env, para_env_sub, color_sub, &
 
  439               cell, particle_set, &
 
  440               atomic_kind_set, qs_kind_set, eigenval, nmo, homo, mat_munu, &
 
  441               sab_orb_sub, mo_coeff_o, mo_coeff_v, mp2_env%mp2_gpw%eps_filter, unit_nr, &
 
  442               mp2_env%mp2_memory, calc_ex, blacs_env_sub, emp2_ab)
 
  445            IF (unit_nr > 0) 
WRITE (unit_nr, *)
 
  446            IF (unit_nr > 0) 
WRITE (unit_nr, 
'(T3,A)') 
'Beta (ia|' 
  448               emp2_bb, emp2_cou_bb, emp2_ex_bb, qs_env, para_env, para_env_sub, color_sub, cell, particle_set, &
 
  449               atomic_kind_set, qs_kind_set, eigenval(:, 2:2), nmo, homo(2:2), mat_munu, &
 
  450               sab_orb_sub, mo_coeff_o(2:2), mo_coeff_v(2:2), mp2_env%mp2_gpw%eps_filter, unit_nr, &
 
  451               mp2_env%mp2_memory, calc_ex, blacs_env_sub)
 
  454            emp2_cou = emp2_cou*0.25_dp
 
  455            emp2_ex = emp2_ex*0.5_dp
 
  457            emp2_cou_bb = emp2_cou_bb*0.25_dp
 
  458            emp2_ex_bb = emp2_ex_bb*0.5_dp
 
  461            emp2_t = emp2_cou + emp2_cou_bb + emp2_ex + emp2_ex_bb
 
  463            emp2_cou = emp2_cou + emp2_cou_bb + emp2_ab
 
  464            emp2_ex = emp2_ex + emp2_ex_bb
 
  465            emp2 = emp2_ex + emp2_cou
 
  470               emp2, emp2_cou, emp2_ex, qs_env, para_env, para_env_sub, color_sub, cell, particle_set, &
 
  471               atomic_kind_set, qs_kind_set, eigenval(:, 1:1), nmo, homo(1:1), mat_munu, &
 
  472               sab_orb_sub, mo_coeff_o(1:1), mo_coeff_v(1:1), mp2_env%mp2_gpw%eps_filter, unit_nr, &
 
  473               mp2_env%mp2_memory, calc_ex, blacs_env_sub)
 
  479      CALL dbcsr_clear_mempools()
 
  481      IF (calc_forces .AND. .NOT. do_im_time) 
THEN 
  483         ALLOCATE (mp2_env%ri_grad%mo_coeff_o(nspins), mp2_env%ri_grad%mo_coeff_v(nspins))
 
  485            NULLIFY (mp2_env%ri_grad%mo_coeff_o(ispin)%matrix)
 
  486            CALL dbcsr_init_p(mp2_env%ri_grad%mo_coeff_o(ispin)%matrix)
 
  487            CALL dbcsr_copy(mp2_env%ri_grad%mo_coeff_o(ispin)%matrix, mo_coeff_o(ispin)%matrix, &
 
  489            NULLIFY (mp2_env%ri_grad%mo_coeff_v(ispin)%matrix)
 
  490            CALL dbcsr_init_p(mp2_env%ri_grad%mo_coeff_v(ispin)%matrix)
 
  491            CALL dbcsr_copy(mp2_env%ri_grad%mo_coeff_v(ispin)%matrix, mo_coeff_v(ispin)%matrix, &
 
  494         CALL get_group_dist(gd_array, color_sub, my_group_l_start, my_group_l_end, my_group_l_size)
 
  498         ALLOCATE (mp2_env%ri_rpa%mo_coeff_o(nspins), mp2_env%ri_rpa%mo_coeff_v(nspins))
 
  500            CALL dbcsr_copy(mp2_env%ri_rpa%mo_coeff_o(ispin), mo_coeff_o(ispin)%matrix, name=
"mo_coeff_o")
 
  501            CALL dbcsr_copy(mp2_env%ri_rpa%mo_coeff_v(ispin), mo_coeff_v(ispin)%matrix, name=
"mo_coeff_v")
 
  505      IF (.NOT. do_im_time) 
THEN 
  509            DEALLOCATE (mo_coeff_o(ispin)%matrix)
 
  511            DEALLOCATE (mo_coeff_v(ispin)%matrix)
 
  514               DEALLOCATE (mo_coeff_all(ispin)%matrix)
 
  517         DEALLOCATE (mo_coeff_o, mo_coeff_v)
 
  518         IF (my_do_gw) 
DEALLOCATE (mo_coeff_all)
 
  524         DEALLOCATE (mo_coeff_o_bse(1)%matrix)
 
  525         DEALLOCATE (mo_coeff_v_bse(1)%matrix)
 
  527      DEALLOCATE (mo_coeff_o_bse, mo_coeff_v_bse)
 
  530      IF (calc_forces .AND. do_im_time .OR. &
 
  531          (.NOT. calc_forces .AND. mp2_env%ri_rpa%exchange_correction == 
rpa_exchange_none)) 
THEN 
  534         DEALLOCATE (mat_munu%matrix)
 
  541      IF (my_do_ri_rpa .OR. my_do_ri_sos_laplace_mp2) 
THEN 
  543         IF (do_im_time) 
CALL create_matrix_p(mat_p_global, qs_env, mp2_env, para_env)
 
  545         IF (.NOT. 
ALLOCATED(bib_c)) 
ALLOCATE (bib_c(nspins))
 
  546         IF (.NOT. 
ALLOCATED(bib_c_gw)) 
ALLOCATE (bib_c_gw(nspins))
 
  547         IF (.NOT. 
ALLOCATED(gd_b_virtual)) 
ALLOCATE (gd_b_virtual(nspins))
 
  550         CALL rpa_ri_compute_en(qs_env, emp2, mp2_env, bib_c, bib_c_gw, bib_c_bse_ij, bib_c_bse_ab, &
 
  551                                para_env, para_env_sub, color_sub, &
 
  552                                gd_array, gd_b_virtual, gd_b_all, gd_b_occ_bse, gd_b_virt_bse, &
 
  553                                mo_coeff, fm_matrix_pq, fm_matrix_l_kpoints, fm_matrix_minv_l_kpoints, &
 
  554                                fm_matrix_minv, fm_matrix_minv_vtrunc_minv, kpoints, &
 
  555                                eigenval, nmo, homo, dimen_ri, dimen_ri_red, gw_corr_lev_occ, gw_corr_lev_virt, &
 
  557                                unit_nr, my_do_ri_sos_laplace_mp2, my_do_gw, do_im_time, do_bse, matrix_s, &
 
  558                                mat_munu, mat_p_global, t_3c_m, t_3c_o, t_3c_o_compressed, t_3c_o_ind, &
 
  559                                starts_array_mc, ends_array_mc, &
 
  560                                starts_array_mc_block, ends_array_mc_block, calc_forces)
 
  562         IF (mp2_env%ri_rpa%do_rse) &
 
  563            CALL rse_energy(qs_env, mp2_env, para_env, dft_control, mo_coeff, homo, eigenval)
 
  566            IF (
ASSOCIATED(mat_p_global%matrix)) 
THEN 
  568               DEALLOCATE (mat_p_global%matrix)
 
  579            DEALLOCATE (mat_munu%matrix)
 
  586         IF (my_do_ri_mp2) 
THEN 
  593               emp2_cou, emp2_ex, emp2_s, emp2_t, bib_c, mp2_env, para_env, para_env_sub, color_sub, &
 
  594               gd_array, gd_b_virtual, &
 
  595               eigenval, nmo, homo, dimen_ri_red, unit_nr, calc_forces, calc_ex)
 
  602      IF (calc_forces .AND. .NOT. do_im_time) 
THEN 
  605                                 particle_set, atomic_kind_set, qs_kind_set, &
 
  606                                 mo_coeff, dimen_ri, eigenval, &
 
  607                                 my_group_l_start, my_group_l_end, my_group_l_size, &
 
  608                                 sab_orb_sub, mat_munu, blacs_env_sub)
 
  612            DEALLOCATE (mp2_env%ri_grad%mo_coeff_o(ispin)%matrix)
 
  615            DEALLOCATE (mp2_env%ri_grad%mo_coeff_v(ispin)%matrix)
 
  617         DEALLOCATE (mp2_env%ri_grad%mo_coeff_o, mp2_env%ri_grad%mo_coeff_v)
 
  620         DEALLOCATE (mat_munu%matrix)
 
  628      IF (my_do_gw .AND. .NOT. do_im_time) 
THEN 
  631            DEALLOCATE (mo_coeff_gw(ispin)%matrix)
 
  633         DEALLOCATE (mo_coeff_gw)
 
  637      dft_control%qs_control%eps_pgf_orb = eps_pgf_orb_old
 
  638      dft_control%qs_control%eps_rho_rspace = eps_rho_rspace_old
 
  639      dft_control%qs_control%eps_gvg_rspace = eps_gvg_rspace_old
 
  644      IF (.NOT. (mp2_env%ri_g0w0%print_local_bandgap .OR. mp2_env%bse%do_nto_analysis)) 
THEN 
  652      IF (calc_forces .AND. .NOT. do_im_time) 
THEN 
  654                                mo_coeff, homo, eigenval, unit_nr)
 
  657      DEALLOCATE (eigenval, mo_coeff)
 
  659      CALL timestop(handle)
 
 
  683   SUBROUTINE replicate_mat_to_subgroup(para_env, para_env_sub, mo_coeff, homo, mat_munu, &
 
  684                                        mo_coeff_o, mo_coeff_v, mo_coeff_all, mo_coeff_gw, my_do_gw, &
 
  685                                        gw_corr_lev_occ, gw_corr_lev_virt, my_do_bse, &
 
  686                                        bse_lev_virt, mo_coeff_o_bse, mo_coeff_v_bse, eps_filter)
 
  689      INTEGER, 
INTENT(IN)                                :: homo
 
  691      TYPE(
dbcsr_type), 
POINTER                          :: mo_coeff_o, mo_coeff_v, mo_coeff_all, &
 
  693      LOGICAL, 
INTENT(IN)                                :: my_do_gw
 
  694      INTEGER, 
INTENT(IN)                                :: gw_corr_lev_occ, gw_corr_lev_virt
 
  695      LOGICAL, 
INTENT(IN)                                :: my_do_bse
 
  696      INTEGER, 
INTENT(IN)                                :: bse_lev_virt
 
  697      TYPE(
dbcsr_type), 
POINTER                          :: mo_coeff_o_bse, mo_coeff_v_bse
 
  698      REAL(kind=
dp), 
INTENT(IN)                          :: eps_filter
 
  700      CHARACTER(LEN=*), 
PARAMETER :: routinen = 
'replicate_mat_to_subgroup' 
  703      REAL(kind=
dp), 
ALLOCATABLE, 
DIMENSION(:, :)        :: c
 
  706      CALL timeset(routinen, handle)
 
  711      ALLOCATE (mo_coeff_o)
 
  713                                 mat_munu, gd_array, eps_filter)
 
  715      ALLOCATE (mo_coeff_v)
 
  717                                 mat_munu, gd_array, eps_filter)
 
  720         ALLOCATE (mo_coeff_gw)
 
  721         CALL build_dbcsr_from_rows(para_env_sub, mo_coeff_gw, c(:, homo - gw_corr_lev_occ + 1:homo + gw_corr_lev_virt), &
 
  722                                    mat_munu, gd_array, eps_filter)
 
  725         ALLOCATE (mo_coeff_all)
 
  727                                    mat_munu, gd_array, eps_filter)
 
  733         ALLOCATE (mo_coeff_o_bse)
 
  735                                    mat_munu, gd_array, eps_filter)
 
  737         ALLOCATE (mo_coeff_v_bse)
 
  739                                    mat_munu, gd_array, eps_filter)
 
  745      CALL timestop(handle)
 
  747   END SUBROUTINE replicate_mat_to_subgroup
 
  761      REAL(kind=
dp), 
ALLOCATABLE, 
DIMENSION(:, :), &
 
  764      CHARACTER(LEN=*), 
PARAMETER :: routinen = 
'grep_rows_in_subgroups' 
  766      INTEGER :: handle, i_global, iib, j_global, jjb, max_row_col_local, my_mu_end, my_mu_size, &
 
  767         my_mu_start, ncol_global, ncol_local, ncol_rec, nrow_global, nrow_local, nrow_rec, &
 
  768         proc_receive_static, proc_send_static, proc_shift
 
  769      INTEGER, 
ALLOCATABLE, 
DIMENSION(:, :)              :: local_col_row_info, rec_col_row_info
 
  770      INTEGER, 
DIMENSION(:), 
POINTER                     :: col_indices, col_indices_rec, &
 
  771                                                            row_indices, row_indices_rec
 
  772      REAL(kind=
dp), 
ALLOCATABLE, 
DIMENSION(:, :)        :: local_c, rec_c
 
  773      REAL(kind=
dp), 
CONTIGUOUS, 
DIMENSION(:, :), &
 
  774         POINTER                                         :: local_c_internal
 
  776      CALL timeset(routinen, handle)
 
  779                          ncol_global=ncol_global, &
 
  780                          nrow_global=nrow_global, &
 
  781                          nrow_local=nrow_local, &
 
  782                          ncol_local=ncol_local, &
 
  783                          row_indices=row_indices, &
 
  784                          col_indices=col_indices, &
 
  785                          local_data=local_c_internal)
 
  788      CALL get_group_dist(gd_array, para_env_sub%mepos, my_mu_start, my_mu_end, my_mu_size)
 
  791      ALLOCATE (c(my_mu_size, ncol_global))
 
  794      ALLOCATE (local_c(nrow_local, ncol_local))
 
  795      local_c(:, :) = local_c_internal(1:nrow_local, 1:ncol_local)
 
  796      NULLIFY (local_c_internal)
 
  798      max_row_col_local = max(nrow_local, ncol_local)
 
  799      CALL para_env%max(max_row_col_local)
 
  801      ALLOCATE (local_col_row_info(0:max_row_col_local, 2))
 
  802      local_col_row_info = 0
 
  804      local_col_row_info(0, 1) = nrow_local
 
  805      local_col_row_info(1:nrow_local, 1) = row_indices(1:nrow_local)
 
  807      local_col_row_info(0, 2) = ncol_local
 
  808      local_col_row_info(1:ncol_local, 2) = col_indices(1:ncol_local)
 
  810      ALLOCATE (rec_col_row_info(0:max_row_col_local, 2))
 
  813      DO iib = 1, nrow_local
 
  814         i_global = row_indices(iib)
 
  815         IF (i_global >= my_mu_start .AND. i_global <= my_mu_end) 
THEN 
  816            DO jjb = 1, ncol_local
 
  817               j_global = col_indices(jjb)
 
  818               c(i_global - my_mu_start + 1, j_global) = local_c(iib, jjb)
 
  824      proc_send_static = 
modulo(para_env%mepos + 1, para_env%num_pe)
 
  825      proc_receive_static = 
modulo(para_env%mepos - 1, para_env%num_pe)
 
  826      DO proc_shift = 1, para_env%num_pe - 1
 
  829         CALL para_env%sendrecv(local_col_row_info, proc_send_static, rec_col_row_info, proc_receive_static)
 
  830         nrow_rec = rec_col_row_info(0, 1)
 
  831         ncol_rec = rec_col_row_info(0, 2)
 
  833         ALLOCATE (row_indices_rec(nrow_rec))
 
  834         row_indices_rec = rec_col_row_info(1:nrow_rec, 1)
 
  836         ALLOCATE (col_indices_rec(ncol_rec))
 
  837         col_indices_rec = rec_col_row_info(1:ncol_rec, 2)
 
  839         ALLOCATE (rec_c(nrow_rec, ncol_rec))
 
  843         CALL para_env%sendrecv(local_c, proc_send_static, rec_c, proc_receive_static)
 
  847            i_global = row_indices_rec(iib)
 
  848            IF (i_global >= my_mu_start .AND. i_global <= my_mu_end) 
THEN 
  850                  j_global = col_indices_rec(jjb)
 
  851                  c(i_global - my_mu_start + 1, j_global) = rec_c(iib, jjb)
 
  856         local_col_row_info(:, :) = rec_col_row_info
 
  858         ALLOCATE (local_c(nrow_rec, ncol_rec))
 
  859         local_c(:, :) = rec_c
 
  861         DEALLOCATE (col_indices_rec)
 
  862         DEALLOCATE (row_indices_rec)
 
  867      DEALLOCATE (local_col_row_info)
 
  868      DEALLOCATE (rec_col_row_info)
 
  870      CALL timestop(handle)
 
 
  885                                    mat_munu, gd_array, eps_filter)
 
  888      REAL(kind=
dp), 
DIMENSION(:, :), 
INTENT(IN)         :: cread
 
  891      REAL(kind=
dp), 
INTENT(IN)                          :: eps_filter
 
  893      CHARACTER(LEN=*), 
PARAMETER :: routinen = 
'build_dbcsr_from_rows' 
  895      INTEGER :: col, col_offset, col_size, handle, i, i_global, j, j_global, my_mu_end, &
 
  896         my_mu_start, ncol_global, proc_receive, proc_send, proc_shift, rec_mu_end, rec_mu_size, &
 
  897         rec_mu_start, row, row_offset, row_size
 
  898      REAL(kind=
dp), 
ALLOCATABLE, 
DIMENSION(:, :)        :: rec_c
 
  899      REAL(kind=
dp), 
DIMENSION(:, :), 
POINTER            :: data_block
 
  902      CALL timeset(routinen, handle)
 
  904      ncol_global = 
SIZE(cread, 2)
 
  906      CALL get_group_dist(gd_array, para_env_sub%mepos, my_mu_start, my_mu_end)
 
  909                                             sym=dbcsr_type_no_symmetry)
 
  916                                        row_size=row_size, col_size=col_size, &
 
  917                                        row_offset=row_offset, col_offset=col_offset)
 
  919            i_global = row_offset + i - 1
 
  920            IF (i_global >= my_mu_start .AND. i_global <= my_mu_end) 
THEN 
  922                  j_global = col_offset + j - 1
 
  923                  data_block(i, j) = cread(i_global - my_mu_start + 1, col_offset + j - 1)
 
  932      DO proc_shift = 1, para_env_sub%num_pe - 1
 
  933         proc_send = 
modulo(para_env_sub%mepos + proc_shift, para_env_sub%num_pe)
 
  934         proc_receive = 
modulo(para_env_sub%mepos - proc_shift, para_env_sub%num_pe)
 
  936         CALL get_group_dist(gd_array, proc_receive, rec_mu_start, rec_mu_end, rec_mu_size)
 
  938         ALLOCATE (rec_c(rec_mu_size, ncol_global))
 
  942         CALL para_env_sub%sendrecv(cread, proc_send, rec_c, proc_receive)
 
  948                                           row_size=row_size, col_size=col_size, &
 
  949                                           row_offset=row_offset, col_offset=col_offset)
 
  951               i_global = row_offset + i - 1
 
  952               IF (i_global >= rec_mu_start .AND. i_global <= rec_mu_end) 
THEN 
  954                     j_global = col_offset + j - 1
 
  955                     data_block(i, j) = rec_c(i_global - rec_mu_start + 1, col_offset + j - 1)
 
  967      CALL timestop(handle)
 
 
  987                              do_ri_aux_basis, do_mixed_basis, group_size_prim, &
 
  988                              do_alloc_blocks_from_nbl, do_kpoints, sab_orb_sub, dbcsr_sym_type)
 
  992      REAL(kind=
dp)                                      :: eps_grid
 
  994      LOGICAL, 
INTENT(IN), 
OPTIONAL                      :: do_ri_aux_basis, do_mixed_basis
 
  995      INTEGER, 
INTENT(IN), 
OPTIONAL                      :: group_size_prim
 
  996      LOGICAL, 
INTENT(IN), 
OPTIONAL                      :: do_alloc_blocks_from_nbl, do_kpoints
 
  998         OPTIONAL, 
POINTER                               :: sab_orb_sub
 
  999      CHARACTER, 
OPTIONAL                                :: dbcsr_sym_type
 
 1001      CHARACTER(LEN=*), 
PARAMETER                        :: routinen = 
'create_mat_munu' 
 1003      CHARACTER                                          :: my_dbcsr_sym_type
 
 1004      INTEGER                                            :: handle, ikind, natom, nkind
 
 1005      INTEGER, 
DIMENSION(:), 
POINTER                     :: col_blk_sizes, row_blk_sizes
 
 1006      LOGICAL                                            :: my_do_alloc_blocks_from_nbl, &
 
 1007                                                            my_do_kpoints, my_do_mixed_basis, &
 
 1009      LOGICAL, 
ALLOCATABLE, 
DIMENSION(:)                 :: orb_present
 
 1010      REAL(
dp), 
ALLOCATABLE, 
DIMENSION(:)                :: orb_radius
 
 1011      REAL(
dp), 
ALLOCATABLE, 
DIMENSION(:, :)             :: pair_radius
 
 1012      REAL(kind=
dp)                                      :: subcells
 
 1025         POINTER                                         :: my_sab_orb_sub
 
 1027      TYPE(
qs_kind_type), 
DIMENSION(:), 
POINTER          :: qs_kind_set
 
 1029      CALL timeset(routinen, handle)
 
 1031      NULLIFY (basis_set_ri_aux)
 
 1033      my_do_ri_aux_basis = .false.
 
 1034      IF (
PRESENT(do_ri_aux_basis)) 
THEN 
 1035         my_do_ri_aux_basis = do_ri_aux_basis
 
 1038      my_do_mixed_basis = .false.
 
 1039      IF (
PRESENT(do_mixed_basis)) 
THEN 
 1040         my_do_mixed_basis = do_mixed_basis
 
 1043      my_do_alloc_blocks_from_nbl = .false.
 
 1044      IF (
PRESENT(do_alloc_blocks_from_nbl)) 
THEN 
 1045         my_do_alloc_blocks_from_nbl = do_alloc_blocks_from_nbl
 
 1048      my_do_kpoints = .false.
 
 1049      IF (
PRESENT(do_kpoints)) 
THEN 
 1050         my_do_kpoints = do_kpoints
 
 1053      my_dbcsr_sym_type = dbcsr_type_no_symmetry
 
 1054      IF (
PRESENT(dbcsr_sym_type)) 
THEN 
 1055         my_dbcsr_sym_type = dbcsr_sym_type
 
 1059                      qs_kind_set=qs_kind_set, &
 
 1061                      particle_set=particle_set, &
 
 1062                      atomic_kind_set=atomic_kind_set, &
 
 1063                      molecule_set=molecule_set, &
 
 1064                      molecule_kind_set=molecule_kind_set, &
 
 1065                      dft_control=dft_control)
 
 1067      IF (my_do_kpoints) 
THEN 
 1069         IF (eps_grid < dft_control%qs_control%eps_pgf_orb) 
THEN 
 1070            eps_grid = dft_control%qs_control%eps_pgf_orb
 
 1071            cpwarn(
"WFC_GPW%EPS_GRID has been set to QS%EPS_PGF_ORB")
 
 1076      dft_control%qs_control%eps_pgf_orb = eps_grid
 
 1077      dft_control%qs_control%eps_rho_rspace = eps_grid
 
 1078      dft_control%qs_control%eps_gvg_rspace = eps_grid
 
 1082      NULLIFY (local_particles_sub, local_molecules_sub)
 
 1084                                   particle_set=particle_set, &
 
 1085                                   local_particles=local_particles_sub, &
 
 1086                                   molecule_kind_set=molecule_kind_set, &
 
 1087                                   molecule_set=molecule_set, &
 
 1088                                   local_molecules=local_molecules_sub, &
 
 1089                                   force_env_section=qs_env%input)
 
 1092      NULLIFY (distribution_2d_sub)
 
 1094                                   atomic_kind_set=atomic_kind_set, &
 
 1095                                   qs_kind_set=qs_kind_set, &
 
 1096                                   particle_set=particle_set, &
 
 1097                                   molecule_kind_set=molecule_kind_set, &
 
 1098                                   molecule_set=molecule_set, &
 
 1099                                   distribution_2d=distribution_2d_sub, &
 
 1100                                   blacs_env=blacs_env_sub, &
 
 1101                                   force_env_section=qs_env%input)
 
 1105      nkind = 
SIZE(atomic_kind_set)
 
 1106      ALLOCATE (atom2d(nkind))
 
 1108      CALL atom2d_build(atom2d, local_particles_sub, distribution_2d_sub, atomic_kind_set, &
 
 1109                        molecule_set, molecule_only=.false., particle_set=particle_set)
 
 1111      ALLOCATE (orb_present(nkind))
 
 1112      ALLOCATE (orb_radius(nkind))
 
 1113      ALLOCATE (pair_radius(nkind, nkind))
 
 1116         CALL get_qs_kind(qs_kind_set(ikind), basis_set=orb_basis_set)
 
 1117         IF (
ASSOCIATED(orb_basis_set)) 
THEN 
 1118            orb_present(ikind) = .true.
 
 1119            CALL get_gto_basis_set(gto_basis_set=orb_basis_set, kind_radius=orb_radius(ikind))
 
 1121            orb_present(ikind) = .false.
 
 1122            orb_radius(ikind) = 0.0_dp
 
 1126      CALL pair_radius_setup(orb_present, orb_present, orb_radius, orb_radius, pair_radius)
 
 1128      IF (
PRESENT(sab_orb_sub)) 
THEN 
 1129         NULLIFY (sab_orb_sub)
 
 1131         IF (my_do_kpoints) 
THEN 
 1133                                      mic=.false., subcells=subcells, molecular=.false., nlname=
"sab_orb_sub", &
 
 1137                                      mic=.false., subcells=subcells, molecular=.false., nlname=
"sab_orb_sub")
 
 1140         NULLIFY (my_sab_orb_sub)
 
 1142         IF (my_do_kpoints) 
THEN 
 1144                                      mic=.false., subcells=subcells, molecular=.false., nlname=
"sab_orb_sub", &
 
 1148                                      mic=.false., subcells=subcells, molecular=.false., nlname=
"sab_orb_sub")
 
 1153      DEALLOCATE (orb_present, orb_radius, pair_radius)
 
 1156      ALLOCATE (dbcsr_dist_sub)
 
 1160      natom = 
SIZE(particle_set)
 
 1161      ALLOCATE (row_blk_sizes(natom))
 
 1162      IF (my_do_ri_aux_basis) 
THEN 
 1164         ALLOCATE (basis_set_ri_aux(nkind))
 
 1166         CALL get_particle_set(particle_set, qs_kind_set, nsgf=row_blk_sizes, basis=basis_set_ri_aux)
 
 1167         DEALLOCATE (basis_set_ri_aux)
 
 1169      ELSE IF (my_do_mixed_basis) 
THEN 
 1171         ALLOCATE (basis_set_ri_aux(nkind))
 
 1173         CALL get_particle_set(particle_set, qs_kind_set, nsgf=row_blk_sizes, basis=basis_set_ri_aux)
 
 1174         DEALLOCATE (basis_set_ri_aux)
 
 1176         ALLOCATE (col_blk_sizes(natom))
 
 1179         col_blk_sizes = col_blk_sizes*group_size_prim
 
 1185      NULLIFY (mat_munu%matrix)
 
 1186      ALLOCATE (mat_munu%matrix)
 
 1188      IF (my_do_ri_aux_basis) 
THEN 
 1192                           dist=dbcsr_dist_sub, matrix_type=my_dbcsr_sym_type, &
 
 1193                           row_blk_size=row_blk_sizes, col_blk_size=row_blk_sizes)
 
 1195      ELSE IF (my_do_mixed_basis) 
THEN 
 1199                           dist=dbcsr_dist_sub, matrix_type=my_dbcsr_sym_type, &
 
 1200                           row_blk_size=row_blk_sizes, col_blk_size=col_blk_sizes)
 
 1206                           dist=dbcsr_dist_sub, matrix_type=my_dbcsr_sym_type, &
 
 1207                           row_blk_size=row_blk_sizes, col_blk_size=row_blk_sizes)
 
 1209         IF (my_do_alloc_blocks_from_nbl) 
THEN 
 1211            IF (
PRESENT(sab_orb_sub)) 
THEN 
 1221      DEALLOCATE (row_blk_sizes)
 
 1223      IF (my_do_mixed_basis) 
THEN 
 1224         DEALLOCATE (col_blk_sizes)
 
 1228      DEALLOCATE (dbcsr_dist_sub)
 
 1235      IF (.NOT. 
PRESENT(sab_orb_sub)) 
THEN 
 1239      CALL timestop(handle)
 
 
 1250   SUBROUTINE create_matrix_p(mat_P_global, qs_env, mp2_env, para_env)
 
 1257      CHARACTER(LEN=*), 
PARAMETER                        :: routinen = 
'create_matrix_P' 
 1259      INTEGER                                            :: blacs_grid_layout, handle
 
 1260      LOGICAL                                            :: blacs_repeatable
 
 1263      CALL timeset(routinen, handle)
 
 1266      blacs_repeatable = .true.
 
 1267      NULLIFY (blacs_env_global)
 
 1269                               blacs_grid_layout, &
 
 1272      CALL create_mat_munu(mat_p_global, qs_env, mp2_env%mp2_gpw%eps_grid, &
 
 1273                           blacs_env_global, do_ri_aux_basis=.true., &
 
 1274                           do_kpoints=mp2_env%ri_rpa_im_time%do_im_time_kpoints)
 
 1279      CALL timestop(handle)
 
 1290   PURE SUBROUTINE get_eps_old(dft_control, eps_pgf_orb_old, eps_rho_rspace_old, eps_gvg_rspace_old)
 
 1293      REAL(kind=
dp), 
INTENT(OUT)                         :: eps_pgf_orb_old, eps_rho_rspace_old, &
 
 1297      eps_pgf_orb_old = dft_control%qs_control%eps_pgf_orb
 
 1298      eps_rho_rspace_old = dft_control%qs_control%eps_rho_rspace
 
 1299      eps_gvg_rspace_old = dft_control%qs_control%eps_gvg_rspace
 
 1301   END SUBROUTINE get_eps_old
 
static GRID_HOST_DEVICE int modulo(int a, int m)
Equivalent of Fortran's MODULO, which always return a positive number. https://gcc....
Define the atomic kind types and their sub types.
subroutine, public get_gto_basis_set(gto_basis_set, name, aliases, norm_type, kind_radius, ncgf, nset, nsgf, cgf_symbol, sgf_symbol, norm_cgf, set_radius, lmax, lmin, lx, ly, lz, m, ncgf_set, npgf, nsgf_set, nshell, cphi, pgf_radius, sphi, scon, zet, first_cgf, first_sgf, l, last_cgf, last_sgf, n, gcc, maxco, maxl, maxpgf, maxsgf_set, maxshell, maxso, nco_sum, npgf_sum, nshell_sum, maxder, short_kind_radius, npgf_seg_sum)
...
Handles all functions related to the CELL.
subroutine, public get_cell(cell, alpha, beta, gamma, deth, orthorhombic, abc, periodic, h, h_inv, symmetry_id, tag)
Get informations about a simulation cell.
methods related to the blacs parallel environment
integer, parameter, public blacs_grid_square
subroutine, public cp_blacs_env_release(blacs_env)
releases the given blacs_env
subroutine, public cp_blacs_env_create(blacs_env, para_env, blacs_grid_layout, blacs_repeatable, row_major, grid_2d)
allocates and initializes a type that represent a blacs context
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
subroutine, public dbcsr_distribution_release(dist)
...
subroutine, public dbcsr_iterator_next_block(iterator, row, column, block, block_number_argument_has_been_removed, row_size, col_size, row_offset, col_offset)
...
logical function, public dbcsr_iterator_blocks_left(iterator)
...
subroutine, public dbcsr_iterator_stop(iterator)
...
subroutine, public dbcsr_copy(matrix_b, matrix_a, name, keep_sparsity, keep_imaginary)
...
subroutine, public dbcsr_init_p(matrix)
...
subroutine, public dbcsr_filter(matrix, eps)
...
subroutine, public dbcsr_iterator_start(iterator, matrix, shared, dynamic, dynamic_byrows)
...
subroutine, public dbcsr_release(matrix)
...
subroutine, public dbcsr_reserve_all_blocks(matrix)
Reserves all blocks.
Routines that link DBCSR and CP2K concepts together.
subroutine, public cp_dbcsr_alloc_block_from_nbl(matrix, sab_orb, desymmetrize)
allocate the blocks of a dbcsr based on the neighbor list
DBCSR operations in CP2K.
subroutine, public cp_dbcsr_dist2d_to_dist(dist2d, dist)
Creates a DBCSR distribution from a distribution_2d.
subroutine, public cp_dbcsr_m_by_n_from_row_template(matrix, template, n, sym)
Utility function to create dbcsr matrix, m x n matrix (n arbitrary) with the same processor grid and ...
represent a full matrix distributed on many processors
subroutine, public cp_fm_get_info(matrix, name, nrow_global, ncol_global, nrow_block, ncol_block, nrow_local, ncol_local, row_indices, col_indices, local_data, context, nrow_locals, ncol_locals, matrix_struct, para_env)
returns all kind of information about the full matrix
various routines to log and control the output. The idea is that decisions about where to log should ...
recursive integer function, public cp_logger_get_default_unit_nr(logger, local, skip_not_ionode)
asks the default unit number of the given logger. try to use cp_logger_get_unit_nr
subroutine, public cp_logger_set(logger, local_filename, global_filename)
sets various attributes of the given logger
subroutine, public cp_rm_default_logger()
the cousin of cp_add_default_logger, decrements the stack, so that the default logger is what it has ...
subroutine, public cp_logger_release(logger)
releases this logger
subroutine, public cp_logger_create(logger, para_env, print_level, default_global_unit_nr, default_local_unit_nr, global_filename, local_filename, close_global_unit_on_dealloc, iter_info, close_local_unit_on_dealloc, suffix, template_logger)
initializes a logger
subroutine, public cp_add_default_logger(logger)
adds a default logger. MUST be called before logging occours
type(cp_logger_type) function, pointer, public cp_get_default_logger()
returns the default logger
This is the start of a dbt_api, all publically needed functions are exported here....
stores a lists of integer that are local to a processor. The idea is that these integers represent ob...
subroutine, public distribution_1d_release(distribution_1d)
releases the given distribution_1d
stores a mapping of 2D info (e.g. matrix) on a 2D processor distribution (i.e. blacs grid) where cpus...
subroutine, public distribution_2d_release(distribution_2d)
...
Distribution methods for atoms, particles, or molecules.
subroutine, public distribute_molecules_1d(atomic_kind_set, particle_set, local_particles, molecule_kind_set, molecule_set, local_molecules, force_env_section, prev_molecule_kind_set, prev_local_molecules)
Distribute molecules and particles.
subroutine, public distribute_molecules_2d(cell, atomic_kind_set, particle_set, qs_kind_set, molecule_kind_set, molecule_set, distribution_2d, blacs_env, force_env_section)
Distributes the particle pairs creating a 2d distribution optimally suited for quickstep.
Types to describe group distributions.
Types and set/get functions for HFX.
Defines the basic variable types.
integer, parameter, public dp
Types and basic routines needed for a kpoint calculation.
Interface to the Libint-Library or a c++ wrapper.
subroutine, public cp_libint_static_cleanup()
subroutine, public cp_libint_static_init()
Machine interface based on Fortran 2003 and POSIX.
integer, parameter, public default_output_unit
subroutine, public m_flush(lunit)
flushes units if the &GLOBAL flag is set accordingly
Interface to the message passing library MPI.
subroutine, public mp_para_env_release(para_env)
releases the para object (to be called when you don't want anymore the shared copy of this object)
Define the molecule kind structure types and the corresponding functionality.
Define the data structure for the molecule information.
Routines to calculate CPHF like update and solve Z-vector equation for MP2 gradients (only GPW)
subroutine, public solve_z_vector_eq(qs_env, mp2_env, para_env, dft_control, mo_coeff, homo, eigenval, unit_nr)
Solve Z-vector equations necessary for the calculation of the MP2 gradients, in order to be consisten...
Routines to calculate MP2 energy using GPW method.
subroutine, public mp2_gpw_compute(emp2, emp2_cou, emp2_ex, qs_env, para_env, para_env_sub, color_sub, cell, particle_set, atomic_kind_set, qs_kind_set, eigenval, nmo, homo, mat_munu, sab_orb_sub, mo_coeff_o, mo_coeff_v, eps_filter, unit_nr, mp2_memory, calc_ex, blacs_env_sub, emp2_ab)
...
Calls routines to get RI integrals and calculate total energies.
subroutine, public mp2_gpw_main(qs_env, mp2_env, emp2, emp2_cou, emp2_ex, emp2_s, emp2_t, mos_mp2, para_env, unit_nr, calc_forces, calc_ex, do_ri_mp2, do_ri_rpa, do_ri_sos_laplace_mp2)
with a big bang to mp2
subroutine, public grep_rows_in_subgroups(para_env, para_env_sub, mo_coeff, gd_array, c)
...
subroutine, public build_dbcsr_from_rows(para_env_sub, mo_coeff_to_build, cread, mat_munu, gd_array, eps_filter)
Encapsulate the building of dbcsr_matrices mo_coeff_(v,o,all)
subroutine, public create_mat_munu(mat_munu, qs_env, eps_grid, blacs_env_sub, do_ri_aux_basis, do_mixed_basis, group_size_prim, do_alloc_blocks_from_nbl, do_kpoints, sab_orb_sub, dbcsr_sym_type)
Encapsulate the building of dbcsr_matrix mat_munu.
Routines to calculate and distribute 2c- and 3c- integrals for RI.
subroutine, public mp2_ri_gpw_compute_in(bib_c, bib_c_gw, bib_c_bse_ij, bib_c_bse_ab, gd_array, gd_b_virtual, dimen_ri, dimen_ri_red, qs_env, para_env, para_env_sub, color_sub, cell, particle_set, atomic_kind_set, qs_kind_set, fm_matrix_pq, fm_matrix_l_kpoints, fm_matrix_minv_l_kpoints, fm_matrix_minv, fm_matrix_minv_vtrunc_minv, nmo, homo, mat_munu, sab_orb_sub, mo_coeff_o, mo_coeff_v, mo_coeff_all, mo_coeff_gw, mo_coeff_o_bse, mo_coeff_v_bse, eps_filter, unit_nr, mp2_memory, calc_pq_cond_num, calc_forces, blacs_env_sub, my_do_gw, do_bse, gd_b_all, starts_array_mc, ends_array_mc, starts_array_mc_block, ends_array_mc_block, gw_corr_lev_occ, gw_corr_lev_virt, bse_lev_virt, do_im_time, do_kpoints_cubic_rpa, kpoints, t_3c_m, t_3c_o, t_3c_o_compressed, t_3c_o_ind, ri_metric, gd_b_occ_bse, gd_b_virt_bse)
with ri mp2 gpw
Routines to calculate RI-GPW-MP2 energy using pw.
subroutine, public mp2_ri_gpw_compute_en(emp2_cou, emp2_ex, emp2_s, emp2_t, bib_c, mp2_env, para_env, para_env_sub, color_sub, gd_array, gd_b_virtual, eigenval, nmo, homo, dimen_ri, unit_nr, calc_forces, calc_ex)
...
Routines to calculate gradients of RI-GPW-MP2 energy using pw.
subroutine, public calc_ri_mp2_nonsep(qs_env, mp2_env, para_env, para_env_sub, cell, particle_set, atomic_kind_set, qs_kind_set, mo_coeff, dimen_ri, eigenval, my_group_l_start, my_group_l_end, my_group_l_size, sab_orb_sub, mat_munu, blacs_env_sub)
Calculate the non-separable part of the gradients and update the Lagrangian.
Types needed for MP2 calculations.
Define methods related to particle_type.
subroutine, public get_particle_set(particle_set, qs_kind_set, first_sgf, last_sgf, nsgf, nmao, basis)
Get the components of a particle set.
Define the data structure for the particle information.
subroutine, public get_qs_env(qs_env, atomic_kind_set, qs_kind_set, cell, super_cell, cell_ref, use_ref_cell, kpoints, dft_control, mos, sab_orb, sab_all, qmmm, qmmm_periodic, sac_ae, sac_ppl, sac_lri, sap_ppnl, sab_vdw, sab_scp, sap_oce, sab_lrc, sab_se, sab_xtbe, sab_tbe, sab_core, sab_xb, sab_xtb_pp, sab_xtb_nonbond, sab_almo, sab_kp, sab_kp_nosym, sab_cneo, particle_set, energy, force, matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, run_rtp, rtp, matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_ks_im_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_ri_aux_kp, matrix_s, matrix_s_ri_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, rho, rho_xc, pw_env, ewald_env, ewald_pw, active_space, mpools, input, para_env, blacs_env, scf_control, rel_control, kinetic, qs_charges, vppl, rho_core, rho_nlcc, rho_nlcc_g, ks_env, ks_qmmm_env, wf_history, scf_env, local_particles, local_molecules, distribution_2d, dbcsr_dist, molecule_kind_set, molecule_set, subsys, cp_subsys, oce, local_rho_set, rho_atom_set, task_list, task_list_soft, rho0_atom_set, rho0_mpole, rhoz_set, rhoz_cneo_set, ecoul_1c, rho0_s_rs, rho0_s_gs, rhoz_cneo_s_rs, rhoz_cneo_s_gs, do_kpoints, has_unit_metric, requires_mo_derivs, mo_derivs, mo_loc_history, nkind, natom, nelectron_total, nelectron_spin, efield, neighbor_list_id, linres_control, xas_env, virial, cp_ddapc_env, cp_ddapc_ewald, outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, results, se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, lri_env, lri_density, exstate_env, ec_env, harris_env, dispersion_env, gcp_env, vee, rho_external, external_vxc, mask, mp2_env, bs_env, kg_env, wanniercentres, atprop, ls_scf_env, do_transport, transport_env, v_hartree_rspace, s_mstruct_changed, rho_changed, potential_changed, forces_up_to_date, mscfg_env, almo_scf_env, gradient_history, variable_history, embed_pot, spin_embed_pot, polar_env, mos_last_converged, eeq, rhs, do_rixs, tb_tblite)
Get the QUICKSTEP environment.
Some utility functions for the calculation of integrals.
subroutine, public basis_set_list_setup(basis_set_list, basis_type, qs_kind_set)
Set up an easy accessible list of the basis sets for all kinds.
Calculate the interaction radii for the operator matrix calculation.
subroutine, public init_interaction_radii(qs_control, qs_kind_set)
Initialize all the atomic kind radii for a given threshold value.
Define the quickstep kind type and their sub types.
subroutine, public get_qs_kind(qs_kind, basis_set, basis_type, ncgf, nsgf, all_potential, tnadd_potential, gth_potential, sgp_potential, upf_potential, cneo_potential, se_parameter, dftb_parameter, xtb_parameter, dftb3_param, zatom, zeff, elec_conf, mao, lmax_dftb, alpha_core_charge, ccore_charge, core_charge, core_charge_radius, paw_proj_set, paw_atom, hard_radius, hard0_radius, max_rad_local, covalent_radius, vdw_radius, gpw_type_forced, harmonics, max_iso_not0, max_s_harm, grid_atom, ngrid_ang, ngrid_rad, lmax_rho0, dft_plus_u_atom, l_of_dft_plus_u, n_of_dft_plus_u, u_minus_j, u_of_dft_plus_u, j_of_dft_plus_u, alpha_of_dft_plus_u, beta_of_dft_plus_u, j0_of_dft_plus_u, occupation_of_dft_plus_u, dispersion, bs_occupation, magnetization, no_optimize, addel, laddel, naddel, orbitals, max_scf, eps_scf, smear, u_ramping, u_minus_j_target, eps_u_ramping, init_u_ramping_each_scf, reltmat, ghost, floating, name, element_symbol, pao_basis_size, pao_model_file, pao_potentials, pao_descriptors, nelec)
Get attributes of an atomic kind.
Definition and initialisation of the mo data type.
subroutine, public get_mo_set(mo_set, maxocc, homo, lfomo, nao, nelectron, n_el_f, nmo, eigenvalues, occupation_numbers, mo_coeff, mo_coeff_b, uniform_occupation, kts, mu, flexible_electron_count)
Get the components of a MO set data structure.
Define the neighbor list data types and the corresponding functionality.
subroutine, public release_neighbor_list_sets(nlists)
releases an array of neighbor_list_sets
Generate the atomic neighbor lists.
subroutine, public atom2d_cleanup(atom2d)
free the internals of atom2d
subroutine, public pair_radius_setup(present_a, present_b, radius_a, radius_b, pair_radius, prmin)
...
subroutine, public build_neighbor_lists(ab_list, particle_set, atom, cell, pair_radius, subcells, mic, symmetric, molecular, subset_of_mol, current_subset, operator_type, nlname, atomb_to_keep)
Build simple pair neighbor lists.
subroutine, public atom2d_build(atom2d, distribution_1d, distribution_2d, atomic_kind_set, molecule_set, molecule_only, particle_set)
Build some distribution structure of atoms, refactored from build_qs_neighbor_lists.
Routines to calculate RI-RPA energy.
subroutine, public rpa_ri_compute_en(qs_env, erpa, mp2_env, bib_c, bib_c_gw, bib_c_bse_ij, bib_c_bse_ab, para_env, para_env_sub, color_sub, gd_array, gd_b_virtual, gd_b_all, gd_b_occ_bse, gd_b_virt_bse, mo_coeff, fm_matrix_pq, fm_matrix_l_kpoints, fm_matrix_minv_l_kpoints, fm_matrix_minv, fm_matrix_minv_vtrunc_minv, kpoints, eigenval, nmo, homo, dimen_ri, dimen_ri_red, gw_corr_lev_occ, gw_corr_lev_virt, bse_lev_virt, unit_nr, do_ri_sos_laplace_mp2, my_do_gw, do_im_time, do_bse, matrix_s, mat_munu, mat_p_global, t_3c_m, t_3c_o, t_3c_o_compressed, t_3c_o_ind, starts_array_mc, ends_array_mc, starts_array_mc_block, ends_array_mc_block, calc_forces)
...
Routines to compute singles correction to RPA (RSE)
subroutine, public rse_energy(qs_env, mp2_env, para_env, dft_control, mo_coeff, homo, eigenval)
Single excitations energy corrections for RPA.
Provides all information about an atomic kind.
Type defining parameters related to the simulation cell.
represent a blacs multidimensional parallel environment (for the mpi corrispective see cp_paratypes/m...
type of a logger, at the moment it contains just a print level starting at which level it should be l...
structure to store local (to a processor) ordered lists of integers.
distributes pairs on a 2d grid of processors
Contains information about kpoints.
stores all the informations relevant to an mpi environment
Provides all information about a quickstep kind.
calculation environment to calculate the ks matrix, holds all the needed vars. assumes that the core ...