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>
32Source_Qdm_VDF_Phase_field::Source_Qdm_VDF_Phase_field() : methode(nullptr) { }
41 Cerr <<
"Source_Qdm_VDF_Phase_field::readOn" << finl;
46 Cerr << motlu << finl;
49 Cerr <<
"On attendait { dans Source_Qdm_VDF_Phase_field::readOn" << finl;
54 Cerr << motlu << finl;
55 if (motlu !=
"forme_du_terme_source")
57 Cerr <<
"On attendait forme_du_terme_source dans Source_Qdm_VDF_Phase_field::readOn" << finl;
64 Cerr << motlu << finl;
67 Cerr <<
"On attendait } dans Source_Qdm_VDF_Phase_field::readOn" << finl;
90 Cerr <<
"Le choix de la methode :" <<
terme_source_ <<
", n'est pas valide." << finl;
107 Cerr <<
"Erreur dans le choix du parametre boussi_" << finl;
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();
135 int nbfaces = domaine_VDF.
nb_faces();
149 DoubleTab mutilde_NS;
157 for (
int i = 0; i < eq_c.
get_mutilde_().valeurs().dimension_tot(0); i++)
158 mutilde_NS(i, 0) = mutilde(i);
165 for (
int i = 0; i < taille; i++)
167 mutilde_NS(i) -= (0.5 * u_carre(i)) * source_pf.
drhodc(i);
172 if (type_systeme_naire == 0)
174 DoubleTab& grad_mutilde = ref_cast_non_const(DoubleTab,
grad_mutilde_);
175 if (grad_mutilde.
size() == 0)
179 opgrad.
calculer(mutilde_NS, grad_mutilde);
184 for (
int fac = ndeb; fac < nbfaces; fac++)
186 el0 = face_voisins(fac, 0);
187 el1 = face_voisins(fac, 1);
191 cface = (vol0 * c(el0) + vol1 * c(el1)) / (vol0 + vol1);
194 resu(fac) -= cface * grad_mutilde(fac) /
rho0_;
198 rho_face = (vol0 * rhoPF(el0) + vol1 * rhoPF(el1)) / (vol0 + vol1);
199 resu(fac) -= cface * grad_mutilde(fac) / rho_face;
203 else if (type_systeme_naire == 1)
207 DoubleTab& grad_mutilde = ref_cast_non_const(DoubleTab,
grad_mutilde_);
208 if (grad_mutilde.
size() == 0)
214 for (
int j = 0; j < nb_comp; j++)
217 for (
int i = 0; i < temp_mutilde_NS.
dimension(0); i++)
219 temp_mutilde_NS(i, 0) = mutilde_NS(i, j);
221 opgrad.
calculer(temp_mutilde_NS, grad_mutilde);
226 for (
int fac = ndeb; fac < nbfaces; fac++)
228 el0 = face_voisins(fac, 0);
229 el1 = face_voisins(fac, 1);
232 cface = (vol0 * c(el0, j) + vol1 * c(el1, j)) / (vol0 + vol1);
235 resu(fac) -= cface * grad_mutilde(fac) /
rho0_;
239 rho_face = (vol0 * rhoPF(el0) + vol1 * rhoPF(el1)) / (vol0 + vol1);
240 resu(fac) -= cface * grad_mutilde(fac) / rho_face;
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();
265 int nbfaces = domaine_VDF.
nb_faces();
276 if (type_systeme_naire == 0)
280 if (grad_div_alpha_rho_gradC.
size() == 0)
282 grad_div_alpha_rho_gradC = 0.;
284 opgrad.
calculer(div_alpha_rho_gradC, grad_div_alpha_rho_gradC);
294 grad_div_alpha_rho_gradC /=
rho0_;
298 for (
int fac = ndeb; fac < nbfaces; fac++)
300 el0 = face_voisins(fac, 0);
301 el1 = face_voisins(fac, 1);
305 rho_face = (vol0 * rhoPF(el0) + vol1 * rhoPF(el1)) / (vol0 + vol1);
306 grad_div_alpha_rho_gradC(fac) /= rho_face;
313 for (
int fac = ndeb; fac < nbfaces; fac++)
315 el0 = face_voisins(fac, 0);
316 el1 = face_voisins(fac, 1);
320 cface = (vol0 * c(el0) + vol1 * c(el1)) / (vol0 + vol1);
323 resu(fac) += cface * grad_div_alpha_rho_gradC(fac) /
rho0_;
327 rho_face = (vol0 * rhoPF(el0) + vol1 * rhoPF(el1)) / (vol0 + vol1);
328 resu(fac) += cface * grad_div_alpha_rho_gradC(fac) / rho_face;
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();
349 int nbfaces = domaine_VDF.
nb_faces();
360 if (type_systeme_naire == 0)
364 if (grad_div_alpha_rho_gradC.
size() == 0)
366 grad_div_alpha_rho_gradC = 0.;
368 opgrad.
calculer(div_alpha_rho_gradC, grad_div_alpha_rho_gradC);
378 grad_div_alpha_rho_gradC /=
rho0_;
382 for (
int fac = ndeb; fac < nbfaces; fac++)
384 el0 = face_voisins(fac, 0);
385 el1 = face_voisins(fac, 1);
389 rho_face = (vol0 * rhoPF(el0) + vol1 * rhoPF(el1)) / (vol0 + vol1);
390 grad_div_alpha_rho_gradC(fac) /= rho_face;
399 if (grad_alpha_gradC_carre.
size() == 0)
401 grad_alpha_gradC_carre = 0.;
402 opgrad.
calculer(alpha_gradC_carre, grad_alpha_gradC_carre);
409 for (
int fac = ndeb; fac < nbfaces; fac++)
411 el0 = face_voisins(fac, 0);
412 el1 = face_voisins(fac, 1);
416 cface = (vol0 * c(el0) + vol1 * c(el1)) / (vol0 + vol1);
417 rho_face = (vol0 * rhoPF(el0) + vol1 * rhoPF(el1)) / (vol0 + vol1);
420 resu(fac) += (cface * grad_div_alpha_rho_gradC(fac) - grad_alpha_gradC_carre(fac) / 2.) /
rho0_;
422 resu(fac) += (cface * grad_div_alpha_rho_gradC(fac) - grad_alpha_gradC_carre(fac) / 2.) / rho_face;
427 for (
int fac = ndeb; fac < nbfaces; fac++)
429 el0 = face_voisins(fac, 0);
430 el1 = face_voisins(fac, 1);
434 cface = (vol0 * c(el0) + vol1 * c(el1)) / (vol0 + vol1);
438 resu(fac) += (cface * grad_div_alpha_rho_gradC(fac) -
rho0_ * grad_alpha_gradC_carre(fac) / 2.);
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();
459 int nbfaces = domaine_VDF.
nb_faces();
469 if (type_systeme_naire == 0)
471 DoubleTab& gradC = ref_cast_non_const(DoubleTab,
gradC_);
472 if (gradC.
size() == 0)
478 double div_alpha_rho_gradCface;
485 for (
int fac = ndeb; fac < nbfaces; fac++)
487 el0 = face_voisins(fac, 0);
488 el1 = face_voisins(fac, 1);
492 div_alpha_rho_gradCface = (vol0 * div_alpha_rho_gradC(el0) + vol1 * div_alpha_rho_gradC(el1)) / (vol0 + vol1);
498 div_alpha_rho_gradCface /=
rho0_;
499 resu(fac) -= div_alpha_rho_gradCface * gradC(fac) /
rho0_;
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;
512 for (
int fac = ndeb; fac < nbfaces; fac++)
514 el0 = face_voisins(fac, 0);
515 el1 = face_voisins(fac, 1);
519 div_alpha_rho_gradCface = (vol0 * div_alpha_rho_gradC(el0) + vol1 * div_alpha_rho_gradC(el1)) / (vol0 + vol1);
521 resu(fac) -= div_alpha_rho_gradCface * gradC(fac) /
rho0_;
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
const DoubleTab & get_alpha_gradC_carre() const
const DoubleTab & get_div_alpha_rho_gradC() const
const Champ_Fonc_base & get_mutilde_() const
classe Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
int nb_faces() const
renvoie le nombre global de faces.
double volumes(int i) const
int premiere_face_int() const
une face est interne ssi elle separe deux elements.
int face_voisins(int num_face, int i) const
renvoie l'element voisin de numface dans la direction i.
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,...
Sources & sources()
Renvoie les termes sources asssocies a l'equation.
int get_type_systeme_naire() const
int get_nb_constituants() const
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
int & getset_terme_source()
int & getset_compressible()
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.
virtual Entree & readOn(Entree &)
Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
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.
Classe de base des flux de sortie.
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 grad_div_alpha_rho_gradC_
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 grad_alpha_gradC_carre_
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
class Sources Sources represente une liste de Source.
void resize(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
_SIZE_ dimension_tot(int) const override
_SIZE_ dimension(int d) const
_SIZE_ size_totale() const