|
1 | 1 |
|
2 | 2 |
|
3 | | -@inline function left_index(i, d, nx, ::Val{0}) |
4 | | - # Dirichlet (clamped to domain) |
5 | | - return clamp(i - d, 1, nx) |
6 | | -end |
7 | | - |
8 | | -@inline function left_index(i, d, nx, ::Val{1}) |
9 | | - # Neumann (mirror the boundary value) |
10 | | - return max(i - d, 1) |
11 | | -end |
12 | | - |
13 | | -@inline function left_index(i, d, nx, ::Val{2}) |
14 | | - # Periodic (wrap around) |
15 | | - return mod1(i - d, nx) |
16 | | -end |
17 | | - |
18 | | -@inline function right_index(i, d, nx, ::Val{0}) |
19 | | - return clamp(i + d, 1, nx) # Dirichlet |
20 | | -end |
21 | | - |
22 | | -@inline function right_index(i, d, nx, ::Val{1}) |
23 | | - return min(i + d, nx) # Neumann |
24 | | -end |
25 | | - |
26 | | -@inline function right_index(i, d, nx, ::Val{2}) |
27 | | - return mod1(i + d, nx) # Periodic |
28 | | -end |
29 | | - |
30 | 3 | function WENO_flux!(fl, fr, u, weno, nx) |
31 | | - @unpack boundary, χ, γ, ζ, ϵ = weno |
| 4 | + @unpack boundary, χ, γ, ζ, ϵ, multithreading = weno |
32 | 5 |
|
33 | 6 | bL = Val(boundary[1]) |
34 | 7 | bR = Val(boundary[2]) |
35 | 8 |
|
36 | | - @inbounds for i in 1:nx+1 |
| 9 | + @inbounds @maybe_threads multithreading for i in axes(fl.x,1) |
37 | 10 | iwww = left_index(i, 3, nx, bL) |
38 | 11 | iww = left_index(i, 2, nx, bL) |
39 | 12 | iw = left_index(i, 1, nx, bL) |
|
56 | 29 |
|
57 | 30 | function semi_discretisation_weno5!(du::T, v, weno::WENOScheme, Δx_) where T <: AbstractArray{<:Real, 1} |
58 | 31 |
|
59 | | - @unpack fl, fr, stag = weno |
| 32 | + @unpack fl, fr, stag, multithreading = weno |
60 | 33 |
|
61 | 34 | # use staggered grid or not for the velocities |
62 | 35 | if stag |
63 | | - @inbounds for i = axes(du, 1) |
| 36 | + @inbounds @maybe_threads multithreading for i = axes(du, 1) |
64 | 37 | du[i] = @muladd ( |
65 | | - max(v[i+1], 0) * fl.x[i+1] + |
66 | | - min(v[i+1], 0) * fr.x[i+1] - |
67 | | - max(v[i], 0) * fl.x[i] - |
68 | | - min(v[i], 0) * fr.x[i] |
| 38 | + max(v.x[i+1], 0) * fl.x[i+1] + |
| 39 | + min(v.x[i+1], 0) * fr.x[i+1] - |
| 40 | + max(v.x[i], 0) * fl.x[i] - |
| 41 | + min(v.x[i], 0) * fr.x[i] |
69 | 42 | ) * Δx_ |
70 | 43 | end |
71 | 44 | else |
72 | | - @inbounds for i = axes(du, 1) |
73 | | - du[i] = @muladd max(v[i], 0) * (fl.x[i+1] - fl.x[i]) * Δx_ + min(v[i], 0) * (fr.x[i+1] - fr.x[i]) * Δx_ |
| 45 | + @inbounds @maybe_threads multithreading for i = axes(du, 1) |
| 46 | + du[i] = @muladd max(v.x[i], 0) * (fl.x[i+1] - fl.x[i]) * Δx_ + min(v.x[i], 0) * (fr.x[i+1] - fr.x[i]) * Δx_ |
74 | 47 | end |
75 | 48 | end |
76 | 49 | end |
0 commit comments