@@ -106,7 +106,7 @@ SUBROUTINE rse_energy(qs_env, mp2_env, para_env, dft_control, &
106106 nrow_local
107107 INTEGER , DIMENSION (:), POINTER :: col_indices, row_indices
108108 LOGICAL :: beta, do_hfx, hfx_treat_lsd_in_core
109- REAL (KIND= dp) :: coeff, rse_corr, rse_corr_beta, rse_term
109+ REAL (KIND= dp) :: coeff, rse_corr, rse_corr_beta
110110 REAL (KIND= dp), ALLOCATABLE, DIMENSION (:) :: diag_diff
111111 TYPE(cp_blacs_env_type), POINTER :: blacs_env
112112 TYPE(cp_fm_struct_type), POINTER :: fm_struct_tmp
@@ -274,17 +274,16 @@ SUBROUTINE rse_energy(qs_env, mp2_env, para_env, dft_control, &
274274
275275 ! Compute the correction
276276 rse_corr = 0.0_dp
277- !$OMP PARALLEL DO DEFAULT(NONE) PRIVATE(jjB,iiB,i_global,j_global, rse_term) &
278- !$OMP SHARED(rse_corr,ncol_local,nrow_local,col_indices,row_indices,diag_diff, eigenval, fm_X_mo,homo)
277+ !$OMP PARALLEL DO DEFAULT(NONE) PRIVATE(jjB,iiB,i_global,j_global) &
278+ !$OMP REDUCTION(+ : rse_corr) &
279+ !$OMP SHARED(ncol_local,nrow_local,col_indices,row_indices,diag_diff, eigenval, fm_X_mo,homo)
279280 DO jjB = 1 , ncol_local
280281 j_global = col_indices(jjB)
281282 DO iiB = 1 , nrow_local
282283 i_global = row_indices(iiB)
283284 IF ((i_global .LE. homo) .AND. (j_global .GT. homo)) THEN
284- rse_term = 0.0_dp
285- rse_term = fm_X_mo%local_data(iib, jjb)** 2.0_dp / &
285+ rse_corr = rse_corr+ fm_X_mo%local_data(iib, jjb)** 2.0_dp / &
286286 (eigenval(i_global)- eigenval(j_global)- diag_diff(i_global)+ diag_diff(j_global))
287- rse_corr = rse_corr+ rse_term
288287 ENDIF
289288 END DO
290289 END DO
@@ -317,17 +316,17 @@ SUBROUTINE rse_energy(qs_env, mp2_env, para_env, dft_control, &
317316!$OMP END PARALLEL DO
318317 CALL mp_sum(diag_diff, para_env%group)
319318
320- !$OMP PARALLEL DO DEFAULT(NONE) PRIVATE(jjB,iiB,i_global,j_global, rse_term) &
321- !$OMP SHARED(rse_corr_beta,ncol_local,nrow_local,col_indices,row_indices,diag_diff,eigenval_beta,fm_X_mo_Beta,homo_beta)
319+ !$OMP PARALLEL DO DEFAULT(NONE) PRIVATE(jjB,iiB,i_global,j_global) &
320+ !$OMP REDUCTION(+ : rse_corr_beta) &
321+ !$OMP SHARED(ncol_local,nrow_local,col_indices,row_indices,diag_diff,eigenval_beta,fm_X_mo_Beta,homo_beta)
322322 DO jjB = 1 , ncol_local
323323 j_global = col_indices(jjB)
324324 DO iiB = 1 , nrow_local
325325 i_global = row_indices(iiB)
326- rse_term = 0.0_dp
327- IF ((i_global .LE. homo_beta) .AND. (j_global .GT. homo_beta)) &
328- rse_term = fm_X_mo_beta%local_data(iib, jjb)** 2.0_dp / &
329- (eigenval_beta(i_global)- eigenval_beta(j_global)- diag_diff(i_global)+ diag_diff(j_global))
330- rse_corr_beta = rse_corr_beta+ rse_term
326+ IF ((i_global .LE. homo_beta) .AND. (j_global .GT. homo_beta)) THEN
327+ rse_corr_beta = rse_corr_beta+ fm_X_mo_beta%local_data(iib, jjb)** 2.0_dp / &
328+ (eigenval_beta(i_global)- eigenval_beta(j_global)- diag_diff(i_global)+ diag_diff(j_global))
329+ ENDIF
331330 END DO
332331 END DO
333332!$OMP END PARALLEL DO
@@ -605,8 +604,8 @@ END SUBROUTINE xc_contribution
605604!> \param eigenval_beta ...
606605!> \param homo_beta ...
607606! **************************************************************************************************
608- SUBROUTINE non_diag_rse (fm_F_mo , eigenval , dimen , homo , para_env , blacs_env , &
609- rse_corr , fm_F_mo_beta , eigenval_beta , homo_beta )
607+ SUBROUTINE non_diag_rse (fm_F_mo , eigenval , dimen , homo , para_env , &
608+ blacs_env , rse_corr , fm_F_mo_beta , eigenval_beta , homo_beta )
610609 TYPE(cp_fm_type), POINTER :: fm_F_mo
611610 REAL (KIND= dp), DIMENSION (:) :: Eigenval
612611 INTEGER :: dimen, homo
@@ -624,7 +623,7 @@ SUBROUTINE non_diag_rse(fm_F_mo, eigenval, dimen, homo, para_env, blacs_env, &
624623 virtual_beta
625624 INTEGER , DIMENSION (:), POINTER :: col_indices, row_indices
626625 LOGICAL :: alpha_beta
627- REAL (KIND= dp) :: rse_corr_beta, rse_term
626+ REAL (KIND= dp) :: rse_corr_beta
628627 REAL (KIND= dp), ALLOCATABLE, DIMENSION (:) :: eig_o, eig_semi_can, eig_v
629628 TYPE(cp_fm_struct_type), POINTER :: fm_struct_tmp
630629 TYPE(cp_fm_type), POINTER :: fm_F_oo, fm_F_ov, fm_F_vv, fm_O, fm_tmp, &
@@ -648,8 +647,10 @@ SUBROUTINE non_diag_rse(fm_F_mo, eigenval, dimen, homo, para_env, blacs_env, &
648647 j_global = col_indices(jjB)
649648 DO iiB = 1 , nrow_local
650649 i_global = row_indices(iiB)
651- IF (i_global .EQ. j_global) fm_F_mo%local_data(iib, jjb) = &
652- fm_F_mo%local_data(iib, jjb)+ eigenval(i_global)
650+ IF (i_global .EQ. j_global) THEN
651+ fm_F_mo%local_data(iib, jjb) = &
652+ fm_F_mo%local_data(iib, jjb)+ eigenval(i_global)
653+ ENDIF
653654 END DO
654655 END DO
655656!$OMP END PARALLEL DO
@@ -706,6 +707,7 @@ SUBROUTINE non_diag_rse(fm_F_mo, eigenval, dimen, homo, para_env, blacs_env, &
706707 t_firstrow= 1 , t_firstcol= 1 )
707708
708709 ! Diagonalize occupied- occupied and virtual- virtual matrices
710+
709711 ALLOCATE (eig_o(homo))
710712 ALLOCATE (eig_v(virtual))
711713 eig_v = 0.0_dp
@@ -734,9 +736,17 @@ SUBROUTINE non_diag_rse(fm_F_mo, eigenval, dimen, homo, para_env, blacs_env, &
734736 s_firstrow= 1 , s_firstcol= homo+1 , &
735737 t_firstrow= 1 , t_firstcol= 1 )
736738
739+ CALL cp_fm_get_info(matrix= fm_F_ov, &
740+ nrow_local= nrow_local, &
741+ ncol_local= ncol_local, &
742+ row_indices= row_indices, &
743+ col_indices= col_indices)
744+
737745 CALL cp_gemm(transa= ' N' , transb= ' N' , m= homo, n= virtual, k= homo, alpha= 1.0_dp , &
738746 matrix_a= fm_O, matrix_b= fm_F_ov, beta= 0.0_dp , matrix_c= fm_tmp)
739747
748+ CALL cp_fm_set_all(fm_F_ov, 0.0_dp )
749+
740750 CALL cp_gemm(transa= ' N' , transb= ' N' , m= homo, n= virtual, k= virtual, alpha= 1.0_dp , &
741751 matrix_a= fm_tmp, matrix_b= fm_U, beta= 0.0_dp , matrix_c= fm_F_ov)
742752
@@ -748,16 +758,15 @@ SUBROUTINE non_diag_rse(fm_F_mo, eigenval, dimen, homo, para_env, blacs_env, &
748758 col_indices= col_indices)
749759
750760 rse_corr = 0.0_dp
751- !$OMP PARALLEL DO DEFAULT(NONE) PRIVATE(jjB,iiB,i_global,j_global,rse_term) &
752- !$OMP SHARED(ncol_local,nrow_local,col_indices,row_indices,fm_F_ov,eig_semi_can,rse_corr,homo)
761+ !$OMP PARALLEL DO DEFAULT(NONE) PRIVATE(jjB,iiB,i_global,j_global) &
762+ !$OMP REDUCTION(+ :rse_corr) &
763+ !$OMP SHARED(ncol_local,nrow_local,col_indices,row_indices,fm_F_ov,eig_semi_can,homo)
753764 DO jjB = 1 , ncol_local
754765 j_global = col_indices(jjB)
755766 DO iiB = 1 , nrow_local
756767 i_global = row_indices(iiB)
757- rse_term = 0.0_dp
758- rse_term = fm_F_ov%local_data(iib, jjb)** 2.0_dp / &
768+ rse_corr = rse_corr+ fm_F_ov%local_data(iib, jjb)** 2.0_dp / &
759769 (eig_semi_can(i_global)- eig_semi_can(j_global+ homo))
760- rse_corr = rse_corr+ rse_term
761770 END DO
762771 END DO
763772!$OMP END PARALLEL DO
@@ -848,16 +857,15 @@ SUBROUTINE non_diag_rse(fm_F_mo, eigenval, dimen, homo, para_env, blacs_env, &
848857 row_indices= row_indices, &
849858 col_indices= col_indices)
850859 rse_corr_beta = 0.0_dp
851- !$OMP PARALLEL DO DEFAULT(NONE) PRIVATE(jjB,iiB,i_global,j_global,rse_term) &
852- !$OMP SHARED(ncol_local,nrow_local,col_indices,row_indices,fm_F_ov,eig_semi_can,rse_corr_beta,homo_beta)
860+ !$OMP PARALLEL DO DEFAULT(NONE) PRIVATE(jjB,iiB,i_global,j_global) &
861+ !$OMP REDUCTION(+ :rse_corr_beta) &
862+ !$OMP SHARED(ncol_local,nrow_local,col_indices,row_indices,fm_F_ov,eig_semi_can,homo_beta)
853863 DO jjB = 1 , ncol_local
854864 j_global = col_indices(jjB)
855865 DO iiB = 1 , nrow_local
856866 i_global = row_indices(iiB)
857- rse_term = 0.0_dp
858- rse_term = fm_F_ov%local_data(iib, jjb)** 2.0_dp / &
859- (eig_semi_can(i_global)- eig_semi_can(j_global+ homo_beta))
860- rse_corr_beta = rse_corr_beta+ rse_term
867+ rse_corr_beta = rse_corr_beta+ fm_F_ov%local_data(iib, jjb)** 2.0_dp / &
868+ (eig_semi_can(i_global)- eig_semi_can(j_global+ homo_beta))
861869 END DO
862870 END DO
863871!$OMP END PARALLEL DO
0 commit comments