Peano
Loading...
Searching...
No Matches
RiemannTest.cpp
Go to the documentation of this file.
1#include "RiemannTest.h"
2#include "TestUtils.h"
3#include "../Riemann.h"
4#include "../DGUtils.h"
6
8 tarch::tests::TestCase( "exahype2::dg::tests::RiemannTest" ) {
9}
10
12 testMethod( testProjectVolumetricDataOntoFacesForConstantSolutionOrder3 );
13 testMethod( testProjectVolumetricDataOntoFacesForConstantSolutionOrder0 );
14}
15
17 const int order = 3;
18 const int nodesPerAxis = order+1;
19 #if Dimensions==2
20 const int nodesPerCell = nodesPerAxis * nodesPerAxis;
21 #else
22 const int nodesPerCell = nodesPerAxis * nodesPerAxis * nodesPerAxis;
23 #endif
24 const int nodesPerFace = nodesPerCell/nodesPerAxis;
25
26 // 1 unknown, 1 auxiliary variable
27 double cellQin[2*nodesPerCell];
28 for(int i=0; i<2*nodesPerCell; i++){
29 cellQin[i] = i%2==0 ? 1.0 : -1.0;
30 }
31
32 // Values on the faces: left and right, one unknown, one auxiliary variable
33 double QxL[2*nodesPerFace*2];
34 double QxR[2*nodesPerFace*2];
35 double QyL[2*nodesPerFace*2];
36 double QyR[2*nodesPerFace*2];
37 double QzL[2*nodesPerFace*2];
38 double QzR[2*nodesPerFace*2];
39
40 for(int i=0; i<2*nodesPerFace*2;i++){
41 QxL[i] = 0.0;
42 QxR[i] = 0.0;
43 QyL[i] = 0.0;
44 QyR[i] = 0.0;
45 QzL[i] = 0.0;
46 QzR[i] = 0.0;
47 }
48
50 cellQin,
51 order,
52 1, // unknowns
53 1, // auxiliary variables
55 QxL,
56 QxR,
57 QyL,
58 QyR
59 #if Dimensions==3
60 ,QzL,
61 QzR
62 #endif
63 );
64
65 validateNumericalEquals( QxL[0], 0.0 );
66 validateNumericalEquals( QxL[1], 0.0 );
67 validateNumericalEquals( QxL[2], 1.0 );
68 validateNumericalEquals( QxL[3], -1.0 );
69 validateNumericalEquals( QxL[4], 0.0 );
70 validateNumericalEquals( QxL[5], 0.0 );
71 validateNumericalEquals( QxL[6], 1.0 );
72 validateNumericalEquals( QxL[7], -1.0 );
73 validateNumericalEquals( QxL[8], 0.0 );
74 validateNumericalEquals( QxL[9], 0.0 );
75 #if Dimensions==3
76 validateNumericalEquals( QxL[20], 0.0 );
77 validateNumericalEquals( QxL[21], 0.0 );
78 validateNumericalEquals( QxL[22], 1.0 );
79 validateNumericalEquals( QxL[23], -1.0 );
80 #endif
81
82 validateNumericalEquals( QxR[0], 1.0 );
83 validateNumericalEquals( QxR[1], -1.0 );
84 validateNumericalEquals( QxR[2], 0.0 );
85 validateNumericalEquals( QxR[3], 0.0 );
86 validateNumericalEquals( QxR[4], 1.0 );
87 validateNumericalEquals( QxR[5], -1.0 );
88 validateNumericalEquals( QxR[6], 0.0 );
89 validateNumericalEquals( QxR[7], 0.0 );
90 validateNumericalEquals( QxR[8], 1.0 );
91 validateNumericalEquals( QxR[9], -1.0 );
92
93 validateNumericalEquals( QyL[0], 0.0 );
94 validateNumericalEquals( QyL[1], 0.0 );
95 validateNumericalEquals( QyL[2], 0.0 );
96 validateNumericalEquals( QyL[3], 0.0 );
97 validateNumericalEquals( QyL[4], 0.0 );
98 validateNumericalEquals( QyL[5], 0.0 );
99 validateNumericalEquals( QyL[10], 1.0 );
100 validateNumericalEquals( QyL[11], -1.0 );
101 validateNumericalEquals( QyL[12], 1.0 );
102 validateNumericalEquals( QyL[13], -1.0 );
103 #if Dimensions==3
104 exahype2::enumerator::FaceAoSLexicographicEnumerator bottomTopFaceEnumerator(1,3+1,1,1,1);
105
106 validateEquals( bottomTopFaceEnumerator({0,0,0},0), 0 );
107 validateEquals( bottomTopFaceEnumerator({0,0,0},1), 1 );
108 validateEquals( bottomTopFaceEnumerator({1,0,0},0), 2 );
109 validateEquals( bottomTopFaceEnumerator({1,0,0},1), 3 );
110 validateEquals( bottomTopFaceEnumerator({0,1,0},0), 8 );
111 validateEquals( bottomTopFaceEnumerator({0,1,0},1), 9 );
112 validateEquals( bottomTopFaceEnumerator({1,1,0},0), 10 );
113 validateEquals( bottomTopFaceEnumerator({1,1,0},1), 11 );
114 validateEquals( bottomTopFaceEnumerator({2,1,0},0), 12 );
115 validateEquals( bottomTopFaceEnumerator({2,1,0},1), 13 );
116 validateEquals( bottomTopFaceEnumerator({3,1,0},0), 14 );
117 validateEquals( bottomTopFaceEnumerator({3,1,0},1), 15 );
118 validateEquals( bottomTopFaceEnumerator({0,0,1},0), 16 );
119 validateEquals( bottomTopFaceEnumerator({0,0,1},1), 17 );
120
121 validateNumericalEquals( QyL[16], 0.0 );
122 validateNumericalEquals( QyL[17], 0.0 );
123 validateNumericalEquals( QyL[18], 0.0 );
124 validateNumericalEquals( QyL[19], 0.0 );
125 validateNumericalEquals( QyL[20], 0.0 );
126 validateNumericalEquals( QyL[21], 0.0 );
127 validateNumericalEquals( QyL[24], 1.0 );
128 validateNumericalEquals( QyL[25], -1.0 );
129 validateNumericalEquals( QyL[26], 1.0 );
130 validateNumericalEquals( QyL[27], -1.0 );
131 #endif
132
133 #if Dimensions==3
134 validateNumericalEquals( QzL[0], 0.0 );
135 validateNumericalEquals( QzL[1], 0.0 );
136 validateNumericalEquals( QzL[2], 0.0 );
137 validateNumericalEquals( QzL[3], 0.0 );
138 validateNumericalEquals( QzL[4], 0.0 );
139 validateNumericalEquals( QzL[5], 0.0 );
140 validateNumericalEquals( QzL[32], 1.0 );
141 validateNumericalEquals( QzL[33], -1.0 );
142
143 validateNumericalEquals( QzR[0], 1.0 );
144 validateNumericalEquals( QzR[1], -1.0 );
145 #endif
146}
147
149 const int order = 0;
150
151 double QIn[] = {0.1,0.2,0.3,0.4,0.5};
152 double leftQ[] = {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
153 double rightQ[] = {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
154 double bottomQ[] = {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
155 double topQ[] = {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
156 #if Dimensions==3
157 double frontQ[] = {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
158 double backQ[] = {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
159 #endif
160
161 #if Dimensions==2
163 QIn,
164 0,
165 5,
166 0,
168 leftQ,
169 rightQ,
170 bottomQ,
171 topQ
172 );
173 #endif
174
175 #if Dimensions==3
177 QIn,
178 0,
179 5,
180 0,
182 leftQ,
183 rightQ,
184 bottomQ,
185 topQ,
186 frontQ,
187 backQ
188 );
189 #endif
190
191 validateNumericalEquals( leftQ[0], 0.0 );
192 validateNumericalEquals( leftQ[1], 0.0 );
193 validateNumericalEquals( leftQ[2], 0.0 );
194 validateNumericalEquals( leftQ[3], 0.0 );
195 validateNumericalEquals( leftQ[4], 0.0 );
196 validateNumericalEquals( leftQ[5], 0.1 );
197}
#define testMethod(name)
Run a test method and check for errors.
Definition TestMacros.h:24
#define validateNumericalEquals(actualValue, validValue)
Definition TestMacros.h:428
#define validateEquals(actualValue, validValue)
Definition TestMacros.h:299
void testProjectVolumetricDataOntoFacesForConstantSolutionOrder0()
Projection that's used if DG degenerates to a Finite Volumes scheme for the Euler equation,...
virtual void run() override
This routine is triggered by the TestCaseCollection.
void testProjectVolumetricDataOntoFacesForConstantSolutionOrder3()
Testing projection to faces by creating fully constant cell and ensuring that the projected values ar...
constexpr double BasisFunctionValuesLeftP3[]
Definition TestUtils.h:29
constexpr double BasisFunctionValuesLeftP0[]
Definition TestUtils.h:26
void projectVolumetricDataOntoFaces(const double *__restrict__ cellQ, int order, int unknowns, int auxiliaryVariables, const double *const __restrict__ BasisFunctionValuesLeft, double *const __restrict__ faceQLeft, double *const __restrict__ faceQRight, double *const __restrict__ faceQBottom, double *const __restrict__ faceQUp)
Take polynomial within cell and project it onto the faces.
Definition Riemann.cpp:167
Have to include this header, as I need access to the SYCL_EXTERNAL keyword.
Definition accelerator.h:19