V 7.046 : ajouts, corrctions et modifications : prise en compte des types MPI_Offset
This commit is contained in:
parent
e9f8348952
commit
944e1ec548
27 changed files with 110 additions and 66 deletions
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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; };
|
||||
|
|
|
@ -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; };
|
||||
|
|
|
@ -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; };
|
||||
|
|
|
@ -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; };
|
||||
|
|
|
@ -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; };
|
||||
|
|
|
@ -1517,6 +1517,18 @@ void AlgoriRelaxDyna::InitAlgorithme(ParaGlob * paraGlob,LesMaillages * lesMail,
|
|||
};
|
||||
};
|
||||
|
||||
//// 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
|
||||
// dans le cas ou un incrément différent de 0 est demandé -> seconde lecture à l'incrément
|
||||
|
@ -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; };
|
||||
|
|
|
@ -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; };
|
||||
|
|
|
@ -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; };
|
||||
|
|
|
@ -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;};
|
||||
|
|
|
@ -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; };
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -484,6 +484,16 @@ 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<class Archive>
|
||||
void serialize(Archive & ar, const unsigned int version)
|
||||
{ ar & num_incr; ar & position; }
|
||||
#endif
|
||||
|
||||
public :
|
||||
#ifndef UTILISATION_MPI
|
||||
|
@ -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 ; // " "
|
||||
|
|
|
@ -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 "
|
||||
|
|
|
@ -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<Position_BI>::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<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);
|
||||
};
|
||||
};
|
||||
|
@ -497,7 +499,7 @@ void UtilLecture::Fermeture_base_info()
|
|||
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
|
||||
|
||||
int ierr = MPI_File_write(sort_MPI_PI,buf_inter.c_str(),taille_buf,MPI_CHAR,&status);
|
||||
|
|
|
@ -2981,13 +2981,6 @@ void LesCondLim::Lecture_base_info(istream& ent,const int cas,LesReferences& ,Le
|
|||
|
||||
// lecture du nombre de maillage total
|
||||
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
|
||||
// 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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -546,7 +546,7 @@ const T Tableau<T>::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<T>::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);
|
||||
};
|
||||
|
|
|
@ -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 ";
|
||||
};
|
||||
|
|
Loading…
Add table
Reference in a new issue