TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Source_Qdm_VDF_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#include <Convection_Diffusion_Phase_field.h>
17#include <Source_Qdm_VDF_Phase_field.h>
18#include <Navier_Stokes_phase_field.h>
19#include <Source_Con_Phase_field.h>
20#include <Milieu_Phase_field.h>
21#include <Domaine_Cl_VDF.h>
22#include <Probleme_base.h>
23#include <Milieu_base.h>
24#include <Domaine_VDF.h>
25#include <SFichier.h>
26
27Implemente_instanciable_sans_constructeur(Source_Qdm_VDF_Phase_field,"Source_Qdm_Phase_field_VDF_Face",Source_base);
28// XD source_qdm_phase_field source_base source_qdm_phase_field BRACE Keyword to define the capillary force into the
29// XD_CONT Navier Stokes equation for the Phase Field problem.
30// XD attr forme_du_terme_source entier forme_du_terme_source REQ Kind of the source term (1, 2, 3 or 4).
31
32Source_Qdm_VDF_Phase_field::Source_Qdm_VDF_Phase_field() : methode(nullptr) { }
33
35{
36 return s << que_suis_je();
37}
38
40{
41 Cerr << "Source_Qdm_VDF_Phase_field::readOn" << finl;
42
43 Motcle motlu;
44
45 is >> motlu;
46 Cerr << motlu << finl;
47 if (motlu != "{")
48 {
49 Cerr << "On attendait { dans Source_Qdm_VDF_Phase_field::readOn" << finl;
51 }
52
53 is >> motlu;
54 Cerr << motlu << finl;
55 if (motlu != "forme_du_terme_source")
56 {
57 Cerr << "On attendait forme_du_terme_source dans Source_Qdm_VDF_Phase_field::readOn" << finl;
59 }
60 else
61 is >> terme_source_;
62
63 is >> motlu;
64 Cerr << motlu << finl;
65 if (motlu != "}")
66 {
67 Cerr << "On attendait } dans Source_Qdm_VDF_Phase_field::readOn" << finl;
69 }
70
71 switch(terme_source_)
72 {
73 case 1:
75 break;
76
77 case 2:
79 break;
80
81 case 3:
83 break;
84
85 case 4:
87 break;
88
89 default:
90 Cerr << "Le choix de la methode :" << terme_source_ << ", n'est pas valide." << finl;
92 break;
93 }
94
95 return is;
96}
97
99{
100 le_probleme2_ = pb;
101 Navier_Stokes_phase_field& eq_ns = ref_cast(Navier_Stokes_phase_field, le_probleme2_->equation(0));
102 const Milieu_Phase_field& mil = ref_cast(Milieu_Phase_field, eq_ns.milieu());
103 rho0_ = mil.rho0();
104 boussi_ = mil.get_boussi();
105 if (boussi_ != 1 && boussi_ != 0)
106 {
107 Cerr << "Erreur dans le choix du parametre boussi_" << finl;
109 }
110
113}
114
116{
117 le_dom_VDF_ = ref_cast(Domaine_VDF, domaine_dis);
118 le_dom_Cl_VDF_ = ref_cast(Domaine_Cl_VDF, domaine_Cl_dis);
119}
120
121DoubleTab& Source_Qdm_VDF_Phase_field::methode_1(DoubleTab& resu) const
122{
123 const Domaine_VDF& domaine_VDF = le_dom_VDF_.valeur();
124 const IntTab& face_voisins = domaine_VDF.face_voisins();
125 const DoubleVect& volumes = domaine_VDF.volumes();
126
127 const Navier_Stokes_phase_field& eq_ns = ref_cast(Navier_Stokes_phase_field, le_probleme2_->equation(0));
128 const Milieu_Phase_field& mil = ref_cast(Milieu_Phase_field, eq_ns.milieu());
129 const Convection_Diffusion_Phase_field& eq_c = ref_cast(Convection_Diffusion_Phase_field, le_probleme2_->equation(1));
130 const DoubleTab& c = eq_c.inconnue().valeurs();
131 const int nb_comp = mil.get_fermeture().get_nb_constituants();
132
133 double cface;
134 int ndeb = domaine_VDF.premiere_face_int();
135 int nbfaces = domaine_VDF.nb_faces();
136 int el0, el1;
137 double vol0, vol1;
138
139 DoubleTab rhoPF = mil.rho().valeurs();
140 double rho_face;
141
142 // Forme en c*Grad(mutilde)
143 //=============================
144
145 // on calcule Grad(mutilde)
146 //-----------------------------
147
148 DoubleVect u_carre;
149 DoubleTab mutilde_NS;
150 Sources& list_sources = ref_cast_non_const(Sources, eq_c.sources());
151 Source_Con_Phase_field& source_pf = ref_cast(Source_Con_Phase_field, list_sources(0).valeur());
152 int type_systeme_naire = mil.get_fermeture().get_type_systeme_naire();
153 mutilde_NS.resize(eq_c.get_mutilde_().valeurs().dimension_tot(0), 1);
154
155 const DoubleTab& mutilde = eq_c.get_mutilde_().valeurs();
156
157 for (int i = 0; i < eq_c.get_mutilde_().valeurs().dimension_tot(0); i++)
158 mutilde_NS(i, 0) = mutilde(i);
159
160 u_carre = source_pf.get_u_carre();
161
162 if (eq_c.get_mutype_())
163 {
164 int taille = mutilde.size_totale();
165 for (int i = 0; i < taille; i++)
166 {
167 mutilde_NS(i) -= (0.5 * u_carre(i)) * source_pf.drhodc(i);
168 }
169 }
170 // Dans le cas mutype_==1, on utilise mutilde_d dans CH, mais mutilde dans NS
171
172 if (type_systeme_naire == 0)
173 {
174 DoubleTab& grad_mutilde = ref_cast_non_const(DoubleTab, grad_mutilde_);
175 if (grad_mutilde.size() == 0)
176 grad_mutilde = eq_ns.inconnue().valeurs();
177 grad_mutilde = 0.;
178 const Operateur_Grad& opgrad = eq_ns.operateur_gradient();
179 opgrad.calculer(mutilde_NS, grad_mutilde);
180
181 // on interpole c et on calcule la source
182 //------------------------------------------------
183
184 for (int fac = ndeb; fac < nbfaces; fac++)
185 {
186 el0 = face_voisins(fac, 0);
187 el1 = face_voisins(fac, 1);
188 vol0 = volumes(el0);
189 vol1 = volumes(el1);
190
191 cface = (vol0 * c(el0) + vol1 * c(el1)) / (vol0 + vol1);
192 if (boussi_ == 1)
193 {
194 resu(fac) -= cface * grad_mutilde(fac) / rho0_; // Cas approximation de Boussinesq
195 }
196 else if (boussi_ == 0)
197 {
198 rho_face = (vol0 * rhoPF(el0) + vol1 * rhoPF(el1)) / (vol0 + vol1);
199 resu(fac) -= cface * grad_mutilde(fac) / rho_face;
200 }
201 }
202 }
203 else if (type_systeme_naire == 1)
204 {
205 ///// Kim2012 terme source somme c.Grad(mutilde)
206
207 DoubleTab& grad_mutilde = ref_cast_non_const(DoubleTab, grad_mutilde_);
208 if (grad_mutilde.size() == 0)
209 grad_mutilde = eq_ns.inconnue().valeurs();
210 grad_mutilde = 0.;
211 DoubleTab temp_mutilde_NS(mutilde_NS.dimension_tot(0), 1);
212 const Operateur_Grad& opgrad = eq_ns.operateur_gradient();
213
214 for (int j = 0; j < nb_comp; j++)
215 {
216 grad_mutilde = 0.;
217 for (int i = 0; i < temp_mutilde_NS.dimension(0); i++)
218 {
219 temp_mutilde_NS(i, 0) = mutilde_NS(i, j);
220 }
221 opgrad.calculer(temp_mutilde_NS, grad_mutilde);
222
223 // on interpole c et on calcule la source
224 //------------------------------------------------
225
226 for (int fac = ndeb; fac < nbfaces; fac++)
227 {
228 el0 = face_voisins(fac, 0);
229 el1 = face_voisins(fac, 1);
230 vol0 = volumes(el0);
231 vol1 = volumes(el1);
232 cface = (vol0 * c(el0, j) + vol1 * c(el1, j)) / (vol0 + vol1);
233 if (boussi_ == 1)
234 {
235 resu(fac) -= cface * grad_mutilde(fac) / rho0_; // Cas approximation de Boussinesq
236 }
237 else if (boussi_ == 0)
238 {
239 rho_face = (vol0 * rhoPF(el0) + vol1 * rhoPF(el1)) / (vol0 + vol1);
240 resu(fac) -= cface * grad_mutilde(fac) / rho_face;
241 }
242 }
243 }
244 //resu.echange_espace_virtuel(); //ajoute mr264902
245 }
246 //===============================================
247 return resu;
248
249}
250
251DoubleTab& Source_Qdm_VDF_Phase_field::methode_2(DoubleTab& resu) const
252{
253 const Domaine_VDF& domaine_VDF = le_dom_VDF_.valeur();
254 const IntTab& face_voisins = domaine_VDF.face_voisins();
255 const DoubleVect& volumes = domaine_VDF.volumes();
256
257 const Convection_Diffusion_Phase_field& eq_c = ref_cast(Convection_Diffusion_Phase_field, le_probleme2_->equation(1));
258 const DoubleTab& c = eq_c.inconnue().valeurs();
259
260 const Navier_Stokes_phase_field& eq_ns = ref_cast(Navier_Stokes_phase_field, le_probleme2_->equation(0));
261 const Milieu_Phase_field& mil = ref_cast(Milieu_Phase_field, eq_ns.milieu());
262
263 double cface;
264 int ndeb = domaine_VDF.premiere_face_int();
265 int nbfaces = domaine_VDF.nb_faces();
266 int el0, el1;
267 double vol0, vol1;
268
269 int type_systeme_naire = mil.get_fermeture().get_type_systeme_naire();
270
271 // Forme en c*Grad(Div(alpha*rho*Grad(C)))
272 //========================================
273
274 // on calcule Grad(div_alpha_rho_gradC)
275 //-------------------------------------
276 if (type_systeme_naire == 0)
277 {
278 const DoubleTab& div_alpha_rho_gradC = eq_c.get_div_alpha_rho_gradC();
279 DoubleTab& grad_div_alpha_rho_gradC = ref_cast_non_const(DoubleTab, grad_div_alpha_rho_gradC_);
280 if (grad_div_alpha_rho_gradC.size() == 0)
281 grad_div_alpha_rho_gradC = eq_ns.inconnue().valeurs();
282 grad_div_alpha_rho_gradC = 0.;
283 const Operateur_Grad& opgrad = eq_ns.operateur_gradient();
284 opgrad.calculer(div_alpha_rho_gradC, grad_div_alpha_rho_gradC);
285
286 DoubleTab rhoPF = mil.rho().valeurs();
287 double rho_face;
288
289 // Division par rho0 necessaire dans le cas incompressible
290 //--------------------------------------------------------
291 if (boussi_ == 1)
292 {
293 if (compressible_ == 0)
294 grad_div_alpha_rho_gradC /= rho0_; // Cas approximation de Boussinesq
295 }
296 else if (boussi_ == 0)
297 {
298 for (int fac = ndeb; fac < nbfaces; fac++)
299 {
300 el0 = face_voisins(fac, 0);
301 el1 = face_voisins(fac, 1);
302 vol0 = volumes(el0);
303 vol1 = volumes(el1);
304
305 rho_face = (vol0 * rhoPF(el0) + vol1 * rhoPF(el1)) / (vol0 + vol1);
306 grad_div_alpha_rho_gradC(fac) /= rho_face;
307 }
308 }
309
310 // on interpole c et on calcule la source
311 //------------------------------------------------
312
313 for (int fac = ndeb; fac < nbfaces; fac++)
314 {
315 el0 = face_voisins(fac, 0);
316 el1 = face_voisins(fac, 1);
317 vol0 = volumes(el0);
318 vol1 = volumes(el1);
319
320 cface = (vol0 * c(el0) + vol1 * c(el1)) / (vol0 + vol1);
321 if (boussi_ == 1)
322 {
323 resu(fac) += cface * grad_div_alpha_rho_gradC(fac) / rho0_; // Cas approximation de Boussinesq
324 }
325 else if (boussi_ == 0)
326 {
327 rho_face = (vol0 * rhoPF(el0) + vol1 * rhoPF(el1)) / (vol0 + vol1);
328 resu(fac) += cface * grad_div_alpha_rho_gradC(fac) / rho_face;
329 }
330 }
331 }
332 return resu;
333}
334
335DoubleTab& Source_Qdm_VDF_Phase_field::methode_3(DoubleTab& resu) const
336{
337 const Domaine_VDF& domaine_VDF = le_dom_VDF_.valeur();
338 const IntTab& face_voisins = domaine_VDF.face_voisins();
339 const DoubleVect& volumes = domaine_VDF.volumes();
340
341 const Convection_Diffusion_Phase_field& eq_c = ref_cast(Convection_Diffusion_Phase_field, le_probleme2_->equation(1));
342 const DoubleTab& c = eq_c.inconnue().valeurs();
343
344 const Navier_Stokes_phase_field& eq_ns = ref_cast(Navier_Stokes_phase_field, le_probleme2_->equation(0));
345 const Milieu_Phase_field& mil = ref_cast(Milieu_Phase_field, eq_ns.milieu());
346
347 double cface;
348 int ndeb = domaine_VDF.premiere_face_int();
349 int nbfaces = domaine_VDF.nb_faces();
350 int el0, el1;
351 double vol0, vol1;
352
353 int type_systeme_naire = mil.get_fermeture().get_type_systeme_naire();
354
355 // Forme en c*Grad(Div(alpha*rho*Grad(C)))-alpha*rho*Grad((Grad(C))^2)/2
356 //======================================================================
357
358 // on calcule Grad(div_alpha_rho_gradC)
359 //-------------------------------------
360 if (type_systeme_naire == 0)
361 {
362 const DoubleTab& div_alpha_rho_gradC = eq_c.get_div_alpha_rho_gradC();
363 DoubleTab& grad_div_alpha_rho_gradC = ref_cast_non_const(DoubleTab, grad_div_alpha_rho_gradC_);
364 if (grad_div_alpha_rho_gradC.size() == 0)
365 grad_div_alpha_rho_gradC = eq_ns.inconnue().valeurs();
366 grad_div_alpha_rho_gradC = 0.;
367 const Operateur_Grad& opgrad = eq_ns.operateur_gradient();
368 opgrad.calculer(div_alpha_rho_gradC, grad_div_alpha_rho_gradC);
369
370 DoubleTab rhoPF = mil.rho().valeurs();
371 double rho_face;
372
373 // Division par rho0 necessaire dans le cas incompressible
374 //--------------------------------------------------------
375 if (boussi_ == 1)
376 {
377 if (compressible_ == 0)
378 grad_div_alpha_rho_gradC /= rho0_; // Cas approximation de Boussinesq
379 }
380 else if (boussi_ == 0)
381 {
382 for (int fac = ndeb; fac < nbfaces; fac++)
383 {
384 el0 = face_voisins(fac, 0);
385 el1 = face_voisins(fac, 1);
386 vol0 = volumes(el0);
387 vol1 = volumes(el1);
388
389 rho_face = (vol0 * rhoPF(el0) + vol1 * rhoPF(el1)) / (vol0 + vol1);
390 grad_div_alpha_rho_gradC(fac) /= rho_face;
391 }
392 }
393
394 // on calcule Grad(alpha_gradC_carre)
395 //-----------------------------------
396
397 const DoubleTab& alpha_gradC_carre = eq_c.get_alpha_gradC_carre();
398 DoubleTab& grad_alpha_gradC_carre = ref_cast_non_const(DoubleTab, grad_alpha_gradC_carre_);
399 if (grad_alpha_gradC_carre.size() == 0)
400 grad_alpha_gradC_carre = eq_ns.inconnue().valeurs();
401 grad_alpha_gradC_carre = 0.;
402 opgrad.calculer(alpha_gradC_carre, grad_alpha_gradC_carre);
403
404 // on interpole c et on calcule la source
405 //------------------------------------------------
406
407 if ((compressible_ == 0 && boussi_ == 1) || boussi_ == 0)
408 {
409 for (int fac = ndeb; fac < nbfaces; fac++)
410 {
411 el0 = face_voisins(fac, 0);
412 el1 = face_voisins(fac, 1);
413 vol0 = volumes(el0);
414 vol1 = volumes(el1);
415
416 cface = (vol0 * c(el0) + vol1 * c(el1)) / (vol0 + vol1);
417 rho_face = (vol0 * rhoPF(el0) + vol1 * rhoPF(el1)) / (vol0 + vol1);
418
419 if (boussi_ == 1)
420 resu(fac) += (cface * grad_div_alpha_rho_gradC(fac) - grad_alpha_gradC_carre(fac) / 2.) / rho0_; // Incompressible - Cas approximation de Boussinesq
421 else if (boussi_ == 0)
422 resu(fac) += (cface * grad_div_alpha_rho_gradC(fac) - grad_alpha_gradC_carre(fac) / 2.) / rho_face;
423 }
424 }
425 else if (compressible_ == 1 && boussi_ == 1)
426 {
427 for (int fac = ndeb; fac < nbfaces; fac++)
428 {
429 el0 = face_voisins(fac, 0);
430 el1 = face_voisins(fac, 1);
431 vol0 = volumes(el0);
432 vol1 = volumes(el1);
433
434 cface = (vol0 * c(el0) + vol1 * c(el1)) / (vol0 + vol1);
435
436 // Quasi-compressible
437 //-------------------
438 resu(fac) += (cface * grad_div_alpha_rho_gradC(fac) - rho0_ * grad_alpha_gradC_carre(fac) / 2.); // Cas approximation de Boussinesq
439 }
440 }
441 }
442 return resu;
443}
444
445DoubleTab& Source_Qdm_VDF_Phase_field::methode_4(DoubleTab& resu) const
446{
447 const Domaine_VDF& domaine_VDF = le_dom_VDF_.valeur();
448 const IntTab& face_voisins = domaine_VDF.face_voisins();
449 const DoubleVect& volumes = domaine_VDF.volumes();
450
451 const Convection_Diffusion_Phase_field& eq_c = ref_cast(Convection_Diffusion_Phase_field, le_probleme2_->equation(1));
452 const DoubleTab& c = eq_c.inconnue().valeurs();
453
454 const Navier_Stokes_phase_field& eq_ns = ref_cast(Navier_Stokes_phase_field, le_probleme2_->equation(0));
455 const Milieu_Phase_field& mil = ref_cast(Milieu_Phase_field, eq_ns.milieu());
456
457 // double cface;
458 int ndeb = domaine_VDF.premiere_face_int();
459 int nbfaces = domaine_VDF.nb_faces();
460 int el0, el1;
461 double vol0, vol1;
462 int type_systeme_naire = mil.get_fermeture().get_type_systeme_naire();
463
464 // Forme en -Div(alpha*rho*Grad(C))*Grad(C)
465 //=========================================
466
467 // on calcule Grad(C)
468 //-------------------
469 if (type_systeme_naire == 0)
470 {
471 DoubleTab& gradC = ref_cast_non_const(DoubleTab, gradC_);
472 if (gradC.size() == 0)
473 gradC = eq_ns.inconnue().valeurs();
474 gradC = 0.;
475 const Operateur_Grad& opgrad = eq_ns.operateur_gradient();
476 opgrad.calculer(c, gradC);
477 const DoubleTab& div_alpha_rho_gradC = eq_c.get_div_alpha_rho_gradC();
478 double div_alpha_rho_gradCface;
479
480 DoubleTab rhoPF = mil.rho().valeurs();
481 double rho_face;
482
483 if ((compressible_ == 0 && boussi_ == 1) || boussi_ == 0)
484 {
485 for (int fac = ndeb; fac < nbfaces; fac++)
486 {
487 el0 = face_voisins(fac, 0);
488 el1 = face_voisins(fac, 1);
489 vol0 = volumes(el0);
490 vol1 = volumes(el1);
491
492 div_alpha_rho_gradCface = (vol0 * div_alpha_rho_gradC(el0) + vol1 * div_alpha_rho_gradC(el1)) / (vol0 + vol1);
493
494 // Division par rho0 necessaire dans le cas incompressible
495 //--------------------------------------------------------
496 if (boussi_ == 1)
497 {
498 div_alpha_rho_gradCface /= rho0_;
499 resu(fac) -= div_alpha_rho_gradCface * gradC(fac) / rho0_; // Cas approximation de Boussinesq
500 }
501 else if (boussi_ == 0)
502 {
503 rho_face = (vol0 * rhoPF(el0) + vol1 * rhoPF(el1)) / (vol0 + vol1);
504 div_alpha_rho_gradCface /= rho_face;
505 resu(fac) -= div_alpha_rho_gradCface * gradC(fac) / rho_face;
506 }
507
508 }
509 }
510 else if (compressible_ == 1 && boussi_ == 1)
511 {
512 for (int fac = ndeb; fac < nbfaces; fac++)
513 {
514 el0 = face_voisins(fac, 0);
515 el1 = face_voisins(fac, 1);
516 vol0 = volumes(el0);
517 vol1 = volumes(el1);
518
519 div_alpha_rho_gradCface = (vol0 * div_alpha_rho_gradC(el0) + vol1 * div_alpha_rho_gradC(el1)) / (vol0 + vol1);
520
521 resu(fac) -= div_alpha_rho_gradCface * gradC(fac) / rho0_; // Cas approximation de Boussinesq
522
523 }
524 }
525 }
526
527 return resu;
528}
529
530DoubleTab& Source_Qdm_VDF_Phase_field::ajouter(DoubleTab& resu) const
531{
532 return (this->*methode)(resu);
533}
534
535DoubleTab& Source_Qdm_VDF_Phase_field::calculer(DoubleTab& resu) const
536{
537 resu = 0.;
538 return ajouter(resu);
539}
540
542{
543}
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.
const Champ_Inc_base & inconnue() const override
Renvoie le champ inconnue de l'equation: la concentration.
classe Convection_Diffusion_Phase_field Cas particulier de Convection_Diffusion_Concentration
class Domaine_Cl_VDF
classe Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
class Domaine_VDF
Definition Domaine_VDF.h:64
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
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
Sources & sources()
Renvoie les termes sources asssocies a l'equation.
const Champ_Don_base & rho() const
const double & rho0() const
const Fermeture_Phase_field_base & get_fermeture() const
classe Navier_Stokes_phase_field Cette classe porte les termes de l'equation de la dynamique
const Milieu_base & milieu() const override
Renvoie le milieu physique de l'equation (le Fluide_base upcaste en Milieu_base).
const Champ_Inc_base & inconnue() const override
Renvoie la vitesse (champ inconnue de l'equation) (version const).
Operateur_Grad & operateur_gradient()
Renvoie l'operateur de calcul du gradient associe a l'equation.
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
Classe Operateur_Grad Classe generique de la hierarchie des operateurs calculant le gradient.
DoubleTab & calculer(const DoubleTab &, DoubleTab &) const override
Initialise le tableau passe en parametre avec la contribution de l'operateur.
classe Probleme_base C'est un Probleme_U qui n'est pas un couplage.
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
double drhodc(const int n_elem) const
const DoubleVect & get_u_carre() override
class Source_Qdm_VDF_Phase_field
DoubleTab &(Source_Qdm_VDF_Phase_field::* methode)(DoubleTab &) const
void associer_pb(const Probleme_base &) override
DoubleTab & methode_4(DoubleTab &) const
void mettre_a_jour(double) override
DOES NOTHING - to override in derived classes.
void associer_domaines(const Domaine_dis_base &, const Domaine_Cl_dis_base &) override
DoubleTab & methode_1(DoubleTab &) const
DoubleTab & methode_3(DoubleTab &) const
DoubleTab & methode_2(DoubleTab &) const
DoubleTab & ajouter(DoubleTab &) const override
DoubleTab & calculer(DoubleTab &) const override
classe Source_base Un objet Source_base est un terme apparaissant au second membre d'une
Definition Source_base.h:42
class Sources Sources represente une liste de Source.
Definition Sources.h:31
void resize(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
Definition TRUSTTab.tpp:469
_SIZE_ dimension_tot(int) const override
Definition TRUSTTab.tpp:160
_SIZE_ dimension(int d) const
Definition TRUSTTab.tpp:133
_SIZE_ size() const
Definition TRUSTVect.tpp:45
_SIZE_ size_totale() const
Definition TRUSTVect.tpp:61