143 IBlock *
block, ConstBlockDataID flagFieldID,
144 FlagUID boundaryFlagUID, FlagUID domainFlagUID) {
150 auto *flagField =
block->getData<FlagField_T>(flagFieldID);
152 if (!(flagField->flagExists(boundaryFlagUID) &&
153 flagField->flagExists(domainFlagUID)))
156 auto boundaryFlag = flagField->getFlag(boundaryFlagUID);
157 auto domainFlag = flagField->getFlag(domainFlagUID);
159 auto inner = flagField->xyzSize();
160 inner.expand(cell_idx_t(-1));
162 indexVectorAll.clear();
163 indexVectorInner.clear();
164 indexVectorOuter.clear();
166 for (
auto it = flagField->beginWithGhostLayerXYZ(
167 cell_idx_c(flagField->nrOfGhostLayers() - 1));
168 it != flagField->end(); ++it) {
169 if (!isFlagSet(it, domainFlag))
172 if (isFlagSet(it.neighbor(0, 0, 0, 0), boundaryFlag)) {
173 auto element =
IndexInfo(it.x(), it.y(), it.z(), 0);
174 auto const InitialisationAdditionalData = elementInitialiser(
175 Cell(it.x() + 0, it.y() + 0, it.z() + 0), blocks, *
block);
176 element.vel_0 = InitialisationAdditionalData[0];
177 element.vel_1 = InitialisationAdditionalData[1];
178 element.vel_2 = InitialisationAdditionalData[2];
179 indexVectorAll.push_back(element);
180 if (
inner.contains(it.x(), it.y(), it.z()))
181 indexVectorInner.push_back(element);
183 indexVectorOuter.push_back(element);
187 for (
auto it = flagField->beginWithGhostLayerXYZ(
188 cell_idx_c(flagField->nrOfGhostLayers() - 1));
189 it != flagField->end(); ++it) {
190 if (!isFlagSet(it, domainFlag))
193 if (isFlagSet(it.neighbor(0, 1, 0, 0), boundaryFlag)) {
194 auto element =
IndexInfo(it.x(), it.y(), it.z(), 1);
195 auto const InitialisationAdditionalData = elementInitialiser(
196 Cell(it.x() + 0, it.y() + 1, it.z() + 0), blocks, *
block);
197 element.vel_0 = InitialisationAdditionalData[0];
198 element.vel_1 = InitialisationAdditionalData[1];
199 element.vel_2 = InitialisationAdditionalData[2];
200 indexVectorAll.push_back(element);
201 if (
inner.contains(it.x(), it.y(), it.z()))
202 indexVectorInner.push_back(element);
204 indexVectorOuter.push_back(element);
208 for (
auto it = flagField->beginWithGhostLayerXYZ(
209 cell_idx_c(flagField->nrOfGhostLayers() - 1));
210 it != flagField->end(); ++it) {
211 if (!isFlagSet(it, domainFlag))
214 if (isFlagSet(it.neighbor(0, -1, 0, 0), boundaryFlag)) {
215 auto element =
IndexInfo(it.x(), it.y(), it.z(), 2);
216 auto const InitialisationAdditionalData = elementInitialiser(
217 Cell(it.x() + 0, it.y() - 1, it.z() + 0), blocks, *
block);
218 element.vel_0 = InitialisationAdditionalData[0];
219 element.vel_1 = InitialisationAdditionalData[1];
220 element.vel_2 = InitialisationAdditionalData[2];
221 indexVectorAll.push_back(element);
222 if (
inner.contains(it.x(), it.y(), it.z()))
223 indexVectorInner.push_back(element);
225 indexVectorOuter.push_back(element);
229 for (
auto it = flagField->beginWithGhostLayerXYZ(
230 cell_idx_c(flagField->nrOfGhostLayers() - 1));
231 it != flagField->end(); ++it) {
232 if (!isFlagSet(it, domainFlag))
235 if (isFlagSet(it.neighbor(-1, 0, 0, 0), boundaryFlag)) {
236 auto element =
IndexInfo(it.x(), it.y(), it.z(), 3);
237 auto const InitialisationAdditionalData = elementInitialiser(
238 Cell(it.x() - 1, it.y() + 0, it.z() + 0), blocks, *
block);
239 element.vel_0 = InitialisationAdditionalData[0];
240 element.vel_1 = InitialisationAdditionalData[1];
241 element.vel_2 = InitialisationAdditionalData[2];
242 indexVectorAll.push_back(element);
243 if (
inner.contains(it.x(), it.y(), it.z()))
244 indexVectorInner.push_back(element);
246 indexVectorOuter.push_back(element);
250 for (
auto it = flagField->beginWithGhostLayerXYZ(
251 cell_idx_c(flagField->nrOfGhostLayers() - 1));
252 it != flagField->end(); ++it) {
253 if (!isFlagSet(it, domainFlag))
256 if (isFlagSet(it.neighbor(1, 0, 0, 0), boundaryFlag)) {
257 auto element =
IndexInfo(it.x(), it.y(), it.z(), 4);
258 auto const InitialisationAdditionalData = elementInitialiser(
259 Cell(it.x() + 1, it.y() + 0, it.z() + 0), blocks, *
block);
260 element.vel_0 = InitialisationAdditionalData[0];
261 element.vel_1 = InitialisationAdditionalData[1];
262 element.vel_2 = InitialisationAdditionalData[2];
263 indexVectorAll.push_back(element);
264 if (
inner.contains(it.x(), it.y(), it.z()))
265 indexVectorInner.push_back(element);
267 indexVectorOuter.push_back(element);
271 for (
auto it = flagField->beginWithGhostLayerXYZ(
272 cell_idx_c(flagField->nrOfGhostLayers() - 1));
273 it != flagField->end(); ++it) {
274 if (!isFlagSet(it, domainFlag))
277 if (isFlagSet(it.neighbor(0, 0, 1, 0), boundaryFlag)) {
278 auto element =
IndexInfo(it.x(), it.y(), it.z(), 5);
279 auto const InitialisationAdditionalData = elementInitialiser(
280 Cell(it.x() + 0, it.y() + 0, it.z() + 1), blocks, *
block);
281 element.vel_0 = InitialisationAdditionalData[0];
282 element.vel_1 = InitialisationAdditionalData[1];
283 element.vel_2 = InitialisationAdditionalData[2];
284 indexVectorAll.push_back(element);
285 if (
inner.contains(it.x(), it.y(), it.z()))
286 indexVectorInner.push_back(element);
288 indexVectorOuter.push_back(element);
292 for (
auto it = flagField->beginWithGhostLayerXYZ(
293 cell_idx_c(flagField->nrOfGhostLayers() - 1));
294 it != flagField->end(); ++it) {
295 if (!isFlagSet(it, domainFlag))
298 if (isFlagSet(it.neighbor(0, 0, -1, 0), boundaryFlag)) {
299 auto element =
IndexInfo(it.x(), it.y(), it.z(), 6);
300 auto const InitialisationAdditionalData = elementInitialiser(
301 Cell(it.x() + 0, it.y() + 0, it.z() - 1), blocks, *
block);
302 element.vel_0 = InitialisationAdditionalData[0];
303 element.vel_1 = InitialisationAdditionalData[1];
304 element.vel_2 = InitialisationAdditionalData[2];
305 indexVectorAll.push_back(element);
306 if (
inner.contains(it.x(), it.y(), it.z()))
307 indexVectorInner.push_back(element);
309 indexVectorOuter.push_back(element);
313 for (
auto it = flagField->beginWithGhostLayerXYZ(
314 cell_idx_c(flagField->nrOfGhostLayers() - 1));
315 it != flagField->end(); ++it) {
316 if (!isFlagSet(it, domainFlag))
319 if (isFlagSet(it.neighbor(-1, 1, 0, 0), boundaryFlag)) {
320 auto element =
IndexInfo(it.x(), it.y(), it.z(), 7);
321 auto const InitialisationAdditionalData = elementInitialiser(
322 Cell(it.x() - 1, it.y() + 1, it.z() + 0), blocks, *
block);
323 element.vel_0 = InitialisationAdditionalData[0];
324 element.vel_1 = InitialisationAdditionalData[1];
325 element.vel_2 = InitialisationAdditionalData[2];
326 indexVectorAll.push_back(element);
327 if (
inner.contains(it.x(), it.y(), it.z()))
328 indexVectorInner.push_back(element);
330 indexVectorOuter.push_back(element);
334 for (
auto it = flagField->beginWithGhostLayerXYZ(
335 cell_idx_c(flagField->nrOfGhostLayers() - 1));
336 it != flagField->end(); ++it) {
337 if (!isFlagSet(it, domainFlag))
340 if (isFlagSet(it.neighbor(1, 1, 0, 0), boundaryFlag)) {
341 auto element =
IndexInfo(it.x(), it.y(), it.z(), 8);
342 auto const InitialisationAdditionalData = elementInitialiser(
343 Cell(it.x() + 1, it.y() + 1, it.z() + 0), blocks, *
block);
344 element.vel_0 = InitialisationAdditionalData[0];
345 element.vel_1 = InitialisationAdditionalData[1];
346 element.vel_2 = InitialisationAdditionalData[2];
347 indexVectorAll.push_back(element);
348 if (
inner.contains(it.x(), it.y(), it.z()))
349 indexVectorInner.push_back(element);
351 indexVectorOuter.push_back(element);
355 for (
auto it = flagField->beginWithGhostLayerXYZ(
356 cell_idx_c(flagField->nrOfGhostLayers() - 1));
357 it != flagField->end(); ++it) {
358 if (!isFlagSet(it, domainFlag))
361 if (isFlagSet(it.neighbor(-1, -1, 0, 0), boundaryFlag)) {
362 auto element =
IndexInfo(it.x(), it.y(), it.z(), 9);
363 auto const InitialisationAdditionalData = elementInitialiser(
364 Cell(it.x() - 1, it.y() - 1, it.z() + 0), blocks, *
block);
365 element.vel_0 = InitialisationAdditionalData[0];
366 element.vel_1 = InitialisationAdditionalData[1];
367 element.vel_2 = InitialisationAdditionalData[2];
368 indexVectorAll.push_back(element);
369 if (
inner.contains(it.x(), it.y(), it.z()))
370 indexVectorInner.push_back(element);
372 indexVectorOuter.push_back(element);
376 for (
auto it = flagField->beginWithGhostLayerXYZ(
377 cell_idx_c(flagField->nrOfGhostLayers() - 1));
378 it != flagField->end(); ++it) {
379 if (!isFlagSet(it, domainFlag))
382 if (isFlagSet(it.neighbor(1, -1, 0, 0), boundaryFlag)) {
383 auto element =
IndexInfo(it.x(), it.y(), it.z(), 10);
384 auto const InitialisationAdditionalData = elementInitialiser(
385 Cell(it.x() + 1, it.y() - 1, it.z() + 0), blocks, *
block);
386 element.vel_0 = InitialisationAdditionalData[0];
387 element.vel_1 = InitialisationAdditionalData[1];
388 element.vel_2 = InitialisationAdditionalData[2];
389 indexVectorAll.push_back(element);
390 if (
inner.contains(it.x(), it.y(), it.z()))
391 indexVectorInner.push_back(element);
393 indexVectorOuter.push_back(element);
397 for (
auto it = flagField->beginWithGhostLayerXYZ(
398 cell_idx_c(flagField->nrOfGhostLayers() - 1));
399 it != flagField->end(); ++it) {
400 if (!isFlagSet(it, domainFlag))
403 if (isFlagSet(it.neighbor(0, 1, 1, 0), boundaryFlag)) {
404 auto element =
IndexInfo(it.x(), it.y(), it.z(), 11);
405 auto const InitialisationAdditionalData = elementInitialiser(
406 Cell(it.x() + 0, it.y() + 1, it.z() + 1), blocks, *
block);
407 element.vel_0 = InitialisationAdditionalData[0];
408 element.vel_1 = InitialisationAdditionalData[1];
409 element.vel_2 = InitialisationAdditionalData[2];
410 indexVectorAll.push_back(element);
411 if (
inner.contains(it.x(), it.y(), it.z()))
412 indexVectorInner.push_back(element);
414 indexVectorOuter.push_back(element);
418 for (
auto it = flagField->beginWithGhostLayerXYZ(
419 cell_idx_c(flagField->nrOfGhostLayers() - 1));
420 it != flagField->end(); ++it) {
421 if (!isFlagSet(it, domainFlag))
424 if (isFlagSet(it.neighbor(0, -1, 1, 0), boundaryFlag)) {
425 auto element =
IndexInfo(it.x(), it.y(), it.z(), 12);
426 auto const InitialisationAdditionalData = elementInitialiser(
427 Cell(it.x() + 0, it.y() - 1, it.z() + 1), blocks, *
block);
428 element.vel_0 = InitialisationAdditionalData[0];
429 element.vel_1 = InitialisationAdditionalData[1];
430 element.vel_2 = InitialisationAdditionalData[2];
431 indexVectorAll.push_back(element);
432 if (
inner.contains(it.x(), it.y(), it.z()))
433 indexVectorInner.push_back(element);
435 indexVectorOuter.push_back(element);
439 for (
auto it = flagField->beginWithGhostLayerXYZ(
440 cell_idx_c(flagField->nrOfGhostLayers() - 1));
441 it != flagField->end(); ++it) {
442 if (!isFlagSet(it, domainFlag))
445 if (isFlagSet(it.neighbor(-1, 0, 1, 0), boundaryFlag)) {
446 auto element =
IndexInfo(it.x(), it.y(), it.z(), 13);
447 auto const InitialisationAdditionalData = elementInitialiser(
448 Cell(it.x() - 1, it.y() + 0, it.z() + 1), blocks, *
block);
449 element.vel_0 = InitialisationAdditionalData[0];
450 element.vel_1 = InitialisationAdditionalData[1];
451 element.vel_2 = InitialisationAdditionalData[2];
452 indexVectorAll.push_back(element);
453 if (
inner.contains(it.x(), it.y(), it.z()))
454 indexVectorInner.push_back(element);
456 indexVectorOuter.push_back(element);
460 for (
auto it = flagField->beginWithGhostLayerXYZ(
461 cell_idx_c(flagField->nrOfGhostLayers() - 1));
462 it != flagField->end(); ++it) {
463 if (!isFlagSet(it, domainFlag))
466 if (isFlagSet(it.neighbor(1, 0, 1, 0), boundaryFlag)) {
467 auto element =
IndexInfo(it.x(), it.y(), it.z(), 14);
468 auto const InitialisationAdditionalData = elementInitialiser(
469 Cell(it.x() + 1, it.y() + 0, it.z() + 1), blocks, *
block);
470 element.vel_0 = InitialisationAdditionalData[0];
471 element.vel_1 = InitialisationAdditionalData[1];
472 element.vel_2 = InitialisationAdditionalData[2];
473 indexVectorAll.push_back(element);
474 if (
inner.contains(it.x(), it.y(), it.z()))
475 indexVectorInner.push_back(element);
477 indexVectorOuter.push_back(element);
481 for (
auto it = flagField->beginWithGhostLayerXYZ(
482 cell_idx_c(flagField->nrOfGhostLayers() - 1));
483 it != flagField->end(); ++it) {
484 if (!isFlagSet(it, domainFlag))
487 if (isFlagSet(it.neighbor(0, 1, -1, 0), boundaryFlag)) {
488 auto element =
IndexInfo(it.x(), it.y(), it.z(), 15);
489 auto const InitialisationAdditionalData = elementInitialiser(
490 Cell(it.x() + 0, it.y() + 1, it.z() - 1), blocks, *
block);
491 element.vel_0 = InitialisationAdditionalData[0];
492 element.vel_1 = InitialisationAdditionalData[1];
493 element.vel_2 = InitialisationAdditionalData[2];
494 indexVectorAll.push_back(element);
495 if (
inner.contains(it.x(), it.y(), it.z()))
496 indexVectorInner.push_back(element);
498 indexVectorOuter.push_back(element);
502 for (
auto it = flagField->beginWithGhostLayerXYZ(
503 cell_idx_c(flagField->nrOfGhostLayers() - 1));
504 it != flagField->end(); ++it) {
505 if (!isFlagSet(it, domainFlag))
508 if (isFlagSet(it.neighbor(0, -1, -1, 0), boundaryFlag)) {
509 auto element =
IndexInfo(it.x(), it.y(), it.z(), 16);
510 auto const InitialisationAdditionalData = elementInitialiser(
511 Cell(it.x() + 0, it.y() - 1, it.z() - 1), blocks, *
block);
512 element.vel_0 = InitialisationAdditionalData[0];
513 element.vel_1 = InitialisationAdditionalData[1];
514 element.vel_2 = InitialisationAdditionalData[2];
515 indexVectorAll.push_back(element);
516 if (
inner.contains(it.x(), it.y(), it.z()))
517 indexVectorInner.push_back(element);
519 indexVectorOuter.push_back(element);
523 for (
auto it = flagField->beginWithGhostLayerXYZ(
524 cell_idx_c(flagField->nrOfGhostLayers() - 1));
525 it != flagField->end(); ++it) {
526 if (!isFlagSet(it, domainFlag))
529 if (isFlagSet(it.neighbor(-1, 0, -1, 0), boundaryFlag)) {
530 auto element =
IndexInfo(it.x(), it.y(), it.z(), 17);
531 auto const InitialisationAdditionalData = elementInitialiser(
532 Cell(it.x() - 1, it.y() + 0, it.z() - 1), blocks, *
block);
533 element.vel_0 = InitialisationAdditionalData[0];
534 element.vel_1 = InitialisationAdditionalData[1];
535 element.vel_2 = InitialisationAdditionalData[2];
536 indexVectorAll.push_back(element);
537 if (
inner.contains(it.x(), it.y(), it.z()))
538 indexVectorInner.push_back(element);
540 indexVectorOuter.push_back(element);
544 for (
auto it = flagField->beginWithGhostLayerXYZ(
545 cell_idx_c(flagField->nrOfGhostLayers() - 1));
546 it != flagField->end(); ++it) {
547 if (!isFlagSet(it, domainFlag))
550 if (isFlagSet(it.neighbor(1, 0, -1, 0), boundaryFlag)) {
551 auto element =
IndexInfo(it.x(), it.y(), it.z(), 18);
552 auto const InitialisationAdditionalData = elementInitialiser(
553 Cell(it.x() + 1, it.y() + 0, it.z() - 1), blocks, *
block);
554 element.vel_0 = InitialisationAdditionalData[0];
555 element.vel_1 = InitialisationAdditionalData[1];
556 element.vel_2 = InitialisationAdditionalData[2];
557 indexVectorAll.push_back(element);
558 if (
inner.contains(it.x(), it.y(), it.z()))
559 indexVectorInner.push_back(element);
561 indexVectorOuter.push_back(element);