• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

Superconducting Toolkit


Commit MetaInfo

Revisión056b3169bd86fc86535431ccf4fcb929d16a7a3a (tree)
Tiempo2020-10-31 20:44:54
Autorgiannozz <paolo.giannozzi@uniu...>
Commitergiannozz

Log Message

Merge branch 'devel-compute_mmn' into 'develop'

Increased performance on routine compute_mmn in pw2wannier90 program.

See merge request QEF/q-e!1176

Cambiar Resumen

Diferencia incremental

--- a/PP/src/pw2wannier90.f90
+++ b/PP/src/pw2wannier90.f90
@@ -425,7 +425,7 @@ PROGRAM pw2wannier90
425425 IF(write_mmn ) CALL print_clock( 'compute_mmn' )
426426 IF(write_unk ) CALL print_clock( 'write_unk' )
427427 IF(write_unkg ) CALL print_clock( 'write_parity' )
428- !! not sure if this should be called also in 'library' mode or not !!
428+ ! not sure if this should be called also in 'library' mode or not !!
429429 CALL environment_end ( 'PW2WANNIER' )
430430 IF ( ionode ) WRITE( stdout, * )
431431 CALL stop_pp
@@ -2148,72 +2148,7 @@ SUBROUTINE compute_mmn
21482148 !
21492149 Mkb(:,:) = (0.0d0,0.0d0)
21502150 !
2151- IF (any_uspp) THEN
2152- ijkb0 = 0
2153- DO nt = 1, ntyp
2154- IF ( upf(nt)%tvanp ) THEN
2155- DO na = 1, nat
2156- !
2157- arg = dot_product( dxk(:,ind), tau(:,na) ) * tpi
2158- phase1 = cmplx( cos(arg), -sin(arg) ,kind=DP)
2159- !
2160- IF ( ityp(na) == nt ) THEN
2161- DO jh = 1, nh(nt)
2162- jkb = ijkb0 + jh
2163- DO ih = 1, nh(nt)
2164- ikb = ijkb0 + ih
2165- !
2166- DO m = 1,nbnd
2167- IF (excluded_band(m)) CYCLE
2168- IF (gamma_only) THEN
2169- DO n=1,m ! Mkb(m,n) is symmetric in m and n for gamma_only case
2170- IF (excluded_band(n)) CYCLE
2171- Mkb(m,n) = Mkb(m,n) + &
2172- phase1 * qb(ih,jh,nt,ind) * &
2173- becp%r(ikb,m) * rbecp2(jkb,n)
2174- ENDDO
2175- else if (noncolin) then
2176- DO n=1,nbnd
2177- IF (excluded_band(n)) CYCLE
2178- if (lspinorb) then
2179- Mkb(m,n) = Mkb(m,n) + &
2180- phase1 * ( &
2181- qq_so(ih,jh,1,nt) * conjg( becp%nc(ikb, 1, m) ) * becp2_nc(jkb, 1, n) &
2182- + qq_so(ih,jh,2,nt) * conjg( becp%nc(ikb, 1, m) ) * becp2_nc(jkb, 2, n) &
2183- + qq_so(ih,jh,3,nt) * conjg( becp%nc(ikb, 2, m) ) * becp2_nc(jkb, 1, n) &
2184- + qq_so(ih,jh,4,nt) * conjg( becp%nc(ikb, 2, m) ) * becp2_nc(jkb, 2, n) &
2185- )
2186- else
2187- Mkb(m,n) = Mkb(m,n) + &
2188- phase1 * qb(ih,jh,nt,ind) * &
2189- (conjg( becp%nc(ikb, 1, m) ) * becp2_nc(jkb, 1, n) &
2190- + conjg( becp%nc(ikb, 2, m) ) * becp2_nc(jkb, 2, n) )
2191- endif
2192- ENDDO
2193- ELSE
2194- DO n=1,nbnd
2195- IF (excluded_band(n)) CYCLE
2196- Mkb(m,n) = Mkb(m,n) + &
2197- phase1 * qb(ih,jh,nt,ind) * &
2198- conjg( becp%k(ikb,m) ) * becp2(jkb,n)
2199- ENDDO
2200- ENDIF
2201- ENDDO ! m
2202- ENDDO !ih
2203- ENDDO !jh
2204- ijkb0 = ijkb0 + nh(nt)
2205- ENDIF !ityp
2206- ENDDO !nat
2207- ELSE !tvanp
2208- DO na = 1, nat
2209- IF ( ityp(na) == nt ) ijkb0 = ijkb0 + nh(nt)
2210- ENDDO
2211- ENDIF !tvanp
2212- ENDDO !ntyp
2213- ENDIF ! any_uspp
2214- !
2215- !
2216-! loops on bands
2151+ ! loops on bands
22172152 !
22182153 IF (wan_mode=='standalone') THEN
22192154 IF (ionode) WRITE (iun_mmn,'(7i5)') ik, ikp, (g_kpb(ipol,ik,ib), ipol=1,3)
@@ -2228,7 +2163,7 @@ SUBROUTINE compute_mmn
22282163 istart=(ipol-1)*npwx+1
22292164 iend=istart+npw-1
22302165 psic_nc(dffts%nl (igk_k(1:npw,ik) ),ipol ) = evc(istart:iend, m)
2231- IF (.not.zerophase(ik,ib)) THEN
2166+ IF (.not.zerophase(ik,ib)) THEN
22322167 CALL invfft ('Wave', psic_nc(:,ipol), dffts)
22332168 psic_nc(1:dffts%nnr,ipol) = psic_nc(1:dffts%nnr,ipol) * &
22342169 phase(1:dffts%nnr)
@@ -2260,7 +2195,6 @@ SUBROUTINE compute_mmn
22602195 IF (excluded_band(n)) CYCLE
22612196 mmn = zdotc (npwq, aux,1,evcq(1,n),1) &
22622197 + conjg(zdotc(npwq,aux2,1,evcq(1,n),1))
2263- CALL mp_sum(mmn, intra_pool_comm)
22642198 Mkb(m,n) = mmn + Mkb(m,n)
22652199 IF (m/=n) Mkb(n,m) = Mkb(m,n) ! fill other half of matrix by symmetry
22662200 ENDDO
@@ -2273,19 +2207,88 @@ SUBROUTINE compute_mmn
22732207 mmn = mmn + zdotc (npwq, aux_nc(1,1),1,evcq(1,n),1) &
22742208 + zdotc (npwq, aux_nc(1,2),1,evcq(npwx+1,n),1)
22752209 ! end do
2276- CALL mp_sum(mmn, intra_pool_comm)
22772210 Mkb(m,n) = mmn + Mkb(m,n)
22782211 ENDDO
22792212 ELSE
22802213 DO n=1,nbnd
22812214 IF (excluded_band(n)) CYCLE
22822215 mmn = zdotc (npwq, aux,1,evcq(1,n),1)
2283- CALL mp_sum(mmn, intra_pool_comm)
22842216 Mkb(m,n) = mmn + Mkb(m,n)
22852217 ENDDO
22862218 ENDIF
22872219 ENDDO ! m
2288-
2220+ !
2221+ ! updating of the elements of the matrix Mkb
2222+ !
2223+ DO n=1,nbnd
2224+ IF (excluded_band(n)) CYCLE
2225+ CALL mp_sum(Mkb(:,n), intra_pool_comm)
2226+ ENDDO
2227+ !
2228+ IF (any_uspp) THEN
2229+ ijkb0 = 0
2230+ DO nt = 1, ntyp
2231+ IF ( upf(nt)%tvanp ) THEN
2232+ DO na = 1, nat
2233+ !
2234+ arg = dot_product( dxk(:,ind), tau(:,na) ) * tpi
2235+ phase1 = cmplx( cos(arg), -sin(arg) ,kind=DP)
2236+ !
2237+ IF ( ityp(na) == nt ) THEN
2238+ DO jh = 1, nh(nt)
2239+ jkb = ijkb0 + jh
2240+ DO ih = 1, nh(nt)
2241+ ikb = ijkb0 + ih
2242+ !
2243+ DO m = 1,nbnd
2244+ IF (excluded_band(m)) CYCLE
2245+ IF (gamma_only) THEN
2246+ DO n=1,m ! Mkb(m,n) is symmetric in m and n for gamma_only case
2247+ IF (excluded_band(n)) CYCLE
2248+ Mkb(m,n) = Mkb(m,n) + &
2249+ phase1 * qb(ih,jh,nt,ind) * &
2250+ becp%r(ikb,m) * rbecp2(jkb,n)
2251+ ENDDO
2252+ else if (noncolin) then
2253+ DO n=1,nbnd
2254+ IF (excluded_band(n)) CYCLE
2255+ if (lspinorb) then
2256+ Mkb(m,n) = Mkb(m,n) + &
2257+ phase1 * ( &
2258+ qq_so(ih,jh,1,nt) * conjg( becp%nc(ikb, 1, m) ) * becp2_nc(jkb, 1, n) &
2259+ + qq_so(ih,jh,2,nt) * conjg( becp%nc(ikb, 1, m) ) * becp2_nc(jkb, 2, n) &
2260+ + qq_so(ih,jh,3,nt) * conjg( becp%nc(ikb, 2, m) ) * becp2_nc(jkb, 1, n) &
2261+ + qq_so(ih,jh,4,nt) * conjg( becp%nc(ikb, 2, m) ) * becp2_nc(jkb, 2, n) &
2262+ )
2263+ else
2264+ Mkb(m,n) = Mkb(m,n) + &
2265+ phase1 * qb(ih,jh,nt,ind) * &
2266+ (conjg( becp%nc(ikb, 1, m) ) * becp2_nc(jkb, 1, n) &
2267+ + conjg( becp%nc(ikb, 2, m) ) * becp2_nc(jkb, 2, n) )
2268+ endif
2269+ ENDDO
2270+ ELSE
2271+ DO n=1,nbnd
2272+ IF (excluded_band(n)) CYCLE
2273+ Mkb(m,n) = Mkb(m,n) + &
2274+ phase1 * qb(ih,jh,nt,ind) * &
2275+ conjg( becp%k(ikb,m) ) * becp2(jkb,n)
2276+ ENDDO
2277+ ENDIF
2278+ ENDDO ! m
2279+ ENDDO !ih
2280+ ENDDO !jh
2281+ ijkb0 = ijkb0 + nh(nt)
2282+ ENDIF !ityp
2283+ ENDDO !nat
2284+ ELSE !tvanp
2285+ DO na = 1, nat
2286+ IF ( ityp(na) == nt ) ijkb0 = ijkb0 + nh(nt)
2287+ ENDDO
2288+ ENDIF !tvanp
2289+ ENDDO !ntyp
2290+ ENDIF ! any_uspp
2291+ !
22892292 ibnd_n = 0
22902293 DO n=1,nbnd
22912294 IF (excluded_band(n)) CYCLE
@@ -2303,7 +2306,7 @@ SUBROUTINE compute_mmn
23032306 ENDIF
23042307 ENDDO
23052308 ENDDO
2306-
2309+ !
23072310 ENDDO !ib
23082311 ENDDO !ik
23092312