19#include <Equation_base.h>
20#include <Probleme_base.h>
21#include <Discretisation_base.h>
33 os<<
"exposant_beta "<<
beta_<<finl;
35 os<<
"Sc_t "<<
Sc_t_<<finl;
37 os<<
"energie_activation "<<
Ea_<<
" J/mol"<<finl;
41 os<<
"contre_energie_activation "<<
c_r_Ea_<<finl;
46void extract_coef_local(ArrOfDouble& coeff_reactifs,
const Nom& reactifs_,
const Motcles& list_var)
48 int sz=list_var.size();
49 assert(sz==list_var.size());
53 for (
int i=0; i<sz; i++)
54 parser.
addVar(list_var[i]);
60 for (
int i=0; i<sz; i++)
62 for (
int j=0; j<sz; j++)
65 double val=parser.
eval();
66 coeff_reactifs[i]=val;
68 Cerr<<reactifs_<<
" "<<list_var<<
" "<<coeff_reactifs<<finl;
69 for (
int i=0; i<sz; i++) Cerr<<coeff_reactifs[i]<<
"*"<<list_var[i]<<
"+";
77 assert(masse_molaire.
size_array()==list_var.size());
78 extract_coef_local(coeff_reactifs,
reactifs_, list_var);
79 extract_coef_local(coeff_produits,
produits_, list_var);
84 ArrOfDouble coeff_reactifs;
85 ArrOfDouble coeff_produits;
86 extract_coef(coeff_reactifs,coeff_produits,list_var,masse_molaire);
87 int sz=list_var.size();
88 double mreactif=0,mproduit=0;
95 for (
int p=0; p<sz; p++)
97 mreactif+=masse_molaire[p]*coeff_reactifs[p];
98 mproduit+=masse_molaire[p]*coeff_produits[p];
99 coeff_Y_[p]+=masse_molaire[p]*coeff_reactifs[p];
100 coeff_Y_[p]-=masse_molaire[p]*coeff_produits[p];
104 if (!est_egal(mreactif,mproduit))
106 Cerr<<
" erreur dans la chimie de "<<(*this)<<finl;
107 Cerr<<
" mreactif "<< mreactif<<finl;
108 Cerr<<
" mproduit "<< mproduit<<finl;
113 Cerr<<
" Extraction des activites "<<finl;
137 Cerr<<
"Reaction::validate_params: Turbulent Schmidt number cannot be 0 ! Try 1E30 instead !"<<finl;
144 if (motlu==
"coefficients_activites")
150 Cerr<<
"On attendait { et non " <<motlubis<<
" dans lire_motcle_non_standard de "<<
que_suis_je()<<finl;
154 while (motlubis!=
"}")
167 Cerr<<
"On attendait coefficients_activites et non " <<motlu<<
" dans lire_motcle_non_standard de "<<
que_suis_je()<<finl;
187 int size=liste_C.size();
189 ArrOfDouble C(size),C0(size);
194 Cerr<<
"Reaction : Donnees incompatibles avec le fait que l on n a pas de temperature"<<finl;
199 for (
int elem=0; elem<nb_case; elem++)
204 for (
int i=0; i<size; i++)
208 C[i]=liste_C[i]->
valeurs()(elem);
214 Cerr<<
" on rabote C_"<<i<<
" dans la maille "<<elem<<
" dans la chimie !!!!!! "<<C[i]<<finl;
227 double proportion_directe;
229 for (
int i=0; i<size; i++)
232 DoubleTab& C_i = liste_C[i]->
valeurs();
245 double proportion=-1, omegapoint, dy_omega, proportion_inverse=-1;
251 dy_omega=omegapoint/rho_mel;
253 double produit_activite=1;
254 double produit_contre=1;
255 double R_gaz_parfait=8.3143;
257 double securite=1-1e-6;
261 ArrOfDouble& C=C_temp;
267 while((dmax>seuil)&&(ite<1000))
274 proportion=dy_omega*deltat;
276 for (
int i=0; i<nbc; i++)
289 assert(produit_contre>=0);
290 proportion_directe=produit_activite*proportion;
294 proportion=proportion_directe-proportion_inverse;
297 proportion=proportion_directe;
304 for (
int i=0; i<nbc; i++)
308 if (proportion > C[i]/
coeff_stoechio_[i]*securite) Cerr<<
" on limite" <<finl;
313 for (
int i=0; i<nbc; i++)
325 for (
int i=0; i<nbc; i++)
349 double nc=((C0[i]-proportion*
coeff_stoechio_[i]/2.+pond/2.*C[i])/(1.+pond/2.)-C[i]);
350 double dc=std::fabs(nc);
361 double dc=std::fabs(nc);
DoubleTab & valeurs() override
Renvoie le tableau des valeurs du champ au temps courant.
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 Equation_base Le role d'une equation est le calcul d'un ou plusieurs champs....
const Discretisation_base & discretisation() const
Renvoie la discretisation associee a l'equation.
Domaine_dis_base & domaine_dis()
Renvoie le domaine discretise associe a l'equation.
Une chaine de caractere (Nom) en majuscules.
Un tableau d'objets de la classe Motcle.
class Nom Une chaine de caractere pour nommer les objets de TRUST
Inherits from Objet_U, adds the very common method set_param for the Objet_U hierarchy.
virtual void set_param(Param &) const
const Nom & que_suis_je() const
renvoie la chaine identifiant la classe.
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
Helper class to factorize the readOn method of Objet_U classes.
void ajouter(const char *keyword, const int *value, Param::Nature nat=Param::OPTIONAL)
Register an integer parameter.
void ajouter_non_std(const char *keyword, const Objet_U *value, Param::Nature nat=Param::OPTIONAL)
Register a keyword handled by Objet_U::lire_motcle_non_standard.
classe Parser_U Version de la classe Parser, derivant de Objet_U.
void setVar(const char *sv, double val)
void setString(const std::string &s)
void addVar(const char *v)
classe Probleme_base C'est un Probleme_U qui n'est pas un couplage.
virtual const Equation_base & equation(int) const =0
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
void extract_coef(ArrOfDouble &coeff_recactifs, ArrOfDouble &coeff_produits, const Motcles &list_var, const ArrOfDouble &masse_molaire) const
void completer(const Motcles &list_var, const ArrOfDouble &masse_molaire)
double proportion_max_sur_delta_t_
ArrOfDouble coeff_activite_
double enthalpie_reaction_
void discretiser_omega(const Probleme_base &pb, const Nom &)
int lire_motcle_non_standard(const Motcle &motlu, Entree &is) override
Lecture des parametres de type non simple d'un objet_U a partir d'un flot d'entree.
double constante_taux_reaction_
double proportion_max_admissible_
int nb_sous_pas_de_temps_reaction_
double calculer_pas_de_temps() const
void reagir(VECT(OBS_PTR(Champ_Inc_base))&liste_c, const double deltat) const
ArrOfDouble coeff_stoechio_
double calcul_proportion_implicite(ArrOfDouble &C_temp, const ArrOfDouble &C0, double deltat, double seuil, double &poroportion_directe) const
void validate_params() const override
Called in the readOn of Objet_U_With_Params, after reading the params.
Classe de base des flux de sortie.
_SIZE_ size_array() const
void resize_array(_SIZE_ new_size, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)