183 if (reactions_.size()==0)
186 double dt=pb_->schema_temps().pas_de_temps();
192 int nbr=reactions_.size();
195 for (
int i=0; i<nbr; i++)
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++)
205 for (
int i=0; i<
liste_C_.size(); i++)
206 liste_C_[i]->valeurs().echange_espace_virtuel();
209 const int vef = (int)pb_->discretisation().is_vef();
213 const ArrOfDouble& volume=zvf.
volumes();
218 ArrOfInt marq_contre(2*nbr);
219 for (
int i=0; i<nbr; i++)
222 marq_contre[nbrtot++]=i+1;
224 marq_contre[nbrtot++]=-(i+1);
228 Cerr<<
"Reaction : Donnees incompatibles avec le fait que l on n a pas de temperature"<<finl;
229 Cerr<<reaction<<finl;
237 F77NAME(INITTAILLECOMMON)(&nbrtot,&nbc);
238 ArrOfDouble pstochio(nbc);
239 ArrOfInt pactivite(nbc);
241 for (
int i=0; i<nbrtot; i++)
243 int ir=marq_contre[i];
258 for (
int ic=0; ic<nbc; ic++)
265 F77NAME(INITREACTIONCOMMON)(&(ii), pstochio.
addr(), pactivite.
addr(),&avec_contre_reaction) ;
266 F77NAME(SETCWREACTION)(&(ii), &cw);
277 lrw=22+9*nbc+nbc*nbc;
284 ArrOfDouble rwork(lrw);
292 const DoubleTab& visc_turb=
liste_C_[0]->equation().probleme().get_champ(
"viscosite_turbulente").valeurs();
297 D_mol = D_moleculaire(0, 0);
300 Cerr <<
"D_mol pas code pour champ non uniforme" << finl;
303 double invsct=1./0.9;
304 for (
int element=0; element<visc_turb.
dimension(0); element++)
306 double delta=exp(log(volume[element])/
double(
dimension));
312 int nb_elem=
liste_C_[0]->valeurs().size();
315 for (
int elem=0; elem<nb_elem; elem++)
318 double tau_melange=-1;
322 tau_melange=tau_mel(elem);
325 if (face_voisins(elem,1)!=-1)
326 tau_melange = 0.5*(tau_mel(face_voisins(elem,0))+tau_mel(face_voisins(elem,1)));
328 tau_melange = (tau_mel(face_voisins(elem,0)));
333 for (
int i=0; i<nbc; i++)
338 for (
int i=0; i<nbc; i++)
344 Cerr<<
" on rabote C_"<<i<<
" dans la maille "<<elem<<
" dans la chimie !!!!!! "<<C[i]<<finl;
359 F77NAME(DLSODECHIMIES)(&nbc, C.
addr(),&t, &tout,&tau_melange, &itol, &rtol, &atol, rwork.
addr(), &lrw, iwork.
addr(), &liw);
361 for (
int i=0; i<
liste_C_.size(); i++)
364 for (
int i=0; i<
liste_C_.size(); i++)
365 liste_C_[i]->valeurs().echange_espace_virtuel();
369 int nb_sous_pas_de_temps_reaction_max=1;
372 ArrOfInt marq_directe(nbr);
373 for (
int i=0; i<nbr; i++)
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;
380 marq_directe[nbr_directe++]=i;
384 Cerr<<
"Reaction : Donnees incompatibles avec le fait que l on n a pas de temperature"<<finl;
385 Cerr<<reaction<<finl;
389 const double dt_chimie=dt/nb_sous_pas_de_temps_reaction_max;
396 ArrOfDouble C(nbc),C_tmp(nbc), proportion_eq(nbr_directe);
398 int nb_elem=
liste_C_[0]->valeurs().size();
399 for (
int elem=0; elem<nb_elem; elem++)
404 for (
int i=0; i<nbc; i++)
408 for (
int n=0; n<nb_sous_pas_de_temps_reaction_max; n++)
411 for (
int i=0; i<nbc; i++)
416 Cerr<<
" on rabote C_"<<i<<
" dans la maille "<<elem<<
" dans la chimie !!!!!! "<<C[i]<<finl;
423 for (
int i=0; i<nbr_directe; i++)
425 Reaction& reaction=reactions_[marq_directe[i]];
428 double proportion_directe;
432 double proportion_directe2;
434 if (proportion_directe==proportion_directe2)
441 proportion_eq[i]=proportion_directe;
446 double securite=1-1e-6;
447 for (
int c=0; c<nbc; c++)
450 for (
int i=0; i<nbr_directe; i++)
452 Reaction& reaction=reactions_[marq_directe[i]];
458 double rapport=St/(securite);
464 Cerr<< c<<
" limite ici0 "<< rapport <<
" st "<<St<<
" "<<C[c]<<
" "<<C[c]/rapport<<finl;
466 for (
int i=0; i<nbr_directe; i++)
468 Reaction& reaction=reactions_[marq_directe[i]];
472 proportion_eq[i]*=C[c]/rapport;
478 for (
int c=0; c<nbc; c++)
481 for (
int i=0; i<nbr_directe; i++)
483 Reaction& reaction=reactions_[marq_directe[i]];
499 for (
int reac=0; reac<nbr; reac++)
501 Reaction& reaction=reactions_[reac];
505 double proportion_directe;
507 for (
int i=0; i<nbc; i++)
516 for (
int i=0; i<
liste_C_.size(); i++)
521 for (
int i=0; i<
liste_C_.size(); i++)
522 liste_C_[i]->valeurs().echange_espace_virtuel();
526 Cerr<<
"Chimie dispo qu'avec des concentrations"<<finl;
int face_voisins(int num_face, int i) const
renvoie l'element voisin de numface dans la direction i.