118 for (
int index = index_min; index < index_max; index++)
122 Int3 ijk = cut_cell_disc.
get_ijk(n);
137 double flux[6] = {0};
138 for (
int num_face = 0; num_face < 6; num_face++)
140 int dir = num_face%3;
141 int decalage = num_face/3;
142 int sign = decalage*2 -1;
144 int di_decale = sign*(dir == 0);
145 int dj_decale = sign*(dir == 1);
146 int dk_decale = sign*(dir == 2);
148 double f_dir = select_dir(dir, delta_y*delta_z, delta_x*delta_z, delta_x*delta_y);
150 double old_indicatrice_decale = cut_cell_disc.
get_interfaces().
I(i+di_decale,j+dj_decale,k+dk_decale);
151 bool decale_also_dying = (cut_cell_disc.
get_interfaces().phase_mourrante(phase, i+di_decale,j+dj_decale,k+dk_decale));
152 bool decale_also_nascent = (cut_cell_disc.
get_interfaces().phase_naissante(phase, i+di_decale,j+dj_decale,k+dk_decale));
153 bool decale_smaller = (phase == 0) ? (1 - old_indicatrice_decale) < (1 - old_indicatrice) : (old_indicatrice_decale) < (old_indicatrice);
154 if (decale_also_nascent || (decale_also_dying && decale_smaller))
160 flux[num_face] = f_dir*
dying_cells_flux(num_face, phase, n, cut_field_total_velocity, cut_field_temperature);
167 if ((std::abs(flux[0]) + std::abs(flux[1]) + std::abs(flux[2]) + std::abs(flux[3]) + std::abs(flux[4]) + std::abs(flux[5])) == 0)
169 for (
int num_face = 0; num_face < 6; num_face++)
171 int dir = num_face%3;
172 int decalage = num_face/3;
173 int sign = decalage*2 -1;
175 int di = decalage*(dir == 0);
176 int dj = decalage*(dir == 1);
177 int dk = decalage*(dir == 2);
178 int di_decale = sign*(dir == 0);
179 int dj_decale = sign*(dir == 1);
180 int dk_decale = sign*(dir == 2);
182 double f_dir = select_dir(dir, delta_y*delta_z, delta_x*delta_z, delta_x*delta_y);
184 double old_indicatrice_decale = cut_cell_disc.
get_interfaces().
I(i+di_decale,j+dj_decale,k+dk_decale);
185 bool decale_also_dying = (cut_cell_disc.
get_interfaces().phase_mourrante(phase, i+di_decale,j+dj_decale,k+dk_decale));
186 bool decale_also_nascent = (cut_cell_disc.
get_interfaces().phase_naissante(phase, i+di_decale,j+dj_decale,k+dk_decale));
187 bool decale_smaller = (phase == 0) ? (1 - old_indicatrice_decale) < (1 - old_indicatrice) : (old_indicatrice_decale) < (old_indicatrice);
188 if (decale_also_nascent || (decale_also_dying && decale_smaller))
194 int n_face = cut_cell_disc.
get_n_face(num_face, n, i, j, k);
198 if (surface_efficace > 0)
200 flux[num_face] = f_dir*surface_efficace;
206 assert((surface_efficace == 0) || (surface_efficace == 1));
207 if (surface_efficace > 0)
209 flux[num_face] = f_dir*surface_efficace;
234 assert(statut_diphasique_petit == statut_diphasique_naissant + 1);
237 for (
int index = index_min; index < index_max; index++)
241 Int3 ijk = cut_cell_disc.
get_ijk(n);
257 double flux[6] = {0};
258 for (
int num_face = 0; num_face < 6; num_face++)
260 int dir = num_face%3;
261 int decalage = num_face/3;
262 int sign = decalage*2 -1;
264 int di_decale = sign*(dir == 0);
265 int dj_decale = sign*(dir == 1);
266 int dk_decale = sign*(dir == 2);
268 double f_dir = select_dir(dir, delta_y*delta_z, delta_x*delta_z, delta_x*delta_y);
270 double old_indicatrice_decale = cut_cell_disc.
get_interfaces().
I(i+di_decale,j+dj_decale,k+dk_decale);
271 double next_indicatrice_decale = cut_cell_disc.
get_interfaces().
In(i+di_decale,j+dj_decale,k+dk_decale);
272 bool decale_also_dying = (cut_cell_disc.
get_interfaces().phase_mourrante(phase, i+di_decale,j+dj_decale,k+dk_decale));
273 bool decale_nascent = (cut_cell_disc.
get_interfaces().phase_naissante(phase, i+di_decale,j+dj_decale,k+dk_decale));
275 bool decale_smaller = (phase == 0) ? (1 - next_indicatrice_decale) < (1 - next_indicatrice) : (next_indicatrice_decale) < (next_indicatrice);
276 if (decale_also_dying || (est_naissant && decale_nascent && decale_smaller) || ((!est_naissant) && decale_nascent) || ((!est_naissant) && decale_small && decale_smaller))
282 flux[num_face] = f_dir*
small_nascent_cells_flux(num_face, phase, n, cut_field_total_velocity, cut_field_temperature);
289 if ((std::abs(flux[0]) + std::abs(flux[1]) + std::abs(flux[2]) + std::abs(flux[3]) + std::abs(flux[4]) + std::abs(flux[5])) == 0)
291 for (
int num_face = 0; num_face < 6; num_face++)
293 int dir = num_face%3;
294 int decalage = num_face/3;
295 int sign = decalage*2 -1;
297 int di = decalage*(dir == 0);
298 int dj = decalage*(dir == 1);
299 int dk = decalage*(dir == 2);
300 int di_decale = sign*(dir == 0);
301 int dj_decale = sign*(dir == 1);
302 int dk_decale = sign*(dir == 2);
304 double f_dir = select_dir(dir, delta_y*delta_z, delta_x*delta_z, delta_x*delta_y);
306 double old_indicatrice_decale = cut_cell_disc.
get_interfaces().
I(i+di_decale,j+dj_decale,k+dk_decale);
307 double next_indicatrice_decale = cut_cell_disc.
get_interfaces().
In(i+di_decale,j+dj_decale,k+dk_decale);
308 bool decale_also_dying = (cut_cell_disc.
get_interfaces().phase_mourrante(phase, i+di_decale,j+dj_decale,k+dk_decale));
309 bool decale_nascent = (cut_cell_disc.
get_interfaces().phase_naissante(phase, i+di_decale,j+dj_decale,k+dk_decale));
311 bool decale_smaller = (phase == 0) ? (1 - next_indicatrice_decale) < (1 - next_indicatrice) : (next_indicatrice_decale) < (next_indicatrice);
312 if (decale_also_dying || (est_naissant && decale_nascent && decale_smaller) || ((!est_naissant) && decale_nascent) || ((!est_naissant) && decale_small && decale_smaller))
318 int n_face = cut_cell_disc.
get_n_face(num_face, n, i, j, k);
322 if (surface_efficace > 0)
324 flux[num_face] = f_dir*surface_efficace;
330 assert((surface_efficace == 0) || (surface_efficace == 1));
331 if (surface_efficace > 0)
333 flux[num_face] = f_dir*surface_efficace;
388 assert(statut_diphasique_petit == statut_diphasique_naissant + 1);
391 for (
int index = index_min; index < index_max; index++)
395 Int3 ijk = cut_cell_disc.
get_ijk(n);
410 double temp[6] = {0};
411 double flux[6] = {0};
412 double total_velocity[6] = {0};
413 for (
int num_face = 0; num_face < 6; num_face++)
415 int dir = num_face%3;
416 int decalage = num_face/3;
417 int sign = decalage*2 -1;
419 int di = decalage*(dir == 0);
420 int dj = decalage*(dir == 1);
421 int dk = decalage*(dir == 2);
422 int di_decale = sign*(dir == 0);
423 int dj_decale = sign*(dir == 1);
424 int dk_decale = sign*(dir == 2);
426 double f_dir = select_dir(dir, delta_y*delta_z, delta_x*delta_z, delta_x*delta_y);
428 double next_indicatrice_decale = cut_cell_disc.
get_interfaces().
In(i+di_decale,j+dj_decale,k+dk_decale);
430 double temperature_decale = -1e37;
431 int n_decale = cut_cell_disc.
get_n(i+di_decale, j+dj_decale, k+dk_decale);
434 temperature_decale = (phase == 0) ? cut_field_temperature.
diph_v_(n_decale) : cut_field_temperature.
diph_l_(n_decale);
441 total_velocity[num_face] = cut_field_total_velocity[dir].from_ijk_and_phase(i+di,j+dj,k+dk, phase);
443 int n_face = cut_cell_disc.
get_n_face(num_face, n, i, j, k);
447 double temperature = temperature_decale;
448 flux[num_face] = -sign*f_dir*surface_efficace*temperature*total_velocity[num_face];
449 if (est_directionnel)
451 flux[num_face] = (flux[num_face] < 0) ? 0. : flux[num_face];
453 temp[num_face] = temperature;
458 assert((surface_efficace == 0) || (surface_efficace == 1));
459 double temperature = temperature_decale;
460 flux[num_face] = -sign*f_dir*surface_efficace*temperature*total_velocity[num_face];
461 if (est_directionnel)
463 flux[num_face] = (flux[num_face] < 0) ? 0. : flux[num_face];
465 temp[num_face] = temperature;
470 if ((std::abs(flux[0]) + std::abs(flux[1]) + std::abs(flux[2]) + std::abs(flux[3]) + std::abs(flux[4]) + std::abs(flux[5])) == 0)
472 for (
int num_face = 0; num_face < 6; num_face++)
474 int dir = num_face%3;
475 int decalage = num_face/3;
476 int sign = decalage*2 -1;
478 int di = decalage*(dir == 0);
479 int dj = decalage*(dir == 1);
480 int dk = decalage*(dir == 2);
481 int di_decale = sign*(dir == 0);
482 int dj_decale = sign*(dir == 1);
483 int dk_decale = sign*(dir == 2);
485 double f_dir = select_dir(dir, delta_y*delta_z, delta_x*delta_z, delta_x*delta_y);
487 double next_indicatrice_decale = cut_cell_disc.
get_interfaces().
In(i+di_decale,j+dj_decale,k+dk_decale);
489 double temperature_decale = -1e37;
490 int n_decale = cut_cell_disc.
get_n(i+di_decale, j+dj_decale, k+dk_decale);
493 temperature_decale = (phase == 0) ? cut_field_temperature.
diph_v_(n_decale) : cut_field_temperature.
diph_l_(n_decale);
500 int n_face = cut_cell_disc.
get_n_face(num_face, n, i, j, k);
504 double temperature = temperature_decale;
505 flux[num_face] = f_dir*surface_efficace*temperature;
506 temp[num_face] = temperature;
511 assert((surface_efficace == 0) || (surface_efficace == 1));
512 double temperature = temperature_decale;
513 flux[num_face] = f_dir*surface_efficace*temperature;
514 temp[num_face] = temperature;
519 if ((std::abs(total_velocity[0]) + std::abs(total_velocity[1]) + std::abs(total_velocity[2]) + std::abs(total_velocity[3]) + std::abs(total_velocity[4]) + std::abs(total_velocity[5])) == 0)
522 valeur_remplissage(n) = DMINFLOAT+1;
524 if ((std::abs(temp[0]) + std::abs(temp[1]) + std::abs(temp[2]) + std::abs(temp[3]) + std::abs(temp[4]) + std::abs(temp[5])) < 1e-37)
527 valeur_remplissage(n) = 0;
531 double somme_T_flux = (temp[0]*std::abs(flux[0]) != 0.)*std::abs(flux[0]) + (temp[1]*std::abs(flux[1]) != 0.)*std::abs(flux[1]) + (temp[2]*std::abs(flux[2]) != 0.)*std::abs(flux[2]) + (temp[3]*std::abs(flux[3]) != 0.)*std::abs(flux[3]) + (temp[4]*std::abs(flux[4]) != 0.)*std::abs(flux[4]) + (temp[5]*std::abs(flux[5]) != 0.)*std::abs(flux[5]);
532 assert(somme_T_flux != 0.);
533 double val_remplissage = (temp[0]*std::abs(flux[0]) + temp[1]*std::abs(flux[1]) + temp[2]*std::abs(flux[2]) + temp[3]*std::abs(flux[3]) + temp[4]*std::abs(flux[4]) + temp[5]*std::abs(flux[5]))/somme_T_flux;
534 valeur_remplissage(n) = val_remplissage;
550 assert(statut_diphasique_petit == statut_diphasique_naissant + 1);
553 for (
int index = index_min; index < index_max; index++)
557 Int3 ijk = cut_cell_disc.
get_ijk(n);
581 double next_bary_deplace_x = next_bary_x - velocity_x*timestep;
582 double next_bary_deplace_y = next_bary_y - velocity_y*timestep;
583 double next_bary_deplace_z = next_bary_z - velocity_z*timestep;
585 int i_old = i +
static_cast <int>(std::floor(next_bary_deplace_x/dx));
586 int j_old = j +
static_cast <int>(std::floor(next_bary_deplace_y/dy));
587 int k_old = k +
static_cast <int>(std::floor(next_bary_deplace_z/dz));
588 assert(i-i_old >= -1 && i-i_old <= 1);
589 assert(j-j_old >= -1 && j-j_old <= 1);
590 assert(k-k_old >= -1 && k-k_old <= 1);
595 if (est_naissant && (i_old == i) && (j_old == j) && (k_old == k))
597 double ecart_x = std::abs(next_bary_deplace_x/dx - std::round(next_bary_deplace_x/dx));
598 double ecart_y = std::abs(next_bary_deplace_y/dy - std::round(next_bary_deplace_y/dy));
599 double ecart_z = std::abs(next_bary_deplace_z/dz - std::round(next_bary_deplace_z/dz));
600 int direction_a_modifier = (ecart_x <= ecart_y && ecart_x <= ecart_z) ? 0 : ((ecart_y <= ecart_x && ecart_y <= ecart_z) ? 1 : 2);
601 double next_bary_deplace_normalise = select_dir(direction_a_modifier, next_bary_deplace_x/dx, next_bary_deplace_y/dy, next_bary_deplace_z/dz);
602 bool ajout_positif = std::floor(next_bary_deplace_normalise) > .5;
604 if (direction_a_modifier == 0)
606 i_old += (2*ajout_positif - 1);
608 else if (direction_a_modifier == 1)
610 j_old += (2*ajout_positif - 1);
612 else if (direction_a_modifier == 2)
614 k_old += (2*ajout_positif - 1);
618 int n_old = cut_cell_disc.
get_n(i_old,j_old,k_old);
620 double old_bary_x = dx*((i_old - i) + cut_cell_disc.
get_interfaces().get_barycentre(
false, 0, phase, i_old,j_old,k_old));
621 double old_bary_y = dy*((j_old - j) + cut_cell_disc.
get_interfaces().get_barycentre(
false, 1, phase, i_old,j_old,k_old));
622 double old_bary_z = dz*((k_old - k) + cut_cell_disc.
get_interfaces().get_barycentre(
false, 2, phase, i_old,j_old,k_old));
626 Cerr <<
"Dans Cut_cell_schema_auxiliaire::calcule_valeur_remplissage_semi_lagrangien, on a n_old < 0." << finl;
627 Cerr <<
"Ce cas est normalement pas possible mais pourrait peut-etre survenir a cause de la correction avec 'est_naissant && (i_old == i) && (j_old == j) && (k_old == k)'" << finl;
628 Cerr <<
"Verification : est_naissant=" << est_naissant <<
" i=" << i <<
" j=" << j <<
" k=" << k <<
" i_old=" << i_old <<
" j_old=" << j_old <<
" k_old=" << k_old << finl;
632 double temperature_old = (n_old < 0) ? cut_field_temperature.
pure_(i_old,j_old,k_old) : ((phase == 0) ? cut_field_temperature.
diph_v_(n_old) : cut_field_temperature.
diph_l_(n_old));
633 double temperature_next = (phase == 0) ? cut_field_temperature.
diph_v_(n) : cut_field_temperature.
diph_l_(n);
634 if (temperature_next == 0.)
636 assert(temperature_old != 0);
638 assert(temperature_old != 0);
640 assert((flux_interface_ns(i,j,k) == 0.) || (surface_interface_old(i,j,k) != 0.));
641 double lambda = (phase == 0) ? lambda_vapour : lambda_liquid;
642 double dTdn = (flux_interface_ns(i,j,k) == 0.) ? 0. : flux_interface_ns(i,j,k)/(lambda * surface_interface_old(i,j,k));
643 assert((flux_interface_ns(i,j,k) == 0.) || (surface_interface_old(i,j,k) != 0));
644 valeur_remplissage(n) = temperature_old + dTdn * ((next_bary_deplace_x - old_bary_x)*normal_x + (next_bary_deplace_y - old_bary_y)*normal_y + (next_bary_deplace_z - old_bary_z)*normal_z);
652 int count_status_not_found = 0;
653 int count_status_below_10 = 0;
654 int count_status_below_100 = 0;
655 int count_status_below_1000 = 0;
656 int count_status_below_10000 = 0;
657 int count_status_below_100000 = 0;
658 int count_status_below_1000000 = 0;
659 int count_status_above_1000000 = 0;
667 assert(statut_diphasique_petit == statut_diphasique_naissant + 1);
670 for (
int index = index_min; index < index_max; index++)
674 Int3 ijk = cut_cell_disc.
get_ijk(n);
694 double next_bary_deplace_x = next_bary_x - velocity_x*timestep;
695 double next_bary_deplace_y = next_bary_y - velocity_y*timestep;
696 double next_bary_deplace_z = next_bary_z - velocity_z*timestep;
701 Vecteur3 coordinates(coordinates_x, coordinates_y, coordinates_z);
705 double temperature_interpolate = ijk_interpolate_cut_cell_using_interface(
false, phase, temperature_ft, cut_field_temperature, interfacial_temperature, coordinates, tolerate_not_within_tetrahedron, status);
706 valeur_remplissage(n) = temperature_interpolate;
710 Cerr <<
"DEBUG status=-1 T_remplissage=" << valeur_remplissage(n) << finl;
716 count_status_not_found++;
718 else if (status < 10)
720 count_status_below_10++;
722 else if (status < 100)
724 count_status_below_100++;
726 else if (status < 1000)
728 count_status_below_1000++;
730 else if (status < 10000)
732 count_status_below_10000++;
734 else if (status < 100000)
736 count_status_below_100000++;
738 else if (status < 1000000)
740 count_status_below_1000000++;
742 else if (status >= 1000000)
744 count_status_above_1000000++;
748 Cerr <<
"Un tel statut n'est pas possible." << finl;
753 Cerr <<
"Bilan des statuts pour Cut_cell_schema_auxiliaire::calcule_valeur_remplissage_semi_lagrangien_interpolate : " << finl;
754 Cerr <<
" -1 " << count_status_not_found << finl;
755 Cerr <<
" <10 " << count_status_below_10 << finl;
756 Cerr <<
" <100 " << count_status_below_100 << finl;
757 Cerr <<
" <1000 " << count_status_below_1000 << finl;
758 Cerr <<
" <10000 " << count_status_below_10000 << finl;
759 Cerr <<
" <100000 " << count_status_below_100000 << finl;
760 Cerr <<
" <1000000 " << count_status_below_1000000 << finl;
761 Cerr <<
">=1000000 " << count_status_above_1000000 << finl;
775 for (
int index = index_min; index < index_max; index++)
779 Int3 ijk = cut_cell_disc.
get_ijk(n);
797 double temperature_centre = (phase == 0) ? cut_field_temperature.
diph_v_(n) : cut_field_temperature.
diph_l_(n);
799 if (std::abs(temperature_centre) < 1e-24)
806 double quantite_totale = (phase == 0) ? -next_nonzero_indicatrice*cut_field_temperature.
diph_v_(n) : -next_nonzero_indicatrice*cut_field_temperature.
diph_l_(n);
809 double flux[6] = {
flux_naive_(n,0),
flux_naive_(n,1),
flux_naive_(n,2),
flux_naive_(n,3),
flux_naive_(n,4),
flux_naive_(n,5)};
813 assert(somme_flux != 0.);
816 assert((flux[0] != 0) || (flux[1] != 0) || (flux[2] != 0) || (flux[3] != 0) || (flux[4] != 0) || (flux[5] != 0));
818 for (
int num_face = 0; num_face < 6; num_face++)
820 if (flux[num_face] != 0.)
822 int dir = num_face%3;
823 int decalage = num_face/3;
824 int sign = decalage*2 -1;
826 int di_decale = sign*(dir == 0);
827 int dj_decale = sign*(dir == 1);
828 int dk_decale = sign*(dir == 2);
830 int n_decale = cut_cell_disc.
get_n(i+di_decale, j+dj_decale, k+dk_decale);
831 double next_nonzero_indicatrice_decale = cut_cell_disc.
get_interfaces().
In_nonzero(phase,i+di_decale,j+dj_decale,k+dk_decale);
838 cut_field_temperature.
diph_v_(n_decale) -= (flux[num_face]/somme_flux)*quantite_totale/next_nonzero_indicatrice_decale;
839 cut_field_temperature.
diph_v_(n) += (flux[num_face]/somme_flux)*quantite_totale/next_nonzero_indicatrice;
843 cut_field_temperature.
diph_l_(n_decale) -= (flux[num_face]/somme_flux)*quantite_totale/next_nonzero_indicatrice_decale;
844 cut_field_temperature.
diph_l_(n) += (flux[num_face]/somme_flux)*quantite_totale/next_nonzero_indicatrice;
849 cut_field_temperature.
pure_(i+di_decale,j+dj_decale,k+dk_decale) -= (flux[num_face]/somme_flux)*quantite_totale;
852 cut_field_temperature.
diph_v_(n) += (flux[num_face]/somme_flux)*quantite_totale/next_nonzero_indicatrice;
856 cut_field_temperature.
diph_l_(n) += (flux[num_face]/somme_flux)*quantite_totale/next_nonzero_indicatrice;
867 cut_field_current_fluxes[dir].diph_v_(n) += (flux[num_face]/somme_flux)*quantite_totale;
871 cut_field_current_fluxes[dir].diph_l_(n) += (flux[num_face]/somme_flux)*quantite_totale;
880 cut_field_current_fluxes[dir].diph_v_(n_decale) -= (flux[num_face]/somme_flux)*quantite_totale;
884 cut_field_current_fluxes[dir].diph_l_(n_decale) -= (flux[num_face]/somme_flux)*quantite_totale;
889 cut_field_current_fluxes[dir].pure_(i+di_decale,j+dj_decale,k+dk_decale) -= (flux[num_face]/somme_flux)*quantite_totale;
915 assert(statut_diphasique_petit == statut_diphasique_naissant + 1);
918 for (
int index = index_min; index < index_max; index++)
922 Int3 ijk = cut_cell_disc.
get_ijk(n);
937 double temperature_centre = (phase == 0) ? cut_field_temperature.
diph_v_(n) : cut_field_temperature.
diph_l_(n);
939 double quantite_totale = (phase == 0) ? (1 - next_indicatrice)*(val_remplissage - temperature_centre) : next_indicatrice*(val_remplissage - temperature_centre);
942 if (val_remplissage == DMINFLOAT+1)
946 assert((cut_field_total_velocity[0].from_ijk_and_phase(i,j,k, 0) == 0) && (cut_field_total_velocity[1].from_ijk_and_phase(i,j,k, 0) == 0) && (cut_field_total_velocity[2].from_ijk_and_phase(i,j,k, 0) == 0));
950 assert((cut_field_total_velocity[0].from_ijk_and_phase(i,j,k, 1) == 0) && (cut_field_total_velocity[1].from_ijk_and_phase(i,j,k, 1) == 0) && (cut_field_total_velocity[2].from_ijk_and_phase(i,j,k, 1) == 0));
955 if (std::abs(temperature_centre - val_remplissage) < 1e-24)
961 if ((std::abs(val_remplissage) > std::numeric_limits<double>::min()) && (std::abs(temperature_centre - val_remplissage)/val_remplissage) < 1e-24)
966 double flux[6] = {
flux_naive_(n,0),
flux_naive_(n,1),
flux_naive_(n,2),
flux_naive_(n,3),
flux_naive_(n,4),
flux_naive_(n,5)};
969 double flux_max[6] = {0};
970 double total_velocity[6] = {0};
971 for (
int num_face = 0; num_face < 6; num_face++)
973 int dir = num_face%3;
974 int decalage = num_face/3;
975 int sign = decalage*2 -1;
977 int di = decalage*(dir == 0);
978 int dj = decalage*(dir == 1);
979 int dk = decalage*(dir == 2);
980 int di_decale = sign*(dir == 0);
981 int dj_decale = sign*(dir == 1);
982 int dk_decale = sign*(dir == 2);
984 double old_indicatrice_decale = cut_cell_disc.
get_interfaces().
I(i+di_decale,j+dj_decale,k+dk_decale);
985 double next_indicatrice_decale = cut_cell_disc.
get_interfaces().
In(i+di_decale,j+dj_decale,k+dk_decale);
986 bool decale_also_dying = (cut_cell_disc.
get_interfaces().phase_mourrante(phase, i+di_decale,j+dj_decale,k+dk_decale));
987 bool decale_nascent = (cut_cell_disc.
get_interfaces().phase_naissante(phase, i+di_decale,j+dj_decale,k+dk_decale));
989 bool decale_smaller = (phase == 0) ? (1 - next_indicatrice_decale) < (1 - next_indicatrice) : (next_indicatrice_decale) < (next_indicatrice);
990 if (decale_also_dying || (est_naissant && decale_nascent && decale_smaller) || ((!est_naissant) && decale_nascent) || ((!est_naissant) && decale_small && decale_smaller))
992 flux_max[num_face] = 0;
996 double temperature_decale = -1e37;
997 int n_decale = cut_cell_disc.
get_n(i+di_decale, j+dj_decale, k+dk_decale);
1000 temperature_decale = (phase == 0) ? cut_field_temperature.
diph_v_(n_decale) : cut_field_temperature.
diph_l_(n_decale);
1007 total_velocity[num_face] = cut_field_total_velocity[dir].from_ijk_and_phase(i+di,j+dj,k+dk, phase);
1009 int n_face = cut_cell_disc.
get_n_face(num_face, n, i, j, k);
1013 if (surface_efficace > 0)
1015 double next_volume_decale = (phase == 0) ? 1 - next_indicatrice_decale : next_indicatrice_decale;
1016 double next_volume = (phase == 0) ? 1 - next_indicatrice : next_indicatrice;
1017 flux_max[num_face] = (temperature_decale - temperature_centre)/(1/next_volume_decale + 1/next_volume);
1018 flux_max[num_face] = flux[num_face] >= 0 ? std::max(0., flux_max[num_face]) : std::max(0., -flux_max[num_face]);
1024 assert((surface_efficace == 0) || (surface_efficace == 1));
1025 if (surface_efficace > 0)
1027 double next_volume_decale = (phase == 0) ? 1 - next_indicatrice_decale : next_indicatrice_decale;
1028 double next_volume = (phase == 0) ? 1 - next_indicatrice : next_indicatrice;
1029 flux_max[num_face] = (temperature_decale - temperature_centre)/(1/next_volume_decale + 1/next_volume);
1030 flux_max[num_face] = flux[num_face] >= 0 ? std::max(0., flux_max[num_face]) : std::max(0., -flux_max[num_face]);
1038 if ((std::abs(total_velocity[0]) + std::abs(total_velocity[1]) + std::abs(total_velocity[2]) + std::abs(total_velocity[3]) + std::abs(total_velocity[4]) + std::abs(total_velocity[5])) == 0)
1046 assert(somme_flux != 0.);
1047 if (somme_flux == 0.)
1054 assert((flux[0] != 0) || (flux[1] != 0) || (flux[2] != 0) || (flux[3] != 0) || (flux[4] != 0) || (flux[5] != 0));
1056 for (
int num_face = 0; num_face < 6; num_face++)
1058 if (flux[num_face] != 0.)
1060 int dir = num_face%3;
1061 int decalage = num_face/3;
1062 int sign = decalage*2 -1;
1064 int di_decale = sign*(dir == 0);
1065 int dj_decale = sign*(dir == 1);
1066 int dk_decale = sign*(dir == 2);
1068 int n_decale = cut_cell_disc.
get_n(i+di_decale, j+dj_decale, k+dk_decale);
1069 double next_indicatrice_decale = cut_cell_disc.
get_interfaces().
In(i+di_decale,j+dj_decale,k+dk_decale);
1074 cut_field_temperature.
diph_v_(n_decale) -= (flux[num_face]/somme_flux)*quantite_totale/(1 - next_indicatrice_decale);
1075 cut_field_temperature.
diph_v_(n) += (flux[num_face]/somme_flux)*quantite_totale/(1 - cut_cell_disc.
get_interfaces().
In(i,j,k));
1079 cut_field_temperature.
diph_l_(n_decale) -= (flux[num_face]/somme_flux)*quantite_totale/next_indicatrice_decale;
1080 cut_field_temperature.
diph_l_(n) += (flux[num_face]/somme_flux)*quantite_totale/cut_cell_disc.
get_interfaces().
In(i,j,k);
1085 assert((
int)next_indicatrice_decale == 1 - (
int)(1 - next_indicatrice_decale));
1087 cut_field_temperature.
pure_(i+di_decale,j+dj_decale,k+dk_decale) -= (flux[num_face]/somme_flux)*quantite_totale;
1090 cut_field_temperature.
diph_v_(n) += (flux[num_face]/somme_flux)*quantite_totale/(1 - cut_cell_disc.
get_interfaces().
In(i,j,k));
1094 cut_field_temperature.
diph_l_(n) += (flux[num_face]/somme_flux)*quantite_totale/cut_cell_disc.
get_interfaces().
In(i,j,k);
1105 cut_field_current_fluxes[dir].diph_v_(n) += (flux[num_face]/somme_flux)*quantite_totale;
1109 cut_field_current_fluxes[dir].pure_(i,j,k) += (flux[num_face]/somme_flux)*quantite_totale;
1114 cut_field_current_fluxes[dir].diph_l_(n) += (flux[num_face]/somme_flux)*quantite_totale;
1118 cut_field_current_fluxes[dir].pure_(i,j,k) += (flux[num_face]/somme_flux)*quantite_totale;
1128 cut_field_current_fluxes[dir].diph_v_(n_decale) -= (flux[num_face]/somme_flux)*quantite_totale;
1132 cut_field_current_fluxes[dir].diph_l_(n_decale) -= (flux[num_face]/somme_flux)*quantite_totale;
1137 cut_field_current_fluxes[dir].pure_(i+di_decale,j+dj_decale,k+dk_decale) -= (flux[num_face]/somme_flux)*quantite_totale;