Peano
Loading...
Searching...
No Matches
InterpolationRestriction.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
5
8
9
10namespace toolbox {
11 namespace blockstructured {
19 template <typename C>
22 int numberOfDoFsPerAxisInPatch,
23 int overlap,
24 int unknowns,
25 const double* __restrict__ coarseGridFaceValues,
26 double* __restrict__ fineGridFaceValues
27 ) {
29 marker,
30 numberOfDoFsPerAxisInPatch,
31 overlap,
32 unknowns,
33 C::NormalInterpolationMatrix1d,
34 C::TangentialInterpolationMatrix1d,
35 coarseGridFaceValues,
36 fineGridFaceValues
37 );
38 }
39
40
41 template <typename C>
44 int numberOfDoFsPerAxisInPatch,
45 int overlap,
46 int unknowns,
47 const double* __restrict__ coarseGridCellValues,
48 const double* __restrict__ coarseGridFaceValues,
49 double* __restrict__ fineGridFaceValues
50 ) {
52 marker,
53 numberOfDoFsPerAxisInPatch,
54 overlap,
55 unknowns,
56 C::NormalInterpolationMatrix1d,
57 C::TangentialInterpolationMatrix1d,
58 coarseGridCellValues,
59 coarseGridFaceValues,
60 fineGridFaceValues
61 );
62 }
63
64
65 template <typename C>
68 int numberOfDoFsPerAxisInPatch,
69 int overlap,
70 int unknowns,
71 const double* __restrict__ coarseGridCellValues,
72 const double* __restrict__ coarseGridFaceValues,
73 double* __restrict__ fineGridFaceValues
74 ) {
75 int normal = marker.getSelectedFaceNumber() % 3;
76 int patchIndexLinear = (Dimensions == 2) ? marker.getRelativePositionWithinFatherCell()((normal + 1) % Dimensions) : marker.getRelativePositionWithinFatherCell()((normal + 1) % Dimensions) * 3 + marker.getRelativePositionWithinFatherCell()((normal + 2) % Dimensions);
77
79 marker,
80 numberOfDoFsPerAxisInPatch,
81 overlap,
82 unknowns,
83 C::InterpolationData,
84 C::InterpolationColumnIndices,
85 C::InterpolationRowIndices,
86 coarseGridCellValues,
87 coarseGridFaceValues,
88 fineGridFaceValues
89 );
90 }
91
92 template <typename C>
95 int numberOfDoFsPerAxisInPatch,
96 int overlap,
97 int unknowns,
98 const double* __restrict__ coarseGridCellValues,
99 const double* __restrict__ coarseGridFaceValues,
100 double* __restrict__ fineGridFaceValues
101 ) {
103 marker,
104 numberOfDoFsPerAxisInPatch,
105 overlap,
106 unknowns,
107 coarseGridCellValues,
108 coarseGridFaceValues,
109 fineGridFaceValues
110 );
111 }
112
113 template <typename C>
116 int numberOfDoFsPerAxisInPatch,
117 int overlap,
118 int unknowns,
119 const double* __restrict__ coarseGridCellValues,
120 const double* __restrict__ coarseGridFaceValues,
121 double* __restrict__ fineGridFaceValues
122 ) {
124 marker,
125 numberOfDoFsPerAxisInPatch,
126 overlap,
127 unknowns,
128 coarseGridCellValues,
129 coarseGridFaceValues,
130 fineGridFaceValues
131 );
132 }
133
134
135 template <typename C>
138 int numberOfDoFsPerAxisInPatch,
139 int unknowns,
140 const double* __restrict__ coarseGridCellValues,
141 double* __restrict__ fineGridCellValues
142 ) {
144 marker,
145 numberOfDoFsPerAxisInPatch,
146 unknowns,
147 C::TangentialInterpolationMatrix1d,
148 coarseGridCellValues,
149 fineGridCellValues
150 );
151 }
152
153
154 template <typename C>
157 int numberOfDoFsPerAxisInPatch,
158 int unknowns,
159 double* fineGridValues,
160 double* coarseGridValues
161 ) {
163 marker,
164 numberOfDoFsPerAxisInPatch,
165 unknowns,
166 C::TangentialRestrictionMatrix1d,
167 fineGridValues,
168 coarseGridValues
169 );
170 }
171
172
173 template <typename C>
176 int numberOfDoFsPerAxisInPatch,
177 int unknowns,
178 const double* __restrict__ coarseGridCellValues,
179 double* __restrict__ fineGridCellValues
180 ) {
182 marker,
183 numberOfDoFsPerAxisInPatch,
184 unknowns,
185 C::InterpolationData,
186 C::InterpolationColumnIndices,
187 C::InterpolationRowIndices,
188 coarseGridCellValues,
189 fineGridCellValues
190 );
191 }
192
193 template <typename C>
196 int numberOfDoFsPerAxisInPatch,
197 int unknowns,
198 const double* __restrict__ coarseGridCellValues,
199 double* __restrict__ fineGridCellValues
200 ) {
202 marker,
203 numberOfDoFsPerAxisInPatch,
204 unknowns,
205 coarseGridCellValues,
206 fineGridCellValues
207 );
208 }
209
210 template <typename C>
213 int numberOfDoFsPerAxisInPatch,
214 int unknowns,
215 const double* __restrict__ coarseGridCellValues,
216 double* __restrict__ fineGridCellValues
217 ) {
219 marker,
220 numberOfDoFsPerAxisInPatch,
221 unknowns,
222 coarseGridCellValues,
223 fineGridCellValues
224 );
225 }
226
227
228 template <typename C>
231 int numberOfDoFsPerAxisInPatch,
232 int unknowns,
233 double* fineGridValues,
234 double* coarseGridValues
235 ) {
237 marker,
238 numberOfDoFsPerAxisInPatch,
239 unknowns,
240 C::RestrictionData,
241 C::RestrictionColumnIndices,
242 C::RestrictionRowIndices,
243 fineGridValues,
244 coarseGridValues
245 );
246 }
247
248 template <typename C>
251 int numberOfDoFsPerAxisInPatch,
252 int unknowns,
253 double* fineGridValues,
254 double* coarseGridValues
255 ) {
257 marker,
258 numberOfDoFsPerAxisInPatch,
259 unknowns,
260 fineGridValues,
261 coarseGridValues
262 );
263 }
264
265 template <typename C>
268 int numberOfDoFsPerAxisInPatch,
269 int unknowns,
270 double* fineGridValues,
271 double* coarseGridValues
272 ) {
274 marker,
275 numberOfDoFsPerAxisInPatch,
276 unknowns,
277 fineGridValues,
278 coarseGridValues
279 );
280 }
281
282
283 template <typename C>
286 int numberOfDoFsPerAxisInPatch,
287 int overlap,
288 int unknowns,
289 double* fineGridValues,
290 double* coarseGridValues
291 ) {
293 marker,
294 numberOfDoFsPerAxisInPatch,
295 overlap,
296 unknowns,
297 C::NormalRestrictionMatrix1d,
298 C::TangentialRestrictionMatrix1d,
299 fineGridValues,
300 coarseGridValues
301 );
302 }
303
304
305 template <typename C>
308 int numberOfDoFsPerAxisInPatch,
309 int overlap,
310 int unknowns,
311 double* fineGridValues,
312 double* coarseGridValues,
313 bool swapInsideOutside = false
314 ) {
316 marker,
317 numberOfDoFsPerAxisInPatch,
318 overlap,
319 unknowns,
320 C::NormalRestrictionMatrix1d,
321 C::TangentialRestrictionMatrix1d,
322 fineGridValues,
323 coarseGridValues,
324 swapInsideOutside
325 );
326 }
327
328
329 template <typename C>
332 int numberOfDoFsPerAxisInPatch,
333 int overlap,
334 int unknowns,
335 const double* __restrict__ coarseGridFaceValues,
336 double* __restrict__ fineGridFaceValues
337 ) {
338 int normal = marker.getSelectedFaceNumber() % 3;
339 int patchIndexLinear = (Dimensions == 2) ? marker.getRelativePositionWithinFatherCell()((normal + 1) % Dimensions) : marker.getRelativePositionWithinFatherCell()((normal + 1) % Dimensions) * 3 + marker.getRelativePositionWithinFatherCell()((normal + 2) % Dimensions);
340
342 marker,
343 numberOfDoFsPerAxisInPatch,
344 overlap,
345 unknowns,
346 C::InterpolationData,
347 C::InterpolationColumnIndices,
348 C::InterpolationRowIndices,
349 patchIndexLinear * C::InterpolationDataOffset,
350 patchIndexLinear * C::InterpolationRowIndicesOffset,
351 coarseGridFaceValues,
352 fineGridFaceValues
353 );
354 }
355
356
357 template <typename C>
360 int numberOfDoFsPerAxisInPatch,
361 int overlap,
362 int unknowns,
363 const double* __restrict__ coarseGridFaceValues,
364 double* __restrict__ fineGridFaceValues
365 ) {
367 marker,
368 numberOfDoFsPerAxisInPatch,
369 overlap,
370 unknowns,
371 coarseGridFaceValues,
372 fineGridFaceValues
373 );
374 }
375
376 template <typename C>
379 int numberOfDoFsPerAxisInPatch,
380 int overlap,
381 int unknowns,
382 const double* __restrict__ coarseGridFaceValues,
383 double* __restrict__ fineGridFaceValues
384 ) {
386 marker,
387 numberOfDoFsPerAxisInPatch,
388 overlap,
389 unknowns,
390 coarseGridFaceValues,
391 fineGridFaceValues
392 );
393 }
394
395
396 template <typename C>
399 int numberOfDoFsPerAxisInPatch,
400 int overlap,
401 int unknowns,
402 double* fineGridValues,
403 double* coarseGridValues
404 ) {
405 int normal = marker.getSelectedFaceNumber() % 3;
406 int patchIndexLinear = (Dimensions == 2) ? marker.getRelativePositionWithinFatherCell()((normal + 1) % Dimensions) : marker.getRelativePositionWithinFatherCell()((normal + 1) % Dimensions) + 3 * marker.getRelativePositionWithinFatherCell()((normal + 2) % Dimensions);
407
409 marker,
410 numberOfDoFsPerAxisInPatch,
411 overlap,
412 unknowns,
413 C::RestrictionData,
414 C::RestrictionColumnIndices,
415 C::RestrictionRowIndices,
416 patchIndexLinear * C::RestrictionDataOffset,
417 patchIndexLinear * C::RestrictionRowIndicesOffset,
418 fineGridValues,
419 coarseGridValues
420 );
421 }
422
423 template <typename C>
426 int numberOfDoFsPerAxisInPatch,
427 int overlap,
428 int unknowns,
429 double* fineGridValues,
430 double* coarseGridValues
431 ) {
433 marker,
434 numberOfDoFsPerAxisInPatch,
435 overlap,
436 unknowns,
437 fineGridValues,
438 coarseGridValues
439 );
440 }
441
442 template <typename C>
445 int numberOfDoFsPerAxisInPatch,
446 int overlap,
447 int unknowns,
448 double* fineGridValues,
449 double* coarseGridValues
450 ) {
452 marker,
453 numberOfDoFsPerAxisInPatch,
454 overlap,
455 unknowns,
456 fineGridValues,
457 coarseGridValues
458 );
459 }
460
461
462 template <typename C>
465 int numberOfDoFsPerAxisInPatch,
466 int overlap,
467 int unknowns,
468 double* fineGridValues,
469 double* coarseGridValues,
470 bool swapInsideOutside = false
471 ) {
472 int normal = marker.getSelectedFaceNumber() % 3;
473 int patchIndexLinear = (Dimensions == 2) ? marker.getRelativePositionWithinFatherCell()((normal + 1) % Dimensions) : marker.getRelativePositionWithinFatherCell()((normal + 1) % Dimensions) + 3 * marker.getRelativePositionWithinFatherCell()((normal + 2) % Dimensions);
474
476 marker,
477 numberOfDoFsPerAxisInPatch,
478 overlap,
479 unknowns,
480 C::RestrictionData,
481 C::RestrictionColumnIndices,
482 C::RestrictionRowIndices,
483 patchIndexLinear * C::RestrictionDataOffset,
484 patchIndexLinear * C::RestrictionRowIndicesOffset,
485 fineGridValues,
486 coarseGridValues,
487 swapInsideOutside
488 );
489 }
490
491 template <typename C>
494 int numberOfDoFsPerAxisInPatch,
495 int overlap,
496 int unknowns,
497 double* fineGridValues,
498 double* coarseGridValues,
499 bool swapInsideOutside = false
500 ) {
502 marker,
503 numberOfDoFsPerAxisInPatch,
504 overlap,
505 unknowns,
506 fineGridValues,
507 coarseGridValues,
508 swapInsideOutside
509 );
510 }
511
512 template <typename C>
515 int numberOfDoFsPerAxisInPatch,
516 int overlap,
517 int unknowns,
518 double* fineGridValues,
519 double* coarseGridValues,
520 bool swapInsideOutside = false
521 ) {
523 marker,
524 numberOfDoFsPerAxisInPatch,
525 overlap,
526 unknowns,
527 fineGridValues,
528 coarseGridValues,
529 swapInsideOutside
530 );
531 }
532
533 } // namespace blockstructured
534} // namespace toolbox
void restrictCell_AoS_matrix(const peano4::datamanagement::CellMarker &marker, int numberOfDoFsPerAxisInPatch, int unknowns, double *fineGridValues, double *coarseGridValues)
void restrictInnerHalfOfHaloLayer_AoS_matrix(const peano4::datamanagement::FaceMarker &marker, int numberOfDoFsPerAxisInPatch, int overlap, int unknowns, double *fineGridValues, double *coarseGridValues, bool swapInsideOutside=false)
void interpolateHaloLayer_AoS_tensor_product(const peano4::datamanagement::FaceMarker &marker, int numberOfDoFsPerAxisInPatch, int overlap, int unknowns, const double *__restrict__ coarseGridFaceValues, double *__restrict__ fineGridFaceValues)
This is a wrapper around the toolbox routines.
void interpolateCell_AoS_matrix(const peano4::datamanagement::CellMarker &marker, int numberOfDoFsPerAxisInPatch, int unknowns, const double *__restrict__ coarseGridCellValues, double *__restrict__ fineGridCellValues)
void restrictInnerHalfOfHaloLayer_AoS_third_order(const peano4::datamanagement::FaceMarker &marker, int numberOfDoFsPerAxisInPatch, int overlap, int unknowns, double *fineGridValues, double *coarseGridValues, bool swapInsideOutside=false)
void interpolateHaloLayer_AoS_matrix(const peano4::datamanagement::FaceMarker &marker, int numberOfDoFsPerAxisInPatch, int overlap, int unknowns, const double *__restrict__ coarseGridCellValues, const double *__restrict__ coarseGridFaceValues, double *__restrict__ fineGridFaceValues)
void restrictHaloLayer_AoS_matrix(const peano4::datamanagement::FaceMarker &marker, int numberOfDoFsPerAxisInPatch, int overlap, int unknowns, double *fineGridValues, double *coarseGridValues)
void restrictHaloLayer_AoS_third_order(const peano4::datamanagement::FaceMarker &marker, int numberOfDoFsPerAxisInPatch, int overlap, int unknowns, double *fineGridValues, double *coarseGridValues)
void restrictHaloLayer_AoS_tensor_product(const peano4::datamanagement::FaceMarker &marker, int numberOfDoFsPerAxisInPatch, int overlap, int unknowns, double *fineGridValues, double *coarseGridValues)
void restrictInnerHalfOfHaloLayer_AoS_second_order(const peano4::datamanagement::FaceMarker &marker, int numberOfDoFsPerAxisInPatch, int overlap, int unknowns, double *fineGridValues, double *coarseGridValues, bool swapInsideOutside=false)
void interpolateCell_AoS_tensor_product(const peano4::datamanagement::CellMarker &marker, int numberOfDoFsPerAxisInPatch, int unknowns, const double *__restrict__ coarseGridCellValues, double *__restrict__ fineGridCellValues)
void interpolateHaloLayer_AoS_third_order(const peano4::datamanagement::FaceMarker &marker, int numberOfDoFsPerAxisInPatch, int overlap, int unknowns, const double *__restrict__ coarseGridCellValues, const double *__restrict__ coarseGridFaceValues, double *__restrict__ fineGridFaceValues)
void interpolateHaloLayer_AoS_second_order(const peano4::datamanagement::FaceMarker &marker, int numberOfDoFsPerAxisInPatch, int overlap, int unknowns, const double *__restrict__ coarseGridCellValues, const double *__restrict__ coarseGridFaceValues, double *__restrict__ fineGridFaceValues)
void restrictCell_AoS_tensor_product(const peano4::datamanagement::CellMarker &marker, int numberOfDoFsPerAxisInPatch, int unknowns, double *fineGridValues, double *coarseGridValues)
void restrictCell_AoS_second_order(const peano4::datamanagement::CellMarker &marker, int numberOfDoFsPerAxisInPatch, int unknowns, double *fineGridValues, double *coarseGridValues)
void restrictCell_AoS_third_order(const peano4::datamanagement::CellMarker &marker, int numberOfDoFsPerAxisInPatch, int unknowns, double *fineGridValues, double *coarseGridValues)
void interpolateCell_AoS_third_order(const peano4::datamanagement::CellMarker &marker, int numberOfDoFsPerAxisInPatch, int unknowns, const double *__restrict__ coarseGridCellValues, double *__restrict__ fineGridCellValues)
void restrictInnerHalfOfHaloLayer_AoS_tensor_product(const peano4::datamanagement::FaceMarker &marker, int numberOfDoFsPerAxisInPatch, int overlap, int unknowns, double *fineGridValues, double *coarseGridValues, bool swapInsideOutside=false)
void restrictHaloLayer_AoS_second_order(const peano4::datamanagement::FaceMarker &marker, int numberOfDoFsPerAxisInPatch, int overlap, int unknowns, double *fineGridValues, double *coarseGridValues)
void interpolateCell_AoS_second_order(const peano4::datamanagement::CellMarker &marker, int numberOfDoFsPerAxisInPatch, int unknowns, const double *__restrict__ coarseGridCellValues, double *__restrict__ fineGridCellValues)
Provide information about selected face.
Definition FaceMarker.h:35