16#include <EF_discretisation.h>
17#include <Domaine_EF.h>
18#include <Champ_P1_EF.h>
19#include <Champ_Q1_EF.h>
20#include <Champ_Fonc_P0_EF.h>
21#include <Y_plus_Champ_Q1.h>
22#include <Rotationnel_Champ_P1_EF.h>
23#include <Rotationnel_Champ_Q1_EF.h>
24#include <Champ_Fonc_Tabule.h>
25#include <Champ_Fonc_Tabule_P0_EF.h>
26#include <Milieu_base.h>
27#include <Equation_base.h>
30#include <Segment_EF.h>
34#include <Champ_Uniforme.h>
35#include <Schema_Temps_base.h>
37#include <Domaine_Cl_EF.h>
38#include <Domaine_Cl_dis_base.h>
68 motcles[0] =
"vitesse";
69 motcles[1] =
"pression";
70 motcles[2] =
"temperature";
71 motcles[3] =
"divergence_vitesse";
72 motcles[4] =
"gradient_pression";
73 motcles[5] =
"champ_elem";
74 motcles[6] =
"champ_sommets";
77 Nom type_champ_vitesse;
79 type_champ_vitesse =
"Champ_P1_EF";
81 type_champ_vitesse =
"Champ_Q1_EF";
84 Cerr <<
"EF_discretisation::discretiser_champ :\n L'element geometrique ";
86 Cerr <<
" n'est pas supporte." << finl;
91 int default_nb_comp = 0;
92 int rang = motcles.
search(directive);
96 type = type_champ_vitesse;
100 type =
"Champ_P0_EF";
104 type = type_champ_vitesse;
108 type =
"Champ_P0_EF";
112 type = type_champ_vitesse;
116 type =
"Champ_P0_EF";
120 type =
"Champ_P1_EF";
129 Cerr <<
"EF_discretisation : " << motcles;
141 if (type ==
"Champ_P0_EF")
143 else if (type == type_champ_vitesse)
144 nb_ddl = domaine_EF.
nb_som();
145 else if (type ==
"Champ_P1_EF")
146 nb_ddl = domaine_EF.
nb_som();
157 nb_comp = default_nb_comp;
159 creer_champ(champ, z, type, noms[0], unites[0], nb_comp, nb_ddl, nb_pas_dt, temps, directive,
que_suis_je());
160 if (nature == multi_scalaire)
162 champ->fixer_nature_du_champ(nature);
163 champ->fixer_unites(unites);
164 champ->fixer_noms_compo(noms);
176 discretiser_champ_fonc_don(directive, z, nature, noms, unites, nb_comp, temps, champ);
187 discretiser_champ_fonc_don(directive, z, nature, noms, unites, nb_comp, temps, champ);
197void EF_discretisation::discretiser_champ_fonc_don(
const Motcle& directive,
const Domaine_dis_base& z, Nature_du_champ nature,
const Noms& noms,
const Noms& unites,
int nb_comp,
double temps,
207 motcles[0] =
"pression";
208 motcles[1] =
"temperature";
209 motcles[2] =
"divergence_vitesse";
210 motcles[3] =
"champ_elem";
211 motcles[6] =
"champ_sommets";
212 motcles[4] =
"vitesse";
213 motcles[5] =
"gradient_pression";
216 Nom type_champ_vitesse;
220 type_champ_vitesse =
"Champ_Fonc_P1_EF";
222 type_champ_vitesse =
"Champ_Fonc_Q1_EF";
225 Cerr <<
"EF_discretisation::discretiser_champ :\n L'element geometrique ";
227 Cerr <<
" n'est pas supporte." << finl;
232 int default_nb_comp = 0;
233 int rang = motcles.search(directive);
237 type =
"Champ_Fonc_P0_EF";
241 type = type_champ_vitesse;
245 type =
"Champ_Fonc_P0_EF";
249 type =
"Champ_Fonc_P0_EF";
253 type = type_champ_vitesse;
257 type = type_champ_vitesse;
261 type = type_champ_vitesse;
270 Cerr <<
"EF_discretisation : " << motcles;
285 if (type ==
"Champ_Fonc_P0_EF")
287 else if (type == type_champ_vitesse)
288 nb_ddl = domaine_EF.
nb_som();
303 nb_comp = default_nb_comp;
311 if ((nature == multi_scalaire) && (champ_fonc))
313 champ_fonc->valeur().fixer_nature_du_champ(nature);
314 champ_fonc->valeur().fixer_unites(unites);
315 champ_fonc->valeur().fixer_noms_compo(noms);
317 else if ((nature == multi_scalaire) && (champ_don))
319 Cerr <<
"There is no field of type OWN_PTR(Champ_Don_base) with a multi_scalaire nature." << finl;
327 Cerr <<
"Discretisation de la distance paroi" << finl;
329 ch.typer(
"Champ_Fonc_P0_EF");
332 ch_dist_paroi.
nommer(
"distance_paroi");
341 Cerr <<
"Discretisation de la vorticite " << finl;
346 ch.typer(
"Rotationnel_Champ_P1_EF");
367 ch.typer(
"Rotationnel_Champ_Q1_EF");
388 Cerr <<
"Pb dans le typage des elements dans EF_discretisation::vorticite" << finl;
397 ch.typer(
"Rotationnel_Champ_P1_EF");
419 ch.typer(
"Rotationnel_Champ_Q1_EF");
441 Cerr <<
"Pb dans le typage des elements dans EF_discretisation::creer_champ_vorticite" << finl;
457 Cerr <<
"Discretisation EF du fluide_Ostwald" << finl;
464 Champ_Ostwald_EF& ch_mu = ref_cast(Champ_Ostwald_EF,mu);
465 Cerr<<
"associe domainedisbase EF"<<finl;
466 ch_mu.associer_domaine_dis_base(domaine_EF);
467 ch_mu.associer_fluide(le_fluide);
468 ch_mu.associer_champ(vit);
469 ch_mu.associer_eqn(eqn_hydr);
470 Cerr<<
"associations finies domaine dis base, fluide, champ EF"<<finl;
471 ch_mu.fixer_nb_comp(1);
473 Cerr<<
"fait fixer_nb_valeurs_nodales"<<finl;
474 Cerr<<
"nb_valeurs_nodales EF = "<<domaine_EF.
nb_elem()<<finl;
475 ch_mu.fixer_nb_valeurs_nodales(domaine_EF.
nb_elem());
477 Cerr<<
"fait changer_temps"<<finl;
478 ch_mu.changer_temps(vit->
temps());
479 Cerr<<
"mu EF est discretise "<<finl;
488 Cerr <<
"Discretisation du critere Q " << finl;
491 ch.typer(
"Critere_Q_Champ_P1_EF");
492 Critere_Q_Champ_P1_EF& ch_cQ=ref_cast(Critere_Q_Champ_P1_EF,ch.valeur());
493 ch_cQ.associer_domaine_dis_base(domaine_EF);
494 ch_cQ.associer_champ(vit);
495 ch_cQ.nommer(
"Critere_Q");
496 ch_cQ.fixer_nb_comp(1);
497 ch_cQ.fixer_nb_valeurs_nodales(domaine_EF.
nb_elem());
498 ch_cQ.fixer_unite(
"s-2");
499 ch_cQ.changer_temps(ch_vitesse.
temps());
505 Cerr <<
"Discretisation de y_plus" << finl;
509 ch.typer(
"Y_plus_Champ_Q1");
524 Cerr <<
"Discretisation de gradient_temperature" << finl;
528 ch.typer(
"gradient_temperature_Champ_P1_EF");
529 grad_T_Champ_P1_EF& ch_gt=ref_cast(grad_T_Champ_P1_EF,ch.valeur());
530 ch_gt.associer_domaine_dis_base(domaine_EF);
531 ch_gt.associer_domaine_Cl_dis_base(domaine_cl_EF);
532 ch_gt.associer_champ(temp);
533 ch_gt.nommer(
"gradient_temperature");
535 ch_gt.fixer_nb_valeurs_nodales(domaine_EF.
nb_elem());
536 ch_gt.fixer_unite(
"K/m");
537 ch_gt.changer_temps(ch_temperature->
temps());
544 Cerr <<
"Discretisation de h_conv" << finl;
548 ch.typer(
"h_conv_Champ_P1_EF");
549 h_conv_Champ_P1_EF& ch_gt=ref_cast(h_conv_Champ_P1_EF,ch.valeur());
550 ch_gt.associer_domaine_dis_base(domaine_EF);
551 ch_gt.associer_domaine_Cl_dis_base(domaine_cl_EF);
552 ch_gt.associer_champ(temp);
553 ch_gt.temp_ref()=temp_ref;
556 ch_gt.fixer_nb_comp(1);
557 ch_gt.fixer_nb_valeurs_nodales(domaine_EF.
nb_elem());
558 ch_gt.fixer_unite(
"W/m2.K");
559 ch_gt.changer_temps(ch_temperature->
temps());
579 if (class_operateur ==
"Source")
581 type = type_operateur;
585 else if (class_operateur ==
"Solveur_Masse")
587 else if (class_operateur ==
"Operateur_Grad")
589 else if (class_operateur ==
"Operateur_Div")
591 else if (class_operateur ==
"Operateur_Diff")
594 if (type_operateur !=
"")
597 type += type_operateur;
601 else if (class_operateur ==
"Operateur_Conv")
604 type += type_operateur;
classe Champ_Don_base classe de base des Champs donnes (non calcules)
int fixer_nb_valeurs_nodales(int n) override
Fixe le nombre de degres de liberte par composante.
void associer_param(const VECT(OBS_PTR(Champ_base))&, const Table &)
Classe Champ_Fonc_Tabule Classe derivee de Champ_Fonc_base qui represente les.
const Table & table() const
void typer_champ_tabule_discretise(const Nom &typ)
const Champ_Fonc_base & le_champ_tabule_discretise() const
Renvoie le champ tabule calcule.
classe Champ_Fonc_base Classe de base des champs qui sont fonction d'une grandeur calculee
void associer_domaine_dis_base(const Domaine_dis_base &) override
const Domaine_dis_base & domaine_dis_base() const override
classe Champ_base Cette classe est la base de la hierarchie des champs.
virtual double changer_temps(const double t)
Fixe le temps auquel se situe le champ.
double temps() const
Renvoie le temps du champ.
classe Discret_Thyd Cette classe est la classe de base representant une discretisation
OBS_PTR(Domaine) le_domaine_
static void creer_champ(OWN_PTR(Champ_Inc_base)&ch, const Domaine_dis_base &z, const Nom &type, const Nom &nom, const Nom &unite, int nb_comp, int nb_ddl, int nb_pas_dt, double temps, const Nom &directive=NOM_VIDE, const Nom &nom_discretisation=NOM_VIDE)
Methode statique qui cree un OWN_PTR(Champ_Inc_base) du type specifie.
virtual Nom get_name_of_type_for(const Nom &class_operateur, const Nom &type_operteur, const Equation_base &eqn, const OBS_PTR(Champ_base)&champ_supp=OBS_PTR(Champ_base)()) const
remplit le Nom type en focntion de la classe de operateur, du type de l'operateur et de l'equation
static const Motcle DEMANDE_DESCRIPTION
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
classe Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
const Elem_EF_base & type_elem() const
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
void proprietes_physiques_fluide_Ostwald(const Domaine_dis_base &, Fluide_Ostwald &, const Navier_Stokes_std &, const Champ_Inc_base &) const override
discretise en EF le fluide incompressible, donc K e N
void discretiser_champ(const Motcle &directive, const Domaine_dis_base &z, Nature_du_champ nature, const Noms &nom, const Noms &unite, int nb_comp, int nb_pas_dt, double temps, OWN_PTR(Champ_Inc_base) &champ, const Nom &sous_type=NOM_VIDE) const override
Discretisation d'un champ pour le EF en fonction d'une directive de discretisation.
void distance_paroi(const Schema_Temps_base &, Domaine_dis_base &, OWN_PTR(Champ_Fonc_base)&) const
void grad_T(const Domaine_dis_base &z, const Domaine_Cl_dis_base &, const Champ_Inc_base &temperature, OWN_PTR(Champ_Fonc_base) &ch) const override
void critere_Q(const Domaine_dis_base &z, const Domaine_Cl_dis_base &, const Champ_Inc_base &vitesse, OWN_PTR(Champ_Fonc_base) &ch) const override
void creer_champ_vorticite(const Schema_Temps_base &, const Champ_Inc_base &, OWN_PTR(Champ_Fonc_base)&) const override
Nom get_name_of_type_for(const Nom &class_operateur, const Nom &type_operateur, const Equation_base &eqn, const OBS_PTR(Champ_base) &champ_sup) const override
void vorticite(Domaine_dis_base &, const Champ_Inc_base &, OWN_PTR(Champ_Fonc_base)&) const
void h_conv(const Domaine_dis_base &z, const Domaine_Cl_dis_base &, const Champ_Inc_base &temperature, OWN_PTR(Champ_Fonc_base) &ch, Motcle &nom, int temp_ref) const override
void y_plus(const Domaine_dis_base &z, const Domaine_Cl_dis_base &, const Champ_Inc_base &vitesse, OWN_PTR(Champ_Fonc_base) &ch) const override
Class defining operators and methods for all reading operation in an input flow (file,...
classe Equation_base Le role d'une equation est le calcul d'un ou plusieurs champs....
virtual void fixer_nb_comp(int i)
Fixe le nombre de composantes du champ.
void nommer(const Nom &) override
Donne un nom au champ.
virtual const Nom & fixer_unite(const Nom &)
Specifie l'unite d'un champ scalaire ou dont toutes les composantes ont la meme unite.
virtual int nb_comp() const
virtual const Nom & fixer_nom_compo(int, const Nom &)
Fixe le nom de la i-eme composante du champ.
const Champ_Don_base & viscosite_dynamique() const
Une chaine de caractere (Nom) en majuscules.
Un tableau d'objets de la classe Motcle.
int search(const Motcle &t) const
classe Navier_Stokes_std Cette classe porte les termes de l'equation de la dynamique
const Champ_Inc_base & inconnue() const override
Renvoie la vitesse (champ inconnue de l'equation) (version const).
class Nom Une chaine de caractere pour nommer les objets de TRUST
Un tableau de chaine de caracteres (VECT(Nom)).
classe Objet_U Cette classe est la classe de base des Objets de TRUST
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.
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
void associer_champ(const Champ_P1_EF &)
void associer_champ(const Champ_Q1_EF &)
double temps_courant() const
Renvoie le temps courant.
Classe de base des flux de sortie.
void associer_champ(const Champ_Q1_EF &)
void associer_domaine_Cl_dis_base(const Domaine_Cl_dis_base &le_dom_Cl_dis_base)