TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Navier_Stokes_phase_field.cpp
1/****************************************************************************
2* Copyright (c) 2021, 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
17#include <Convection_Diffusion_Phase_field.h>
18#include <Source_Con_Phase_field_base.h>
19#include <Navier_Stokes_phase_field.h>
20#include <Source_Con_Phase_field.h>
21#include <Operateur_Diff_base.h>
22#include <Milieu_Phase_field.h>
23#include <Champ_Fonc_Tabule.h>
24#include <Assembleur_base.h>
25#include <Probleme_base.h>
26#include <Discret_Thyd.h>
27#include <Perf_counters.h>
28#include <Constituant.h>
29#include <Domaine_VF.h>
30#include <TRUSTTrav.h>
31#include <Domaine.h>
32#include <EChaine.h>
33#include <Param.h>
34#include <Debog.h>
35
36Implemente_instanciable(Navier_Stokes_phase_field,"Navier_Stokes_phase_field",Navier_Stokes_std);
37// XD navier_stokes_phase_field navier_stokes_standard navier_stokes_phase_field INHERITS_BRACE Navier Stokes equation
38// XD_CONT for the Phase Field problem.
39
41{
43}
44
46{
48
49 //Creation du terme source de gravite pour discretisation VDF
50 if (milieu().a_gravite())
51 {
52 Source t;
53 Source& so = les_sources.add(t);
54 Cerr << "Creation of the buoyancy source term for the Navier_Stokes_phase_field equation" << finl;
55
56 Nom disc = discretisation().que_suis_je();
57 if (disc != "VDF")
58 {
59 Cerr << "Only VDF discretization is allowed." << finl;
61 }
62
63 Nom type_so = "Source_Gravite_PF_VDF";
64 so.typer_direct(type_so);
65 so->associer_eqn(*this);
66 }
67 return is;
68}
69
71{
72 const Milieu_Phase_field& mil = ref_cast(Milieu_Phase_field, milieu());
73 if (mil.get_boussi() == 0)
74 {
75 if (mil.get_diff_boussi() == 0)
76 return mil.mu();
77 else if (mil.get_diff_boussi() == 1)
78 return le_fluide->viscosite_dynamique();
79 else
80 {
81 Cerr << "If the Boussinesq hypothesis is not done," << finl;
82 Cerr << "the keyword viscosite_dynamique_constante must be used to indicate" << finl;
83 Cerr << "if the dynamical viscosity is constant or c dependent." << finl;
84 Cerr << "This selection must be done before reading the diffusion term" << finl;
85 Cerr << "of the Navier_Stokes_phase_field equation." << finl;
87 }
88 }
89 else if (mil.get_boussi() == 1)
90 return le_fluide->viscosite_cinematique();
91 else
92 {
93 Cerr << "The use of Boussinesq hypothesis must be indicated" << finl;
94 Cerr << "by the keyword approximation_de_boussinesq specification." << finl;
95 Cerr << "This selection must be done before reading the diffusion term" << finl;
96 Cerr << "of the Navier_Stokes_phase_field equation." << finl;
98 }
99 //Pour compilation
101}
102
103/*! @brief Dicretise l'equation.
104 *
105 */
107{
109
110 // Selection de l'assembleur en pression specifique au Phase_Field (P_VDF de BM)
111 Nom type = "";
112 type = "Assembleur_P_VDF_Phase_Field";
113 Cerr << "** Pressure assembling tool : " << type << " **" << finl;
114 assembleur_pression_.typer(type);
115 assembleur_pression_->associer_domaine_dis_base(domaine_dis());
116 assembleur_pression_->set_resoudre_increment_pression(1);
117}
118
120{
121 // RLT: plutot que de multiplier dt(diff) par rho ici comme c'est fait dans TrioCFD 1.8.0 (cf. coeff ci-dessous)
122 // (en considerant qu'il a ete evalue dans l'operateur de diffusion (Op_Diff_VDF_Face_base) avec la viscosite dynamique - ce qui n'est vrai que pour boussi_==0)
123 // on associe le champ masse volumique a l'operateur de diffusion dans le cas boussi_==0 pour que le calcul de son dt soit correct directement
124 double coeff = mp_min_vect(ref_cast(Milieu_Phase_field, milieu()).rho().valeurs());
125
126 double dt = 0;
127 double dt_op;
128
129 Cerr << "" << finl;
130 double tps_courant = schema_temps().temps_courant();
131 double num_dt = schema_temps().nb_pas_dt();
132 Cerr << " *--*" << finl;
133 Cerr << "" << finl;
134 Cerr << "Calculation at time : " << tps_courant << " s" << finl;
135 Cerr << "Time step number : " << num_dt << finl;
136 Cerr << "" << finl;
137
138 dt = 1. / terme_convectif.calculer_pas_de_temps();
139 if (le_schema_en_temps->limpr())
140 {
141 Cout << "NS_PF : pas de temps de convection : " << 1. / dt << finl;
142 }
143 dt_op = terme_diffusif.calculer_pas_de_temps() * coeff;
144 if (le_schema_en_temps->limpr())
145 {
146 Cout << "NS_PF : pas de temps de diffusion : " << dt_op << finl;
147 }
148 dt = dt + 1. / dt_op;
149 dt = std::min(1. / dt, le_schema_en_temps->pas_temps_max());
150 if (le_schema_en_temps->limpr())
151 {
152 Cout << "NS_PF : pas de temps de calcul : " << dt << finl;
153 }
154
155 // Calcul du temps effectue en simulation, ainsi que de l'estimation du temps restant
156 double t_total;
157 double t_remaining;
158 double tps_init = schema_temps().temps_init();
159 double tps_max = schema_temps().temps_max();
160
161 double t_passe=statistics().get_time_since_last_open(STD_COUNTERS::total_execution_time);
162 if (tps_courant!=tps_init)
163 {
164 t_total = t_passe * ((tps_max - tps_init) / (tps_courant - tps_init));
165 t_remaining = t_total - t_passe;
166 Cerr << "" << finl;
167 Cerr << "**************** ELAPSED TIME FOR THE SIMULATION *******************" << finl;
168 Cerr << "Elapsed time of calculation until current time : " << floor(t_passe) << " s" << finl;
169 Cerr << "Estimated time needed for the remaining part of the calculation : " << floor(t_remaining) << " s" << finl;
170 Cerr << " --" << finl;
171 Cerr << "Estimated time for the complete calculation : " << floor(t_total) << " s" << finl;
172 Cerr << "********************************************************************" << finl;
173 Cerr << "" << finl;
174 }
175 return dt;
176}
177
178/*! @brief Interpole la masse volumique aux faces (pour l'assembleur pression en particulier)
179 *
180 */
181void Navier_Stokes_phase_field::rho_aux_faces(const DoubleTab& tab_rho, Champ_Don_base& rho_face_P)
182{
183 const Domaine_VF& domaineVF = ref_cast(Domaine_VF, domaine_dis());
184 const IntTab& face_voisins = domaineVF.face_voisins();
185 const DoubleVect& volumes = domaineVF.volumes();
186 int nbfaces = domaineVF.nb_faces();
187 const int nbfaces_bord = domaineVF.premiere_face_int();
188 int el0, el1;
189 double vol0, vol1;
190
191 // Calcul de rho_face_P aux faces pour l'assemblage avec l'assembleur pression PF (cf AssembleurPVDF de BM)
192
193 for (int fac = 0; fac < nbfaces_bord; fac++)
194 {
195 el0 = face_voisins(fac, 0);
196 if (el0 != -1)
197 {
198 rho_face_P.valeurs()(fac) = tab_rho(el0);
199 }
200 else
201 {
202 el1 = face_voisins(fac, 1);
203 rho_face_P.valeurs()(fac) = tab_rho(el1);
204 }
205 }
206
207 for (int fac = nbfaces_bord; fac < nbfaces; fac++)
208 {
209 el0 = face_voisins(fac, 0);
210 el1 = face_voisins(fac, 1);
211 vol0 = volumes(el0);
212 vol1 = volumes(el1);
213 rho_face_P.valeurs()(fac) = (vol0 * tab_rho(el0) + vol1 * tab_rho(el1)) / (vol0 + vol1);
214 }
215}
216
217/*! @brief Dicretise l'equation.
218 *
219 */
221{
222 Cerr << "** Navier_Stokes_phase_field::preparer_calcul **" << finl;
223 // Cerr << " - Copie via le Front_Tracking et modifie pour le Phase_field -" << finl;
225 const Milieu_Phase_field& mil = ref_cast(Milieu_Phase_field, milieu());
226 if (mil.get_boussi() == 0)
227 {
228 OWN_PTR(Champ_Don_base) rho_face_P;
229 rho_face_P.typer("Champ_Fonc_Face");
230 rho_face_P->valeurs() = inconnue().valeurs();
231 const DoubleTab& tab_rho = mil.rho().valeurs();
232 rho_aux_faces(tab_rho, rho_face_P);
233 assembleur_pression_->assembler_rho_variable(matrice_pression_, rho_face_P.valeur());
234 }
235 else
236 assembleur_pression_->assembler(matrice_pression_);
237
238 la_pression->changer_temps(schema_temps().temps_courant());
239 la_pression->valeurs().echange_espace_virtuel();
240
241 Debog::verifier("Navier_Stokes_phase_field::preparer_calcul, gradP av", gradient_P->valeurs());
242 Debog::verifier("Navier_Stokes_phase_field::preparer_calcul, la_pression av", la_pression->valeurs());
243 //Cerr << "Navier_Stokes_phase_field::preparer_calcul() avant grad" << finl;
244 gradient.calculer(la_pression->valeurs(), gradient_P->valeurs());
245 Debog::verifier("Navier_Stokes_phase_field::preparer_calcul, gradP ap", gradient_P->valeurs());
246 Debog::verifier("Navier_Stokes_phase_field::preparer_calcul, la_pression ap", la_pression->valeurs());
247
248 gradient_P->changer_temps(schema_temps().temps_courant());
249 divergence_U->valeurs() = 0.;
250 divergence_U->changer_temps(schema_temps().temps_courant());
251 Cerr << "Projection of initial and boundaries conditions " << finl;
252
253 Debog::verifier("Navier_Stokes_phase_field::preparer_calcul, gradP av projeter", gradient_P->valeurs());
254 Debog::verifier("Navier_Stokes_phase_field::preparer_calcul, la_pression av projeter", la_pression->valeurs());
255 if (projection_a_faire())
256 projeter();
257 Debog::verifier("Navier_Stokes_phase_field::preparer_calcul, gradP ap projeter", gradient_P->valeurs());
258 Debog::verifier("Navier_Stokes_phase_field::preparer_calcul, la_pression ap projeter", la_pression->valeurs());
259
261 Debog::verifier("Navier_Stokes_phase_field::preparer_calcul, vitesse", inconnue());
262 Debog::verifier("Navier_Stokes_phase_field::preparer_calcul, pression", la_pression);
263
264 if (le_traitement_particulier)
265 le_traitement_particulier->preparer_calcul_particulier();
266
267 return 1;
268}
269
271{
273
274 Milieu_Phase_field& mil = ref_cast(Milieu_Phase_field, milieu());
275
276 mil.update_rho_mu(temps);
277
278 if (mil.get_boussi() == 0)
279 {
280 OWN_PTR(Champ_Don_base) rho_face_P;
281 rho_face_P.typer("Champ_Fonc_Face");
282 rho_face_P->valeurs() = inconnue().valeurs();
283 const DoubleTab& tab_rho = mil.rho().valeurs();
284 rho_aux_faces(tab_rho, rho_face_P);
285 assembleur_pression_->assembler_rho_variable(matrice_pression_, rho_face_P.valeur());
286 }
287 else
288 assembleur_pression_->assembler(matrice_pression_);
289}
290
292{
293 const Milieu_Phase_field& mil = ref_cast(Milieu_Phase_field, milieu());
294 if (mil.get_boussi() == 0)
295 {
296
297 // Cerr << "** Navier_Stokes_phase_field::derivee_en_temps_inco **" << finl;
298 // Cerr << " - Copie via Navier_Stokes_Front_Tracking et modifie pour le Phase_field - " << finl;
299 DoubleTrav secmem(la_pression->valeurs());
300 DoubleTrav gradP(la_vitesse->valeurs());
301 double dt = le_schema_en_temps->pas_de_temps();
302
303 // const Probleme_base& pb=ref_cast(Probleme_base, probleme());
304 const Domaine_VF& zvf = ref_cast(Domaine_VF, domaine_dis());
305 const DoubleTab& tab_rho = mil.rho().valeurs();
306 const IntTab& face_voisins = zvf.face_voisins();
307 const int nbfaces_bord = zvf.premiere_face_int();
308 const int nbfaces = zvf.nb_faces();
309 // const int nbelems = zvf.nb_elem_tot();
310
311 // Calcul de rho sur les faces
312 DoubleTab rho_face(nbfaces);
313 int face, elem1, elem2, k;
314 double rho_moyen;
315 for (face = 0; face < nbfaces_bord; face++)
316 {
317 elem1 = face_voisins(face, 0);
318 if (elem1 != -1)
319 rho_face[face] = tab_rho[elem1];
320 else
321 {
322 elem2 = face_voisins(face, 1);
323 rho_face[face] = tab_rho[elem2];
324 }
325 }
326 for (face = nbfaces_bord; face < nbfaces; face++)
327 {
328 // On generalise le calcule de la masse volumique
329 elem1 = face_voisins(face, 0);
330 elem2 = face_voisins(face, 1);
331 rho_moyen = (zvf.volumes(elem1) * tab_rho[elem1] + zvf.volumes(elem2) * tab_rho[elem2]);
332 rho_moyen /= zvf.volumes(elem1) + zvf.volumes(elem2);
333 rho_face[face] = rho_moyen;
334 }
335
336 // 1/dt B Un :;
337 divergence.calculer(la_vitesse->valeurs(), secmem);
338 secmem /= dt;
339
340 vpoint = 0.;
341
342 // Ajout de Div(tau_d), terme diffusif
343 DoubleTrav diff(vpoint);
344 terme_diffusif.ajouter(la_vitesse->valeurs(), diff);
345
346 if (mil.get_diff_boussi() == 1)
347 {
348 // on multiplie par rho :
349 if (diff.line_size() == 1)
350 {
351 for (face = 0; face < nbfaces; face++)
352 {
353 diff(face, 0) *= rho_face[face];
354 diff(face, 0) /= mil.rho0();
355 }
356 }
357 else
358 {
359 double drho;
360 for (face = 0; face < nbfaces; face++)
361 {
362 drho = rho_face[face];
363 for (k = 0; k < dimension; k++)
364 {
365 diff(face, k) *= drho;
366 diff(face, k) /= mil.rho0();
367 }
368 }
369 }
370 // ainsi on a : rho/rho0 div(tau_d), et quand on va diviser par rho ensuite, ne restera que div(tau_d)/rho0
371 }
372
373 vpoint += diff;
374
375 // Modif pour convection :
376 DoubleTrav conv(vpoint);
377 conv = 0.;
378 terme_convectif.ajouter(la_vitesse->valeurs(), conv);
379
380 // on multiplie par rho :
381 if (conv.line_size() == 1)
382 {
383 for (face = 0; face < nbfaces; face++)
384 conv(face, 0) *= rho_face[face];
385 }
386 else
387 {
388 double drho;
389 for (face = 0; face < nbfaces; face++)
390 {
391 drho = rho_face[face];
392 for (k = 0; k < dimension; k++)
393 conv(face, k) *= drho;
394 }
395 }
396 vpoint += conv;
397 // Ajout de rho u Grad(u), terme convectif
398
399 // on divise vpoint par rho :
400 if (vpoint.line_size() == 1)
401 {
402 for (face = 0; face < nbfaces; face++)
403 vpoint(face, 0) /= rho_face[face];
404 }
405 else
406 {
407 double drho;
408 for (face = 0; face < nbfaces; face++)
409 {
410 drho = rho_face[face];
411 for (k = 0; k < dimension; k++)
412 vpoint(face, k) /= drho;
413 }
414 }
415
416 les_sources.ajouter(vpoint);
417 vpoint.echange_espace_virtuel();
418
419 solveur_masse->appliquer(vpoint);
421 derivee_en_temps().valeurs() = vpoint;
422 schema_temps().modifier_second_membre((*this), vpoint);
423
424 // Appliquer le solveur masse => diviser par le volume
425 // A la base TRUST gere des variables * volume. Donc ici on retombe sur les VRAIES variables.
426
427 divergence.ajouter(vpoint, secmem);
428 // On calcule Div(vpoint)/dt i-e Div(u_n+1)/dt et on l'ajoute a secmem qui comprend deja Div(u_n)/dt
429
430 secmem *= -1;
431 secmem.echange_espace_virtuel();
432
433 // Resolution en pression :
434 //Assembleur_P_VDF_FT& assembleur_pression=ref_cast(Assembleur_P_VDF_FT, assembleur_pression_.valeur());
435 //assembleur_pression.modifier_matrice_pression(matrice_pression_);
436
437 const Domaine_VF& domaine_VF = ref_cast(Domaine_VF, le_dom_dis.valeur());
438 const DoubleVect& volumes = domaine_VF.volumes();
439 int el0, el1;
440 double vol0, vol1;
441
442 // Calcul de rho_face_P aux faces pour l'assemblage avec l'assembleur pression PF (cf AssembleurPVDF de BM)
443 //Champ_Fonc_Face rho_face_P;
444 OWN_PTR(Champ_Don_base) rho_face_P;
445 rho_face_P.typer("Champ_Fonc_Face");
446 rho_face_P->valeurs() = inconnue().valeurs();
447
448 for (int fac = 0; fac < nbfaces_bord; fac++)
449 {
450 el0 = face_voisins(fac, 0);
451 if (el0 != -1)
452 rho_face_P->valeurs()(fac) = tab_rho(el0);
453 else
454 {
455 el1 = face_voisins(fac, 1);
456 rho_face_P->valeurs()(fac) = tab_rho(el1);
457 }
458 }
459
460 for (int fac = nbfaces_bord; fac < nbfaces; fac++)
461 {
462 el0 = face_voisins(fac, 0);
463 el1 = face_voisins(fac, 1);
464 vol0 = volumes(el0);
465 vol1 = volumes(el1);
466 rho_face_P->valeurs()(fac) = (vol0 * tab_rho(el0) + vol1 * tab_rho(el1)) / (vol0 + vol1);
467 }
468
469 assembleur_pression_->assembler_rho_variable(matrice_pression_, rho_face_P.valeur());
470 assembleur_pression_->modifier_secmem(secmem);
471
472 solveur_pression_->reinit();
473 secmem.echange_espace_virtuel();
474 solveur_pression_.resoudre_systeme(matrice_pression_.valeur(), secmem, la_pression->valeurs());
475 assembleur_pression_->modifier_solution(la_pression->valeurs());
476
477 la_pression->valeurs().echange_espace_virtuel();
478
479 // M-1 Bt P
480 gradient.calculer(la_pression->valeurs(), gradP);
482
483 solveur_masse->appliquer(gradP);
484 // Idem qu'avant
485
486 // Pression a diviser par rho :
487 if (gradP.line_size() == 1)
488 {
489 for (face = 0; face < nbfaces; face++)
490 gradP(face, 0) /= rho_face[face];
491 }
492 else
493 {
494 double drho;
495 for (face = 0; face < nbfaces; face++)
496 {
497 drho = rho_face[face];
498 for (k = 0; k < dimension; k++)
499 gradP(face, k) /= drho;
500 }
501 }
502
503 // Correction en pression
504 vpoint -= gradP;
505 vpoint.echange_espace_virtuel();
506 }
507
508 else
510
511 return vpoint;
512}
classe Champ_Don_base classe de base des Champs donnes (non calcules)
DoubleTab & valeurs() override
Surcharge Champ_base::valeurs() Renvoie le tableau des valeurs.
DoubleTab & valeurs() override
Renvoie le tableau des valeurs du champ au temps courant.
static void verifier(const char *const msg, double)
Definition Debog.cpp:21
class Domaine_VF
Definition Domaine_VF.h:44
int nb_faces() const
renvoie le nombre global de faces.
Definition Domaine_VF.h:471
double volumes(int i) const
Definition Domaine_VF.h:113
int premiere_face_int() const
une face est interne ssi elle separe deux elements.
Definition Domaine_VF.h:463
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
const Discretisation_base & discretisation() const
Renvoie la discretisation associee a l'equation.
int calculate_time_derivative() const
Sources les_sources
virtual int preparer_calcul()
Tout ce qui ne depend pas des autres problemes eventuels.
virtual const Champ_Inc_base & derivee_en_temps() const
Schema_Temps_base & schema_temps()
Renvoie le schema en temps associe a l'equation.
Domaine_dis_base & domaine_dis()
Renvoie le domaine discretise associe a l'equation.
const Champ_Don_base & rho() const
const double & rho0() const
Champ_Don_base & mu()
void update_rho_mu(double temps)
classe Navier_Stokes_phase_field Cette classe porte les termes de l'equation de la dynamique
DoubleTab & derivee_en_temps_inco(DoubleTab &) override
Returns the time derivative of the unknown I of the equation: dI/dt = M-1*(sum(operators(I) + sources...
virtual void rho_aux_faces(const DoubleTab &, Champ_Don_base &)
Interpole la masse volumique aux faces (pour l'assembleur pression en particulier).
int preparer_calcul() override
Dicretise l'equation.
const Champ_Don_base & diffusivite_pour_transport() const override
void discretiser() override
Dicretise l'equation.
double calculer_pas_de_temps() const override
Calcul du prochain pas de temps.
void mettre_a_jour(double) override
La valeur de l'inconnue sur le pas de temps a ete calculee.
classe Navier_Stokes_std Cette classe porte les termes de l'equation de la dynamique
Operateur_Diff terme_diffusif
const Milieu_base & milieu() const override
Renvoie le milieu physique de l'equation (le Fluide_base upcaste en Milieu_base).
Operateur_Grad gradient
Operateur_Conv terme_convectif
const Champ_Inc_base & inconnue() const override
Renvoie la vitesse (champ inconnue de l'equation) (version const).
void mettre_a_jour(double temps) override
Effectue une mise a jour en temps de l'equation.
virtual void projeter()
Calcule la solution U des equations: | M(U-V)/dt + BtP = 0.
Operateur_Div divergence
DoubleTab & derivee_en_temps_inco(DoubleTab &) override
Returns the time derivative of the unknown I of the equation: dI/dt = M-1*(sum(operators(I) + sources...
virtual int projection_a_faire()
void discretiser() override
Dicretise l'equation.
OWN_PTR(Assembleur_base) &assembleur_pression()
virtual void calculer_la_pression_en_pa()
Calcul de "la_pression_en_pa" en fonction de "la_pression".
class Nom Une chaine de caractere pour nommer les objets de TRUST
Definition Nom.h:31
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
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Definition Process.cpp:455
double temps_courant() const
Renvoie le temps courant.
double temps_max() const
Renvoie une reference sur le temps maximum.
virtual void modifier_second_membre(const Equation_base &eqn, DoubleTab &secmem)
int nb_pas_dt() const
Renvoie le nombre de pas de temps effectues.
double temps_init() const
Renvoie le temps initial.
Classe de base des flux de sortie.
Definition Sortie.h:52
void typer_direct(const Nom &)
Definition Source.cpp:41
int line_size() const
Definition TRUSTVect.tpp:67
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")