TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Maillage_FT_Disc.h
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#ifndef Maillage_FT_Disc_included
17#define Maillage_FT_Disc_included
18
19#include <Ensemble_Lagrange_base.h>
20#include <TRUSTTabFT.h>
21#include <Descripteur_FT.h>
22#include <Intersections_Elem_Facettes_Data.h>
23#include <TRUSTTabs_forward.h>
24#include <Vecteur3.h>
25
26#include <TRUST_Deriv.h>
27#include <TRUST_Ref.h>
28
30class Remaillage_FT;
33class Maillage_Echange;
34class Domaine_VF;
36
37/*! @brief : class Maillage_FT_Disc Cette classe decrit un maillage:
38 *
39 * un tableau de coordonnees des sommets,
40 * un tableau de facettes,
41 * drapeaux,
42 * intersections facettes / elements
43 * ...
44 *
45 */
47{
48 Declare_instanciable_sans_constructeur(Maillage_FT_Disc);
49public:
51
52 enum Statut_Maillage { RESET = 0, MINIMAL = 1, PARCOURU = 2, COMPLET = 3};
53 //
54 // Methodes reimplementees de Objet_U
55 //
56 int reprendre(Entree&) override;
57 int sauvegarder(Sortie&) const override;
58 //
59 // Nouvelles methodes
60 //
62 virtual Entree& lire_param_maillage(Entree& is);
63 virtual void ajouter_maillage(const Maillage_FT_Disc& maillage_tmp,int skip_facettes=0);
64 virtual void recopie(const Maillage_FT_Disc& maillage_source, Statut_Maillage niveau_copie);
65 const Equation_base& equation_associee() const override;
66
67 // Proprietes pour le schema en temps...
68 double temps() const;
69 double changer_temps(double t);
70
72
73 /*! @brief return mesh_state_tag_
74 *
75 */
76 int get_mesh_tag() const { return mesh_state_tag_; }
77
78 // Acces aux elements du maillage
79 const DoubleTab& sommets() const;
80 int nb_sommets() const; // Egal a sommets().dimension(0)
81 const IntTab& facettes() const;
82 int nb_facettes() const; // Egal a facettes().dimension(0)
83 int nb_facettes_reelle_totale() const;
84 int nb_facettes_reelles() const;
85 int nb_facettes_totale() const;
86 const ArrOfInt& drapeaux_sommets() const; // pour postraitement uniquement
87 const ArrOfInt& sommet_PE_owner() const; // pour postraitement uniquement
88 const ArrOfInt& sommet_num_owner() const; // pour postraitement uniquement
89 void facette_PE_owner(ArrOfInt& facette_pe) const; // pour postraitement uniquement
90 const ArrOfInt& sommet_elem() const; // pour postraitement uniquement
91 const ArrOfInt& sommet_face_bord() const; // pour postraitement uniquement
92
93 const Desc_Structure_FT& desc_sommets() const;
94 const Desc_Structure_FT& desc_facettes() const;
95
97
98 const ArrOfInt& som_init_util() const;
99 // Ces fonctions renvoient 1 si le test est vrai, 0 sinon
100 inline int sommet_virtuel(int i) const;
101 inline int sommet_ligne_contact(int i) const;
102 inline int sommet_face_bord(int i) const;
103 inline int facette_virtuelle(int i) const;
104 int facettes_voisines(int fa70, int fa71, int& iarete0, int& iarete1) const;
105
106 int calculer_voisinage_facettes(IntTab& fa7Voisines,
107 const Intersections_Elem_Facettes* ief=nullptr) const;
108
109 void associer_equation_transport(const Equation_base& equation) override;
110 void associer_domaine_dis_parcours(const Domaine_dis_base& domaine_dis, const Parcours_interface& parcours);
113 int type_statut() const;
114
115 // Vide le maillage
116 void reset();
117 // Amene le maillage dans l'etat PARCOURU
118 void parcourir_maillage();
119 // Amene le maillage dans l'etat COMPLET
120 void completer_maillage();
121 // Calcul de l'indicatrice de phase
122 void calcul_indicatrice(DoubleVect& indicatrice,
123 const DoubleVect& indicatrice_precedente) const;
124 // Deplacement des sommets du maillage selon un vecteur donne
125 virtual void transporter(const DoubleTab& deplacement);
126
127 // Deplacement simple des sommets du maillage selon un vecteur donne
128 // (sans consideration sur les facettes)
129 void transporter_simple(const DoubleTab& deplacement);
130 //Nettoyage des sommets virtuels et des sommets sur frontiere ouverte
132 void nettoyer_phase(const Nom& nom_eq, const int phase);
133
135 virtual void nettoyer_maillage();
136 void supprimer_facettes(const ArrOfInt& liste_facettes);
137
138 //ecrit le maillage de facon a etre relu sous gnuplot
139 void ecrire_plot(const Nom& nom,double temps, int niveau_requete) const;
140 //fonctions d'affichage standard des facettes et sommets
141 Sortie& printFa7(int fa7,int affsom, Sortie& os) const;
142 Sortie& printSom(int som,Sortie& os) const;
143
145
146 // Acces aux grandeurs calculees a partir du maillage:
147 virtual const ArrOfDouble& get_update_surface_facettes() const;
148 virtual const DoubleTab& get_update_normale_facettes() const;
149 virtual double compute_normale_element(const int elem, const bool normalize, ArrOfDouble& normale) const;
150 virtual double compute_surface_and_normale_element(const int elem, const bool normalize, double surface, double normal[3]) const;
151 virtual const ArrOfDouble& get_update_courbure_sommets() const;
152
153 virtual const ArrOfDouble& get_surface_facettes() const;
154 virtual const DoubleTab& get_normale_facettes() const;
155
156 Vecteur3 coords_fa7(int fa7) const;
157
166 const int& get_nb_facette_supprimees() const
167 {
169 };
171 {
173 };
174
175 inline int set_niveau_plot(int niv);
176
177
178 //fonctions statiques (pour ne pas utiliser des membres propres au maillage
179 static int deplacer_un_point(double& x, double& y, double& z,
180 double x1, double y1, double z1,
181 int& element_suivant,
182 int& face_suivante,
183 const Parcours_interface& parcours,
184 const Domaine_VF& domaine_vf,
185 const IntTab& face_voisins,
186 int skip_facettes=0);
187
188 static int deplacer_un_sommet(double& x, double& y, double& z,
189 double x1, double y1, double z1,
190 int& element,
191 int& face_bord,
192 const int num_sommet,
193 const Parcours_interface& parcours,
194 const Domaine_VF& domaine_vf,
195 const IntTab& face_voisins,
196 ArrOfInt& sommets_envoyes,
197 ArrOfInt& element_virtuel_arrivee,
198 ArrOfInt& face_virtuelle_arrivee,
199 DoubleTab& deplacement_restant,
200 int skip_facettes=0);
201
202
203 // Utiliser ces deux fonctions pour recuperer des champs valides apres avoir
204 // transporte le maillage :
205 void preparer_tableau_avant_transport(ArrOfDouble& tableau,
206 const Desc_Structure_FT& descripteur) const;
207 void preparer_tableau_avant_transport(ArrOfInt& tableau,
208 const Desc_Structure_FT& descripteur) const;
209 void preparer_tableau_avant_transport(DoubleTab& tableau,
210 const Desc_Structure_FT& descripteur) const;
211 void update_tableau_apres_transport(ArrOfDouble& tableau, int nb_elements,
212 const Desc_Structure_FT& descripteur) const;
213 void update_tableau_apres_transport(ArrOfInt& tableau, int nb_elements,
214 const Desc_Structure_FT& descripteur) const;
215 void update_tableau_apres_transport(DoubleTab& tableau, int nb_elements,
216 const Desc_Structure_FT& descripteur) const;
217
218 static double angle_bidim_axi();
219
221 void generer_structure();
222 void remplir_structure(const DoubleTab& soms);
223
224 void creer_tableau_sommets(Array_base&, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT) const;
225 void creer_tableau_elements(Array_base&, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT) const;
226 double calcul_normale_3D(int num_facette, double norme[3]) const;
227 virtual void calculer_costheta_minmax(DoubleTab& costheta) const;
228
229
230 void set_is_solid_particle(const bool is_solid_particle) {is_solid_particle_=is_solid_particle;} // for fpi module
231 const bool& get_is_solid_particle() const {return is_solid_particle_; } // for fpi module
233
234 const DoubleTab& get_gravity_center_fa7() const { return gravity_center_fa7_; }
236protected:
237 void pre_lissage_courbure(ArrOfDouble& store_courbure_sommets, const int niter) const;
238 void correction_costheta(const double c, const int s0, const int facette,
239 /* const ArrOfDouble& s0s1, const ArrOfDouble& s0s2, */
240 double ps) const;
241 double calculer_costheta_objectif(const int som, const int facette, const int call, const double c,
242 const DoubleTabFT& tab_cos_theta, ArrOfBit& drapeau_angle_in_range) const;
243
244 const Maillage_FT_Disc& operator=(const Maillage_FT_Disc&); // Interdit !
245
246 // Cette methode permet de declarer que le maillage a ete
247 // modifie (et invalider le cache de valeurs calculees)
248 void maillage_modifie(Statut_Maillage nouveau_statut);
249
250 void calculer_voisins();
251
252 void calcul_surface_normale(ArrOfDouble& surface, DoubleTab& normale) const;
253 void calcul_courbure_sommets(ArrOfDouble& courbure, const int call_number) const;
254
255 //fonction qui cree un nouveau sommet par copie d'une existant
256 //utilise dans Remailleur_Collision_FT_Collision_Seq
257 int copier_sommet(int som);
258 //idem, mais rend le sommet interne (sommet_face_bord_=-1)
259 int copier_sommet_interne(int som);
260
261 //renvoie les coefficients du plan passant par l'arete iarete de la facette fa7 et normal a la facette
263 int fa7, int iarete,
264 double& a, double& b, double& c, double& d) const;
265
266 void creer_sommets_virtuels(const ArrOfInt& liste_sommets,
267 const ArrOfInt& liste_pe,
268 const Schema_Comm& comm);
269
270 void creer_sommets_virtuels_numowner(const ArrOfInt& request_sommets_pe,
271 const ArrOfInt& request_sommets_num);
272
273 void echanger_sommets_PE(const ArrOfInt& liste_sommets,
274 const ArrOfInt& liste_elem_virtuel_arrivee,
275 const ArrOfInt& liste_face_virtuelle_arrivee,
276 const DoubleTab& deplacement,
277 ArrOfInt& liste_nouveaux_sommets,
278 DoubleTab& deplacement_restant,int skip_facettes=0);
279
281
282 virtual void creer_facettes_virtuelles(const ArrOfInt& liste_facettes,
283 const ArrOfInt& liste_pe,
284 const ArrOfInt& facettes_send_pe_list,
285 const ArrOfInt& facettes_recv_pe_list);
286
287 void buffer_envoyer_facette_PE(int num_facette,
288 int PE,
289 int num_element_sur_PE);
290
291 void echanger_facettes(const ArrOfInt& liste_facettes,
292 const ArrOfInt& liste_elem_arrivee,
293 ArrOfInt& facettes_recues_numfacettes,
294 ArrOfInt& facettes_recues_numelement);
295
297 const ArrOfInt& element_num_owner,
298 const ArrOfInt& numeros_distants,
299 const ArrOfInt& pe_distant,
300 ArrOfInt& numeros_locaux) const;
302 const ArrOfInt& element_num_owner,
303 const int numero_distant,
304 const int pe_distant,
305 int& numero_local) const;
306
307 virtual void deplacer_sommets(const ArrOfInt& liste_sommets_initiale,
308 const DoubleTab& deplacement_initial,
309 ArrOfInt& liste_sommets_sortis,
310 ArrOfInt& numero_face_sortie, int skip_facettes=0);
311
312 virtual int check_sommets(int error_is_fatal = 1) const;
313 virtual int check_mesh(int error_is_fatal = 1, int skip_facette_owner = 0, int skip_facettes = 0) const;
314
315 void construire_noeuds(IntTab& def_noeud,const DoubleTab& soms);
316 void calculer_coord_noeuds(const IntTab& def_noeud,const DoubleTab& soms,IntTab& renum);
317
318
319 OBS_PTR(Transport_Interfaces_FT_Disc) refequation_transport_;
320 // Pour pouvoir utiliser le maillage_FT_IJK sans equation de transport, j'ajoute une ref
321 // au domaine_dis, et on l'utilise directement chaque fois que c'est possible au lieu de l'eq. transp.:
322 // C'est initialise dans associer_domaine_dis.
323 OBS_PTR(Domaine_dis_base) refdomaine_dis_;
324 // Pour la meme raison, ajout d'une ref au parcours de l'interface:
325 OBS_PTR(Parcours_interface) refparcours_interface_;
326
327 ArrOfIntFT som_init_util_; //Indique les positions de sommets qui sont effectivement
328 //la propriete du domaine (ou sous domaine en parallele)
329
330 // Schema de communication permettant des echanges bidirectionnels avec
331 // n'importe quel processeur voisin par un joint du maillage eulerien
333
334 // Cette variable indique l'etat de l'objet :
335 // * RESET : Maillage vide, non initialise.
336 // * MINIMAL : les structures suivantes sont remplies de facon coherente,
337 // et respecte les conventions de maillage sur les differents
338 // processeurs :
339 // - statut_ (le meme pour tous les processeurs)
340 // - sommets_
341 // - facettes_
342 // - sommet_elem_
343 // - sommet_face_bord_
344 // - sommet_PE_owner_
345 // - sommet_num_owner_
346 // - desc_sommets_
347 // - desc_facettes_
348 // - drapeaux_sommets_
349 // La liste des facettes peut etre incomplete : les processeurs
350 // pauvres ne connaissent pas encore les facettes dont tous
351 // les sommets sont virtuels
352 // * PARCOURU : En plus du maillage minimal, la structure
353 // intersections_elem_facettes_ est remplie et la liste des
354 // facettes est complete (y compris les processeurs pauvres)
355 // * COMPLET : Toutes les structures de donnees sont remplies:
356 // - surface_facette_
357 // - normale_facette_
358 // - voisins_
359 // - ...
361
362 // Ce compteur est incremente chaque fois que le maillage change
363 // (soit les noeuds sont deplaces, soit le nombre de noeuds change, etc...)
364 // Cela permet de verifier qu'un tableau de valeurs calculees a partir du maillage
365 // est bien a jour (exemple: courbure, ...)
366 // on peut avoir besoin de le changer de l'exterieur aussi... donc mutable. mais pas super de faire ça
367 mutable int mesh_state_tag_;
368
369 // Le temps physique associe a cette interface
371
372 //////////////////////////////////////////////////////////////////////////////////
373 // MEMBRES DEFINISSANT L'ETAT MINIMAL //
374 // //
375 // mes_sommets(i,j) = j-ieme composante de la position du i-eme sommet du maillage
376 // La liste des sommets connus contient au minimum tous les sommets reels et
377 // virtuels utilises dans la liste de facettes.
378 // Un sommet est reel s'il est situe a l'interieur de ma domaine (c'est a dire
379 // si sommet_elem_ >= 0). Un sommet est reel pour exactement un processeur,
380 // il est virtuel pour tous les autres. Pour les sommets situes a proximite d'un
381 // joint (a epsilon pres), le choix du PE proprietaire est arbitraire.
382 DoubleTabFT sommets_;
383 // mes_facettes(i,j) = indice du j-ieme sommet de la i-ieme facette du maillage
384 // En 2D : j=0..1, en 3D j=0..2
385 // Conventions :
386 // * le premier sommet de la facette determine le PE proprietaire de la facette:
387 // si ce sommet m'appartient, la facette est reelle, sinon elle est virtuelle.
388 // La facette est dans l'espace virtuel des facettes si et seulement si je ne suis pas
389 // proprietaire du premier sommet. Si elle est reelle, l'espace distant indique
390 // pour quels processeurs elle est virtuelle.
391 // * la normale a la facette pointe vers la phase 1 (l'autre est la phase 0)
392 // * les facettes sont numerotees de facon identique sur tous les processeurs
393 // (ainsi, le premier sommet est toujours le meme).
394 // Une facette est dite "virtuelle pure" si le processeur ne possede aucun des
395 // noeuds de la facette.
396 IntTabFT facettes_;
399
400 // Pour chaque sommet du maillage, numero de l'element eulerien qui
401 // le contient et -1 si le sommet est virtuel.
402 // Par definition, le sommet m'appartient ssi sommet_elem_ >= 0
403 // (si sommet_elem_ < 0, le sommet est virtuel)
404 ArrOfIntFT sommet_elem_;
405 // Pour chaque sommet du maillage, numero de la face de bord eulerienne
406 // ou se trouve le sommet si le sommet est de type "ligne de contact",
407 // -1 si le sommet n'est pas sur le bord. Si le sommet est virtuel et sur
408 // un bord, le numero est positif ou nul.
410 // Prises ensembles, ces deux donnees forment une cle qui designe un noeud
411 // de facon unique.
412 // Le numero du PE qui possede le sommet
414 // Le numero du sommet sur le PE proprietaire
416 // Le numero de la facette sur le proprietaire de celle-ci
418
419 // Descripteur d'elements distants et virtuels pour les sommets et les facettes.
420 // Definition : on dit que les espaces distant et virtuels sont coherents pour
421 // un element (sommet ou facette) si :
422 // * l'element se trouve soit
423 // - dans l'espace virtuel, associe a un unique PE,
424 // - dans l'espace distant, associe a un ou plusieurs PEs,
425 // - ni dans l'espace distant, ni dans l'espace virtuel.
426 // * sur le proc B l'element est virtuel, associe au processeur A si et seulement si
427 // cet element est dans l'espace distant du proc A, associe au proc B.
428 // La methode Desc_Structure_FT::check() permet de verifier en partie que
429 // ces regles sont verifiees.
432
433 // Attributs des sommets (peut-etre que plusieurs ArrOfBits seraient mieux?)
434 // Avec IntTab, echange espace virtuel est plus facile.
436 // Drapeaux attributs des sommets
437 static const int EFFACE = 1;
438 // //
439 // FIN DES MEMBRES DEFINISSANT L'ETAT MINIMAL //
440 //////////////////////////////////////////////////////////////////////////////////
441
442 //////////////////////////////////////////////////////////////////////////////////
443 // LES MEMBRES SUIVANTS PEUVENT ETRE RECONSTRUITS A PARTIR DE L'ETAT MINIMAL //
444 // //
445 // Intersection entre les facettes du maillage lagrangien et les elements
446 // euleriens (ce champ est rempli lors du parcours de l'interface)
447 //
449
450 // voisins_(i,j) = indice de la facette voisine de la i-eme facette du
451 // maillage par l'arete j.
452 IntTabFT voisins_;
453
454 /////////////////////////////////////////////////////////////////////////////////
455 // Cet objet contient les valeurs calculees a partir du maillage
456 // du base (normale, surface, courbure, etc...).
457 // Les membres de ce tableau sont calcules lors de l'appel a get_update_...
458 // si ce n'est pas deja fait (il se comporte comme un cache).
459 // L'appel a un membre public non const du maillage invalide tous les
460 // tableaux par increment du "mesh_state_tag".
461 // L'appel a get_update_xxx modifie cet objet, bien que la methode
462 // get_update_xxx soit "const", mais le principe du "const" est bien
463 // respecte: pas d'effet de bord visible de l'exterieur.
464
465 // attention: la methode d'acces est const, et renvoie un objet non const :
468
469 // Classes amies (ces classes construisent ou modifient le maillage,
470 // les algorithmes dependent fortement des details de mise en oeuvre
471 // internes du maillage... il vaut mieux qu'ils soient bons amis...:)
472 friend class Marching_Cubes;
473 friend class Parcours_interface;
474 friend class Remaillage_FT;
475 friend class Remaillage_FT_IJK;
479
480 //parametre de gestion des sorties au format gnuplot
481 //-1 : aucunes sorties au format gnuplot
482 // 1 : 1 sortie par pas de temps (dans mettre_a_jour)
490
491 bool is_solid_particle_=false; // for fpi module, pointer to NS_FT_Disc::is_solid_particle_
492 DoubleTab gravity_center_fa7_; // EB
493};
494
495// Description :
496// Renvoie 0 si le sommet m'appartient, 1 sinon.
497// Si le sommet i m'appartient, alors il se trouve a l'interieur de l'element
498// sommet_elem_[i]. On garantit qu'un sommet est reel sur exactement un
499// processeur et virtuel sur tous les autres.
500inline int Maillage_FT_Disc::sommet_virtuel(int i) const
501{
502 return (sommet_elem_[i] < 0) ? 1 : 0;
503}
504
505// Description :
506// Renvoie 1 si le sommet se trouve sur un bord du domaine, 0 sinon.
507// Si le sommet est virtuel mais qu'il se trouve sur un bord du domaine
508// du proceseur voisin, on renvoie 1 aussi.
510{
511 return (sommet_face_bord_[i] >= 0) ? 1 : 0;
512}
513
514// Description :
515// Renvoie le numero de la face de bord.
517{
518 return sommet_face_bord_[i];
519}
520
521
522
523/*! @brief Renvoie 0 si la facette m'appartient, 1 sinon.
524 *
525 * (le test est "le premier sommet de la facette m'appartient-t-il ?")
526 *
527 */
529{
530 const int sommet = facettes_(i, 0);
531 return (sommet_elem_[sommet] < 0) ? 1 : 0;
532}
533
535{
536 niveau_plot_ = niv;
537 return niveau_plot_;
538}
539
540
542{
543 Declare_instanciable(Maillage_FT_Disc_Data_Cache);
544public:
545 void clear();
546
548 ArrOfDoubleFT surface_facettes_;
550 DoubleTabFT normale_facettes_;
552 ArrOfDoubleFT courbure_sommets_;
553};
554#endif
Empty class used as a base for all the arrays.
Definition Array_base.h:41
: class Desc_Structure_FT
class Domaine_VF
Definition Domaine_VF.h:44
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
classe Equation_base Le role d'une equation est le calcul d'un ou plusieurs champs....
: class Intersections_Elem_Facettes
: class Maillage_FT_Disc Cette classe decrit un maillage:
void creer_tableau_elements(Array_base &, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT) const
creation d'un tableau aux sommets du maillage Meme principe que Domaine::creer_tableau_elements()
IntTabFT liste_facette_supprimees_et_voisines_
Transport_Interfaces_FT_Disc & equation_transport()
void buffer_envoyer_facette_PE(int num_facette, int PE, int num_element_sur_PE)
void transporter_simple(const DoubleTab &deplacement)
virtual void creer_facettes_virtuelles(const ArrOfInt &liste_facettes, const ArrOfInt &liste_pe, const ArrOfInt &facettes_send_pe_list, const ArrOfInt &facettes_recv_pe_list)
Creation de facettes virtuelles sur le pe specifie.
DoubleTab gravity_center_fa7_
void nettoyer_noeuds_virtuels_et_frontieres()
virtual Entree & lire_param_maillage(Entree &is)
Cette fonction permet de lire les parametres pour le maillage des interfaces.
friend class Sauvegarde_Reprise_Maillage_FT
void mesh_tag_increase() const
int get_mesh_tag() const
return mesh_state_tag_
void set_is_solid_particle(const bool is_solid_particle)
void set_nb_facette_supprimees(int nb)
void preparer_tableau_avant_transport(ArrOfDouble &tableau, const Desc_Structure_FT &descripteur) const
Prepare un tableau de donnees aux sommets ou aux facettes pour conserver les valeurs apres transport.
virtual void calculer_costheta_minmax(DoubleTab &costheta) const
Pour chaque sommet du maillage, s'il est sur un bord, on calcule costheta min et max (hysteresis) cor...
const ArrOfInt & sommet_num_owner() const
pour postraitement, renvoie le numero des sommets sur le PE proprietaire des sommets
int methode_calcul_courbure_contact_line_
int nb_sommets() const
renvoie le nombre de sommets (reels et virtuels) (egal a sommets().
const DoubleTab & sommets() const
renvoie le tableau des sommets (reels et virtuels) dimension(0) = nombre de sommets,
friend class Remailleur_Collision_FT_Collision_Seq
Sortie & printSom(int som, Sortie &os) const
void corriger_proprietaires_facettes()
Sans changer les sommets existants ni la numerotation des facettes, on change le proprietaire des fac...
void associer_equation_transport(const Equation_base &equation) override
on remplit refequation_transport_, schema_comm_domaine_ desc_sommets_.comm_group_ et desc_facettes_....
void update_tableau_apres_transport(ArrOfDouble &tableau, int nb_elements, const Desc_Structure_FT &descripteur) const
Voir preparer_tableau_avant_transport.
void supprimer_facettes(const ArrOfInt &liste_facettes)
Supprime les facettes dont les indices locaux sont donnes en parametre.
const ArrOfInt & drapeaux_sommets() const
Pour postraitement uniquement : la signification precise des drapeaux est de la cuisine interne a la ...
ArrOfIntFT sommet_PE_owner_
Desc_Structure_FT desc_facettes_
void pre_lissage_courbure(ArrOfDouble &store_courbure_sommets, const int niter) const
virtual const ArrOfDouble & get_surface_facettes() const
virtual double compute_surface_and_normale_element(const int elem, const bool normalize, double surface, double normal[3]) const
OWN_PTR(Maillage_FT_Disc_Data_Cache) mesh_data_cache_
void creer_sommets_virtuels(const ArrOfInt &liste_sommets, const ArrOfInt &liste_pe, const Schema_Comm &comm)
Envoi des sommets dont le numero est donne dans liste_sommets au processeur dont le numero est donne ...
virtual int check_sommets(int error_is_fatal=1) const
int set_niveau_plot(int niv)
int nb_facettes() const
renvoie le nombre de facettes (reelles et virtuelles) (egal a facettes().
ArrOfIntFT sommet_face_bord_
int sommet_ligne_contact(int i) const
double correction_contact_courbure_coeff_
ArrOfIntFT facette_num_owner_
int facettes_voisines(int fa70, int fa71, int &iarete0, int &iarete1) const
Cette methode teste si les facettes sont voisines : Des facettes sont voisines si :
int calculer_voisinage_facettes(IntTab &fa7Voisines, const Intersections_Elem_Facettes *ief=nullptr) const
void calcul_courbure_sommets(ArrOfDouble &courbure, const int call_number) const
Calcul de la courbure discrete du maillage aux sommets.
void correction_costheta(const double c, const int s0, const int facette, double ps) const
virtual void nettoyer_maillage()
Retire toutes les facettes virtuelles, toutes les facettes invalides (sommet0 == sommet1) et tous les...
void echanger_facettes(const ArrOfInt &liste_facettes, const ArrOfInt &liste_elem_arrivee, ArrOfInt &facettes_recues_numfacettes, ArrOfInt &facettes_recues_numelement)
Echange des facettes dont les numeros sont fournis dans "liste_facettes" : Pour chaque facette a ajou...
Desc_Structure_FT desc_sommets_
void associer_domaine_dis_parcours(const Domaine_dis_base &domaine_dis, const Parcours_interface &parcours)
friend class Marching_Cubes
const Maillage_FT_Disc & operator=(const Maillage_FT_Disc &)
L'operateur = est interdit !
static int deplacer_un_point(double &x, double &y, double &z, double x1, double y1, double z1, int &element_suivant, int &face_suivante, const Parcours_interface &parcours, const Domaine_VF &domaine_vf, const IntTab &face_voisins, int skip_facettes=0)
int sauvegarder(Sortie &) const override
Sauvegarde d'un Objet_U sur un flot de sortie Methode a surcharger.
int facette_virtuelle(int i) const
Renvoie 0 si la facette m'appartient, 1 sinon.
static const int EFFACE
void calculer_coord_noeuds(const IntTab &def_noeud, const DoubleTab &soms, IntTab &renum)
const Equation_base & equation_associee() const override
double temps() const
return temps_physique_ (temps_physique_ ne sert a rien en interne.
void maillage_modifie(Statut_Maillage nouveau_statut)
Cette methode change le statut du maillage et invalide le cache de valeurs calculees (surface,...
const Desc_Structure_FT & desc_sommets() const
renvoie le descripteur des sommets (espace_distant/virtuel)
void completer_maillage()
Complete les structures de donnees du maillage.
int nb_facettes_totale() const
virtual int check_mesh(int error_is_fatal=1, int skip_facette_owner=0, int skip_facettes=0) const
ArrOfIntFT sommet_num_owner_
virtual void ajouter_maillage(const Maillage_FT_Disc &maillage_tmp, int skip_facettes=0)
double calcul_normale_3D(int num_facette, double norme[3]) const
double changer_temps(double t)
return temps_physique_ = t
void creer_sommets_virtuels_numowner(const ArrOfInt &request_sommets_pe, const ArrOfInt &request_sommets_num)
Cree chez moi les sommets virtuels specifies par le couple (pe,num) si le sommet n'existe pas encore.
int copier_sommet_interne(int som)
virtual const DoubleTab & get_update_normale_facettes() const
Calcule la grandeur demandee, stocke le resultat dans un tableau interne a la classe et renvoie le re...
void construire_noeuds(IntTab &def_noeud, const DoubleTab &soms)
const ArrOfInt & som_init_util() const
return som_init_util_
virtual double compute_normale_element(const int elem, const bool normalize, ArrOfDouble &normale) const
Schema_Comm schema_comm_domaine_
void convertir_numero_distant_local(const Desc_Structure_FT &descripteur, const ArrOfInt &element_num_owner, const ArrOfInt &numeros_distants, const ArrOfInt &pe_distant, ArrOfInt &numeros_locaux) const
Conversion des couples (numeros_distants, pe) en numeros_locaux.
const Desc_Structure_FT & desc_facettes() const
renvoie le descripteur des facettes (espace_distant/virtuel)
ArrOfIntFT drapeaux_sommets_
Maillage_FT_Disc_Data_Cache & mesh_data_cache() const
renvoie une ref non const au cache de valeurs calculees sur le maillage (courbure,...
friend class Remaillage_FT_IJK
void facette_PE_owner(ArrOfInt &facette_pe) const
pour postraitement, remplit le tableau en parametre avec le numero du PE proprietaire de chaque facet...
int calcule_equation_plan_areteFa7(int fa7, int iarete, double &a, double &b, double &c, double &d) const
Intersections_Elem_Facettes intersections_elem_facettes_
void parcourir_maillage()
Remplit la structure intersections_elem_facettes_.
const IntTabFT & get_liste_facette_supprimees_et_voisines() const
const Schema_Comm & get_schema_comm_FT() const
int sommet_virtuel(int i) const
const ArrOfInt & sommet_PE_owner() const
pour postraitement, renvoie le numero du PE proprietaire des sommets
virtual void recopie(const Maillage_FT_Disc &maillage_source, Statut_Maillage niveau_copie)
Recopie une partie du maillage source dans *this.
Maillage_FT_Disc()
constructeur par defaut.
virtual void deplacer_sommets(const ArrOfInt &liste_sommets_initiale, const DoubleTab &deplacement_initial, ArrOfInt &liste_sommets_sortis, ArrOfInt &numero_face_sortie, int skip_facettes=0)
Applique un vecteur deplacement aux noeuds dont le numero est dans "liste_noeud", puis echange les es...
void calcul_indicatrice(DoubleVect &indicatrice, const DoubleVect &indicatrice_precedente) const
Calcul de la fonction indicatrice (on suppose que "indicatrice" a la structure d'un tableau de valeur...
ArrOfIntFT som_init_util_
virtual void transporter(const DoubleTab &deplacement)
Deplace les sommets de l'interface d'un vecteur "deplacement" fourni, Change eventuellement les somme...
friend class Post_Processing_Hydrodynamic_Forces
void ecrire_plot(const Nom &nom, double temps, int niveau_requete) const
const Intersections_Elem_Facettes & intersections_elem_facettes() const
friend class Remaillage_FT
friend class Parcours_interface
virtual const DoubleTab & get_normale_facettes() const
OBS_PTR(Parcours_interface) refparcours_interface_
void nettoyer_elements_virtuels()
Retire toutes les facettes virtuelles et tous les sommets qui ne sont pas utilises.
void calcul_surface_normale(ArrOfDouble &surface, DoubleTab &normale) const
Calcul de la surface et de la normale aux facettes du maillage.
const DoubleTab & get_gravity_center_fa7() const
int copier_sommet(int som)
fonction qui cree un nouveau sommet par copie d'une existant utilise dans Remailleur_Collision_FT_Col...
void echanger_sommets_PE(const ArrOfInt &liste_sommets, const ArrOfInt &liste_elem_virtuel_arrivee, const ArrOfInt &liste_face_virtuelle_arrivee, const DoubleTab &deplacement, ArrOfInt &liste_nouveaux_sommets, DoubleTab &deplacement_restant, int skip_facettes=0)
Realise l'ensemble des echanges de noeuds specifies dans liste_sommets, liste_elem_virtuel_arrivee et...
static int deplacer_un_sommet(double &x, double &y, double &z, double x1, double y1, double z1, int &element, int &face_bord, const int num_sommet, const Parcours_interface &parcours, const Domaine_VF &domaine_vf, const IntTab &face_voisins, ArrOfInt &sommets_envoyes, ArrOfInt &element_virtuel_arrivee, ArrOfInt &face_virtuelle_arrivee, DoubleTab &deplacement_restant, int skip_facettes=0)
void set_liste_facette_supprimees_et_voisines(IntTabFT tab)
int reprendre(Entree &) override
Reprise d'un Objet_U sur un flot d'entree Methode a surcharger.
int nb_facettes_reelles() const
Statut_Maillage statut_
virtual const ArrOfDouble & get_update_surface_facettes() const
Calcule la grandeur demandee, stocke le resultat dans un tableau interne a la classe et renvoie le re...
void nettoyer_phase(const Nom &nom_eq, const int phase)
virtual const ArrOfDouble & get_update_courbure_sommets() const
Calcule la grandeur demandee, stocke le resultat dans un tableau interne a la classe et renvoie le re...
friend class Topologie_Maillage_FT
void reset()
vide toutes les structures du maillage, le statut passe a RESET.
void creer_tableau_sommets(Array_base &, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT) const
creation d'un tableau aux sommets du maillage Meme principe que Domaine::creer_tableau_sommets()
const ArrOfInt & sommet_face_bord() const
pour postraitement, renvoie sommet_face_bord_
Sortie & printFa7(int fa7, int affsom, Sortie &os) const
OBS_PTR(Domaine_dis_base) refdomaine_dis_
static double angle_bidim_axi()
renvoie l'angle solide qui sert a calculer les surfaces et les volumes en bidim_axi
int nb_facettes_reelle_totale() const
OBS_PTR(Transport_Interfaces_FT_Disc) refequation_transport_
const IntTab & facettes() const
renvoie le tableau des facettes (reelles et virtuelles) dimension(0) = nombre de facettes,
Vecteur3 coords_fa7(int fa7) const
const int & get_nb_facette_supprimees() const
const bool & get_is_solid_particle() const
const ArrOfInt & sommet_elem() const
pour postraitement, renvoie sommet_elem_
void remplir_structure(const DoubleTab &soms)
double calculer_costheta_objectif(const int som, const int facette, const int call, const double c, const DoubleTabFT &tab_cos_theta, ArrOfBit &drapeau_angle_in_range) const
class Nom Une chaine de caractere pour nommer les objets de TRUST
Definition Nom.h:31
Objet_U()
Constructeur par defaut : attribue un numero d'identifiant unique a l'objet (object_id_),...
Definition Objet_U.cpp:55
: class Remaillage_FT Cette classe implemente les procedures de remaillage des interfaces pour le Fro...
Classe de base des flux de sortie.
Definition Sortie.h:52
: class Topologie_Maillage_FT Cette classe implemente les procedures de remaillage des interfaces pou...