Skip to content

Commit

Permalink
add mp_sync before and after local data operations
Browse files Browse the repository at this point in the history
  • Loading branch information
JWilhelm authored and fstein93 committed Jun 29, 2020
1 parent 05a1670 commit d9a0891
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 4 deletions.
20 changes: 18 additions & 2 deletions src/rpa_gw.F
Original file line number Diff line number Diff line change
Expand Up @@ -567,6 +567,8 @@ SUBROUTINE get_vec_sigma_x(vec_Sigma_x_gw, nmo, fm_mat_S_gw, para_env, num_integ

END DO

CALL mp_sync(para_env%group)

CALL mp_sum(vec_Sigma_x_gw, para_env%group)

vec_Sigma_x_minus_vxc_gw11(:) = &
Expand Down Expand Up @@ -950,6 +952,8 @@ SUBROUTINE GW_matrix_operations(vec_Sigma_c_gw, dimen_nm_gw, dimen_RI, gw_corr_l
mp2_env%ri_g0w0%do_aux_bas_gw, mp2_env%ri_g0w0%frac_aux_mos)
END IF
CALL mp_sync(para_env%group)
! subtract 1 from the diagonal to get rid of exchange self-energy
!$OMP PARALLEL DO DEFAULT(NONE) PRIVATE(jjB,iiB,i_global,j_global) &
!$OMP SHARED(ncol_local,nrow_local,col_indices,row_indices,fm_mat_Q,dimen_RI)
Expand All @@ -963,6 +967,8 @@ SUBROUTINE GW_matrix_operations(vec_Sigma_c_gw, dimen_nm_gw, dimen_RI, gw_corr_l
END DO
END DO
CALL mp_sync(para_env%group)
CALL compute_self_energy_gw(vec_Sigma_c_gw, dimen_nm_gw, dimen_RI, gw_corr_lev_occ, homo, jquad, nmo, num_fit_points, &
do_periodic, fermi_level_offset, omega, Eigenval, delta_corr, vec_omega_fit_gw, vec_W_gw, &
wj, fm_mat_Q, fm_mat_S_gw, fm_mat_S_gw_work)
Expand Down Expand Up @@ -2121,6 +2127,8 @@ SUBROUTINE get_berry_phase(qs_env, kpoints, matrix_berry_re_mo_mo, matrix_berry_
ncol_local=ncol_local, &
col_indices=col_indices)
CALL mp_sync(para_env%group)
! multiply eigenvectors with inverse sqrt of eigenvalues
DO i_col_local = 1, ncol_local
Expand All @@ -2131,6 +2139,8 @@ SUBROUTINE get_berry_phase(qs_env, kpoints, matrix_berry_re_mo_mo, matrix_berry_
END DO
CALL mp_sync(para_env%group)
CALL cp_gemm(transa="N", transb="T", m=nmo, n=nmo, k=nmo, alpha=1.0_dp, &
matrix_a=fm_mat_eigv_P, matrix_b=fm_mat_scaled_eigv_P, beta=0.0_dp, &
matrix_c=fm_mat_P_sqrt_inv)
Expand Down Expand Up @@ -4668,7 +4678,7 @@ SUBROUTINE compute_self_energy_cubic_gw(num_integ_points, nmo, tau_tj, tj, &
fm_mo_coeff_occ, fm_mo_coeff_virt, &
fm_mo_coeff_occ_scaled, fm_mo_coeff_virt_scaled, &
fm_scaled_dm_occ_tau, fm_scaled_dm_virt_tau, Eigenval, &
nmo, eps_filter, e_fermi, tau_tj(jquad))
nmo, eps_filter, e_fermi, tau_tj(jquad), para_env)
CALL dbcsr_set(mat_W, 0.0_dp)
CALL copy_fm_to_dbcsr(fm_mat_W(jquad)%matrix, mat_W, keep_sparsity=.FALSE.)
Expand Down Expand Up @@ -5037,18 +5047,20 @@ SUBROUTINE trace_sigma_gw(t3c_1, t3c_2, vec_sigma, mo_bounds, para_env)
!> \param eps_filter ...
!> \param e_fermi ...
!> \param tau ...
!> \param para_env ...
! **************************************************************************************************
SUBROUTINE compute_Greens_function_time(mat_greens_fct_occ, mat_greens_fct_virt, fm_mo_coeff_occ, fm_mo_coeff_virt, &
fm_mo_coeff_occ_scaled, fm_mo_coeff_virt_scaled, &
fm_scaled_dm_occ_tau, fm_scaled_dm_virt_tau, Eigenval, nmo, &
eps_filter, e_fermi, tau)
eps_filter, e_fermi, tau, para_env)

TYPE(dbcsr_type), POINTER :: mat_greens_fct_occ, mat_greens_fct_virt
TYPE(cp_fm_type), POINTER :: fm_mo_coeff_occ, fm_mo_coeff_virt, fm_mo_coeff_occ_scaled, &
fm_mo_coeff_virt_scaled, fm_scaled_dm_occ_tau, fm_scaled_dm_virt_tau
REAL(KIND=dp), DIMENSION(:), INTENT(IN) :: Eigenval
INTEGER, INTENT(IN) :: nmo
REAL(KIND=dp), INTENT(IN) :: eps_filter, e_fermi, tau
TYPE(cp_para_env_type), POINTER :: para_env

CHARACTER(LEN=*), PARAMETER :: routineN = 'compute_Greens_function_time', &
routineP = moduleN//':'//routineN
Expand All @@ -5060,6 +5072,8 @@ SUBROUTINE compute_Greens_function_time(mat_greens_fct_occ, mat_greens_fct_virt,

CALL timeset(routineN, handle)

CALL mp_sync(para_env%group)

! get info of fm_mo_coeff_occ
CALL cp_fm_get_info(matrix=fm_mo_coeff_occ, &
nrow_local=nrow_local, &
Expand Down Expand Up @@ -5103,6 +5117,8 @@ SUBROUTINE compute_Greens_function_time(mat_greens_fct_occ, mat_greens_fct_virt,
END DO
END DO

CALL mp_sync(para_env%group)

CALL cp_gemm(transa="N", transb="T", m=nmo, n=nmo, k=nmo, alpha=1.0_dp, &
matrix_a=fm_mo_coeff_occ_scaled, matrix_b=fm_mo_coeff_occ_scaled, beta=0.0_dp, &
matrix_c=fm_scaled_dm_occ_tau)
Expand Down
10 changes: 8 additions & 2 deletions src/rpa_im_time.F
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ SUBROUTINE compute_mat_P_omega(mat_P_omega, fm_scaled_dm_occ_tau, &
Eigenval, e_fermi, eps_filter, memory_info, &
unit_nr, &
jquad, do_kpoints_cubic_RPA, qs_env, &
num_cells_dm, index_to_cell_dm)
num_cells_dm, index_to_cell_dm, para_env)

ALLOCATE (t_dm_virt(num_cells_dm))
ALLOCATE (t_dm_occ(num_cells_dm))
Expand Down Expand Up @@ -671,6 +671,7 @@ END SUBROUTINE zero_mat_P_omega
!> \param qs_env ...
!> \param num_cells_dm ...
!> \param index_to_cell_dm ...
!> \param para_env ...
! **************************************************************************************************
SUBROUTINE compute_mat_dm_global(fm_scaled_dm_occ_tau, fm_scaled_dm_virt_tau, tau_tj, num_integ_points, nmo, &
fm_mo_coeff_occ, fm_mo_coeff_virt, fm_mo_coeff_occ_scaled, &
Expand All @@ -679,7 +680,7 @@ SUBROUTINE compute_mat_dm_global(fm_scaled_dm_occ_tau, fm_scaled_dm_virt_tau, ta
Eigenval, e_fermi, eps_filter, memory_info, &
unit_nr, &
jquad, do_kpoints_cubic_RPA, qs_env, &
num_cells_dm, index_to_cell_dm)
num_cells_dm, index_to_cell_dm, para_env)

TYPE(cp_fm_type), POINTER :: fm_scaled_dm_occ_tau, &
fm_scaled_dm_virt_tau
Expand All @@ -701,6 +702,7 @@ SUBROUTINE compute_mat_dm_global(fm_scaled_dm_occ_tau, fm_scaled_dm_virt_tau, ta
TYPE(qs_environment_type), POINTER :: qs_env
INTEGER, INTENT(OUT) :: num_cells_dm
INTEGER, DIMENSION(:, :), POINTER :: index_to_cell_dm
TYPE(cp_para_env_type), POINTER :: para_env

CHARACTER(LEN=*), PARAMETER :: routineN = 'compute_mat_dm_global', &
routineP = moduleN//':'//routineN
Expand Down Expand Up @@ -733,6 +735,8 @@ SUBROUTINE compute_mat_dm_global(fm_scaled_dm_occ_tau, fm_scaled_dm_virt_tau, ta

num_cells_dm = 1

CALL mp_sync(para_env%group)

! get info of fm_mo_coeff_occ
CALL cp_fm_get_info(matrix=fm_mo_coeff_occ, &
nrow_local=nrow_local, &
Expand Down Expand Up @@ -783,6 +787,8 @@ SUBROUTINE compute_mat_dm_global(fm_scaled_dm_occ_tau, fm_scaled_dm_virt_tau, ta
END DO
END DO

CALL mp_sync(para_env%group)

size_dm_occ = nmo
size_dm_virt = nmo

Expand Down

0 comments on commit d9a0891

Please sign in to comment.