introduction du main du programme Herezh++ et de la classe principale: "Projet"
This commit is contained in:
parent
39b3d7e234
commit
91879f296d
5 changed files with 2316 additions and 0 deletions
883
General/Projet.cc
Normal file
883
General/Projet.cc
Normal file
|
@ -0,0 +1,883 @@
|
|||
|
||||
// This file is part of the Herezh++ application.
|
||||
//
|
||||
// The finite element software Herezh++ is dedicated to the field
|
||||
// of mechanics for large transformations of solid structures.
|
||||
// It is developed by Gérard Rio (APP: IDDN.FR.010.0106078.000.R.P.2006.035.20600)
|
||||
// INSTITUT DE RECHERCHE DUPUY DE LÔME (IRDL) <https://www.irdl.fr/>.
|
||||
//
|
||||
// Herezh++ is distributed under GPL 3 license ou ultérieure.
|
||||
//
|
||||
// Copyright (C) 1997-2021 Université Bretagne Sud (France)
|
||||
// AUTHOR : Gérard Rio
|
||||
// E-MAIL : gerardrio56@free.fr
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License,
|
||||
// or (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
// See the GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
//
|
||||
// For more information, please consult: <https://herezh.irdl.fr/>.
|
||||
|
||||
|
||||
#include "Projet.h"
|
||||
//#include "AlgoriNonDyna.h"
|
||||
//#include "ImpliNonDynaCont.h"
|
||||
//#include "AlgoriFlambLineaire.h"
|
||||
//#include "AlgoInformations.h"
|
||||
//#include "AlgoUtils.h"
|
||||
//#include "AlgoriDynaExpli.h"
|
||||
//#include "AlgoriNewmark.h"
|
||||
//#include "Algori_chung_lee.h"
|
||||
//#include "AlgoriDynaExpli_zhai.h"
|
||||
//#include "Algori_tchamwa.h"
|
||||
//#include "AlgoUmatAbaqus.h"
|
||||
//#include "AlgoRungeKutta.h"
|
||||
//#include "AlgoBonelli.h"
|
||||
//#include "Algori_relax_dyna.h"
|
||||
//#include "AlgoriCombine.h"
|
||||
#include "CharUtil.h"
|
||||
#include "MotCle.h"
|
||||
#include "Banniere.h"
|
||||
|
||||
// Constructeur par defaut (car les arguments sont par défauts
|
||||
// il y a passage éventuelle d'argument : argc=le nombre d'argument
|
||||
// argv : donne un tableau correspondant de mots clés
|
||||
Projet::Projet (string & retour,int argc, const char * argv[]) :
|
||||
paraGlob(NULL),entreePrinc(NULL),lesMaillages(NULL),algori(NULL)
|
||||
,lesRef(NULL),lesCourbes1D(NULL),lesFonctionsnD(NULL)
|
||||
,lesLoisDeComp(NULL),diversStockage(NULL),charge(NULL)
|
||||
,lesCondLim(NULL),lescontacts(NULL),resultats(NULL)
|
||||
,varExpor(NULL),tabAlgo()
|
||||
,tempsMiseEnDonnees()
|
||||
|
||||
{
|
||||
tempsMiseEnDonnees.Mise_en_route_du_comptage(); // comptage cpu
|
||||
// initialisation par defaut de la classe des utilitaires de lecture
|
||||
// lecture du nom de fichier principal d'entree
|
||||
entreePrinc = new UtilLecture (argc,argv);
|
||||
// dans le cas du mode de demande de renseignement (-help) de UtilLecture -> arrêt
|
||||
if (entreePrinc->Lec_ent_info() == -100)
|
||||
{ cout << "\n *** bizarre: on a lue :\n ";
|
||||
for (int i=0;i< argc;i++)
|
||||
cout << (argv[i]) << " ";
|
||||
cout << "\n*** on ne sait pas quoi faire !! ";
|
||||
retour = "fin"; return;
|
||||
};
|
||||
entreePrinc->OuvrirFichier(); // ouverture du fichier principal
|
||||
int lec_ent_info = entreePrinc->Lec_ent_info();
|
||||
// traitement suivant le type d'entrée de données
|
||||
switch (lec_ent_info)
|
||||
{case -12 : // --------- cas de la construction shema XML d'entrée de données .info ----
|
||||
{ InitConstructionSchemaXml(retour);
|
||||
break;
|
||||
}
|
||||
case -11 : // ------------ cas d'une écriture d'un fichier de commande ----------
|
||||
{ InitConstructionFichierCommande(retour);
|
||||
break;
|
||||
}
|
||||
case 0 : // ------------ cas d'une entrée via un fichier .info ----------
|
||||
{ InitEntreeFichierInfo(retour);
|
||||
break;
|
||||
}
|
||||
case 1 : // ------------ cas d'une entrée via un fichier .base-info ----------
|
||||
{ InitEntreeFichierBaseInfo(retour);
|
||||
break;
|
||||
}
|
||||
default :
|
||||
cout << "\nErreur : valeur incorrecte de lec_ent_info ="
|
||||
<< entreePrinc->Lec_ent_info() << " !\n";
|
||||
cout << "Projet::Projet () " << endl;
|
||||
tempsMiseEnDonnees.Arret_du_comptage(); // fin comptage cpu
|
||||
Sortie(1);
|
||||
};
|
||||
tempsMiseEnDonnees.Arret_du_comptage(); // fin comptage cpu
|
||||
};
|
||||
// destructeur
|
||||
Projet::~Projet ()
|
||||
{ if (paraGlob != NULL) delete paraGlob; // parametres globaux
|
||||
if (entreePrinc != NULL) delete entreePrinc; // acces a la lecture du fichier principal
|
||||
if (lesMaillages != NULL) delete lesMaillages; // description des maillages
|
||||
if (algori != NULL) delete algori; // algorithme de calcul
|
||||
if (lesRef != NULL) delete lesRef; // references des maillages
|
||||
if (lesCourbes1D != NULL) delete lesCourbes1D; // courbes 1D
|
||||
if (lesFonctionsnD != NULL) delete lesFonctionsnD; // courbes nD
|
||||
if (lesLoisDeComp != NULL) delete lesLoisDeComp; // lois de comportement
|
||||
if (diversStockage != NULL) delete diversStockage; // stockage divers
|
||||
if (charge != NULL) delete charge; // chargement
|
||||
if (lesCondLim != NULL) delete lesCondLim; // conditions limites
|
||||
if (lescontacts != NULL) delete lescontacts; // le contact eventuel
|
||||
if (resultats != NULL) delete resultats; // sortie des resultats
|
||||
if (varExpor != NULL) delete varExpor; // définition des variables a exporter
|
||||
int nbAlgo=tabAlgo.Taille();
|
||||
for (int i=2;i<=nbAlgo;i++)
|
||||
if (tabAlgo(i)!= NULL) delete tabAlgo(i);
|
||||
// fermeture du fichier base info si nécessaire
|
||||
if (algori != NULL)
|
||||
if (algori->Active_sauvegarde())
|
||||
entreePrinc->Fermeture_base_info();
|
||||
};
|
||||
|
||||
// définition d'un fichier de commandes
|
||||
void Projet::Def_fichier_commande(string& )
|
||||
{
|
||||
tempsMiseEnDonnees.Mise_en_route_du_comptage(); // comptage cpu
|
||||
//On va proposer un menu
|
||||
string rep=" ";
|
||||
while ((Minuscules(rep) != "f")&&(Minuscules(rep) != "0"))
|
||||
{
|
||||
try
|
||||
{cin.clear();
|
||||
cout
|
||||
<< "\n [c] -> para tres classique [-] para assez courants "
|
||||
<< "\n (0 ou f) (fin) "
|
||||
<< "\n (1)maillage(s)..........[c] (2)courbes 1D et fonction nD .......[-]"
|
||||
<< "\n (3)loi de comportement..[c] (4)divers stockages 1...............[c] "
|
||||
<< "\n (5)zones contact (6)efforts..........................[c]"
|
||||
<< "\n (7)cond limites cine ..[c] (8)cond limites lineaires "
|
||||
<< "\n (9)divers stockages 2 (10)initialisation .................[-]"
|
||||
<< "\n (11)type de chargement (12)parametres de controle..........[c]"
|
||||
<< "\n (13)type de fin fichier.[c] (14 ou ? ) informations "
|
||||
<< "\n ";
|
||||
// procédure de lecture avec prise en charge d'un retour chariot
|
||||
rep = lect_return_defaut(false,"f");
|
||||
// si la taille de rep == 0 cela veut dire que c'est un retour chariot
|
||||
if (rep.size()==0)
|
||||
{rep = "0";
|
||||
cout << "--> valeur: 0 ";
|
||||
};
|
||||
|
||||
if ((Minuscules(rep) == "f") || (Minuscules(rep) == "0"))// sortie directe
|
||||
break;
|
||||
int num = ChangeEntier(rep);
|
||||
if (Minuscules(rep) == "?")
|
||||
num = 14;
|
||||
bool choix_valide=false;
|
||||
if ((num >= 0)&&(num<=14))
|
||||
{ choix_valide=true; }
|
||||
else { cout << "\n Erreur on attendait un entier entre 0 et 14 !!, "
|
||||
<< "\n redonnez une bonne valeur"
|
||||
<< "\n ou taper f ou 0 pour arreter le programme";
|
||||
choix_valide=false;
|
||||
}
|
||||
switch (num)
|
||||
{ case 0: //pas de sous type
|
||||
{ break;} // normalement cela a déjà été filtré avant
|
||||
case 1: // les maillage
|
||||
{ lesMaillages->Info_commande_lesMaillages(); // def des maillages et des references
|
||||
break;}
|
||||
case 2: // les courbes et fonction
|
||||
{ lesCourbes1D->Info_commande_lesCourbes1D(*entreePrinc); // def des courbes 1D
|
||||
lesFonctionsnD->Info_commande_lesFonctions_nD(*entreePrinc); // def des courbes nD
|
||||
break;}
|
||||
case 3: // les lois de comp
|
||||
{ lesLoisDeComp->Info_commande_lesLoisDeComp(*entreePrinc,*lesRef); // def des lois
|
||||
break;}
|
||||
case 4: // divers stockage 1
|
||||
{ diversStockage->Info_commande_DiversStockage1(*entreePrinc);
|
||||
break;}
|
||||
case 5: // contact
|
||||
{ lescontacts->Info_commande_LesContacts(*entreePrinc);
|
||||
break;}
|
||||
case 6: // les efforts
|
||||
{ charge->Info_commande_LesCharges1(*entreePrinc);
|
||||
break;}
|
||||
case 7: // les conditions limites cinématiques (CL)
|
||||
{ lesCondLim->Info_commande_LesCondLim1(*entreePrinc);
|
||||
break;}
|
||||
case 8: // les conditions limites linéaires (CLL)
|
||||
{ lesCondLim->Info_commande_LesCondLim2(*entreePrinc);
|
||||
break;}
|
||||
case 9: // divers stockage 2
|
||||
{ diversStockage->Info_commande_DiversStockage2(*entreePrinc); // def des lois
|
||||
break;}
|
||||
case 10: // les conditions limites d'initialisation
|
||||
{ lesCondLim->Info_commande_LesCondLim3(*entreePrinc);
|
||||
break;}
|
||||
case 11: // le chargement général
|
||||
{ charge->Info_commande_LesCharges2(*entreePrinc);
|
||||
break;}
|
||||
case 12: // paramètres de contrôle
|
||||
{ algori->Info_commande_ParaAlgoControle(*entreePrinc);
|
||||
break;}
|
||||
case 13: // remonte
|
||||
{ resultats->Info_commande_Resultats(); // def des parametres de gestion de la sortie des resultats
|
||||
break;}
|
||||
default:
|
||||
cout << "\n le cas "<<rep<<" n'est pas encore traite !!, mais cela devrait ce faire sans tarder ";
|
||||
};
|
||||
}
|
||||
catch (ErrSortieFinale)
|
||||
// cas d'une direction voulue vers la sortie
|
||||
// on relance l'interuption pour le niveau supérieur
|
||||
{ ErrSortieFinale toto;
|
||||
throw (toto);
|
||||
}
|
||||
catch (...)//(UtilLecture::ErrNouvelleDonnee erreur)
|
||||
{ cout << "\n Erreur on attendait un des mots clés proposés !!, "
|
||||
<< "\n redonnez une bonne valeur"
|
||||
<< "\n ou taper f ou 0 pour sortir ";
|
||||
};
|
||||
}; //-- fin du while
|
||||
|
||||
// mot clé de fin de fichier
|
||||
ofstream & sort = *(entreePrinc->Commande_pointInfo()); // pour simplifier
|
||||
sort << "\n\n\n _fin_point_info_ \n \n " << endl;
|
||||
// fermeture du fichier .info
|
||||
entreePrinc->fermeture_pointInfo();
|
||||
tempsMiseEnDonnees.Arret_du_comptage(); // fin comptage cpu
|
||||
};
|
||||
|
||||
// définition du fichier schema XML
|
||||
void Projet::Def_fichier_SchemaXML(string& )
|
||||
{ // récupération du flot dans lequel on écrit le schéma
|
||||
ofstream* sort=entreePrinc->ShemaXML();
|
||||
// chaque classe s'occupe de gérer ses sorties de commandes
|
||||
// la sortie s'effectue en plusieurs niveaux: premier niveau les classes de base
|
||||
// niveau 2: les classes complexes etc...
|
||||
for (int niveau=1;niveau<=nombre_maxi_de_type_de_Enum_IO_XML; niveau++)
|
||||
{ // écriture de séparateurs pour une lecture plus simple et def des éléments racines
|
||||
Enum_IO_XML type_traitement_XML = Enum_IO_XML(niveau);
|
||||
// tout d'abord le début de chaque traitement
|
||||
switch (type_traitement_XML)
|
||||
{case XML_TYPE_GLOBAUX :
|
||||
{ (*sort) << "\n <!-- ************************************************ -->"
|
||||
<< "\n <!-- ******** definition des types globaux ******** -->"
|
||||
<< "\n <!-- ************************************************ -->";
|
||||
// pas de définition d'élément particulier
|
||||
break;
|
||||
}
|
||||
case XML_IO_POINT_INFO :
|
||||
{ (*sort) << "\n <!-- ******************************************************** -->"
|
||||
<< "\n <!-- ******** definition fichier de commande .info ******** -->"
|
||||
<< "\n <!-- ******************************************************** -->";
|
||||
// définition d'un élément maître
|
||||
(*sort) << "\n<xs:element name=\"FormatXML_point_info\" >"
|
||||
<< "\n <xs:complexType >"
|
||||
<< "\n <xs:annotation>"
|
||||
<< "\n <xs:documentation> "
|
||||
<< "\n ******************************************************** "
|
||||
<< "\n ******** definition fichier de commande .info ******** "
|
||||
<< "\n ******************************************************** "
|
||||
<< "\n </xs:documentation>"
|
||||
<< "\n </xs:annotation>"
|
||||
<< "\n <xs:sequence>";
|
||||
break;
|
||||
}
|
||||
case XML_IO_POINT_BI :
|
||||
{ (*sort) << "\n <!-- ****************************************************** -->"
|
||||
<< "\n <!-- ******** definition fichier restart .BI ******** -->"
|
||||
<< "\n <!-- ****************************************************** -->";
|
||||
// définition d'un élément maître
|
||||
(*sort) << "\n<xs:element name=\"FormatXML_point_BI\" >"
|
||||
<< "\n <xs:complexType >"
|
||||
<< "\n <xs:annotation>"
|
||||
<< "\n <xs:documentation> "
|
||||
<< "\n ******************************************************** "
|
||||
<< "\n ******** definition fichier restart .BI ******** "
|
||||
<< "\n ******************************************************** "
|
||||
<< "\n </xs:documentation>"
|
||||
<< "\n </xs:annotation>"
|
||||
<< "\n <xs:sequence>";
|
||||
break;
|
||||
}
|
||||
case XML_IO_ELEMENT_FINI :
|
||||
{ (*sort) << "\n <!-- ************************************************************** -->"
|
||||
<< "\n <!-- ******** interface pour un element fini particulier ******** -->"
|
||||
<< "\n <!-- ************************************************************** -->";
|
||||
// définition d'un élément maître
|
||||
(*sort) << "\n<xs:element name=\"FormatXML_element_fini\" >"
|
||||
<< "\n <xs:complexType >"
|
||||
<< "\n <xs:annotation>"
|
||||
<< "\n <xs:documentation> "
|
||||
<< "\n ************************************************************** "
|
||||
<< "\n ******** interface pour un element fini particulier ******** "
|
||||
<< "\n ************************************************************** "
|
||||
<< "\n </xs:documentation>"
|
||||
<< "\n </xs:annotation>"
|
||||
<< "\n <xs:sequence>";
|
||||
break;
|
||||
}
|
||||
case XML_ACTION_INTERACTIVE :
|
||||
{ (*sort) << "\n <!-- ************************************************************** -->"
|
||||
<< "\n <!-- ******** interface pour les actions interactives ******** -->"
|
||||
<< "\n <!-- ************************************************************** -->";
|
||||
// définition d'un élément maître
|
||||
(*sort) << "\n<xs:element name=\"FormatXML_element_fini\" >"
|
||||
<< "\n <xs:complexType >"
|
||||
<< "\n <xs:annotation>"
|
||||
<< "\n <xs:documentation> "
|
||||
<< "\n ************************************************************** "
|
||||
<< "\n ******** interface pour les actions interactives ******** "
|
||||
<< "\n ************************************************************** "
|
||||
<< "\n </xs:documentation>"
|
||||
<< "\n </xs:annotation>"
|
||||
<< "\n <xs:sequence>";
|
||||
break;
|
||||
}
|
||||
case XML_STRUCTURE_DONNEE :
|
||||
{ (*sort) << "\n <!-- ************************************************************** -->"
|
||||
<< "\n <!-- ******** interface : structures de donnees internes ******** -->"
|
||||
<< "\n <!-- ************************************************************** -->";
|
||||
// définition d'un élément maître
|
||||
(*sort) << "\n<xs:element name=\"FormatXML_element_fini\" >"
|
||||
<< "\n <xs:complexType >"
|
||||
<< "\n <xs:annotation>"
|
||||
<< "\n <xs:documentation> "
|
||||
<< "\n ************************************************************** "
|
||||
<< "\n ******** interface : structures de donnees internes ******** "
|
||||
<< "\n ************************************************************** "
|
||||
<< "\n </xs:documentation>"
|
||||
<< "\n </xs:annotation>"
|
||||
<< "\n <xs:sequence>";
|
||||
break;
|
||||
}
|
||||
};
|
||||
// ++++++++++++++++ maintenant sortie relatives aux différentes entitées ++++++++++++++++
|
||||
// -- def de la dimension pour une sortie schema XML, def du type global
|
||||
SchemaXML_dim(entreePrinc,type_traitement_XML);
|
||||
varExpor->SchemaXML_VariablesExporters(entreePrinc,type_traitement_XML);
|
||||
// cas de l'ensemble des algorithmes
|
||||
int nb_algo=tabAlgo.Taille();
|
||||
for (int i=1;i<=nb_algo;i++)
|
||||
tabAlgo(i)->SchemaXML_Algori(*sort,type_traitement_XML);
|
||||
// la suite
|
||||
SchemaXML_Type_de_base(*sort,type_traitement_XML); // les types de base
|
||||
lesMaillages->SchemaXML_LesMaillages(*sort,type_traitement_XML); // def des maillages et des references
|
||||
lesCourbes1D->SchemaXML_lesCourbes1D(*sort,type_traitement_XML); // def des courbes 1D
|
||||
lesFonctionsnD->SchemaXML_lesFonctions_nD(*sort,type_traitement_XML); // def des courbes nD
|
||||
/* lesLoisDeComp->SchemaXML_lesLoisDeComp(*entreePrinc,*lesRef); // def des lois
|
||||
diversStockage->SchemaXML_diversStockage1(*entreePrinc,*lesRef); // premiere lecture des stockages divers
|
||||
charge->SchemaXML_charge1(*entreePrinc,*lesRef); // lecture des actions exterieurs de chargement
|
||||
lesCondLim->SchemaXML_lesCondLim1(*entreePrinc,*lesRef); // lecture des ddl bloques
|
||||
diversStockage->SchemaXML_diversStockage2(*entreePrinc,*lesRef); // seconde lecture du stockage divers
|
||||
lesCondLim->SchemaXML_lesCondLim2(*entreePrinc,*lesRef); // lecture des ddl d'initialisation
|
||||
diversStockage->SchemaXML_diversStockage3(*entreePrinc,*lesRef); // lecture des masses additionnelles
|
||||
charge->SchemaXML_charge2(*entreePrinc); // lecture du type d'application du chargement
|
||||
algori->SchemaXML_algori(*entreePrinc); // lecture des parametres de controle de l'algorithme
|
||||
resultats->SchemaXML_resultats(lesRef); // lecture des parametres de gestion de la sortie des resultats
|
||||
// s'il y a des données externes sur les maillages nécessaires pour l'algorithme
|
||||
if (algori->ExisteDonneesExternes())
|
||||
SchemaXML_algoriLectureDonneesExternes();*/
|
||||
// la fin de chaque traitement
|
||||
switch (type_traitement_XML)
|
||||
{case XML_TYPE_GLOBAUX :
|
||||
{ // pas de définition d'élément particulier
|
||||
break;
|
||||
}
|
||||
case XML_IO_POINT_INFO: case XML_IO_POINT_BI: case XML_IO_ELEMENT_FINI:
|
||||
case XML_ACTION_INTERACTIVE:
|
||||
case XML_STRUCTURE_DONNEE:
|
||||
{ // fin de la définition d'un élément maître
|
||||
(*sort) << "\n </xs:sequence>"
|
||||
<< "\n </xs:complexType>"
|
||||
<< "\n</xs:element>";
|
||||
break;
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
// fin du schema
|
||||
SchemaXML_fin(entreePrinc);
|
||||
};
|
||||
|
||||
//------------------------------------ protegees ----------------------
|
||||
// lecture eventuelle de la dimension sinon elle est mise a trois
|
||||
int Projet::LectureDimension()
|
||||
{ int dim;
|
||||
int lec_ent_info = entreePrinc->Lec_ent_info();
|
||||
// traitement suivant le type d'entrée de données
|
||||
if (lec_ent_info == 0)
|
||||
// ------------ cas d'une entrée via un fichier .info ----------
|
||||
// on regarde si lle mot cle "dimension" existe
|
||||
{if (strstr(entreePrinc->tablcar,"dimension")!=NULL)
|
||||
{string mot;
|
||||
*(entreePrinc->entree) >> mot >> dim;
|
||||
if ((dim!=1) && (dim!=2) && (dim!=3))
|
||||
{ cout << "\n erreur en lecture de la dimension du probleme ";
|
||||
cout << " \n la dimension doit etre 1 ou 2 ou 3 , ici la valeur lue = "
|
||||
<< dim << " !! " << endl;
|
||||
entreePrinc->MessageBuffer("** lecture de la dimension du probleme **");
|
||||
throw (UtilLecture::ErrNouvelleDonnee(-1));
|
||||
Sortie (1);
|
||||
}
|
||||
entreePrinc->NouvelleDonnee(); // pour la prochaine lecture
|
||||
}
|
||||
else
|
||||
{ dim = 3; // par defaut
|
||||
cout << "\n mot clé dimension non trouvé, on retiend la dimension 3 par défaut";
|
||||
}
|
||||
}
|
||||
return dim;
|
||||
};
|
||||
|
||||
// lecture eventuelle du niveau de sortie des commentaires
|
||||
int Projet::LectureNiveauCommentaire()
|
||||
{ int niveau = ParaGlob::NiveauImpression();
|
||||
int lec_ent_info = entreePrinc->Lec_ent_info();
|
||||
// traitement suivant le type d'entrée de données
|
||||
if (lec_ent_info == 0)
|
||||
// ------------ cas d'une entrée via un fichier .info ----------
|
||||
// on regarde si lle mot cle "niveau_commentaire" existe
|
||||
{if (strstr(entreePrinc->tablcar,"niveau_commentaire")!=NULL)
|
||||
{string mot;
|
||||
*(entreePrinc->entree) >> mot >> niveau;
|
||||
entreePrinc->NouvelleDonnee(); // pour la prochaine lecture
|
||||
}
|
||||
}
|
||||
return niveau;
|
||||
};
|
||||
|
||||
|
||||
// -- def de la dimension pour une sortie sur un fichier de commande
|
||||
int Projet::Info_commande_dimension(UtilLecture * entreePrinc)
|
||||
{ int retour;
|
||||
//cout << "\n ";
|
||||
cout << "\n ==> Dimension espace geometrique (defaut 3) : 1 2 ou 3 ? ";
|
||||
string rep; bool choix_valide=false;
|
||||
|
||||
while (!choix_valide)
|
||||
{ rep = "_";
|
||||
int c = std::cin.peek(); // peek character (sans changer le flux !!)
|
||||
if (( c == EOF )||(c=='\n'))
|
||||
{rep = "3";cout << "--> valeur: 3 "; // si c'est return on met "3"
|
||||
c = getchar(); // on lit quand même le caractère
|
||||
}
|
||||
else // sinon on peut lire
|
||||
{std::getline (std::cin,rep);
|
||||
// a priori les prochaines lectures vont utilisées un getline
|
||||
};
|
||||
// si la taille de rep == 0 cela veut aussi dire que c'est un retour chariot
|
||||
if (rep.size()==0)
|
||||
{rep = "3";
|
||||
cout << "--> valeur: 3 ";
|
||||
};
|
||||
|
||||
if (rep == "1") { retour = 1; choix_valide=true;}
|
||||
else if (rep == "2") {retour = 2;choix_valide=true;}
|
||||
else if (rep == "3") {retour = 3;choix_valide=true;}
|
||||
else if (rep == "f") {retour = 3;choix_valide=true;}
|
||||
else if (rep == "fin_prog") Sortie(1);
|
||||
else { cout << "\n Erreur on attendait 1 2 ou 3 !!, redonnez une bonne valeur"
|
||||
<< "\n ou taper fin_prog pour arreter le programme";
|
||||
choix_valide=false;
|
||||
}
|
||||
}
|
||||
// écriture de la dimension
|
||||
ofstream & sort = *(entreePrinc->Commande_pointInfo()); // pour simplifier
|
||||
// // affichage de la banniere sur la sortie passée en argument
|
||||
// Banniere::Sortie_banniere( sort);
|
||||
// // puis affichage de la version
|
||||
// ParaGlob::Sortie_Version(sort); sort << "\n \n";
|
||||
// sort << "\n#######################################################################"
|
||||
// << "\n# fichier de commande #"
|
||||
// << "\n \n \n"
|
||||
// << "# --- commentaire sur l'objet du travail ???"
|
||||
// << "\n \n \n"
|
||||
sort << "\n#----------------------------------------------------"
|
||||
<< "\n# definition de la dimension de l'espace de travail |"
|
||||
<< "\n#----------------------------------------------------"
|
||||
<< "\n dimension " << retour
|
||||
<< endl;
|
||||
return retour;
|
||||
};
|
||||
|
||||
// -- def du niveau de commentaire pour une sortie sur un fichier de commande
|
||||
int Projet::Info_commande_niveauCommentaire(UtilLecture * entreePrinc)
|
||||
{ int retour;
|
||||
//cout << "\n ";
|
||||
cout << "\n ==> Niveau de commentaire souhaitez (defaut 3) : 0 a 10 ? ";
|
||||
string rep; bool choix_valide=false;
|
||||
while (!choix_valide)
|
||||
{ rep = "_";
|
||||
int c = std::cin.peek(); // peek character (sans changer le flux !!)
|
||||
if (( c == EOF )||(c=='\n'))
|
||||
{rep = "3";cout << "--> valeur par defaut : 3 "; // si c'est return on met "3"
|
||||
c = getchar(); // on lit quand même le caractère
|
||||
}
|
||||
else // sinon on peut lire
|
||||
{std::getline (std::cin,rep);
|
||||
// a priori les prochaines lectures vont utilisées un getline
|
||||
};
|
||||
// si la taille de rep == 0 cela veut dire que c'est un retour chariot
|
||||
if (rep.size()==0)
|
||||
{rep = "3";
|
||||
cout << "--> valeur par defaut : 3 ";
|
||||
};
|
||||
try
|
||||
{ if (rep == "fin_prog") {Sortie(1);}
|
||||
else if (rep == "f") {retour = 3;}
|
||||
// sinon
|
||||
else {retour = ChangeEntier(rep);};
|
||||
if ((retour >= 0)&&(retour<=10))
|
||||
choix_valide=true;
|
||||
else { cout << "\n Erreur on attendait un entier entre 0 et 10 !!, "
|
||||
<< "\n redonnez une bonne valeur"
|
||||
<< "\n ou taper fin_prog pour arreter le programme";
|
||||
choix_valide=false;
|
||||
}
|
||||
}
|
||||
catch (ErrSortieFinale)
|
||||
// cas d'une direction voulue vers la sortie
|
||||
// on relance l'interuption pour le niveau supérieur
|
||||
{ ErrSortieFinale toto;
|
||||
throw (toto);
|
||||
}
|
||||
catch (...)//(UtilLecture::ErrNouvelleDonnee erreur)
|
||||
{ cout << "\n Erreur on attendait un entier entre 0 et 10 !!, "
|
||||
<< "\n redonnez une bonne valeur"
|
||||
<< "\n ou taper fin_prog pour arreter le programme";
|
||||
choix_valide=false;
|
||||
}
|
||||
} //-- fin du while
|
||||
// écriture du niveau de commentaire
|
||||
ofstream & sort = *(entreePrinc->Commande_pointInfo()); // pour simplifier
|
||||
sort << "\n#---------------------------------------------------------------"
|
||||
<< "\n# definition facultative du niveau d'impression (entre 0 et 10)|"
|
||||
<< "\n#---------------------------------------------------------------"
|
||||
<< "\n niveau_commentaire " << retour
|
||||
<< endl;
|
||||
return retour;
|
||||
};
|
||||
|
||||
// lecture éventuelle de l'indicateur de version
|
||||
void Projet::LectureVersion()
|
||||
{ if ( (strstr(entreePrinc->tablcar,"version ")!=NULL)
|
||||
|| (strstr(entreePrinc->tablcar,"numero_version ")!=NULL))
|
||||
{ // lecture de la version sur l'entrée passée en argument
|
||||
ParaGlob::Lecture_Version((*(entreePrinc->entree)));
|
||||
entreePrinc->NouvelleDonnee(); // preparation du flot
|
||||
}
|
||||
};
|
||||
|
||||
// lecture éventuelle de l'indicateur de langue
|
||||
void Projet::LectureLangue()
|
||||
{ if (strstr(entreePrinc->tablcar,"lang ")!=NULL)
|
||||
{ // lecture de l'indicateur de langue sur l'entrée passée en argument
|
||||
ParaGlob::Lecture_Langue((*(entreePrinc->entree)));
|
||||
entreePrinc->NouvelleDonnee(); // preparation du flot
|
||||
}
|
||||
};
|
||||
|
||||
// -- def de l'entête pour une sortie schema XML
|
||||
void Projet::SchemaXML_entete(UtilLecture * entreePrinc)
|
||||
{ if (ParaGlob::NiveauImpression() >= 1)
|
||||
cout << "\n entete et dimension ";
|
||||
if (ParaGlob::NiveauImpression() >= 8)
|
||||
cout << " Projet::SchemaXML_entete(...) ";
|
||||
ofstream & sort = *(entreePrinc->ShemaXML()); // récup du fichier
|
||||
// sortie de l'entête
|
||||
sort << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
|
||||
<< "\n<xs:schema " //targetNamespace=\"http:\/\/web.univ-ubs.fr\/lg2m\/rio/Herezh++/schemaXML\""
|
||||
<< "\n xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"" // l'adresse officielle
|
||||
<< "\n version=\""<<ParaGlob::NbVersion()<<"\" "
|
||||
<< "\n xml:lang=\"fr\" >";
|
||||
|
||||
sort << "\n<xs:annotation>"
|
||||
<< "\n <xs:documentation> "
|
||||
<< "\n schema XML genere automatiquement par Herezh++, permettant de dialoguer avec Herezh++"
|
||||
<< "\n ceci en utilisant une syntaxe XML pour l'ensemble des entrees sorties "
|
||||
<< "\n </xs:documentation> "
|
||||
<< "\n</xs:annotation>";
|
||||
// targetNamespace="http://schema.morphon.com/2002/markup"
|
||||
// elementFormDefault="qualified"
|
||||
// xmlns:tns="http://schema.morphon.com/2002/markup">
|
||||
|
||||
};
|
||||
// -- def de la fin pour une sortie schema XML
|
||||
void Projet::SchemaXML_fin(UtilLecture * entreePrinc)
|
||||
{ // écriture de la fin de fichier
|
||||
// récup du fichier
|
||||
ofstream & sort = *(entreePrinc->ShemaXML());
|
||||
sort << "\n</xs:schema>" << endl; // fermeture du schéma
|
||||
// fermeture du fichier
|
||||
entreePrinc->fermetureSchemaXML();
|
||||
};
|
||||
|
||||
// -- def de la dimension pour une sortie schema XML suivant le type d'io
|
||||
void Projet::SchemaXML_dim(UtilLecture * entreePrinc,Enum_IO_XML enuIO_XML)
|
||||
{ // définition de la dimension dans le fichier .info
|
||||
ofstream & sort = *(entreePrinc->ShemaXML()); // récup du fichier
|
||||
// choix en fonction de l'io
|
||||
switch (enuIO_XML)
|
||||
{case XML_TYPE_GLOBAUX: // cas de la sortie du type global
|
||||
{sort << "\n<xs:simpleType name=\"dimensionProbleme\" >"
|
||||
<< "\n <xs:annotation>"
|
||||
<< "\n <xs:documentation> "
|
||||
<< "\n definition de la dimension du probleme 1 2 ou 3"
|
||||
<< "\n </xs:documentation>"
|
||||
<< "\n </xs:annotation>"
|
||||
<< "\n <xs:restriction base=\"xs:positiveInteger\" >"
|
||||
<< "\n <xs:enumeration value=\"1\" />"
|
||||
<< "\n <xs:enumeration value=\"2\" />"
|
||||
<< "\n <xs:enumeration value=\"3\" />"
|
||||
<< "\n </xs:restriction>"
|
||||
<< "\n</xs:simpleType>";
|
||||
break;
|
||||
}
|
||||
default : // pour tous les autres cas on sort un élément pour définir la dimension
|
||||
sort << "\n <xs:element name=\"dimensionDuProbleme\" type=\"dimensionProbleme\" />";
|
||||
};
|
||||
};
|
||||
|
||||
// ---- fonctions d'aides pour le constructeur de Projet ----
|
||||
// démarrage: cas de la construction du schema XML
|
||||
void Projet::InitConstructionSchemaXml(string & retour)
|
||||
{ retour = "def_schema_XML";
|
||||
// les parametres globaux
|
||||
// -- def de l'entête pour une sortie schema XML
|
||||
SchemaXML_entete(entreePrinc);
|
||||
int dim = 3; // par défaut pour renseigner ParaGlob
|
||||
// -- niveau de commentaire
|
||||
int niveau = 5;
|
||||
paraGlob = new ParaGlob (dim) ; // initialisation a la dimension
|
||||
|
||||
// modif éventuelle du niveau de commentaire précédemment lue
|
||||
if (ParaGlob::NiveauImpression() != niveau) paraGlob->Change_niveau_impression(niveau);
|
||||
// def des valeurs des constantes en fonction de la dimension
|
||||
ConstantesTenseur(dim);
|
||||
// def du type de calcul: ici c'est de type DEF_SCHEMA_XML, la méthode le sait
|
||||
// en intérogeant entreePrinc
|
||||
paraGlob->Info_commande_TypeCalcul((UtilLecture&) *entreePrinc);
|
||||
// définition de l'ensemble des algorithmes
|
||||
tabAlgo.Change_taille(13);
|
||||
// par défaut le premier est l'algo courant
|
||||
tabAlgo = Algori::New_tous_les_Algo
|
||||
(paraGlob->Avec_typeDeCalcul(),paraGlob->LesSousTypesDeCalcul()
|
||||
,paraGlob->Avec_soustypeDeCalcul(),(UtilLecture&) *entreePrinc);
|
||||
algori = tabAlgo(1);
|
||||
|
||||
{ /*
|
||||
algori = new AlgoriNonDyna
|
||||
(paraGlob->Avec_typeDeCalcul(),paraGlob->LesSousTypesDeCalcul()
|
||||
,paraGlob->Avec_soustypeDeCalcul(),(UtilLecture&) *entreePrinc);
|
||||
tabAlgo(1)=algori;
|
||||
tabAlgo(2) = new ImpliNonDynaCont
|
||||
(paraGlob->Avec_typeDeCalcul(),paraGlob->LesSousTypesDeCalcul()
|
||||
,paraGlob->Avec_soustypeDeCalcul(),(UtilLecture&) *entreePrinc);
|
||||
tabAlgo(3) = new AlgoriFlambLineaire
|
||||
(paraGlob->Avec_typeDeCalcul(),paraGlob->LesSousTypesDeCalcul()
|
||||
,paraGlob->Avec_soustypeDeCalcul(),(UtilLecture&) *entreePrinc);
|
||||
tabAlgo(4) = new AlgoInformations
|
||||
(paraGlob->Avec_typeDeCalcul(),paraGlob->LesSousTypesDeCalcul()
|
||||
,paraGlob->Avec_soustypeDeCalcul(),(UtilLecture&) *entreePrinc);
|
||||
tabAlgo(5) = new AlgoUtils
|
||||
(paraGlob->Avec_typeDeCalcul(),paraGlob->LesSousTypesDeCalcul()
|
||||
,paraGlob->Avec_soustypeDeCalcul(),(UtilLecture&) *entreePrinc);
|
||||
tabAlgo(6) = new AlgoriDynaExpli
|
||||
(paraGlob->Avec_typeDeCalcul(),paraGlob->LesSousTypesDeCalcul()
|
||||
,paraGlob->Avec_soustypeDeCalcul() ,(UtilLecture&) *entreePrinc);
|
||||
tabAlgo(7) = new AlgoriTchamwa
|
||||
(paraGlob->Avec_typeDeCalcul(),paraGlob->LesSousTypesDeCalcul()
|
||||
,paraGlob->Avec_soustypeDeCalcul() ,(UtilLecture&) *entreePrinc);
|
||||
tabAlgo(8) = new Algori_chung_lee
|
||||
(paraGlob->Avec_typeDeCalcul(),paraGlob->LesSousTypesDeCalcul()
|
||||
,paraGlob->Avec_soustypeDeCalcul() ,(UtilLecture&) *entreePrinc);
|
||||
tabAlgo(9) = new AlgoriDynaExpli_zhai
|
||||
(paraGlob->Avec_typeDeCalcul(),paraGlob->LesSousTypesDeCalcul()
|
||||
,paraGlob->Avec_soustypeDeCalcul() ,(UtilLecture&) *entreePrinc);
|
||||
tabAlgo(10) = new AlgoriNewmark
|
||||
(paraGlob->Avec_typeDeCalcul(),paraGlob->LesSousTypesDeCalcul()
|
||||
,paraGlob->Avec_soustypeDeCalcul() ,(UtilLecture&) *entreePrinc);
|
||||
tabAlgo(11) = new AlgoUmatAbaqus
|
||||
(paraGlob->Avec_typeDeCalcul(),paraGlob->LesSousTypesDeCalcul()
|
||||
,paraGlob->Avec_soustypeDeCalcul() ,(UtilLecture&) *entreePrinc);
|
||||
tabAlgo(12) = new AlgoriRungeKutta
|
||||
(paraGlob->Avec_typeDeCalcul(),paraGlob->LesSousTypesDeCalcul()
|
||||
,paraGlob->Avec_soustypeDeCalcul() ,(UtilLecture&) *entreePrinc);
|
||||
tabAlgo(13) = new AlgoriCombine
|
||||
(paraGlob->Avec_typeDeCalcul(),paraGlob->LesSousTypesDeCalcul()
|
||||
,paraGlob->Avec_soustypeDeCalcul() ,(UtilLecture&) *entreePrinc);
|
||||
*/ };
|
||||
|
||||
// def des classes generales
|
||||
lesRef = new LesReferences ; //def des reference
|
||||
lesCourbes1D = new LesCourbes1D ; // def des courbes1D
|
||||
lesFonctionsnD = new LesFonctions_nD(lesCourbes1D); // def des courbes nD
|
||||
lesMaillages = new LesMaillages (entreePrinc,paraGlob,lesRef);// def des maillages
|
||||
lesLoisDeComp = new LesLoisDeComp ; // def des lois de comportement
|
||||
diversStockage = new DiversStockage ; // stockage divers
|
||||
charge = new Charge ; // chargement
|
||||
lesCondLim = new LesCondLim ; // conditions limites
|
||||
resultats = new Resultats(entreePrinc) ; // sortie des resultats
|
||||
lescontacts = new LesContacts; // les contacts éventuelles
|
||||
cout << "\n !!sortie schema XML: en cours de d\'eveloppement";
|
||||
};
|
||||
|
||||
// démarrage: cas d'une écriture d'un fichier de commande
|
||||
void Projet::InitConstructionFichierCommande(string & retour)
|
||||
{ retour = "def_fichier_commande";
|
||||
// les parametres globaux
|
||||
// -- def exportation de constantes et variables utilisateurs
|
||||
varExpor = new VariablesExporter() ;
|
||||
varExpor->Info_commande_VariablesExporters(entreePrinc);
|
||||
|
||||
// -- def de la dimension
|
||||
int dim = Info_commande_dimension(entreePrinc);
|
||||
// -- niveau de commentaire
|
||||
int niveau = Info_commande_niveauCommentaire(entreePrinc);
|
||||
paraGlob = new ParaGlob (dim) ; // initialisation a la dimension
|
||||
// modif éventuelle du niveau de commentaire précédemment lue
|
||||
if (ParaGlob::NiveauImpression() != niveau) paraGlob->Change_niveau_impression(niveau);
|
||||
// def des valeurs des constantes en fonction de la dimension
|
||||
ConstantesTenseur(dim);
|
||||
// def du type de calcul et éventuellement des sous-types éventuel
|
||||
// indiquant qu'il y a par exemple
|
||||
// un calcul d'erreur, remonté au contrainte, relocation etc...
|
||||
paraGlob->Info_commande_TypeCalcul((UtilLecture&) *entreePrinc);
|
||||
// définition d'un algorithme pour l'affichage des données particulières
|
||||
algori = Algori::New_Agori
|
||||
(paraGlob->TypeCalcul_maitre(),paraGlob->Avec_typeDeCalcul()
|
||||
,paraGlob->LesSousTypesDeCalcul()
|
||||
,paraGlob->Avec_soustypeDeCalcul(),(UtilLecture&) *entreePrinc
|
||||
);
|
||||
|
||||
// def des classes generales
|
||||
lesRef = new LesReferences ; //def des reference
|
||||
lesCourbes1D = new LesCourbes1D ; // def des courbes1D
|
||||
lesFonctionsnD = new LesFonctions_nD(lesCourbes1D); // def des courbes nD
|
||||
lesMaillages = new LesMaillages (entreePrinc,paraGlob,lesRef);// def des maillages
|
||||
lesLoisDeComp = new LesLoisDeComp ; // def des lois de comportement
|
||||
diversStockage = new DiversStockage ; // stockage divers
|
||||
charge = new Charge ; // chargement
|
||||
lesCondLim = new LesCondLim ; // conditions limites
|
||||
resultats = new Resultats(entreePrinc) ; // sortie des resultats
|
||||
lescontacts = new LesContacts; // les contacts éventuelles
|
||||
};
|
||||
|
||||
// démarrage: cas d'une entrée via un fichier .info
|
||||
void Projet::InitEntreeFichierInfo(string & retour)
|
||||
{try
|
||||
{ retour = "calcul_elements_finis";
|
||||
// les parametres globaux
|
||||
// lecture éventuelle de l'indicateur de version
|
||||
entreePrinc->NouvelleDonnee(); // preparation du flot
|
||||
LectureVersion(); // lecture éventuelle du numéro de version
|
||||
LectureLangue(); // lecture éventuelle de l'indicateur de langue
|
||||
// lecture éventuelle de constantes utilisateur
|
||||
// et variables à exporter en grandeur globale
|
||||
varExpor = new VariablesExporter();
|
||||
varExpor->LectureVariablesExporter(entreePrinc);
|
||||
// puis dimension ....
|
||||
int dim = LectureDimension(); // lecture eventuelle de la dimension sinon = 3 par defaut
|
||||
int niveau = LectureNiveauCommentaire(); // lecture eventuelle du niveau de commentaire
|
||||
paraGlob = new ParaGlob (dim) ; // initialisation a la dimension
|
||||
// modif éventuelle du niveau de commentaire précédemment lue
|
||||
if (ParaGlob::NiveauImpression() != niveau) paraGlob->Change_niveau_impression(niveau);
|
||||
// dans le cas où il y a une différence de niveau de version message de warning... non , pas utile !!
|
||||
// insertion et stockage des constantes utilisateur au niveau de ParaGlob
|
||||
// idem pour les variables à exporter
|
||||
varExpor->InsertConstVarUtilisateur_dans_globale();
|
||||
// def des valeurs des constantes internes en fonction de la dimension
|
||||
ConstantesTenseur(dim);
|
||||
// lecture du type de calcul sans modification du flux d'entree
|
||||
// ainsi que lecture d'un sous type éventuel indiquant qu'il y a par exemple
|
||||
// un calcul d'erreur, remonté au contrainte, relocation etc...
|
||||
// lecture du type de calcul sans modification du flux d'entree
|
||||
paraGlob->LecTypeCalcul((UtilLecture&) *entreePrinc) ;
|
||||
// def de l'algorithme
|
||||
algori = Algori::New_Agori
|
||||
(paraGlob->TypeCalcul_maitre(),paraGlob->Avec_typeDeCalcul()
|
||||
,paraGlob->LesSousTypesDeCalcul()
|
||||
,paraGlob->Avec_soustypeDeCalcul(),(UtilLecture&) *entreePrinc
|
||||
);
|
||||
|
||||
// dans le cas où un grand nombre d'information nécessaire pour l'algorithme
|
||||
// est stocké de manière externe sur un fichier
|
||||
// exemple : calcul d'erreur a partir
|
||||
// d'un champ d'information stocké de manière externe sur un fichier
|
||||
// l'acquisition du (ou des) lieu(x) (flot) où sont stocké ces infos est effectuée
|
||||
// ce lieu fait parti des paramètres de l'algorithme
|
||||
//// entreePrinc->NouvelleDonnee();
|
||||
// preparation du flot sur un nouveau mot clé s'il n'est pas déjà sur un mot clé
|
||||
MotCle motCle; // ref aux mots cle
|
||||
while ( !motCle.SimotCle(entreePrinc->tablcar))
|
||||
{entreePrinc->NouvelleDonnee(); };
|
||||
// def de flot externe
|
||||
algori->DefFlotExterne(entreePrinc);
|
||||
|
||||
// appel d'une procedure qui definit un exemplaire de chaque element
|
||||
// pour que l'edition de lien est lieu effectivement
|
||||
// DefElement();
|
||||
// def des classes generales
|
||||
lesRef = new LesReferences ; //def des references
|
||||
lesCourbes1D = new LesCourbes1D ; // def des courbes1D
|
||||
lesFonctionsnD = new LesFonctions_nD(lesCourbes1D); // def des courbes nD
|
||||
lesMaillages = new LesMaillages (entreePrinc,paraGlob,lesRef);// def des maillages
|
||||
lesLoisDeComp = new LesLoisDeComp ; // def des lois de comportement
|
||||
diversStockage = new DiversStockage ; // stockage divers
|
||||
charge = new Charge ; // chargement
|
||||
lesCondLim = new LesCondLim ; // conditions limites
|
||||
resultats = new Resultats(entreePrinc) ; // sortie des resultats
|
||||
lescontacts = new LesContacts; // les contacts éventuelles
|
||||
}
|
||||
catch (UtilLecture::ErrNouvelleDonnee erreur)
|
||||
{ if ( erreur.lecture == 1)
|
||||
{ cout << "\n fin de fichier atteinte ";
|
||||
cout << " Il manque des informations !!!! " << endl;
|
||||
entreePrinc->MessageBuffer("** lecture du type d\'algorithme **");
|
||||
Affiche();
|
||||
Sortie (1);
|
||||
}
|
||||
else if ( erreur.lecture == -1 )
|
||||
{ cout << "\n erreur de lecture, ";
|
||||
// cout << " la derniere ligne lue du fichier est : \n ";
|
||||
// cout << entreePrinc->tablcar << endl;
|
||||
entreePrinc->MessageBuffer("** lecture du type d\'algorithme **");
|
||||
Affiche();
|
||||
Sortie (1);
|
||||
}
|
||||
else
|
||||
{ cout << "\n erreur de lecture inconnue ";
|
||||
// cout << " la derniere ligne lue du fichier est : \n ";
|
||||
// cout << entreePrinc->tablcar << endl;
|
||||
entreePrinc->MessageBuffer("** lecture du type d\'algorithme **");
|
||||
Affiche();
|
||||
Sortie (1);
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
// démarrage: cas d'une entrée via un fichier .base-info
|
||||
void Projet::InitEntreeFichierBaseInfo(string & retour)
|
||||
{ retour = "calcul_elements_finis";
|
||||
// les parametres globaux
|
||||
paraGlob = new ParaGlob () ; // construction par défaut
|
||||
int cas = 1;
|
||||
// lecture éventuelle de variables à exporter en grandeur globale
|
||||
varExpor = new VariablesExporter();
|
||||
varExpor->Lecture_base_info(*(entreePrinc->Ent_BI()),cas);
|
||||
// lecture de la dimension et du type de calcul
|
||||
paraGlob->Lecture_base_info(*(entreePrinc->Ent_BI()),cas);
|
||||
int dim = paraGlob->Dimension (); // récup de la dimension
|
||||
// def des valeurs des constantes en fonction de la dimension
|
||||
ConstantesTenseur(dim);
|
||||
// def de l'algorithme
|
||||
algori = Algori::New_Agori
|
||||
(paraGlob->TypeCalcul_maitre(),paraGlob->Avec_typeDeCalcul()
|
||||
,paraGlob->LesSousTypesDeCalcul()
|
||||
,paraGlob->Avec_soustypeDeCalcul(),(UtilLecture&) *entreePrinc
|
||||
);
|
||||
// def des classes generales
|
||||
lesRef = new LesReferences ; //def des reference
|
||||
lesCourbes1D = new LesCourbes1D ; // def des courbes1D
|
||||
lesFonctionsnD = new LesFonctions_nD(lesCourbes1D); // def des courbes nD
|
||||
lesMaillages = new LesMaillages (entreePrinc,paraGlob,lesRef);// def des maillages
|
||||
lesLoisDeComp = new LesLoisDeComp ; // def des lois de comportement
|
||||
diversStockage = new DiversStockage ; // stockage divers
|
||||
charge = new Charge ; // chargement
|
||||
lesCondLim = new LesCondLim ; // conditions limites
|
||||
resultats = new Resultats(entreePrinc) ; // sortie des resultats
|
||||
lescontacts = new LesContacts; // les contacts éventuelles
|
||||
};
|
||||
|
||||
|
||||
|
222
General/Projet.h
Normal file
222
General/Projet.h
Normal file
|
@ -0,0 +1,222 @@
|
|||
|
||||
// This file is part of the Herezh++ application.
|
||||
//
|
||||
// The finite element software Herezh++ is dedicated to the field
|
||||
// of mechanics for large transformations of solid structures.
|
||||
// It is developed by Gérard Rio (APP: IDDN.FR.010.0106078.000.R.P.2006.035.20600)
|
||||
// INSTITUT DE RECHERCHE DUPUY DE LÔME (IRDL) <https://www.irdl.fr/>.
|
||||
//
|
||||
// Herezh++ is distributed under GPL 3 license ou ultérieure.
|
||||
//
|
||||
// Copyright (C) 1997-2021 Université Bretagne Sud (France)
|
||||
// AUTHOR : Gérard Rio
|
||||
// E-MAIL : gerardrio56@free.fr
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License,
|
||||
// or (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
// See the GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
//
|
||||
// For more information, please consult: <https://herezh.irdl.fr/>.
|
||||
|
||||
/************************************************************************
|
||||
* *
|
||||
* DATE: 15/01/97 *
|
||||
* $ *
|
||||
* AUTEUR: G RIO (mailto:gerardrio56@free.fr) *
|
||||
* $ *
|
||||
* PROJET: Herezh++ *
|
||||
* $ *
|
||||
************************************************************************
|
||||
* CLASSE: Projet *
|
||||
* $ *
|
||||
* BUT: definition des operations de haut niveau : *
|
||||
* Lecture, Calcul, Sortie des Resultats. *
|
||||
* $ *
|
||||
* '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' * *
|
||||
* VERIFICATION: *
|
||||
* *
|
||||
* ! date ! auteur ! but ! *
|
||||
* ------------------------------------------------------------ *
|
||||
* ! ! ! ! *
|
||||
* $ *
|
||||
* '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' *
|
||||
* MODIFICATIONS:
|
||||
* *
|
||||
* ! date ! auteur ! but ! *
|
||||
* ------------------------------------------------------------ *
|
||||
* *
|
||||
* $ *
|
||||
* *
|
||||
************************************************************************/
|
||||
#ifndef PROJET_H
|
||||
#define PROJET_H
|
||||
#include <iostream>
|
||||
//#include "Debug.h"
|
||||
#ifndef ENLINUX_STREAM
|
||||
#include <sstream> // pour le flot en memoire centrale
|
||||
#else
|
||||
#include <strstream> // pour le flot en memoire centrale
|
||||
#endif
|
||||
#include "UtilLecture.h"
|
||||
#include "LesMaillages.h"
|
||||
#include "ParaGlob.h"
|
||||
// pour la definition de nouveaux tenseurs
|
||||
#include "NevezTenseur.h"
|
||||
// "DefValConsTens.h"
|
||||
// est a placer dans le fichier qui defini les valeurs des constantes
|
||||
// des tenseurs
|
||||
# include "DefValConsTens.h"
|
||||
|
||||
#include "Algori.h"
|
||||
#include "LesReferences.h"
|
||||
#include "LesLoisDeComp.h"
|
||||
#include "LesCourbes1D.h"
|
||||
#include "LesFonctions_nD.h"
|
||||
#include "DiversStockage.h"
|
||||
#include "Charge.h"
|
||||
#include "LesCondLim.h"
|
||||
#include "Resultats.h"
|
||||
#include "LesContacts.h"
|
||||
#include "Enum_IO_XML.h"
|
||||
#include "VariablesExporter.h"
|
||||
|
||||
//------------------------------------------------------------------
|
||||
//! definition des operations de haut niveau : Lecture, Calcul, Sortie des Resultats.
|
||||
//------------------------------------------------------------------
|
||||
/// \author Gérard Rio
|
||||
/// \version 1.0
|
||||
/// \date 15/01/97
|
||||
|
||||
|
||||
class Projet
|
||||
{
|
||||
public:
|
||||
// -------------- constructeurs ------------------ :
|
||||
// défaut inutilisable
|
||||
Projet () {cout << "\n erreur constructeur de Projet"; Sortie(1);};
|
||||
|
||||
// ++ le constructeur officiel ++
|
||||
// il y a passage éventuelle d'argument : argc=le nombre d'argument
|
||||
// argv : donne un tableau correspondant de mots clés
|
||||
Projet (string& retour,int argc=0, const char * argv[] = NULL);
|
||||
// -------------- destructeur ------------------ :
|
||||
~Projet ();
|
||||
// -------------- methodes ------------------ :
|
||||
// lecture initiale des informations
|
||||
void Lecture();
|
||||
// lectures secondaires éventuelles: ramène true s'il y a effectivement
|
||||
// une lecture secondaire, qui donc modifie la lecture initiale
|
||||
bool Lecture_secondaire();
|
||||
|
||||
// calculs
|
||||
void Calcul ();
|
||||
|
||||
// type de calcul
|
||||
EnumTypeCalcul TypeDeCalcul() const {return algori->TypeDeCalcul();};
|
||||
|
||||
// sortie des resultats
|
||||
void SortieDesResultats ();
|
||||
|
||||
// visualisation (éventuelle)
|
||||
void Visualisation_interactive ();
|
||||
|
||||
// définition d'un fichier de commandes
|
||||
void Def_fichier_commande(string& retour);
|
||||
|
||||
// définition du fichier schema XML
|
||||
void Def_fichier_SchemaXML(string& );
|
||||
|
||||
// fermeture des fichiers de visualisation liés au projet
|
||||
void FermetureFichiersVisualisation();
|
||||
|
||||
// sortie sur fichier des temps cpu
|
||||
// retourne un pointeur sur UtilLecture pour la récupération du fichier
|
||||
// de temps, qui peut ainsi être utilisé par la méthode appelant
|
||||
UtilLecture * Sortie_temps_cpu();
|
||||
|
||||
// def du fichier des temps cpu
|
||||
// puis retourne un pointeur sur UtilLecture pour la récupération du fichier
|
||||
// de temps, qui peut ainsi être utilisé par la méthode appelant
|
||||
UtilLecture * Def_sortie_temps_cpu();
|
||||
|
||||
// une méthode qui a pour objectif de terminer tous les comptages, utile
|
||||
// dans le cas d'un arrêt impromptu
|
||||
void Arret_du_comptage_CPU();
|
||||
|
||||
private :
|
||||
|
||||
// VARIABLES PROTEGEES :
|
||||
ParaGlob * paraGlob; // parametres globaux
|
||||
UtilLecture * entreePrinc; // acces a la lecture du fichier principal
|
||||
LesMaillages * lesMaillages; // description des maillages
|
||||
Algori* algori; // algorithme de calcul
|
||||
LesReferences* lesRef; // references des maillages
|
||||
LesCourbes1D* lesCourbes1D; // courbes 1D
|
||||
LesFonctions_nD* lesFonctionsnD; // les fonctions multi-dimensionnelles
|
||||
LesLoisDeComp* lesLoisDeComp; // lois de comportement
|
||||
DiversStockage* diversStockage; // stockage divers
|
||||
Charge* charge; // chargement
|
||||
LesCondLim* lesCondLim; // conditions limites
|
||||
LesContacts* lescontacts; // le contact eventuel
|
||||
Resultats* resultats; // sortie des resultats
|
||||
VariablesExporter* varExpor; // variables exportées globalement
|
||||
|
||||
Tableau <Algori* > tabAlgo; // pour le schema XML
|
||||
|
||||
Temps_CPU_HZpp tempsMiseEnDonnees; // TempsCpu
|
||||
|
||||
// METHODES PROTEGEES :
|
||||
// lecture eventuelle de la dimension sinon elle est mise a trois
|
||||
int LectureDimension();
|
||||
// lecture eventuelle du niveau de sortie des commentaires
|
||||
int LectureNiveauCommentaire();
|
||||
// affichage de toutes les informations lue
|
||||
void Affiche() const ;
|
||||
// procedure qui definit un exemplaire de chaque element
|
||||
// pour que l'edition de lien est lieu effectivement
|
||||
// void DefElement();
|
||||
|
||||
// lecture des données externes pour chaque entitée gérée par le projet
|
||||
// type indique le type de données externes à lire
|
||||
void LectureDonneesExternes();
|
||||
|
||||
|
||||
// -- def de la dimension pour une sortie sur un fichier de commande
|
||||
int Info_commande_dimension(UtilLecture * entreePrinc);
|
||||
// -- def du niveau de commentaire pour une sortie sur un fichier de commande
|
||||
int Info_commande_niveauCommentaire(UtilLecture * entreePrinc);
|
||||
|
||||
// -- def de l'entête pour une sortie schema XML
|
||||
void SchemaXML_entete(UtilLecture * entreePrinc);
|
||||
// -- def de la fin pour une sortie schema XML
|
||||
void SchemaXML_fin(UtilLecture * entreePrinc);
|
||||
// -- def de la dimension pour une sortie schema XML suivant le type d'io
|
||||
void SchemaXML_dim(UtilLecture * entreePrinc,Enum_IO_XML enuIO_XML);
|
||||
// sortie du schemaXML: en fonction de enu
|
||||
// ceci pour tous les types de base
|
||||
void SchemaXML_Type_de_base(ofstream& sort,const Enum_IO_XML enu);
|
||||
|
||||
void LectureVersion(); // lecture éventuelle de l'indicateur de version
|
||||
void LectureLangue(); // lecture éventuelle de l'indicateur de langue
|
||||
|
||||
// ---- fonctions d'aides pour le constructeur de Projet ----
|
||||
// démarrage: cas de la construction du schema XML
|
||||
void InitConstructionSchemaXml(string & retour);
|
||||
// démarrage: cas d'une écriture d'un fichier de commande
|
||||
void InitConstructionFichierCommande(string & retour);
|
||||
// démarrage: cas d'une entrée via un fichier .info
|
||||
void InitEntreeFichierInfo(string & retour);
|
||||
// démarrage: cas d'une entrée via un fichier .base-info
|
||||
void InitEntreeFichierBaseInfo(string & retour);
|
||||
};
|
||||
|
||||
#endif
|
689
General/Projet2.cc
Normal file
689
General/Projet2.cc
Normal file
|
@ -0,0 +1,689 @@
|
|||
|
||||
// This file is part of the Herezh++ application.
|
||||
//
|
||||
// The finite element software Herezh++ is dedicated to the field
|
||||
// of mechanics for large transformations of solid structures.
|
||||
// It is developed by Gérard Rio (APP: IDDN.FR.010.0106078.000.R.P.2006.035.20600)
|
||||
// INSTITUT DE RECHERCHE DUPUY DE LÔME (IRDL) <https://www.irdl.fr/>.
|
||||
//
|
||||
// Herezh++ is distributed under GPL 3 license ou ultérieure.
|
||||
//
|
||||
// Copyright (C) 1997-2021 Université Bretagne Sud (France)
|
||||
// AUTHOR : Gérard Rio
|
||||
// E-MAIL : gerardrio56@free.fr
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License,
|
||||
// or (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
// See the GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
//
|
||||
// For more information, please consult: <https://herezh.irdl.fr/>.
|
||||
|
||||
|
||||
#include "Projet.h"
|
||||
#include "AlgoriNonDyna.h"
|
||||
#include "ImpliNonDynaCont.h"
|
||||
#include "AlgoriFlambLineaire.h"
|
||||
#include "AlgoInformations.h"
|
||||
#include "AlgoUtils.h"
|
||||
#include "AlgoriDynaExpli.h"
|
||||
#include "AlgoriNewmark.h"
|
||||
#include "Algori_chung_lee.h"
|
||||
#include "AlgoriDynaExpli_zhai.h"
|
||||
#include "Algori_tchamwa.h"
|
||||
#include "AlgoriCombine.h"
|
||||
#include "CharUtil.h"
|
||||
#include "MotCle.h"
|
||||
#include "Banniere.h"
|
||||
// les types de bases
|
||||
#include "Coordonnee.h"
|
||||
#include "Coordonnee1.h"
|
||||
#include "Coordonnee2.h"
|
||||
#include "Coordonnee3.h"
|
||||
// handler d'exception
|
||||
#include "Handler_exception.h"
|
||||
|
||||
|
||||
|
||||
// lecture initiale des donnees
|
||||
void Projet::Lecture ()
|
||||
{tempsMiseEnDonnees.Mise_en_route_du_comptage(); // comptage cpu
|
||||
bool fr = ParaGlob::Francais(); // pour simplifier
|
||||
try
|
||||
{ //il y a deux types d'entrée de donnée soit via un fichier info
|
||||
// soir via via base info
|
||||
int lec_ent_info = entreePrinc->Lec_ent_info();
|
||||
switch (lec_ent_info)
|
||||
{case 0 : // ------- lecture dans le fichier info -----------------
|
||||
{
|
||||
// il s'agit des données initiales. Par exemple si l'on veut effectuer un restart
|
||||
// celui-ci sera effectué dans l'algorithme avant le début du calcul mais après
|
||||
// la mise en cohérence des données
|
||||
lesMaillages->LectureLesMaillages(); // lecture des maillages et des references
|
||||
lesCourbes1D->Lecture(*entreePrinc); // lecture des courbes 1D
|
||||
lesFonctionsnD->Lecture(*entreePrinc); // lecture des courbes nD
|
||||
lesLoisDeComp->LecturelesLoisDeComp(*entreePrinc,*lesRef,*lesCourbes1D,*lesFonctionsnD); // lecture des lois
|
||||
diversStockage->Lecture1(*entreePrinc,*lesRef); // premiere lecture des stockages divers
|
||||
// lecture éventuelle des zones de contact et auto-contact si nécessaire
|
||||
if(lescontacts != NULL) lescontacts->Lecture_zone_contact(*entreePrinc,*lesRef);
|
||||
charge->Lecture1(*entreePrinc,*lesRef,*lesCourbes1D,*lesFonctionsnD); // lecture des actions exterieurs de chargement
|
||||
lesCondLim->Lecture1(*entreePrinc,*lesRef); // lecture des ddl bloques
|
||||
diversStockage->Lecture1(*entreePrinc,*lesRef); // seconde lecture du stockage divers
|
||||
lesCondLim->Lecture2(*entreePrinc,*lesRef); // lecture des conditions limites linéaires
|
||||
lesCondLim->Lecture3(*entreePrinc,*lesRef); // lecture des ddl d'initialisation
|
||||
diversStockage->Lecture2(*entreePrinc,*lesRef); // lecture des masses additionnelles
|
||||
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
|
||||
// s'il y a des données externes sur les maillages nécessaires pour l'algorithme
|
||||
if (algori->ExisteDonneesExternes())
|
||||
LectureDonneesExternes();
|
||||
// on garde en mémoire que l'on vient de faire une lecture primaire
|
||||
paraGlob->ChangeEtatDeLaLecturePointInfo(0);
|
||||
////----- debug
|
||||
// // on écrit la connection de l'élément 55
|
||||
// Element& el = lesMaillages->Element_LesMaille(1, 55);
|
||||
// const Tableau<Noeud *>& tabi = el.Tab_noeud_const();
|
||||
// cout << "\n *** connection de l'element 55: ";
|
||||
// for (int i=1;i<=tabi.Taille();i++) cout << " "<<tabi(i)->Num_noeud();
|
||||
// cout << " Projet::Lecture () " << endl;
|
||||
////---fin debug
|
||||
break;
|
||||
}
|
||||
case 1 : // ------- lecture dans base_info -----------------
|
||||
{// cas d'un démarrage à partir de base_info
|
||||
// lecture initiale
|
||||
algori->Lecture_base_info(lec_ent_info,lesMaillages,lesRef,lesCourbes1D,lesFonctionsnD,lesLoisDeComp
|
||||
,diversStockage,charge,lesCondLim,lescontacts,resultats);
|
||||
break;
|
||||
}
|
||||
default :
|
||||
{ if (fr){cout << "\nErreur : valeur incorrecte de lec_ent_info!\n";}
|
||||
else {cout << "\nError : incorrect value of lec_ent_info!\n";};
|
||||
cout << "Projet::Lecture ()"
|
||||
<< " lec_ent_info= " << lec_ent_info << endl;
|
||||
tempsMiseEnDonnees.Arret_du_comptage(); // fin comptage cpu
|
||||
Sortie(1);
|
||||
}
|
||||
};
|
||||
if (fr){cout << "\n ======== fin de la lecture, Projet::Lecture( ...===========\n" << endl;}
|
||||
else {cout << "\n ======== end of the reading, Projet::Lecture( ...===========\n" << endl;};
|
||||
}
|
||||
catch (UtilLecture::ErrNouvelleDonnee erreur)
|
||||
{ if ( erreur.lecture == 1)
|
||||
{ if (fr){cout << "\n ========lecture terminee, Projet::Lecture("
|
||||
<< " fin de fichier atteinte ======== " << endl; }
|
||||
else {cout << "\n ======== the reading is ended, Projet::Lecture("
|
||||
<< " the end of the file is reached ======== " << endl; };
|
||||
}
|
||||
else
|
||||
{cout << "\n ===============================================\n" ;
|
||||
// on sort tous les informations lues par défaut
|
||||
if (fr){cout << "\n **** erreur en lecture, voulez-vous sortir les informations actuellement lues ?";
|
||||
cout << " rep (o ou n) ";}
|
||||
else {cout << "\n **** error in reading, do you want to print the data already read ? ";
|
||||
cout << " answer yes (y) or not (n) ";};
|
||||
string toto;
|
||||
// toto= lect_chaine();
|
||||
toto = lect_o_n(true);
|
||||
if ((toto == "o")||(toto=="O")||(toto=="y")||(toto=="Y"))
|
||||
Affiche();
|
||||
tempsMiseEnDonnees.Arret_du_comptage(); // fin comptage cpu
|
||||
Sortie(0);
|
||||
};
|
||||
}
|
||||
catch (ErrSortieFinale)
|
||||
// cas d'une direction voulue vers la sortie
|
||||
// on relance l'interuption pour le niveau supérieur
|
||||
{ ErrSortieFinale toto;
|
||||
throw (toto);
|
||||
}
|
||||
catch ( ... )
|
||||
{ if (fr){cout << "\n ======== erreur inconnue en lecture ===== Projet::Lecture(.." << endl;}
|
||||
else {cout << "\n ======== unknown error in reading ===== Projet::Lecture(.." << endl;}
|
||||
// on sort tous les informations lues par défaut
|
||||
if (fr){cout << "\n **** erreur en lecture, voulez-vous sortir les informations actuellement lues ?";
|
||||
cout << " rep (o ou n) ";}
|
||||
else {cout << "\n **** error in reading, do you want to print the data already read ? ";
|
||||
cout << " answer yes (y) or not (n) ";};
|
||||
|
||||
string toto; toto= lect_chaine();
|
||||
if ((toto == "o")||(toto=="O")||(toto=="y")||(toto=="Y")) Affiche();
|
||||
tempsMiseEnDonnees.Arret_du_comptage(); // fin comptage cpu
|
||||
Sortie(0);
|
||||
};
|
||||
// recopie eventuelle de la lecture
|
||||
if (resultats->Copie())
|
||||
Affiche();
|
||||
tempsMiseEnDonnees.Arret_du_comptage(); // fin comptage cpu
|
||||
};
|
||||
|
||||
// lectures secondaires éventuelles: ramène true s'il y a effectivement
|
||||
// une lecture secondaire, qui donc modifie la lecture initiale
|
||||
bool Projet::Lecture_secondaire()
|
||||
{ tempsMiseEnDonnees.Mise_en_route_du_comptage(); // comptage cpu
|
||||
// on regarde s'il y a une suite à lire dans le .info
|
||||
MotCle motCle; // ref aux mots cle
|
||||
bool fr = ParaGlob::Francais(); // pour simplifier
|
||||
|
||||
if (strstr(entreePrinc->tablcar,"-fin_point_info_")!=NULL)
|
||||
// il faut s'arrêter,
|
||||
return false;
|
||||
|
||||
// on se positionne sur un mot cle
|
||||
try {while ( !motCle.SimotCle(entreePrinc->tablcar))
|
||||
entreePrinc->NouvelleDonnee();
|
||||
}
|
||||
catch (UtilLecture::ErrNouvelleDonnee errnewdonnee)
|
||||
{if (errnewdonnee.lecture == 1)
|
||||
{ cout << "\n fin de lecture de tous les fichiers atteint ";}
|
||||
else if (errnewdonnee.lecture == -1)
|
||||
{ cout << "\n erreur de lecture en fermeture de fichier ";}
|
||||
// on arrête le processus
|
||||
return false;
|
||||
};
|
||||
|
||||
// dans le cas où on rencontre un ordre de pause on appelle le handler d'exception
|
||||
bool pause_lue=false;
|
||||
while (strstr(entreePrinc->tablcar,"_pause_point_info_")!=NULL)
|
||||
{ if (fr){cout << "\n\n !!======== pause demandee ========!! " << endl; }
|
||||
else {cout << "\n\n !!======== pause asked ========!! " << endl; };
|
||||
Handler_signal(0);pause_lue=true;
|
||||
// on passe une ligne
|
||||
entreePrinc->NouvelleDonnee();
|
||||
|
||||
};
|
||||
|
||||
// dans le cas où on a forcé une lecture secondaire, il faut fermer le fichier
|
||||
// et le réouvrire et se positionner à la bonne place
|
||||
if (paraGlob->EtatDemandeLectureSecondaireInPointInfo() > 0)
|
||||
// raffraichir le dernier fichier de lecture .info en cours
|
||||
// il y a fermeture puis ouverture au même endroit du fichier .info
|
||||
entreePrinc->Raffraichir_pointInfo();
|
||||
// si on vient d'une pause, on passe une ligne jusqu'à un mot clé
|
||||
if (pause_lue)
|
||||
{ while ( !motCle.SimotCle(entreePrinc->tablcar))
|
||||
entreePrinc->NouvelleDonnee();
|
||||
pause_lue = false; // mise à jours au cas où
|
||||
};
|
||||
|
||||
bool lecture_secondaire = false;
|
||||
if (strstr(entreePrinc->tablcar,"_suite_point_info_")!=NULL)
|
||||
{if (ParaGlob::NiveauImpression() >= 4)
|
||||
cout << " debut eventuel de lectures secondaires a la fin du .info " << endl;
|
||||
try
|
||||
{ // pour l'instant les changements en lecture secondaire ne concerne qu'un nombre restreind de cas
|
||||
entreePrinc->NouvelleDonnee(); // on passe le mot clé
|
||||
// on lit tant qu'il n'y a pas de mot clé fin ou que l'on n'est pas arrivé à la fin du fichier
|
||||
while ((strstr(entreePrinc->tablcar,"_suite_point_info_")==NULL)
|
||||
&& (strstr(entreePrinc->tablcar,"_pause_point_info_")==NULL)
|
||||
&& (strstr(entreePrinc->tablcar,"_fin_point_info_")==NULL))
|
||||
{ // on indique en mémoire que l'on fait une lecture secondaire
|
||||
paraGlob->ChangeEtatDeLaLecturePointInfo(paraGlob->EtatDeLaLecturePointInfo()+1);
|
||||
if (strstr(entreePrinc->tablcar,"Mise_A_jour_Constantes_utilisateurs_")!=NULL)
|
||||
{varExpor->MiseAjourConstantesUtilisateur(*entreePrinc);
|
||||
lecture_secondaire = true;
|
||||
}
|
||||
else if (strstr(entreePrinc->tablcar,"charges")!=NULL)
|
||||
{ charge->Lecture1(*entreePrinc,*lesRef,*lesCourbes1D,*lesFonctionsnD);
|
||||
lecture_secondaire=true;} // lecture des actions exterieurs de chargement
|
||||
else if (strstr(entreePrinc->tablcar,"blocages")!=NULL)
|
||||
{ lesCondLim->Lecture1(*entreePrinc,*lesRef);
|
||||
lecture_secondaire=true;} // lecture des ddl bloques
|
||||
else if ( (strstr(entreePrinc->tablcar,"controle")!=NULL) ||
|
||||
(strstr(entreePrinc->tablcar,"para_syteme_lineaire")!=NULL) ||
|
||||
(strstr(entreePrinc->tablcar,"para_pilotage_equi_global")!=NULL) ||
|
||||
(strstr(entreePrinc->tablcar,"para_dedies_dynamique")!=NULL) ||
|
||||
(strstr(entreePrinc->tablcar,"para_affichage")!=NULL)||
|
||||
(strstr(entreePrinc->tablcar,"para_contact")!=NULL)||
|
||||
(strstr(entreePrinc->tablcar,"para_energie")!=NULL)||
|
||||
(strstr(entreePrinc->tablcar,"para_calculs_geometriques")!=NULL))
|
||||
{ algori->Lecture(*entreePrinc,*paraGlob,*lesMaillages);
|
||||
lecture_secondaire=true;}// lecture des parametres de controle de l'algorithme
|
||||
else if (strstr(entreePrinc->tablcar,"resultats")!=NULL)
|
||||
{ resultats->Lecture(lesRef);
|
||||
lecture_secondaire=true;}; // lecture des parametres de gestion de la sortie des resultats
|
||||
if (!lecture_secondaire) // si on a rien lue on passe à l'enregistrement suivant
|
||||
entreePrinc->NouvelleDonnee();
|
||||
};
|
||||
// information sur la lecture secondaire
|
||||
if (fr){cout << "\n ======== lecture secondaire terminee ======== " << endl; }
|
||||
else {cout << "\n ======== the secondary reading is ended ======== " << endl; };
|
||||
}
|
||||
catch (UtilLecture::ErrNouvelleDonnee erreur)
|
||||
{ if ( erreur.lecture == 1)
|
||||
{ if (fr){cout << "\n ========lecture secondaire terminee, Projet::Lecture("
|
||||
<< " fin de fichier atteinte ======== " << endl; }
|
||||
else {cout << "\n ======== the secondary reading is ended, Projet::Lecture("
|
||||
<< " the end of the file is reached ======== " << endl; };
|
||||
}
|
||||
else
|
||||
{ cout << "\n ===============================================\n" ;
|
||||
// on sort tous les informations lues par défaut
|
||||
if (fr){cout << "\n **** erreur en lecture, voulez-vous sortir les informations actuellement lues ?";
|
||||
cout << " rep (o ou n) ";}
|
||||
else {cout << "\n **** error in reading, do you want to print the data already read ? ";
|
||||
cout << " answer yes (y) or not (n) ";};
|
||||
string toto;
|
||||
toto= lect_chaine();
|
||||
if ((toto == "o")||(toto=="O")||(toto=="y")||(toto=="Y"))
|
||||
Affiche();
|
||||
tempsMiseEnDonnees.Arret_du_comptage(); // fin comptage cpu
|
||||
Sortie(0);
|
||||
};
|
||||
}
|
||||
catch (ErrSortieFinale)
|
||||
// cas d'une direction voulue vers la sortie
|
||||
// on relance l'interuption pour le niveau supérieur
|
||||
{ ErrSortieFinale toto;
|
||||
throw (toto);
|
||||
}
|
||||
catch ( ... )
|
||||
{ if (fr){cout << "\n ======== erreur inconnue en lecture secondaire ===== Projet::Lecture(.." << endl;}
|
||||
else {cout << "\n ======== unknown error in secondary reading ===== Projet::Lecture(.." << endl;}
|
||||
// on sort tous les informations lues par défaut
|
||||
if (fr){cout << "\n **** erreur en lecture, voulez-vous sortir les informations actuellement lues ?";
|
||||
cout << " rep (o ou n) ";}
|
||||
else {cout << "\n **** error in reading, do you want to print the data already read ? ";
|
||||
cout << " answer yes (y) or not (n) ";};
|
||||
|
||||
string toto; toto= lect_chaine();
|
||||
if ((toto == "o")||(toto=="O")||(toto=="y")||(toto=="Y")) Affiche();
|
||||
tempsMiseEnDonnees.Arret_du_comptage(); // fin comptage cpu
|
||||
Sortie(0);
|
||||
}
|
||||
// recopie eventuelle de la lecture
|
||||
if (resultats->Copie()) Affiche();
|
||||
};
|
||||
|
||||
tempsMiseEnDonnees.Arret_du_comptage(); // fin comptage cpu
|
||||
return lecture_secondaire;
|
||||
};
|
||||
|
||||
// resolution du probleme
|
||||
void Projet::Calcul()
|
||||
{ if (!(paraGlob->EtatDeLaLecturePointInfo())) // cas d'une première exécution
|
||||
{// preparation et verification globale des instances de classe
|
||||
// 1) introduire les lois de comportement dans les elements qui le necessite
|
||||
// des sections pour les biellettes etc c-a-d , completer les elements
|
||||
// avec les donnees qui ont ete acquises apres la lecture du maillage
|
||||
////---- debug
|
||||
//cout << "\n debug -- Projet::Calcul () ";
|
||||
//lesRef->Affiche(2,0);
|
||||
////----- fin debug
|
||||
lesCondLim->IntroductionDonnees(lesMaillages,lesRef,lesCourbes1D,lesFonctionsnD);
|
||||
lesMaillages->Completer(diversStockage,lesLoisDeComp,lesFonctionsnD);
|
||||
// 2) verification des elements
|
||||
if (!(lesMaillages->Complet()))
|
||||
{ cout << "\n le maillage n\'est pas complet avant le calcul, il"
|
||||
<< " faut completer les donnees ";
|
||||
cout << " Projet::Calcul () ";
|
||||
Sortie(1);
|
||||
};
|
||||
// 3) vérification des courbes
|
||||
if (!(lesCourbes1D->Complet()))
|
||||
{ cout << "\n les courbes ne sont pas completes avant le calcul, il faut completer les donnees ";
|
||||
cout << " Projet::Calcul () ";
|
||||
Sortie(1);
|
||||
};
|
||||
// 3) vérification des fonctions nD et mise à jour des variables globales
|
||||
if (!(lesFonctionsnD->Complet()))
|
||||
{ cout << "\n les fonctions nD ne sont pas completes avant le calcul, il faut completer les donnees ";
|
||||
cout << " Projet::Calcul () ";
|
||||
Sortie(1);
|
||||
};
|
||||
// vérification sur les variables utilisateurs
|
||||
if (!varExpor->Complet_VariablesExporter(*lesRef))
|
||||
{ cout << "\n Les variables utilisateurs sont a revoir... ";
|
||||
cout << " Projet::Calcul () ";
|
||||
Sortie(1);
|
||||
};
|
||||
|
||||
// vérification de la cohérence du critère d'arrêt de calcul
|
||||
algori->Coherence_Algo_typeConvergence();
|
||||
}
|
||||
else // cas d'une exécution suite point info
|
||||
{ // pour l'instant ne fonctionne pas avec tous les algos
|
||||
switch (algori->TypeDeCalcul())
|
||||
{case NON_DYNA : case RELAX_DYNA : case DYNA_IMP :
|
||||
case DYNA_EXP_CHUNG_LEE : case DYNA_EXP_TCHAMWA :
|
||||
case DYNA_EXP: case DYNA_EXP_ZHAI: case DYNA_RUNGE_KUTTA:
|
||||
case DYNA_EXP_BONELLI : break; // OK
|
||||
case COMBINER :
|
||||
{// on passe en revue tous les sous_algo
|
||||
AlgoriCombine* al = (AlgoriCombine*) algori;
|
||||
list <EnumTypeCalcul> list_algo = al->List_Sous_Algo();
|
||||
list <EnumTypeCalcul>::iterator il,ilfin = list_algo.end();
|
||||
bool tout_ok = true; // init
|
||||
for (il = list_algo.begin();il != ilfin; il++)
|
||||
{switch (*il)
|
||||
{case NON_DYNA : case RELAX_DYNA : case DYNA_IMP :
|
||||
case DYNA_EXP_CHUNG_LEE : case DYNA_EXP_TCHAMWA :
|
||||
case DYNA_EXP: case DYNA_EXP_ZHAI: case DYNA_RUNGE_KUTTA:
|
||||
case DYNA_EXP_BONELLI : break; // OK
|
||||
default : tout_ok=false; break;
|
||||
}
|
||||
if (!tout_ok)
|
||||
break;
|
||||
}
|
||||
if (!tout_ok)
|
||||
{cout << "\nErreur : pour l'instant le type d'algorithme COMBINER "
|
||||
<< " avec un sous algo de type " << Nom_TypeCalcul(*il)
|
||||
<< " n'est pas disponible pour faire un calcul avec l'option _suite_point_info_ !\n";
|
||||
cout << "\n faire une demande a gerard rio " << endl;
|
||||
Sortie(1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
default :
|
||||
cout << "\nErreur : pour l'instant le type d'algorithme " << Nom_TypeCalcul(algori->TypeDeCalcul())
|
||||
<< " n'est pas disponible pour faire un calcul avec l'option _suite_point_info_ !\n";
|
||||
cout << "\n faire une demande a gerard rio " << endl;
|
||||
Sortie(1);
|
||||
};
|
||||
};
|
||||
// execution de l'algorithme
|
||||
algori->Execution
|
||||
(paraGlob,lesMaillages,lesRef,lesCourbes1D,lesFonctionsnD, varExpor,lesLoisDeComp,diversStockage,charge
|
||||
,lesCondLim,lescontacts,resultats);
|
||||
};
|
||||
|
||||
// sortie des resultats
|
||||
void Projet::SortieDesResultats ()
|
||||
{ // tout d'abord sortie des résultats fichiers
|
||||
resultats->SortieInfo(paraGlob,lesMaillages,lesRef,lesCondLim,lescontacts);
|
||||
};
|
||||
|
||||
// visualisation (éventuelle) via le format vrml ou autre
|
||||
void Projet::Visualisation_interactive ()
|
||||
{try
|
||||
{ // dans le cas où il y a une lecture de fichier de commande de visualisation
|
||||
// on met en place la visualisation demandée et on exécute la visualisation
|
||||
if (paraGlob->SousTypeCalcul(lectureCommandesVisu))
|
||||
{ algori->LectureCommandeVisu
|
||||
(paraGlob,lesMaillages,lesRef,lesCourbes1D,lesFonctionsnD,lesLoisDeComp,diversStockage,charge
|
||||
,lesCondLim,lescontacts,resultats);
|
||||
};
|
||||
/* // dans le cas où l'on veut une visualisation automatique
|
||||
if (paraGlob->SousTypeCalcul(VisuAutoCommandes))
|
||||
{ algori->VisualisationAutomatique
|
||||
(paraGlob,lesMaillages,lesRef,lesCourbes1D,lesLoisDeComp,diversStockage,charge
|
||||
,lesCondLim,lescontacts,resultats);
|
||||
} */
|
||||
// dans le cas ou l'utilisateur veux également une visualisation interactive
|
||||
// via le format vrml ou autre on active l'algorithme adoc
|
||||
if (paraGlob->SousTypeCalcul(visualisation))
|
||||
{ // on remet ok le flux d'entrée au cas où
|
||||
// gestion d'erreur éventuelle
|
||||
if ( std::cin.fail() || std::cin.eof())
|
||||
{std::cin.clear(); // effacer les bits d'erreurs
|
||||
std::cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );// purge de cin
|
||||
};
|
||||
|
||||
// choix entre les différents types de visualisation
|
||||
bool choix_valide = false;
|
||||
while (!choix_valide)
|
||||
{
|
||||
if (ParaGlob::Francais())
|
||||
{cout << "\n =========== choix du module de visualisation interactive ============"
|
||||
<< "\n sauvegarde des commandes de visualisation ? (rep 1)"
|
||||
<< "\n visualisation automatique ? (rep 2)"
|
||||
<< "\n visualisation au format vrml ? (rep 3)"
|
||||
<< "\n visualisation par fichier de points, format maple ? (rep 4)"
|
||||
<< "\n visualisation au format geomview ? (rep 5)"
|
||||
<< "\n visualisation au format Gid ? (rep 6)"
|
||||
<< "\n changement de fichier de commande .CVisu ? (rep 7)"
|
||||
<< "\n visualisation au format Gmsh ? (rep 8)"
|
||||
<< "\n nom grandeurs actuelles accessibles globalement ? (rep 9)"
|
||||
<< "\n fin (defaut) (rep 0 ou f)";
|
||||
}
|
||||
else
|
||||
{cout << "\n =========== choice of the type of visualisation ============"
|
||||
<< "\n save commands of visualization which have been read ? (rep 1)"
|
||||
<< "\n automatic visualisation ? (rep 2)"
|
||||
<< "\n visualisation with the output format: vrml ? (rep 3)"
|
||||
<< "\n visualisation with a text format: style maple ? (rep 4)"
|
||||
<< "\n visualisation with a format for Geomview ? (rep 5)"
|
||||
<< "\n visualisation with a format for Gid ? (rep 6)"
|
||||
<< "\n change of command file : .CVisu ? (rep 7)"
|
||||
<< "\n visualisation with a format for Gmsh ? (rep 8)"
|
||||
<< "\n Name of current entities readable anywhere ? (rep 9)"
|
||||
<< "\n finish (default) (rep 0 ou f)";
|
||||
};
|
||||
string rep;
|
||||
if (ParaGlob::Francais()) {cout << "\n reponse ? ";} else {cout << "\n answer ? ";};
|
||||
////------- debug
|
||||
//cout << "\n *** debug Projet::Visualisation_interactive ()--";
|
||||
//raise(SIGINT);
|
||||
//
|
||||
//
|
||||
////----- fin debug
|
||||
rep = lect_return_defaut(false,"f");
|
||||
if (rep == "1")
|
||||
{// cas d'une sauvegarde des commandes de visualisation
|
||||
algori->EcritureCommandeVisu();}
|
||||
else if (rep == "2")
|
||||
{// cas d'une visualisation automatique demandée
|
||||
algori->LectureCommandeVisu
|
||||
(paraGlob,lesMaillages,lesRef,lesCourbes1D,lesFonctionsnD,lesLoisDeComp,diversStockage,charge
|
||||
,lesCondLim,lescontacts,resultats);}
|
||||
else if (rep == "3")
|
||||
{// cas format vrml
|
||||
algori->Visu_vrml
|
||||
(paraGlob,lesMaillages,lesRef,lesCourbes1D,lesFonctionsnD,lesLoisDeComp,diversStockage,charge
|
||||
,lesCondLim,lescontacts,resultats);}
|
||||
else if (rep == "4")
|
||||
{// cas format maple
|
||||
algori->Visu_maple
|
||||
(paraGlob,lesMaillages,lesRef,lesCourbes1D,lesFonctionsnD,lesLoisDeComp,diversStockage,charge
|
||||
,lesCondLim,lescontacts,resultats);}
|
||||
else if (rep == "5")
|
||||
{// cas format geomview
|
||||
algori->Visu_geomview
|
||||
(paraGlob,lesMaillages,lesRef,lesCourbes1D,lesFonctionsnD,lesLoisDeComp,diversStockage,charge
|
||||
,lesCondLim,lescontacts,resultats);}
|
||||
else if (rep == "6")
|
||||
{// cas format Gid
|
||||
algori->Visu_Gid
|
||||
(paraGlob,lesMaillages,lesRef,lesCourbes1D,lesFonctionsnD,lesLoisDeComp,diversStockage,charge
|
||||
,lesCondLim,lescontacts,resultats);}
|
||||
else if (rep == "7")
|
||||
{// changement de fichier de commande .CVisu
|
||||
entreePrinc->Fermeture_CommandeVisu(); // fermeture du fichier actuel s'il y en a un
|
||||
string nouveauNomCvisu=""; // pour faire l'entrée interactive dans Changement_NomCVisu
|
||||
entreePrinc->Changement_NomCVisu(nouveauNomCvisu);
|
||||
}
|
||||
else if (rep == "8")
|
||||
{// cas format Gmsh
|
||||
algori->Visu_Gmsh
|
||||
(paraGlob,lesMaillages,lesRef,lesCourbes1D,lesFonctionsnD,lesLoisDeComp,diversStockage,charge
|
||||
,lesCondLim,lescontacts,resultats);}
|
||||
else if (rep == "9")
|
||||
{ // on affiche directement
|
||||
ParaGlob::param->Affiche_GrandeurGlobal(cout);
|
||||
}
|
||||
else if ((rep == "0") || (rep == "o") || (rep == "O") || (rep == "f"))
|
||||
choix_valide = true;
|
||||
else
|
||||
{if (ParaGlob::Francais()) {cout << "\n la réponse : " << rep << " n'est pas utilisable, recommencez !";}
|
||||
else {cout << "\n the answer : " << rep << " cannot be use , do it again !";};
|
||||
};
|
||||
};
|
||||
};
|
||||
// dans le cas où l'on veut une sauvegarde de la visualisation dans un fichier de commande
|
||||
// on effectue la sauvegarde (suite aux infos lue dans le .info)
|
||||
if (paraGlob->SousTypeCalcul(sauveCommandesVisu))
|
||||
algori->EcritureCommandeVisu();
|
||||
}
|
||||
catch ( ... )
|
||||
{ cout << "\n ======== erreur de lecture detectee ====== " << endl;
|
||||
ErrSortieFinale titi;
|
||||
throw (titi);
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
// lecture des données externes pour chaque entitée gérée par le projet
|
||||
// type indique le type de données externes à lire
|
||||
void Projet::LectureDonneesExternes()
|
||||
{
|
||||
tempsMiseEnDonnees.Mise_en_route_du_comptage(); // comptage cpu
|
||||
// on boucle sur tous les types différents de flots externes définies
|
||||
for (int nbf=1;nbf<= algori->NbTypeFlotExt();nbf++)
|
||||
{// on parcours tous les éléments d'un même type
|
||||
const list <Algori::DeuxString > & lalist = algori->Noms_fichier(nbf).infos;
|
||||
list <Algori::DeuxString >::const_iterator ii;
|
||||
for (ii=lalist.begin() ; ii != lalist.end(); ii++)
|
||||
{// récup du nom de fichier
|
||||
const string& nfichier = (*ii).nomFichier;
|
||||
// ouverture du nouveau flot
|
||||
entreePrinc->NouveauFichier(((char*)(nfichier).c_str()));
|
||||
// lecture des données externes
|
||||
const string& nmaillage = (*ii).nomMaillage; // récup nom du maillage
|
||||
const int type = algori->TypeDonneesExternes(nbf);
|
||||
// chaque entité est appelé
|
||||
lesMaillages->LectureDonneesExternes(type,nmaillage);
|
||||
lesLoisDeComp->LectureDonneesExternes(*entreePrinc,*lesRef,type,nmaillage);
|
||||
diversStockage->LectureDonneesExternes(*entreePrinc,*lesRef,type,nmaillage);
|
||||
charge->LectureDonneesExternes(*entreePrinc,*lesRef,type,nmaillage);
|
||||
lesCondLim->LectureDonneesExternes(*entreePrinc,*lesRef,type,nmaillage);
|
||||
// fermeture du flot, retour au flot antérieur
|
||||
int indic; entreePrinc->FermetureFichier( indic);
|
||||
}
|
||||
}
|
||||
tempsMiseEnDonnees.Arret_du_comptage(); // fin comptage cpu
|
||||
};
|
||||
|
||||
// affichage de toutes les informations lue
|
||||
void Projet::Affiche() const
|
||||
{ // entreePrinc->OuvrirCopie(); // ouverture de la sauvegarde
|
||||
// memorisation du flux de sortie
|
||||
//iostream_withassign out;
|
||||
// ostream& out = cout;
|
||||
// out = cout;
|
||||
// réaffectation de la sortie courante
|
||||
// ofstream* cout = entreePrinc->copie;
|
||||
// cout = entreePrinc->copie;
|
||||
if (algori != NULL) algori->Affiche1(); // type de calcul
|
||||
if (lesMaillages != NULL) lesMaillages->Affiche(); // maillages
|
||||
if (lesRef != NULL) lesRef->Affiche(); // affichage des references`
|
||||
if (lesCourbes1D != NULL) lesCourbes1D->Affiche(); // affichage des courbes 1D
|
||||
if (lesLoisDeComp != NULL) lesLoisDeComp->Affiche(); // affichage des lois
|
||||
if (diversStockage != NULL) diversStockage->Affiche1(); // 1er affichage des divers stockage
|
||||
// affichage du contact si nécessaire
|
||||
if (lescontacts != NULL) lescontacts->Affiche();
|
||||
if (charge != NULL) charge->Affiche1(); // chargement
|
||||
if (lesCondLim != NULL) lesCondLim->Affiche1(); // conditions limite bloquee
|
||||
if (lesCondLim != NULL) lesCondLim->Affiche2(); // conditions d'initialisation
|
||||
if (diversStockage != NULL) diversStockage->Affiche2(); // second affichage des divers stockage
|
||||
if (charge != NULL) charge->Affiche2(); // type de charge
|
||||
if (algori != NULL) algori->Affiche2(); // parametres de controle
|
||||
if (resultats != NULL) resultats->Affiche(); // gestion de la sortie des resultats
|
||||
|
||||
// entreePrinc->FermerCopie(); // fermeture de la sauvegarde
|
||||
// cout = *out; // retour de la sortie sur l'ecran
|
||||
Sortie(1);
|
||||
};
|
||||
|
||||
// sortie du schemaXML: en fonction de enu
|
||||
// ceci pour tous les types de base
|
||||
void Projet::SchemaXML_Type_de_base(ofstream& sort,const Enum_IO_XML enu)
|
||||
{ // définition d'une liste de réels
|
||||
if (enu == XML_TYPE_GLOBAUX) // cas de la sortie du type global
|
||||
{sort << "\n <!-- ************************ liste de reels *********************** -->"
|
||||
<< "\n <xs:simpleType name=\"liste_de_reels\">"
|
||||
<< "\n <xs:list itemType=\"xs:double\"/>"
|
||||
<< "\n </xs:simpleType> ";
|
||||
};
|
||||
// cas des différentes coordonnées
|
||||
Coordonnee::SchemaXML_Coordonnee(sort,enu);
|
||||
CoordonneeH::SchemaXML_Coordonnee(sort,enu);
|
||||
CoordonneeB::SchemaXML_Coordonnee(sort,enu);
|
||||
Coordonnee1::SchemaXML_Coordonnee(sort,enu);
|
||||
Coordonnee1H::SchemaXML_Coordonnee(sort,enu);
|
||||
Coordonnee1B::SchemaXML_Coordonnee(sort,enu);
|
||||
Coordonnee2::SchemaXML_Coordonnee(sort,enu);
|
||||
Coordonnee2H::SchemaXML_Coordonnee(sort,enu);
|
||||
Coordonnee2B::SchemaXML_Coordonnee(sort,enu);
|
||||
Coordonnee3::SchemaXML_Coordonnee(sort,enu);
|
||||
Coordonnee3H::SchemaXML_Coordonnee(sort,enu);
|
||||
Coordonnee3B::SchemaXML_Coordonnee(sort,enu);
|
||||
};
|
||||
|
||||
|
||||
|
||||
// fermeture des fichiers de visualisation liés au projet
|
||||
void Projet::FermetureFichiersVisualisation()
|
||||
{if (entreePrinc != NULL)
|
||||
{ // on ferme les sorties vrml (fichier) et appel éventuel du visualisateur
|
||||
entreePrinc->Fermeture_fichier_principal_vrml();
|
||||
entreePrinc->Fermeture_fichier_legende_vrml();
|
||||
// on ferme la sortie maple (fichier) et appel éventuel du visualisateur
|
||||
entreePrinc->Fermeture_fichier_principal_maple();
|
||||
// on ferme les sorties geomview (fichier) et appel éventuel du visualisateur
|
||||
entreePrinc->Fermeture_fichier_principal_geomview();
|
||||
entreePrinc->Fermeture_fichier_legende_geomview();
|
||||
// on ferme les sorties Gid (fichier) et appel éventuel du visualisateur
|
||||
entreePrinc->Fermeture_fichier_initial_Gid();
|
||||
entreePrinc->Fermeture_fichier_resultat_Gid();
|
||||
// on ferme les sorties Gmsh (fichier) et appel éventuel du visualisateur
|
||||
entreePrinc->Fermeture_fichier_initial_Gmsh();
|
||||
entreePrinc->Fermeture_TousLesFichiersResultats_Gmsh();
|
||||
// on ferme les sorties vrml (fichier) et appel éventuel du visualisateur
|
||||
entreePrinc->Fermeture_fichier_principal_vrml();
|
||||
entreePrinc->Fermeture_fichier_legende_vrml();
|
||||
};
|
||||
};
|
||||
|
||||
// sortie sur fichier des temps cpu
|
||||
// retourne un pointeur sur UtilLecture pour la récupération du fichier
|
||||
// de temps, qui peut ainsi être utilisé par la méthode appelant
|
||||
UtilLecture * Projet::Sortie_temps_cpu()
|
||||
{ // on commence par appeler l'algorithme
|
||||
// sortie sur fichier des temps cpu
|
||||
algori->Sortie_temps_cpu(*lesCondLim,*charge,*lescontacts);
|
||||
// puis la partie spécifique aux lois de comportement
|
||||
lesLoisDeComp->Sortie_temps_cpu(*entreePrinc);
|
||||
// écriture des temps cpu de la mise en donnéees:
|
||||
// récupération du fichier des temps cpu
|
||||
ofstream & sort_cpu = entreePrinc->Sort_temps_cpu();
|
||||
sort_cpu << "\n \n --------------- temps_mise_en_donnees_en_milliseconde: ---------";
|
||||
sort_cpu << fixed;
|
||||
sort_cpu.precision(2);
|
||||
sort_cpu << "\n tps_de la mise en donnees "
|
||||
<< tempsMiseEnDonnees.Temps_CPU_User_milli();
|
||||
// puis retour
|
||||
return entreePrinc;
|
||||
};
|
||||
|
||||
// def du fichier des temps cpu
|
||||
// puis retourne un pointeur sur UtilLecture pour la récupération du fichier
|
||||
// de temps, qui peut ainsi être utilisé par la méthode appelant
|
||||
UtilLecture * Projet::Def_sortie_temps_cpu()
|
||||
{
|
||||
// on ouvre le fichier des temps cpu
|
||||
entreePrinc->Ouverture_fichier_temps_cpu(); // ouverture au cas où
|
||||
// puis retour
|
||||
return entreePrinc;
|
||||
};
|
||||
|
||||
// une méthode qui a pour objectif de terminer tous les comptages, utile
|
||||
// dans le cas d'un arrêt impromptu
|
||||
void Projet::Arret_du_comptage_CPU()
|
||||
{ // tout d'abord l'algorithme
|
||||
algori->Arret_du_comptage_CPU();
|
||||
// puis la mise en données
|
||||
tempsMiseEnDonnees.Arret_du_comptage();
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
443
General/herezh.cc
Normal file
443
General/herezh.cc
Normal file
|
@ -0,0 +1,443 @@
|
|||
/*! \file herezh.cc
|
||||
\brief programme principal herezh++.
|
||||
*/
|
||||
|
||||
// This file is part of the Herezh++ application.
|
||||
//
|
||||
// The finite element software Herezh++ is dedicated to the field
|
||||
// of mechanics for large transformations of solid structures.
|
||||
// It is developed by Gérard Rio (APP: IDDN.FR.010.0106078.000.R.P.2006.035.20600)
|
||||
// INSTITUT DE RECHERCHE DUPUY DE LÔME (IRDL) <https://www.irdl.fr/>.
|
||||
//
|
||||
// Herezh++ is distributed under GPL 3 license ou ultérieure.
|
||||
//
|
||||
// Copyright (C) 1997-2021 Université Bretagne Sud (France)
|
||||
// AUTHOR : Gérard Rio
|
||||
// E-MAIL : gerardrio56@free.fr
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License,
|
||||
// or (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
// See the GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
//
|
||||
// For more information, please consult: <https://herezh.irdl.fr/>.
|
||||
|
||||
/************************************************************************
|
||||
* *
|
||||
* DATE: 15/01/97 *
|
||||
* $ *
|
||||
* AUTEUR: G RIO (mailto:gerardrio56@free.fr) *
|
||||
* $ *
|
||||
* PROJET: Herezh++ *
|
||||
* $ *
|
||||
************************************************************************
|
||||
* BUT: programme de calcul de structure par elements finis *
|
||||
* $ *
|
||||
* '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' *
|
||||
* *
|
||||
* VERIFICATION: *
|
||||
* *
|
||||
* ! date ! auteur ! but ! *
|
||||
* ------------------------------------------------------------ *
|
||||
* ! ! ! ! *
|
||||
* *
|
||||
* $ *
|
||||
* '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' *
|
||||
* MODIFICATIONS:
|
||||
* *
|
||||
* ! date ! auteur ! but ! *
|
||||
* ------------------------------------------------------------ *
|
||||
* *
|
||||
* $ *
|
||||
* *
|
||||
************************************************************************/
|
||||
//#include <altivec.h>
|
||||
# include <iostream>
|
||||
using namespace std; //introduces namespace std
|
||||
|
||||
#include "herezh.h"
|
||||
//#include "Debug.h"
|
||||
//#include "DebugNew.h" // peut-etre à virer ensuite ?
|
||||
|
||||
#include <math.h>
|
||||
//# include "EnteteParaGlob.h"
|
||||
#include "ConstantePrinc.h"
|
||||
# include "ParaGlob.h"
|
||||
|
||||
// ------- specifiques tenseur -------------------------------
|
||||
// 1- second ordre
|
||||
# include "Tenseur3.h"
|
||||
# include "Tenseur2.h"
|
||||
# include "Tenseur1.h"
|
||||
// 2- quatrieme ordre
|
||||
# include "TenseurQ-3.h"
|
||||
# include "TenseurQ-2.h"
|
||||
# include "TenseurQ-1.h"
|
||||
#include "Tenseur1_TroisSym.h"
|
||||
#include "Tenseur2_TroisSym.h"
|
||||
#include "Tenseur3_TroisSym.h"
|
||||
// def des variables statiques permettant entre autre d'effacer les tenseurs intermediaires
|
||||
# include "EnteteTenseur.h"
|
||||
// fonction permettant la definition de nouveaux tenseurs
|
||||
#include "NevezTenseur.h"
|
||||
// def des constantes tenseur
|
||||
# include "TypeConsTensPrinc.h"
|
||||
// lorsque l'on veut faire reference a des constantes tenseurs dans un autre
|
||||
// fichier que le prog principal il faut inclure :
|
||||
// # include "TypeConsTens.h"
|
||||
// uniquement, ceci a la place de :
|
||||
// "TypeConsTensPrinc.h"
|
||||
// "DefValConsTens.h"
|
||||
// est a placer dans le fichier qui defini les valeurs des constantes
|
||||
// --------- fin specifique tenseur ---------------
|
||||
|
||||
//-------- listes globales de petits tableaux ------------
|
||||
//#include "PtTabRel_Princ.h"
|
||||
|
||||
#include "Projet.h"
|
||||
#include "Biellette.h"
|
||||
#include "BielletteQ.h"
|
||||
#include "Biel_axi.h"
|
||||
#include "Biel_axiQ.h"
|
||||
#include "TriaMembL1.h"
|
||||
#include "TriaMembQ3.h"
|
||||
#include "TriaMembQ3_cm1pti.h"
|
||||
#include "TriaQ3_cmpti1003.h"
|
||||
#include "TriaCub.h"
|
||||
#include "TriaCub_cm4pti.h"
|
||||
#include "Quad.h"
|
||||
#include "Quad_cm1pti.h"
|
||||
#include "QuadQ.h"
|
||||
#include "QuadQCom.h"
|
||||
#include "QuadQCom_cm4pti.h"
|
||||
#include "Hexa.h"
|
||||
#include "Hexa_cm1pti.h"
|
||||
#include "Hexa_cm27pti.h"
|
||||
#include "Hexa_cm64pti.h"
|
||||
#include "HexaQ.h"
|
||||
#include "HexaQ_cm1pti.h"
|
||||
#include "HexaQ_cm27pti.h"
|
||||
#include "HexaQ_cm64pti.h"
|
||||
#include "HexaQComp.h"
|
||||
#include "HexaQComp_cm1pti.h"
|
||||
#include "HexaQComp_cm27pti.h"
|
||||
#include "HexaQComp_cm64pti.h"
|
||||
#include "Tetra.h"
|
||||
#include "TetraQ.h"
|
||||
#include "TetraQ_cm1pti.h"
|
||||
#include "TetraQ_cm15pti.h"
|
||||
#include "PentaL.h"
|
||||
#include "PentaL_cm1pti.h"
|
||||
#include "PentaL_cm6pti.h"
|
||||
#include "PentaQ.h"
|
||||
#include "PentaQ_cm3pti.h"
|
||||
#include "PentaQ_cm9pti.h"
|
||||
#include "PentaQ_cm12pti.h"
|
||||
#include "PentaQ_cm18pti.h"
|
||||
#include "PentaQComp.h"
|
||||
#include "PentaQComp_cm9pti.h"
|
||||
#include "PentaQComp_cm12pti.h"
|
||||
#include "PentaQComp_cm18pti.h"
|
||||
#include "TriaSfe1.h"
|
||||
#include "TriaSfe1_cm5pti.h"
|
||||
#include "TriaSfe2.h"
|
||||
#include "TriaSfe3.h"
|
||||
#include "TriaSfe3_3D.h"
|
||||
#include "TriaSfe3_cm3pti.h"
|
||||
#include "TriaSfe3_cm4pti.h"
|
||||
#include "TriaSfe3_cm5pti.h"
|
||||
#include "TriaSfe3_cm6pti.h"
|
||||
#include "TriaSfe3_cm7pti.h"
|
||||
#include "TriaSfe3_cm12pti.h"
|
||||
#include "TriaSfe3_cm13pti.h"
|
||||
#include "TriaSfe3C.h"
|
||||
#include "TriaQSfe3.h"
|
||||
#include "TriaQSfe1.h"
|
||||
#include "PoutSimple1.h"
|
||||
#include "QuadCCom.h"
|
||||
#include "QuadCCom_cm9pti.h"
|
||||
#include "TriaAxiL1.h"
|
||||
#include "TriaAxiQ3.h"
|
||||
#include "TriaAxiQ3_cm1pti.h"
|
||||
#include "TriaAxiQ3_cmpti1003.h"
|
||||
#include "QuadAxiL1.h"
|
||||
#include "QuadAxiL1_cm1pti.h"
|
||||
#include "QuadAxiQ.h"
|
||||
#include "QuadAxiQComp.h"
|
||||
#include "QuadAxiQComp_cm4pti.h"
|
||||
#include "QuadAxiCCom.h"
|
||||
#include "QuadAxiCCom_cm9pti.h"
|
||||
#include "ElemPoint.h"
|
||||
#include "ElemPoint_CP.h"
|
||||
#include "BielletteThermi.h"
|
||||
|
||||
//#ifdef ENLINUX_STREAM
|
||||
// #include "Profiler.h"
|
||||
//#endif
|
||||
//#define USE_PROFILE
|
||||
|
||||
#ifdef UTILISATION_DE_LA_LIBRAIRIE_BOOST
|
||||
#include <boost/chrono/include.hpp>
|
||||
#include <boost/system/error_code.hpp>
|
||||
#endif
|
||||
#include "Temps_CPU_HZpp.h"
|
||||
#include "Temps_CPU_HZpp_3.h"
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef SYSTEM_MAC_OS_X
|
||||
int main (int argc, const char * argv[]) {
|
||||
#else
|
||||
#ifdef ENLINUX_STREAM //ENLINUX
|
||||
int main (int argc, const char * argv[]) {
|
||||
#else
|
||||
#ifdef SYSTEM_MAC_OS_X_unix
|
||||
int main (int argc, const char * argv[]) {
|
||||
#else
|
||||
int main ()
|
||||
{ int argc=0; const char ** argv = NULL ;
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// gestion du temps cpu global
|
||||
Temps_CPU_HZpp_3 temps_CPU_Herezh_total;
|
||||
temps_CPU_Herezh_total.Mise_en_route_du_comptage(); // comptage cpu
|
||||
UtilLecture* pt_UtilLecture = NULL; // un pointeur qui doit-être renseigné par le projet
|
||||
|
||||
// écriture de l'entête du programme
|
||||
Presentation();
|
||||
|
||||
// definition d'un projet
|
||||
string retour ;
|
||||
try
|
||||
{ // par la définition du projet, est définit également l'algo
|
||||
// on définit le projet en dehors du try qui suit, pour le projet demeure valide même s'il y a
|
||||
// une exception, ce qui permet quand même d'utiliser des fonction du projet,
|
||||
// par exemple l'acces aux fichier qui sont définit dans UtilLecture
|
||||
Projet projet(retour,argc,argv);
|
||||
if (retour != "fin")
|
||||
try
|
||||
{
|
||||
|
||||
// les differents elements
|
||||
// (sont ici définit pour qu'ils soient pris en compte à l'édition de lien !!)
|
||||
Biellette b1; // biellette
|
||||
BielletteQ b11; // biellette quadratique
|
||||
Biel_axi baxi; // biellette axisymétrique linéaire
|
||||
Biel_axiQ baxiQ; // biellette axisymétrique quadratique
|
||||
TriaMembL1 t1; // triangle membranne, lineaire 1 pt d'integ
|
||||
TriaMembQ3 t2; // triangle membranne, quadratique 3 pt d'integ
|
||||
TriaMembQ3_cm1pti triaMembQ3_cm1pti; // triangle membranne, quadratique 1 pt d'integ
|
||||
TriaQ3_cmpti1003 t_cmpti1003; // triangle membranne, quadratique avec 3 pt d'integ interne
|
||||
TriaCub triacub; // triangle cubique
|
||||
TriaCub_cm4pti triacub_cm4pti; // triangle cubique avec 4 pti
|
||||
Quad q1; // quadrangle membranne, lineaire 4 pt d'integ
|
||||
Quad_cm1pti quad_cm1pti; // quadrangle membranne, lineaire 1 pt d'integ
|
||||
QuadQ q2; // quadrangle membranne, quadratique incomplet 4 pt d'integ
|
||||
QuadQCom q3; // quadrangle membranne, quadratique complet 9 pt d'integ
|
||||
QuadQCom_cm4pti quadQCom_cm4pti; // quadrangle membranne, quadratique complet 4 pt d'integ
|
||||
QuadCCom q4; // quadrangle membranne, cubique complet 16 pt d'integ
|
||||
QuadCCom_cm9pti q4_9pti; // quadrangle membranne, cubique complet 9 pt d'integ
|
||||
Hexa h1; // un hexaedre trilineaire, 8 pt d'integ
|
||||
Hexa_cm1pti h1_cm1pti; // un hexaedre trilineaire, 1 pt d'integ
|
||||
Hexa_cm27pti h1_cm27pti; // un hexaedre trilineaire, 27 pt d'integ
|
||||
Hexa_cm64pti h1_cm64pti; // un hexaedre trilineaire, 64 pt d'integ
|
||||
HexaQ h2; // un hexaedre trilquadratique incomplet, 8 pt d'integ
|
||||
HexaQ_cm1pti h2_cm1pti; // un hexaedre trilquadratique incomplet, 1 pt d'integ
|
||||
HexaQ_cm27pti h2_cm27pti; // un hexaedre trilquadratique incomplet, 27 pt d'integ
|
||||
HexaQ_cm64pti h2_cm64pti; // un hexaedre trilquadratique incomplet, 64 pt d'integ
|
||||
HexaQComp h2comp; // un hexaedre trilquadratique complet, 8 pt d'integ
|
||||
HexaQComp_cm1pti h2comp_1pti; // un hexaedre trilquadratique complet, 1 pt d'integ
|
||||
HexaQComp_cm27pti h2comp_27pti; // un hexaedre trilquadratique complet, 27 pt d'integ
|
||||
HexaQComp_cm64pti h2comp_64pti; // un hexaedre trilquadratique complet, 64 pt d'integ
|
||||
Tetra te1; // un tetraedre trilineaire, 1 pt d'integ
|
||||
TetraQ te2; // un tetraedre triquadratique, 4 pt d'integ
|
||||
TetraQ_15pti te3; // un tetraedre triquadratique, 15 pt d'integ
|
||||
TetraQ_cm1pti te2_cm1pti; // un tetraedre triquadratique, 1 pt d'integ
|
||||
PentaL pe1; // un pentaedre trilinéaire, 2 pts d'intégration
|
||||
PentaL_cm1pti pe1_cm1pti; // un pentaedre trilinéaire, 1 pts d'intégration
|
||||
PentaL_cm6pti pe1_cm6pti; // un pentaedre trilinéaire, 6 pts d'intégration
|
||||
PentaQ pe2; // un pentaedre triquadratique incomplet, 6 pts d'intégration
|
||||
PentaQ_cm3pti pe2_cm3pti; // un pentaedre triquadratique incomplet, 3 pts d'intégration
|
||||
PentaQ_cm9pti pe2_cm9pti; // un pentaedre triquadratique incomplet, 9 pts d'intégration
|
||||
PentaQ_cm12pti pe2_cm12pti; // un pentaedre triquadratique incomplet, 12 pts d'intégration
|
||||
PentaQ_cm18pti pe2_cm18pti; // un pentaedre triquadratique incomplet, 18 pts d'intégration
|
||||
PentaQComp pe2Comp; // un pentaedre triquadratique complet, 6 pts d'intégration
|
||||
PentaQComp_cm9pti pe2Comp_cm9pti; // un pentaedre triquadratique complet, 9 pts d'intégration
|
||||
PentaQComp_cm12pti pe2Comp_cm12pti; // un pentaedre triquadratique complet, 12 pts d'intégration
|
||||
PentaQComp_cm18pti pe2Comp_cm18pti; // un pentaedre triquadratique complet, 18 pts d'intégration
|
||||
TriaSfe1 t3; // un triangle SFE1
|
||||
TriaSfe1_cm5pti tfe1_cm5pti; // idem avec 5 pti
|
||||
TriaSfe2 t3_2; // un triangle SFE2
|
||||
TriaSfe3 t3_3; // un triangle SFE3
|
||||
TriaSfe3_3D t3_3_3D; // un triangle SFE3_3D
|
||||
TriaSfe3_cm4pti t3_3_cm4pti; // un triangle SFE3 avec 4pt d'integ
|
||||
TriaSfe3_cm6pti t3_3_cm6pti; // un triangle SFE3 avec 6pt d'integ
|
||||
TriaSfe3_cm12pti t3_3_cm12pti; // un triangle SFE3 avec 12pt d'integ
|
||||
TriaSfe3_cm3pti t3_3_cm3pti; // un triangle SFE3 avec 3pt d'integ type Gauss Lobatto
|
||||
TriaSfe3_cm5pti t3_3_cm5pti; // un triangle SFE3 avec 5pt d'integ type Gauss Lobatto
|
||||
TriaSfe3_cm7pti t3_3_cm7pti; // un triangle SFE3 avec 7pt d'integ type Gauss Lobatto
|
||||
TriaSfe3_cm13pti t3_3_cm13pti; // un triangle SFE3 avec 13pt d'integ type Gauss Lobatto
|
||||
TriaSfe3C t3_3C; // un triangle SFE3C
|
||||
TriaQSfe3 tqSfe3; // un triangle QSFE3
|
||||
TriaQSfe1 tqSfe1; // un triangle QSFE1
|
||||
PoutSimple1 p1; // poutre simple, interpolation quadratique en 2 D
|
||||
TriaAxiL1 triAxil1; // triangle axisymétrique linéaire
|
||||
TriaAxiQ3 triAxiq3; // triangle axisymétrique quadratique 3 pti
|
||||
TriaAxiQ3_cm1pti triaAxiQ3_cm1pti; // triangle axisymétrique quadratique 1 pti
|
||||
TriaAxiQ3_cmpti1003 triaAxiQ3_cmpti1003; // triangle axi quadra 3 pti hors arêtes
|
||||
QuadAxiL1 quadAxil1; // quadrangle axisymétrique linéaire
|
||||
QuadAxiL1_cm1pti quadAxiL1_cm1pti; // idem avec 1 pti
|
||||
QuadAxiQ quadAxiq; // quadrangle axisymétrique quadratique incomplet
|
||||
QuadAxiQComp quadAxiqcomp; // quad quadratique axisymétrique complet
|
||||
QuadAxiQComp_cm4pti quadAxiQComp_cm4pti; // idem mais avec 4 pti
|
||||
QuadAxiCCom quadAxicCom; // quad cubique axi complet
|
||||
QuadAxiCCom_cm9pti quadAxiCCom_cm9pti; // idem avec 9 pti
|
||||
ElemPoint elemPoint; // élément pour umat abaqus
|
||||
ElemPoint_CP elemPoint_CP; // idem mais pour les contraintes planes
|
||||
//.... cas de la thermique
|
||||
BielletteThermi bielletteThermi; // une biellette thermique
|
||||
|
||||
// le projet étant définit, on peut définir le fichier de stockage des temps cpu
|
||||
pt_UtilLecture = projet.Def_sortie_temps_cpu();
|
||||
|
||||
|
||||
//il y a deux types d'entrée de donnée soit via un fichier info
|
||||
// --------------------------------------------------------
|
||||
// choix en fonction de la construction du projet
|
||||
// --------------------------------------------------------
|
||||
if (retour == "def_fichier_commande")
|
||||
// -------------------------------------------------
|
||||
// cas de la définition d'un fichier de commandes
|
||||
// -------------------------------------------------
|
||||
{projet.Def_fichier_commande(retour);}
|
||||
else if (retour == "def_schema_XML")
|
||||
// ----------------------------------------------------------------------
|
||||
// cas de la définition d'un fichier de de shema XML d'entrée de données
|
||||
// ----------------------------------------------------------------------
|
||||
{projet.Def_fichier_SchemaXML(retour);}
|
||||
else if (retour != "fin")
|
||||
// --------------------------------------------------------
|
||||
// cas d'un calcul
|
||||
// definition des quatres grandes etapes du calcul
|
||||
// --------------------------------------------------------
|
||||
{
|
||||
projet.Lecture(); // 1- lecture initiale
|
||||
|
||||
// #ifdef USE_PROFILE
|
||||
// // préparation du profiler
|
||||
// if (!ProfilerInit(collectDetailed, bestTimeBase,8000, 100))
|
||||
// {
|
||||
// #endif
|
||||
|
||||
do
|
||||
{ projet.Calcul(); // 2- calcul
|
||||
|
||||
// #ifdef USE_PROFILE
|
||||
// int erro;
|
||||
// // sortie des infos pour le profiler
|
||||
// erro= ProfilerDump("\pHerezh.prof");
|
||||
// ProfilerTerm();
|
||||
// }
|
||||
// #endif
|
||||
|
||||
projet.SortieDesResultats(); // 3- sortie automatique résultats
|
||||
projet.Visualisation_interactive(); // 4- sortie interactive résultats
|
||||
// ou automatique via un fichier de commande
|
||||
} while (projet.Lecture_secondaire());
|
||||
};
|
||||
// fermeture des fichiers de visualisation liés au projet
|
||||
projet.FermetureFichiersVisualisation();
|
||||
|
||||
// on sauvegarde les différents temps cpu, et on récupère l'adresse d'UtilLecture
|
||||
pt_UtilLecture = projet.Sortie_temps_cpu();
|
||||
// gestion du temps cpu global
|
||||
temps_CPU_Herezh_total.Arret_du_comptage(); // fin comptage cpu
|
||||
temps_CPU_Herezh_total.Affiche_hh_mn_s_ml(cout);
|
||||
if (pt_UtilLecture != NULL) // sortie sur fichier si le fichier a été créé
|
||||
{ // récupération du fichier des temps cpu
|
||||
ofstream & sort_cpu = pt_UtilLecture->Sort_temps_cpu();
|
||||
sort_cpu << "\n ------- temps globaux jour/heure:minute:seconde:centieme ------\n";
|
||||
temps_CPU_Herezh_total.Affiche_hh_mn_s_ml(pt_UtilLecture->Sort_temps_cpu());
|
||||
};
|
||||
} // fin de la surveillance
|
||||
catch (ErrSortie erreur)
|
||||
{ cout << "\n ======== erreur (Sortie) detectee ====== " << endl;
|
||||
// on sauvegarde les différents temps cpu, et on récupère l'adresse d'UtilLecture
|
||||
projet.Arret_du_comptage_CPU(); // on termine les comptages non fermés
|
||||
pt_UtilLecture = projet.Sortie_temps_cpu();
|
||||
// gestion du temps cpu global
|
||||
temps_CPU_Herezh_total.Arret_du_comptage(); // fin comptage cpu
|
||||
temps_CPU_Herezh_total.Affiche_hh_mn_s_ml(cout);
|
||||
if (pt_UtilLecture != NULL) // sortie sur fichier si le fichier a été créé
|
||||
{ // récupération du fichier des temps cpu
|
||||
ofstream & sort_cpu = pt_UtilLecture->Sort_temps_cpu();
|
||||
sort_cpu << "\n ------- temps globaux jour/heure:minute:seconde:centieme ------\n";
|
||||
temps_CPU_Herezh_total.Affiche_hh_mn_s_ml(pt_UtilLecture->Sort_temps_cpu());
|
||||
};
|
||||
}
|
||||
catch (ErrSortieFinale erreur)
|
||||
{ cout << "\n ======== erreur (Sortie) detectee ====== " << endl;
|
||||
// on sauvegarde les différents temps cpu, et on récupère l'adresse d'UtilLecture
|
||||
projet.Arret_du_comptage_CPU(); // on termine les comptages non fermés
|
||||
pt_UtilLecture = projet.Sortie_temps_cpu();
|
||||
// gestion du temps cpu global
|
||||
temps_CPU_Herezh_total.Arret_du_comptage(); // fin comptage cpu
|
||||
temps_CPU_Herezh_total.Affiche_hh_mn_s_ml(cout);
|
||||
if (pt_UtilLecture != NULL) // sortie sur fichier si le fichier a été créé
|
||||
{ // récupération du fichier des temps cpu
|
||||
ofstream & sort_cpu = pt_UtilLecture->Sort_temps_cpu();
|
||||
sort_cpu << "\n ------- temps globaux jour/heure:minute:seconde:centieme ------\n";
|
||||
temps_CPU_Herezh_total.Affiche_hh_mn_s_ml(pt_UtilLecture->Sort_temps_cpu());
|
||||
};
|
||||
}
|
||||
catch ( ... )
|
||||
{ cout << "\n ======== erreur detectee ====== " << endl;
|
||||
projet.Arret_du_comptage_CPU(); // on termine les comptages non fermés
|
||||
// on sauvegarde les différents temps cpu, et on récupère l'adresse d'UtilLecture
|
||||
pt_UtilLecture = projet.Sortie_temps_cpu();
|
||||
// gestion du temps cpu global
|
||||
temps_CPU_Herezh_total.Arret_du_comptage(); // fin comptage cpu
|
||||
temps_CPU_Herezh_total.Affiche_hh_mn_s_ml(cout);
|
||||
if (pt_UtilLecture != NULL) // sortie sur fichier si le fichier a été créé
|
||||
{ // récupération du fichier des temps cpu
|
||||
ofstream & sort_cpu = pt_UtilLecture->Sort_temps_cpu();
|
||||
sort_cpu << "\n ------- temps globaux jour/heure:minute:seconde:centieme ------\n";
|
||||
temps_CPU_Herezh_total.Affiche_hh_mn_s_ml(pt_UtilLecture->Sort_temps_cpu());
|
||||
};
|
||||
};
|
||||
|
||||
}
|
||||
catch (ErrSortieFinale erreur)
|
||||
{ cout << "\n *** ======== erreur fatale detectee ======*** " << endl;
|
||||
// gestion du temps cpu global
|
||||
temps_CPU_Herezh_total.Arret_du_comptage(); // fin comptage cpu
|
||||
temps_CPU_Herezh_total.Affiche_hh_mn_s_ml(cout);
|
||||
if (pt_UtilLecture != NULL) // sortie sur fichier si le fichier a été créé
|
||||
{ // récupération du fichier des temps cpu
|
||||
ofstream & sort_cpu = pt_UtilLecture->Sort_temps_cpu();
|
||||
sort_cpu << "\n ------- temps globaux jour/heure:minute:seconde:centieme ------\n";
|
||||
temps_CPU_Herezh_total.Affiche_hh_mn_s_ml(pt_UtilLecture->Sort_temps_cpu());
|
||||
};
|
||||
}
|
||||
catch ( ... )
|
||||
{ cout << "\n *** ======== erreur fatale detectee ======*** " << endl;
|
||||
};
|
||||
|
||||
|
||||
cout << "\n =============================================================\n";
|
||||
cout << " | fin HEREZH++ |\n";
|
||||
cout << " =============================================================";
|
||||
cout << endl;
|
||||
|
||||
};
|
79
General/herezh.h
Normal file
79
General/herezh.h
Normal file
|
@ -0,0 +1,79 @@
|
|||
/*! \file herezh.h
|
||||
\brief Entête du programme herezh++.
|
||||
*/
|
||||
|
||||
// This file is part of the Herezh++ application.
|
||||
//
|
||||
// The finite element software Herezh++ is dedicated to the field
|
||||
// of mechanics for large transformations of solid structures.
|
||||
// It is developed by Gérard Rio (APP: IDDN.FR.010.0106078.000.R.P.2006.035.20600)
|
||||
// INSTITUT DE RECHERCHE DUPUY DE LÔME (IRDL) <https://www.irdl.fr/>.
|
||||
//
|
||||
// Herezh++ is distributed under GPL 3 license ou ultérieure.
|
||||
//
|
||||
// Copyright (C) 1997-2021 Université Bretagne Sud (France)
|
||||
// AUTHOR : Gérard Rio
|
||||
// E-MAIL : gerardrio56@free.fr
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License,
|
||||
// or (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
// See the GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
//
|
||||
// For more information, please consult: <https://herezh.irdl.fr/>.
|
||||
|
||||
/************************************************************************
|
||||
* *
|
||||
* DATE: 18/10/2001 *
|
||||
* $ *
|
||||
* AUTEUR: G RIO (mailto:gerardrio56@free.fr) *
|
||||
* $ *
|
||||
* PROJET: Herezh++ *
|
||||
* $ *
|
||||
************************************************************************
|
||||
* BUT: Entête du programme herezh++ *
|
||||
* $ *
|
||||
* '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' * *
|
||||
* VERIFICATION: *
|
||||
* *
|
||||
* ! date ! auteur ! but ! *
|
||||
* ------------------------------------------------------------ *
|
||||
* ! ! ! ! *
|
||||
* *
|
||||
* $ *
|
||||
* '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' *
|
||||
* MODIFICATIONS:
|
||||
* *
|
||||
* ! date ! auteur ! but ! *
|
||||
* ------------------------------------------------------------ *
|
||||
* *
|
||||
* $ *
|
||||
* *
|
||||
************************************************************************/
|
||||
# include <iostream>
|
||||
|
||||
//#include "Debug.h"
|
||||
#include "Banniere.h"
|
||||
|
||||
#include <math.h>
|
||||
# include "EnteteParaGlob.h"
|
||||
|
||||
#include "ConstantePrinc.h"
|
||||
|
||||
void Presentation();
|
||||
|
||||
void Presentation()
|
||||
{ // affichage de l'entête du programme
|
||||
// sortie de la banniere
|
||||
Banniere::Sortie_banniere();
|
||||
// puis affichage de la version
|
||||
ParaGlob::Sortie_Version();
|
||||
};
|
Loading…
Reference in a new issue