210inline void initialize(GhostLayerField<
double, uint_t{13u}> *flux_field,
211 std::array<double, 13>
const &values) {
212 WALBERLA_FOR_ALL_CELLS_INCLUDING_GHOST_LAYER_XYZ(flux_field, {
213 double &xyz0 = flux_field->get(x, y, z, uint_t{0u});
214 flux_field->getF(&xyz0, uint_t{0u}) = values[0u];
215 flux_field->getF(&xyz0, uint_t{1u}) = values[1u];
216 flux_field->getF(&xyz0, uint_t{2u}) = values[2u];
217 flux_field->getF(&xyz0, uint_t{3u}) = values[3u];
218 flux_field->getF(&xyz0, uint_t{4u}) = values[4u];
219 flux_field->getF(&xyz0, uint_t{5u}) = values[5u];
220 flux_field->getF(&xyz0, uint_t{6u}) = values[6u];
221 flux_field->getF(&xyz0, uint_t{7u}) = values[7u];
222 flux_field->getF(&xyz0, uint_t{8u}) = values[8u];
223 flux_field->getF(&xyz0, uint_t{9u}) = values[9u];
224 flux_field->getF(&xyz0, uint_t{10u}) = values[10u];
225 flux_field->getF(&xyz0, uint_t{11u}) = values[11u];
226 flux_field->getF(&xyz0, uint_t{12u}) = values[12u];
247inline auto get_vector(GhostLayerField<
double, uint_t{13u}>
const *flux_field,
249 Vector3<double> result = Vector3<double>(0, 0, 0);
250 const double &xyz0 = flux_field->get(cell, uint_t{0u});
251 std::array<double, 27u> local_value;
253 local_value[0] = double(0.0);
254 local_value[1] = double(-0.5) * flux_field->getNeighbor(
255 cell.x(), cell.y(), cell.z(), uint_t{1u},
256 stencil::Direction(uint_t{1u}));
257 local_value[2] = double(0.5) * flux_field->getF(&xyz0, uint_t{1u});
258 local_value[3] = double(0.5) * flux_field->getF(&xyz0, uint_t{0u});
259 local_value[4] = double(-0.5) * flux_field->getNeighbor(
260 cell.x(), cell.y(), cell.z(), uint_t{0u},
261 stencil::Direction(uint_t{4u}));
262 local_value[5] = double(-0.5) * flux_field->getNeighbor(
263 cell.x(), cell.y(), cell.z(), uint_t{2u},
264 stencil::Direction(uint_t{5u}));
265 local_value[6] = double(0.5) * flux_field->getF(&xyz0, uint_t{2u});
266 local_value[7] = double(0.5) * flux_field->getF(&xyz0, uint_t{4u});
267 local_value[8] = double(-0.5) * flux_field->getNeighbor(
268 cell.x(), cell.y(), cell.z(), uint_t{3u},
269 stencil::Direction(uint_t{8u}));
270 local_value[9] = double(0.5) * flux_field->getF(&xyz0, uint_t{3u});
271 local_value[10] = double(-0.5) * flux_field->getNeighbor(
272 cell.x(), cell.y(), cell.z(), uint_t{4u},
273 stencil::Direction(uint_t{10u}));
274 local_value[11] = double(-0.5) * flux_field->getNeighbor(
275 cell.x(), cell.y(), cell.z(), uint_t{7u},
276 stencil::Direction(uint_t{11u}));
277 local_value[12] = double(0.5) * flux_field->getF(&xyz0, uint_t{8u});
278 local_value[13] = double(0.5) * flux_field->getF(&xyz0, uint_t{6u});
279 local_value[14] = double(-0.5) * flux_field->getNeighbor(
280 cell.x(), cell.y(), cell.z(), uint_t{5u},
281 stencil::Direction(uint_t{14u}));
282 local_value[15] = double(-0.5) * flux_field->getNeighbor(
283 cell.x(), cell.y(), cell.z(), uint_t{8u},
284 stencil::Direction(uint_t{15u}));
285 local_value[16] = double(0.5) * flux_field->getF(&xyz0, uint_t{7u});
286 local_value[17] = double(0.5) * flux_field->getF(&xyz0, uint_t{5u});
287 local_value[18] = double(-0.5) * flux_field->getNeighbor(
288 cell.x(), cell.y(), cell.z(), uint_t{6u},
289 stencil::Direction(uint_t{18u}));
290 local_value[19] = double(-0.5) * flux_field->getNeighbor(
291 cell.x(), cell.y(), cell.z(), uint_t{9u},
292 stencil::Direction(uint_t{19u}));
293 local_value[20] = double(0.5) * flux_field->getF(&xyz0, uint_t{12u});
295 double(-0.5) * flux_field->getNeighbor(cell.x(), cell.y(), cell.z(),
297 stencil::Direction(uint_t{21u}));
298 local_value[22] = double(0.5) * flux_field->getF(&xyz0, uint_t{10u});
300 double(-0.5) * flux_field->getNeighbor(cell.x(), cell.y(), cell.z(),
302 stencil::Direction(uint_t{23u}));
303 local_value[24] = double(0.5) * flux_field->getF(&xyz0, uint_t{11u});
305 double(-0.5) * flux_field->getNeighbor(cell.x(), cell.y(), cell.z(),
307 stencil::Direction(uint_t{25u}));
308 local_value[26] = double(0.5) * flux_field->getF(&xyz0, uint_t{9u});
310 result[1] += local_value[1] * 1;
312 result[1] += local_value[2] * -1;
314 result[0] += local_value[3] * -1;
316 result[0] += local_value[4] * 1;
318 result[2] += local_value[5] * 1;
320 result[2] += local_value[6] * -1;
322 result[0] += local_value[7] * -1;
323 result[1] += local_value[7] * 1;
325 result[0] += local_value[8] * 1;
326 result[1] += local_value[8] * 1;
328 result[0] += local_value[9] * -1;
329 result[1] += local_value[9] * -1;
331 result[0] += local_value[10] * 1;
332 result[1] += local_value[10] * -1;
334 result[1] += local_value[11] * 1;
335 result[2] += local_value[11] * 1;
337 result[1] += local_value[12] * -1;
338 result[2] += local_value[12] * 1;
340 result[0] += local_value[13] * -1;
341 result[2] += local_value[13] * 1;
343 result[0] += local_value[14] * 1;
344 result[2] += local_value[14] * 1;
346 result[1] += local_value[15] * 1;
347 result[2] += local_value[15] * -1;
349 result[1] += local_value[16] * -1;
350 result[2] += local_value[16] * -1;
352 result[0] += local_value[17] * -1;
353 result[2] += local_value[17] * -1;
355 result[0] += local_value[18] * 1;
356 result[2] += local_value[18] * -1;
358 result[0] += local_value[19] * 1;
359 result[1] += local_value[19] * 1;
360 result[2] += local_value[19] * 1;
362 result[0] += local_value[20] * -1;
363 result[1] += local_value[20] * 1;
364 result[2] += local_value[20] * 1;
366 result[0] += local_value[21] * 1;
367 result[1] += local_value[21] * -1;
368 result[2] += local_value[21] * 1;
370 result[0] += local_value[22] * -1;
371 result[1] += local_value[22] * -1;
372 result[2] += local_value[22] * 1;
374 result[0] += local_value[23] * 1;
375 result[1] += local_value[23] * 1;
376 result[2] += local_value[23] * -1;
378 result[0] += local_value[24] * -1;
379 result[1] += local_value[24] * 1;
380 result[2] += local_value[24] * -1;
382 result[0] += local_value[25] * 1;
383 result[1] += local_value[25] * -1;
384 result[2] += local_value[25] * -1;
386 result[0] += local_value[26] * -1;
387 result[1] += local_value[26] * -1;
388 result[2] += local_value[26] * -1;
393inline auto get_vector(GhostLayerField<
double, uint_t{13u}>
const *flux_field,
394 CellInterval
const &ci) {
395 std::vector<double> out;
396 out.reserve(ci.numCells() * uint_t(3u));
397 for (
auto x = ci.xMin(); x <= ci.xMax(); ++x) {
398 for (
auto y = ci.yMin(); y <= ci.yMax(); ++y) {
399 for (
auto z = ci.zMin(); z <= ci.zMax(); ++z) {
400 Vector3<double> result = Vector3<double>(0, 0, 0);
401 const double &xyz0 = flux_field->get(x, y, z, uint_t{0u});
402 std::array<double, 27u> local_value;
404 local_value[0] = double(0.0);
405 local_value[1] = double(-0.5) * flux_field->getNeighbor(
407 stencil::Direction(uint_t{1u}));
408 local_value[2] = double(0.5) * flux_field->getF(&xyz0, uint_t{1u});
409 local_value[3] = double(0.5) * flux_field->getF(&xyz0, uint_t{0u});
410 local_value[4] = double(-0.5) * flux_field->getNeighbor(
412 stencil::Direction(uint_t{4u}));
413 local_value[5] = double(-0.5) * flux_field->getNeighbor(
415 stencil::Direction(uint_t{5u}));
416 local_value[6] = double(0.5) * flux_field->getF(&xyz0, uint_t{2u});
417 local_value[7] = double(0.5) * flux_field->getF(&xyz0, uint_t{4u});
418 local_value[8] = double(-0.5) * flux_field->getNeighbor(
420 stencil::Direction(uint_t{8u}));
421 local_value[9] = double(0.5) * flux_field->getF(&xyz0, uint_t{3u});
422 local_value[10] = double(-0.5) * flux_field->getNeighbor(
424 stencil::Direction(uint_t{10u}));
425 local_value[11] = double(-0.5) * flux_field->getNeighbor(
427 stencil::Direction(uint_t{11u}));
428 local_value[12] = double(0.5) * flux_field->getF(&xyz0, uint_t{8u});
429 local_value[13] = double(0.5) * flux_field->getF(&xyz0, uint_t{6u});
430 local_value[14] = double(-0.5) * flux_field->getNeighbor(
432 stencil::Direction(uint_t{14u}));
433 local_value[15] = double(-0.5) * flux_field->getNeighbor(
435 stencil::Direction(uint_t{15u}));
436 local_value[16] = double(0.5) * flux_field->getF(&xyz0, uint_t{7u});
437 local_value[17] = double(0.5) * flux_field->getF(&xyz0, uint_t{5u});
438 local_value[18] = double(-0.5) * flux_field->getNeighbor(
440 stencil::Direction(uint_t{18u}));
441 local_value[19] = double(-0.5) * flux_field->getNeighbor(
443 stencil::Direction(uint_t{19u}));
444 local_value[20] = double(0.5) * flux_field->getF(&xyz0, uint_t{12u});
445 local_value[21] = double(-0.5) * flux_field->getNeighbor(
446 x, y, z, uint_t{11u},
447 stencil::Direction(uint_t{21u}));
448 local_value[22] = double(0.5) * flux_field->getF(&xyz0, uint_t{10u});
449 local_value[23] = double(-0.5) * flux_field->getNeighbor(
450 x, y, z, uint_t{10u},
451 stencil::Direction(uint_t{23u}));
452 local_value[24] = double(0.5) * flux_field->getF(&xyz0, uint_t{11u});
453 local_value[25] = double(-0.5) * flux_field->getNeighbor(
454 x, y, z, uint_t{12u},
455 stencil::Direction(uint_t{25u}));
456 local_value[26] = double(0.5) * flux_field->getF(&xyz0, uint_t{9u});
458 result[1] += local_value[1] * 1;
460 result[1] += local_value[2] * -1;
462 result[0] += local_value[3] * -1;
464 result[0] += local_value[4] * 1;
466 result[2] += local_value[5] * 1;
468 result[2] += local_value[6] * -1;
470 result[0] += local_value[7] * -1;
471 result[1] += local_value[7] * 1;
473 result[0] += local_value[8] * 1;
474 result[1] += local_value[8] * 1;
476 result[0] += local_value[9] * -1;
477 result[1] += local_value[9] * -1;
479 result[0] += local_value[10] * 1;
480 result[1] += local_value[10] * -1;
482 result[1] += local_value[11] * 1;
483 result[2] += local_value[11] * 1;
485 result[1] += local_value[12] * -1;
486 result[2] += local_value[12] * 1;
488 result[0] += local_value[13] * -1;
489 result[2] += local_value[13] * 1;
491 result[0] += local_value[14] * 1;
492 result[2] += local_value[14] * 1;
494 result[1] += local_value[15] * 1;
495 result[2] += local_value[15] * -1;
497 result[1] += local_value[16] * -1;
498 result[2] += local_value[16] * -1;
500 result[0] += local_value[17] * -1;
501 result[2] += local_value[17] * -1;
503 result[0] += local_value[18] * 1;
504 result[2] += local_value[18] * -1;
506 result[0] += local_value[19] * 1;
507 result[1] += local_value[19] * 1;
508 result[2] += local_value[19] * 1;
510 result[0] += local_value[20] * -1;
511 result[1] += local_value[20] * 1;
512 result[2] += local_value[20] * 1;
514 result[0] += local_value[21] * 1;
515 result[1] += local_value[21] * -1;
516 result[2] += local_value[21] * 1;
518 result[0] += local_value[22] * -1;
519 result[1] += local_value[22] * -1;
520 result[2] += local_value[22] * 1;
522 result[0] += local_value[23] * 1;
523 result[1] += local_value[23] * 1;
524 result[2] += local_value[23] * -1;
526 result[0] += local_value[24] * -1;
527 result[1] += local_value[24] * 1;
528 result[2] += local_value[24] * -1;
530 result[0] += local_value[25] * 1;
531 result[1] += local_value[25] * -1;
532 result[2] += local_value[25] * -1;
534 result[0] += local_value[26] * -1;
535 result[1] += local_value[26] * -1;
536 result[2] += local_value[26] * -1;
538 out.emplace_back(result[0u]);
539 out.emplace_back(result[1u]);
540 out.emplace_back(result[2u]);