diff --git a/Algo/AlgoRef/Algori.cc b/Algo/AlgoRef/Algori.cc index 25d981b..99b0f2f 100644 --- a/Algo/AlgoRef/Algori.cc +++ b/Algo/AlgoRef/Algori.cc @@ -1277,7 +1277,7 @@ void Algori::InfoIncrementReac(LesMaillages * lesMail, // 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 ,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 // cas d'un calcul //, le CPU 0 calcule @@ -1343,7 +1343,8 @@ void Algori::CalEnergieAffichage(const double& coef_mass,const Vecteur & V,cons }; // --- affichage ---- if (( pa.Vrai_commande_sortie(icharge,temps_derniere_sauvegarde)) - &&(pa.AfficheIncrEnergie())) + &&(pa.AfficheIncrEnergie()) + && aff_iteration) {// cas des énergies cout << "\n energies: cin= "<< std::fixed << std::setprecision(nbcar)<< E_cin_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 // icharge : compteur d'increment // 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 // cas d'un calcul //, le CPU 0 calcule @@ -1475,7 +1477,8 @@ void Algori::CalEnergieAffichage(const Vecteur & delta_X,int icharge,bool bresta // --- affichage ---- if (( pa.Vrai_commande_sortie(icharge,temps_derniere_sauvegarde)) - &&(pa.AfficheIncrEnergie())) + &&(pa.AfficheIncrEnergie()) + && aff_iteration) {// cas des énergies cout << "\n energies: int= " << std::fixed << std::setprecision(nbcar)<< E_int_tdt << " ext= " << std::fixed << std::setprecision(nbcar)<< E_ext_tdt diff --git a/Algo/AlgoRef/Algori.h b/Algo/AlgoRef/Algori.h index 40ef52b..0e98fd3 100644 --- a/Algo/AlgoRef/Algori.h +++ b/Algo/AlgoRef/Algori.h @@ -1049,12 +1049,13 @@ class Algori // gamma : vecteur accélération 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 & 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 // affichage éventuelle des ces énergies et du bilan // icharge : compteur d'increment // 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 void Affiche_RaidSM(const Vecteur & vglobin,const Mat_abstraite& matglob) const; diff --git a/Algo/AlgoRef/Algori2.cc b/Algo/AlgoRef/Algori2.cc index dfaaedc..150dff4 100644 --- a/Algo/AlgoRef/Algori2.cc +++ b/Algo/AlgoRef/Algori2.cc @@ -2697,7 +2697,7 @@ void Algori::Lecture_base_info(istream& ent,int cas) ent >> nom1 >> temps_transfert_long_contact; ent >> nom1 >> temps_attente_contact; #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 {nom1.clear(); std::getline(ent, nom1); diff --git a/Algo/GalerkinContinu/AlgoDynaExplicite/AlgoRungeKutta.cc b/Algo/GalerkinContinu/AlgoDynaExplicite/AlgoRungeKutta.cc index 765399f..d31376c 100644 --- a/Algo/GalerkinContinu/AlgoDynaExplicite/AlgoRungeKutta.cc +++ b/Algo/GalerkinContinu/AlgoDynaExplicite/AlgoRungeKutta.cc @@ -1471,7 +1471,7 @@ void AlgoriRungeKutta::CalEquilibre(ParaGlob * paraGlob,LesMaillages * lesMail // calcul des énergies et affichage des balances // 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); - 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 // 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; }; diff --git a/Algo/GalerkinContinu/AlgoDynaExplicite/AlgoriDynaExpli.cc b/Algo/GalerkinContinu/AlgoDynaExplicite/AlgoriDynaExpli.cc index 526ebe6..d29572d 100644 --- a/Algo/GalerkinContinu/AlgoDynaExplicite/AlgoriDynaExpli.cc +++ b/Algo/GalerkinContinu/AlgoDynaExplicite/AlgoriDynaExpli.cc @@ -873,7 +873,7 @@ void AlgoriDynaExpli::Calcul_Equilibre(ParaGlob * paraGlob,LesMaillages * lesMai // calcul des énergies et affichage des balances // 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); - 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 // 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; }; diff --git a/Algo/GalerkinContinu/AlgoDynaExplicite/AlgoriDynaExpli2.cc b/Algo/GalerkinContinu/AlgoDynaExplicite/AlgoriDynaExpli2.cc index 3692621..6e16612 100644 --- a/Algo/GalerkinContinu/AlgoDynaExplicite/AlgoriDynaExpli2.cc +++ b/Algo/GalerkinContinu/AlgoDynaExplicite/AlgoriDynaExpli2.cc @@ -632,7 +632,7 @@ void AlgoriDynaExpli::Calcul_Equilibre2(ParaGlob * paraGlob,LesMaillages * lesMa {// calcul des énergies et affichage des balances // 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); - 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 // 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; }; @@ -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 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); + ,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 // 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; }; diff --git a/Algo/GalerkinContinu/AlgoDynaExplicite/AlgoriDynaExpli_zhai.cc b/Algo/GalerkinContinu/AlgoDynaExplicite/AlgoriDynaExpli_zhai.cc index dae57fc..23938fe 100644 --- a/Algo/GalerkinContinu/AlgoDynaExplicite/AlgoriDynaExpli_zhai.cc +++ b/Algo/GalerkinContinu/AlgoDynaExplicite/AlgoriDynaExpli_zhai.cc @@ -1010,7 +1010,7 @@ void AlgoriDynaExpli_zhai::CalEquilibre(ParaGlob * paraGlob,LesMaillages * lesMa { // calcul des énergies et affichage des balances // 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); - 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 // 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; }; @@ -1628,7 +1628,7 @@ void AlgoriDynaExpli_zhai::Calcul_Equilibre(ParaGlob * paraGlob,LesMaillages * l // calcul des énergies et affichage des balances // 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); - 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 // 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; }; diff --git a/Algo/GalerkinContinu/AlgoDynaExplicite/Algori_chung_lee.cc b/Algo/GalerkinContinu/AlgoDynaExplicite/Algori_chung_lee.cc index 727935c..a5836e0 100644 --- a/Algo/GalerkinContinu/AlgoDynaExplicite/Algori_chung_lee.cc +++ b/Algo/GalerkinContinu/AlgoDynaExplicite/Algori_chung_lee.cc @@ -997,7 +997,7 @@ void Algori_chung_lee::CalEquilibre(ParaGlob * paraGlob,LesMaillages * lesMail, // calcul des énergies et affichage des balances // 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); - 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 // 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; }; @@ -1683,7 +1683,7 @@ void Algori_chung_lee::Calcul_Equilibre(ParaGlob * paraGlob,LesMaillages * lesMa // calcul des énergies et affichage des balances // 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); - 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 // 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; }; diff --git a/Algo/GalerkinContinu/AlgoDynaExplicite/Algori_relax_dyna.cc b/Algo/GalerkinContinu/AlgoDynaExplicite/Algori_relax_dyna.cc index f711814..ed0ae25 100644 --- a/Algo/GalerkinContinu/AlgoDynaExplicite/Algori_relax_dyna.cc +++ b/Algo/GalerkinContinu/AlgoDynaExplicite/Algori_relax_dyna.cc @@ -1516,6 +1516,18 @@ void AlgoriRelaxDyna::InitAlgorithme(ParaGlob * paraGlob,LesMaillages * lesMail, 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------------ // 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 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); + ,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 // 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; }; diff --git a/Algo/GalerkinContinu/AlgoDynaExplicite/Algori_tchamwa.cc b/Algo/GalerkinContinu/AlgoDynaExplicite/Algori_tchamwa.cc index e49f70b..c3e915a 100644 --- a/Algo/GalerkinContinu/AlgoDynaExplicite/Algori_tchamwa.cc +++ b/Algo/GalerkinContinu/AlgoDynaExplicite/Algori_tchamwa.cc @@ -1630,7 +1630,7 @@ void AlgoriTchamwa::CalEquilibre(ParaGlob * paraGlob,LesMaillages * lesMail // calcul des énergies et affichage des balances // 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); - 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 // 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; }; diff --git a/Algo/GalerkinContinu/AlgoDynaExplicite/Algori_tchamwa2.cc b/Algo/GalerkinContinu/AlgoDynaExplicite/Algori_tchamwa2.cc index 836dbc1..c7f8c09 100644 --- a/Algo/GalerkinContinu/AlgoDynaExplicite/Algori_tchamwa2.cc +++ b/Algo/GalerkinContinu/AlgoDynaExplicite/Algori_tchamwa2.cc @@ -561,7 +561,7 @@ void AlgoriTchamwa::Calcul_Equilibre2(ParaGlob * paraGlob,LesMaillages * lesMail // calcul des énergies et affichage des balances // 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); - 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 // 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; }; @@ -1126,7 +1126,7 @@ void AlgoriTchamwa::Calcul_Equilibre4(ParaGlob * paraGlob,LesMaillages * lesMail // calcul des énergies et affichage des balances // 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); - 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 // 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; }; diff --git a/Algo/GalerkinContinu/AlgoDynaImplicite/AlgoriNewmark2.cc b/Algo/GalerkinContinu/AlgoDynaImplicite/AlgoriNewmark2.cc index 582dbee..f4a00f4 100644 --- a/Algo/GalerkinContinu/AlgoDynaImplicite/AlgoriNewmark2.cc +++ b/Algo/GalerkinContinu/AlgoDynaImplicite/AlgoriNewmark2.cc @@ -971,7 +971,7 @@ void AlgoriNewmark::CalEquilibre(ParaGlob * paraGlob,LesMaillages * lesMail // calcul des énergies et affichage des balances Algori::Cal_Transfert_delta_et_var_X(max_delta_X,max_var_delta_X); 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) { cout << "\n --- |max_var_DeltaDdl|= "<< max_var_delta_X << " , |max_deltaDdl|= " << max_delta_X << flush;}; diff --git a/Algo/GalerkinContinu/AlgoMixte/AlgoriMixte.cc b/Algo/GalerkinContinu/AlgoMixte/AlgoriMixte.cc index 50bf447..2dfb7d5 100755 --- a/Algo/GalerkinContinu/AlgoMixte/AlgoriMixte.cc +++ b/Algo/GalerkinContinu/AlgoMixte/AlgoriMixte.cc @@ -801,7 +801,7 @@ void AlgoristatExpli::Calcul_Equilibre(ParaGlob * paraGlob,LesMaillages * lesMai // calcul des énergies et affichage des balances // 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); - 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 // 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; }; diff --git a/Algo/GalerkinContinu/AlgoStatiques/AlgoriNonDyna2.cc b/Algo/GalerkinContinu/AlgoStatiques/AlgoriNonDyna2.cc index 36aa3a8..04b5148 100644 --- a/Algo/GalerkinContinu/AlgoStatiques/AlgoriNonDyna2.cc +++ b/Algo/GalerkinContinu/AlgoStatiques/AlgoriNonDyna2.cc @@ -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 // en tenant compte éventuellement du contact (non decollement) decol = false systématiquement si pas de contact diff --git a/Algo/GalerkinContinu/AlgoStatiques/ImpliNonDynaCont.cc b/Algo/GalerkinContinu/AlgoStatiques/ImpliNonDynaCont.cc index 6ed2948..07258e6 100644 --- a/Algo/GalerkinContinu/AlgoStatiques/ImpliNonDynaCont.cc +++ b/Algo/GalerkinContinu/AlgoStatiques/ImpliNonDynaCont.cc @@ -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 Algori::Cal_Transfert_delta_et_var_X(max_delta_X,max_var_delta_X); 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 // en tenant compte du contact (non decollement) if (Convergence(aff_iteration,last_var_ddl_max,vglobaal,maxPuissExt,maxPuissInt,maxReaction,compteur,arret) diff --git a/Chargement/Charge.cc b/Chargement/Charge.cc index 5a14fb7..5dc3446 100644 --- a/Chargement/Charge.cc +++ b/Chargement/Charge.cc @@ -1155,14 +1155,7 @@ void Charge::Lecture_base_info(istream& entr,const int cas,LesReferences& ,LesCo istream& entr = *entrons; // on redéfinit ent #endif - entr >> toto ; // entête - #ifdef MISE_AU_POINT - if (toto != "****chargement") - {cout << "\n *** erreur en lecture, on attendait ****chargement " - << " et on a lue " << toto; - Sortie(1); - }; - #endif + entr >> toto ; // entête dans le cas non MPI // 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 #ifndef UTILISATION_MPI @@ -1175,12 +1168,20 @@ void Charge::Lecture_base_info(istream& entr,const int cas,LesReferences& ,LesCo }; #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) { case 1 : // ------- on récupère tout ------------------------- { if (ParaGlob::NiveauImpression() >= 6) cout << "== lecture du chargement \n"; - string toto;entr >> toto ; // lecture en tête string type; entr >> type; // lecture du premier type while (type != "type_de_charge") { if (type == "force_volumique") @@ -1387,15 +1388,15 @@ void Charge::Ecriture_base_info(ostream& sort,const int cas) #ifdef UTILISATION_MPI // retour de la taille globale des sorties retardées // concernant les sorties sur .BI -int Charge::Taille_buffer_sortie_BI() - {int taille_totale = 0; // init +MPI_Offset Charge::Taille_buffer_sortie_BI() + {MPI_Offset taille_totale = 0; // init int proc_en_cours = ParaGlob::Monde()->rank(); if (proc_en_cours == 0) // partie dédiée proc 0 {// 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(); // 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; }; // retour diff --git a/Chargement/Charge.h b/Chargement/Charge.h index 0f9cddf..abb34e1 100644 --- a/Chargement/Charge.h +++ b/Chargement/Charge.h @@ -325,7 +325,7 @@ class Charge #ifdef UTILISATION_MPI // retour de la taille globale des sorties retardées // 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 // 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); diff --git a/General/Projet2.cc b/General/Projet2.cc index 6e01527..95edd32 100644 --- a/General/Projet2.cc +++ b/General/Projet2.cc @@ -88,6 +88,13 @@ 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 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 if (algori->ExisteDonneesExternes()) LectureDonneesExternes(); diff --git a/Lecture/UtilLecture.h b/Lecture/UtilLecture.h index 7c6620e..fd3207c 100644 --- a/Lecture/UtilLecture.h +++ b/Lecture/UtilLecture.h @@ -484,7 +484,17 @@ class UtilLecture friend istream & operator >> (istream & entree, Position_BI& a); // surcharge de l'operator d'ecriture 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 + void serialize(Archive & ar, const unsigned int version) + { ar & num_incr; ar & position; } + #endif + public : #ifndef UTILISATION_MPI Position_BI(streampos posi=(ios::beg), int num = 0) : // constructeur @@ -559,13 +569,13 @@ class UtilLecture #else MPI_File ent_MPI_BI ; // pointeur fichier commun 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é 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 // = 2 la lecture est en cours et le buffer est rempli - int taille_actuelle_buffer; // " " - int dernier_posi_dans_buffer; // " " + MPI_Offset taille_actuelle_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 sort_MPI_PI ; // " " diff --git a/Lecture/nouvelle_enreg.cc b/Lecture/nouvelle_enreg.cc index df50bda..15e0de6 100644 --- a/Lecture/nouvelle_enreg.cc +++ b/Lecture/nouvelle_enreg.cc @@ -401,7 +401,11 @@ void UtilLecture::Nouvel_enregCvisu () #endif // 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 if (taille_actuelle_buffer < taille_buffer_Nouvelle_enreg_MPI) {pas_fin_fichier = false;} @@ -438,7 +442,11 @@ void UtilLecture::Nouvel_enregCvisu () #endif // 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 if (ierr_lecture) {cout << "\n *** erreur d'acces a MPI_Get_count , stop Herezh " diff --git a/Lecture/utilLecture2.cc b/Lecture/utilLecture2.cc index 05e7807..547bc2f 100644 --- a/Lecture/utilLecture2.cc +++ b/Lecture/utilLecture2.cc @@ -160,7 +160,7 @@ void UtilLecture::Ouverture_base_info(string type_entree) << "\n UtilLecture::Ouverture_base_info() " << endl; 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 MPI_Status 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; // 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 - int taille_buf = buf_inter.size(); + MPI_Offset taille_buf = buf_inter.size(); MPI_Status status; // pour le retour if (num_cpu_en_cours_BI == 0) {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) #ifdef UTILISATION_MPI // 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 {inter.resize(liste_posi_BI.size()); list::iterator iter,iter_fin = liste_posi_BI.end(); int i=0; 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 broadcast(*ParaGlob::Monde(), inter, 0); @@ -332,7 +334,7 @@ void UtilLecture::Ouverture_base_info(string type_entree) {liste_posi_BI.clear(); int taille = inter.size(); for (int i=0;i> 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 // en MPI, on passe les offsets et tailles #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) 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 // autre part, dans LesContacts par exemple diff --git a/Parametres/EnteteParaGlob.h b/Parametres/EnteteParaGlob.h index 65849cb..517ceb8 100644 --- a/Parametres/EnteteParaGlob.h +++ b/Parametres/EnteteParaGlob.h @@ -41,7 +41,7 @@ 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::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 int ParaGlob::nb_diggit_double_calcul= 17; // nombre de chiffre significatifs utilisé pour // l'affichage des double précision pour l'archivage diff --git a/Parametres/ParaGlob.cc b/Parametres/ParaGlob.cc index 7ee8db8..f4a6746 100644 --- a/Parametres/ParaGlob.cc +++ b/Parametres/ParaGlob.cc @@ -552,8 +552,8 @@ void ParaGlob::Ecriture_base_info(ostream& sort,const int cas) // retour de la taille globale des sorties retardées // concernant les sorties sur .BI -int ParaGlob::Taille_buffer_sortie_BI() - { int taille =0; +MPI_Offset ParaGlob::Taille_buffer_sortie_BI() + { MPI_Offset taille =0; taille += 43; // écriture de buf_inter2 taille += 57; // écriture de buf_inter1 taille += taille_buffer_ioBI_MPI; // écriture du buffer diff --git a/Parametres/ParaGlob.h b/Parametres/ParaGlob.h index 1f53c7f..6fcae25 100644 --- a/Parametres/ParaGlob.h +++ b/Parametres/ParaGlob.h @@ -292,7 +292,7 @@ class ParaGlob void Ecriture_base_info(MPI_File& sort,const int cas); // retour de la taille globale des sorties retardées // concernant les sorties sur .BI - int Taille_buffer_sortie_BI(); + MPI_Offset Taille_buffer_sortie_BI(); #endif diff --git a/Tableaux/Tableau_T.h b/Tableaux/Tableau_T.h index dd518ca..958e25d 100644 --- a/Tableaux/Tableau_T.h +++ b/Tableaux/Tableau_T.h @@ -546,7 +546,7 @@ const T Tableau::val_const(int i) const #ifdef MISE_AU_POINT if ( (i<1) || (i>taille) ) { 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 << " "; Sortie(1); }; @@ -567,7 +567,7 @@ const T& Tableau::ref_const(int i) const #ifdef MISE_AU_POINT if ( (i<1) || (i>taille) ) { 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 << " "; Sortie(1); }; diff --git a/Util/Sortie.cc b/Util/Sortie.cc index 45a5d98..d290f24 100644 --- a/Util/Sortie.cc +++ b/Util/Sortie.cc @@ -43,8 +43,8 @@ void Sortie(int n) // dans le cas de la mise au point // #ifdef MISE_AU_POINT if (nombre_de_fois_ou_on_appel_sortie == 0) - {if (fr){cout << "\n passage dans la methode Sortie \n ";} - else {cout << "\n call to the method Sortie \n ";} + {if (fr){cerr << "\n passage dans la methode Sortie \n ";} + else {cerr << "\n call to the method Sortie \n ";} }; // #endif // 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 if (n > 0) {if (fr) - { cout << "\n *************************************************************** " + { cerr << "\n *************************************************************** " << "\n ** arret apres une erreur ** " << "\n ***************************************************************\n "; } else - { cout << "\n *************************************************************** " + { cerr << "\n *************************************************************** " << "\n ** stop after an error ** " << "\n ***************************************************************\n "; };