TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Op_Diff_VEF_Face_Penalise.cpp
1/****************************************************************************
2* Copyright (c) 2026, 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#include <Op_Diff_VEF_Face_Penalise.h>
16#include <Dirichlet_paroi_fixe.h>
17
18
19Implemente_instanciable(Op_Diff_VEF_Face_Penalise,"Op_Diff_VEFpenalise_P1NC",Op_Diff_VEF_Face);
20
21/* Implementation obligatoire de la fonction printOn() */
23printOn(Sortie& s ) const
24{
25 return s << que_suis_je() ;
26}
27
28/* Implementation obligatoire de la fonction readOn() */
30{
31 /* REMARQUE IMPORTANTE: on a cree cette classe par derivation mais
32 * mais elle doit uniquement s'appliquer sur des equations de
33 * Navier-Stokes non turbulentes d'ou les tests suivants
34 */
35
36 Cerr<<"je suis dans Op_Diff_VEF_Face_Penalise::readOn()"<<finl;
37
38 /* On teste la dimension du probleme car la theorie n'a ete validee
39 * que sur du 2D
40 */
41 if (dimension != 2)
42 {
43 Cerr << "Erreur dans Op_Diff_VEF_Face_Penalise::readOn()" << finl;
44 Cerr << "La dimension du probleme doit etre 2" << finl;
46 }
47
48 return is ;
49}
50
51/*
52 *
53 *
54 *
55 *
56 *
57 */
58
59/*! @brief methode qui calcule la contribution de l'operateur.
60 *
61 */
63calculer(const DoubleTab& inconnue, DoubleTab& resu) const
64{
65 resu = 0.;
66 return ajouter(inconnue,resu);
67}
68
69/*
70 *
71 *
72 *
73 *
74 *
75 */
76
77/*! @brief methode qui calcule la vitesse au temps n+1 lorsque le schema explicite est utilise.
78 *
79 */
81ajouter(const DoubleTab& inconnue, DoubleTab& resu) const
82{
83 // Cerr << "J'entre dans ajouter() de penalisation" << finl;
84 int nb_composante,numero_global_face,local;
85 int face_penalisation,face;
86 double coeff;
87 IntList voisinage_ordre1,voisinage_ordre1_strict;
88 IntList voisinage_ordre2,voisinage_ordre2_strict;
89 IntList ensemble_faces;
90
91 /* On calcule le resultat du a la matrice de penalisation
92 * i.e. somme_j U_j P_i,j ou P_i,j est le terme de la matrice
93 * de penalisation.
94 */
95 for (nb_composante = 0; nb_composante < dimension; nb_composante++)
96 {
97 for (numero_global_face = 0; numero_global_face < domaine_vef().nb_faces();
98 numero_global_face++)
99 {
100 /* Calcul des voisinages de numero_global_face */
101 voisinage(numero_global_face,voisinage_ordre1);
102 voisinage(voisinage_ordre1,voisinage_ordre2);
103 reduction(voisinage_ordre1,voisinage_ordre2,voisinage_ordre2_strict);
104 // Cerr << "Nombre iterations " << numero_global_face << finl;
105 // Cerr << "Nombre de faces " << domaine_vef().nb_faces() << finl;
106
107 /* Calcul de resu(numero_face_global,nb_comp)
108 * pour le voisinage_ordre2_strict
109 */
110 for (local = 0 ; local < voisinage_ordre2_strict.size(); local++)
111 {
112 face = voisinage_ordre2_strict[local];
113 faces_communes(numero_global_face,face,ensemble_faces);
114 // Cerr << "Taille voisinage_ordre_1 " << voisinage_ordre1.size()
115 // << finl;
116 // Cerr << "Taille voisinage_ordre2 " << voisinage_ordre2.size()
117 // << finl;
118 // Cerr << "Taille voisinage_ordre2_strict " << voisinage_ordre2_strict.size() << finl;
119 // Cerr << "Taille ensemble_faces " << ensemble_faces.size() << finl;
120
121 // if (ensemble_faces.size() != 1)
122 // {
123 // Cerr << "Erreur dans ajouter() de la penalisation." << finl;
124 // Process::exit();
125 // }
126
127 for (int mm = 0; mm < ensemble_faces.size(); mm++)
128 {
129 face_penalisation = ensemble_faces[mm];
130
131 resu(numero_global_face,nb_composante) +=
132 inconnue(face,nb_composante)*
133 signe(numero_global_face,face)*
134 coefficient_penalisation(face_penalisation)*
135 longueur(face_penalisation)*
136 1./3.;
137 }
138
139 }
140
141 /* Calcul de resu(numero_global_face,nb_comp)
142 * pour le voisinage_ordre1_strict
143 */
144 for (local = 0 ; local < voisinage_ordre1_strict.size(); local++)
145 {
146 assert(voisinage_ordre1_strict.size() == 2
147 || voisinage_ordre1_strict.size() == 4);
148
149 face = voisinage_ordre1_strict[local];
150 face_penalisation = autre_face(numero_global_face,face);
151
152 resu(numero_global_face,nb_composante) +=
153 inconnue(face,nb_composante)*
154 coefficient_penalisation(face_penalisation)*
155 longueur(face_penalisation)*
156 (-1./3.);
157 }
158
159 /* Cas 1: la face consideree est au bord du domaine.
160 * et numero_global_face = face
161 */
162 if (numero_global_face < domaine_vef().nb_faces_bord())
163 for (local = 0; local < voisinage_ordre1.size(); local++)
164 {
165 assert(voisinage_ordre1.size() == 3);
166
167 face_penalisation = voisinage_ordre1[local];
168
169 if (numero_global_face == face_penalisation)
170 coeff = 1.;
171 else
172 coeff = 1./3.;
173
174 resu(numero_global_face,nb_composante) +=
175 inconnue(numero_global_face,nb_composante) *
176 coeff *
177 coefficient_penalisation(face_penalisation)*
178 longueur(face_penalisation);
179 }
180
181 /* Cas 2: la face est interne et numero_global_face = face */
182 else
183 for (local = 0; local < voisinage_ordre1_strict.size(); local++)
184 {
185 assert( voisinage_ordre1_strict.size() == 4);
186
187 face_penalisation = voisinage_ordre1_strict[local];
188
189 resu(numero_global_face,nb_composante) +=
190 inconnue(numero_global_face,nb_composante) *
191 coefficient_penalisation(face_penalisation)*
192 longueur(face_penalisation)*
193 1./3.;
194 }
195 }
196 }
197
198
199 /* Ajout de la matrice de diffusion classique */
200 Op_Diff_VEF_Face::ajouter(inconnue,resu);
201
202 // Cerr << "Je sors de calcul_matrice_de_penalisation_" << finl;
203 return resu;
204}
205
206/*
207 *
208 *
209 *
210 *
211 *
212 */
213
214/*! @brief methode qui calcule le voisinage d'une face.
215 *
216 */
218voisinage(const int Numero_face, IntList& Voisinage) const
219{
220 // Cerr << "J'entre dans voisinage pour un numero face" << finl;
221
222 /* On vide la liste Voisinage pour eviter les mauvaises surprises */
223 if (! Voisinage.est_vide() ) Voisinage.vide();
224
225 /* Declaration des principaux parametres locaux. */
226 int numero_local;
227
228 /* Le nombre de faces des elements constituant le domaine
229 * de discretisation.
230 * REM: on suppose que l'on ne travaille pas sur des prismes.
231 */
232 const int nb_faces_element = domaine().nb_faces_elem();
233
234 /* Les elements voisins de Numero_face */
235 const int voisin1 = domaine_vef().face_voisins(Numero_face,1);
236 const int voisin2 = domaine_vef().face_voisins(Numero_face,0);
237
238 /* Ici, on recupere les faces de voisin*
239 * que l'on injecte dans la liste Voisinage.
240 * Il faut donc que l'element existe d'ou le premier test realise.
241 */
242 if (voisin1 != -1)
243 {
244 for (numero_local = 0; numero_local < nb_faces_element; numero_local++)
245 {
246 /* On recupere le numero global de chacune des
247 * faces de voisin*
248 */
249 const int numero_global_face =
250 domaine_vef().elem_faces(voisin1,numero_local);
251
252 /* Puis on place ce numero dans la liste Voisinage. */
253 Voisinage.add_if_not(numero_global_face);
254
255 }//fin du for
256
257 }//fin du if
258
259 if (voisin2 != -1)
260 {
261 for (numero_local = 0; numero_local < nb_faces_element; numero_local++)
262 {
263 /* On recupere le numero global de chacune des
264 * faces de numero_element_*
265 */
266 const int numero_global_face =
267 domaine_vef().elem_faces(voisin2,numero_local);
268
269 /* Puis on place ce numero dans la liste Voisinage. */
270 Voisinage.add_if_not(numero_global_face);
271
272 }// fin du for
273
274 }//fin du if
275
276 // Cerr << "Je sors de voisinage pour un numero de face" << finl;
277}
278
279/*
280 *
281 *
282 *
283 *
284 *
285 */
286
287/*! @brief methode qui calcule le voisinage d'une liste de faces.
288 *
289 */
291voisinage(const IntList& Ensemble_faces, IntList& Voisinage) const
292{
293 // Cerr << "J'entre dans voisinage pour un ensemble de face" << finl;
294
295 /* On vide la liste Voisinage pour eviter les mauvaises surprises */
296 if (! Voisinage.est_vide() ) Voisinage.vide();
297
298 /* Declaration des principaux parametres locaux. */
299 int nb_elements_Ensemble_faces,nb_elements_liste_temporaire;
300 IntList liste_temporaire;
301
302 for (nb_elements_Ensemble_faces = 0;
303 nb_elements_Ensemble_faces < Ensemble_faces.size();
304 nb_elements_Ensemble_faces++)
305 {
306 /* Parametre interne a la boucle */
307 const int numero_face_dans_Ensemble_faces =
308 Ensemble_faces[nb_elements_Ensemble_faces];
309
310 /* On vide la liste temporaire a chaque fois que l'on change de face */
311 if (! liste_temporaire.est_vide() ) liste_temporaire.vide();
312
313 /* Dans la liste temporaire, on place le voisinage
314 * de numero_face_dans_Ensemble_faces
315 */
316 voisinage(numero_face_dans_Ensemble_faces,liste_temporaire);
317 // Cerr << "Taille liste temporaire " << liste_temporaire.size() << finl;
318
319
320 for (nb_elements_liste_temporaire = 0;
321 nb_elements_liste_temporaire < liste_temporaire.size();
322 nb_elements_liste_temporaire++)
323 {
324 // Cerr << "les elements " << liste_temporaire[nb_elements_liste_temporaire] << finl;
325 /* Parametre interne a la deuxieme boucle */
326 const int numero_face_dans_liste_temporaire =
327 liste_temporaire[nb_elements_liste_temporaire];
328
329 /* Enfin, on stoke dans Voisinage */
330 Voisinage.add_if_not(numero_face_dans_liste_temporaire);
331
332 }//fin du deuxieme for
333
334 }//fin du premier for
335
336 // Cerr << "Je sors de voisinage pour un ensemble face" << finl;
337}
338
339/*
340 *
341 *
342 *
343 *
344 *
345 */
346
347
349signe(const int Face1, const int Face2) const
350{
351 // Cerr << "J'entre dans signe" << finl;
352
353 /* Parametres locaux a la procedure */
354 int numero_local;
355
356 /* On recupere le nombre de sommets des faces
357 * des elements constituant le domaine discretise.
358 * REM: on exclut le prisme par convention.
359 */
360 const int nb_sommets_par_face = domaine_vef().nb_som_face();
361
362 /* On cree une liste qui contient les sommets de la Face2 */
363 IntList sommets_Face2;
364
365 for (numero_local = 0 ; numero_local < nb_sommets_par_face ; numero_local++)
366 sommets_Face2.add(domaine_vef().face_sommets(Face2,numero_local));
367
368 /* Enfin, on regarde si des sommets de la Face2 appartiennent
369 * a la Face1.
370 * Si oui, alors on retourne 1 sinon on retourne -1
371 */
372 for (numero_local = 0; numero_local < nb_sommets_par_face ; numero_local++)
373 if ( sommets_Face2.contient(domaine_vef().face_sommets(Face1,numero_local)))
374 return 1.;
375
376 return -1.;
377
378 // Cerr << "Je sors de signe" << finl;
379}
380
381/*
382 *
383 *
384 *
385 *
386 *
387 */
388
389/*! @brief fonction membre qui retourne le coefficient de penalisation associee a chaque face du maillage primaire.
390 *
391 */
393coefficient_penalisation(const int Numero_face) const
394{
395 // Cerr << "J'entre dans coefficient_penalisation" << finl;
396 /* Initialisation de parametres locaux */
397 double eta=0.;
398 double coefficientpenalisation = 0.;
399
400 const int voisin1 =
401 domaine_vef().face_voisins(Numero_face,1);
402
403 const int voisin2 =
404 domaine_vef().face_voisins(Numero_face,0);
405
406 if (voisin1 == -1 && voisin2 == -1)
407 {
408 Cerr << "Erreur dans Op_Dift_standard_Face_VEF_penalise::"
409 << "coefficient_penalisation()" << finl;
411 }
412
413 if (voisin1 != -1 && voisin2 != -1)
414 {
415 /* Calcul des coefficients de penalisation proprement dit */
416 coefficientpenalisation = 1./diametre(voisin1);
417 eta = 1./diametre(voisin2);
418
419 coefficientpenalisation = std::min(coefficientpenalisation,eta);
420 }
421
422 if (voisin1 == -1)
423 coefficientpenalisation = 1./diametre(voisin2);
424
425 if (voisin2 == -1)
426 coefficientpenalisation = 1./diametre(voisin1);
427
428 return coefficientpenalisation;
429 // Cerr << "Je sors de coefficient_penalisation" << finl;
430}
431
432/*
433 *
434 *
435 *
436 *
437 *
438 */
439
440/*! @brief fonction membre qui renvoie la liste des faces appartenant au voisinage de Face1 ET de Face2.
441 *
442 */
444faces_communes(const int Face1,const int Face2,
445 IntList& Faces_communes) const
446{
447
448 // Cerr <<"J'entre dans faces_communes" << finl;
449 /* On vide d'abord Faces_commnunes pour eviter les erreurs. */
450 if (! Faces_communes.est_vide() ) Faces_communes.vide();
451
452 /* Declaration des parametres locaux a la procedure */
453 IntList voisinage_Face1,voisinage_Face2;
454 int nb_element_voisinage_Face2;
455
456 /* On calcule chacun des voisinages de Face1 et Face2 */
457 voisinage(Face1,voisinage_Face1);
458 voisinage(Face2,voisinage_Face2);
459
460 /* Ensuite, on retrouve les faces communes a ces 2 voisinages. */
461 for (nb_element_voisinage_Face2 = 0;
462 nb_element_voisinage_Face2 < voisinage_Face2.size();
463 nb_element_voisinage_Face2++)
464 {
465 const int numero_face_voisinage_Face2 =
466 voisinage_Face2[nb_element_voisinage_Face2];
467
468 if (voisinage_Face1.contient(numero_face_voisinage_Face2))
469 Faces_communes.add_if_not(numero_face_voisinage_Face2);
470
471 }//fin du for
472
473 // Cerr << "Je sors de faces_communes" << finl;
474}
475
476/*
477 *
478 *
479 *
480 *
481 *
482 */
483
485reduction(const IntList& Liste1,const IntList& Liste2,
486 IntList& Liste_reduite) const
487{
488 // Cerr << "J'entre dans reduction" << finl;
489 /* On nettoie Liste_reduite afin d'eviter les erreurs */
490 if (! Liste_reduite.est_vide() ) Liste_reduite.vide();
491
492 /* Declaration des parametres locaux a la procedure */
493 const IntList *liste_de_plus_petite_taille,*liste_de_plus_grande_taille;
494 int nb_element_dans_liste;
495
496 /* On teste la taille des listes passees en parametres puis
497 * on effectue l'allocation en fonction du resultat.
498 */
499 if (Liste1.size() >= Liste2.size())
500 {
501 liste_de_plus_petite_taille = &Liste2;
502 liste_de_plus_grande_taille = &Liste1;
503 }
504 else
505 {
506 liste_de_plus_petite_taille = &Liste1;
507 liste_de_plus_grande_taille = &Liste2;
508 }
509
510 /* Enfin, on supprime de la liste_de_plus_grande_taille,
511 * les elements de la liste_de_plus_petite_taille si ceux-ci
512 * sont bien dans la liste_de_plus_grande_taille.
513 */
514 for (int ll = 0 ; ll < (*liste_de_plus_grande_taille).size() ; ll++)
515 Liste_reduite.add( (*liste_de_plus_grande_taille)[ll] );
516
517 for (nb_element_dans_liste = 0;
518 nb_element_dans_liste < (*liste_de_plus_petite_taille).size();
519 nb_element_dans_liste++)
520 if
521 (Liste_reduite.contient( (*liste_de_plus_petite_taille)
522 [nb_element_dans_liste] ) )
523 Liste_reduite.suppr( (*liste_de_plus_petite_taille)
524 [nb_element_dans_liste] );
525
526 // Cerr << "Je sors de reduction" << finl;
527}
528
529
530/*
531 *
532 *
533 *
534 *
535 *
536 */
537
538/*! @brief fonction membre qui renvoie le numero de l'element contenant Face1 et Face2 s'il existe et renvoie -1 sinon.
539 *
540 */
542element_commun(const int Face1,const int Face2) const
543{
544 // Cerr << "J'entre dans element_commun" << finl;
545
546 /* Les elements voisins de Face1 */
547 const int voisin1_Face1 = domaine_vef().face_voisins(Face1,1);
548 const int voisin2_Face1 = domaine_vef().face_voisins(Face1,0);
549
550 /* Les elements voisins de Face2 */
551 const int voisin1_Face2 = domaine_vef().face_voisins(Face2,1);
552 const int voisin2_Face2 = domaine_vef().face_voisins(Face2,0);
553
554 /* On cherche l'element commun */
555 if (voisin1_Face1 != -1)
556 if (voisin1_Face1 == voisin1_Face2 || voisin1_Face1 == voisin2_Face2)
557 return voisin1_Face1;
558
559 if (voisin2_Face1 != -1)
560 if (voisin2_Face1 == voisin1_Face2 || voisin2_Face1 == voisin2_Face2)
561 return voisin2_Face1;
562
563 Cerr << " Op_Diff_VEF_Face_Penalise::element_commun()" << finl;
564 Cerr << "Attention: la face " << Face1 << " et la face " << Face2
565 << "n'ont pas d'element commun" << finl;
566 Cerr << "Je sors de elements_communs" << finl;
567 return -1;
568
569}
570
571/*
572 *
573 *
574 *
575 *
576 *
577 */
578
579/*! @brief fonction membre qui retourne la 3eme face de l'element Element si Face1 et Face2 appartiennent au meme element.
580 *
581 * Sinon retourne -1.
582 *
583 */
585autre_face(const int Face1, const int Face2)
586const
587{
588 // Cerr << "J'entre dans autre_face" << finl;
589 /* Declaration des variables locales */
590 int numero_local,lautre_face=-1;
591 int elem_commun = element_commun(Face1,Face2);
592
593 /* Le nombre de faces des elements constituant le domaine
594 * de discretisation.
595 * REM: on suppose que l'on ne travaille pas sur des prismes.
596 */
597 if (elem_commun == -1)
598 {
599 Cerr << "Fonction element_commun" << finl;
600 Cerr << "Les 2 faces n'appartiennent pas au meme element." << finl;
602 return lautre_face;
603 }
604
605 const int nb_faces_element = domaine().nb_faces_elem();
606
607 for (numero_local = 0; numero_local < nb_faces_element; numero_local++)
608
609 {
610 /* On recupere le numero global de chacune des
611 * faces de Element
612 */
613 const int numero_global_face =
614 domaine_vef().elem_faces(elem_commun,numero_local);
615
616 if ( numero_global_face != Face1 && numero_global_face != Face2)
617 {
618 lautre_face = numero_global_face;
619 break;
620 }
621
622 }//fin du for
623
624 // Cerr << "Je sors de autre_face" << finl;
625 return lautre_face;
626
627}
628/*
629 *
630 *
631 *
632 *
633 *
634 */
635
636
int nb_faces() const
renvoie le nombre global de faces.
Definition Domaine_VF.h:471
int nb_som_face() const
renvoie le nombre de sommets par face.
Definition Domaine_VF.h:494
int elem_faces(int i, int j) const
renvoie le numero de le ieme face de la maille num_elem la facon dont ces faces sont numerotees est
Definition Domaine_VF.h:543
int face_voisins(int num_face, int i) const
renvoie l'element voisin de numface dans la direction i.
Definition Domaine_VF.h:418
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
static int dimension
Definition Objet_U.h:99
const Nom & que_suis_je() const
renvoie la chaine identifiant la classe.
Definition Objet_U.cpp:104
virtual Entree & readOn(Entree &)
Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
Definition Objet_U.cpp:293
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
Definition Objet_U.cpp:282
void reduction(const IntList &Liste1, const IntList &Liste2, IntList &Liste_reduite) const
void faces_communes(const int Face1, const int Face2, IntList &Face_commune) const
fonction membre qui renvoie la liste des faces appartenant au voisinage de Face1 ET de Face2.
double signe(const int Face1, const int Face2) const
double diametre(const int Element) const
DoubleTab & ajouter(const DoubleTab &inconnue, DoubleTab &resu) const override
methode qui calcule la vitesse au temps n+1 lorsque le schema explicite est utilise.
void voisinage(const int Numero_face, IntList &Voisinage) const
methode qui calcule le voisinage d'une face.
DoubleTab & calculer(const DoubleTab &inconnue, DoubleTab &resu) const override
methode qui calcule la contribution de l'operateur.
double coefficient_penalisation(const int Numero_face) const
fonction membre qui retourne le coefficient de penalisation associee a chaque face du maillage primai...
double longueur(const int Face) const
int autre_face(const int Face1, const int Face2) const
fonction membre qui retourne la 3eme face de l'element Element si Face1 et Face2 appartiennent au mem...
int element_commun(const int Face1, const int Face2) const
fonction membre qui renvoie le numero de l'element contenant Face1 et Face2 s'il existe et renvoie -1...
class Op_Diff_VEF_Face Cette classe represente l'operateur de diffusion
DoubleTab & ajouter(const DoubleTab &, DoubleTab &) const override
const Domaine_VEF & domaine_vef() const
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Definition Process.cpp:455
Classe de base des flux de sortie.
Definition Sortie.h:52
int est_vide() const
TRUSTList & add(_TYPE_)
insertion en queue
Definition TRUSTList.tpp:85
TRUSTList & add_if_not(_TYPE_)
Ajout d'un element a la liste ssi il n'existe pas deja.
void suppr(_TYPE_)
Supprime un element contenu dans la liste.
int contient(_TYPE_) const
Verifie si un element appartient ou non a la liste.
void vide()
Vide la liste.
int size() const
Definition TRUSTList.h:68