V 7.046 : ajouts, corrctions et modifications : prise en compte des types MPI_Offset

This commit is contained in:
Gérard Rio 2024-12-19 11:26:11 +01:00
parent e9f8348952
commit 944e1ec548
27 changed files with 110 additions and 66 deletions

View file

@ -1277,7 +1277,7 @@ void Algori::InfoIncrementReac(LesMaillages * lesMail,
// brestart : booleen qui indique si l'on est en restart ou pas // brestart : booleen qui indique si l'on est en restart ou pas
void Algori::CalEnergieAffichage(const double& coef_mass,const Vecteur & V,const Mat_abstraite& mat_mass void Algori::CalEnergieAffichage(const double& coef_mass,const Vecteur & V,const Mat_abstraite& mat_mass
,const Vecteur & delta_X,int icharge,bool brestart,const Vecteur & gamma ,const Vecteur & delta_X,int icharge,bool brestart,const Vecteur & gamma
,const Vecteur & forces_vis_num) ,const Vecteur & forces_vis_num,int aff_iteration)
{ {
#ifdef UTILISATION_MPI #ifdef UTILISATION_MPI
// cas d'un calcul //, le CPU 0 calcule // cas d'un calcul //, le CPU 0 calcule
@ -1343,7 +1343,8 @@ void Algori::CalEnergieAffichage(const double& coef_mass,const Vecteur & V,cons
}; };
// --- affichage ---- // --- affichage ----
if (( pa.Vrai_commande_sortie(icharge,temps_derniere_sauvegarde)) if (( pa.Vrai_commande_sortie(icharge,temps_derniere_sauvegarde))
&&(pa.AfficheIncrEnergie())) &&(pa.AfficheIncrEnergie())
&& aff_iteration)
{// cas des énergies {// cas des énergies
cout << "\n energies: cin= "<< std::fixed << std::setprecision(nbcar)<< E_cin_tdt cout << "\n energies: cin= "<< std::fixed << std::setprecision(nbcar)<< E_cin_tdt
<<" int= " << std::fixed << std::setprecision(nbcar)<< E_int_tdt <<" int= " << std::fixed << std::setprecision(nbcar)<< E_int_tdt
@ -1412,7 +1413,8 @@ void Algori::CalEnergieAffichage(const double& coef_mass,const Vecteur & V,cons
// affichage éventuelle des ces énergies et du bilan // affichage éventuelle des ces énergies et du bilan
// icharge : compteur d'increment // icharge : compteur d'increment
// brestart : booleen qui indique si l'on est en restart ou pas // brestart : booleen qui indique si l'on est en restart ou pas
void Algori::CalEnergieAffichage(const Vecteur & delta_X,int icharge,bool brestart,const Vecteur & forces_vis_num) void Algori::CalEnergieAffichage(const Vecteur & delta_X,int icharge,bool brestart,const Vecteur & forces_vis_num
,int aff_iteration)
{ {
#ifdef UTILISATION_MPI #ifdef UTILISATION_MPI
// cas d'un calcul //, le CPU 0 calcule // cas d'un calcul //, le CPU 0 calcule
@ -1475,7 +1477,8 @@ void Algori::CalEnergieAffichage(const Vecteur & delta_X,int icharge,bool bresta
// --- affichage ---- // --- affichage ----
if (( pa.Vrai_commande_sortie(icharge,temps_derniere_sauvegarde)) if (( pa.Vrai_commande_sortie(icharge,temps_derniere_sauvegarde))
&&(pa.AfficheIncrEnergie())) &&(pa.AfficheIncrEnergie())
&& aff_iteration)
{// cas des énergies {// cas des énergies
cout << "\n energies: int= " << std::fixed << std::setprecision(nbcar)<< E_int_tdt cout << "\n energies: int= " << std::fixed << std::setprecision(nbcar)<< E_int_tdt
<< " ext= " << std::fixed << std::setprecision(nbcar)<< E_ext_tdt << " ext= " << std::fixed << std::setprecision(nbcar)<< E_ext_tdt

View file

@ -1049,12 +1049,13 @@ class Algori
// gamma : vecteur accélération // gamma : vecteur accélération
void CalEnergieAffichage(const double& coef_mass,const Vecteur & V,const Mat_abstraite& mat_mass void CalEnergieAffichage(const double& coef_mass,const Vecteur & V,const Mat_abstraite& mat_mass
,const Vecteur & delta_ddl,int icharge,bool brestart,const Vecteur & gamma ,const Vecteur & delta_ddl,int icharge,bool brestart,const Vecteur & gamma
,const Vecteur & forces_vis_num); ,const Vecteur & forces_vis_num,int aff_iteration);
// idem pour un calcul statique, c'est-à-dire sans énergie cinématique et puissance d'accélération // idem pour un calcul statique, c'est-à-dire sans énergie cinématique et puissance d'accélération
// affichage éventuelle des ces énergies et du bilan // affichage éventuelle des ces énergies et du bilan
// icharge : compteur d'increment // icharge : compteur d'increment
// brestart : booleen qui indique si l'on est en restart ou pas // brestart : booleen qui indique si l'on est en restart ou pas
void CalEnergieAffichage(const Vecteur & delta_ddl,int icharge,bool brestart,const Vecteur & forces_vis_num); void CalEnergieAffichage(const Vecteur & delta_ddl,int icharge,bool brestart,const Vecteur & forces_vis_num
,int aff_iteration);
// affichage éventuelle de la matrice de raideur et du second membre // affichage éventuelle de la matrice de raideur et du second membre
void Affiche_RaidSM(const Vecteur & vglobin,const Mat_abstraite& matglob) const; void Affiche_RaidSM(const Vecteur & vglobin,const Mat_abstraite& matglob) const;

View file

@ -2697,7 +2697,7 @@ void Algori::Lecture_base_info(istream& ent,int cas)
ent >> nom1 >> temps_transfert_long_contact; ent >> nom1 >> temps_transfert_long_contact;
ent >> nom1 >> temps_attente_contact; ent >> nom1 >> temps_attente_contact;
#else #else
if (mono_proc_on_lit_un_BI_multiProc) if (mono_proc_on_lit_un_BI_multiProc) // passage des temps de transfert
{for (int i=0;i<13;i++) // 13 car au premier passage il y a la lecture de fin de ligne {for (int i=0;i<13;i++) // 13 car au premier passage il y a la lecture de fin de ligne
{nom1.clear(); {nom1.clear();
std::getline(ent, nom1); std::getline(ent, nom1);

View file

@ -1471,7 +1471,7 @@ void AlgoriRungeKutta::CalEquilibre(ParaGlob * paraGlob,LesMaillages * lesMail
// calcul des énergies et affichage des balances // calcul des énergies et affichage des balances
// delta_X.Zero(); delta_X += X_tdt; delta_X -= X_t; // X_tdt - X_t // delta_X.Zero(); delta_X += X_tdt; delta_X -= X_t; // X_tdt - X_t
Algori::Cal_Transfert_delta_et_var_X(max_delta_X,max_var_delta_X); Algori::Cal_Transfert_delta_et_var_X(max_delta_X,max_var_delta_X);
CalEnergieAffichage(1.,vitesse_tdt,*mat_masse_sauve,delta_X,icharge,brestart,acceleration_tdt,forces_vis_num); CalEnergieAffichage(1.,vitesse_tdt,*mat_masse_sauve,delta_X,icharge,brestart,acceleration_tdt,forces_vis_num,aff_incr);
if (icharge==1)// dans le cas du premier incrément on considère que la balance vaut l'énergie if (icharge==1)// dans le cas du premier incrément on considère que la balance vaut l'énergie
// cinétique initiale, car vu que l'on ne met pas de CL à t=0, E_cin_0 est difficile à calculer // cinétique initiale, car vu que l'on ne met pas de CL à t=0, E_cin_0 est difficile à calculer
{E_cin_0 = E_cin_tdt - bilan_E + E_int_tdt - E_ext_tdt; }; {E_cin_0 = E_cin_tdt - bilan_E + E_int_tdt - E_ext_tdt; };

View file

@ -873,7 +873,7 @@ void AlgoriDynaExpli::Calcul_Equilibre(ParaGlob * paraGlob,LesMaillages * lesMai
// calcul des énergies et affichage des balances // calcul des énergies et affichage des balances
// delta_X.Zero(); delta_X += X_tdt; delta_X -= X_t; // X_tdt - X_t // delta_X.Zero(); delta_X += X_tdt; delta_X -= X_t; // X_tdt - X_t
Algori::Cal_Transfert_delta_et_var_X(max_delta_X,max_var_delta_X); Algori::Cal_Transfert_delta_et_var_X(max_delta_X,max_var_delta_X);
CalEnergieAffichage(1.,vitesse_tdt,matrice_mas_sauve,delta_X,icharge,brestart,acceleration_tdt,forces_vis_num); CalEnergieAffichage(1.,vitesse_tdt,matrice_mas_sauve,delta_X,icharge,brestart,acceleration_tdt,forces_vis_num,aff_incr);
if (icharge==1)// dans le cas du premier incrément on considère que la balance vaut l'énergie if (icharge==1)// dans le cas du premier incrément on considère que la balance vaut l'énergie
// cinétique initiale, car vu que l'on ne met pas de CL à t=0, E_cin_0 est difficile à calculer // cinétique initiale, car vu que l'on ne met pas de CL à t=0, E_cin_0 est difficile à calculer
{E_cin_0 = E_cin_tdt - bilan_E + E_int_tdt - E_ext_tdt; }; {E_cin_0 = E_cin_tdt - bilan_E + E_int_tdt - E_ext_tdt; };

View file

@ -632,7 +632,7 @@ void AlgoriDynaExpli::Calcul_Equilibre2(ParaGlob * paraGlob,LesMaillages * lesMa
{// calcul des énergies et affichage des balances {// calcul des énergies et affichage des balances
// delta_X.Zero(); delta_X += X_tdt; delta_X -= X_t; // X_tdt - X_t // delta_X.Zero(); delta_X += X_tdt; delta_X -= X_t; // X_tdt - X_t
Algori::Cal_Transfert_delta_et_var_X(max_delta_X,max_var_delta_X); Algori::Cal_Transfert_delta_et_var_X(max_delta_X,max_var_delta_X);
CalEnergieAffichage(1.,vitesse_tdt,matrice_mas_sauve,delta_X,icharge,brestart,acceleration_tdt,forces_vis_num); CalEnergieAffichage(1.,vitesse_tdt,matrice_mas_sauve,delta_X,icharge,brestart,acceleration_tdt,forces_vis_num,aff_incr);
if (icharge==1)// dans le cas du premier incrément on considère que la balance vaut l'énergie if (icharge==1)// dans le cas du premier incrément on considère que la balance vaut l'énergie
// cinétique initiale, car vu que l'on ne met pas de CL à t=0, E_cin_0 est difficile à calculer // cinétique initiale, car vu que l'on ne met pas de CL à t=0, E_cin_0 est difficile à calculer
{E_cin_0 = E_cin_tdt - bilan_E + E_int_tdt - E_ext_tdt; }; {E_cin_0 = E_cin_tdt - bilan_E + E_int_tdt - E_ext_tdt; };
@ -1526,7 +1526,7 @@ void AlgoriDynaExpli::CalEquilibre(ParaGlob * paraGlob,LesMaillages * lesMail
//delta_X.Zero(); delta_X += X_tdt; delta_X -= X_t;// X_tdt - X_t //delta_X.Zero(); delta_X += X_tdt; delta_X -= X_t;// X_tdt - X_t
Algori::Cal_Transfert_delta_et_var_X(max_delta_X,max_var_delta_X); Algori::Cal_Transfert_delta_et_var_X(max_delta_X,max_var_delta_X);
CalEnergieAffichage(1.,vitesse_tdt,*mat_masse_sauve,delta_X CalEnergieAffichage(1.,vitesse_tdt,*mat_masse_sauve,delta_X
,icharge,brestart,acceleration_tdt,forces_vis_num); ,icharge,brestart,acceleration_tdt,forces_vis_num,aff_incr);
if (icharge==1)// dans le cas du premier incrément on considère que la balance vaut l'énergie if (icharge==1)// dans le cas du premier incrément on considère que la balance vaut l'énergie
// cinétique initiale, car vu que l'on ne met pas de CL à t=0, E_cin_0 est difficile à calculer // cinétique initiale, car vu que l'on ne met pas de CL à t=0, E_cin_0 est difficile à calculer
{E_cin_0 = E_cin_tdt - bilan_E + E_int_tdt - E_ext_tdt; }; {E_cin_0 = E_cin_tdt - bilan_E + E_int_tdt - E_ext_tdt; };

View file

@ -1010,7 +1010,7 @@ void AlgoriDynaExpli_zhai::CalEquilibre(ParaGlob * paraGlob,LesMaillages * lesMa
{ // calcul des énergies et affichage des balances { // calcul des énergies et affichage des balances
// delta_X.Zero(); delta_X += X_tdt; delta_X -= X_t; // X_tdt - X_t // delta_X.Zero(); delta_X += X_tdt; delta_X -= X_t; // X_tdt - X_t
Algori::Cal_Transfert_delta_et_var_X(max_delta_X,max_var_delta_X); Algori::Cal_Transfert_delta_et_var_X(max_delta_X,max_var_delta_X);
CalEnergieAffichage(1.,vitesse_tdt,*mat_masse_sauve,delta_X,icharge,brestart,acceleration_tdt,forces_vis_num); CalEnergieAffichage(1.,vitesse_tdt,*mat_masse_sauve,delta_X,icharge,brestart,acceleration_tdt,forces_vis_num,aff_incr);
if (icharge==1)// dans le cas du premier incrément on considère que la balance vaut l'énergie if (icharge==1)// dans le cas du premier incrément on considère que la balance vaut l'énergie
// cinétique initiale, car vu que l'on ne met pas de CL à t=0, E_cin_0 est difficile à calculer // cinétique initiale, car vu que l'on ne met pas de CL à t=0, E_cin_0 est difficile à calculer
{E_cin_0 = E_cin_tdt - bilan_E + E_int_tdt - E_ext_tdt; }; {E_cin_0 = E_cin_tdt - bilan_E + E_int_tdt - E_ext_tdt; };
@ -1628,7 +1628,7 @@ void AlgoriDynaExpli_zhai::Calcul_Equilibre(ParaGlob * paraGlob,LesMaillages * l
// calcul des énergies et affichage des balances // calcul des énergies et affichage des balances
// delta_X.Zero(); delta_X += X_tdt; delta_X -= X_t; // X_tdt - X_t // delta_X.Zero(); delta_X += X_tdt; delta_X -= X_t; // X_tdt - X_t
Algori::Cal_Transfert_delta_et_var_X(max_delta_X,max_var_delta_X); Algori::Cal_Transfert_delta_et_var_X(max_delta_X,max_var_delta_X);
CalEnergieAffichage(1.,vitesse_tdt,matrice_mas_sauve,delta_X,icharge,brestart,acceleration_tdt,forces_vis_num); CalEnergieAffichage(1.,vitesse_tdt,matrice_mas_sauve,delta_X,icharge,brestart,acceleration_tdt,forces_vis_num,aff_incr);
if (icharge==1)// dans le cas du premier incrément on considère que la balance vaut l'énergie if (icharge==1)// dans le cas du premier incrément on considère que la balance vaut l'énergie
// cinétique initiale, car vu que l'on ne met pas de CL à t=0, E_cin_0 est difficile à calculer // cinétique initiale, car vu que l'on ne met pas de CL à t=0, E_cin_0 est difficile à calculer
{E_cin_0 = E_cin_tdt - bilan_E + E_int_tdt - E_ext_tdt; }; {E_cin_0 = E_cin_tdt - bilan_E + E_int_tdt - E_ext_tdt; };

View file

@ -997,7 +997,7 @@ void Algori_chung_lee::CalEquilibre(ParaGlob * paraGlob,LesMaillages * lesMail,
// calcul des énergies et affichage des balances // calcul des énergies et affichage des balances
// delta_X.Zero(); delta_X += X_tdt; delta_X -= X_t; // X_tdt - X_t // delta_X.Zero(); delta_X += X_tdt; delta_X -= X_t; // X_tdt - X_t
Algori::Cal_Transfert_delta_et_var_X(max_delta_X,max_var_delta_X); Algori::Cal_Transfert_delta_et_var_X(max_delta_X,max_var_delta_X);
CalEnergieAffichage(1.,vitesse_t,*mat_masse_sauve,delta_X,icharge,brestart,acceleration_tdt,forces_vis_num); CalEnergieAffichage(1.,vitesse_t,*mat_masse_sauve,delta_X,icharge,brestart,acceleration_tdt,forces_vis_num,aff_incr);
if (icharge==1)// dans le cas du premier incrément on considère que la balance vaut l'énergie if (icharge==1)// dans le cas du premier incrément on considère que la balance vaut l'énergie
// cinétique initiale, car vu que l'on ne met pas de CL à t=0, E_cin_0 est difficile à calculer // cinétique initiale, car vu que l'on ne met pas de CL à t=0, E_cin_0 est difficile à calculer
{E_cin_0 = E_cin_tdt - bilan_E + E_int_tdt - E_ext_tdt; }; {E_cin_0 = E_cin_tdt - bilan_E + E_int_tdt - E_ext_tdt; };
@ -1683,7 +1683,7 @@ void Algori_chung_lee::Calcul_Equilibre(ParaGlob * paraGlob,LesMaillages * lesMa
// calcul des énergies et affichage des balances // calcul des énergies et affichage des balances
// delta_X.Zero(); delta_X += X_tdt; delta_X -= X_t; // X_tdt - X_t // delta_X.Zero(); delta_X += X_tdt; delta_X -= X_t; // X_tdt - X_t
Algori::Cal_Transfert_delta_et_var_X(max_delta_X,max_var_delta_X); Algori::Cal_Transfert_delta_et_var_X(max_delta_X,max_var_delta_X);
CalEnergieAffichage(1.,vitesse_t,matrice_mas_sauve,delta_X,icharge,brestart,acceleration_tdt,forces_vis_num); CalEnergieAffichage(1.,vitesse_t,matrice_mas_sauve,delta_X,icharge,brestart,acceleration_tdt,forces_vis_num,aff_incr);
if (icharge==1)// dans le cas du premier incrément on considère que la balance vaut l'énergie if (icharge==1)// dans le cas du premier incrément on considère que la balance vaut l'énergie
// cinétique initiale, car vu que l'on ne met pas de CL à t=0, E_cin_0 est difficile à calculer // cinétique initiale, car vu que l'on ne met pas de CL à t=0, E_cin_0 est difficile à calculer
{E_cin_0 = E_cin_tdt - bilan_E + E_int_tdt - E_ext_tdt; }; {E_cin_0 = E_cin_tdt - bilan_E + E_int_tdt - E_ext_tdt; };

View file

@ -1516,6 +1516,18 @@ void AlgoriRelaxDyna::InitAlgorithme(ParaGlob * paraGlob,LesMaillages * lesMail,
lesMail->AjoutConteneurAuNoeud(typQ_gene_int); lesMail->AjoutConteneurAuNoeud(typQ_gene_int);
}; };
}; };
//// debug
//{
// cout << "\n debug : AlgoriRelaxDyna::InitAlgorithme( ";
// cout << "\n taper une touche pour continuer ";
// string rep;
// cin >> rep;
// //Sortie(1);
//}
////-- fin debug
//--cas de restart et/ou de sauvegarde------------ //--cas de restart et/ou de sauvegarde------------
// tout d'abord récup du restart si nécessaire // tout d'abord récup du restart si nécessaire
@ -2622,7 +2634,7 @@ Vecteur V_ext(F_int_tdt);
// delta_X = X_tdt; delta_X -= X_t; // X_tdt - X_t // delta_X = X_tdt; delta_X -= X_t; // X_tdt - X_t
Algori::Cal_Transfert_delta_et_var_X(max_delta_X,max_var_delta_X); Algori::Cal_Transfert_delta_et_var_X(max_delta_X,max_var_delta_X);
CalEnergieAffichage(1.,vitesse_tdt,*mat_masse_sauve,delta_X CalEnergieAffichage(1.,vitesse_tdt,*mat_masse_sauve,delta_X
,icharge,brestart,acceleration_tdt,forces_vis_num); ,icharge,brestart,acceleration_tdt,forces_vis_num,aff_iteration);
if (compteur_demarrage==0)// dans le cas du premier incrément on considère que la balance vaut l'énergie if (compteur_demarrage==0)// dans le cas du premier incrément on considère que la balance vaut l'énergie
// cinétique initiale, car vu que l'on ne met pas de CL à t=0, E_cin_0 est difficile à calculer // cinétique initiale, car vu que l'on ne met pas de CL à t=0, E_cin_0 est difficile à calculer
{E_cin_0 = E_cin_tdt - bilan_E + E_int_tdt - E_ext_tdt; }; {E_cin_0 = E_cin_tdt - bilan_E + E_int_tdt - E_ext_tdt; };

View file

@ -1630,7 +1630,7 @@ void AlgoriTchamwa::CalEquilibre(ParaGlob * paraGlob,LesMaillages * lesMail
// calcul des énergies et affichage des balances // calcul des énergies et affichage des balances
// delta_X.Zero(); delta_X += X_tdt; delta_X -= X_t; // X_tdt - X_t // delta_X.Zero(); delta_X += X_tdt; delta_X -= X_t; // X_tdt - X_t
Algori::Cal_Transfert_delta_et_var_X(max_delta_X,max_var_delta_X); Algori::Cal_Transfert_delta_et_var_X(max_delta_X,max_var_delta_X);
CalEnergieAffichage(1.,vitesse_tdt,*mat_masse_sauve,delta_X,icharge,brestart,acceleration_tdt,forces_vis_num); CalEnergieAffichage(1.,vitesse_tdt,*mat_masse_sauve,delta_X,icharge,brestart,acceleration_tdt,forces_vis_num,aff_incr);
if (icharge==1)// dans le cas du premier incrément on considère que la balance vaut l'énergie if (icharge==1)// dans le cas du premier incrément on considère que la balance vaut l'énergie
// cinétique initiale, car vu que l'on ne met pas de CL à t=0, E_cin_0 est difficile à calculer // cinétique initiale, car vu que l'on ne met pas de CL à t=0, E_cin_0 est difficile à calculer
{E_cin_0 = E_cin_tdt - bilan_E + E_int_tdt - E_ext_tdt; }; {E_cin_0 = E_cin_tdt - bilan_E + E_int_tdt - E_ext_tdt; };

View file

@ -561,7 +561,7 @@ void AlgoriTchamwa::Calcul_Equilibre2(ParaGlob * paraGlob,LesMaillages * lesMail
// calcul des énergies et affichage des balances // calcul des énergies et affichage des balances
// delta_X.Zero(); delta_X += X_tdt; delta_X -= X_t; // X_tdt - X_t // delta_X.Zero(); delta_X += X_tdt; delta_X -= X_t; // X_tdt - X_t
Algori::Cal_Transfert_delta_et_var_X(max_delta_X,max_var_delta_X); Algori::Cal_Transfert_delta_et_var_X(max_delta_X,max_var_delta_X);
CalEnergieAffichage(1.,vitesse_tdt,matrice_mas_sauve,delta_X,icharge,brestart,acceleration_tdt,forces_vis_num); CalEnergieAffichage(1.,vitesse_tdt,matrice_mas_sauve,delta_X,icharge,brestart,acceleration_tdt,forces_vis_num,aff_incr);
if (icharge==1)// dans le cas du premier incrément on considère que la balance vaut l'énergie if (icharge==1)// dans le cas du premier incrément on considère que la balance vaut l'énergie
// cinétique initiale, car vu que l'on ne met pas de CL à t=0, E_cin_0 est difficile à calculer // cinétique initiale, car vu que l'on ne met pas de CL à t=0, E_cin_0 est difficile à calculer
{E_cin_0 = E_cin_tdt - bilan_E + E_int_tdt - E_ext_tdt; }; {E_cin_0 = E_cin_tdt - bilan_E + E_int_tdt - E_ext_tdt; };
@ -1126,7 +1126,7 @@ void AlgoriTchamwa::Calcul_Equilibre4(ParaGlob * paraGlob,LesMaillages * lesMail
// calcul des énergies et affichage des balances // calcul des énergies et affichage des balances
// delta_X.Zero(); delta_X += X_tdt; delta_X -= X_t; // X_tdt - X_t // delta_X.Zero(); delta_X += X_tdt; delta_X -= X_t; // X_tdt - X_t
Algori::Cal_Transfert_delta_et_var_X(max_delta_X,max_var_delta_X); Algori::Cal_Transfert_delta_et_var_X(max_delta_X,max_var_delta_X);
CalEnergieAffichage(1.,vitesse_tdt,matrice_mas_sauve,delta_X,icharge,brestart,acceleration_tdt,forces_vis_num); CalEnergieAffichage(1.,vitesse_tdt,matrice_mas_sauve,delta_X,icharge,brestart,acceleration_tdt,forces_vis_num,aff_incr);
if (icharge==1)// dans le cas du premier incrément on considère que la balance vaut l'énergie if (icharge==1)// dans le cas du premier incrément on considère que la balance vaut l'énergie
// cinétique initiale, car vu que l'on ne met pas de CL à t=0, E_cin_0 est difficile à calculer // cinétique initiale, car vu que l'on ne met pas de CL à t=0, E_cin_0 est difficile à calculer
{E_cin_0 = E_cin_tdt - bilan_E + E_int_tdt - E_ext_tdt; }; {E_cin_0 = E_cin_tdt - bilan_E + E_int_tdt - E_ext_tdt; };

View file

@ -971,7 +971,7 @@ void AlgoriNewmark::CalEquilibre(ParaGlob * paraGlob,LesMaillages * lesMail
// calcul des énergies et affichage des balances // calcul des énergies et affichage des balances
Algori::Cal_Transfert_delta_et_var_X(max_delta_X,max_var_delta_X); Algori::Cal_Transfert_delta_et_var_X(max_delta_X,max_var_delta_X);
CalEnergieAffichage(coef_masse * unSurBetaDeltaTcarre,vitesse_tdt,mat_mas_modif CalEnergieAffichage(coef_masse * unSurBetaDeltaTcarre,vitesse_tdt,mat_mas_modif
,delta_X,icharge,brestart,acceleration_tdt,forces_vis_num); ,delta_X,icharge,brestart,acceleration_tdt,forces_vis_num,aff_iteration);
if (permet_affichage > 3) if (permet_affichage > 3)
{ cout << "\n --- |max_var_DeltaDdl|= "<< max_var_delta_X { cout << "\n --- |max_var_DeltaDdl|= "<< max_var_delta_X
<< " , |max_deltaDdl|= " << max_delta_X << flush;}; << " , |max_deltaDdl|= " << max_delta_X << flush;};

View file

@ -801,7 +801,7 @@ void AlgoristatExpli::Calcul_Equilibre(ParaGlob * paraGlob,LesMaillages * lesMai
// calcul des énergies et affichage des balances // calcul des énergies et affichage des balances
// delta_X.Zero(); delta_X += X_tdt; delta_X -= X_t; // X_tdt - X_t // delta_X.Zero(); delta_X += X_tdt; delta_X -= X_t; // X_tdt - X_t
Algori::Cal_Transfert_delta_et_var_X(max_delta_X,max_var_delta_X); Algori::Cal_Transfert_delta_et_var_X(max_delta_X,max_var_delta_X);
CalEnergieAffichage(1.,vitesse_tdt,matrice_mas_sauve,delta_X,icharge,brestart,acceleration_tdt,forces_vis_num); CalEnergieAffichage(1.,vitesse_tdt,matrice_mas_sauve,delta_X,icharge,brestart,acceleration_tdt,forces_vis_num,aff_iteration);
if (icharge==1)// dans le cas du premier incrément on considère que la balance vaut l'énergie if (icharge==1)// dans le cas du premier incrément on considère que la balance vaut l'énergie
// cinétique initiale, car vu que l'on ne met pas de CL à t=0, E_cin_0 est difficile à calculer // cinétique initiale, car vu que l'on ne met pas de CL à t=0, E_cin_0 est difficile à calculer
{E_cin_0 = E_cin_tdt - bilan_E + E_int_tdt - E_ext_tdt; }; {E_cin_0 = E_cin_tdt - bilan_E + E_int_tdt - E_ext_tdt; };

View file

@ -1025,7 +1025,7 @@ void AlgoriNonDyna::CalEquilibre(ParaGlob * paraGlob,LesMaillages * lesMail
}; };
}; };
CalEnergieAffichage(delta_X,icharge,brestart,forces_vis_num); CalEnergieAffichage(delta_X,icharge,brestart,forces_vis_num,aff_iteration);
// test de convergence sur un increment // test de convergence sur un increment
// en tenant compte éventuellement du contact (non decollement) decol = false systématiquement si pas de contact // en tenant compte éventuellement du contact (non decollement) decol = false systématiquement si pas de contact

View file

@ -588,7 +588,7 @@ void ImpliNonDynaCont::Calcul_Equilibre(ParaGlob * paraGlob,LesMaillages * lesMa
// delta_X.Zero(); delta_X += X_tdt; delta_X -= X_t; // X_tdt - X_t // delta_X.Zero(); delta_X += X_tdt; delta_X -= X_t; // X_tdt - X_t
Algori::Cal_Transfert_delta_et_var_X(max_delta_X,max_var_delta_X); Algori::Cal_Transfert_delta_et_var_X(max_delta_X,max_var_delta_X);
Vecteur forces_vis_num; // ne sert pas Vecteur forces_vis_num; // ne sert pas
CalEnergieAffichage(delta_X,icharge,brestart,forces_vis_num); CalEnergieAffichage(delta_X,icharge,brestart,forces_vis_num,aff_iteration);
// test de convergence sur un increment // test de convergence sur un increment
// en tenant compte du contact (non decollement) // en tenant compte du contact (non decollement)
if (Convergence(aff_iteration,last_var_ddl_max,vglobaal,maxPuissExt,maxPuissInt,maxReaction,compteur,arret) if (Convergence(aff_iteration,last_var_ddl_max,vglobaal,maxPuissExt,maxPuissInt,maxReaction,compteur,arret)

View file

@ -1155,14 +1155,7 @@ void Charge::Lecture_base_info(istream& entr,const int cas,LesReferences& ,LesCo
istream& entr = *entrons; // on redéfinit ent istream& entr = *entrons; // on redéfinit ent
#endif #endif
entr >> toto ; // entête entr >> toto ; // entête dans le cas non MPI
#ifdef MISE_AU_POINT
if (toto != "****chargement")
{cout << "\n *** erreur en lecture, on attendait ****chargement "
<< " et on a lue " << toto;
Sortie(1);
};
#endif
// dans le cas où on lit un fichier créé avec MPI io, et que l'on n'est pas // dans le cas où on lit un fichier créé avec MPI io, et que l'on n'est pas
// en MPI, on passe les offsets et tailles // en MPI, on passe les offsets et tailles
#ifndef UTILISATION_MPI #ifndef UTILISATION_MPI
@ -1175,12 +1168,20 @@ void Charge::Lecture_base_info(istream& entr,const int cas,LesReferences& ,LesCo
}; };
#endif #endif
if (mono_proc_on_lit_un_BI_multiProc)
entr >> toto ; // lecture en tête
#ifdef MISE_AU_POINT
if (toto != "****chargement")
{cout << "\n *** erreur en lecture, on attendait ****chargement "
<< " et on a lue " << toto;
Sortie(1);
};
#endif
switch (cas) switch (cas)
{ case 1 : // ------- on récupère tout ------------------------- { case 1 : // ------- on récupère tout -------------------------
{ if (ParaGlob::NiveauImpression() >= 6) { if (ParaGlob::NiveauImpression() >= 6)
cout << "== lecture du chargement \n"; cout << "== lecture du chargement \n";
string toto;entr >> toto ; // lecture en tête
string type; entr >> type; // lecture du premier type string type; entr >> type; // lecture du premier type
while (type != "type_de_charge") while (type != "type_de_charge")
{ if (type == "force_volumique") { if (type == "force_volumique")
@ -1387,15 +1388,15 @@ void Charge::Ecriture_base_info(ostream& sort,const int cas)
#ifdef UTILISATION_MPI #ifdef UTILISATION_MPI
// retour de la taille globale des sorties retardées // retour de la taille globale des sorties retardées
// concernant les sorties sur .BI // concernant les sorties sur .BI
int Charge::Taille_buffer_sortie_BI() MPI_Offset Charge::Taille_buffer_sortie_BI()
{int taille_totale = 0; // init {MPI_Offset taille_totale = 0; // init
int proc_en_cours = ParaGlob::Monde()->rank(); int proc_en_cours = ParaGlob::Monde()->rank();
if (proc_en_cours == 0) // partie dédiée proc 0 if (proc_en_cours == 0) // partie dédiée proc 0
{// tout d'abord on prend en compte les buffers propres {// tout d'abord on prend en compte les buffers propres
for (int i=1;i<= nb_buffer;i++) // normalement 1 for (MPI_Offset i=1;i<= nb_buffer;i++) // normalement 1
taille_totale += buffer_ioBI_MPI(i).size(); taille_totale += buffer_ioBI_MPI(i).size();
// puis on intègre la taille de l'ensemble des offsets: // puis on intègre la taille de l'ensemble des offsets:
int taille_entete = 42 + (taille_offset)*21+27; // cf. Charge::Ecriture_base_info_MPI_IO MPI_Offset taille_entete = 42 + (taille_offset)*21+27; // cf. Charge::Ecriture_base_info_MPI_IO
taille_totale += taille_entete; taille_totale += taille_entete;
}; };
// retour // retour

View file

@ -325,7 +325,7 @@ class Charge
#ifdef UTILISATION_MPI #ifdef UTILISATION_MPI
// retour de la taille globale des sorties retardées // retour de la taille globale des sorties retardées
// concernant les sorties sur .BI // concernant les sorties sur .BI
int Taille_buffer_sortie_BI(); MPI_Offset Taille_buffer_sortie_BI();
// récupération de l'offset global sur .BI pour la classe // récupération de l'offset global sur .BI pour la classe
// et mise à jour des offsets de classes dérivées si besoin // et mise à jour des offsets de classes dérivées si besoin
void Mise_a_jour_Offset_BI_ecriture(MPI_Offset offset,const int cas); void Mise_a_jour_Offset_BI_ecriture(MPI_Offset offset,const int cas);

View file

@ -88,6 +88,13 @@
charge->Lecture2(*entreePrinc,*lesCourbes1D,*lesFonctionsnD); // lecture du type d'application du chargement charge->Lecture2(*entreePrinc,*lesCourbes1D,*lesFonctionsnD); // lecture du type d'application du chargement
algori->Lecture(*entreePrinc,*paraGlob,*lesMaillages); // lecture des parametres de controle de l'algorithme algori->Lecture(*entreePrinc,*paraGlob,*lesMaillages); // lecture des parametres de controle de l'algorithme
resultats->Lecture(lesRef); // lecture des parametres de gestion de la sortie des resultats resultats->Lecture(lesRef); // lecture des parametres de gestion de la sortie des resultats
//
// // debug
// cout << "\n debug : Projet::Lecture () ";
// Sortie(1);
// //-- fin debug
//
//
// s'il y a des données externes sur les maillages nécessaires pour l'algorithme // s'il y a des données externes sur les maillages nécessaires pour l'algorithme
if (algori->ExisteDonneesExternes()) if (algori->ExisteDonneesExternes())
LectureDonneesExternes(); LectureDonneesExternes();

View file

@ -484,7 +484,17 @@ class UtilLecture
friend istream & operator >> (istream & entree, Position_BI& a); friend istream & operator >> (istream & entree, Position_BI& a);
// surcharge de l'operator d'ecriture // surcharge de l'operator d'ecriture
friend ostream & operator << (ostream & sort, const Position_BI& a); friend ostream & operator << (ostream & sort, const Position_BI& a);
#ifdef UTILISATION_MPI
private:
friend class boost::serialization::access;
// When the class Archive corresponds to an output archive, the
// & operator is defined similar to <<. Likewise, when the class Archive
// is a type of input archive the & operator is defined similar to >>.
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{ ar & num_incr; ar & position; }
#endif
public : public :
#ifndef UTILISATION_MPI #ifndef UTILISATION_MPI
Position_BI(streampos posi=(ios::beg), int num = 0) : // constructeur Position_BI(streampos posi=(ios::beg), int num = 0) : // constructeur
@ -559,13 +569,13 @@ class UtilLecture
#else #else
MPI_File ent_MPI_BI ; // pointeur fichier commun MPI_File ent_MPI_BI ; // pointeur fichier commun
MPI_File sort_MPI_BI ; // " " MPI_File sort_MPI_BI ; // " "
int taille_buffer_Nouvelle_enreg_MPI; // la taille du buffer pour chaque enreg MPI_Offset taille_buffer_Nouvelle_enreg_MPI; // la taille du buffer pour chaque enreg
char * buffer_MPI; // le tableau du buffer associé char * buffer_MPI; // le tableau du buffer associé
MPI_Offset offset_Nouvelle_enreg_MPI; //l'offset actuel du buffer lue par Nouvelle_enreg_MPI MPI_Offset offset_Nouvelle_enreg_MPI; //l'offset actuel du buffer lue par Nouvelle_enreg_MPI
int lecture_MPI_BI_en_cours; // " " =0 le fichier n'est pas ouvert, =1 le buffer n'est pas encore rempli int lecture_MPI_BI_en_cours; // " " =0 le fichier n'est pas ouvert, =1 le buffer n'est pas encore rempli
// = 2 la lecture est en cours et le buffer est rempli // = 2 la lecture est en cours et le buffer est rempli
int taille_actuelle_buffer; // " " MPI_Offset taille_actuelle_buffer; // " "
int dernier_posi_dans_buffer; // " " MPI_Offset dernier_posi_dans_buffer; // " "
MPI_File ent_MPI_PI ; // pointeur fichier liste des pointeurs d'incréments de base info MPI_File ent_MPI_PI ; // pointeur fichier liste des pointeurs d'incréments de base info
MPI_File sort_MPI_PI ; // " " MPI_File sort_MPI_PI ; // " "

View file

@ -401,7 +401,11 @@ void UtilLecture::Nouvel_enregCvisu ()
#endif #endif
// on récupère le nombre d'éléments lus // on récupère le nombre d'éléments lus
MPI_Get_count(&status, MPI_CHAR,&taille_actuelle_buffer); int inter_taille; // MPI_Get_count utilise un entier pour la taille
// donc on utilise une variable intermédiare, car on veut garder un MPI_Offset
// pour les tailles, histoire d'être homogène dans tout herezh en MPI-IO
MPI_Get_count(&status, MPI_CHAR,&inter_taille);
taille_actuelle_buffer=inter_taille;
// si le nombre est inférieur à celui demandé, on est arrivé à la fin du fichier // si le nombre est inférieur à celui demandé, on est arrivé à la fin du fichier
if (taille_actuelle_buffer < taille_buffer_Nouvelle_enreg_MPI) if (taille_actuelle_buffer < taille_buffer_Nouvelle_enreg_MPI)
{pas_fin_fichier = false;} {pas_fin_fichier = false;}
@ -438,7 +442,11 @@ void UtilLecture::Nouvel_enregCvisu ()
#endif #endif
// on récupère le nombre d'éléments lus // on récupère le nombre d'éléments lus
ierr_lecture = MPI_Get_count(&status, MPI_CHAR,&taille_actuelle_buffer); int inter_taille; // MPI_Get_count utilise un entier pour la taille
// donc on utilise une variable intermédiare, car on veut garder un MPI_Offset
// pour les tailles, histoire d'être homogène dans tout herezh en MPI-IO
ierr_lecture = MPI_Get_count(&status, MPI_CHAR,&inter_taille);
taille_actuelle_buffer=inter_taille;
#ifdef MISE_AU_POINT #ifdef MISE_AU_POINT
if (ierr_lecture) if (ierr_lecture)
{cout << "\n *** erreur d'acces a MPI_Get_count , stop Herezh " {cout << "\n *** erreur d'acces a MPI_Get_count , stop Herezh "

View file

@ -160,7 +160,7 @@ void UtilLecture::Ouverture_base_info(string type_entree)
<< "\n UtilLecture::Ouverture_base_info() " << endl; << "\n UtilLecture::Ouverture_base_info() " << endl;
Sortie(1); Sortie(1);
}; };
int taille_fichier_enOctet = filesize; MPI_Offset taille_fichier_enOctet = filesize;
char * buffer_car = new char [taille_fichier_enOctet] ; // def du tableau de travail char * buffer_car = new char [taille_fichier_enOctet] ; // def du tableau de travail
MPI_Status status; MPI_Status status;
ierr = MPI_File_read(ent_MPI_PI, buffer_car, taille_fichier_enOctet, MPI_CHAR, &status); ierr = MPI_File_read(ent_MPI_PI, buffer_car, taille_fichier_enOctet, MPI_CHAR, &status);
@ -297,7 +297,7 @@ void UtilLecture::Ouverture_base_info(string type_entree)
buf2 << endl; buf2 << endl;
// le buffer du stream n'est pas pérenne il faut le récupérer // le buffer du stream n'est pas pérenne il faut le récupérer
string buf_inter = buf2.str(); // on récupère le buffer string buf_inter = buf2.str(); // on récupère le buffer
int taille_buf = buf_inter.size(); MPI_Offset taille_buf = buf_inter.size();
MPI_Status status; // pour le retour MPI_Status status; // pour le retour
if (num_cpu_en_cours_BI == 0) if (num_cpu_en_cours_BI == 0)
{int ierr = MPI_File_write(sort_MPI_PI,buf_inter.c_str(),taille_buf,MPI_CHAR,&status); {int ierr = MPI_File_write(sort_MPI_PI,buf_inter.c_str(),taille_buf,MPI_CHAR,&status);
@ -317,13 +317,15 @@ void UtilLecture::Ouverture_base_info(string type_entree)
}; // fin du test if (!positionPI) }; // fin du test if (!positionPI)
#ifdef UTILISATION_MPI #ifdef UTILISATION_MPI
// on doit transmettre liste_posi_BI à tous les proc // on doit transmettre liste_posi_BI à tous les proc
std::vector < DeuxEntiers > inter; // sert pour le transfert interproc std::vector < Position_BI > inter; // sert pour le transfert interproc
if (num_cpu_en_cours_BI == 0) // on rempli inter if (num_cpu_en_cours_BI == 0) // on rempli inter
{inter.resize(liste_posi_BI.size()); {inter.resize(liste_posi_BI.size());
list<Position_BI>::iterator iter,iter_fin = liste_posi_BI.end(); list<Position_BI>::iterator iter,iter_fin = liste_posi_BI.end();
int i=0; int i=0;
for (iter = liste_posi_BI.begin();iter != iter_fin;iter++,i++) for (iter = liste_posi_BI.begin();iter != iter_fin;iter++,i++)
inter[i] = DeuxEntiers((*iter).num_incr,(*iter).position); {inter[i].num_incr = (*iter).num_incr;
inter[i].position = (*iter).position;
};
}; };
// il faut transmettre à tous les proc le contenu de liste_posi_BI // il faut transmettre à tous les proc le contenu de liste_posi_BI
broadcast(*ParaGlob::Monde(), inter, 0); broadcast(*ParaGlob::Monde(), inter, 0);
@ -332,7 +334,7 @@ void UtilLecture::Ouverture_base_info(string type_entree)
{liste_posi_BI.clear(); {liste_posi_BI.clear();
int taille = inter.size(); int taille = inter.size();
for (int i=0;i<taille;i++) for (int i=0;i<taille;i++)
{Position_BI truc(inter[i].deux,inter[i].un); {Position_BI truc(inter[i].num_incr,inter[i].position);
liste_posi_BI.push_back(truc); liste_posi_BI.push_back(truc);
}; };
}; };
@ -497,7 +499,7 @@ void UtilLecture::Fermeture_base_info()
buf2 << endl; buf2 << endl;
// le buffer du stream n'est pas pérenne il faut le récupérer // le buffer du stream n'est pas pérenne il faut le récupérer
string buf_inter = buf2.str(); // on récupère le buffer string buf_inter = buf2.str(); // on récupère le buffer
int taille_buf = buf_inter.size(); MPI_Offset taille_buf = buf_inter.size();
MPI_Status status; // pour le retour MPI_Status status; // pour le retour
int ierr = MPI_File_write(sort_MPI_PI,buf_inter.c_str(),taille_buf,MPI_CHAR,&status); int ierr = MPI_File_write(sort_MPI_PI,buf_inter.c_str(),taille_buf,MPI_CHAR,&status);

View file

@ -2981,13 +2981,6 @@ void LesCondLim::Lecture_base_info(istream& ent,const int cas,LesReferences& ,Le
// lecture du nombre de maillage total // lecture du nombre de maillage total
ent >> toto ; // entête ent >> toto ; // entête
#ifdef MISE_AU_POINT
if (toto != "****LesCondLim")
{cout << "\n *** erreur en lecture, on attendait ****LesCondLim "
<< " et on a lue " << toto;
Sortie(1);
};
#endif
// dans le cas où on lit un fichier créé avec MPI io, et que l'on n'est pas // dans le cas où on lit un fichier créé avec MPI io, et que l'on n'est pas
// en MPI, on passe les offsets et tailles // en MPI, on passe les offsets et tailles
#ifndef UTILISATION_MPI #ifndef UTILISATION_MPI
@ -3002,6 +2995,13 @@ void LesCondLim::Lecture_base_info(istream& ent,const int cas,LesReferences& ,Le
if (mono_proc_on_lit_un_BI_multiProc) if (mono_proc_on_lit_un_BI_multiProc)
ent >> toto; // on lit l'entête , sinon elle a déjà été lue ent >> toto; // on lit l'entête , sinon elle a déjà été lue
#ifdef MISE_AU_POINT
if (toto != "****LesCondLim")
{cout << "\n *** erreur en lecture, on attendait ****LesCondLim "
<< " et on a lue " << toto;
Sortie(1);
};
#endif
// les conditions linéaires qui varies par exemples dues au contact sont stockées // les conditions linéaires qui varies par exemples dues au contact sont stockées
// autre part, dans LesContacts par exemple // autre part, dans LesContacts par exemple

View file

@ -41,7 +41,7 @@
EnumLangue ParaGlob::langueHZ = FRANCAIS; // langue utilisée pour les entrées sorties EnumLangue ParaGlob::langueHZ = FRANCAIS; // langue utilisée pour les entrées sorties
int ParaGlob::nbComposantesTenseur = 1; // nombre de composantes par defaut a 1 int ParaGlob::nbComposantesTenseur = 1; // nombre de composantes par defaut a 1
int ParaGlob::nivImpression = 2; // niveau d'impression int ParaGlob::nivImpression = 2; // niveau d'impression
string ParaGlob::nbVersion = "7.045" ; // numéro de version du logiciel string ParaGlob::nbVersion = "7.046" ; // numéro de version du logiciel
string ParaGlob::NbVersionsurfichier = ""; // numéro de version lue en entrée fichier string ParaGlob::NbVersionsurfichier = ""; // numéro de version lue en entrée fichier
int ParaGlob::nb_diggit_double_calcul= 17; // nombre de chiffre significatifs utilisé pour int ParaGlob::nb_diggit_double_calcul= 17; // nombre de chiffre significatifs utilisé pour
// l'affichage des double précision pour l'archivage // l'affichage des double précision pour l'archivage

View file

@ -552,8 +552,8 @@ void ParaGlob::Ecriture_base_info(ostream& sort,const int cas)
// retour de la taille globale des sorties retardées // retour de la taille globale des sorties retardées
// concernant les sorties sur .BI // concernant les sorties sur .BI
int ParaGlob::Taille_buffer_sortie_BI() MPI_Offset ParaGlob::Taille_buffer_sortie_BI()
{ int taille =0; { MPI_Offset taille =0;
taille += 43; // écriture de buf_inter2 taille += 43; // écriture de buf_inter2
taille += 57; // écriture de buf_inter1 taille += 57; // écriture de buf_inter1
taille += taille_buffer_ioBI_MPI; // écriture du buffer taille += taille_buffer_ioBI_MPI; // écriture du buffer

View file

@ -292,7 +292,7 @@ class ParaGlob
void Ecriture_base_info(MPI_File& sort,const int cas); void Ecriture_base_info(MPI_File& sort,const int cas);
// retour de la taille globale des sorties retardées // retour de la taille globale des sorties retardées
// concernant les sorties sur .BI // concernant les sorties sur .BI
int Taille_buffer_sortie_BI(); MPI_Offset Taille_buffer_sortie_BI();
#endif #endif

View file

@ -546,7 +546,7 @@ const T Tableau<T>::val_const(int i) const
#ifdef MISE_AU_POINT #ifdef MISE_AU_POINT
if ( (i<1) || (i>taille) ) if ( (i<1) || (i>taille) )
{ cout << "\nErreur : composante inexistante !, nb demande = " << i << '\n'; { cout << "\nErreur : composante inexistante !, nb demande = " << i << '\n';
cout << "T TABLEAU_T::OPERATOR() (int ) const \n"; cout << "T TABLEAU_T::val_const(int i) const const \n";
cout << "\n pour info: taille actuelle du tableau = " << taille << " "; cout << "\n pour info: taille actuelle du tableau = " << taille << " ";
Sortie(1); Sortie(1);
}; };
@ -567,7 +567,7 @@ const T& Tableau<T>::ref_const(int i) const
#ifdef MISE_AU_POINT #ifdef MISE_AU_POINT
if ( (i<1) || (i>taille) ) if ( (i<1) || (i>taille) )
{ cout << "\nErreur : composante inexistante !, nb demande = " << i << '\n'; { cout << "\nErreur : composante inexistante !, nb demande = " << i << '\n';
cout << "T TABLEAU_T::OPERATOR() (int ) const \n"; cout << "T TABLEAU_T::ref_const(int i) const \n";
cout << "\n pour info: taille actuelle du tableau = " << taille << " "; cout << "\n pour info: taille actuelle du tableau = " << taille << " ";
Sortie(1); Sortie(1);
}; };

View file

@ -43,8 +43,8 @@ void Sortie(int n)
// dans le cas de la mise au point // dans le cas de la mise au point
// #ifdef MISE_AU_POINT // #ifdef MISE_AU_POINT
if (nombre_de_fois_ou_on_appel_sortie == 0) if (nombre_de_fois_ou_on_appel_sortie == 0)
{if (fr){cout << "\n passage dans la methode Sortie \n ";} {if (fr){cerr << "\n passage dans la methode Sortie \n ";}
else {cout << "\n call to the method Sortie \n ";} else {cerr << "\n call to the method Sortie \n ";}
}; };
// #endif // #endif
// si n est positif on génère une interruption qui peut être intercepté // si n est positif on génère une interruption qui peut être intercepté
@ -65,12 +65,12 @@ void Sortie(int n)
// ensuite on continue // ensuite on continue
if (n > 0) if (n > 0)
{if (fr) {if (fr)
{ cout << "\n *************************************************************** " { cerr << "\n *************************************************************** "
<< "\n ** arret apres une erreur ** " << "\n ** arret apres une erreur ** "
<< "\n ***************************************************************\n "; << "\n ***************************************************************\n ";
} }
else else
{ cout << "\n *************************************************************** " { cerr << "\n *************************************************************** "
<< "\n ** stop after an error ** " << "\n ** stop after an error ** "
<< "\n ***************************************************************\n "; << "\n ***************************************************************\n ";
}; };