Skip to content

Commit abd055d

Browse files
committed
fix gpu bug
1 parent 6a1cebe commit abd055d

File tree

1 file changed

+16
-15
lines changed

1 file changed

+16
-15
lines changed

src/simulation/m_mhd.fpp

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,11 @@ contains
7575
type(scalar_field), dimension(sys_size), intent(inout) :: rhs_vf
7676

7777
integer :: k, l, q, r
78-
type(vec3) :: v, B
78+
real(wp), dimension(3) :: v, B
7979
real(wp) :: divB, vdotB
8080

81-
!$acc parallel loop collapse(3) gang vector default(present)
81+
!$acc parallel loop collapse(3) gang vector default(present) &
82+
!$acc private(v, B)
8283
do q = 0, p
8384
do l = 0, n
8485
do k = 0, m
@@ -99,15 +100,15 @@ contains
99100
end do
100101
end if
101102

102-
v%x = q_prim_vf(momxb)%sf(k, l, q)
103-
v%y = q_prim_vf(momxb + 1)%sf(k, l, q)
104-
v%z = q_prim_vf(momxb + 2)%sf(k, l, q)
103+
v(1) = q_prim_vf(momxb)%sf(k, l, q)
104+
v(2) = q_prim_vf(momxb + 1)%sf(k, l, q)
105+
v(3) = q_prim_vf(momxb + 2)%sf(k, l, q)
105106

106-
B%x = q_prim_vf(Bxb)%sf(k, l, q)
107-
B%y = q_prim_vf(Bxb + 1)%sf(k, l, q)
108-
B%z = q_prim_vf(Bxb + 2)%sf(k, l, q)
107+
B(1) = q_prim_vf(Bxb)%sf(k, l, q)
108+
B(2) = q_prim_vf(Bxb + 1)%sf(k, l, q)
109+
B(3) = q_prim_vf(Bxb + 2)%sf(k, l, q)
109110

110-
vdotB = v%x*B%x + v%y*B%y + v%z*B%z
111+
vdotB = sum(v*B)
111112

112113
! 1: rho -> unchanged
113114
! 2: vx -> - (divB) * Bx
@@ -118,15 +119,15 @@ contains
118119
! 7: By -> - (divB) * vy
119120
! 8: Bz -> - (divB) * vz
120121

121-
rhs_vf(momxb)%sf(k, l, q) = rhs_vf(momxb)%sf(k, l, q) - divB*B%x
122-
rhs_vf(momxb + 1)%sf(k, l, q) = rhs_vf(momxb + 1)%sf(k, l, q) - divB*B%y
123-
rhs_vf(momxb + 2)%sf(k, l, q) = rhs_vf(momxb + 2)%sf(k, l, q) - divB*B%z
122+
rhs_vf(momxb)%sf(k, l, q) = rhs_vf(momxb)%sf(k, l, q) - divB*B(1)
123+
rhs_vf(momxb + 1)%sf(k, l, q) = rhs_vf(momxb + 1)%sf(k, l, q) - divB*B(2)
124+
rhs_vf(momxb + 2)%sf(k, l, q) = rhs_vf(momxb + 2)%sf(k, l, q) - divB*B(3)
124125

125126
rhs_vf(E_idx)%sf(k, l, q) = rhs_vf(E_idx)%sf(k, l, q) - divB*vdotB
126127

127-
rhs_vf(Bxb)%sf(k, l, q) = rhs_vf(Bxb)%sf(k, l, q) - divB*v%x
128-
rhs_vf(Bxb + 1)%sf(k, l, q) = rhs_vf(Bxb + 1)%sf(k, l, q) - divB*v%y
129-
rhs_vf(Bxb + 2)%sf(k, l, q) = rhs_vf(Bxb + 2)%sf(k, l, q) - divB*v%z
128+
rhs_vf(Bxb)%sf(k, l, q) = rhs_vf(Bxb)%sf(k, l, q) - divB*v(1)
129+
rhs_vf(Bxb + 1)%sf(k, l, q) = rhs_vf(Bxb + 1)%sf(k, l, q) - divB*v(2)
130+
rhs_vf(Bxb + 2)%sf(k, l, q) = rhs_vf(Bxb + 2)%sf(k, l, q) - divB*v(3)
130131

131132
end do
132133
end do

0 commit comments

Comments
 (0)