36 USE dbcsr_api,
ONLY: &
37 dbcsr_clear_mempools, dbcsr_copy, dbcsr_create, dbcsr_distribution_release, &
38 dbcsr_distribution_type, dbcsr_filter, dbcsr_init_p, dbcsr_iterator_blocks_left, &
39 dbcsr_iterator_next_block, dbcsr_iterator_start, dbcsr_iterator_stop, dbcsr_iterator_type, &
40 dbcsr_p_type, dbcsr_release, dbcsr_reserve_all_blocks, dbcsr_type, dbcsr_type_no_symmetry, &
41 dbcsr_type_real_default, dbcsr_type_symmetric
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, color_sub, dimen, dimen_ri, dimen_ri_red, eri_method, handle, &
143 ispin, local_unit_nr, my_group_l_end, my_group_l_size, my_group_l_start, nmo, nspins, &
144 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
168 TYPE(dbcsr_p_type) :: mat_munu, mat_p_global
169 TYPE(dbcsr_p_type),
ALLOCATABLE,
DIMENSION(:) :: mo_coeff_all, mo_coeff_gw, mo_coeff_o, &
171 TYPE(dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_s
172 TYPE(dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_s_kp
173 TYPE(dbt_type) :: t_3c_m
174 TYPE(dbt_type),
ALLOCATABLE,
DIMENSION(:, :) :: t_3c_o
179 DIMENSION(:) :: gd_b_virtual
181 DIMENSION(:, :, :) :: t_3c_o_compressed
182 TYPE(
kpoint_type),
POINTER :: kpoints, kpoints_from_dft
186 POINTER :: sab_orb_sub
188 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
191 DIMENSION(:) :: bib_c, bib_c_gw
193 CALL timeset(routinen, handle)
196 my_do_ri_mp2 = .false.
197 IF (
PRESENT(do_ri_mp2)) my_do_ri_mp2 = do_ri_mp2
200 my_do_ri_rpa = .false.
201 IF (
PRESENT(do_ri_rpa)) my_do_ri_rpa = do_ri_rpa
204 my_do_ri_sos_laplace_mp2 = .false.
205 IF (
PRESENT(do_ri_sos_laplace_mp2)) my_do_ri_sos_laplace_mp2 = do_ri_sos_laplace_mp2
208 IF (my_do_ri_sos_laplace_mp2)
THEN
209 cpassert(.NOT. mp2_env%ri_rpa%do_ri_g0w0)
213 do_im_time = mp2_env%do_im_time
214 do_bse = qs_env%mp2_env%ri_g0w0%do_bse
215 do_kpoints_cubic_rpa = qs_env%mp2_env%ri_rpa_im_time%do_im_time_kpoints
217 IF (do_kpoints_cubic_rpa .AND. mp2_env%ri_rpa%do_ri_g0w0)
THEN
218 cpabort(
"Full RPA k-points (DO_KPOINTS in LOW_SCALING section) not implemented with GW")
222 nspins =
SIZE(mos_mp2)
225 IF (do_kpoints_cubic_rpa)
THEN
226 CALL get_qs_env(qs_env=qs_env, dft_control=dft_control, kpoints=kpoints_from_dft)
227 mos(1:nspins) => kpoints_from_dft%kp_env(1)%kpoint_env%mos(1:nspins, 1)
229 CALL get_qs_env(qs_env=qs_env, dft_control=dft_control, mos=mos)
232 ALLOCATE (homo(nspins), eigenval(dimen, nspins), mo_coeff(nspins))
235 eigenvalues=mo_eigenvalues, nmo=nmo, homo=homo(ispin), &
236 mo_coeff=mo_coeff_ptr)
237 mo_coeff(ispin) = mo_coeff_ptr
238 eigenval(:, ispin) = mo_eigenvalues(:)
242 color_sub = para_env%mepos/mp2_env%mp2_num_proc
243 ALLOCATE (para_env_sub)
244 CALL para_env_sub%from_split(para_env, color_sub)
248 IF (para_env%is_source())
THEN
257 qs_kind_set=qs_kind_set, &
259 particle_set=particle_set, &
260 atomic_kind_set=atomic_kind_set, &
261 dft_control=dft_control, &
262 matrix_s_kp=matrix_s_kp)
264 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
304 IF (.NOT. mp2_env%ri_g0w0%print_local_bandgap)
THEN
308 default_global_unit_nr=local_unit_nr, close_global_unit_on_dealloc=.false.)
309 CALL cp_logger_set(logger_sub, local_filename=
"MP2_localLog")
311 logger_sub%iter_info%print_level = mp2_env%mp2_gpw%print_level
317 blacs_repeatable = .true.
318 NULLIFY (blacs_env_sub)
323 blacs_env_sub_mat_munu => blacs_env_sub
325 matrix_s(1:1) => matrix_s_kp(1:1, 1)
327 CALL get_eps_old(dft_control, eps_pgf_orb_old, eps_rho_rspace_old, eps_gvg_rspace_old)
330 blacs_env_sub_mat_munu, do_alloc_blocks_from_nbl=.NOT. do_im_time, sab_orb_sub=sab_orb_sub, &
331 do_kpoints=mp2_env%ri_rpa_im_time%do_im_time_kpoints, &
332 dbcsr_sym_type=dbcsr_type_symmetric)
335 ri_metric_type = mp2_env%ri_metric%potential_type
338 potential_type = mp2_env%potential_parameter%potential_type
341 my_do_gw = mp2_env%ri_rpa%do_ri_g0w0
342 ALLOCATE (gw_corr_lev_occ(nspins), gw_corr_lev_virt(nspins))
343 gw_corr_lev_occ(1) = mp2_env%ri_g0w0%corr_mos_occ
344 gw_corr_lev_virt(1) = mp2_env%ri_g0w0%corr_mos_virt
345 IF (nspins == 2)
THEN
346 gw_corr_lev_occ(2) = mp2_env%ri_g0w0%corr_mos_occ_beta
347 gw_corr_lev_virt(2) = mp2_env%ri_g0w0%corr_mos_virt_beta
351 ALLOCATE (mo_coeff_o(nspins), mo_coeff_v(nspins), mo_coeff_all(nspins), mo_coeff_gw(nspins))
354 IF (.NOT. do_im_time)
THEN
361 CALL replicate_mat_to_subgroup(para_env, para_env_sub, mo_coeff(ispin), dimen, homo(ispin), mat_munu%matrix, &
362 mo_coeff_o(ispin)%matrix, mo_coeff_v(ispin)%matrix, &
363 mo_coeff_all(ispin)%matrix, mo_coeff_gw(ispin)%matrix, &
364 my_do_gw, gw_corr_lev_occ(ispin), gw_corr_lev_virt(ispin), mp2_env%mp2_gpw%eps_filter)
372 IF (my_do_ri_mp2 .OR. my_do_ri_rpa .OR. my_do_ri_sos_laplace_mp2)
THEN
374 IF (nspins == 2)
THEN
377 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, &
378 para_env, para_env_sub, color_sub, cell, particle_set, &
379 atomic_kind_set, qs_kind_set, mo_coeff, fm_matrix_pq, fm_matrix_l_kpoints, fm_matrix_minv_l_kpoints, &
380 fm_matrix_minv, fm_matrix_minv_vtrunc_minv, nmo, homo, mat_munu, sab_orb_sub, &
381 mo_coeff_o, mo_coeff_v, mo_coeff_all, mo_coeff_gw, &
382 mp2_env%mp2_gpw%eps_filter, unit_nr, &
383 mp2_env%mp2_memory, mp2_env%calc_PQ_cond_num, calc_forces, blacs_env_sub, my_do_gw .AND. .NOT. do_im_time, &
384 do_bse, gd_b_all, starts_array_mc, ends_array_mc, starts_array_mc_block, ends_array_mc_block, &
385 gw_corr_lev_occ(1), gw_corr_lev_virt(1), &
386 do_im_time, do_kpoints_cubic_rpa, kpoints, &
387 t_3c_m, t_3c_o, t_3c_o_compressed, t_3c_o_ind, &
389 gd_b_occ_bse, gd_b_virt_bse)
393 dimen_ri, dimen_ri_red, qs_env, para_env, para_env_sub, &
394 color_sub, cell, particle_set, &
395 atomic_kind_set, qs_kind_set, mo_coeff, fm_matrix_pq, &
396 fm_matrix_l_kpoints, fm_matrix_minv_l_kpoints, &
397 fm_matrix_minv, fm_matrix_minv_vtrunc_minv, nmo, homo, &
398 mat_munu, sab_orb_sub, &
399 mo_coeff_o, mo_coeff_v, mo_coeff_all, mo_coeff_gw, &
400 mp2_env%mp2_gpw%eps_filter, unit_nr, &
401 mp2_env%mp2_memory, mp2_env%calc_PQ_cond_num, calc_forces, &
402 blacs_env_sub, my_do_gw .AND. .NOT. do_im_time, do_bse, gd_b_all, &
403 starts_array_mc, ends_array_mc, &
404 starts_array_mc_block, ends_array_mc_block, &
405 gw_corr_lev_occ(1), gw_corr_lev_virt(1), &
406 do_im_time, do_kpoints_cubic_rpa, kpoints, &
407 t_3c_m, t_3c_o, t_3c_o_compressed, t_3c_o_ind, &
408 mp2_env%ri_metric, gd_b_occ_bse, gd_b_virt_bse)
413 IF (nspins == 2)
THEN
415 IF (unit_nr > 0)
WRITE (unit_nr, *)
416 IF (unit_nr > 0)
WRITE (unit_nr,
'(T3,A)')
'Alpha (ia|'
418 emp2, emp2_cou, emp2_ex, qs_env, para_env, para_env_sub, color_sub, &
419 cell, particle_set, &
420 atomic_kind_set, qs_kind_set, mo_coeff(1), eigenval, nmo, homo, mat_munu, &
421 sab_orb_sub, mo_coeff_o, mo_coeff_v, mp2_env%mp2_gpw%eps_filter, unit_nr, &
422 mp2_env%mp2_memory, calc_ex, blacs_env_sub, emp2_ab)
425 IF (unit_nr > 0)
WRITE (unit_nr, *)
426 IF (unit_nr > 0)
WRITE (unit_nr,
'(T3,A)')
'Beta (ia|'
428 emp2_bb, emp2_cou_bb, emp2_ex_bb, qs_env, para_env, para_env_sub, color_sub, cell, particle_set, &
429 atomic_kind_set, qs_kind_set, mo_coeff(2), eigenval(:, 2:2), nmo, homo(2:2), mat_munu, &
430 sab_orb_sub, mo_coeff_o(2:2), mo_coeff_v(2:2), mp2_env%mp2_gpw%eps_filter, unit_nr, &
431 mp2_env%mp2_memory, calc_ex, blacs_env_sub)
434 emp2_cou = emp2_cou*0.25_dp
435 emp2_ex = emp2_ex*0.5_dp
437 emp2_cou_bb = emp2_cou_bb*0.25_dp
438 emp2_ex_bb = emp2_ex_bb*0.5_dp
441 emp2_t = emp2_cou + emp2_cou_bb + emp2_ex + emp2_ex_bb
443 emp2_cou = emp2_cou + emp2_cou_bb + emp2_ab
444 emp2_ex = emp2_ex + emp2_ex_bb
445 emp2 = emp2_ex + emp2_cou
450 emp2, emp2_cou, emp2_ex, qs_env, para_env, para_env_sub, color_sub, cell, particle_set, &
451 atomic_kind_set, qs_kind_set, mo_coeff(1), eigenval(:, 1:1), nmo, homo(1:1), mat_munu, &
452 sab_orb_sub, mo_coeff_o(1:1), mo_coeff_v(1:1), mp2_env%mp2_gpw%eps_filter, unit_nr, &
453 mp2_env%mp2_memory, calc_ex, blacs_env_sub)
459 CALL dbcsr_clear_mempools()
461 IF (calc_forces .AND. .NOT. do_im_time)
THEN
463 ALLOCATE (mp2_env%ri_grad%mo_coeff_o(nspins), mp2_env%ri_grad%mo_coeff_v(nspins))
465 NULLIFY (mp2_env%ri_grad%mo_coeff_o(ispin)%matrix)
466 CALL dbcsr_init_p(mp2_env%ri_grad%mo_coeff_o(ispin)%matrix)
467 CALL dbcsr_copy(mp2_env%ri_grad%mo_coeff_o(ispin)%matrix, mo_coeff_o(ispin)%matrix, &
469 NULLIFY (mp2_env%ri_grad%mo_coeff_v(ispin)%matrix)
470 CALL dbcsr_init_p(mp2_env%ri_grad%mo_coeff_v(ispin)%matrix)
471 CALL dbcsr_copy(mp2_env%ri_grad%mo_coeff_v(ispin)%matrix, mo_coeff_v(ispin)%matrix, &
474 CALL get_group_dist(gd_array, color_sub, my_group_l_start, my_group_l_end, my_group_l_size)
477 IF (mp2_env%ri_rpa%do_ri_axk)
THEN
478 NULLIFY (mp2_env%ri_rpa%mo_coeff_o)
479 CALL dbcsr_init_p(mp2_env%ri_rpa%mo_coeff_o)
480 CALL dbcsr_copy(mp2_env%ri_rpa%mo_coeff_o, mo_coeff_o(1)%matrix, name=
"mo_coeff_o")
481 NULLIFY (mp2_env%ri_rpa%mo_coeff_v)
482 CALL dbcsr_init_p(mp2_env%ri_rpa%mo_coeff_v)
483 CALL dbcsr_copy(mp2_env%ri_rpa%mo_coeff_v, mo_coeff_v(1)%matrix, name=
"mo_coeff_v")
486 IF (.NOT. do_im_time)
THEN
489 CALL dbcsr_release(mo_coeff_o(ispin)%matrix)
490 DEALLOCATE (mo_coeff_o(ispin)%matrix)
491 CALL dbcsr_release(mo_coeff_v(ispin)%matrix)
492 DEALLOCATE (mo_coeff_v(ispin)%matrix)
494 CALL dbcsr_release(mo_coeff_all(ispin)%matrix)
495 DEALLOCATE (mo_coeff_all(ispin)%matrix)
498 DEALLOCATE (mo_coeff_o, mo_coeff_v)
499 IF (my_do_gw)
DEALLOCATE (mo_coeff_all)
503 IF (.NOT. calc_forces)
THEN
504 IF (.NOT. mp2_env%ri_rpa%do_ri_axk)
THEN
506 CALL dbcsr_release(mat_munu%matrix)
507 DEALLOCATE (mat_munu%matrix)
516 IF (my_do_ri_rpa .OR. my_do_ri_sos_laplace_mp2)
THEN
520 CALL create_matrix_p(mat_p_global, qs_env, mp2_env, para_env)
523 ALLOCATE (bib_c(nspins))
526 IF (.NOT.
ALLOCATED(bib_c))
ALLOCATE (bib_c(nspins))
527 IF (.NOT.
ALLOCATED(bib_c_gw))
ALLOCATE (bib_c_gw(nspins))
528 IF (.NOT.
ALLOCATED(gd_b_virtual))
ALLOCATE (gd_b_virtual(nspins))
531 CALL rpa_ri_compute_en(qs_env, emp2, mp2_env, bib_c, bib_c_gw, bib_c_bse_ij, bib_c_bse_ab, &
532 para_env, para_env_sub, color_sub, &
533 gd_array, gd_b_virtual, gd_b_all, gd_b_occ_bse, gd_b_virt_bse, &
534 mo_coeff, fm_matrix_pq, fm_matrix_l_kpoints, fm_matrix_minv_l_kpoints, &
535 fm_matrix_minv, fm_matrix_minv_vtrunc_minv, kpoints, &
536 eigenval, nmo, homo, dimen_ri, dimen_ri_red, gw_corr_lev_occ, gw_corr_lev_virt, &
537 unit_nr, my_do_ri_sos_laplace_mp2, my_do_gw, do_im_time, do_bse, matrix_s, &
538 mat_munu, mat_p_global, &
539 t_3c_m, t_3c_o, t_3c_o_compressed, t_3c_o_ind, &
540 starts_array_mc, ends_array_mc, &
541 starts_array_mc_block, ends_array_mc_block, calc_forces)
543 IF (mp2_env%ri_rpa%do_rse) &
544 CALL rse_energy(qs_env, mp2_env, para_env, dft_control, mo_coeff, nmo, homo, eigenval)
547 IF (
ASSOCIATED(mat_p_global%matrix))
THEN
548 CALL dbcsr_release(mat_p_global%matrix)
549 DEALLOCATE (mat_p_global%matrix)
557 IF (mp2_env%ri_rpa%do_ri_axk .OR. (calc_forces .AND. do_im_time))
THEN
559 CALL dbcsr_release(mat_munu%matrix)
560 DEALLOCATE (mat_munu%matrix)
567 IF (my_do_ri_mp2)
THEN
574 emp2_cou, emp2_ex, emp2_s, emp2_t, bib_c, mp2_env, para_env, para_env_sub, color_sub, &
575 gd_array, gd_b_virtual, &
576 eigenval, nmo, homo, dimen_ri_red, unit_nr, calc_forces, calc_ex)
583 IF (calc_forces .AND. .NOT. do_im_time)
THEN
586 particle_set, atomic_kind_set, qs_kind_set, &
587 mo_coeff, nmo, homo, dimen_ri, eigenval, &
588 my_group_l_start, my_group_l_end, my_group_l_size, &
589 sab_orb_sub, mat_munu, blacs_env_sub)
592 CALL dbcsr_release(mp2_env%ri_grad%mo_coeff_o(ispin)%matrix)
593 DEALLOCATE (mp2_env%ri_grad%mo_coeff_o(ispin)%matrix)
595 CALL dbcsr_release(mp2_env%ri_grad%mo_coeff_v(ispin)%matrix)
596 DEALLOCATE (mp2_env%ri_grad%mo_coeff_v(ispin)%matrix)
598 DEALLOCATE (mp2_env%ri_grad%mo_coeff_o, mp2_env%ri_grad%mo_coeff_v)
600 CALL dbcsr_release(mat_munu%matrix)
601 DEALLOCATE (mat_munu%matrix)
609 IF (my_do_gw .AND. .NOT. do_im_time)
THEN
611 CALL dbcsr_release(mo_coeff_gw(ispin)%matrix)
612 DEALLOCATE (mo_coeff_gw(ispin)%matrix)
614 DEALLOCATE (mo_coeff_gw)
618 dft_control%qs_control%eps_pgf_orb = eps_pgf_orb_old
619 dft_control%qs_control%eps_rho_rspace = eps_rho_rspace_old
620 dft_control%qs_control%eps_gvg_rspace = eps_gvg_rspace_old
625 IF (.NOT. mp2_env%ri_g0w0%print_local_bandgap)
THEN
633 IF (calc_forces .AND. .NOT. do_im_time)
THEN
635 mo_coeff, nmo, homo, eigenval, unit_nr)
638 DEALLOCATE (eigenval, mo_coeff)
640 CALL timestop(handle)
661 SUBROUTINE replicate_mat_to_subgroup(para_env, para_env_sub, mo_coeff, dimen, homo, mat_munu, &
662 mo_coeff_o, mo_coeff_v, mo_coeff_all, mo_coeff_gw, my_do_gw, &
663 gw_corr_lev_occ, gw_corr_lev_virt, eps_filter)
666 INTEGER,
INTENT(IN) :: dimen, homo
667 TYPE(dbcsr_type),
INTENT(INOUT) :: mat_munu
668 TYPE(dbcsr_type),
POINTER :: mo_coeff_o, mo_coeff_v, mo_coeff_all, &
670 LOGICAL,
INTENT(IN) :: my_do_gw
671 INTEGER,
INTENT(IN) :: gw_corr_lev_occ, gw_corr_lev_virt
672 REAL(kind=
dp),
INTENT(IN) :: eps_filter
674 CHARACTER(LEN=*),
PARAMETER :: routinen =
'replicate_mat_to_subgroup'
677 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: c
680 CALL timeset(routinen, handle)
685 ALLOCATE (mo_coeff_o)
687 mat_munu, gd_array, eps_filter)
689 ALLOCATE (mo_coeff_v)
691 mat_munu, gd_array, eps_filter)
694 ALLOCATE (mo_coeff_gw)
695 CALL build_dbcsr_from_rows(para_env_sub, mo_coeff_gw, c(:, homo - gw_corr_lev_occ + 1:homo + gw_corr_lev_virt), &
696 mat_munu, gd_array, eps_filter)
699 ALLOCATE (mo_coeff_all)
701 mat_munu, gd_array, eps_filter)
708 CALL timestop(handle)
710 END SUBROUTINE replicate_mat_to_subgroup
724 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :), &
727 CHARACTER(LEN=*),
PARAMETER :: routinen =
'grep_rows_in_subgroups'
729 INTEGER :: handle, i_global, iib, j_global, jjb, max_row_col_local, my_mu_end, my_mu_size, &
730 my_mu_start, ncol_global, ncol_local, ncol_rec, nrow_global, nrow_local, nrow_rec, &
731 proc_receive_static, proc_send_static, proc_shift
732 INTEGER,
ALLOCATABLE,
DIMENSION(:, :) :: local_col_row_info, rec_col_row_info
733 INTEGER,
DIMENSION(:),
POINTER :: col_indices, col_indices_rec, &
734 row_indices, row_indices_rec
735 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: local_c, rec_c
736 REAL(kind=
dp),
CONTIGUOUS,
DIMENSION(:, :), &
737 POINTER :: local_c_internal
739 CALL timeset(routinen, handle)
742 ncol_global=ncol_global, &
743 nrow_global=nrow_global, &
744 nrow_local=nrow_local, &
745 ncol_local=ncol_local, &
746 row_indices=row_indices, &
747 col_indices=col_indices, &
748 local_data=local_c_internal)
751 CALL get_group_dist(gd_array, para_env_sub%mepos, my_mu_start, my_mu_end, my_mu_size)
754 ALLOCATE (c(my_mu_size, ncol_global))
757 ALLOCATE (local_c(nrow_local, ncol_local))
758 local_c(:, :) = local_c_internal(1:nrow_local, 1:ncol_local)
759 NULLIFY (local_c_internal)
761 max_row_col_local = max(nrow_local, ncol_local)
762 CALL para_env%max(max_row_col_local)
764 ALLOCATE (local_col_row_info(0:max_row_col_local, 2))
765 local_col_row_info = 0
767 local_col_row_info(0, 1) = nrow_local
768 local_col_row_info(1:nrow_local, 1) = row_indices(1:nrow_local)
770 local_col_row_info(0, 2) = ncol_local
771 local_col_row_info(1:ncol_local, 2) = col_indices(1:ncol_local)
773 ALLOCATE (rec_col_row_info(0:max_row_col_local, 2))
776 DO iib = 1, nrow_local
777 i_global = row_indices(iib)
778 IF (i_global >= my_mu_start .AND. i_global <= my_mu_end)
THEN
779 DO jjb = 1, ncol_local
780 j_global = col_indices(jjb)
781 c(i_global - my_mu_start + 1, j_global) = local_c(iib, jjb)
787 proc_send_static =
modulo(para_env%mepos + 1, para_env%num_pe)
788 proc_receive_static =
modulo(para_env%mepos - 1, para_env%num_pe)
789 DO proc_shift = 1, para_env%num_pe - 1
792 CALL para_env%sendrecv(local_col_row_info, proc_send_static, rec_col_row_info, proc_receive_static)
793 nrow_rec = rec_col_row_info(0, 1)
794 ncol_rec = rec_col_row_info(0, 2)
796 ALLOCATE (row_indices_rec(nrow_rec))
797 row_indices_rec = rec_col_row_info(1:nrow_rec, 1)
799 ALLOCATE (col_indices_rec(ncol_rec))
800 col_indices_rec = rec_col_row_info(1:ncol_rec, 2)
802 ALLOCATE (rec_c(nrow_rec, ncol_rec))
806 CALL para_env%sendrecv(local_c, proc_send_static, rec_c, proc_receive_static)
810 i_global = row_indices_rec(iib)
811 IF (i_global >= my_mu_start .AND. i_global <= my_mu_end)
THEN
813 j_global = col_indices_rec(jjb)
814 c(i_global - my_mu_start + 1, j_global) = rec_c(iib, jjb)
819 local_col_row_info(:, :) = rec_col_row_info
821 ALLOCATE (local_c(nrow_rec, ncol_rec))
822 local_c(:, :) = rec_c
824 DEALLOCATE (col_indices_rec)
825 DEALLOCATE (row_indices_rec)
830 DEALLOCATE (local_col_row_info)
831 DEALLOCATE (rec_col_row_info)
833 CALL timestop(handle)
848 mat_munu, gd_array, eps_filter)
850 TYPE(dbcsr_type) :: mo_coeff_to_build
851 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(IN) :: cread
852 TYPE(dbcsr_type),
INTENT(INOUT) :: mat_munu
854 REAL(kind=
dp),
INTENT(IN) :: eps_filter
856 CHARACTER(LEN=*),
PARAMETER :: routinen =
'build_dbcsr_from_rows'
858 INTEGER :: blk, col, col_offset, col_size, handle, i, i_global, j, j_global, my_mu_end, &
859 my_mu_start, ncol_global, proc_receive, proc_send, proc_shift, rec_mu_end, rec_mu_size, &
860 rec_mu_start, row, row_offset, row_size
861 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: rec_c
862 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: data_block
863 TYPE(dbcsr_iterator_type) :: iter
865 CALL timeset(routinen, handle)
867 ncol_global =
SIZE(cread, 2)
869 CALL get_group_dist(gd_array, para_env_sub%mepos, my_mu_start, my_mu_end)
872 sym=dbcsr_type_no_symmetry, data_type=dbcsr_type_real_default)
873 CALL dbcsr_reserve_all_blocks(mo_coeff_to_build)
876 CALL dbcsr_iterator_start(iter, mo_coeff_to_build)
877 DO WHILE (dbcsr_iterator_blocks_left(iter))
878 CALL dbcsr_iterator_next_block(iter, row, col, data_block, blk, &
879 row_size=row_size, col_size=col_size, &
880 row_offset=row_offset, col_offset=col_offset)
882 i_global = row_offset + i - 1
883 IF (i_global >= my_mu_start .AND. i_global <= my_mu_end)
THEN
885 j_global = col_offset + j - 1
886 data_block(i, j) = cread(i_global - my_mu_start + 1, col_offset + j - 1)
891 CALL dbcsr_iterator_stop(iter)
895 DO proc_shift = 1, para_env_sub%num_pe - 1
896 proc_send =
modulo(para_env_sub%mepos + proc_shift, para_env_sub%num_pe)
897 proc_receive =
modulo(para_env_sub%mepos - proc_shift, para_env_sub%num_pe)
899 CALL get_group_dist(gd_array, proc_receive, rec_mu_start, rec_mu_end, rec_mu_size)
901 ALLOCATE (rec_c(rec_mu_size, ncol_global))
905 CALL para_env_sub%sendrecv(cread, proc_send, rec_c, proc_receive)
908 CALL dbcsr_iterator_start(iter, mo_coeff_to_build)
909 DO WHILE (dbcsr_iterator_blocks_left(iter))
910 CALL dbcsr_iterator_next_block(iter, row, col, data_block, blk, &
911 row_size=row_size, col_size=col_size, &
912 row_offset=row_offset, col_offset=col_offset)
914 i_global = row_offset + i - 1
915 IF (i_global >= rec_mu_start .AND. i_global <= rec_mu_end)
THEN
917 j_global = col_offset + j - 1
918 data_block(i, j) = rec_c(i_global - rec_mu_start + 1, col_offset + j - 1)
923 CALL dbcsr_iterator_stop(iter)
928 CALL dbcsr_filter(mo_coeff_to_build, eps_filter)
930 CALL timestop(handle)
950 do_ri_aux_basis, do_mixed_basis, group_size_prim, &
951 do_alloc_blocks_from_nbl, do_kpoints, sab_orb_sub, dbcsr_sym_type)
953 TYPE(dbcsr_p_type),
INTENT(OUT) :: mat_munu
955 REAL(kind=
dp) :: eps_grid
957 LOGICAL,
INTENT(IN),
OPTIONAL :: do_ri_aux_basis, do_mixed_basis
958 INTEGER,
INTENT(IN),
OPTIONAL :: group_size_prim
959 LOGICAL,
INTENT(IN),
OPTIONAL :: do_alloc_blocks_from_nbl, do_kpoints
961 OPTIONAL,
POINTER :: sab_orb_sub
962 CHARACTER,
OPTIONAL :: dbcsr_sym_type
964 CHARACTER(LEN=*),
PARAMETER :: routinen =
'create_mat_munu'
966 CHARACTER :: my_dbcsr_sym_type
967 INTEGER :: handle, ikind, natom, nkind
968 INTEGER,
DIMENSION(:),
POINTER :: col_blk_sizes, row_blk_sizes
969 LOGICAL :: my_do_alloc_blocks_from_nbl, &
970 my_do_kpoints, my_do_mixed_basis, &
972 LOGICAL,
ALLOCATABLE,
DIMENSION(:) :: orb_present
973 REAL(
dp),
ALLOCATABLE,
DIMENSION(:) :: orb_radius
974 REAL(
dp),
ALLOCATABLE,
DIMENSION(:, :) :: pair_radius
975 REAL(kind=
dp) :: subcells
978 TYPE(dbcsr_distribution_type),
POINTER :: dbcsr_dist_sub
988 POINTER :: my_sab_orb_sub
990 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
992 CALL timeset(routinen, handle)
994 NULLIFY (basis_set_ri_aux)
996 my_do_ri_aux_basis = .false.
997 IF (
PRESENT(do_ri_aux_basis))
THEN
998 my_do_ri_aux_basis = do_ri_aux_basis
1001 my_do_mixed_basis = .false.
1002 IF (
PRESENT(do_mixed_basis))
THEN
1003 my_do_mixed_basis = do_mixed_basis
1006 my_do_alloc_blocks_from_nbl = .false.
1007 IF (
PRESENT(do_alloc_blocks_from_nbl))
THEN
1008 my_do_alloc_blocks_from_nbl = do_alloc_blocks_from_nbl
1011 my_do_kpoints = .false.
1012 IF (
PRESENT(do_kpoints))
THEN
1013 my_do_kpoints = do_kpoints
1016 my_dbcsr_sym_type = dbcsr_type_no_symmetry
1017 IF (
PRESENT(dbcsr_sym_type))
THEN
1018 my_dbcsr_sym_type = dbcsr_sym_type
1022 qs_kind_set=qs_kind_set, &
1024 particle_set=particle_set, &
1025 atomic_kind_set=atomic_kind_set, &
1026 molecule_set=molecule_set, &
1027 molecule_kind_set=molecule_kind_set, &
1028 dft_control=dft_control)
1030 IF (my_do_kpoints)
THEN
1032 IF (eps_grid < dft_control%qs_control%eps_pgf_orb)
THEN
1033 eps_grid = dft_control%qs_control%eps_pgf_orb
1034 cpwarn(
"WFC_GPW%EPS_GRID has been set to QS%EPS_PGF_ORB")
1039 dft_control%qs_control%eps_pgf_orb = eps_grid
1040 dft_control%qs_control%eps_rho_rspace = eps_grid
1041 dft_control%qs_control%eps_gvg_rspace = eps_grid
1045 NULLIFY (local_particles_sub, local_molecules_sub)
1047 particle_set=particle_set, &
1048 local_particles=local_particles_sub, &
1049 molecule_kind_set=molecule_kind_set, &
1050 molecule_set=molecule_set, &
1051 local_molecules=local_molecules_sub, &
1052 force_env_section=qs_env%input)
1055 NULLIFY (distribution_2d_sub)
1057 atomic_kind_set=atomic_kind_set, &
1058 qs_kind_set=qs_kind_set, &
1059 particle_set=particle_set, &
1060 molecule_kind_set=molecule_kind_set, &
1061 molecule_set=molecule_set, &
1062 distribution_2d=distribution_2d_sub, &
1063 blacs_env=blacs_env_sub, &
1064 force_env_section=qs_env%input)
1068 nkind =
SIZE(atomic_kind_set)
1069 ALLOCATE (atom2d(nkind))
1071 CALL atom2d_build(atom2d, local_particles_sub, distribution_2d_sub, atomic_kind_set, &
1072 molecule_set, molecule_only=.false., particle_set=particle_set)
1074 ALLOCATE (orb_present(nkind))
1075 ALLOCATE (orb_radius(nkind))
1076 ALLOCATE (pair_radius(nkind, nkind))
1079 CALL get_qs_kind(qs_kind_set(ikind), basis_set=orb_basis_set)
1080 IF (
ASSOCIATED(orb_basis_set))
THEN
1081 orb_present(ikind) = .true.
1082 CALL get_gto_basis_set(gto_basis_set=orb_basis_set, kind_radius=orb_radius(ikind))
1084 orb_present(ikind) = .false.
1085 orb_radius(ikind) = 0.0_dp
1089 CALL pair_radius_setup(orb_present, orb_present, orb_radius, orb_radius, pair_radius)
1091 IF (
PRESENT(sab_orb_sub))
THEN
1092 NULLIFY (sab_orb_sub)
1094 IF (my_do_kpoints)
THEN
1096 mic=.false., subcells=subcells, molecular=.false., nlname=
"sab_orb_sub", &
1100 mic=.false., subcells=subcells, molecular=.false., nlname=
"sab_orb_sub")
1103 NULLIFY (my_sab_orb_sub)
1105 IF (my_do_kpoints)
THEN
1107 mic=.false., subcells=subcells, molecular=.false., nlname=
"sab_orb_sub", &
1111 mic=.false., subcells=subcells, molecular=.false., nlname=
"sab_orb_sub")
1116 DEALLOCATE (orb_present, orb_radius, pair_radius)
1119 ALLOCATE (dbcsr_dist_sub)
1123 natom =
SIZE(particle_set)
1124 ALLOCATE (row_blk_sizes(natom))
1125 IF (my_do_ri_aux_basis)
THEN
1127 ALLOCATE (basis_set_ri_aux(nkind))
1129 CALL get_particle_set(particle_set, qs_kind_set, nsgf=row_blk_sizes, basis=basis_set_ri_aux)
1130 DEALLOCATE (basis_set_ri_aux)
1132 ELSE IF (my_do_mixed_basis)
THEN
1134 ALLOCATE (basis_set_ri_aux(nkind))
1136 CALL get_particle_set(particle_set, qs_kind_set, nsgf=row_blk_sizes, basis=basis_set_ri_aux)
1137 DEALLOCATE (basis_set_ri_aux)
1139 ALLOCATE (col_blk_sizes(natom))
1142 col_blk_sizes = col_blk_sizes*group_size_prim
1148 NULLIFY (mat_munu%matrix)
1149 ALLOCATE (mat_munu%matrix)
1151 IF (my_do_ri_aux_basis)
THEN
1153 CALL dbcsr_create(matrix=mat_munu%matrix, &
1155 dist=dbcsr_dist_sub, matrix_type=my_dbcsr_sym_type, &
1156 row_blk_size=row_blk_sizes, col_blk_size=row_blk_sizes, &
1159 ELSE IF (my_do_mixed_basis)
THEN
1161 CALL dbcsr_create(matrix=mat_munu%matrix, &
1163 dist=dbcsr_dist_sub, matrix_type=my_dbcsr_sym_type, &
1164 row_blk_size=row_blk_sizes, col_blk_size=col_blk_sizes, &
1169 CALL dbcsr_create(matrix=mat_munu%matrix, &
1171 dist=dbcsr_dist_sub, matrix_type=my_dbcsr_sym_type, &
1172 row_blk_size=row_blk_sizes, col_blk_size=row_blk_sizes, &
1175 IF (my_do_alloc_blocks_from_nbl)
THEN
1177 IF (
PRESENT(sab_orb_sub))
THEN
1187 DEALLOCATE (row_blk_sizes)
1189 IF (my_do_mixed_basis)
THEN
1190 DEALLOCATE (col_blk_sizes)
1193 CALL dbcsr_distribution_release(dbcsr_dist_sub)
1194 DEALLOCATE (dbcsr_dist_sub)
1201 IF (.NOT.
PRESENT(sab_orb_sub))
THEN
1205 CALL timestop(handle)
1216 SUBROUTINE create_matrix_p(mat_P_global, qs_env, mp2_env, para_env)
1218 TYPE(dbcsr_p_type),
INTENT(OUT) :: mat_p_global
1223 CHARACTER(LEN=*),
PARAMETER :: routinen =
'create_matrix_P'
1225 INTEGER :: blacs_grid_layout, handle
1226 LOGICAL :: blacs_repeatable
1229 CALL timeset(routinen, handle)
1232 blacs_repeatable = .true.
1233 NULLIFY (blacs_env_global)
1235 blacs_grid_layout, &
1238 CALL create_mat_munu(mat_p_global, qs_env, mp2_env%mp2_gpw%eps_grid, &
1239 blacs_env_global, do_ri_aux_basis=.true., &
1240 do_kpoints=mp2_env%ri_rpa_im_time%do_im_time_kpoints)
1242 CALL dbcsr_reserve_all_blocks(mat_p_global%matrix)
1245 CALL timestop(handle)
1256 PURE SUBROUTINE get_eps_old(dft_control, eps_pgf_orb_old, eps_rho_rspace_old, eps_gvg_rspace_old)
1259 REAL(kind=
dp),
INTENT(OUT) :: eps_pgf_orb_old, eps_rho_rspace_old, &
1263 eps_pgf_orb_old = dft_control%qs_control%eps_pgf_orb
1264 eps_rho_rspace_old = dft_control%qs_control%eps_rho_rspace
1265 eps_gvg_rspace_old = dft_control%qs_control%eps_gvg_rspace
1267 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)
...
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...
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, data_type)
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, nmo, 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, mo_coeff, 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, mo_coeff, 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, 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, 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, nmo, homo, 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_nonbond, sab_almo, sab_kp, sab_kp_nosym, 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, ecoul_1c, rho0_s_rs, rho0_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, 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, rhs)
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, se_parameter, dftb_parameter, xtb_parameter, dftb3_param, 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_r3d_rs_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_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, 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, nmo, 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 ...