TRUST 1.9.8
HPC thermohydraulic platform
Loading...
Searching...
No Matches
Interpolation_IBM_base.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
16#include <Interpolation_IBM_base.h>
17#include <Source_PDF_base.h>
18
19Implemente_base(Interpolation_IBM_base, "Interpolation_IBM_base", Objet_U);
20// XD interpolation_ibm_base objet_u interpolation_ibm_base NO_BRACE Base class for all the interpolation methods
21// XD_CONT available in the Immersed Boundary Method (IBM).
22
24{
25 int nb_comp = Objet_U::dimension;
26 Noms units(nb_comp);
27 Noms c_nam(nb_comp);
28
29 dis.discretiser_champ("champ_sommets",le_dom_dis,vectoriel,c_nam,units,nb_comp,0.,solid_points_);
31 {
32 OBS_PTR(Prepro_IBM_base) my_prep = my_source_->getpreproLu();
33 if (my_prep)
34 {
35 DoubleTab& the_values = ref_cast_non_const(DoubleTab, my_prep->get_champ_solid_points());
36 solid_points_->valeurs() = the_values;
37 }
38 }
39 else
40 {
41 if (solid_points_lu_)
42 solid_points_->affecter(solid_points_lu_);
43 }
44
46 {
47 OBS_PTR(Prepro_IBM_base) my_prep = my_source_->getpreproLu();
48 if (my_prep)
49 {
50 DoubleTab& the_values = ref_cast_non_const(DoubleTab, my_prep->get_isNodeDirichlet());
51 dis.discretiser_champ("champ_sommets",le_dom_dis,"is_dirichlet","none",1,0., is_dirichlet_);
52 is_dirichlet_->valeurs() = the_values;
53 }
54 }
55 else
56 {
57 if(is_dirichlet_lu_)
58 {
59 dis.discretiser_champ("champ_sommets",le_dom_dis,"is_dirichlet","none",1,0., is_dirichlet_);
60 is_dirichlet_->affecter(is_dirichlet_lu_);
61 }
62 else
63 {
64 if (my_source_->equation().discretisation().is_vef() && my_source_->get_imm_wall_law())
65 {
66 Cerr<<"Interpolation_IBM_base::discretise field est_dirichlet not provided for imm. wall law with VEF discretization. Exit."<<finl;
67 exit();
68 }
69
70 }
71 }
72
74 {
75 OBS_PTR(Prepro_IBM_base) my_prep = my_source_->getpreproLu();
76 if (my_prep)
77 {
78 DoubleTab& the_values = ref_cast_non_const(DoubleTab, my_prep->get_champ_corresp_elems());
79 dis.discretiser_champ("champ_elem",le_dom_dis,"corresp_elems","none",1,0., corresp_elems_);
80 corresp_elems_->valeurs() = the_values;
81 }
82 }
83 else
84 {
85 if (corresp_elems_lu_)
86 {
87 dis.discretiser_champ("champ_elem",le_dom_dis,"corresp_elems","none",1,0., corresp_elems_);
88 corresp_elems_->affecter(corresp_elems_lu_);
89 }
90 }
91
92 if (my_source_->get_modele().get_PDF_mobile()) discretise_PDF_mobile(dis, le_dom_dis);
93
94 return;
95}
96
98{
99 int nb_comp = Objet_U::dimension;
100
101 dis.discretiser_champ("champ_sommets",le_dom_dis,"distance_projete_solide","",1,0., champ_dis_proj_solid_);
102 DoubleTab& distPSArray = champ_dis_proj_solid_->valeurs();
103 distPSArray = 0.;
104
105 dis.discretiser_champ("champ_sommets",le_dom_dis,"normal_projete_solide","",nb_comp,0., champ_normal_proj_solid_);
106 DoubleTab& normPSArray = champ_normal_proj_solid_->valeurs();
107 normPSArray = 0.;
108
110
111 if (my_source_->get_modele().get_use_pseudo_level_set_moving_PDF())
112 {
113 discretise_pseudo_level_set(dis, le_dom_dis);
115 }
116
117 return;
118}
119
121{
122 dis.discretiser_champ("champ_sommets",le_dom_dis,"pseudo_level_set","",1,0., pseudo_level_set_);
123 DoubleTab& PSLevelStSArray = pseudo_level_set_->valeurs();
124 PSLevelStSArray = 0.;
125}
126
128{
129 return os;
130}
131
133{
134 return is;
135}
136
138{
139 param.ajouter_flag("impr",&impr_); // XD_ADD_P flag
140 // XD_CONT To print IBM-related data
141 param.ajouter("nb_histo_boxes_impr",&N_histo_,Param::OPTIONAL); // XD_ADD_P entier
142 // XD_CONT number of histogram boxes for printed data
143 param.ajouter("est_dirichlet",&is_dirichlet_lu_,Param::OPTIONAL); // XD_ADD_P field_base
144 // XD_CONT Node field of booleans indicating whether the node belong to an element where the interface is
145 param.ajouter_flag("get_solid_points_from_prepro", &solid_points_from_prepro_); // XD_ADD_P rien
146 // XD_CONT get IBM solid points from prepro.
147 param.ajouter_flag("get_is_dirichlet_from_prepro", &is_dirichlet_from_prepro_); // XD_ADD_P rien
148 // XD_CONT get IBM is_dirichlet from prepro.
149 param.ajouter_flag("get_corresp_elems_from_prepro", &corresp_elems_from_prepro_); // XD_ADD_P rien
150 // XD_CONT get IBM corresp_elems from prepro.
151}
152
154{
155 DoubleTab& distance_signee = pseudo_level_set_->valeurs();
156
157 int dim_esp = Objet_U::dimension;
158 const DoubleTab& aire = my_source_->get_champ_aire().valeurs();
159 int nb_elem = aire.dimension(0);
160 const Probleme_base& pb = my_source_->equation().probleme();
161 const Domaine_dis_base& le_dom_dis = pb.domaine_dis();
162 const Domaine& dom = le_dom_dis.domaine();
163 int nb_node_tot = dom.nb_som_tot();
164 int nb_elem_tot = dom.nb_elem_tot();
165
166 IntLists elem_voisins(nb_elem_tot);
167 DoubleTab& aire_ncst = ref_cast_non_const(DoubleTab, aire);
168 bool all_elem_vois = true;
169 my_source_->compute_NeighNode_IBM_elem(aire_ncst, elem_voisins, all_elem_vois);
170
171 DoubleTab& nor = champ_normal_proj_solid_->valeurs();
172 DoubleTab& d1 = champ_dis_proj_solid_->valeurs();
173 if (! nor.size_array() )
174 {
175 Cerr << "Interpolation_IBM_base::definir_pseudo_level_set : no champ_normal_proj_solid_. Exit"<< finl;
176 exit();
177 }
178 if (! d1.size_array() )
179 {
180 Cerr << "Interpolation_IBM_base::definir_pseudo_level_set : no champ_dis_proj_solid_. Exit"<< finl;
181 exit();
182 }
183
184 distance_signee=-99999.;
185 IntTrav deja_fait_elem(nb_elem_tot);
186 DoubleTrav nor_ref_i(nb_node_tot,dim_esp);
187 IntList to_do_cut_elem; // Liste voisin cut cell a traiter
188 to_do_cut_elem.vide(); // On vide la List
189 int idebug_lset = 0;
190 for (int e=0; e<nb_elem; e++)
191 {
192 if (aire(e)>0. && deja_fait_elem(e) == 0) // Determination d un element racine
193 {
194 if (idebug_lset) Cerr<<">>>>>>>>>>>>>> element racine = "<<e<<finl;
195 define_pseudo_level_set_for_one_cut_cell(elem_voisins, e, deja_fait_elem, nor_ref_i, to_do_cut_elem, idebug_lset);
196
197 // Traitement des elements dans to_do_cut_elem
198 if (idebug_lset)
199 {
200 Cerr<<"to_do_cut_elem after define_pseudo_level_set_for_one_cut_cell : ";
201 for (int ip=0; ip<to_do_cut_elem.size(); ip++) Cerr<<to_do_cut_elem[ip]<<" ";
202 Cerr<<finl;
203 }
204 while (to_do_cut_elem.size() != 0)
205 {
206 int elem_voi = to_do_cut_elem[0];
207 if (idebug_lset) Cerr<<"cutted elem_voi = "<<elem_voi<<finl;
208 define_pseudo_level_set_for_one_cut_cell(elem_voisins, elem_voi, deja_fait_elem, nor_ref_i, to_do_cut_elem, idebug_lset);
209 to_do_cut_elem.suppr(elem_voi);
210 if (idebug_lset)
211 {
212 Cerr<<"to_do_cut_elem after define_pseudo_level_set_for_one_cut_cell : ";
213 for (int ip=0; ip<to_do_cut_elem.size(); ip++) Cerr<<to_do_cut_elem[ip]<<" ";
214 Cerr<<finl;
215 Cerr<<"///////////////////////////////////////"<<finl;
216 }
217 }
218 }
219 }
220}
221
222void Interpolation_IBM_base::define_pseudo_level_set_for_one_cut_cell(IntLists& elem_voisins, int elem, IntTab& deja_fait_elem, DoubleTab& nor_ref_i, IntList& to_do_cut_elem, int idebug_lset)
223{
224 DoubleTab& distance_signee = pseudo_level_set_->valeurs();
225 DoubleTab& nor = champ_normal_proj_solid_->valeurs();
226 DoubleTab& d1 = champ_dis_proj_solid_->valeurs();
227 int dim_esp = Objet_U::dimension;
228 const Probleme_base& pb = my_source_->equation().probleme();
229 const Domaine_dis_base& le_dom_dis = pb.domaine_dis();
230 const Domaine& dom = le_dom_dis.domaine();
231 const IntTab& elems= dom.les_elems() ;
232 int nb_som_elem=dom.nb_som_elem();
233
234 bool exist_ref_e = false;
235 DoubleTrav nor_ref_e(dim_esp);
236 // definition d une reference pour l element elem
237 for (int ilr=0; ilr<nb_som_elem; ilr++)
238 {
239 int ir = elems(elem,ilr);
240 // On cherche si il existe une reference pour un sommet
241 if (distance_signee(ir) != -99999.)
242 {
243 for (int k=0; k<dim_esp; k++) nor_ref_e(k) = nor_ref_i(ir,k);
244 exist_ref_e = true;
245 if (idebug_lset) Cerr<<" node = "<<ir;
246 break;
247 }
248 }
249 if (idebug_lset) Cerr<<" > element = "<<elem<<" exist_ref_e = "<<int(exist_ref_e)<<finl;
250
251 // Distance signee pour les sommets de l element elem
252 for (int il=0; il<nb_som_elem; il++)
253 {
254 int i = elems(elem,il);
255 if (distance_signee(i) == -99999.) // Sommet pas traite
256 {
257 if (!exist_ref_e) // Pas de reference pour l element
258 {
259 double norm = 0.;
260 for (int k=0; k<dim_esp; k++) norm += nor(i,k) * nor(i,k);
261 if (norm > 1.e-10)
262 {
263 for (int k=0; k<dim_esp; k++) nor_ref_e(k) = nor(i,k);
264 exist_ref_e = true;
265 if (idebug_lset)
266 {
267 Cerr<<"i = "<<i<<" : exist_ref_e nor_ref_e = "<<int(exist_ref_e);
268 for (int k=0; k<dim_esp; k++) Cerr<<" "<<nor_ref_e(k);
269 Cerr<<finl;
270 }
271 }
272 else if (idebug_lset) Cerr<<"*** i = "<<i<<" norme = "<<norm<<finl;
273 }
274 if (exist_ref_e)
275 {
276 double pscal = 0.;
277 for (int k=0; k<dim_esp; k++) pscal += nor(i,k) * nor_ref_e(k);
278 if (abs(pscal) > 1.e-10) distance_signee(i) = d1(i) * pscal / abs(pscal);
279 for (int k=0; k<dim_esp; k++) nor_ref_i(i,k) = nor(i,k)*distance_signee(i)/abs(distance_signee(i));
280 if (idebug_lset)
281 {
282 Cerr<<"*** i = "<<i<<" nor = ";
283 for (int k=0; k<dim_esp; k++) Cerr<<" "<<nor(i,k);
284 Cerr<<" distance_signee = "<<distance_signee(i)<<finl;
285 }
286 }
287 else
288 {
289 Cerr<<"Interpolation_IBM_base::definir_pseudo_level_set: no reference for the element "<<elem<<finl;
290 exit();
291 }
292 }
293 }
294 deja_fait_elem(elem) = 1;
295
296 // definition distance signee pour le cluster d'elements non coupes voisins de e
297 if (exist_ref_e) calcul_cluster_pseudo_level_set(elem_voisins, elem, deja_fait_elem, nor_ref_i, to_do_cut_elem, idebug_lset);
298}
299
300void Interpolation_IBM_base::calcul_cluster_pseudo_level_set(IntLists& elem_voisins, int elem, IntTab& deja_fait_elem, DoubleTab& nor_ref_i, IntList& to_do_cut_elem, int idebug_lset)
301{
302 int dim_esp = Objet_U::dimension;
303 const DoubleTab& aire = my_source_->get_champ_aire().valeurs();
304 const Probleme_base& pb = my_source_->equation().probleme();
305 const Domaine_dis_base& le_dom_dis = pb.domaine_dis();
306 const Domaine& dom = le_dom_dis.domaine();
307 const IntTab& elems= dom.les_elems() ;
308 int nb_som_elem=dom.nb_som_elem();
309
310 DoubleTab& nor = champ_normal_proj_solid_->valeurs();
311 DoubleTab& d1 = champ_dis_proj_solid_->valeurs();
312 DoubleTab& distance_signee = pseudo_level_set_->valeurs();
313 if (! nor.size_array() )
314 {
315 Cerr << "Interpolation_IBM_base::calcul_cluster_pseudo_level_set : no champ_normal_proj_solid_. Exit"<< finl;
316 exit();
317 }
318 if (! d1.size_array() )
319 {
320 Cerr << "Interpolation_IBM_base::calcul_cluster_pseudo_level_set : no champ_dis_proj_solid_. Exit"<< finl;
321 exit();
322 }
323
324 int nb_elem_voi = elem_voisins[elem].size();
325 if (nb_elem_voi != 0)
326 {
327 for (int voi=0; voi<nb_elem_voi; voi++)
328 {
329 int elem_voi = (elem_voisins[elem])[voi];
330 if (idebug_lset) Cerr<<">>>> element of cluster = "<<elem_voi<<" aire = "<<aire(elem_voi)<<" deja_fait_ele = "<<deja_fait_elem(elem_voi)<<finl;
331
332 if (elem_voi != elem && aire(elem_voi) > 0. && deja_fait_elem(elem_voi) == 0) to_do_cut_elem.add_if_not(elem_voi);
333
334 bool exist_ref_e = false;
335 DoubleTrav nor_ref_e(dim_esp);
336 if (elem_voi != elem && deja_fait_elem(elem_voi) == 0 && aire(elem_voi) <= 0.)
337 {
338 // definition d une reference pour l element e
339 for (int ilr=0; ilr<nb_som_elem; ilr++)
340 {
341 int ir = elems(elem_voi,ilr);
342 // On cherche si il existe une reference pour un sommet
343 if (distance_signee(ir) != -99999.)
344 {
345 for (int k=0; k<dim_esp; k++) nor_ref_e(k) = nor_ref_i(ir,k);
346 exist_ref_e = true;
347 if (idebug_lset) Cerr<<" node = "<<ir;
348 break;
349 }
350 }
351 if (idebug_lset)
352 {
353 Cerr<<" > exist_ref_e = "<<int(exist_ref_e)<<" nor_ref_e =";
354 for (int k=0; k<dim_esp; k++) Cerr<<" "<<nor_ref_e(k);
355 Cerr<<finl;
356 }
357
358 if (!exist_ref_e) // Pas de reference pour l element
359 {
360 Cerr<<"Interpolation_IBM_base::definir_pseudo_level_set: no reference for the element "<<elem_voi<<finl;
361 exit();
362 }
363
364 for (int il_v=0; il_v<nb_som_elem; il_v++)
365 {
366 int i_v = elems(elem_voi,il_v);
367 if (distance_signee(i_v) == -99999.)
368 {
369 double pscal = 0.;
370 for (int k=0; k<dim_esp; k++) pscal += nor(i_v,k) * nor_ref_e(k);
371 if (abs(pscal) > 1.e-10) distance_signee(i_v) = d1(i_v) * pscal / abs(pscal);
372 for (int k=0; k<dim_esp; k++) nor_ref_i(i_v,k) = nor(i_v,k)*distance_signee(i_v)/abs(distance_signee(i_v));
373 if (idebug_lset)
374 {
375 Cerr<<"*** i_v = "<<i_v<<" nor = ";
376 for (int k=0; k<dim_esp; k++) Cerr<<" "<<nor(i_v,k);
377 Cerr<<" distance_signee = "<<distance_signee(i_v)<<finl;
378 }
379 }
380 }
381 deja_fait_elem(elem_voi) = 1;
382 }
383 }
384 }
385}
386
388{
389 // 3 layers
390 const DoubleTab& solid_points = solid_points_->valeurs();
391 if (! solid_points.size_array() )
392 {
393 Cerr << "Interpolation_IBM_base::maj_normal_proj_solid : no solid projection. Exit"<< finl;
394 exit();
395 }
396 double eps = 1e-12;
397 int dim_esp = Objet_U::dimension;
398 assert (solid_points.dimension(1) == dim_esp);
399 const Probleme_base& pb = my_source_->equation().probleme();
400 const Domaine_dis_base& le_dom_dis = pb.domaine_dis();
401 const Domaine& dom = le_dom_dis.domaine();
402 const IntTab& elems= dom.les_elems() ;
403 int nb_som_elem=dom.nb_som_elem();
404 int nb_elem_tot = dom.nb_elem_tot();
405 int nb_node_tot = dom.nb_som_tot();
406
407 const DoubleTab& aire = my_source_->get_champ_aire().valeurs();
408 int nb_elem = aire.dimension(0);
409
410 IntLists elem_voisins(nb_elem_tot);
411 DoubleTab& aire_ncst = ref_cast_non_const(DoubleTab, aire);
412 bool all_elem_vois = true;
413 my_source_->compute_NeighNode_IBM_elem(aire_ncst, elem_voisins, all_elem_vois);
414
415 DoubleTab& nor = champ_normal_proj_solid_->valeurs();
416 nor = 0.;
417 DoubleTab& d1 = champ_dis_proj_solid_->valeurs();
418 IntTrav deja_fait_vert(nb_node_tot);
419 d1 = 0.;
420 for (int e=0; e<nb_elem; e++)
421 {
422 if (aire(e)>0.)
423 {
424 // element coupe IB
425 for (int il=0; il<nb_som_elem; il++)
426 {
427 int i = elems(e,il);
428 if (deja_fait_vert(i) == 0)
429 {
430 d1(i) = 0.0;
431 for (int k=0; k<dim_esp; k++)
432 {
433 double xk = dom.coord(i,k);
434 double xks = solid_points(i,k);
435 nor(i, k) = xk - xks;
436 d1(i) += (xk-xks)*(xk-xks);
437 }
438 d1(i) = sqrt(d1(i));
439 if (d1(i) > eps )
440 for (int k=0; k<dim_esp; k++) nor(i, k) /= d1(i) ;
441 deja_fait_vert(i) = 1;
442 }
443 }
444 //voisins de e
445 int nb_elem_voi = elem_voisins[e].size();
446 for (int voi=0; voi<nb_elem_voi; voi++)
447 {
448 int elem_voi = (elem_voisins[e])[voi];
449 for (int il_v=0; il_v<nb_som_elem; il_v++)
450 {
451 int i_v = elems(elem_voi,il_v);
452 if (deja_fait_vert(i_v) == 0)
453 {
454 d1(i_v) = 0.0;
455 for (int k=0; k<dim_esp; k++)
456 {
457 double xk = dom.coord(i_v,k);
458 double xks = solid_points(i_v,k);
459 nor(i_v, k) = xk - xks;
460 d1(i_v) += (xk-xks)*(xk-xks);
461 }
462 d1(i_v) = sqrt(d1(i_v));
463 if (d1(i_v) > eps )
464 for (int k=0; k<dim_esp; k++) nor(i_v, k) /= d1(i_v) ;
465 deja_fait_vert(i_v) = 1;
466 }
467 }
468 }
469 }
470 }
471}
472
474{
475 solid_points_->valeurs() = un_prepro.get_champ_solid_points();
476 corresp_elems_->valeurs() = un_prepro.get_champ_corresp_elems();
477 if(is_dirichlet_)
478 {
479 is_dirichlet_->valeurs() = un_prepro.get_isNodeDirichlet();
480 }
481 else
482 {
483 Cerr<<"Interpolation_IBM_base::set_fields_from_prepro_to_interp field est_dirichlet not provided. Exit."<<finl;
484 exit();
485 }
486
487 if (my_source_->get_modele().get_PDF_mobile()) calculer_normal_et_distance_proj_solid();
488}
classe Discretisation_base Cette classe represente un schema de discretisation en espace,...
void discretiser_champ(const Motcle &directive, const Domaine_dis_base &z, const Nom &nom, const Nom &unite, int nb_comp, int nb_pas_dt, double temps, OWN_PTR(Champ_Inc_base)&champ, const Nom &sous_type=NOM_VIDE) const
int nb_som_elem() const
Renvoie le nombre de sommets des elements geometriques constituants le domaine.
Definition Domaine.h:474
int_t nb_elem_tot() const
Definition Domaine.h:132
IntTab_t & les_elems()
Definition Domaine.h:129
int_t nb_som_tot() const
Renvoie le nombre total de sommets du domaine i.e. le nombre de sommets reels et virtuels sur le proc...
Definition Domaine.h:123
double coord(int_t i, int j) const
Definition Domaine.h:110
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
const Domaine & domaine() const
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
Probleme_base & probleme()
Renvoie le probleme associe a l'equation.
void set_param(Param &) const override
virtual void set_fields_from_prepro_to_interp(Prepro_IBM_base &)
virtual void discretise(const Discretisation_base &, Domaine_dis_base &)
void define_pseudo_level_set_for_one_cut_cell(IntLists &, int, IntTab &, DoubleTab &, IntList &, int)
OBS_PTR(Source_PDF_base) my_source_
virtual void discretise_PDF_mobile(const Discretisation_base &, Domaine_dis_base &)
void calcul_cluster_pseudo_level_set(IntLists &, int, IntTab &, DoubleTab &, IntList &, int)
virtual void discretise_pseudo_level_set(const Discretisation_base &, Domaine_dis_base &)
Un tableau de chaine de caracteres (VECT(Nom)).
Definition Noms.h:26
classe Objet_U Cette classe est la classe de base des Objets de TRUST
Definition Objet_U.h:73
static int dimension
Definition Objet_U.h:99
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
Helper class to factorize the readOn method of Objet_U classes.
Definition Param.h:112
void ajouter_flag(const char *keyword, const bool *value)
Register a boolean flag whose mere presence switches it to true.
Definition Param.cpp:474
void ajouter(const char *keyword, const int *value, Param::Nature nat=Param::OPTIONAL)
Register an integer parameter.
Definition Param.cpp:364
@ OPTIONAL
Definition Param.h:115
const DoubleTab & get_isNodeDirichlet()
const DoubleTab & get_champ_solid_points()
const DoubleTab & get_champ_corresp_elems()
classe Probleme_base C'est un Probleme_U qui n'est pas un couplage.
virtual const Equation_base & equation(int) const =0
const Domaine_dis_base & domaine_dis() const
Renvoie le domaine discretise associe au probleme.
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
_SIZE_ size_array() const
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.
void vide()
Vide la liste.
int size() const
Definition TRUSTList.h:68
int size() const
Definition TRUSTLists.h:86
_SIZE_ dimension(int d) const
Definition TRUSTTab.tpp:133