TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
ComputeValParCompoInCell.cpp
1/****************************************************************************
2* Copyright (c) 2015 - 2016, CEA
3* All rights reserved.
4*
5* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
6* 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7* 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
8* 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
9*
10* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
11* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
12* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
13*
14*****************************************************************************/
15
16#include <ComputeValParCompoInCell.h>
17#ifndef NUM_COMPO_INVALID
18#define NUM_COMPO_INVALID (-2000000000)
19#endif
20
21// Pour remplacer calculer_normale_et_bary_element_par_compo
23 const int num_compo,
24 const int elem,
25 double& surface_tot,
26 Vecteur3& normale,
27 Vecteur3& bary
28) const
29{
30 const Intersections_Elem_Facettes& intersections = mesh_->intersections_elem_facettes();
31 const IntTab& facettes = mesh_->facettes();
32 const DoubleTab& sommets = mesh_->sommets();
33 const ArrOfDouble& surface_facettes = mesh_->get_update_surface_facettes();
34 const DoubleTab& normale_facettes = mesh_->get_update_normale_facettes();
35 const ArrOfInt& compo_connexe = mesh_->compo_connexe_facettes();
36
37 int index = intersections.index_elem()[elem];
38 surface_tot = 0.;
39 normale = 0.;
40 bary = 0.;
41
42 if (index < 0)
43 return; // Aucune facette dans cet element.
44
45 // Boucle sur les facettes qui traversent l'element elem :
46 int count = 0;
47 int num_som = 0;
48 int fa7 = 0;
49 while (index >= 0)
50 {
51 const Intersections_Elem_Facettes_Data& data = intersections.data_intersection(index);
52 fa7 = data.numero_facette_;
53 const int icompo = compo_connexe[fa7];
54 if (icompo == num_compo)
55 {
56 const double surface_facette = surface_facettes[fa7];
57 const double surf = data.fraction_surface_intersection_ * surface_facette;
58 // Les coordonnees du barycentre de la fraction de facette :
59 Vecteur3 coord_barycentre_fraction(0., 0., 0.);
60 for (int dir = 0; dir < 3; dir++)
61 {
62 const double nx = normale_facettes(fa7, dir);
63 normale[dir] += nx * surf;
64 }
65 for (int isom = 0; isom < 3; isom++)
66 {
67 // numero du sommet dans le tableau sommets
68 num_som = facettes(fa7, isom);
69 // Coordonnees barycentriques du centre de gravite de l'intersection
70 // par rapport aux trois sommets de la facette.
71 const double bary_som = data.barycentre_[isom];
72 // pour avoir la courbure au centre du triangle
73 for (int dir = 0; dir < 3; dir++)
74 coord_barycentre_fraction[dir] += bary_som * sommets(num_som, dir);
75 }
76 coord_barycentre_fraction *= surf;
77 bary += coord_barycentre_fraction;
78 surface_tot += surf;
79 }
80 index = data.index_facette_suivante_;
81 count++;
82 }
83
84 if (surface_tot > 0.)
85 {
86 normale *= 1. / surface_tot;
87 bary *= 1. / surface_tot;
88 }
89 else
90 {
91 Cerr << " Trouble in "
92 "ComputeValParCompoInCell::calculer_normale_et_bary_element_pour_compo."
93 << finl;
94 Cerr << "L'element " << elem << " contient des facettes de surface totale "
95 << surface_tot << " nulle!" << finl;
96 for (int dir = 0; dir < 3; dir++)
97 {
98 bary[dir] = sommets(num_som, dir);
99 normale[dir] = normale_facettes(fa7, dir);
100 }
101 Cerr << "bary: " << bary[0] << " " << bary[1] << " " << bary[2] << finl;
102 Cerr << "normale: " << normale[0] << " " << normale[1] << " " << normale[2] << finl;
104
105 }
106
107 const double norm = normale[0] * normale[0] + normale[1] * normale[1] + normale[2] * normale[2];
108 if (norm < 0.9)
109 {
110 Cerr << " Dans calculer_normale_et_bary_element_pour_compo." << finl;
111 Cerr << "Petite : " << count << " facettes dans l'element " << elem << ". surface_tot = " << surface_tot
112 << "Norm**2 = " << norm << finl;
113 }
114}
115
117 IJK_Field_int& nb_compo_traversante,
123) const
124{
125
126 Cout << "Calcul moyennes de l'interface dans chaque cellule par compo" << finl;
127
128 // Initialisation a NUM_COMPO_INVALID signifie aucune compo presente.
129 nb_compo_traversante.data() = NUM_COMPO_INVALID;
130 // Peut-etre pas necessaire
131 for (int c = 0; c < max_authorized_nb_of_components_; c++)
132 {
133 // TODO: AYM verifier l'init
134 compos_traversantes[c].data() = NUM_COMPO_INVALID;
135 surface_par_compo[c].data() = 0.;
136 for (int compo = 0; compo < 3; compo++)
137 {
138 normale_par_compo[3 * c + compo].data() = 0.;
139 bary_par_compo[3 * c + compo].data() = 0.;
140 }
141 }
142
143 // Boucle sur les elements:
144 const int ni = ref_domaine_->get_nb_elem_local(DIRECTION_I);
145 const int nj = ref_domaine_->get_nb_elem_local(DIRECTION_J);
146 const int nk = ref_domaine_->get_nb_elem_local(DIRECTION_K);
147
148 ArrOfInt liste_composantes_connexes_dans_element;
149 for (int k = 0; k < nk; k++)
150 for (int j = 0; j < nj; j++)
151 for (int i = 0; i < ni; i++)
152 {
153 // A present, elle est dans le splitting :
154 const int elem = ref_domaine_->convert_ijk_cell_to_packed(i, j, k);
155 // Pour chaque element, est-il traverse par une ou plusieurs interface ?
156 // (seules les surfaces non-nulles sont comptees)
157 const int nb_compo_traversantes =
158 compute_list_compo_connex_in_element(elem, liste_composantes_connexes_dans_element);
159 if (nb_compo_traversantes > max_authorized_nb_of_components_)
160 {
161 Cerr << "ComputeValParCompoInCell::ajouter_terme_source_interfaces. Trop de "
162 "compo connexes dans "
163 << "l'element " << elem << "[ " << i << " " << j << " " << k << " "
164 << " ]" << finl;
165 Cerr << "Augmenter la taille max_authorized_nb_of_components_." << finl;
166 assert(0);
167 }
168
169 nb_compo_traversante(i, j, k) = nb_compo_traversantes;
170 // On boucle sur les composantes connexes trouvees dans l'element
171 for (int i_compo = 0; i_compo < nb_compo_traversantes; i_compo++)
172 {
173 const int num_compo = liste_composantes_connexes_dans_element[i_compo];
174 compos_traversantes[i_compo](i, j, k) = num_compo;
175
176 double indic;
177 calculer_indic_elem_pour_compo(num_compo, elem, indic);
178
179 double surface;
180 Vecteur3 normale;
181 Vecteur3 bary_facettes_dans_elem;
182 calculer_moyennes_interface_element_pour_compo(num_compo, elem, surface, normale, bary_facettes_dans_elem);
183
184 indic_par_compo[i_compo](i, j, k) = indic;
185 surface_par_compo[i_compo](i, j, k) = surface;
186 for (int dir = 0; dir < 3; dir++)
187 {
188 const int idx = i_compo * 3 + dir;
189 normale_par_compo[idx](i, j, k) = normale[dir];
190 bary_par_compo[idx](i, j, k) = bary_facettes_dans_elem[dir];
191 }
192 }
193 }
194
195
196 // Mise a jour des espaces virtuels :
197 nb_compo_traversante.echange_espace_virtuel(nb_compo_traversante.ghost());
198 compos_traversantes.echange_espace_virtuel();
199 surface_par_compo.echange_espace_virtuel();
200 indic_par_compo.echange_espace_virtuel();
201 normale_par_compo.echange_espace_virtuel();
202 bary_par_compo.echange_espace_virtuel();
203}
204
205
207 const double time,
208 const int itstep,
209 IJK_Field_int& nb_compo_trav,
216) // next()
217{
218
220 nb_compo_trav,
221 compos_trav,
222 normale_par_compo,
223 bary_par_compo,
224 indicatrice_par_compo,
225 surface_par_compo
226 );
227
228 // calcul courbure
230 mesh_->get_update_courbure_sommets(),
231 courbure_par_compo);
232}
234 const ArrOfDouble& val_on_sommet,
236{
237
238 const ArrOfInt& compo_connexe = mesh_->compo_connexe_facettes();
239 const Intersections_Elem_Facettes& intersections = mesh_->intersections_elem_facettes();
240 const IntTab& facettes = mesh_->facettes();
241 const ArrOfDouble& surface_facettes = mesh_->get_update_surface_facettes();
242 for (int c = 0; c < max_authorized_nb_of_components_; c++)
243 field_par_compo[c].data() = 0.;
244
245 // Boucle sur les elements:
246 const int ni = field_par_compo[0].ni();
247 const int nj = field_par_compo[0].nj();
248 const int nk = field_par_compo[0].nk();
249
250 ArrOfInt liste_composantes_connexes_dans_element;
251 liste_composantes_connexes_dans_element = 0;
252 for (int k = 0; k < nk; k++)
253 for (int j = 0; j < nj; j++)
254 for (int i = 0; i < ni; i++)
255 {
256 // A present, elle est dans le splitting :
257 const int elem = ref_domaine_->convert_ijk_cell_to_packed(i, j, k);
258 const int nb_compo_traversantes =
259 compute_list_compo_connex_in_element(elem, liste_composantes_connexes_dans_element);
260 // Pour chaque element, est-il traverse par une ou plusieurs interface ?
261 assert(nb_compo_traversantes < max_authorized_nb_of_components_);
262
263 // On boucle sur les composantes connexes trouvees dans l'element
264 for (int i_compo = 0; i_compo < nb_compo_traversantes; i_compo++)
265 {
266 const int num_compo = liste_composantes_connexes_dans_element[i_compo];
267 // Calcul de la moyenne de field dans l'element :
268 double moy_field = 0.;
269 int index = intersections.index_elem()[elem];
270 assert(index >= 0); // Aucune facette dans cet element.
271
272 double moy_field_fa7 = 0.;
273 // Boucle sur les facettes qui traversent l'element elem :
274 while (index >= 0)
275 {
276 const Intersections_Elem_Facettes_Data& data = intersections.data_intersection(index);
277 const int fa7 = data.numero_facette_;
278 const int icompo = compo_connexe[fa7];
279 moy_field_fa7 = 0.;
280 if (icompo == num_compo)
281 {
282 const double surface_facette = surface_facettes[fa7];
283 const double surf = data.fraction_surface_intersection_ * surface_facette;
284 // Les coordonnees du barycentre de la fraction de facette :
285 //Vecteur3 coord_barycentre_fraction(0., 0., 0.);
286 for (int isom = 0; isom < 3; isom++)
287 {
288 // numero du sommet dans le tableau sommets
289 const int num_som = facettes(fa7, isom);
290 const double val = val_on_sommet[num_som];
291 // Coordonnees barycentriques du centre de gravite de
292 // l'intersection par rapport aux trois sommets de la facette.
293 const double bary_som = data.barycentre_[isom];
294 // pour avoir la moyenne du champ au centre du triangle
295 moy_field_fa7 += bary_som * val;
296 }
297 moy_field += moy_field_fa7 * surf;
298 }
299 index = data.index_facette_suivante_;
300 }
301
302 field_par_compo[i_compo](i, j, k) = moy_field;
303 }
304 }
305
306 // Mise a jour des espaces virtuels :
307 field_par_compo.echange_espace_virtuel();
308}
309
311 const ArrOfDouble& val_on_sommet,
313{
314
315 const ArrOfInt& compo_connexe = mesh_->compo_connexe_facettes();
316 const ArrOfDouble& surface_facettes = mesh_->get_update_surface_facettes();
317 const Intersections_Elem_Facettes& intersections = mesh_->intersections_elem_facettes();
318 const IntTab& facettes = mesh_->facettes();
319
320 for (int c = 0; c < max_authorized_nb_of_components_; c++)
321 field_par_compo[c].data() = 0.;
322
323 // Boucle sur les elements:
324 const int ni = field_par_compo[0].ni();
325 const int nj = field_par_compo[0].nj();
326 const int nk = field_par_compo[0].nk();
327
328 ArrOfInt liste_composantes_connexes_dans_element;
329 liste_composantes_connexes_dans_element = 0;
330 for (int k = 0; k < nk; k++)
331 for (int j = 0; j < nj; j++)
332 for (int i = 0; i < ni; i++)
333 {
334 // A present, elle est dans le splitting :
335 const int elem = ref_domaine_->convert_ijk_cell_to_packed(i, j, k);
336 const int nb_compo_traversantes =
337 compute_list_compo_connex_in_element(elem, liste_composantes_connexes_dans_element);
338 // Pour chaque element, est-il traverse par une ou plusieurs interface ?
339 assert(nb_compo_traversantes < max_authorized_nb_of_components_);
340
341 // On boucle sur les composantes connexes trouvees dans l'element
342 for (int i_compo = 0; i_compo < nb_compo_traversantes; i_compo++)
343 {
344 const int num_compo = liste_composantes_connexes_dans_element[i_compo];
345 // Calcul de la moyenne de field dans l'element :
346 double moy_field = 0.;
347 int index = intersections.index_elem()[elem];
348 assert(index >= 0); // Aucune facette dans cet element.
349
350 double surface = 0.;
351 double moy_field_fa7 = 0.;
352 // Boucle sur les facettes qui traversent l'element elem :
353 while (index >= 0)
354 {
355 const Intersections_Elem_Facettes_Data& data = intersections.data_intersection(index);
356 const int fa7 = data.numero_facette_;
357 const int icompo = compo_connexe[fa7];
358 moy_field_fa7 = 0.;
359 if (icompo == num_compo)
360 {
361 const double surface_facette = surface_facettes[fa7];
362 const double surf = data.fraction_surface_intersection_ * surface_facette;
363 // Les coordonnees du barycentre de la fraction de facette :
364 //Vecteur3 coord_barycentre_fraction(0., 0., 0.);
365 for (int isom = 0; isom < 3; isom++)
366 {
367 // numero du sommet dans le tableau sommets
368 const int num_som = facettes(fa7, isom);
369 const double val = val_on_sommet[num_som];
370 // Coordonnees barycentriques du centre de gravite de
371 // l'intersection par rapport aux trois sommets de la facette.
372 const double bary_som = data.barycentre_[isom];
373 // pour avoir la moyenne du champ au centre du triangle
374 moy_field_fa7 += bary_som * val;
375 }
376 surface += surf;
377 moy_field += moy_field_fa7 * surf;
378 }
379 index = data.index_facette_suivante_;
380 }
381
382 if (surface > 0.)
383 moy_field *= 1. / surface;
384 else
385 moy_field = moy_field_fa7;
386 field_par_compo[i_compo](i, j, k) = moy_field;
387 }
388 }
389
390 // Mise a jour des espaces virtuels :
391 field_par_compo.echange_espace_virtuel();
392}
393
395 const ArrOfDouble& val_on_fa7,
397{
398
399 const ArrOfInt& compo_connexe = mesh_->compo_connexe_facettes();
400 const ArrOfDouble& surface_facettes = mesh_->get_update_surface_facettes();
401 const Intersections_Elem_Facettes& intersections = mesh_->intersections_elem_facettes();
402
403 for (int c = 0; c < max_authorized_nb_of_components_; c++)
404 field_par_compo[c].data() = 0.;
405
406 // Boucle sur les elements:
407 const int ni = field_par_compo[0].ni();
408 const int nj = field_par_compo[0].nj();
409 const int nk = field_par_compo[0].nk();
410
411 ArrOfInt liste_composantes_connexes_dans_element;
412 for (int k = 0; k < nk; k++)
413 for (int j = 0; j < nj; j++)
414 for (int i = 0; i < ni; i++)
415 {
416 // A present, elle est dans le splitting :
417 const int elem = ref_domaine_->convert_ijk_cell_to_packed(i, j, k);
418 const int nb_compo_traversantes =
419 compute_list_compo_connex_in_element(elem, liste_composantes_connexes_dans_element);
420 // Pour chaque element, est-il traverse par une ou plusieurs interface ?
421 assert(nb_compo_traversantes > max_authorized_nb_of_components_);
422
423 // On boucle sur les composantes connexes trouvees dans l'element
424 for (int i_compo = 0; i_compo < nb_compo_traversantes; i_compo++)
425 {
426 const int num_compo = liste_composantes_connexes_dans_element[i_compo];
427 // Calcul de la moyenne de field dans l'element :
428 double moy_field = 0.;
429 int index = intersections.index_elem()[elem];
430 assert(index >= 0); // Aucune facette dans cet element.
431
432 double surface = 0.;
433
434 // Boucle sur les facettes qui traversent l'element elem :
435 while (index >= 0)
436 {
437 const Intersections_Elem_Facettes_Data& data = intersections.data_intersection(index);
438 const int fa7 = data.numero_facette_;
439 const int icompo = compo_connexe[fa7];
440 if (icompo == num_compo)
441 {
442 const double surface_facette = surface_facettes[fa7];
443 const double surf = data.fraction_surface_intersection_ * surface_facette;
444 const double moy_field_fa7 = val_on_fa7[fa7];
445 surface += surf;
446 moy_field += moy_field_fa7 * surf;
447 }
448 index = data.index_facette_suivante_;
449 }
450
451 assert(surface > 0.);
452 moy_field *= 1. / surface;
453 field_par_compo[i_compo](i, j, k) = moy_field;
454 }
455 }
456 field_par_compo.echange_espace_virtuel();
457}
458//
459// Attention : elem ne doit pas etre un element virtuel :
461 const int elem,
462 ArrOfInt& liste_composantes_connexes_dans_element
463) const
464{
465 const Intersections_Elem_Facettes& intersections = mesh_->intersections_elem_facettes();
466 const ArrOfInt& index_elem = intersections.index_elem();
467 const ArrOfInt& compo_connexe_facettes = mesh_->compo_connexe_facettes();
468
469 liste_composantes_connexes_dans_element.resize_array(0);
470
471 // L'element, est-il traverse par une interface ?
472 int index_next_facette = index_elem[elem];
473 while (index_next_facette >= 0)
474 {
475 // Oui. Par quelles composantes connexes est-il traverse ?
476 // On boucle sur les faces qui traversent l'interface, on marque
477 // les composantes deja vues au fur et a mesure:
478 const Intersections_Elem_Facettes_Data& data = intersections.data_intersection(index_next_facette);
479 if (data.fraction_surface_intersection_ == 0.)
480 {
481#ifdef GB_VERBOSE
482 Cerr << "compute_list_compo_connex_in_element : elem= " << elem
483 << " Intersection issue du parcours : numero_facette_= " << data.numero_facette_
484 << " numero_element_= " << data.numero_element_ << " fraction= " << data.fraction_surface_intersection_
485 << finl;
486#endif
487 // Si on a une facette de fraction_surface_intersection nulle,
488 // c'est qu'en realite elle n'intersecte pas.
489 // On ne la traite pas.
490 }
491 else
492 {
493 int compo = compo_connexe_facettes[data.numero_facette_];
494 // Cherche si cette composante est deja dans la liste
495 int ii;
496 const int nmax = liste_composantes_connexes_dans_element.size_array();
497 for (ii = 0; ii < nmax; ii++)
498 {
499 if (liste_composantes_connexes_dans_element[ii] == compo)
500 break; // sort de la boucle for, on aura ii < nmax
501 }
502 if (ii == nmax) // vrai si on n'a pas trouve compo dans
503 // liste_composantes_connexes_dans_element
504 liste_composantes_connexes_dans_element.append_array(compo);
505 }
506 index_next_facette = data.index_facette_suivante_;
507 }
508
509 const int nb_compo_traversantes = liste_composantes_connexes_dans_element.size_array();
510 return nb_compo_traversantes;
511}
512
513// static int calculer_phi_et_indic_element_pour_compo(
515 const int icompo,
516 const int elem,
517 double& indic) const
518{
519 const Intersections_Elem_Facettes& intersections = mesh_->intersections_elem_facettes();
520 const IntTab& facettes = mesh_->facettes();
521 const DoubleTab& sommets = mesh_->sommets();
522 const ArrOfInt& compo_connexe = mesh_->compo_connexe_facettes();
523
524 indic = -1.; // valeur invalide.
525 double somme_contrib = 0.;
526 int index = intersections.index_elem()[elem];
527 if (index < 0)
528 return 0; // Aucune facette dans cet element.
529
530 // Boucle sur les facettes qui traversent l'element elem :
531 while (index >= 0)
532 {
533 const Intersections_Elem_Facettes_Data& data = intersections.data_intersection(index);
534 const int fa7 = data.numero_facette_;
535 const int num_compo = compo_connexe[fa7];
536 if (icompo == num_compo)
537 {
538 // Calcul du potentiel au centre de l'intersection
539 // Les coordonnees du barycentre de la fraction de facette :
540 Vecteur3 coord_barycentre_fraction(0., 0., 0.);
541 for (int isom = 0; isom < 3; isom++)
542 {
543 const int num_som = facettes(fa7, isom); // numero du sommet dans le tableau sommets
544 // Coordonnees barycentriques du centre de gravite de l'intersection
545 // par rapport aux trois sommets de la facette.
546 const double bary_som = data.barycentre_[isom];
547 for (int dir = 0; dir < 3; dir++)
548 coord_barycentre_fraction[dir] += bary_som * sommets(num_som, dir);
549 }
550 // On ne somme la contribution que de la composante icompo :
551 somme_contrib += data.contrib_volume_phase1_;
552 }
553 index = data.index_facette_suivante_;
554 }
555
556 // retour entre 0 et 1 :
557 while (somme_contrib > 1.)
558 somme_contrib -= 1.;
559 while (somme_contrib < 0.)
560 somme_contrib += 1.;
561
562 if (somme_contrib == 0.)
563 {
564 Cerr << "calculer_indicatrice ne fait rien dans la boucle while... "
565 "pourquoi? "
566 << finl;
567 // Process::exit();
568 }
569
570 indic = somme_contrib;
571 return 1;
572}
void calculer_moyennes_interface_element_pour_compo(const int num_compo, const int elem, double &surface, Vecteur3 &normale, Vecteur3 &bary) const
void calculer_moy_field_fa7_par_compo(const ArrOfDouble &val_on_fa7, FixedVector< IJK_Field_double, max_authorized_nb_of_components_ > &field_par_compo) const
void calculer_valeur_par_compo(const double time, const int itstep, IJK_Field_int &nb_compo_trav, FixedVector< IJK_Field_int, max_authorized_nb_of_components_ > &compos_trav, FixedVector< IJK_Field_double, 3 *max_authorized_nb_of_components_ > &normale_par_compo, FixedVector< IJK_Field_double, 3 *max_authorized_nb_of_components_ > &bary_par_compo, FixedVector< IJK_Field_double, max_authorized_nb_of_components_ > &indicatrice_par_compo, FixedVector< IJK_Field_double, max_authorized_nb_of_components_ > &surface_par_compo, FixedVector< IJK_Field_double, max_authorized_nb_of_components_ > &courbure_par_compo)
int compute_list_compo_connex_in_element(const int elem, ArrOfInt &liste_composantes_connexes_dans_element) const
int calculer_indic_elem_pour_compo(const int icompo, const int elem, double &indic) const
void calculer_moy_par_compo(IJK_Field_int &nb_compo_traversante, FixedVector< IJK_Field_int, max_authorized_nb_of_components_ > &compos_traversantes, FixedVector< IJK_Field_double, 3 *max_authorized_nb_of_components_ > &normale_par_compo, FixedVector< IJK_Field_double, 3 *max_authorized_nb_of_components_ > &bary_par_compo, FixedVector< IJK_Field_double, max_authorized_nb_of_components_ > &indic_par_compo, FixedVector< IJK_Field_double, max_authorized_nb_of_components_ > &surface_par_compo) const
void calculer_somme_field_sommet_par_compo(const ArrOfDouble &val_on_sommet, FixedVector< IJK_Field_double, max_authorized_nb_of_components_ > &field_par_compo) const
const Maillage_FT_IJK * mesh_
void calculer_moy_field_sommet_par_compo(const ArrOfDouble &val_on_sommet, FixedVector< IJK_Field_double, max_authorized_nb_of_components_ > &field_par_compo) const
void echange_espace_virtuel()
Definition FixedVector.h:44
void echange_espace_virtuel(int ghost)
Exchange data over "ghost" number of cells.
: class Intersections_Elem_Facettes
const ArrOfInt & index_elem() const
Renvoie un tableau de taille domaine.
const Intersections_Elem_Facettes_Data & data_intersection(int index) const
Renvoie les donnees de l'intersection stockee a l'indice "index" dans le tableau "data" ( 0 <= index ...
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Definition Process.cpp:455
void append_array(_TYPE_ valeur)
_SIZE_ size_array() const
void resize_array(_SIZE_ new_size, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)