63 void update(
const IJK_Field_double& old_indicatrice,
const IJK_Field_double& next_indicatrice);
117 inline int next_index_ijk_per(
int i,
int j,
int k,
int index,
int negative_ghost_size,
int positive_ghost_size)
const;
118 inline Int3
get_ijk(
int n)
const;
119 inline int get_n(
int i,
int j,
int k)
const;
120 inline int get_n_face(
int num_face,
int n,
int i,
int j,
int k)
const;
122 double indic_pure(
const int i,
const int j,
const int k)
const;
124 inline bool within_ghost(
int n,
int negative_ghost_size,
int positive_ghost_size)
const;
127 inline bool within_ghost_(
int n,
int negative_ghost_size,
int positive_ghost_size)
const;
313 int min_dir = ((index >= 16) ? 2 : ((index >= 10) ? 1 : 0));
315 assert(min_dir >= 0 && min_dir <=2);
316 for (
int dir_1 = min_dir; dir_1 < max_dir ; dir_1++)
318 if (ref_domaine_->get_periodic_flag(dir_1))
320 int n_dir_1 = ref_domaine_->get_nb_elem_local(dir_1);
321 int n_dir_tot_1 = ref_domaine_->get_nb_elem_tot(dir_1);
323 if (n_dir_1 == n_dir_tot_1)
325 int i_dir_1 = select_dir(dir_1, i, j, k);
327 if (i_dir_1 < positive_ghost_size)
329 int per_x = (dir_1 == 0)*1;
330 int per_y = (dir_1 == 1)*1;
331 int per_z = (dir_1 == 2)*1;
333 int next_index = per_x + per_y*3 + per_z*9;
334 if (next_index > index)
339 int per_x_debut_boucle_2 = per_x;
340 int per_y_debut_boucle_2 = per_y;
341 int per_z_debut_boucle_2 = per_z;
342 for (
int dir_2 = 0; dir_2 < dir_1 ; dir_2++)
344 if (ref_domaine_->get_periodic_flag(dir_2))
346 int n_dir_2 = ref_domaine_->get_nb_elem_local(dir_2);
347 int n_dir_tot_2 = ref_domaine_->get_nb_elem_tot(dir_2);
349 if (n_dir_2 == n_dir_tot_2)
351 int i_dir_2 = select_dir(dir_2, i, j, k);
353 if (i_dir_2 < positive_ghost_size)
355 per_x = per_x_debut_boucle_2 + (dir_2 == 0)*1;
356 per_y = per_y_debut_boucle_2 + (dir_2 == 1)*1;
357 per_z = per_z_debut_boucle_2 + (dir_2 == 2)*1;
359 next_index = per_x + per_y*3 + per_z*9;
360 if (next_index > index)
365 int per_x_debut_boucle_3 = per_x;
366 int per_y_debut_boucle_3 = per_y;
367 int per_z_debut_boucle_3 = per_z;
368 for (
int dir_3 = 0; dir_3 < dir_2 ; dir_3++)
370 if (ref_domaine_->get_periodic_flag(dir_3))
372 int n_dir_3 = ref_domaine_->get_nb_elem_local(dir_3);
373 int n_dir_tot_3 = ref_domaine_->get_nb_elem_tot(dir_3);
375 if (n_dir_3 == n_dir_tot_3)
377 int i_dir_3 = select_dir(dir_3, i, j, k);
379 if (i_dir_3 < positive_ghost_size)
381 per_x = per_x_debut_boucle_3 + (dir_3 == 0)*1;
382 per_y = per_y_debut_boucle_3 + (dir_3 == 1)*1;
383 per_z = per_z_debut_boucle_3 + (dir_3 == 2)*1;
385 next_index = per_x + per_y*3 + per_z*9;
386 if (next_index > index)
391 if (i_dir_3 >= n_dir_3 - negative_ghost_size)
393 per_x = per_x_debut_boucle_3 + (dir_3 == 0)*2;
394 per_y = per_y_debut_boucle_3 + (dir_3 == 1)*2;
395 per_z = per_z_debut_boucle_3 + (dir_3 == 2)*2;
397 next_index = per_x + per_y*3 + per_z*9;
398 if (next_index > index)
407 if (i_dir_2 >= n_dir_2 - negative_ghost_size)
409 per_x = per_x_debut_boucle_2 + (dir_2 == 0)*2;
410 per_y = per_y_debut_boucle_2 + (dir_2 == 1)*2;
411 per_z = per_z_debut_boucle_2 + (dir_2 == 2)*2;
413 next_index = per_x + per_y*3 + per_z*9;
414 if (next_index > index)
419 int per_x_debut_boucle_3 = per_x;
420 int per_y_debut_boucle_3 = per_y;
421 int per_z_debut_boucle_3 = per_z;
422 for (
int dir_3 = 0; dir_3 < dir_2 ; dir_3++)
424 if (ref_domaine_->get_periodic_flag(dir_3))
426 int n_dir_3 = ref_domaine_->get_nb_elem_local(dir_3);
427 int n_dir_tot_3 = ref_domaine_->get_nb_elem_tot(dir_3);
429 if (n_dir_3 == n_dir_tot_3)
431 int i_dir_3 = select_dir(dir_3, i, j, k);
433 if (i_dir_3 < positive_ghost_size)
435 per_x = per_x_debut_boucle_3 + (dir_3 == 0)*1;
436 per_y = per_y_debut_boucle_3 + (dir_3 == 1)*1;
437 per_z = per_z_debut_boucle_3 + (dir_3 == 2)*1;
439 next_index = per_x + per_y*3 + per_z*9;
440 if (next_index > index)
445 if (i_dir_3 >= n_dir_3 - negative_ghost_size)
447 per_x = per_x_debut_boucle_3 + (dir_3 == 0)*2;
448 per_y = per_y_debut_boucle_3 + (dir_3 == 1)*2;
449 per_z = per_z_debut_boucle_3 + (dir_3 == 2)*2;
451 next_index = per_x + per_y*3 + per_z*9;
452 if (next_index > index)
465 if (i_dir_1 >= n_dir_1 - negative_ghost_size)
467 int per_x = (dir_1 == 0)*2;
468 int per_y = (dir_1 == 1)*2;
469 int per_z = (dir_1 == 2)*2;
471 int next_index = per_x + per_y*3 + per_z*9;
472 if (next_index > index)
477 int per_x_debut_boucle_2 = per_x;
478 int per_y_debut_boucle_2 = per_y;
479 int per_z_debut_boucle_2 = per_z;
480 for (
int dir_2 = 0; dir_2 < dir_1 ; dir_2++)
482 if (ref_domaine_->get_periodic_flag(dir_2))
484 int n_dir_2 = ref_domaine_->get_nb_elem_local(dir_2);
485 int n_dir_tot_2 = ref_domaine_->get_nb_elem_tot(dir_2);
487 if (n_dir_2 == n_dir_tot_2)
489 int i_dir_2 = select_dir(dir_2, i, j, k);
491 if (i_dir_2 < positive_ghost_size)
493 per_x = per_x_debut_boucle_2 + (dir_2 == 0)*1;
494 per_y = per_y_debut_boucle_2 + (dir_2 == 1)*1;
495 per_z = per_z_debut_boucle_2 + (dir_2 == 2)*1;
497 next_index = per_x + per_y*3 + per_z*9;
498 if (next_index > index)
503 int per_x_debut_boucle_3 = per_x;
504 int per_y_debut_boucle_3 = per_y;
505 int per_z_debut_boucle_3 = per_z;
506 for (
int dir_3 = 0; dir_3 < dir_2 ; dir_3++)
508 if (ref_domaine_->get_periodic_flag(dir_3))
510 int n_dir_3 = ref_domaine_->get_nb_elem_local(dir_3);
511 int n_dir_tot_3 = ref_domaine_->get_nb_elem_tot(dir_3);
513 if (n_dir_3 == n_dir_tot_3)
515 int i_dir_3 = select_dir(dir_3, i, j, k);
517 if (i_dir_3 < positive_ghost_size)
519 per_x = per_x_debut_boucle_3 + (dir_3 == 0)*1;
520 per_y = per_y_debut_boucle_3 + (dir_3 == 1)*1;
521 per_z = per_z_debut_boucle_3 + (dir_3 == 2)*1;
523 next_index = per_x + per_y*3 + per_z*9;
524 if (next_index > index)
529 if (i_dir_3 >= n_dir_3 - negative_ghost_size)
531 per_x = per_x_debut_boucle_3 + (dir_3 == 0)*2;
532 per_y = per_y_debut_boucle_3 + (dir_3 == 1)*2;
533 per_z = per_z_debut_boucle_3 + (dir_3 == 2)*2;
535 next_index = per_x + per_y*3 + per_z*9;
536 if (next_index > index)
545 if (i_dir_2 >= n_dir_2 - negative_ghost_size)
547 per_x = per_x_debut_boucle_2 + (dir_2 == 0)*2;
548 per_y = per_y_debut_boucle_2 + (dir_2 == 1)*2;
549 per_z = per_z_debut_boucle_2 + (dir_2 == 2)*2;
551 next_index = per_x + per_y*3 + per_z*9;
552 if (next_index > index)
557 int per_x_debut_boucle_3 = per_x;
558 int per_y_debut_boucle_3 = per_y;
559 int per_z_debut_boucle_3 = per_z;
560 for (
int dir_3 = 0; dir_3 < dir_2 ; dir_3++)
562 if (ref_domaine_->get_periodic_flag(dir_3))
564 int n_dir_3 = ref_domaine_->get_nb_elem_local(dir_3);
565 int n_dir_tot_3 = ref_domaine_->get_nb_elem_tot(dir_3);
567 if (n_dir_3 == n_dir_tot_3)
569 int i_dir_3 = select_dir(dir_3, i, j, k);
571 if (i_dir_3 < positive_ghost_size)
573 per_x = per_x_debut_boucle_3 + (dir_3 == 0)*1;
574 per_y = per_y_debut_boucle_3 + (dir_3 == 1)*1;
575 per_z = per_z_debut_boucle_3 + (dir_3 == 2)*1;
577 next_index = per_x + per_y*3 + per_z*9;
578 if (next_index > index)
583 if (i_dir_3 >= n_dir_3 - negative_ghost_size)
585 per_x = per_x_debut_boucle_3 + (dir_3 == 0)*2;
586 per_y = per_y_debut_boucle_3 + (dir_3 == 1)*2;
587 per_z = per_z_debut_boucle_3 + (dir_3 == 2)*2;
589 next_index = per_x + per_y*3 + per_z*9;
590 if (next_index > index)