Add OpenMP parallelization to BSSN RHS hot-path stencil routines
Enable OpenMP threading for the dominant computational kernels: - makefile.inc: add -qopenmp to f90appflags - diff_new.f90: split fderivs/fdderivs into OpenMP interior + serial boundary - kodiss.f90: split kodis into OpenMP interior + serial boundary - lopsidediff.f90: add OMP PARALLEL DO COLLAPSE(2) to lopsided - fmisc.f90: parallelize symmetry_bd bulk array copy - bssn_rhs.f90: add OMP WORKSHARE to array-syntax operations Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -168,6 +168,8 @@
|
||||
call fderivs(ex,gyz,gyzx,gyzy,gyzz,X,Y,Z,SYM ,ANTI,ANTI,Symmetry,Lev)
|
||||
call fderivs(ex,dzz,gzzx,gzzy,gzzz,X,Y,Z,SYM ,SYM ,SYM ,Symmetry,Lev)
|
||||
|
||||
!$OMP PARALLEL
|
||||
!$OMP WORKSHARE
|
||||
gxx_rhs = - TWO * alpn1 * Axx - F2o3 * gxx * div_beta + &
|
||||
TWO *( gxx * betaxx + gxy * betayx + gxz * betazx)
|
||||
|
||||
@@ -186,7 +188,7 @@
|
||||
gxy * betaxz + gyy * betayz + &
|
||||
gxz * betaxy + gzz * betazy &
|
||||
- gyz * betaxx
|
||||
|
||||
|
||||
gxz_rhs = - TWO * alpn1 * Axz + F1o3 * gxz * div_beta + &
|
||||
gxx * betaxz + gxy * betayz + &
|
||||
gyz * betayx + gzz * betazx &
|
||||
@@ -201,6 +203,8 @@
|
||||
gupyy = ( gxx * gzz - gxz * gxz ) / gupzz
|
||||
gupyz = - ( gxx * gyz - gxy * gxz ) / gupzz
|
||||
gupzz = ( gxx * gyy - gxy * gxy ) / gupzz
|
||||
!$OMP END WORKSHARE
|
||||
!$OMP END PARALLEL
|
||||
|
||||
if(co == 0)then
|
||||
! Gam^i_Res = Gam^i + gup^ij_,j
|
||||
@@ -234,6 +238,8 @@
|
||||
endif
|
||||
|
||||
! second kind of connection
|
||||
!$OMP PARALLEL
|
||||
!$OMP WORKSHARE
|
||||
Gamxxx =HALF*( gupxx*gxxx + gupxy*(TWO*gxyx - gxxy ) + gupxz*(TWO*gxzx - gxxz ))
|
||||
Gamyxx =HALF*( gupxy*gxxx + gupyy*(TWO*gxyx - gxxy ) + gupyz*(TWO*gxzx - gxxz ))
|
||||
Gamzxx =HALF*( gupxz*gxxx + gupyz*(TWO*gxyx - gxxy ) + gupzz*(TWO*gxzx - gxxz ))
|
||||
@@ -282,6 +288,8 @@
|
||||
(gupxy * gupyz + gupyy * gupxz)* Axy + &
|
||||
(gupxy * gupzz + gupyz * gupxz)* Axz + &
|
||||
(gupyy * gupzz + gupyz * gupyz)* Ayz
|
||||
!$OMP END WORKSHARE
|
||||
!$OMP END PARALLEL
|
||||
|
||||
! Right hand side for Gam^i without shift terms...
|
||||
call fderivs(ex,Lap,Lapx,Lapy,Lapz,X,Y,Z,SYM,SYM,SYM,Symmetry,Lev)
|
||||
@@ -336,6 +344,8 @@
|
||||
call fderivs(ex,Gamy,Gamyx,Gamyy,Gamyz,X,Y,Z,SYM ,ANTI,SYM ,Symmetry,Lev)
|
||||
call fderivs(ex,Gamz,Gamzx,Gamzy,Gamzz,X,Y,Z,SYM ,SYM ,ANTI,Symmetry,Lev)
|
||||
|
||||
!$OMP PARALLEL
|
||||
!$OMP WORKSHARE
|
||||
Gamx_rhs = Gamx_rhs + F2o3 * Gamxa * div_beta - &
|
||||
Gamxa * betaxx - Gamya * betaxy - Gamza * betaxz + &
|
||||
F1o3 * (gupxx * fxx + gupxy * fxy + gupxz * fxz ) + &
|
||||
@@ -375,6 +385,8 @@
|
||||
gyyz = gxz * Gamxyy + gyz * Gamyyy + gzz * Gamzyy
|
||||
gyzz = gxz * Gamxyz + gyz * Gamyyz + gzz * Gamzyz
|
||||
gzzz = gxz * Gamxzz + gyz * Gamyzz + gzz * Gamzzz
|
||||
!$OMP END WORKSHARE
|
||||
!$OMP END PARALLEL
|
||||
|
||||
!compute Ricci tensor for tilted metric
|
||||
call fdderivs(ex,dxx,fxx,fxy,fxz,fyy,fyz,fzz,X,Y,Z,SYM ,SYM ,SYM ,symmetry,Lev)
|
||||
@@ -401,6 +413,8 @@
|
||||
Ryz = gupxx * fxx + gupyy * fyy + gupzz * fzz + &
|
||||
( gupxy * fxy + gupxz * fxz + gupyz * fyz ) * TWO
|
||||
|
||||
!$OMP PARALLEL
|
||||
!$OMP WORKSHARE
|
||||
Rxx = - HALF * Rxx + &
|
||||
gxx * Gamxx+ gxy * Gamyx + gxz * Gamzx + &
|
||||
Gamxa * gxxx + Gamya * gxyx + Gamza * gxzx + &
|
||||
@@ -601,9 +615,13 @@
|
||||
Gamxyz * gxzz + Gamyyz * gyzz + Gamzyz * gzzz + &
|
||||
Gamxzz * gxzy + Gamyzz * gyzy + Gamzzz * gzzy + &
|
||||
Gamxyz * gzzx + Gamyyz * gzzy + Gamzyz * gzzz )
|
||||
!$OMP END WORKSHARE
|
||||
!$OMP END PARALLEL
|
||||
!covariant second derivative of chi respect to tilted metric
|
||||
call fdderivs(ex,chi,fxx,fxy,fxz,fyy,fyz,fzz,X,Y,Z,SYM,SYM,SYM,Symmetry,Lev)
|
||||
|
||||
!$OMP PARALLEL
|
||||
!$OMP WORKSHARE
|
||||
fxx = fxx - Gamxxx * chix - Gamyxx * chiy - Gamzxx * chiz
|
||||
fxy = fxy - Gamxxy * chix - Gamyxy * chiy - Gamzxy * chiz
|
||||
fxz = fxz - Gamxxz * chix - Gamyxz * chiy - Gamzxz * chiz
|
||||
@@ -626,11 +644,15 @@
|
||||
Rxy = Rxy + (fxy - chix*chiy/chin1/TWO + gxy * f)/chin1/TWO
|
||||
Rxz = Rxz + (fxz - chix*chiz/chin1/TWO + gxz * f)/chin1/TWO
|
||||
Ryz = Ryz + (fyz - chiy*chiz/chin1/TWO + gyz * f)/chin1/TWO
|
||||
!$OMP END WORKSHARE
|
||||
!$OMP END PARALLEL
|
||||
|
||||
! covariant second derivatives of the lapse respect to physical metric
|
||||
call fdderivs(ex,Lap,fxx,fxy,fxz,fyy,fyz,fzz,X,Y,Z, &
|
||||
SYM,SYM,SYM,symmetry,Lev)
|
||||
|
||||
!$OMP PARALLEL
|
||||
!$OMP WORKSHARE
|
||||
gxxx = (gupxx * chix + gupxy * chiy + gupxz * chiz)/chin1
|
||||
gxxy = (gupxy * chix + gupyy * chiy + gupyz * chiz)/chin1
|
||||
gxxz = (gupxz * chix + gupyz * chiy + gupzz * chiz)/chin1
|
||||
@@ -791,6 +813,8 @@
|
||||
!!!! gauge variable part
|
||||
|
||||
Lap_rhs = -TWO*alpn1*trK
|
||||
!$OMP END WORKSHARE
|
||||
!$OMP END PARALLEL
|
||||
#if (GAUGE == 0)
|
||||
betax_rhs = FF*dtSfx
|
||||
betay_rhs = FF*dtSfy
|
||||
|
||||
Reference in New Issue
Block a user