Herezh_dev/General/Projet.h
2023-05-03 17:23:49 +02:00

231 lines
10 KiB
C++

// 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-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 <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"
#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 <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