2021-09-26 17:51:23 +02:00
|
|
|
|
|
|
|
// 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.
|
|
|
|
//
|
2023-05-03 17:23:49 +02:00
|
|
|
// Copyright (C) 1997-2022 Université Bretagne Sud (France)
|
2021-09-26 17:51:23 +02:00
|
|
|
// 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"
|
2023-05-03 17:23:49 +02:00
|
|
|
#ifdef UTILISATION_MPI
|
|
|
|
#include "Distribution_CPU.h"
|
|
|
|
#endif
|
|
|
|
|
2021-09-26 17:51:23 +02:00
|
|
|
|
|
|
|
//------------------------------------------------------------------
|
|
|
|
//! 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();
|
2023-05-03 17:23:49 +02:00
|
|
|
|
|
|
|
// 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
|
|
|
|
|
2021-09-26 17:51:23 +02:00
|
|
|
// 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
|