Skip to content

Commit 072a782

Browse files
authoredAug 25, 2022
Replace constexpr Array Weights by Scalars Weights (#82)
Further simplifies compilers’ job.
1 parent 28853b7 commit 072a782

File tree

3 files changed

+46
-42
lines changed

3 files changed

+46
-42
lines changed
 

‎src/numerics/advection.cpp

+26-26
Original file line numberDiff line numberDiff line change
@@ -38,41 +38,41 @@ struct stage_horizontal {
3838

3939
template <typename Evaluation>
4040
GT_FUNCTION static void apply(Evaluation eval, full_t) {
41-
static constexpr real_t weights[] = {1_r / 30, -1_r / 4, 1_r,
42-
-1_r / 3, -1_r / 2, 1_r / 20};
41+
constexpr real_t weight0 = 1_r / 30;
42+
constexpr real_t weight1 = -1_r / 4;
43+
constexpr real_t weight2 = 1_r;
44+
constexpr real_t weight3 = -1_r / 3;
45+
constexpr real_t weight4 = -1_r / 2;
46+
constexpr real_t weight5 = 1_r / 20;
4347

4448
real_t flx_x, flx_y;
4549
if (eval(u()) > 0_r) {
46-
flx_x =
47-
eval(u()) *
48-
-(weights[0] * eval(in(-3, 0, 0)) + weights[1] * eval(in(-2, 0, 0)) +
49-
weights[2] * eval(in(-1, 0, 0)) + weights[3] * eval(in()) +
50-
weights[4] * eval(in(1, 0, 0)) + weights[5] * eval(in(2, 0, 0))) /
51-
eval(dx());
50+
flx_x = eval(u()) *
51+
-(weight0 * eval(in(-3, 0, 0)) + weight1 * eval(in(-2, 0, 0)) +
52+
weight2 * eval(in(-1, 0, 0)) + weight3 * eval(in()) +
53+
weight4 * eval(in(1, 0, 0)) + weight5 * eval(in(2, 0, 0))) /
54+
eval(dx());
5255
} else if (eval(u()) < 0_r) {
53-
flx_x =
54-
eval(u()) *
55-
(weights[5] * eval(in(-2, 0, 0)) + weights[4] * eval(in(-1, 0, 0)) +
56-
weights[3] * eval(in()) + weights[2] * eval(in(1, 0, 0)) +
57-
weights[1] * eval(in(2, 0, 0)) + weights[0] * eval(in(3, 0, 0))) /
58-
eval(dx());
56+
flx_x = eval(u()) *
57+
(weight5 * eval(in(-2, 0, 0)) + weight4 * eval(in(-1, 0, 0)) +
58+
weight3 * eval(in()) + weight2 * eval(in(1, 0, 0)) +
59+
weight1 * eval(in(2, 0, 0)) + weight0 * eval(in(3, 0, 0))) /
60+
eval(dx());
5961
} else {
6062
flx_x = 0_r;
6163
}
6264
if (eval(v()) > 0_r) {
63-
flx_y =
64-
eval(v()) *
65-
-(weights[0] * eval(in(0, -3, 0)) + weights[1] * eval(in(0, -2, 0)) +
66-
weights[2] * eval(in(0, -1, 0)) + weights[3] * eval(in()) +
67-
weights[4] * eval(in(0, 1, 0)) + weights[5] * eval(in(0, 2, 0))) /
68-
eval(dy());
65+
flx_y = eval(v()) *
66+
-(weight0 * eval(in(0, -3, 0)) + weight1 * eval(in(0, -2, 0)) +
67+
weight2 * eval(in(0, -1, 0)) + weight3 * eval(in()) +
68+
weight4 * eval(in(0, 1, 0)) + weight5 * eval(in(0, 2, 0))) /
69+
eval(dy());
6970
} else if (eval(v()) < 0_r) {
70-
flx_y =
71-
eval(v()) *
72-
(weights[5] * eval(in(0, -2, 0)) + weights[4] * eval(in(0, -1, 0)) +
73-
weights[3] * eval(in()) + weights[2] * eval(in(0, 1, 0)) +
74-
weights[1] * eval(in(0, 2, 0)) + weights[0] * eval(in(0, 3, 0))) /
75-
eval(dy());
71+
flx_y = eval(v()) *
72+
(weight5 * eval(in(0, -2, 0)) + weight4 * eval(in(0, -1, 0)) +
73+
weight3 * eval(in()) + weight2 * eval(in(0, 1, 0)) +
74+
weight1 * eval(in(0, 2, 0)) + weight0 * eval(in(0, 3, 0))) /
75+
eval(dy());
7676
} else {
7777
flx_y = 0_r;
7878
}

‎src/numerics/diffusion.cpp

+19-15
Original file line numberDiff line numberDiff line change
@@ -37,24 +37,28 @@ struct stage_horizontal {
3737

3838
template <typename Evaluation>
3939
GT_FUNCTION static void apply(Evaluation eval, full_t) {
40-
constexpr static real_t weights[] = {-1_r / 90, 5_r / 36, -49_r / 36,
41-
49_r / 36, -5_r / 36, 1_r / 90};
42-
43-
auto flx_x0 = (weights[0] * eval(in(-3, 0)) + weights[1] * eval(in(-2, 0)) +
44-
weights[2] * eval(in(-1, 0)) + weights[3] * eval(in(0, 0)) +
45-
weights[4] * eval(in(1, 0)) + weights[5] * eval(in(2, 0))) /
40+
constexpr real_t weight0 = -1_r / 90;
41+
constexpr real_t weight1 = 5_r / 36;
42+
constexpr real_t weight2 = -49_r / 36;
43+
constexpr real_t weight3 = 49_r / 36;
44+
constexpr real_t weight4 = -5_r / 36;
45+
constexpr real_t weight5 = 1_r / 90;
46+
47+
auto flx_x0 = (weight0 * eval(in(-3, 0)) + weight1 * eval(in(-2, 0)) +
48+
weight2 * eval(in(-1, 0)) + weight3 * eval(in(0, 0)) +
49+
weight4 * eval(in(1, 0)) + weight5 * eval(in(2, 0))) /
4650
eval(dx());
47-
auto flx_x1 = (weights[0] * eval(in(-2, 0)) + weights[1] * eval(in(-1, 0)) +
48-
weights[2] * eval(in(0, 0)) + weights[3] * eval(in(1, 0)) +
49-
weights[4] * eval(in(2, 0)) + weights[5] * eval(in(3, 0))) /
51+
auto flx_x1 = (weight0 * eval(in(-2, 0)) + weight1 * eval(in(-1, 0)) +
52+
weight2 * eval(in(0, 0)) + weight3 * eval(in(1, 0)) +
53+
weight4 * eval(in(2, 0)) + weight5 * eval(in(3, 0))) /
5054
eval(dx());
51-
auto flx_y0 = (weights[0] * eval(in(0, -3)) + weights[1] * eval(in(0, -2)) +
52-
weights[2] * eval(in(0, -1)) + weights[3] * eval(in(0, 0)) +
53-
weights[4] * eval(in(0, 1)) + weights[5] * eval(in(0, 2))) /
55+
auto flx_y0 = (weight0 * eval(in(0, -3)) + weight1 * eval(in(0, -2)) +
56+
weight2 * eval(in(0, -1)) + weight3 * eval(in(0, 0)) +
57+
weight4 * eval(in(0, 1)) + weight5 * eval(in(0, 2))) /
5458
eval(dy());
55-
auto flx_y1 = (weights[0] * eval(in(0, -2)) + weights[1] * eval(in(0, -1)) +
56-
weights[2] * eval(in(0, 0)) + weights[3] * eval(in(0, 1)) +
57-
weights[4] * eval(in(0, 2)) + weights[5] * eval(in(0, 3))) /
59+
auto flx_y1 = (weight0 * eval(in(0, -2)) + weight1 * eval(in(0, -1)) +
60+
weight2 * eval(in(0, 0)) + weight3 * eval(in(0, 1)) +
61+
weight4 * eval(in(0, 2)) + weight5 * eval(in(0, 3))) /
5862
eval(dy());
5963

6064
flx_x0 = flx_x0 * (eval(in()) - eval(in(-1, 0))) < 0_r ? 0_r : flx_x0;

‎version.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.11.0
1+
0.12.0

0 commit comments

Comments
 (0)
Please sign in to comment.