TRUST 1.9.8
HPC thermohydraulic platform
Loading...
Searching...
No Matches
Domaine_Cl_VDF.cpp
1/****************************************************************************
2* Copyright (c) 2025, 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 <Dirichlet_entree_fluide_leaves.h>
17#include <Sortie_libre_pression_imposee.h>
18#include <Dirichlet_paroi_defilante.h>
19#include <Dirichlet_paroi_fixe.h>
20#include <Champ_Face_VDF.h>
21#include <Domaine_Cl_VDF.h>
22#include <Champ_P0_VDF.h>
23#include <Domaine_VDF.h>
24#include <Periodique.h>
25#include <Option_VDF.h>
26#include <Navier.h>
27#include <Debog.h>
28
29Implemente_instanciable(Domaine_Cl_VDF,"Domaine_Cl_VDF",Domaine_Cl_dis_base);
30
32{
34 return os << "type_arete_bord_ : " << type_arete_bord_ << finl << "num_Cl_face_ : " << num_Cl_face_ << finl;
35}
36
38
40{
41 const Domaine_VDF& domaine_vdf = ref_cast(Domaine_VDF, dom_dis);
42 type_arete_bord_.resize(domaine_vdf.nb_aretes_bord());
43 type_arete_coin_.resize(domaine_vdf.nb_aretes_coin());
44 num_Cl_face_.resize(domaine_vdf.nb_faces_bord());
45}
46
48{
49 if (sub_type(Domaine_VDF,un_domaine_dis))
50 {
51 const Domaine_VDF& le_dom_VDF = ref_cast(Domaine_VDF,un_domaine_dis);
52
53 // Remplissage du tableau d'entiers type_arete_bord_ + tableau intermediaire : les_faces_Cl
54 // On remplit le tableau d'entiers local les_faces_Cl qui donne la condition aux limites pour chaque face de bord avec les conventions suivantes :
55 // 0 pour une condition de paroi
56 // 1 pour une condition d'entree ou de sortie de fluide (face "fluide")
57 // 2 pour une condition de navier (symmetrie/paroi frottante)
58 // 3 pour une condition de periodicite
59 // 0 pour toute autre Cl.
60 // On ne considere que les conditions aux limites qui interviennent pour la quantite de mouvement
61
62 int nb_aretes_bord = le_dom_VDF.nb_aretes_bord();
63 IntVect les_faces_Cl;
64 le_dom_VDF.creer_tableau_faces_bord(les_faces_Cl);
65
66 // Boucle sur les conditions aux limites pour remplir les_faces_Cl:
67 for (int n_bord = 0; n_bord < le_dom_VDF.nb_front_Cl(); n_bord++)
68 {
69 // pour chaque Condition Limite on regarde son type
70 const Cond_lim_base& la_cl = les_conditions_limites_[n_bord].valeur();
71
72 int numero_cl = 0;
73
74 if ((sub_type(Dirichlet_paroi_fixe, la_cl)) || (sub_type(Dirichlet_paroi_defilante, la_cl)))
75 numero_cl = 0;
76 else if ((sub_type(Dirichlet_entree_fluide, la_cl)) || (sub_type(Neumann_sortie_libre, la_cl)))
77 numero_cl = 1;
78 else if (sub_type(Navier, la_cl)) // (symmetrie/paroi frottante)
79 numero_cl = 2;
80 else if (sub_type(Periodique, la_cl))
81 numero_cl = 3;
82
83 const Frontiere& fr = la_cl.frontiere_dis().frontiere();
84 const int ndeb = fr.num_premiere_face(), nfin = ndeb + fr.nb_faces();
85 for (int i = ndeb; i < nfin; i++)
86 {
87 les_faces_Cl[i] = numero_cl;
88 num_Cl_face_[i] = n_bord;
89 }
90 }
91
92 les_faces_Cl.echange_espace_virtuel();
93
94 // Boucle sur les aretes bord pour remplir type_arete_bord_
95
96 type_arete_bord_ = TypeAreteBordVDF::VIDE; // on initialise
97
98 int face1, face2, rang1, rang2;
99 int ndeb = le_dom_VDF.premiere_arete_bord(), nfin = ndeb + nb_aretes_bord;
100 int num_arete_;
101
102 int decal_virt = le_dom_VDF.nb_faces();
103 int sz_faces_Cl = les_faces_Cl.size_reelle();
104 const ArrOfInt& ind_faces_virt_bord = le_dom_VDF.domaine().ind_faces_virt_bord();
105
106 for (int num_arete = ndeb; num_arete < nfin; num_arete++)
107 {
108 num_arete_ = num_arete - ndeb;
109 face1 = le_dom_VDF.Qdm(num_arete, 0);
110 face2 = le_dom_VDF.Qdm(num_arete, 1);
111 rang1 = face1;
112 rang2 = face2;
113
114 if (rang1 >= sz_faces_Cl)
115 rang1 = ind_faces_virt_bord[rang1 - decal_virt];
116
117 if (rang2 >= sz_faces_Cl)
118 rang2 = ind_faces_virt_bord[rang2 - decal_virt];
119
120 if (les_faces_Cl[rang1] == 0) // paroi
121 {
122 if (les_faces_Cl[rang2] == 0) // paroi
123 type_arete_bord_[num_arete_] = TypeAreteBordVDF::PAROI_PAROI;
124 else if (les_faces_Cl[rang2] == 1) // entree/sortie fluide
125 type_arete_bord_[num_arete_] = TypeAreteBordVDF::PAROI_FLUIDE;
126 else if (les_faces_Cl[rang2] == 2) // navier
127 type_arete_bord_[num_arete_] = TypeAreteBordVDF::PAROI_NAVIER;
128 else
129 {
130 Cerr << "On traite une arete qui separe deux faces de meme orientation : " << finl;
131 Cerr << "l'une de ces faces porte une condition limite de type paroi " << finl;
132 Cerr << "et l'autre porte une condition de type Periodicite" << finl;
133 Cerr << "TRUST ne sait pas traiter cette situation" << finl;
134 Process::Journal() << "ERREUR Faces_CL" << finl;
135 Process::Journal() << "face1:" << face1 << " , face2:" << face2 << finl;
136 Process::Journal() << "rang1:" << rang1 << " , rang2:" << rang2 << finl;
137 Process::Journal() << "les_faces_Cl[rang1]:" << les_faces_Cl[rang1] << " , les_faces_Cl[rang2]:" << les_faces_Cl[rang2] << finl;
139 }
140 }
141 else if (les_faces_Cl[rang1] == 1) // entree/sortie fluide
142 {
143 if (les_faces_Cl[rang2] == 0) // paroi
144 type_arete_bord_[num_arete_] = TypeAreteBordVDF::PAROI_FLUIDE;
145 else if (les_faces_Cl[rang2] == 1) // fluide
146 type_arete_bord_[num_arete_] = TypeAreteBordVDF::FLUIDE_FLUIDE;
147 else if (les_faces_Cl[rang2] == 2) // navier
148 type_arete_bord_[num_arete_] = TypeAreteBordVDF::FLUIDE_NAVIER;
149 else
150 {
151 Cerr << "On traite une arete qui separe deux faces de meme orientation : " << finl;
152 Cerr << "l'une de ces faces porte une condition limite de type frontiere fluide " << finl;
153 Cerr << "et l'autre porte une condition de type Periodicite" << finl;
154 Cerr << "TRUST ne sait pas traiter cette situation" << finl;
156 }
157 }
158 else if (les_faces_Cl[rang1] == 2) // navier
159 {
160 if (les_faces_Cl[rang2] == 0) // paroi
161 type_arete_bord_[num_arete_] = TypeAreteBordVDF::PAROI_NAVIER;
162 else if (les_faces_Cl[rang2] == 1) // entree
163 type_arete_bord_[num_arete_] = TypeAreteBordVDF::FLUIDE_NAVIER;
164 else if (les_faces_Cl[rang2] == 2) // navier
165 type_arete_bord_[num_arete_] = TypeAreteBordVDF::NAVIER_NAVIER;
166 else
167 {
168 Cerr << "On traite une arete qui separe deux faces de meme orientation : " << finl;
169 Cerr << "l'une de ces faces porte une condition limite de type Symetrie " << finl;
170 Cerr << "et l'autre porte une condition de type Periodicite" << finl;
171 Cerr << "TRUST ne sait pas traiter cette situation" << finl;
173 }
174 }
175 else if (les_faces_Cl[rang1] == 3)
176 {
177 if (les_faces_Cl[rang2] == 3)
178 type_arete_bord_[num_arete_] = TypeAreteBordVDF::PERIO_PERIO;
179 else
180 {
181 Cerr << "On traite une arete qui separe deux faces de meme orientation : " << finl;
182 Cerr << "l'une de ces faces porte une condition limite de type Periodicite " << finl;
183 Cerr << "et l'autre porte une condition d'un autre type" << finl;
184 Cerr << "TRUST ne sait pas traiter cette situation" << finl;
186 }
187 }
188 }
189
190 // MODIFS CA : 21/09/99
191 // Boucle sur les aretes coin pour remplir type_arete_coin_
192
193 type_arete_coin_= TypeAreteCoinVDF::VIDE; // on initialise
194
195 ndeb = le_dom_VDF.premiere_arete_coin();
196 nfin = ndeb + le_dom_VDF.nb_aretes_coin();
197 int fac1, fac2, fac3, fac4;
198 ArrOfInt f(2);
199 for (int num_arete = ndeb; num_arete < nfin; num_arete++)
200 {
201 num_arete_ = num_arete - ndeb;
202
203 // On cherche les 2 valeurs differentes de -1
204 fac1 = le_dom_VDF.Qdm(num_arete_, 0);
205 fac2 = le_dom_VDF.Qdm(num_arete_, 1);
206 fac3 = le_dom_VDF.Qdm(num_arete_, 2);
207 fac4 = le_dom_VDF.Qdm(num_arete_, 3);
208
209 f = -2;
210 int i = 0;
211 if (fac1 != -1)
212 {
213 f(i) = fac1;
214 i++;
215 }
216 if (fac2 != -1)
217 {
218 f(i) = fac2;
219 i++;
220 }
221 if (fac3 != -1)
222 {
223 f(i) = fac3;
224 i++;
225 }
226 if (fac4 != -1)
227 {
228 f(i) = fac4;
229 i++;
230 }
231
232 rang1 = f(0);
233 rang2 = f(1);
234
235 if (rang1 >= sz_faces_Cl)
236 rang1 -= decal_virt;
237
238 if (rang2 >= sz_faces_Cl)
239 rang2 -= decal_virt;
240
241 if (les_faces_Cl[rang1] == 3) // face de periodicite
242 {
243 if (les_faces_Cl[rang2] == 3) // face de periodicite
244 type_arete_coin_[num_arete_] = TypeAreteCoinVDF::PERIO_PERIO;
245 else if (les_faces_Cl[rang2] == 0) // face de paroi
246 type_arete_coin_[num_arete_] = TypeAreteCoinVDF::PERIO_PAROI;
247 else if (les_faces_Cl[rang2] == 1) // Sortie libre ou entree de fluide
248 type_arete_coin_[num_arete_] = TypeAreteCoinVDF::PERIO_FLUIDE;
249 else
250 {
251 Cerr << "On traite une arete qui separe deux faces dans un coin : " << finl;
252 Cerr << "l'une de ces faces porte une condition limite de type periodicite " << finl;
253 Cerr << "et l'autre porte une condition autre que periodicite ou paroi" << finl;
254 Cerr << "On n a pas encore fait la modif!!!" << finl;
255 // exit();
256 }
257 }
258 else if (les_faces_Cl[rang1] == 0) // face de paroi
259 {
260 if (les_faces_Cl[rang2] == 3) // face de periodicite
261 type_arete_coin_[num_arete_] = TypeAreteCoinVDF::PERIO_PAROI;
262 else if (les_faces_Cl[rang2] == 0) // face de paroi
263 type_arete_coin_[num_arete_] = TypeAreteCoinVDF::PAROI_PAROI;
264 else if (les_faces_Cl[rang2] == 1) // face de fluide
265 {
267 type_arete_coin_[num_arete_] = TypeAreteCoinVDF::PAROI_FLUIDE;
268 else
269 /* {
270 Cerr << "On traite une arete qui separe deux faces dans un coin : " << finl;
271 Cerr << "l'une de ces faces porte une condition limite de type paroi " << finl;
272 Cerr << "et l'autre porte une condition autre que periodicite" << finl;
273 Cerr << "On n a pas encore fait la modif!!!" << finl;
274 } */
275 // On ne change rien. De toute facon, ce type d'arete ne necessite pas de traitement particulier
276 type_arete_coin_[num_arete_] = TypeAreteCoinVDF::VIDE;
277 }
278 }
279 else if (les_faces_Cl[rang1] == 1) // face sortie libre ou entree de fluide
280 {
281 if (les_faces_Cl[rang2] == 2) // face symetrie
282 type_arete_coin_[num_arete_] = TypeAreteCoinVDF::FLUIDE_NAVIER;
283 else if (les_faces_Cl[rang2] == 0) // face paroi
284 {
286 type_arete_coin_[num_arete_] = TypeAreteCoinVDF::FLUIDE_PAROI;
287 else
288 // On ne change rien. De toute facon, ce type d'arete ne necessite pas de traitement particulier
289 type_arete_coin_[num_arete_] = TypeAreteCoinVDF::VIDE;
290 }
291 else if (les_faces_Cl[rang2] == 1) // face sortie libre ou entree de fluide
292 {
294 type_arete_coin_[num_arete_] = TypeAreteCoinVDF::FLUIDE_FLUIDE;
295 else
296 // On ne change rien. De toute facon, ce type d'arete ne necessite pas de traitement particulier
297 type_arete_coin_[num_arete_] = TypeAreteCoinVDF::VIDE;
298 }
299 // Modif AC : 27/02/03
300 else if (les_faces_Cl[rang2] == 3) // face periodique
301 {
302 type_arete_coin_[num_arete_] = TypeAreteCoinVDF::PERIO_FLUIDE;
303 }
304 // Fin Modif AC : 27/02/03
305 else
306 {
307 Cerr << "On ne traite pas ce cas pour les_faces_Cl[rang1] = 1 " << finl;
308 Cerr << "les_faces_Cl[rang2] = " << les_faces_Cl[rang2] << finl;
309 exit();
310 }
311 }
312 else if (les_faces_Cl[rang1] == 2) // face symetrie
313 {
314 if (les_faces_Cl[rang2] == 0) // face paroi
315 type_arete_coin_[num_arete_] = TypeAreteCoinVDF::PAROI_NAVIER;
316 else if (les_faces_Cl[rang2] == 1) // face sortie libre ou entree de fluide
317 type_arete_coin_[num_arete_] = TypeAreteCoinVDF::FLUIDE_NAVIER;
318 else if (les_faces_Cl[rang2] == 2) // symetrie
319 type_arete_coin_[num_arete_] = TypeAreteCoinVDF::NAVIER_NAVIER;
320 else if (les_faces_Cl[rang2] == 3) // periodicite
321 {
322 // On ne change rien. De toute facon, ce type d'arete ne necessite pas de traitement particulier
323 type_arete_coin_[num_arete_] = TypeAreteCoinVDF::VIDE;
324 }
325 else
326 {
327 Cerr << "On ne traite pas ce cas pour les_faces_Cl[rang1] = 2 " << finl;
328 Cerr << "les_faces_Cl[rang2] = " << les_faces_Cl[rang2] << finl;
330 }
331 }
332 }
333 }
334
335 else
336 {
337 Cerr << "Domaine_Cl_VDF::completer() attend en argument un Domaine_VDF\n";
339 }
340}
341
342/*! @brief Impose les conditions aux limites a la valeur temporelle "temps" du Champ_Inc
343 *
344 */
346{
347 static int init=0;
348 DoubleTab& ch_tab = ch.valeurs(temps);
349 const int N = ch_tab.line_size();
350 if (sub_type(Champ_P0_VDF,ch)) { /* Do nothing */}
351 else if(ch.nature_du_champ()==scalaire) { /* Do nothing */}
352 else if (sub_type(Champ_Face_VDF,ch))
353 {
354 Champ_Face_VDF& ch_face = ref_cast(Champ_Face_VDF, ch);
355 const Domaine_VDF& mon_dom_VDF = ch_face.domaine_vdf();
356 int ndeb,nfin, num_face;
357
358 for(int i=0; i<nb_cond_lim(); i++)
359 {
360 const Cond_lim_base& la_cl = les_conditions_limites(i).valeur();
361 if (sub_type(Periodique,la_cl))
362 {
363 if (init == 0)
364 {
365 // On fait en sorte que le champ ait la meme valeur
366 // sur deux faces de periodicite qui sont en face l'une de l'autre
367 const Periodique& la_cl_perio = ref_cast(Periodique,la_cl);
368 const Front_VF& le_bord = ref_cast(Front_VF,la_cl.frontiere_dis());
369 ndeb = le_bord.num_premiere_face();
370 nfin = ndeb + le_bord.nb_faces();
371 int voisine;
372 double moy;
373 for (num_face=ndeb; num_face<nfin; num_face++)
374 {
375 voisine = la_cl_perio.face_associee(num_face-ndeb) + ndeb;
376 if ( ch_tab[num_face] != ch_tab[voisine] )
377 {
378 // Cerr << "dans Domaine_Cl_VDF::imposer_cond_lim : on reajuste les vitesses!! pour la face num=" << num_face << finl;
379 // Cerr << "difference = ch_tab[num_face]-ch_tab[voisine]=" << ch_tab[num_face]-ch_tab[voisine] << finl;
380 moy = 0.5*(ch_tab[num_face] + ch_tab[voisine]);
381 ch_tab[num_face] = moy;
382 ch_tab[voisine] = moy;
383 }
384 }
385 // Il ne faut pas le faire a la premiere cl mais une fois toutes les cl faites une fois, cas multi perio avec ci non perio
386 // init = 1;
387 }
388 }
389 else if( sub_type(Navier,la_cl) )
390 {
391 const Front_VF& le_bord = ref_cast(Front_VF,la_cl.frontiere_dis());
392 ndeb = le_bord.num_premiere_face();
393 nfin = ndeb + le_bord.nb_faces();
394 for (num_face=ndeb; num_face<nfin; num_face++)
395 for (int n = 0; n < N; n++)
396 ch_tab(num_face, n) = 0;
397 }
398 else if ( sub_type(Dirichlet_entree_fluide,la_cl) )
399 {
400 const Dirichlet_entree_fluide& la_cl_diri = ref_cast(Dirichlet_entree_fluide,la_cl);
401 const Front_VF& le_bord = ref_cast(Front_VF,la_cl.frontiere_dis());
402 ndeb = le_bord.num_premiere_face();
403 nfin = ndeb + le_bord.nb_faces();
404
405 for (num_face = ndeb; num_face < nfin; num_face++)
406 for (int n = 0; n < N; n++)
407 {
408 // WEC : optimisable (pour chaque face recherche le bon temps !)
409 ch_tab(num_face, n) = la_cl_diri.val_imp_au_temps(temps, num_face - ndeb, N * mon_dom_VDF.orientation(num_face) + n);
410 }
411 }
412 else if ( sub_type(Dirichlet_paroi_fixe,la_cl) )
413 {
414 const Front_VF& le_bord = ref_cast(Front_VF,la_cl.frontiere_dis());
415 ndeb = le_bord.num_premiere_face();
416 nfin = ndeb + le_bord.nb_faces();
417 for (num_face=ndeb; num_face<nfin; num_face++)
418 for (int n = 0; n < N; n++)
419 ch_tab(num_face, n) = 0;
420 }
421 else if ( sub_type(Dirichlet_paroi_defilante,la_cl) )
422 {
423 const Front_VF& le_bord = ref_cast(Front_VF,la_cl.frontiere_dis());
424 ndeb = le_bord.num_premiere_face();
425 nfin = ndeb + le_bord.nb_faces();
426 for (num_face=ndeb; num_face<nfin; num_face++)
427 for (int n = 0; n < N; n++)
428 ch_tab(num_face, n) = 0;
429 }
430 }
431 init = 1;
432 }
433 else
434 {
435 Cerr << "Le type de OWN_PTR(Champ_Inc_base) " << ch.que_suis_je() << " n'est pas prevu en VDF\n";
436 exit();
437 }
438 ch_tab.echange_espace_virtuel();
439 Debog::verifier("Domaine_Cl_VDF::imposer_cond_lim ch_tab",ch_tab);
440}
441
442
444{
445 int compteur = 0;
446 for (const auto &itr : les_conditions_limites_)
447 {
448 if (sub_type(Sortie_libre_pression_imposee, itr.valeur()))
449 {
450 const Front_VF& le_bord = ref_cast(Front_VF, itr->frontiere_dis());
451 compteur += le_bord.nb_faces();
452 }
453 }
454 return compteur;
455}
456
461
463{
464 return ref_cast(Domaine_VDF, domaine_dis());
465}
466
468{
469 return domaine_VDF().nb_faces_bord();
470}
class Champ_Face_VDF Cette classe sert a representer un champ vectoriel dont on ne calcule
const Domaine_VDF & domaine_vdf() const override
Classe Champ_Inc_base.
DoubleTab & valeurs() override
Renvoie le tableau des valeurs du champ au temps courant.
classe Champ_P0_VDF Classe qui represente un champ discret P0 par element associe a un domaine discre...
classe Cond_lim_base Classe de base pour la hierarchie des classes qui representent les differentes c...
virtual Frontiere_dis_base & frontiere_dis()
Renvoie la frontiere discretisee a laquelle les conditions aux limites s'appliquent.
static void verifier(const char *const msg, double)
Definition Debog.cpp:21
classe Dirichlet_entree_fluide Cette classe represente une condition aux limite imposant une grandeur
classe Dirichlet_paroi_defilante Impose la vitesse de paroi dnas une equation de type Navier_Stokes.
classe Dirichlet_paroi_fixe Represente une paroi immobile dans une equation de type Navier_Stokes.
virtual double val_imp_au_temps(double temps, int i) const
Renvoie la valeur imposee sur la i-eme composante du champ a la frontiere au temps precise.
Definition Dirichlet.cpp:54
const ArrOfInt_t & ind_faces_virt_bord() const
Definition Domaine.h:362
class Domaine_Cl_VDF
void imposer_cond_lim(Champ_Inc_base &, double) override
Impose les conditions aux limites a la valeur temporelle "temps" du Champ_Inc.
void associer(const Domaine_dis_base &) override
int nb_faces_bord() const
Domaine_VDF & domaine_VDF()
int nb_faces_sortie_libre() const
classe Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
int nb_cond_lim() const
Renvoie le nombre de conditions aux limites.
void completer()
Appel Cond_lim_base::completer() sur chaque condition aux limites.
Conds_lim & les_conditions_limites()
Renvoie le tableaux des conditions aux limites.
Domaine_dis_base & domaine_dis()
Renvoie une reference sur le domaine discretise associe aux conditions aux limites.
class Domaine_VDF
Definition Domaine_VDF.h:64
int nb_aretes_coin() const
int orientation(int) const override
inline DoubleVect& Domaine_VDF::porosite_face() {
int premiere_arete_bord() const
int premiere_arete_coin() const
int nb_aretes_bord() const
int Qdm(int num_arete, int) const
int nb_faces() const
renvoie le nombre global de faces.
Definition Domaine_VF.h:471
void creer_tableau_faces_bord(Array_base &, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT) const
int nb_faces_bord() const
renvoie le nombre de faces sur lesquelles sont appliquees les conditions limites :
Definition Domaine_VF.h:513
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
int nb_front_Cl() const
const Domaine & domaine() const
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
virtual Nature_du_champ nature_du_champ() const
Definition Field_base.h:77
class Front_VF
Definition Front_VF.h:36
int nb_faces() const
Definition Front_VF.h:53
int num_premiere_face() const
Definition Front_VF.h:63
int_t num_premiere_face() const
Definition Frontiere.h:67
int_t nb_faces() const
Renvoie le nombre de faces de la frontiere.
Definition Frontiere.h:59
const Frontiere & frontiere() const
Renvoie la frontiere geometrique associee.
classe Navier Condition aux limites sur la vitesse de type "Navier" :
Definition Navier.h:31
classe Neumann_sortie_libre Cette classe represente une frontiere ouverte sans vitesse imposee
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
static int traitement_coins
Definition Option_VDF.h:30
classe Periodique Cette classe represente une condition aux limites periodique.
Definition Periodique.h:31
int face_associee(int i) const
Definition Periodique.h:35
static Sortie & Journal(int message_level=0)
Renvoie un objet statique de type Sortie qui sert de journal d'evenements.
Definition Process.cpp:588
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Definition Process.cpp:455
classe Sortie_libre_pression_imposee Cette classe derive de Neumann_sortie_libre
Classe de base des flux de sortie.
Definition Sortie.h:52
int line_size() const
Definition TRUSTVect.tpp:67
_SIZE_ size_reelle() const
Definition TRUSTVect.tpp:27
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")