TrioCFD 1.9.9_beta
TrioCFD documentation
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 // Fill the integer array type_arete_bord_ and the intermediate array les_faces_Cl.
54 // les_faces_Cl gives the boundary condition for each boundary face using the following conventions:
55 // 0 for a wall condition
56 // 1 for a fluid inlet or outlet condition ("fluid" face)
57 // 2 for a Navier condition (symmetry/slip wall)
58 // 3 for a periodicity condition
59 // 0 for any other BC.
60 // Only boundary conditions that affect the momentum equation are considered.
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 // Loop over boundary conditions to fill les_faces_Cl:
67 for (int n_bord = 0; n_bord < le_dom_VDF.nb_front_Cl(); n_bord++)
68 {
69 // for each boundary condition, determine its 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)) // (symmetry/slip wall)
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 // Loop over boundary edges to fill type_arete_bord_
95
96 type_arete_bord_ = TypeAreteBordVDF::VIDE; // initialize
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) // wall
121 {
122 if (les_faces_Cl[rang2] == 0) // wall
123 type_arete_bord_[num_arete_] = TypeAreteBordVDF::PAROI_PAROI;
124 else if (les_faces_Cl[rang2] == 1) // fluid inlet/outlet
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 << "Processing an edge separating two faces of the same orientation: " << finl;
131 Cerr << "one of these faces has a wall-type boundary condition " << finl;
132 Cerr << "and the other has a Periodicity condition" << finl;
133 Cerr << "TRUST cannot handle this 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) // fluid inlet/outlet
142 {
143 if (les_faces_Cl[rang2] == 0) // wall
144 type_arete_bord_[num_arete_] = TypeAreteBordVDF::PAROI_FLUIDE;
145 else if (les_faces_Cl[rang2] == 1) // fluid
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 << "Processing an edge separating two faces of the same orientation: " << finl;
152 Cerr << "one of these faces has a fluid boundary condition " << finl;
153 Cerr << "and the other has a Periodicity condition" << finl;
154 Cerr << "TRUST cannot handle this situation" << finl;
156 }
157 }
158 else if (les_faces_Cl[rang1] == 2) // navier
159 {
160 if (les_faces_Cl[rang2] == 0) // wall
161 type_arete_bord_[num_arete_] = TypeAreteBordVDF::PAROI_NAVIER;
162 else if (les_faces_Cl[rang2] == 1) // inlet
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 << "Processing an edge separating two faces of the same orientation: " << finl;
169 Cerr << "one of these faces has a Symmetry-type boundary condition " << finl;
170 Cerr << "and the other has a Periodicity condition" << finl;
171 Cerr << "TRUST cannot handle this 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 // Loop over corner edges to fill type_arete_coin_
192
193 type_arete_coin_= TypeAreteCoinVDF::VIDE; // initialize
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 // Find the 2 values different from -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) // periodic face
242 {
243 if (les_faces_Cl[rang2] == 3) // periodic face
244 type_arete_coin_[num_arete_] = TypeAreteCoinVDF::PERIO_PERIO;
245 else if (les_faces_Cl[rang2] == 0) // wall face
246 type_arete_coin_[num_arete_] = TypeAreteCoinVDF::PERIO_PAROI;
247 else if (les_faces_Cl[rang2] == 1) // free outlet or fluid inlet
248 type_arete_coin_[num_arete_] = TypeAreteCoinVDF::PERIO_FLUIDE;
249 else
250 {
251 Cerr << "Processing an edge separating two faces in a corner: " << finl;
252 Cerr << "one of these faces has a periodicity boundary condition " << finl;
253 Cerr << "and the other has a condition other than periodicity or wall" << finl;
254 Cerr << "This modification has not yet been implemented!!!" << finl;
255 // exit();
256 }
257 }
258 else if (les_faces_Cl[rang1] == 0) // wall face
259 {
260 if (les_faces_Cl[rang2] == 3) // periodic face
261 type_arete_coin_[num_arete_] = TypeAreteCoinVDF::PERIO_PAROI;
262 else if (les_faces_Cl[rang2] == 0) // wall face
263 type_arete_coin_[num_arete_] = TypeAreteCoinVDF::PAROI_PAROI;
264 else if (les_faces_Cl[rang2] == 1) // fluid face
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 // Do not change anything. This edge type does not require special treatment.
276 type_arete_coin_[num_arete_] = TypeAreteCoinVDF::VIDE;
277 }
278 }
279 else if (les_faces_Cl[rang1] == 1) // free outlet or fluid inlet face
280 {
281 if (les_faces_Cl[rang2] == 2) // symmetry face
282 type_arete_coin_[num_arete_] = TypeAreteCoinVDF::FLUIDE_NAVIER;
283 else if (les_faces_Cl[rang2] == 0) // wall face
284 {
286 type_arete_coin_[num_arete_] = TypeAreteCoinVDF::FLUIDE_PAROI;
287 else
288 // Do not change anything. This edge type does not require special treatment.
289 type_arete_coin_[num_arete_] = TypeAreteCoinVDF::VIDE;
290 }
291 else if (les_faces_Cl[rang2] == 1) // free outlet or fluid inlet face
292 {
294 type_arete_coin_[num_arete_] = TypeAreteCoinVDF::FLUIDE_FLUIDE;
295 else
296 // Do not change anything. This edge type does not require special treatment.
297 type_arete_coin_[num_arete_] = TypeAreteCoinVDF::VIDE;
298 }
299 // Modif AC : 27/02/03
300 else if (les_faces_Cl[rang2] == 3) // periodic face
301 {
302 type_arete_coin_[num_arete_] = TypeAreteCoinVDF::PERIO_FLUIDE;
303 }
304 // End Modif AC : 27/02/03
305 else
306 {
307 Cerr << "This case is not handled for 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) // symmetry face
313 {
314 if (les_faces_Cl[rang2] == 0) // wall face
315 type_arete_coin_[num_arete_] = TypeAreteCoinVDF::PAROI_NAVIER;
316 else if (les_faces_Cl[rang2] == 1) // free outlet or fluid inlet face
317 type_arete_coin_[num_arete_] = TypeAreteCoinVDF::FLUIDE_NAVIER;
318 else if (les_faces_Cl[rang2] == 2) // symmetry
319 type_arete_coin_[num_arete_] = TypeAreteCoinVDF::NAVIER_NAVIER;
320 else if (les_faces_Cl[rang2] == 3) // periodicity
321 {
322 // Do not change anything. This edge type does not require special treatment.
323 type_arete_coin_[num_arete_] = TypeAreteCoinVDF::VIDE;
324 }
325 else
326 {
327 Cerr << "This case is not handled for 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() expects a Domaine_VDF argument\n";
339 }
340}
341
342/*! @brief Enforces the boundary conditions at time "temps" on the Champ_Inc.
343 *
344 * @param ch The field on which boundary conditions are imposed.
345 * @param temps The current time.
346 */
348{
349 static int init=0;
350 DoubleTab& ch_tab = ch.valeurs(temps);
351 const int N = ch_tab.line_size();
352 if (sub_type(Champ_P0_VDF,ch)) { /* Do nothing */}
353 else if(ch.nature_du_champ()==scalaire) { /* Do nothing */}
354 else if (sub_type(Champ_Face_VDF,ch))
355 {
356 Champ_Face_VDF& ch_face = ref_cast(Champ_Face_VDF, ch);
357 const Domaine_VDF& mon_dom_VDF = ch_face.domaine_vdf();
358 int ndeb,nfin, num_face;
359
360 for(int i=0; i<nb_cond_lim(); i++)
361 {
362 const Cond_lim_base& la_cl = les_conditions_limites(i).valeur();
363 if (sub_type(Periodique,la_cl))
364 {
365 if (init == 0)
366 {
367 // Ensure that the field has the same value
368 // on two periodic faces that are facing each other
369 const Periodique& la_cl_perio = ref_cast(Periodique,la_cl);
370 const Front_VF& le_bord = ref_cast(Front_VF,la_cl.frontiere_dis());
371 ndeb = le_bord.num_premiere_face();
372 nfin = ndeb + le_bord.nb_faces();
373 int voisine;
374 double moy;
375 for (num_face=ndeb; num_face<nfin; num_face++)
376 {
377 voisine = la_cl_perio.face_associee(num_face-ndeb) + ndeb;
378 if ( ch_tab[num_face] != ch_tab[voisine] )
379 {
380 // Cerr << "dans Domaine_Cl_VDF::imposer_cond_lim : on reajuste les vitesses!! pour la face num=" << num_face << finl;
381 // Cerr << "difference = ch_tab[num_face]-ch_tab[voisine]=" << ch_tab[num_face]-ch_tab[voisine] << finl;
382 moy = 0.5*(ch_tab[num_face] + ch_tab[voisine]);
383 ch_tab[num_face] = moy;
384 ch_tab[voisine] = moy;
385 }
386 }
387 // This should not be done on the first BC but once all BCs have been processed once, for multi-perio case with non-periodic IC
388 // init = 1;
389 }
390 }
391 else if( sub_type(Navier,la_cl) )
392 {
393 const Front_VF& le_bord = ref_cast(Front_VF,la_cl.frontiere_dis());
394 ndeb = le_bord.num_premiere_face();
395 nfin = ndeb + le_bord.nb_faces();
396 for (num_face=ndeb; num_face<nfin; num_face++)
397 for (int n = 0; n < N; n++)
398 ch_tab(num_face, n) = 0;
399 }
400 else if ( sub_type(Dirichlet_entree_fluide,la_cl) )
401 {
402 const Dirichlet_entree_fluide& la_cl_diri = ref_cast(Dirichlet_entree_fluide,la_cl);
403 const Front_VF& le_bord = ref_cast(Front_VF,la_cl.frontiere_dis());
404 ndeb = le_bord.num_premiere_face();
405 nfin = ndeb + le_bord.nb_faces();
406
407 for (num_face = ndeb; num_face < nfin; num_face++)
408 for (int n = 0; n < N; n++)
409 {
410 // WEC : optimizable (for each face searches for the right time!)
411 ch_tab(num_face, n) = la_cl_diri.val_imp_au_temps(temps, num_face - ndeb, N * mon_dom_VDF.orientation(num_face) + n);
412 }
413 }
414 else if ( sub_type(Dirichlet_paroi_fixe,la_cl) )
415 {
416 const Front_VF& le_bord = ref_cast(Front_VF,la_cl.frontiere_dis());
417 ndeb = le_bord.num_premiere_face();
418 nfin = ndeb + le_bord.nb_faces();
419 for (num_face=ndeb; num_face<nfin; num_face++)
420 for (int n = 0; n < N; n++)
421 ch_tab(num_face, n) = 0;
422 }
423 else if ( sub_type(Dirichlet_paroi_defilante,la_cl) )
424 {
425 const Front_VF& le_bord = ref_cast(Front_VF,la_cl.frontiere_dis());
426 ndeb = le_bord.num_premiere_face();
427 nfin = ndeb + le_bord.nb_faces();
428 for (num_face=ndeb; num_face<nfin; num_face++)
429 for (int n = 0; n < N; n++)
430 ch_tab(num_face, n) = 0;
431 }
432 }
433 init = 1;
434 }
435 else
436 {
437 Cerr << "The type OWN_PTR(Champ_Inc_base) " << ch.que_suis_je() << " is not supported in VDF\n";
438 exit();
439 }
440 ch_tab.echange_espace_virtuel();
441 Debog::verifier("Domaine_Cl_VDF::imposer_cond_lim ch_tab",ch_tab);
442}
443
444
446{
447 int compteur = 0;
448 for (const auto &itr : les_conditions_limites_)
449 {
450 if (sub_type(Sortie_libre_pression_imposee, itr.valeur()))
451 {
452 const Front_VF& le_bord = ref_cast(Front_VF, itr->frontiere_dis());
453 compteur += le_bord.nb_faces();
454 }
455 }
456 return compteur;
457}
458
463
465{
466 return ref_cast(Domaine_VDF, domaine_dis());
467}
468
470{
471 return domaine_VDF().nb_faces_bord();
472}
class Champ_Face_VDF
const Domaine_VDF & domaine_vdf() const override
Class Champ_Inc_base.
DoubleTab & valeurs() override
Returns the array of field values at the current time.
class Champ_P0_VDF Class representing a P0 discrete field per element associated with a discretized d...
class Cond_lim_base Base class for the hierarchy of classes that represent the different boundary con...
virtual Frontiere_dis_base & frontiere_dis()
Returns the discretized boundary to which the boundary conditions apply.
static void verifier(const char *const msg, double)
Definition Debog.cpp:21
Dirichlet_entree_fluide This class represents a boundary condition imposing a quantity.
Dirichlet_paroi_defilante Imposes the wall velocity in an equation of type Navier_Stokes.
Dirichlet_paroi_fixe Represents a fixed wall in a Navier-Stokes type equation.
virtual double val_imp_au_temps(double temps, int i) const
Returns the imposed value on the i-th component of the field at the boundary at the specified time.
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
Enforces the boundary conditions at time "temps" on the Champ_Inc.
void associer(const Domaine_dis_base &) override
int nb_faces_bord() const
Domaine_VDF & domaine_VDF()
int nb_faces_sortie_libre() const
class Domaine_Cl_dis_base Domaine_Cl_dis_base objects represent discretized boundary conditions
int nb_cond_lim() const
Returns the number of boundary conditions.
void completer()
Calls Cond_lim_base::completer() on each boundary condition.
Conds_lim & les_conditions_limites()
Returns the array of boundary conditions.
Domaine_dis_base & domaine_dis()
Returns a reference to the discretized domain associated with the boundary conditions.
class Domaine_VDF
Definition Domaine_VDF.h:61
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
Returns the total number of 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
Returns the number of faces on which boundary conditions are applied:
Definition Domaine_VF.h:512
class Domaine_dis_base This class is the base of the hierarchy of discretized domains.
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
Returns the number of faces of the boundary.
Definition Frontiere.h:59
const Frontiere & frontiere() const
Returns the associated geometric boundary.
Navier Velocity boundary condition of type "Navier":
Definition Navier.h:31
Neumann_sortie_libre This class represents an open boundary without imposed velocity.
const Nom & que_suis_je() const
Returns the string identifying the class.
Definition Objet_U.cpp:104
virtual Entree & readOn(Entree &)
Reads an Objet_U from an input stream. Virtual method to override.
Definition Objet_U.cpp:289
virtual Sortie & printOn(Sortie &) const
Writes the object to an output stream. Virtual method to override.
Definition Objet_U.cpp:278
static int traitement_coins
Definition Option_VDF.h:30
class Periodique This class represents a periodic boundary condition.
Definition Periodique.h:31
int face_associee(int i) const
Definition Periodique.h:35
static Sortie & Journal(int message_level=0)
Returns a static Sortie object used as an event journal.
Definition Process.cpp:592
static void exit(int exit_code=-1)
Exit routine for TRUST within a Kokkos region.
Definition Process.cpp:466
Sortie_libre_pression_imposee This class derives from Neumann_sortie_libre.
Base class for output streams.
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")