TRUST 1.9.8
HPC thermohydraulic platform
Loading...
Searching...
No Matches
Chimie.cpp
1/****************************************************************************
2* Copyright (c) 2026, 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 <Chimie.h>
17#include <Probleme_base.h>
18#include <Motcle.h>
19#include <Param.h>
20#include <Parser_U.h>
21#include <Domaine_VF.h>
22#include <Discretisation_base.h>
23#include <Convection_Diffusion_Concentration.h>
24#include <dlsinterf.h>
25#include <Constituant.h>
26
27// XD reactions listobj nul BRACE reaction COMMA list of reactions
28
29Implemente_instanciable(Chimie,"Chimie",Objet_U_With_Params);
30// XD chimie objet_u chimie BRACE Keyword to describe the chmical reactions
31
32
34{
35 os<<(*this).le_nom()<<finl;
36 os<<reactions_<<finl;
37 return os;
38}
39
40void Chimie::set_param(Param& param) const
41{
42 param.ajouter("reactions",&reactions_,Param::REQUIRED); // XD attr reactions reactions reactions REQ list of reactions
43 param.ajouter("modele_micro_melange",&modele_micro_melange_); // XD attr modele_micro_melange entier modele_micro_melange OPT modele_micro_melange (0 by default)
44 param.ajouter("constante_modele_micro_melange",&constante_modele_micro_melange_); // XD attr constante_modele_micro_melange floattant constante_modele_micro_melange OPT constante of modele (1 by default)
45 param.ajouter("espece_en_competition_micro_melange",&espece_en_competition_micro_melange_); // XD attr espece_en_competition_micro_melange chaine espece_en_competition_micro_melange OPT espece in competition in reactions
46}
47
49{
50 double dt=1e30;
51 double dt_reaction;
52 for (int i=0; i<reactions_.size(); i++) // boucle sur l'ensemble des reactions
53 {
54 dt_reaction=reactions_[i].calculer_pas_de_temps();
55 if(i==0) Cout<<"Pour le(s) reaction(s), dt_max = ";
56 Cout<<dt_reaction<<" ";
57 if (i==(reactions_.size()-1)) Cout<<finl;
58 dt=std::min(dt,dt_reaction);
59 }
60 // double dt_n=pb_->schema_temps().pas_de_temps();
61 // filtre Butterworth :
62 // alpha=1 -> pas de filtre
63 // alpha.0 -> tres filtre
64 // double alpha_Butterworth=1.;
65 // return (dt_n*(1.-alpha_Butterworth)+alpha_Butterworth*dt);
66 return dt;
67}
68
69
70
72{
73 // si pas de reaction on ne fait rien
74 if (reactions_.size()==0)
75 return;
76 pb_=pb;
77 // 1) determination du nombre de FM
78 int nb_fm=0;
79 int nb_grains=0;
80 int nb_concentration=0;
81 // Motcles alias;
82 ArrOfDouble masses_molaires;
83 for (int n=0; n<pb.nombre_d_equations(); n ++)
84 {
85
87 nb_concentration++;
88
89 }
90
91 // 2 stockage des alias et des masses molaires
92 masses_molaires.resize_array(nb_grains+nb_fm+nb_concentration);
93 alias.dimensionner(nb_grains+nb_fm+nb_concentration);
94 nb_grains_=nb_grains;
95 int nb=0;
96 for (int n=0; n<pb.nombre_d_equations(); n ++)
97 {
99 {
101 masses_molaires[nb]=eq.masse_molaire();
102 alias[nb]=eq.inconnue().le_nom();
104 inco = eq.inconnue();
105 liste_C_.add(inco);
106 nb++;
107 }
108 }
109 assert(liste_ai_.size()==nb_grains_);
110 // verification de l'unicite des alias
112 {
113 LIST(Nom) test;
114 for (int n=0; n<alias.size(); n++)
115 {
116 int deja=test.contient(alias[n]);
117 if (!deja)
118 test.add(alias[n]);
119 else
120 {
121 Cerr<<alias[n] <<" defini plusieurs fois !!!!!"<<finl;
122 //Cerr<<test<< " "<<alias<<finl;
123 exit();
124 }
126 {
129 }
130 }
131 assert(test.size()==nb_fm+nb_grains_+nb_concentration);
132 }
134 {
136 {
137 Cerr<<" espece_en_competition_micro_melange non trouve: "<< espece_en_competition_micro_melange_<<finl;
138 exit();
139 }
140 else
141 Cerr<<" marqueur_espece_en_competition_micro_melange "<<marqueur_espece_en_competition_micro_melange_<<finl;
142 }
143 if(min_array(masses_molaires)<0)
144 {
145 Cerr<< "pb avec les masses_molaires "<<masses_molaires<<finl;
146 exit();
147 }
148 if (liste_Y_.size()>0)
149 {
150 Puissance_volumique_=(liste_Y_[0]->valeurs()); // dimensionnement du tableau...
152 }
153 else
154 {
155 assert(liste_C_.size()!=0);
156 }
157 //alias_=alias;
158 for (int i=0; i<reactions_.size(); i++)
159 {
160 reactions_[i].completer(alias,masses_molaires);
161 }
162}
163
165{
166 for (int i=0; i<reactions_.size(); i++)
167 {
168 Nom test("omega_");
169 test+=Nom(i);
170 reactions_[i].discretiser_omega(pb,test);
171 }
172}
173
175{
176 return 1;
177}
178
179
180
181void Chimie::mettre_a_jour(double temps)
182{
183 if (reactions_.size()==0) // pas de reaction
184 return;
185
186 double dt=pb_->schema_temps().pas_de_temps();
187
188 if (liste_C_.size())
189 {
190 // On suppose qu'il n'y a pas de temperature pour l'instant...
191 int old=0;
192 int nbr=reactions_.size();
193 if (old)
194 {
195 for (int i=0; i<nbr; i++)
196 {
197 Reaction& reaction=reactions_[i];
198 int nb_sous_pas_de_temps_reaction=reaction.nb_sous_pas_de_temps_reaction();
199
200 const double dt_chimie=dt/nb_sous_pas_de_temps_reaction;
201 for (int n=0; n<nb_sous_pas_de_temps_reaction; n++)
202 reaction.reagir(liste_C_,dt_chimie);
203 }
204
205 for (int i=0; i<liste_C_.size(); i++)
206 liste_C_[i]->valeurs().echange_espace_virtuel();
207 return;
208 }
209 const int vef = (int)pb_->discretisation().is_vef();
210 Domaine_VF& zvf = ref_cast(Domaine_VF,liste_C_[0]->equation().domaine_dis());
211
212 const IntTab& face_voisins = zvf.face_voisins();
213 const ArrOfDouble& volume=zvf.volumes();
214 int newd=1;
215 if (newd)
216 {
217 int nbrtot=0;
218 ArrOfInt marq_contre(2*nbr);
219 for (int i=0; i<nbr; i++)
220 {
221 Reaction& reaction=reactions_[i];
222 marq_contre[nbrtot++]=i+1;
223 if (reaction.contre_reaction_>0)
224 marq_contre[nbrtot++]=-(i+1);
225
226 if ((reaction.beta_!=0)||(reaction.Ea_!=0)||((reaction.c_r_Ea_!=0)&&(reaction.contre_reaction_>0)))
227 {
228 Cerr<<"Reaction : Donnees incompatibles avec le fait que l on n a pas de temperature"<<finl;
229 Cerr<<reaction<<finl;
230 exit();
231 }
232 }
233 marq_contre.resize_array(nbrtot);
234
235 int nbc=liste_C_.size();
236
237 F77NAME(INITTAILLECOMMON)(&nbrtot,&nbc);
238 ArrOfDouble pstochio(nbc);
239 ArrOfInt pactivite(nbc);
241 for (int i=0; i<nbrtot; i++)
242 {
243 int ir=marq_contre[i];
244 int ir2=ir;
245 if (ir<0) ir2=-ir2;
246 ir2-=1;
247 Reaction& reaction=reactions_[ir2];
248 pstochio=reaction.coeff_stoechio_;
249 pactivite=0;
250
251 double cw=reaction.constante_taux_reaction_;
252 if (ir<0)
253 {
254 pstochio*=-1;
255 assert(reaction.contre_reaction_>0);
256 cw/=reaction.contre_reaction_;
257 }
258 for (int ic=0; ic<nbc; ic++)
259 {
260 if (pstochio[ic]>0)
261 pactivite[ic]=(int)reaction.coeff_activite_[ic];
262 }
263 int ii=i+1;
264 int avec_contre_reaction=(reaction.contre_reaction_>0);
265 F77NAME(INITREACTIONCOMMON)(&(ii), pstochio.addr(), pactivite.addr(),&avec_contre_reaction) ;
266 F77NAME(SETCWREACTION)(&(ii), &cw);
267
268 }
269 // F77NAME(PRINT_COMMON)();
270 // abort();
271 int mf=21;
272 int lrw;
273 int liw;
274 if (mf==21)
275 {
276 liw=20+nbc;
277 lrw=22+9*nbc+nbc*nbc;
278 }
279 else
280 throw;
281 assert(mf==21);
282
283
284 ArrOfDouble rwork(lrw);
285 ArrOfInt iwork(liw);
286
287
288 DoubleTab tau_mel;
290 {
291
292 const DoubleTab& visc_turb=liste_C_[0]->equation().probleme().get_champ("viscosite_turbulente").valeurs();
293 tau_mel=visc_turb;
294 const DoubleTab& D_moleculaire = ref_cast(Convection_Diffusion_Concentration,liste_C_[0]->equation()).constituant().diffusivite_constituant().valeurs();
295 double D_mol=0.;
296 if (D_moleculaire.dimension(0) == 1)
297 D_mol = D_moleculaire(0, 0);
298 else
299 {
300 Cerr << "D_mol pas code pour champ non uniforme" << finl;
301 exit();
302 }
303 double invsct=1./0.9;
304 for (int element=0; element<visc_turb.dimension(0); element++)
305 {
306 double delta=exp(log(volume[element])/double(dimension));
307 // Cerr<<" iii "<<delta<<" "<<D_mol<<finl;
308 tau_mel(element)=constante_modele_micro_melange_*delta*delta/(D_mol+visc_turb(element)*invsct);
309 }
310 tau_mel.echange_espace_virtuel();
311 }
312 int nb_elem=liste_C_[0]->valeurs().size();
313 ArrOfDouble C(nbc);
314
315 for (int elem=0; elem<nb_elem; elem++)
316 {
317
318 double tau_melange=-1;
320 {
321 if (vef==0)
322 tau_melange=tau_mel(elem);
323 else
324 {
325 if (face_voisins(elem,1)!=-1)
326 tau_melange = 0.5*(tau_mel(face_voisins(elem,0))+tau_mel(face_voisins(elem,1)));
327 else
328 tau_melange = (tau_mel(face_voisins(elem,0)));
329 }
330 }
331 // tau_melange <0 pas pris en compte
332 // recuperation des valeurs initiales
333 for (int i=0; i<nbc; i++)
334 {
335 C[i]=liste_C_[i]->valeurs()(elem);
336
337 }
338 for (int i=0; i<nbc; i++)
339 {
340 if (C[i]<0)
341 {
342 if (C[i]<-1e-5)
343 {
344 Cerr<<" on rabote C_"<<i<<" dans la maille "<<elem<<" dans la chimie !!!!!! "<<C[i]<<finl;
345 exit();
346 }
347 C[i]=0;
348 }
349 }
350 int init=1;
351 if (init)
352 {
353
354 }
355 double t=0,tout=dt;
356 int itol=1;
357 double rtol=0;
358 double atol=1e-10;
359 F77NAME(DLSODECHIMIES)(&nbc, C.addr(),&t, &tout,&tau_melange, &itol, &rtol, &atol, rwork.addr(), &lrw, iwork.addr(), &liw);
360 // mise a jour des inconnues
361 for (int i=0; i<liste_C_.size(); i++)
362 liste_C_[i]->valeurs()(elem)=C[i];
363 }
364 for (int i=0; i<liste_C_.size(); i++)
365 liste_C_[i]->valeurs().echange_espace_virtuel();
366 return;
367 }
368 // on calcule le nb_sous_pas_temps_max
369 int nb_sous_pas_de_temps_reaction_max=1;
370 int nbr_directe=0;
371
372 ArrOfInt marq_directe(nbr);
373 for (int i=0; i<nbr; i++)
374 {
375 Reaction& reaction=reactions_[i];
376 int nb_sous_pas_de_temps_reaction=reaction.nb_sous_pas_de_temps_reaction();
377 if (nb_sous_pas_de_temps_reaction>nb_sous_pas_de_temps_reaction_max)
378 nb_sous_pas_de_temps_reaction_max=nb_sous_pas_de_temps_reaction;
379 if (reaction.contre_reaction_<=0)
380 marq_directe[nbr_directe++]=i;
381
382 if ((reaction.beta_!=0)||(reaction.Ea_!=0)||((reaction.c_r_Ea_!=0)&&(reaction.contre_reaction_>0)))
383 {
384 Cerr<<"Reaction : Donnees incompatibles avec le fait que l on n a pas de temperature"<<finl;
385 Cerr<<reaction<<finl;
386 exit();
387 }
388 }
389 const double dt_chimie=dt/nb_sous_pas_de_temps_reaction_max;
390
391 int nbc=liste_C_.size();
392
393
394 // double R_gaz_parfait=8.3143;
395
396 ArrOfDouble C(nbc),C_tmp(nbc), proportion_eq(nbr_directe);
397
398 int nb_elem=liste_C_[0]->valeurs().size();
399 for (int elem=0; elem<nb_elem; elem++)
400 {
401
402
403 // recuperation des valeurs initiales
404 for (int i=0; i<nbc; i++)
405 {
406 C[i]=liste_C_[i]->valeurs()(elem);
407 }
408 for (int n=0; n<nb_sous_pas_de_temps_reaction_max; n++)
409 {
410 // rabotage eventuel
411 for (int i=0; i<nbc; i++)
412 if (C[i]<0)
413 {
414 if (C[i]<-1e-5)
415 {
416 Cerr<<" on rabote C_"<<i<<" dans la maille "<<elem<<" dans la chimie !!!!!! "<<C[i]<<finl;
417 exit();
418 }
419 C[i]=0;
420 }
421 // calcul des proportions initiales des reactions non equilibre
422
423 for (int i=0; i<nbr_directe; i++)
424 {
425 Reaction& reaction=reactions_[marq_directe[i]];
426 assert(reaction.contre_reaction_<=0);
427
428 double proportion_directe;
429 reaction.calcul_proportion_implicite(C_tmp,C,dt_chimie,1e-7,proportion_directe);
430 if (0)
431 {
432 double proportion_directe2;
433 reaction.calcul_proportion_implicite(C_tmp,C,dt_chimie,1e9,proportion_directe2);
434 if (proportion_directe==proportion_directe2)
435
436 {
437 exit();
438 }
439 }
440 // on utilise proportion_directe pour ne pas avoir la limitation par la securite
441 proportion_eq[i]=proportion_directe;
442
443
444 }
445 // pour chaque consitutant on regarde si il faut limiter ....
446 double securite=1-1e-6;
447 for (int c=0; c<nbc; c++)
448 {
449 double St=0;
450 for (int i=0; i<nbr_directe; i++)
451 {
452 Reaction& reaction=reactions_[marq_directe[i]];
453 assert(reaction.contre_reaction_<=0);
454 if (reaction.coeff_Y_[c]>0.)
455 St+=proportion_eq[i]*reaction.coeff_stoechio_[c];
456 }
457
458 double rapport=St/(securite);
459 // Cerr<< c<<" ici0b "<< rapport <<" st "<<St<<" "<<C(c)<<finl;
460
461 if (rapport>C[c])
462 {
463 // on risque de trop consommer .... on limite.
464 Cerr<< c<<" limite ici0 "<< rapport <<" st "<<St<<" "<<C[c]<<" "<<C[c]/rapport<<finl;
465 // exit();
466 for (int i=0; i<nbr_directe; i++)
467 {
468 Reaction& reaction=reactions_[marq_directe[i]];
469 assert(reaction.contre_reaction_<=0);
470
471 if (reaction.coeff_Y_[c]>0.)
472 proportion_eq[i]*=C[c]/rapport;
473
474 }
475 }
476 }
477 // on fait reagir les reactions directes C(c)-=St;
478 for (int c=0; c<nbc; c++)
479 {
480 double St=0;
481 for (int i=0; i<nbr_directe; i++)
482 {
483 Reaction& reaction=reactions_[marq_directe[i]];
484 assert(reaction.contre_reaction_<=0);
485 if (reaction.coeff_Y_[c]!=0.)
486 St+=proportion_eq[i]*reaction.coeff_stoechio_[c];
487 }
488
489 // Cerr<<C(c)<<" "<< c<< " la st "<<St<<" ";
490 //assert(St<=(C(c)*securite));
491 C[c]-=St;
492 assert(C[c]>=0);
493 // Cerr<< C(c)<<finl;
494
495 }
496 // on taite maintenant les reactions equilibrees les unes apres les autres
497
498 securite=0.5;
499 for (int reac=0; reac<nbr; reac++)
500 {
501 Reaction& reaction=reactions_[reac];
502
503 if (reaction.contre_reaction_>0)
504 {
505 double proportion_directe;
506 double proportion=reaction.calcul_proportion_implicite(C_tmp, C,dt_chimie,1e-7,proportion_directe);
507 for (int i=0; i<nbc; i++)
508 if (reaction.coeff_Y_[i]!=0.) // c'est un reactif ou un produit
509 {
510 C[i]=C[i]-proportion*reaction.coeff_stoechio_[i];
511 }
512 }
513 }
514 }
515 // reaction.reagir(liste_C_,dt_chimie);
516 for (int i=0; i<liste_C_.size(); i++)
517 liste_C_[i]->valeurs()(elem)=C[i];
518
519 }
520
521 for (int i=0; i<liste_C_.size(); i++)
522 liste_C_[i]->valeurs().echange_espace_virtuel();
523
524 return;
525 }
526 Cerr<<"Chimie dispo qu'avec des concentrations"<<finl;
527 exit();
528
529}
530
531bool Chimie::has_champ(const Motcle& nom, OBS_PTR(Champ_base)& ref_champ) const
532{
533 for (int i = 0; i < reactions_.size(); i++)
534 {
535 Nom test("omega_");
536 test += Nom(i);
537 if (nom == test)
538 {
539 ref_champ = reactions_[i].get_omega();
540 return true;
541 }
542 }
543
544 return false; /* rien trouve */
545}
546
547bool Chimie::has_champ(const Motcle& nom) const
548{
549 for (int i = 0; i < reactions_.size(); i++)
550 {
551 Nom test("omega_");
552 test += Nom(i);
553 if (nom == test)
554 return true;
555 }
556
557 return false; /* rien trouve */
558}
559
560const Champ_base& Chimie::get_champ(const Motcle& nom) const
561{
562 for (int i = 0; i < reactions_.size(); i++)
563 {
564 Nom test("omega_");
565 test += Nom(i);
566 if (nom == test)
567 return reactions_[i].get_omega();
568 }
569
570 throw std::runtime_error(std::string("Field ") + nom.getString() + std::string(" not found !"));
571}
572
574{
575 if (opt==DESCRIPTION)
576 Cerr<<" Chimie :";
577 int nb_reac=reactions_.size();
578 for (int i=0; i<nb_reac; i++)
579 {
580 Nom test("omega_");
581 test+=Nom(i);
582 if (opt==DESCRIPTION)
583 Cerr<< test;
584 else
585 nom.add(test);
586 }
587 if (opt==DESCRIPTION)
588 Cerr<<finl;
589}
590
592{
593 return 1;
594}
595
597{
598 return 1;
599}
600
Classe Champ_Inc_base.
classe Champ_base Cette classe est la base de la hierarchie des champs.
Definition Champ_base.h:43
int sauvegarder(Sortie &) const override
Sauvegarde d'un Objet_U sur un flot de sortie Methode a surcharger.
Definition Chimie.cpp:591
Motcle espece_en_competition_micro_melange_
Definition Chimie.h:58
void discretiser(const Probleme_base &)
Definition Chimie.cpp:164
liste_ai_
Definition Chimie.h:53
int reprendre(Entree &) override
Reprise d'un Objet_U sur un flot d'entree Methode a surcharger.
Definition Chimie.cpp:596
virtual bool has_champ(const Motcle &nom, OBS_PTR(Champ_base) &ref_champ) const
virtual int preparer_calcul()
Definition Chimie.cpp:174
int modele_micro_melange_
Definition Chimie.h:56
virtual const Champ_base & get_champ(const Motcle &nom) const
Definition Chimie.cpp:560
double calculer_pas_de_temps() const
Definition Chimie.cpp:48
void mettre_a_jour(double temps)
Definition Chimie.cpp:181
virtual void completer(const Probleme_base &pb)
Definition Chimie.cpp:71
int marqueur_espece_en_competition_micro_melange_
Definition Chimie.h:59
OBS_PTR(Probleme_base) pb_
LIST(Reaction) reactions_
Motcles alias
Definition Chimie.h:52
liste_C_
Definition Chimie.h:53
DoubleTab Puissance_volumique_
Definition Chimie.h:55
int nb_grains_
Definition Chimie.h:54
double constante_modele_micro_melange_
Definition Chimie.h:57
virtual void get_noms_champs_postraitables(Noms &nom, Option opt=NONE) const
Definition Chimie.cpp:573
classe Convection_Diffusion_Concentration Cas particulier de Convection_Diffusion_std
const Champ_Inc_base & inconnue() const override
Renvoie le champ inconnue de l'equation: la concentration.
class Domaine_VF
Definition Domaine_VF.h:44
double volumes(int i) const
Definition Domaine_VF.h:113
int face_voisins(int num_face, int i) const
renvoie l'element voisin de numface dans la direction i.
Definition Domaine_VF.h:418
const Nom & le_nom() const override
Renvoie le nom du champ.
Une chaine de caractere (Nom) en majuscules.
Definition Motcle.h:26
class Nom Une chaine de caractere pour nommer les objets de TRUST
Definition Nom.h:31
const std::string & getString() const
Definition Nom.h:92
Un tableau de chaine de caracteres (VECT(Nom)).
Definition Noms.h:26
Inherits from Objet_U, adds the very common method set_param for the Objet_U hierarchy.
virtual void set_param(Param &) const
Definition Objet_U.h:135
friend class Entree
Definition Objet_U.h:76
static int dimension
Definition Objet_U.h:99
friend class Sortie
Definition Objet_U.h:75
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
Definition Objet_U.cpp:282
Helper class to factorize the readOn method of Objet_U classes.
Definition Param.h:112
void ajouter(const char *keyword, const int *value, Param::Nature nat=Param::OPTIONAL)
Register an integer parameter.
Definition Param.cpp:364
@ REQUIRED
Definition Param.h:115
classe Probleme_base C'est un Probleme_U qui n'est pas un couplage.
virtual int nombre_d_equations() const =0
virtual const Equation_base & equation(int) const =0
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Definition Process.cpp:455
ArrOfDouble coeff_Y_
Definition Reaction.h:66
double contre_reaction_
Definition Reaction.h:61
double Ea_
Definition Reaction.h:64
ArrOfDouble coeff_activite_
Definition Reaction.h:67
double c_r_Ea_
Definition Reaction.h:62
double constante_taux_reaction_
Definition Reaction.h:59
double beta_
Definition Reaction.h:65
const int & nb_sous_pas_de_temps_reaction() const
Definition Reaction.h:48
void reagir(VECT(OBS_PTR(Champ_Inc_base))&liste_c, const double deltat) const
Definition Reaction.cpp:182
ArrOfDouble coeff_stoechio_
Definition Reaction.h:66
double calcul_proportion_implicite(ArrOfDouble &C_temp, const ArrOfDouble &C0, double deltat, double seuil, double &poroportion_directe) const
Definition Reaction.cpp:240
Classe de base des flux de sortie.
Definition Sortie.h:52
_TYPE_ * addr()
void resize_array(_SIZE_ new_size, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
_SIZE_ dimension(int d) const
Definition TRUSTTab.tpp:133
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")