16#include <DG_discretisation.h>
17#include <Domaine_DG.h>
18#include <Champ_Fonc_Tabule.h>
19#include <Milieu_base.h>
20#include <Equation_base.h>
21#include <Champ_Uniforme.h>
22#include <Champ_Inc_base.h>
23#include <Schema_Temps_base.h>
25#include <Domaine_Cl_DG.h>
27#include <Quadrature_base.h>
28#include <Quadrature_Ord1_Polygone.h>
29#include <Quadrature_Ord3_Polygone.h>
30#include <Quadrature_Ord5_Polygone.h>
61 motcles[0] =
"vitesse";
62 motcles[1] =
"pression";
63 motcles[2] =
"temperature";
64 motcles[3] =
"divergence_vitesse";
65 motcles[4] =
"gradient_pression";
66 motcles[5] =
"champ_elem";
67 motcles[6] =
"champ_sommets";
70 Nom type_elem(
"Champ_Elem_DG");
72 int nb_basis_func = 0;
73 int rang = motcles.
search(directive);
92 Cerr <<
"DG discretisation : " << motcles;
112 creer_champ(champ, dom_dis, type, noms[0], unites[0], nb_comp*nb_basis_func, nb_ddl, nb_pas_dt, temps, directive,
que_suis_je());
114 if (nature == multi_scalaire)
123 champ->fixer_nature_du_champ(scalaire);
126 champ->fixer_nature_du_champ(basis_function_order_1_scalar);
129 champ->fixer_nature_du_champ(basis_function_order_2_scalar);
138 champ->fixer_nature_du_champ(vectoriel);
141 champ->fixer_nature_du_champ(basis_function_order_1_vectorial);
144 champ->fixer_nature_du_champ(basis_function_order_2_vectorial);
161 discretiser_champ_fonc_don(directive, z, nature, noms, unites, nb_comp, temps, champ);
172 discretiser_champ_fonc_don(directive, z, nature, noms, unites, nb_comp, temps, champ);
182void DG_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,
193 motcles[0] =
"pression";
194 motcles[1] =
"temperature";
195 motcles[2] =
"champ_fonc_quad_dg";
196 motcles[5] =
"champ_elem_dg";
197 motcles[3] =
"champ_elem";
198 motcles[6] =
"champ_sommets";
199 motcles[4] =
"vitesse";
200 motcles[7] =
"champ_face";
204 int rang = motcles.search(directive);
217 type =
"Champ_Fonc_Quad_DG";
218 nb_points = nb_pts_integ_max;
221 type =
"Champ_Fonc_Elem_DG";
225 type =
"Champ_Fonc_Som_DG";
234 Cerr <<
"DG discretisation : " << motcles;
249 if (type ==
"Champ_Fonc_Elem_DG" || type ==
"Champ_Fonc_Quad_DG")
251 else if (type ==
"Champ_Fonc_Som_DG")
252 nb_ddl = domaine_DG.
nb_som();
256 bool vector = (nature==vectoriel or nature==quadrature_vectoriel or nature == basis_function_order_1_vectorial or nature == basis_function_order_2_vectorial );
261 creer_champ(*champ_fonc, z, type, noms[0], unites[0], nb_comp*nb_points, nb_ddl, temps, directive,
que_suis_je());
264 (nb_points == 1) ? champ_fonc->valeur().fixer_nature_du_champ(scalaire)
265 : champ_fonc->valeur().fixer_nature_du_champ(quadrature_scalaire);
269 (nb_points == 1) ? champ_fonc->valeur().fixer_nature_du_champ(vectoriel)
270 : champ_fonc->valeur().fixer_nature_du_champ(quadrature_vectoriel);
274 Cerr <<
"multi_scalaire not implemented for now" << finl;
280 creer_champ(*champ_don, z, type, noms[0], unites[0], nb_comp*nb_points, nb_ddl, temps, directive,
que_suis_je());
283 (nb_points == 1) ? champ_don->valeur().fixer_nature_du_champ(scalaire)
284 : champ_don->valeur().fixer_nature_du_champ(quadrature_scalaire);
288 (nb_points == 1) ? champ_don->valeur().fixer_nature_du_champ(vectoriel)
289 : champ_don->valeur().fixer_nature_du_champ(quadrature_vectoriel);
293 Cerr <<
"multi_scalaire not implemented for now" << finl;
300 if ((nature == multi_scalaire) && (champ_fonc))
304 else if ((nature == multi_scalaire) && (champ_don))
306 Cerr <<
"There is no field of type Champ_Don with a multi_scalaire nature." << finl;
334 if (class_operateur ==
"Source")
336 type = type_operateur;
344 else if (class_operateur ==
"Solveur_Masse")
356 else if (class_operateur ==
"Operateur_Grad")
360 else if (class_operateur ==
"Operateur_Div")
365 else if (class_operateur ==
"Operateur_Diff")
375 if (type_operateur !=
"")
378 type += type_operateur;
383 else if (class_operateur ==
"Operateur_Conv")
386 type += type_operateur;
406 Cerr <<
"Global wall distance discretisation" << finl;
407 Noms noms(1), unites(1);
408 noms[0] =
Nom(
"distance_paroi_globale");
409 unites[0] =
Nom(
"m");
classe Champ_Don_base classe de base des Champs donnes (non calcules)
Classe Champ_Fonc_Tabule Classe derivee de Champ_Fonc_base qui represente les.
classe Champ_Fonc_base Classe de base des champs qui sont fonction d'une grandeur calculee
classe Champ_base Cette classe est la base de la hierarchie des champs.
void grad_u(const Domaine_dis_base &z, const Domaine_Cl_dis_base &zcl, const Champ_Inc_base &ch_vitesse, OWN_PTR(Champ_Fonc_base)&ch) const override
void distance_paroi(const Schema_Temps_base &, Domaine_dis_base &, OWN_PTR(Champ_Fonc_base)&) const
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
Old copy paste, give the name to fields. Name used to allocate size of matrixes in discretiser.
void distance_paroi_globale(const Schema_Temps_base &, Domaine_dis_base &, OWN_PTR(Champ_Fonc_base)&) const override
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 of a field for DG formulation.
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 Nom NOM_VIDE
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
int verifie_sous_type(Nom &type, const Nom &sous_type, const Motcle &directive) const
classe Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
const Quadrature_base & get_quadrature(int order) const
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,...
classe Equation_base Le role d'une equation est le calcul d'un ou plusieurs champs....
virtual const Champ_Inc_base & inconnue() const =0
Une chaine de caractere (Nom) en majuscules.
Un tableau d'objets de la classe Motcle.
int search(const Motcle &t) const
class Nom Une chaine de caractere pour nommer les objets de TRUST
virtual int debute_par(const char *const n) const
Nom & suffix(const char *const)
Extraction de suffixe : Nom x("azerty");.
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 int Nb_col_from_order(const int order)
static int Get_order_for(const Nom &n)
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
int nb_pts_integ_max() const
Classe de base des flux de sortie.