// 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) . // // Herezh++ is distributed under GPL 3 license ou ultérieure. // // Copyright (C) 1997-2022 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 . // // For more information, please consult: . /************************************************************************ * * * 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 //#include "Debug.h" #ifndef ENLINUX_STREAM #include // pour le flot en memoire centrale #else #include // 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" #ifdef UTILISATION_MPI #include "Distribution_CPU.h" #endif //------------------------------------------------------------------ //! 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(); // dans le cas MPI, transmission au sous_process des infos nécessaire à la // lecture initiale #ifdef UTILISATION_MPI void Transmission_process_Lecture(int process); #endif // 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 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