16#include <Source_Neutronique.h>
17#include <Probleme_base.h>
18#include <Milieu_base.h>
19#include <Champ_Uniforme.h>
20#include <Equation_base.h>
21#include <Schema_Temps_base.h>
37 EChaine ec(
"Champ_Uniforme 1 1");
43 param.lire_avec_accolades_depuis(is);
54 param.
ajouter(
"dt_impr",&dt_impr);
69 Cerr <<
"Il faut rentrer le nb de groupes N avant lambda dans " <<
que_suis_je() << finl;
73 for (
int i=0; i<N; i++) is>>lambda(i);
79 Cerr <<
"Il faut rentrer le nb de groupes N avant beta dans " <<
que_suis_je() << finl;
85 for (
int i=0; i<N; i++)
91 else if (mot==
"schema_temps")
95 if (nom_sch ==
"euler_explicite")
99 else if (nom_sch ==
"runge_kutta")
105 Cerr <<
"On ne comprend le mot : " << mot <<
"dans " <<
que_suis_je() << finl;
113 Cerr <<
"Lecture de la reactivite " << tmp << finl;
115 fct_tT.setString(tmp);
118 fct_tT.parseString();
120 else if (mot==
"repartition")
129 Cerr <<
"Il faut rentrer le nb de groupes N avant les Ci initiaux dans " <<
que_suis_je() << finl;
134 for (
int i=0; i<N; i++)
146 fct_tT.setVar(
"t",t);
147 fct_tT.setVar(
"T",T);
148 return fct_tT.eval();
177 matA.resize(N+1,N+1);
179 for (
int i=1; i<N+1; i++)
181 matA(0,i) = lambda(i-1);
182 matA(i,i) = -lambda(i-1);
183 matA(i,0) = beta(i-1)/Tvie;
187 for (
int i=1; i<N+1; i++)
188 Un(i) = beta(i-1)*Un(0)/Tvie/lambda(i-1);
190 for (
int i=1; i<N+1; i++)
197void Source_Neutronique::mul(DoubleTab& m, DoubleVect& v, DoubleVect& resu)
200 resu(0) = m(0,0)*v(0);
201 for (
int i=1; i<N+1; i++)
203 resu(0)+= m(0,i)*v(i);
204 resu(i) = m(i,0)*v(0) + m(i,i)*v(i);
214 static const double a1 = 1./6.;
215 static const double a2 = 1./3.;
221 const double dt2 = dt/2.;
226 Unp1.ajoute(dt2, fn1);
229 mettre_a_jour_matA(temps_courant+dt2);
233 Unp1.ajoute(dt2, fn2);
238 Unp1.ajoute(dt, fn3);
241 mettre_a_jour_matA(temps_courant+dt);
244 Unp1.ajoute(a1*dt, fn4);
245 Unp1.ajoute(a2*dt, fn3);
246 Unp1.ajoute(a2*dt, fn2);
247 Unp1.ajoute(a1*dt, fn1);
254void Source_Neutronique::mettre_a_jour_matA(
double temps)
256 matA(0,0) = beta_som/Tvie*(
rho(temps,Tmoy)-1);
280 while (temps_courant<temps)
282 const double dt_stab = 0.8*Tvie/beta_som*std::max(std::fabs(
rho(temps_courant,Tmoy)-1),1.);
283 dt = std::min(dt_stab, temps-temps_courant);
284 (this->*faire_un_pas_de_temps)();
287 mettre_a_jour_matA(temps_courant);
299 SFichier fic(
"puissances.dat",ios::app);
301 for (
int i =0; i<N+1; i++)
315 static const double epsilon = 1.e-9;
326 modf(le_temps_courant/dt_impr + epsilon, &i);
327 modf((le_temps_courant-ddt)/dt_impr + epsilon, &j);
338 temps_courant = temps;
339 mettre_a_jour_matA(temps);
346 temps_courant = temps;
Class defining operators and methods for all reading operation in an input flow (file,...
Une chaine de caractere (Nom) en majuscules.
class Nom Une chaine de caractere pour nommer les 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.
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.
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Cette classe est a la classe C++ ofstream ce que la classe Sortie est a la classe C++ ostream Elle re...
int nb_pas_dt_max_atteint() const
Renvoie 1 si (le nombre de pas de temps >= nombre de pas de temps maximum).
int temps_final_atteint() const
Renvoie 1 si le temps final est atteint (ou depasse).
int nb_pas_dt() const
Renvoie le nombre de pas de temps effectues.
int stationnaire_atteint() const
Classe de base des flux de sortie.
void completer() override
Met a jour les references internes a l'objet Source_base.
void aller_au_temps(double)
void faire_un_pas_de_temps_RK()
const Nom & nom_ssz() const
void faire_un_pas_de_temps_EE()
int lire_motcle_non_standard(const Motcle &, Entree &) override
Lecture des parametres de type non simple d'un objet_U a partir d'un flot d'entree.
virtual double calculer_Tmoyenne()=0
virtual int limpr(double, double) const
void mettre_a_jour(double temps) override
DOES NOTHING - to override in derived classes.
virtual void imprimer(double) const
const Nom & repartition() const
void set_param(Param ¶m) const override
double rho(double, double)
classe Source_base Un objet Source_base est un terme apparaissant au second membre d'une
virtual void completer()
Met a jour les references internes a l'objet Source_base.