@@ -48,8 +48,9 @@ function dss_load_perimeter_data_kernel!(
48
48
if gidx ≤ prod (sizep)
49
49
(level, p, fidx, elem) = cart_ind (sizep, gidx). I
50
50
(ip, jp) = perimeter[p]
51
- data_idx = linear_ind (sized, (level, ip, jp, fidx, elem))
52
- pperimeter_data[level, p, fidx, elem] = pdata[data_idx]
51
+ data_idx = linear_ind (sized, (level, ip, jp, elem))
52
+ pperimeter_data. arrays[fidx][level, p, elem] =
53
+ pdata. arrays[fidx][data_idx]
53
54
end
54
55
return nothing
55
56
end
@@ -89,7 +90,8 @@ function dss_unload_perimeter_data_kernel!(
89
90
(level, p, fidx, elem) = cart_ind (sizep, gidx). I
90
91
(ip, jp) = perimeter[p]
91
92
data_idx = linear_ind (sized, (level, ip, jp, fidx, elem))
92
- pdata[data_idx] = pperimeter_data[level, p, fidx, elem]
93
+ pdata. arrays[fidx][data_idx] =
94
+ pperimeter_data. arrays[fidx][level, p, elem]
93
95
end
94
96
return nothing
95
97
end
@@ -148,12 +150,12 @@ function dss_local_kernel!(
148
150
for idx in st: (en - 1 )
149
151
(lidx, vert) = local_vertices[idx]
150
152
ip = perimeter_vertex_node_index (vert)
151
- sum_data += pperimeter_data[ level, ip, fidx , lidx]
153
+ sum_data += pperimeter_data. arrays[fidx][ level, ip, lidx]
152
154
end
153
155
for idx in st: (en - 1 )
154
156
(lidx, vert) = local_vertices[idx]
155
157
ip = perimeter_vertex_node_index (vert)
156
- pperimeter_data[ level, ip, fidx , lidx] = sum_data
158
+ pperimeter_data. arrays[fidx][ level, ip, lidx] = sum_data
157
159
end
158
160
elseif gidx ≤ nlevels * nfidx * (nlocalvertices + nlocalfaces) # interior faces
159
161
nfacedof = div (nperimeter - 4 , 4 )
@@ -169,10 +171,10 @@ function dss_local_kernel!(
169
171
ip1 = inc1 == 1 ? first1 + i - 1 : first1 - i + 1
170
172
ip2 = inc2 == 1 ? first2 + i - 1 : first2 - i + 1
171
173
val =
172
- pperimeter_data[ level, ip1, fidx , lidx1] +
173
- pperimeter_data[ level, ip2, fidx , lidx2]
174
- pperimeter_data[ level, ip1, fidx , lidx1] = val
175
- pperimeter_data[ level, ip2, fidx , lidx2] = val
174
+ pperimeter_data. arrays[fidx][ level, ip1, lidx1] +
175
+ pperimeter_data. arrays[fidx][ level, ip2, lidx2]
176
+ pperimeter_data. arrays[fidx][ level, ip1, lidx1] = val
177
+ pperimeter_data. arrays[fidx][ level, ip2, lidx2] = val
176
178
end
177
179
end
178
180
@@ -254,7 +256,7 @@ function dss_transform_kernel!(
254
256
if gidx ≤ nlevels * nperimeter * nlocalelems
255
257
sizet = (nlevels, nperimeter, nlocalelems)
256
258
sizet_data = (nlevels, Nq, Nq, nfid, nelems)
257
- sizet_wt = (Nq, Nq, 1 , nelems)
259
+ sizet_wt = (Nq, Nq, nelems)
258
260
sizet_metric = (nlevels, Nq, Nq, nmetric, nelems)
259
261
260
262
(level, p, localelemno) = cart_ind (sizet, gidx). I
@@ -267,26 +269,24 @@ function dss_transform_kernel!(
267
269
pperimeter_data[level, p, fidx, elem] = pdata[data_idx] * weight
268
270
end
269
271
for fidx in covariant12fidx
270
- data_idx1 = linear_ind (sizet_data, (level, ip, jp, fidx, elem))
271
- data_idx2 = linear_ind (sizet_data, (level, ip, jp, fidx + 1 , elem))
272
- (idx11, idx12, idx21, idx22) =
273
- Topologies. _get_idx_metric (sizet_metric, (level, ip, jp, elem))
272
+ data_idx = linear_ind (sizet_data, (level, ip, jp, elem))
273
+ (idx11, idx12, idx21, idx22) = (1 ,2 ,3 ,4 )
274
+ # Topologies._get_idx_metric(sizet_metric, (level, ip, jp, elem))
274
275
pperimeter_data[level, p, fidx, elem] =
275
276
(
276
- p∂ξ∂x[idx11] * pdata[data_idx1 ] +
277
- p∂ξ∂x[idx12] * pdata[data_idx2 ]
277
+ p∂ξ∂x. arrays [idx11][data_idx] * pdata. arrays[fidx][data_idx ] +
278
+ p∂ξ∂x. arrays [idx12][data_idx] * pdata. arrays[fidx + 1 ][data_idx ]
278
279
) * weight
279
280
pperimeter_data[level, p, fidx + 1 , elem] =
280
281
(
281
- p∂ξ∂x[idx21] * pdata[data_idx1 ] +
282
- p∂ξ∂x[idx22] * pdata[data_idx2 ]
282
+ p∂ξ∂x. arrays [idx21][data_idx] * pdata. arrays[fidx][data_idx ] +
283
+ p∂ξ∂x. arrays [idx22][data_idx] * pdata. arrays[fidx + 1 ][data_idx ]
283
284
) * weight
284
285
end
285
286
for fidx in contravariant12fidx
286
- data_idx1 = linear_ind (sizet_data, (level, ip, jp, fidx, elem))
287
- data_idx2 = linear_ind (sizet_data, (level, ip, jp, fidx + 1 , elem))
288
- (idx11, idx12, idx21, idx22) =
289
- Topologies. _get_idx_metric (sizet_metric, (level, ip, jp, elem))
287
+ data_idx = linear_ind (sizet_data, (level, ip, jp, elem))
288
+ (idx11, idx12, idx21, idx22) = (1 ,2 ,3 ,4 )
289
+ # Topologies._get_idx_metric(sizet_metric, (level, ip, jp, elem))
290
290
pperimeter_data[level, p, fidx, elem] =
291
291
(
292
292
p∂x∂ξ[idx11] * pdata[data_idx1] +
@@ -683,7 +683,8 @@ function load_from_recv_buffer_kernel!(
683
683
lidx = recv_buf_idx[irecv, 1 ]
684
684
ip = recv_buf_idx[irecv, 2 ]
685
685
idx = level + ((fidx - 1 ) + (irecv - 1 ) * nfid) * nlevels
686
- CUDA. @atomic pperimeter_data[level, ip, fidx, lidx] += recv_data[idx]
686
+ CUDA. @atomic pperimeter_data. arrays[fidx][level, ip, lidx] +=
687
+ recv_data[idx]
687
688
end
688
689
return nothing
689
690
end
0 commit comments