Peano
Loading...
Searching...
No Matches
LoopBodies.h
Go to the documentation of this file.
1// This file is part of the ExaHyPE2 project. For conditions of distribution and
2// use, please see the copyright notice at www.peano-framework.org
3#pragma once
4
7#include "exahype2/Solver.h"
8#include "Functors.h"
12
14#pragma omp declare simd
15 template <class QInEnumeratorType, class QOutEnumeratorType>
18 const double* __restrict__ QIn,
19 const QInEnumeratorType& QInEnumerator,
20 int patchIndex,
21 const ::tarch::la::Vector<Dimensions, int>& volumeIndex,
22 int unknown,
23 double* __restrict__ QOut,
24 const QOutEnumeratorType& QOutEnumerator
25 ) InlineMethod {
26 QOut[QOutEnumerator(patchIndex, volumeIndex, unknown)] = QIn
27 [QInEnumerator(patchIndex, volumeIndex, unknown)];
28 };
29
30
31#pragma omp declare simd
32 template <
33 int NumberOfUnknowns,
34 int NumberOfAuxiliaryVariables,
35 class QInEnumeratorType,
36 class QOutEnumeratorType>
38 const double* __restrict__ QIn,
39 const QInEnumeratorType& QInEnumerator,
40 const SourceFunctor& sourceFunctor,
41 const ::tarch::la::Vector<Dimensions, double>& patchCentre,
42 const ::tarch::la::Vector<Dimensions, double>& patchSize,
43 int patchIndex,
44 const ::tarch::la::Vector<Dimensions, int>& volumeIndex,
45 double t,
46 double dt,
47 double* __restrict__ QOut,
48 const QOutEnumeratorType& QOutEnumerator
50
51
52#pragma omp declare simd
53 template <int NumberOfUnknowns, int NumberOfAuxiliaryVariables>
55 const double* __restrict__ QIn,
56 const enumerator::AoSLexicographicEnumerator& QInEnumerator,
57 const SourceFunctor& sourceFunctor,
58 const ::tarch::la::Vector<Dimensions, double>& patchCentre,
59 const ::tarch::la::Vector<Dimensions, double>& patchSize,
60 int patchIndex,
61 const ::tarch::la::Vector<Dimensions, int>& volumeIndex,
62 double t,
63 double dt,
64 double* __restrict__ QOut,
65 const enumerator::AoSLexicographicEnumerator& QOutEnumerator
67
68
69#pragma omp declare simd
70 template <class SolverType, class QInEnumeratorType, class QOutEnumeratorType>
73 const double* __restrict__ QIn,
74 const QInEnumeratorType& QInEnumerator,
75 const ::tarch::la::Vector<Dimensions, double>& patchCentre,
76 const ::tarch::la::Vector<Dimensions, double>& patchSize,
77 int patchIndex,
78 const ::tarch::la::Vector<Dimensions, int>& volumeIndex,
79 double t,
80 double dt,
81 double* __restrict__ QOut,
82 const QOutEnumeratorType& QOutEnumerator
84
85
86#pragma omp declare simd
87 template <class SolverType>
90 const double* __restrict__ QIn,
91 const enumerator::AoSLexicographicEnumerator& QInEnumerator,
92 const ::tarch::la::Vector<Dimensions, double>& patchCentre,
93 const ::tarch::la::Vector<Dimensions, double>& patchSize,
94 int patchIndex,
95 const ::tarch::la::Vector<Dimensions, int>& volumeIndex,
96 double t,
97 double dt,
98 double* __restrict__ QOut,
99 const enumerator::AoSLexicographicEnumerator& QOutEnumerator
100 ) InlineMethod;
101
102
103#pragma omp declare simd
104 template <
105 int NumberOfUnknowns,
106 int NumberOfAuxiliaryVariables,
107 class QInEnumeratorType,
108 class EigenvaluesEnumeratorType>
110 const double* __restrict__ QIn,
111 const QInEnumeratorType& QInEnumerator,
112 const EigenvaluesFunctor& eigenvaluesFunctor,
113 const ::tarch::la::Vector<Dimensions, double>& patchCentre,
114 const ::tarch::la::Vector<Dimensions, double>& patchSize,
115 int patchIndex,
116 const ::tarch::la::Vector<Dimensions, int>& volumeIndex,
117 double t,
118 double dt,
119 int normal,
120 double* __restrict__ eigenvalues,
121 const EigenvaluesEnumeratorType& eigenvaluesEnumerator
122 ) InlineMethod;
123
124
125#pragma omp declare simd
126 template <int NumberOfUnknowns, int NumberOfAuxiliaryVariables>
128 const double* __restrict__ QIn,
129 const enumerator::AoSLexicographicEnumerator& QInEnumerator,
130 const EigenvaluesFunctor& eigenvaluesFunctor,
131 const ::tarch::la::Vector<Dimensions, double>& patchCentre,
132 const ::tarch::la::Vector<Dimensions, double>& patchSize,
133 int patchIndex,
134 const ::tarch::la::Vector<Dimensions, int>& volumeIndex,
135 double t,
136 double dt,
137 int normal,
138 double* __restrict__ eigenvalues,
139 const enumerator::AoSLexicographicEnumerator& eigenvaluesEnumerator
140 ) InlineMethod;
141
142
143#pragma omp declare simd
144 template <
145 class SolverType,
146 class QInEnumeratorType,
147 class EigenvaluesEnumeratorType>
150 const double* __restrict__ QIn,
151 const QInEnumeratorType& QInEnumerator,
152 const ::tarch::la::Vector<Dimensions, double>& patchCentre,
153 const ::tarch::la::Vector<Dimensions, double>& patchSize,
154 int patchIndex,
155 const ::tarch::la::Vector<Dimensions, int>& volumeIndex,
156 double t,
157 double dt,
158 int normal,
159 double* __restrict__ eigenvalues,
160 const EigenvaluesEnumeratorType& eigenvaluesEnumerator
161 ) InlineMethod;
162
163
164#pragma omp declare simd
165 template <class SolverType>
168 const double* __restrict__ QIn,
169 const enumerator::AoSLexicographicEnumerator& QInEnumerator,
170 const ::tarch::la::Vector<Dimensions, double>& patchCentre,
171 const ::tarch::la::Vector<Dimensions, double>& patchSize,
172 int patchIndex,
173 const ::tarch::la::Vector<Dimensions, int>& volumeIndex,
174 double t,
175 double dt,
176 int normal,
177 double* __restrict__ eigenvalues,
178 const enumerator::AoSLexicographicEnumerator& eigenvaluesEnumerator
179 ) InlineMethod;
180
181
182#pragma omp declare simd
183 template <
184 int NumberOfUnknowns,
185 int NumberOfAuxiliaryVariables,
186 class QInEnumeratorType,
187 class FluxEnumeratorType>
189 const double* __restrict__ QIn,
190 const QInEnumeratorType& QInEnumerator,
191 const FluxFunctor& fluxFunctor,
192 const ::tarch::la::Vector<Dimensions, double>& patchCentre,
193 const ::tarch::la::Vector<Dimensions, double>& patchSize,
194 int patchIndex,
195 const ::tarch::la::Vector<Dimensions, int>& volumeIndex,
196 double t,
197 double dt,
198 int normal,
199 double* __restrict__ flux,
200 const FluxEnumeratorType& fluxEnumerator
201 ) InlineMethod;
202
203
204#pragma omp declare simd
205 template <int NumberOfUnknowns, int NumberOfAuxiliaryVariables>
207 const double* __restrict__ QIn,
208 const enumerator::AoSLexicographicEnumerator& QInEnumerator,
209 const FluxFunctor& fluxFunctor,
210 const ::tarch::la::Vector<Dimensions, double>& patchCentre,
211 const ::tarch::la::Vector<Dimensions, double>& patchSize,
212 int patchIndex,
213 const ::tarch::la::Vector<Dimensions, int>& volumeIndex,
214 double t,
215 double dt,
216 int normal,
217 double* __restrict__ flux,
218 const enumerator::AoSLexicographicEnumerator& fluxEnumerator
219 ) InlineMethod;
220
221
222#pragma omp declare simd
223 template <class SolverType, class QInEnumeratorType, class FluxEnumeratorType>
226 const double* __restrict__ QIn,
227 const QInEnumeratorType& QInEnumerator,
228 const ::tarch::la::Vector<Dimensions, double>& patchCentre,
229 const ::tarch::la::Vector<Dimensions, double>& patchSize,
230 int patchIndex,
231 const ::tarch::la::Vector<Dimensions, int>& volumeIndex,
232 double t,
233 double dt,
234 int normal,
235 double* __restrict__ flux,
236 const FluxEnumeratorType& fluxEnumerator
237 ) InlineMethod;
238
239
240#pragma omp declare simd
241 template <class SolverType, class FluxEnumeratorType>
244 const double* __restrict__ QIn,
245 const enumerator::AoSLexicographicEnumerator& QInEnumerator,
246 const ::tarch::la::Vector<Dimensions, double>& patchCentre,
247 const ::tarch::la::Vector<Dimensions, double>& patchSize,
248 int patchIndex,
249 const ::tarch::la::Vector<Dimensions, int>& volumeIndex,
250 double t,
251 double dt,
252 int normal,
253 double* __restrict__ flux,
254 const FluxEnumeratorType& fluxEnumerator
255 ) InlineMethod;
256
257
258#pragma omp declare simd
259 template <class SolverType>
262 const double* __restrict__ QIn,
263 const enumerator::AoSLexicographicEnumerator& QInEnumerator,
264 const ::tarch::la::Vector<Dimensions, double>& patchCentre,
265 const ::tarch::la::Vector<Dimensions, double>& patchSize,
266 int patchIndex,
267 const ::tarch::la::Vector<Dimensions, int>& volumeIndex,
268 double t,
269 double dt,
270 int normal,
271 double* __restrict__ flux,
272 const enumerator::AoSLexicographicEnumerator& fluxEnumerator
273 ) InlineMethod;
274
275
276#pragma omp declare simd
277 template <
278 int NumberOfUnknowns,
279 int NumberOfAuxiliaryVariables,
280 class QInEnumeratorType,
281 class NCPFaceEnumeratorType>
283 const double* __restrict__ QIn,
284 const QInEnumeratorType& QInEnumerator,
285 const NonconservativeProductFunctor& ncpFunctor,
286 const ::tarch::la::Vector<Dimensions, double>& patchCentre,
287 const ::tarch::la::Vector<Dimensions, double>& patchSize,
288 int patchIndex,
289 const ::tarch::la::Vector<Dimensions, int>& volumeIndex,
290 double t,
291 double dt,
292 int normal,
293 double* __restrict__ ncp,
294 const NCPFaceEnumeratorType& ncpEnumerator
295 ) InlineMethod;
296
297
298#pragma omp declare simd
299 template <
300 class SolverType,
301 class QInEnumeratorType,
302 class NCPFaceEnumeratorType>
305 const double* __restrict__ QIn,
306 const QInEnumeratorType& QInEnumerator,
307 const ::tarch::la::Vector<Dimensions, double>& patchCentre,
308 const ::tarch::la::Vector<Dimensions, double>& patchSize,
309 int patchIndex,
310 const ::tarch::la::Vector<Dimensions, int>& volumeIndex,
311 double t,
312 double dt,
313 int normal,
314 double* __restrict__ ncp,
315 const NCPFaceEnumeratorType& ncpEnumerator
316 ) InlineMethod;
317
318
319#pragma omp declare simd
320 template <class NCPFaceEnumeratorType, class QOutEnumeratorType>
323 const double* __restrict__ ncpX,
324 const double* __restrict__ ncpY,
325 const double* __restrict__ ncpZ,
326 const NCPFaceEnumeratorType& ncpEnumerator,
327 const ::tarch::la::Vector<Dimensions, double>& patchCentre,
328 const ::tarch::la::Vector<Dimensions, double>& patchSize,
329 int patchIndex,
330 const ::tarch::la::Vector<Dimensions, int>& volumeIndex,
331 int unknown,
332 double dt,
333 double* __restrict__ QOut,
334 const QOutEnumeratorType& QOutEnumerator
335 ) InlineMethod;
336
337
338#pragma omp declare simd
339 template <class NCPFaceEnumeratorType, class QOutEnumeratorType>
342 const double* __restrict__ ncp,
343 const NCPFaceEnumeratorType& ncpEnumerator,
344 const ::tarch::la::Vector<Dimensions, double>& patchCentre,
345 const ::tarch::la::Vector<Dimensions, double>& patchSize,
346 int patchIndex,
347 const ::tarch::la::Vector<Dimensions, int>& faceIndex,
348 int unknown,
349 double dt,
350 int normal,
351 double* __restrict__ QOut,
352 const QOutEnumeratorType& QOutEnumerator
353 ) InlineMethod;
354
355
356#pragma omp declare simd
357 template <int NumberOfUnknowns, int NumberOfAuxiliaryVariables>
359 const double* __restrict__ QIn,
360 const enumerator::AoSLexicographicEnumerator& QInEnumerator,
361 const RiemannFunctor& riemannFunctor,
362 const double* __restrict__ flux,
363 const enumerator::AoSLexicographicEnumerator& fluxEnumerator,
364 const double* __restrict__ eigenvalues,
365 const enumerator::AoSLexicographicEnumerator& eigenvaluesEnumerator,
366 const ::tarch::la::Vector<Dimensions, double>& patchCentre,
367 const ::tarch::la::Vector<Dimensions, double>& patchSize,
368 int patchIndex,
369 const ::tarch::la::Vector<Dimensions, int>& volumeIndex,
370 double t,
371 double dt,
372 int normal,
373 double* __restrict__ APDQ,
374 double* __restrict__ AMDQ,
375 const enumerator::AoSLexicographicEnumerator& DQEnumerator,
376 double* __restrict__ maxEigenvalue,
377 const enumerator::AoSLexicographicEnumerator& maxEigenvalueEnumerator
378 ) InlineMethod;
379
380
381#pragma omp declare simd
382 template <class SolverType>
385 const double* __restrict__ QIn,
386 const enumerator::AoSLexicographicEnumerator& QInEnumerator,
387 const double* __restrict__ flux,
388 const enumerator::AoSLexicographicEnumerator& fluxEnumerator,
389 const double* __restrict__ eigenvalues,
390 const enumerator::AoSLexicographicEnumerator& eigenvaluesEnumerator,
391 const ::tarch::la::Vector<Dimensions, double>& patchCentre,
392 const ::tarch::la::Vector<Dimensions, double>& patchSize,
393 int patchIndex,
394 const ::tarch::la::Vector<Dimensions, int>& volumeIndex,
395 double t,
396 double dt,
397 int normal,
398 double* __restrict__ APDQ,
399 double* __restrict__ AMDQ,
400 const enumerator::AoSLexicographicEnumerator& DQEnumerator,
401 double* __restrict__ maxEigenvalue,
402 const enumerator::AoSLexicographicEnumerator& maxEigenvalueEnumerator
403 ) InlineMethod;
404
405
406#pragma omp declare simd
407 template <class RiemannEnumeratorType, class QOutEnumeratorType>
409 const double* __restrict__ leftUpdatesX,
410 const double* __restrict__ rightUpdatesX,
411 const double* __restrict__ belowUpdatesY,
412 const double* __restrict__ aboveUpdatesY,
413 const double* __restrict__ backwardUpdatesZ,
414 const double* __restrict__ forwardUpdatesZ,
415 const RiemannEnumeratorType& riemannEnumerator,
416 const tarch::la::Vector<Dimensions, double>& patchCentre,
418 int patchIndex,
420 int unknown,
421 double dt,
422 double* __restrict__ QOut,
423 const QOutEnumeratorType& QOutEnumerator
424 ) InlineMethod;
425
426
427#pragma omp declare simd
429 const double* __restrict__ maxEigenvalueX,
430 const double* __restrict__ maxEigenvalueY,
431 const double* __restrict__ maxEigenvalueZ,
432 enumerator::AoSLexicographicEnumerator maxEigenvalueEnumerator,
433 int patchIndex,
435 ) InlineMethod;
436} // namespace exahype2::fv::riemann::loopbodies
437
438#include "LoopBodies.cpph"
#define KeywordToAvoidDuplicateSymbolsForInlinedFunctions
Definition LinuxAMD.h:31
#define GPUCallableInlineMethod
Definition accelerator.h:37
KeywordToAvoidDuplicateSymbolsForInlinedFunctions GPUCallableInlineMethod void copySolution(const double *__restrict__ QIn, const QInEnumeratorType &QInEnumerator, int patchIndex, const ::tarch::la::Vector< Dimensions, int > &volumeIndex, int unknown, double *__restrict__ QOut, const QOutEnumeratorType &QOutEnumerator) InlineMethod
Definition LoopBodies.h:17
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void copySolutionAndAddSourceTerm(const double *__restrict__ QIn, const QInEnumeratorType &QInEnumerator, const SourceFunctor &sourceFunctor, const ::tarch::la::Vector< Dimensions, double > &patchCentre, const ::tarch::la::Vector< Dimensions, double > &patchSize, int patchIndex, const ::tarch::la::Vector< Dimensions, int > &volumeIndex, double t, double dt, double *__restrict__ QOut, const QOutEnumeratorType &QOutEnumerator) InlineMethod
KeywordToAvoidDuplicateSymbolsForInlinedFunctions GPUCallableInlineMethod void updateSolutionWithNonconservativeFlux(const double *__restrict__ ncpX, const double *__restrict__ ncpY, const double *__restrict__ ncpZ, const NCPFaceEnumeratorType &ncpEnumerator, const ::tarch::la::Vector< Dimensions, double > &patchCentre, const ::tarch::la::Vector< Dimensions, double > &patchSize, int patchIndex, const ::tarch::la::Vector< Dimensions, int > &volumeIndex, int unknown, double dt, double *__restrict__ QOut, const QOutEnumeratorType &QOutEnumerator) InlineMethod
KeywordToAvoidDuplicateSymbolsForInlinedFunctions double reduceMaxEigenvalue(const double *__restrict__ maxEigenvalueX, const double *__restrict__ maxEigenvalueY, const double *__restrict__ maxEigenvalueZ, enumerator::AoSLexicographicEnumerator maxEigenvalueEnumerator, int patchIndex, const tarch::la::Vector< Dimensions, int > &volumeIndex) InlineMethod
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void computeRiemannSolution(const double *__restrict__ QIn, const enumerator::AoSLexicographicEnumerator &QInEnumerator, const RiemannFunctor &riemannFunctor, const double *__restrict__ flux, const enumerator::AoSLexicographicEnumerator &fluxEnumerator, const double *__restrict__ eigenvalues, const enumerator::AoSLexicographicEnumerator &eigenvaluesEnumerator, const ::tarch::la::Vector< Dimensions, double > &patchCentre, const ::tarch::la::Vector< Dimensions, double > &patchSize, int patchIndex, const ::tarch::la::Vector< Dimensions, int > &volumeIndex, double t, double dt, int normal, double *__restrict__ APDQ, double *__restrict__ AMDQ, const enumerator::AoSLexicographicEnumerator &DQEnumerator, double *__restrict__ maxEigenvalue, const enumerator::AoSLexicographicEnumerator &maxEigenvalueEnumerator) InlineMethod
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void computeEigenvalues(const double *__restrict__ QIn, const QInEnumeratorType &QInEnumerator, const EigenvaluesFunctor &eigenvaluesFunctor, const ::tarch::la::Vector< Dimensions, double > &patchCentre, const ::tarch::la::Vector< Dimensions, double > &patchSize, int patchIndex, const ::tarch::la::Vector< Dimensions, int > &volumeIndex, double t, double dt, int normal, double *__restrict__ eigenvalues, const EigenvaluesEnumeratorType &eigenvaluesEnumerator) InlineMethod
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void updateSolutionWithRiemannSolution(const double *__restrict__ leftUpdatesX, const double *__restrict__ rightUpdatesX, const double *__restrict__ belowUpdatesY, const double *__restrict__ aboveUpdatesY, const double *__restrict__ backwardUpdatesZ, const double *__restrict__ forwardUpdatesZ, const RiemannEnumeratorType &riemannEnumerator, const tarch::la::Vector< Dimensions, double > &patchCentre, const tarch::la::Vector< Dimensions, double > &patchSize, int patchIndex, const tarch::la::Vector< Dimensions, int > &volumeIndex, int unknown, double dt, double *__restrict__ QOut, const QOutEnumeratorType &QOutEnumerator) InlineMethod
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void computeFlux(const double *__restrict__ QIn, const QInEnumeratorType &QInEnumerator, const FluxFunctor &fluxFunctor, const ::tarch::la::Vector< Dimensions, double > &patchCentre, const ::tarch::la::Vector< Dimensions, double > &patchSize, int patchIndex, const ::tarch::la::Vector< Dimensions, int > &volumeIndex, double t, double dt, int normal, double *__restrict__ flux, const FluxEnumeratorType &fluxEnumerator) InlineMethod
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void computeNonconservativeFlux(const double *__restrict__ QIn, const QInEnumeratorType &QInEnumerator, const NonconservativeProductFunctor &ncpFunctor, const ::tarch::la::Vector< Dimensions, double > &patchCentre, const ::tarch::la::Vector< Dimensions, double > &patchSize, int patchIndex, const ::tarch::la::Vector< Dimensions, int > &volumeIndex, double t, double dt, int normal, double *__restrict__ ncp, const NCPFaceEnumeratorType &ncpEnumerator) InlineMethod
std::function< double( const double *__restrict__ QR, const double *__restrict__ QL, const double *__restrict__ FR, const double *__restrict__ FL, const double *__restrict__ LR, const double *__restrict__ LL, const tarch::la::Vector< Dimensions, double > &xR, const tarch::la::Vector< Dimensions, double > &xL, const tarch::la::Vector< Dimensions, double > &h, double t, double dt, int normal, double *__restrict__ APDQ, double *__restrict__ AMDQ)> RiemannFunctor
Definition Functors.h:52
std::function< void( const double *__restrict__ Q, const tarch::la::Vector< Dimensions, double > &x, const tarch::la::Vector< Dimensions, double > &h, double t, double dt, int normal, double *__restrict__ F)> FluxFunctor
Definition Functors.h:21
std::function< void( const double *__restrict__ Q, const double *__restrict__ deltaQ, const tarch::la::Vector< Dimensions, double > &x, const tarch::la::Vector< Dimensions, double > &h, double t, double dt, int normal, double *__restrict__ BTimesDeltaQ)> NonconservativeProductFunctor
Definition Functors.h:31
std::function< void( const double *__restrict__ Q, const tarch::la::Vector< Dimensions, double > &x, const tarch::la::Vector< Dimensions, double > &h, double t, double dt, int normal, double *__restrict__ L)> EigenvaluesFunctor
Definition Functors.h:42
std::function< void( const double *__restrict__ Q, const tarch::la::Vector< Dimensions, double > &x, const tarch::la::Vector< Dimensions, double > &h, double t, double dt, double *__restrict__ S)> SourceFunctor
Definition Functors.h:12
auto volumeIndex(Args... args)
Definition VolumeIndex.h:54
Simple vector class.
Definition Vector.h:134
#define InlineMethod
This is the marker that is to be used after the argument list of a function declaration.
Definition tarch.h:58