851 lines
39 KiB
C++
851 lines
39 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-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 "EnumTypeCalcul.h"
|
|
#include <stdlib.h>
|
|
#include "Sortie.h"
|
|
#include "CharUtil.h"
|
|
|
|
// Retourne le nom d'un type de calcul a partir de son identificateur de
|
|
// type enumere id_TypeCalcul correspondant
|
|
string Nom_TypeCalcul (const EnumTypeCalcul id_TypeCalcul)
|
|
{
|
|
string result;
|
|
switch (id_TypeCalcul)
|
|
{case RIEN_TYPECALCUL : result="aucun_TYPE_de_CALCUL"; break;
|
|
case DYNA_IMP : result="dynamique_implicite"; break;
|
|
case DYNA_EXP : result="dynamique_explicite"; break;
|
|
case DYNA_EXP_TCHAMWA : result="dynamique_explicite_tchamwa"; break;
|
|
case DYNA_EXP_CHUNG_LEE: result="dynamique_explicite_chung_lee"; break;
|
|
case DYNA_EXP_ZHAI : result="dynamique_explicite_zhai"; break;
|
|
case DYNA_RUNGE_KUTTA : result="dynamique_Runge_Kutta"; break;
|
|
case NON_DYNA : result="non_dynamique"; break;
|
|
case NON_DYNA_CONT : result="non_dynamique_avec_contact"; break;
|
|
case FLAMB_LINEAIRE : result="flambement_lineaire_en_implicite_non_dynamique"; break;
|
|
case INFORMATIONS : result="informations"; break;
|
|
case UTILITAIRES : result="utilitaires"; break;
|
|
case DEF_SCHEMA_XML : result="def_schema_xml"; break;
|
|
case UMAT_ABAQUS : result="umat_abaqus"; break;
|
|
case DYNA_EXP_BONELLI : result="dynamique_explicite_bonelli"; break;
|
|
case RELAX_DYNA : result="dynamique_relaxation_dynam"; break;
|
|
case STAT_DYNA_EXP : result="mixte_statique_dynamique_explicite"; break;
|
|
case COMBINER : result="combiner"; break;
|
|
default :
|
|
cout << "\nErreur : valeur incorrecte du type EnumTypeCalcul !\n";
|
|
cout << "string Nom_TypeCalcul (EnumTypeCalcul id_TypeCalcul)" << endl;
|
|
Sortie(1);
|
|
};
|
|
return result;
|
|
|
|
};
|
|
|
|
// Retourne le nom du sous type de calcul a partir de son identificateur de
|
|
// type enumere id_SousTypeCalcul correspondant, si il existe sinon retourne : aucun_soustypedecalcul
|
|
string Nom_SousTypeCalcul (const EnumSousTypeCalcul id_SousTypeCalcul)
|
|
{
|
|
string result;
|
|
switch (id_SousTypeCalcul)
|
|
{case aucun_soustypedecalcul : result="aucun_sous_TYPE_de_CALCUL"; break;
|
|
case avec_remonte : result="avec_remontee_aux_valeurs_aux_noeuds"; break;
|
|
case avec_remonte_erreur : result="avec_remontee_et_calcul_d'erreur"; break;
|
|
case avec_remonte_erreur_relocation : result="avec_remonte_erreur_et_relocalion"; break;
|
|
case avec_remonte_erreur_raffinement_relocation : result="avec_remontee_erreur_raffinement_et_relocation"; break;
|
|
case remonte : result="uniquement_remontee"; break;
|
|
case remonte_erreur : result="remontee_et_erreur"; break;
|
|
case remonte_erreur_relocation : result="remontee_erreur_et_relocation"; break;
|
|
case remonte_erreur_raffinement_relocation : result="remontee_erreur_raffinement_et_relocation"; break;
|
|
case frontieres : result="frontieres"; break;
|
|
case visualisation : result="visualisation"; break;
|
|
case LinVersQuad : result="LinVersQuad"; break;
|
|
case QuadIncVersQuadComp : result="QuadIncVersQuadComp"; break;
|
|
case relocPtMilieuQuad : result="relocPtMilieuQuad"; break;
|
|
case sauveCommandesVisu : result="sauveCommandesVisu"; break;
|
|
case lectureCommandesVisu : result="lectureCommandesVisu"; break;
|
|
case commandeInteractive : result="commandeInteractive"; break;
|
|
case sauveMaillagesEnCours : result="sauveMaillagesEnCours"; break;
|
|
case extrusion2D3D : result="extrusion2D3D"; break;
|
|
case creation_reference : result="creation_reference"; break;
|
|
case prevision_visu_sigma : result="prevision_visu_sigma"; break;
|
|
case prevision_visu_epsilon : result="prevision_visu_epsilon"; break;
|
|
case prevision_visu_erreur : result="prevision_visu_erreur"; break;
|
|
case modif_orientation_element : result="modif_orientation_element"; break;
|
|
case creationMaillageSFE : result="creationMaillageSFE"; break;
|
|
case suppression_noeud_non_references : result="suppression_noeud_non_references"; break;
|
|
case renumerotation_des_noeuds : result="renumerotation_des_noeuds"; break;
|
|
case fusion_de_noeuds : result="fusion_de_noeuds"; break;
|
|
case fusion_elements : result="fusion_elements"; break;
|
|
case fusion_maillages : result="fusion_maillages"; break;
|
|
case cree_sous_maillage : result="cree_sous_maillage"; break;
|
|
case calcul_geometrique : result="calcul_geometrique"; break;
|
|
default :
|
|
cout << "\nErreur : valeur incorrecte du type EnumSousTypeCalcul !\n";
|
|
cout << "string Nom_SousTypeCalcul (EnumSousTypeCalcul id_SousTypeCalcul)" << endl;
|
|
Sortie(1);
|
|
};
|
|
return result;
|
|
|
|
};
|
|
|
|
// retourne le type d'évolution temporelle du calcul
|
|
Enum_evolution_temporelle Evolution_temporelle_du_calcul(const EnumTypeCalcul id_TypeCalcul)
|
|
{Enum_evolution_temporelle result;;
|
|
switch (id_TypeCalcul)
|
|
{ case RIEN_TYPECALCUL : result=AUCUNE_EVOLUTION; break;
|
|
case DYNA_IMP : result=DYNAMIQUE; break;
|
|
case DYNA_EXP : result=DYNAMIQUE; break;
|
|
case DYNA_EXP_TCHAMWA : result=DYNAMIQUE; break;
|
|
case DYNA_EXP_CHUNG_LEE: result=DYNAMIQUE; break;
|
|
case DYNA_EXP_ZHAI : result=DYNAMIQUE; break;
|
|
case DYNA_RUNGE_KUTTA : result=DYNAMIQUE; break;
|
|
case NON_DYNA : result=STATIQUE; break;
|
|
case NON_DYNA_CONT : result=STATIQUE; break;
|
|
case FLAMB_LINEAIRE : result=STATIQUE; break;
|
|
case INFORMATIONS : result=AUCUNE_EVOLUTION; break;
|
|
case UTILITAIRES : result=AUCUNE_EVOLUTION; break;
|
|
case DEF_SCHEMA_XML : result=AUCUNE_EVOLUTION; break;
|
|
case UMAT_ABAQUS : result=AUCUNE_EVOLUTION; break;
|
|
case DYNA_EXP_BONELLI : result=DYNAMIQUE; break;
|
|
case RELAX_DYNA : result=DYNAMIQUE; break;
|
|
case STAT_DYNA_EXP : result=DYNAMIQUE; break;
|
|
case COMBINER : result=DYNAMIQUE; break;
|
|
default :
|
|
cout << "\nErreur : valeur incorrecte du type EnumTypeCalcul !\n";
|
|
cout << "Enum_evolution_temporelle Evolution_temporelle_du_calcul(const EnumTypeCalcul id_TypeCalcul)"
|
|
<< endl;
|
|
Sortie(1);
|
|
};
|
|
return result;
|
|
};
|
|
|
|
// Retourne l'identificateur de type enumere associe au nom du type de calcul
|
|
EnumTypeCalcul Id_nom_TypeCalcul (const string& nom_TypeCalcul)
|
|
{
|
|
|
|
EnumTypeCalcul result;
|
|
if (( nom_TypeCalcul == "RIEN_TYPECALCUL" )
|
|
||( nom_TypeCalcul == "aucun_TYPE_de_CALCUL" ))
|
|
result=RIEN_TYPECALCUL;
|
|
else if (( nom_TypeCalcul == "DYNA_IMP" )
|
|
||( nom_TypeCalcul == "dynamique_implicite" ))
|
|
result=DYNA_IMP;
|
|
else if (( nom_TypeCalcul == "DYNA_EXP" )
|
|
||( nom_TypeCalcul == "dynamique_explicite" ))
|
|
result=DYNA_EXP;
|
|
else if (( nom_TypeCalcul == "DYNA_EXP_TCHAMWA" )
|
|
||( nom_TypeCalcul == "dynamique_explicite_tchamwa" ))
|
|
result=DYNA_EXP_TCHAMWA;
|
|
else if (( nom_TypeCalcul == "DYNA_EXP_CHUNG_LEE" )
|
|
||( nom_TypeCalcul == "dynamique_explicite_chung_lee" ))
|
|
result=DYNA_EXP_CHUNG_LEE;
|
|
else if (( nom_TypeCalcul == "DYNA_EXP_ZHAI" )
|
|
||( nom_TypeCalcul == "dynamique_explicite_zhai" ))
|
|
result=DYNA_EXP_ZHAI;
|
|
else if (( nom_TypeCalcul == "DYNA_RUNGE_KUTTA" )
|
|
||( nom_TypeCalcul == "dynamique_Runge_Kutta" ))
|
|
result=DYNA_RUNGE_KUTTA;
|
|
else if (( nom_TypeCalcul == "NON_DYNA" )
|
|
||( nom_TypeCalcul == "non_dynamique" ))
|
|
result=NON_DYNA;
|
|
else if (( nom_TypeCalcul == "NON_DYNA_CONT" )
|
|
||( nom_TypeCalcul == "non_dynamique_avec_contact" ))
|
|
result=NON_DYNA_CONT;
|
|
else if (( nom_TypeCalcul == "FLAMB_LINEAIRE" )
|
|
||( nom_TypeCalcul == "flambement_lineaire_en_implicite_non_dynamique" ))
|
|
result=FLAMB_LINEAIRE;
|
|
else if (( nom_TypeCalcul == "INFORMATIONS" )
|
|
||( nom_TypeCalcul == "calcul_d'information_relatives_aux_maillages_d'entrees" ))
|
|
result=INFORMATIONS;
|
|
else if (( nom_TypeCalcul == "UTILITAIRES" )
|
|
||( nom_TypeCalcul == "utilitaires" ))
|
|
result=UTILITAIRES;
|
|
else if (( nom_TypeCalcul == "DEF_SCHEMA_XML" )
|
|
||( nom_TypeCalcul == "def_schema_xml" ))
|
|
result=DEF_SCHEMA_XML;
|
|
else if (( nom_TypeCalcul == "UMAT_ABAQUS" )
|
|
||( nom_TypeCalcul == "umat_abaqus" ))
|
|
result=UMAT_ABAQUS;
|
|
else if (( nom_TypeCalcul == "DYNA_EXP_BONELLI" )
|
|
||( nom_TypeCalcul == "dynamique_explicite_bonelli" ))
|
|
result=DYNA_EXP_BONELLI;
|
|
else if (( nom_TypeCalcul == "RELAX_DYNA" )
|
|
||( nom_TypeCalcul == "dynamique_relaxation_dynam" ))
|
|
result=RELAX_DYNA;
|
|
else if (( nom_TypeCalcul == "STAT_DYNA_EXP" )
|
|
||( nom_TypeCalcul == "mixte_statique_dynamique_explicite" ))
|
|
result=STAT_DYNA_EXP;
|
|
else if (( nom_TypeCalcul == "COMBINER" )
|
|
||( nom_TypeCalcul == "combiner" ))
|
|
result=COMBINER;
|
|
else
|
|
{
|
|
cout << "\nErreur : nom de type de calcul inconnu !\n";
|
|
cout << " nom_TypeCalcul = " << nom_TypeCalcul << '\n';
|
|
cout << "Id_nom_TypeCalcul (string& nom_TypeCalcul) " << endl;
|
|
Sortie(1);
|
|
};
|
|
return result;
|
|
|
|
};
|
|
|
|
// Retourne l'identificateur de type enumere associe au nom du sous type de calcul
|
|
EnumSousTypeCalcul Id_nom_SousTypeCalcul (const string& nom_SousTypeCalcul)
|
|
{
|
|
|
|
EnumSousTypeCalcul result;
|
|
if ( nom_SousTypeCalcul == "aucun_sous_TYPE_de_CALCUL" ) result=aucun_soustypedecalcul;
|
|
else if ( nom_SousTypeCalcul == "avec_remontee_aux_valeurs_aux_noeuds" ) result=avec_remonte;
|
|
else if ( nom_SousTypeCalcul == "avec_remontee_et_calcul_d'erreur" ) result=avec_remonte_erreur;
|
|
else if ( nom_SousTypeCalcul == "avec_remonte_erreur_et_relocalion" ) result=avec_remonte_erreur_relocation;
|
|
else if ( nom_SousTypeCalcul == "avec_remontee_erreur_raffinement_et_relocation" )
|
|
result=avec_remonte_erreur_raffinement_relocation;
|
|
else if ( nom_SousTypeCalcul == "uniquement_remontee" ) result=remonte;
|
|
else if ( nom_SousTypeCalcul == "remontee_et_erreur" )result=remonte_erreur;
|
|
else if ( nom_SousTypeCalcul == "remontee_erreur_et_relocation" ) result=remonte_erreur_relocation;
|
|
else if ( nom_SousTypeCalcul == "remontee_erreur_raffinement_et_relocation" )
|
|
result=remonte_erreur_raffinement_relocation;
|
|
else if ( nom_SousTypeCalcul == "frontieres" ) result=frontieres;
|
|
else if ( nom_SousTypeCalcul == "visualisation" ) result=visualisation;
|
|
else if ( nom_SousTypeCalcul == "LinVersQuad" )result=LinVersQuad;
|
|
else if ( nom_SousTypeCalcul == "QuadIncVersQuadComp" )result=QuadIncVersQuadComp;
|
|
else if ( nom_SousTypeCalcul == "relocPtMilieuQuad" ) result=relocPtMilieuQuad;
|
|
else if ( nom_SousTypeCalcul == "sauveCommandesVisu" ) result=sauveCommandesVisu;
|
|
else if ( nom_SousTypeCalcul == "lectureCommandesVisu" ) result=lectureCommandesVisu;
|
|
else if ( nom_SousTypeCalcul == "commandeInteractive" ) result=commandeInteractive;
|
|
else if ( nom_SousTypeCalcul == "sauveMaillagesEnCours" ) result=sauveMaillagesEnCours;
|
|
else if ( nom_SousTypeCalcul == "extrusion2D3D" ) result=extrusion2D3D;
|
|
else if ( nom_SousTypeCalcul == "creation_reference" ) result=creation_reference;
|
|
else if ( nom_SousTypeCalcul == "prevision_visu_sigma" ) result=prevision_visu_sigma;
|
|
else if ( nom_SousTypeCalcul == "prevision_visu_epsilon" ) result=prevision_visu_epsilon;
|
|
else if ( nom_SousTypeCalcul == "prevision_visu_erreur" ) result=prevision_visu_erreur;
|
|
else if ( nom_SousTypeCalcul == "modif_orientation_element" ) result=modif_orientation_element;
|
|
else if ( nom_SousTypeCalcul == "creationMaillageSFE" ) result=creationMaillageSFE;
|
|
else if ( nom_SousTypeCalcul == "suppression_noeud_non_references" ) result=suppression_noeud_non_references;
|
|
else if ( nom_SousTypeCalcul == "renumerotation_des_noeuds" ) result=renumerotation_des_noeuds;
|
|
else if ( nom_SousTypeCalcul == "fusion_de_noeuds" ) result=fusion_de_noeuds;
|
|
else if ( nom_SousTypeCalcul == "fusion_elements" ) result=fusion_elements;
|
|
else if ( nom_SousTypeCalcul == "fusion_maillages" ) result=fusion_maillages;
|
|
else if ( nom_SousTypeCalcul == "cree_sous_maillage" ) result=cree_sous_maillage;
|
|
else if ( nom_SousTypeCalcul == "calcul_geometrique" ) result=calcul_geometrique;
|
|
else
|
|
{
|
|
cout << "\nErreur : nom de sous type de calcul inconnu !\n";
|
|
cout << " nom_SousTypeCalcul = " << nom_SousTypeCalcul << '\n';
|
|
cout << "Id_nom_SousTypeCalcul (string& nom_SousTypeCalcul)" << endl;
|
|
Sortie(1);
|
|
};
|
|
return result;
|
|
|
|
};
|
|
|
|
|
|
// indique si le calcul est de type dynamique explicite ou non
|
|
bool DynamiqueExplicite(const EnumTypeCalcul id_TypeCalcul)
|
|
{ bool result=false;
|
|
switch (id_TypeCalcul)
|
|
{ case DYNA_EXP : result=true; break;
|
|
case DYNA_EXP_TCHAMWA : result=true; break;
|
|
case DYNA_EXP_CHUNG_LEE: result=true; break;
|
|
case DYNA_EXP_ZHAI : result=true; break;
|
|
case DYNA_RUNGE_KUTTA : result=true; break;
|
|
case DYNA_EXP_BONELLI : result=true; break;
|
|
case RELAX_DYNA : result=true; break;
|
|
case STAT_DYNA_EXP : result=true; break;
|
|
case COMBINER : result=true; break;
|
|
default :
|
|
cout << "\nErreur : valeur incorrecte du type EnumTypeCalcul ! = " << id_TypeCalcul << "\n";
|
|
cout << "DynamiqueExplicite(const EnumTypeCalcul id_TypeCalcul)"
|
|
<< endl;
|
|
Sortie(1);
|
|
};
|
|
return result;
|
|
};
|
|
|
|
|
|
// indique si le calcul est de type implicite ou non
|
|
bool Implicite(const EnumTypeCalcul id_TypeCalcul)
|
|
{ bool result=false;
|
|
switch (id_TypeCalcul)
|
|
{case RIEN_TYPECALCUL : result=false; break;
|
|
case DYNA_IMP : result=true; break;
|
|
case DYNA_EXP : result=false; break;
|
|
case DYNA_EXP_TCHAMWA : result=false; break;
|
|
case DYNA_EXP_CHUNG_LEE: result=false; break;
|
|
case DYNA_EXP_ZHAI : result=false; break;
|
|
case DYNA_RUNGE_KUTTA : result=false; break;
|
|
case NON_DYNA : result=true; break;
|
|
case NON_DYNA_CONT : result=true; break;
|
|
case FLAMB_LINEAIRE : result=true; break;
|
|
case INFORMATIONS : result=false; break;
|
|
case UTILITAIRES : result=false; break;
|
|
case DEF_SCHEMA_XML : result=false; break;
|
|
case UMAT_ABAQUS : result=true; break;
|
|
case DYNA_EXP_BONELLI : result=false; break;
|
|
case RELAX_DYNA : result=false; break;
|
|
case STAT_DYNA_EXP : result=false; break;
|
|
case COMBINER : result=false; break;
|
|
default :
|
|
cout << "\nErreur : valeur incorrecte du type EnumTypeCalcul ! = " << id_TypeCalcul << "\n";
|
|
cout << " Implicite(..."
|
|
<< endl;
|
|
Sortie(1);
|
|
};
|
|
return result;
|
|
};
|
|
|
|
|
|
//lecture du type de calcul et d'une liste de sous-type eventuel
|
|
// la lecture se fait via UtilLecture.
|
|
// Le booléen indique si le type_calcul ou le sous_type_calcul est actif ou pas
|
|
// au niveau de syntaxe on a :
|
|
// - tout d'abord le type de calcul suivi ou non de la chaine "avec"
|
|
// dans le premier cas le booleen avec_Calcul est mis a true sinon false
|
|
// - puis une liste de sous type qui chacun sont précèdé ou non de la chaine "plus"
|
|
// dans le premier cas le booleen avec_sousCalcul correspondant est true sinon false
|
|
// les sous_types sont stocké par ordre d'arrivé
|
|
void LectureTypeCalcul(UtilLecture& entreePrinc,EnumTypeCalcul& typeCalcul,bool& avec_Calcul
|
|
,list<EnumSousTypeCalcul> & sousTypeCalcul
|
|
,list<bool>& avec_sousCalcul)
|
|
{ // tout d'abord le type de calcul
|
|
int nbmot; // nb de mot du type principal
|
|
if ((strstr(entreePrinc.tablcar,"dynamique")!=NULL) &&
|
|
(strstr(entreePrinc.tablcar,"implicite")!=NULL))
|
|
{ typeCalcul=DYNA_IMP; nbmot = 1; }
|
|
else if ((strstr(entreePrinc.tablcar,"dynamique")!=NULL) &&
|
|
(strstr(entreePrinc.tablcar,"explicite")!=NULL) &&
|
|
(strstr(entreePrinc.tablcar,"zhai")!=NULL))
|
|
{ typeCalcul=DYNA_EXP_ZHAI; nbmot = 1; }
|
|
else if ((strstr(entreePrinc.tablcar,"dynamique")!=NULL) &&
|
|
(strstr(entreePrinc.tablcar,"Runge_Kutta")!=NULL))
|
|
{ typeCalcul=DYNA_RUNGE_KUTTA; nbmot = 1; }
|
|
else if ((strstr(entreePrinc.tablcar,"dynamique")!=NULL) &&
|
|
(strstr(entreePrinc.tablcar,"explicite")!=NULL) &&
|
|
(strstr(entreePrinc.tablcar,"chung_lee")!=NULL))
|
|
{ typeCalcul=DYNA_EXP_CHUNG_LEE; nbmot = 1; }
|
|
else if ((strstr(entreePrinc.tablcar,"dynamique")!=NULL) &&
|
|
(strstr(entreePrinc.tablcar,"explicite")!=NULL) &&
|
|
(strstr(entreePrinc.tablcar,"tchamwa")!=NULL))
|
|
{ typeCalcul=DYNA_EXP_TCHAMWA; nbmot = 1; }
|
|
else if ((strstr(entreePrinc.tablcar,"dynamique")!=NULL) &&
|
|
(strstr(entreePrinc.tablcar,"explicite")!=NULL) &&
|
|
(strstr(entreePrinc.tablcar,"bonelli")!=NULL))
|
|
{ typeCalcul=DYNA_EXP_BONELLI; nbmot = 1; }
|
|
else if ((strstr(entreePrinc.tablcar,"dynamique")!=NULL) &&
|
|
(strstr(entreePrinc.tablcar,"relaxation")!=NULL) &&
|
|
(strstr(entreePrinc.tablcar,"_dynam")!=NULL))
|
|
{ typeCalcul=RELAX_DYNA; nbmot = 1; }
|
|
else if (strstr(entreePrinc.tablcar,"mixte_statique_dynamique_explicite")!=NULL)
|
|
{ typeCalcul=STAT_DYNA_EXP; nbmot = 1; }
|
|
else if (strstr(entreePrinc.tablcar,"combiner")!=NULL)
|
|
{ typeCalcul=COMBINER; nbmot = 1; }
|
|
|
|
// !!! attention !!!
|
|
// il faut que le cas dynamique_explicite soit le dernier, car sinon il est pris par défaut
|
|
else if ((strstr(entreePrinc.tablcar,"dynamique")!=NULL) &&
|
|
(strstr(entreePrinc.tablcar,"explicite")!=NULL))
|
|
{ typeCalcul=DYNA_EXP; nbmot = 1; }
|
|
else if (strstr(entreePrinc.tablcar,"non_dynamique")!=NULL)
|
|
{ typeCalcul=NON_DYNA; nbmot = 1; }
|
|
else if (strstr(entreePrinc.tablcar,"non_dyna_contact")!=NULL)
|
|
{ typeCalcul=NON_DYNA_CONT; nbmot = 1; }
|
|
else if (strstr(entreePrinc.tablcar,"flamb_lineaire")!=NULL)
|
|
{ typeCalcul=FLAMB_LINEAIRE; nbmot = 1; }
|
|
else if (strstr(entreePrinc.tablcar,"informations")!=NULL)
|
|
{ typeCalcul=INFORMATIONS; nbmot = 1; }
|
|
else if (strstr(entreePrinc.tablcar,"utilitaires")!=NULL)
|
|
{ typeCalcul=UTILITAIRES; nbmot = 1; }
|
|
else if (strstr(entreePrinc.tablcar,"def_schema_xml")!=NULL)
|
|
{ typeCalcul=DEF_SCHEMA_XML; nbmot = 1; }
|
|
else if (strstr(entreePrinc.tablcar,"umat_abaqus")!=NULL)
|
|
{ typeCalcul=UMAT_ABAQUS; nbmot = 1; }
|
|
else
|
|
{ cout << "\nErreur : nom de type de calcul : " << entreePrinc.tablcar
|
|
<< ", inconnu !\n";
|
|
cout << "LectureTypeCalcul(UtilLecture& lec);" << endl;
|
|
Sortie(1);
|
|
};
|
|
// décalage dans la lecture
|
|
string sous_type;
|
|
for (int i=1;i<= nbmot;i++) (*entreePrinc.entree) >> sous_type;
|
|
// on regarde si le prochain mot est "avec" si oui on valide le type principal
|
|
(*entreePrinc.entree) >> sous_type; sous_type = Minuscules (sous_type);
|
|
if ((sous_type.length() == 0)|| (entreePrinc.entree->rdstate()))
|
|
// #ifndef ENLINUX
|
|
// ( (entreePrinc.entree->rdstate() & ios_base::badbit) == ios_base::badbit))
|
|
// #else
|
|
// ( (entreePrinc.entree->rdstate() & ios::badbit) == ios::badbit))
|
|
// #endif
|
|
// cas ou le type est seul alors la validation est par défaut
|
|
avec_Calcul = true;
|
|
else // cas où il y a des sous types
|
|
{if (sous_type == "avec")
|
|
{ avec_Calcul = true;}
|
|
else
|
|
{ avec_Calcul=false;};
|
|
// puis on lit les sous types avec leur validation éventuelle
|
|
// puis les sous-types eventuels
|
|
bool valide = true;
|
|
// dans le cas où on a lue "avec" il faut tout de suite lire le premier sous type
|
|
if (avec_Calcul)
|
|
(*entreePrinc.entree) >> sous_type;
|
|
EnumSousTypeCalcul enum_sous_type;
|
|
bool fin_lecture=false; // fin due à un manque d'info
|
|
while ((!entreePrinc.entree->rdstate())&&(!fin_lecture))
|
|
{ if (sous_type.length() != 0)
|
|
{ if (sous_type == "plus")
|
|
{valide = true;
|
|
(*entreePrinc.entree) >> sous_type;
|
|
if (sous_type.length() == 0)
|
|
{cout << " \n *** erreur dans la lecture des sous_types de calcul,"
|
|
<< " présence du nom : plus, mais pas de sous_type qui suit !!"
|
|
<< "\n LectureTypeCalcul(UtilLecture& entreePrinc,...) \n";
|
|
Sortie(1);
|
|
};
|
|
enum_sous_type=Id_nom_SousTypeCalcul(sous_type.c_str());
|
|
// on sauvegarde dans la liste
|
|
sousTypeCalcul.push_back(enum_sous_type);
|
|
avec_sousCalcul.push_back(valide);
|
|
}
|
|
else
|
|
{valide = false;
|
|
(*entreePrinc.entree) >> sous_type;
|
|
if (sous_type.length() == 0)
|
|
{// cas où il n'y a pas de sous_type, normalement on devrait
|
|
// l'avoir détecté avant mais dans le cas ou il y aurait un "avec"
|
|
// et rien d'autre après
|
|
fin_lecture = true;
|
|
}
|
|
enum_sous_type=Id_nom_SousTypeCalcul(sous_type.c_str());
|
|
// on sauvegarde dans la liste
|
|
sousTypeCalcul.push_back(enum_sous_type);
|
|
avec_sousCalcul.push_back(valide);
|
|
};
|
|
}
|
|
else
|
|
{fin_lecture = true;};
|
|
// arrivée ici on retente une lecture d'un autre sous type
|
|
(*entreePrinc.entree) >> sous_type;
|
|
|
|
};
|
|
};
|
|
// on remet le flot de lecture dans sa position originale
|
|
entreePrinc.FlotDebutDonnee();
|
|
|
|
};
|
|
|
|
// affichage des différents type de calcul et choix du type et éventuellement
|
|
// de sous type
|
|
void Info_commande_type_calcul(UtilLecture& lec,EnumTypeCalcul& typeCalcul,bool& avec_Calcul
|
|
,list<EnumSousTypeCalcul> & sousTypeCalcul
|
|
,list<bool>& avec_sousCalcul)
|
|
{ int num;
|
|
int nbmot; // nb de mot du type principal
|
|
//cout << "\n ";
|
|
string rep; bool choix_valide=false;
|
|
cout << "\n ==>Type principal de calcul (defaut 7) : ? ";
|
|
while (!choix_valide)
|
|
{
|
|
try
|
|
{
|
|
cout
|
|
<< "\n (1) dynamique_implicite (2) dynamique_explicite_zhai "
|
|
<< "\n (3) dynamique_explicite_chung_lee (4) dynamique_explicite_tchamwa "
|
|
<< "\n (5) dynamique_explicite (6) dynamique_Runge_Kutta "
|
|
<< "\n (7) non_dynamique (8) non_dyna_contact"
|
|
<< "\n (9) flamb_lineaire (10) informations "
|
|
<< "\n (11) utilitaires (12) umat_abaqus "
|
|
<< "\n (13) dynamique_explicite_bonelli (14) dynamique_relaxation_dynam "
|
|
<< "\n (15) combiner "
|
|
<< " "<< endl;
|
|
rep = "_";
|
|
int c = std::cin.peek(); // peek character (sans changer le flux !!)
|
|
if (( c == EOF )||(c=='\n'))
|
|
{rep = "7";
|
|
cout << "--> valeur par defaut : 7 "<<endl;
|
|
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 = "7";
|
|
cout << "--> valeur par defaut : 7 "<<endl;
|
|
};
|
|
if (rep == "fin_prog") {Sortie(1);}
|
|
else // sinon
|
|
num = ChangeEntier(rep);
|
|
if ((num >= 1)&&(num<=15))
|
|
{ choix_valide=true;}
|
|
else { cout << "\n Erreur on attendait un entier entre 1 et 15 !!, "
|
|
<< "\n redonnez une bonne valeur"
|
|
<< "\n ou taper fin_prog pour arreter le programme";
|
|
choix_valide=false;
|
|
};
|
|
switch (num)
|
|
{ case 1: //"dynamique_implicite")
|
|
{ typeCalcul=DYNA_IMP; nbmot = 1; break;}
|
|
case 2: // "dynamique_explicite_zhai")
|
|
{ typeCalcul=DYNA_EXP_ZHAI; nbmot = 1; break;}
|
|
case 3: // "dynamique_explicite_chung_lee")
|
|
{ typeCalcul=DYNA_EXP_CHUNG_LEE; nbmot = 1; break;}
|
|
case 4: // "dynamique_explicite_tchamwa")
|
|
{ typeCalcul=DYNA_EXP_TCHAMWA; nbmot = 1; break;}
|
|
case 5: // "dynamique_explicite")
|
|
{ typeCalcul=DYNA_EXP; nbmot = 1; break;}
|
|
case 6: // "dynamique_Runge_Kutta")
|
|
{ typeCalcul=DYNA_RUNGE_KUTTA; nbmot = 1; break;}
|
|
case 7: // "non_dynamique")
|
|
{ typeCalcul=NON_DYNA; nbmot = 1; break;}
|
|
case 8: // "non_dyna_contact")
|
|
{ typeCalcul=NON_DYNA_CONT; nbmot = 1; break;}
|
|
case 9: // "flamb_lineaire")
|
|
{ typeCalcul=FLAMB_LINEAIRE; nbmot = 1; break;}
|
|
case 10: // "informations")
|
|
{ typeCalcul=INFORMATIONS; nbmot = 1; break;}
|
|
case 11: // "utilitaires")
|
|
{ typeCalcul=UTILITAIRES; nbmot = 1; break;}
|
|
case 12: // "umat abaqus")
|
|
{ typeCalcul=UMAT_ABAQUS; nbmot = 1; break;}
|
|
case 13: // "dynamique_explicite_bonelli")
|
|
{ typeCalcul=DYNA_EXP_BONELLI; nbmot = 1; break;}
|
|
case 14: // "dynamique_relaxation_dynam")
|
|
{ typeCalcul=RELAX_DYNA; nbmot = 1; break;}
|
|
// case 15: // "mixte_statique_dynamique_explicite")
|
|
// { typeCalcul=STAT_DYNA_EXP; nbmot = 1; break;}
|
|
case 15: // "combiné")
|
|
{ typeCalcul=COMBINER; nbmot = 1; break;}
|
|
}
|
|
}
|
|
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 fin_prog pour arreter le programme";
|
|
choix_valide=false;
|
|
};
|
|
}; //-- fin du while
|
|
cout << "--> choix: " << Nom_TypeCalcul(typeCalcul) << endl;
|
|
|
|
// cas du sous type de calcul
|
|
cout << "\n ==> Sous type de calcul souhaite (defaut 5) : ? ";
|
|
EnumSousTypeCalcul enum_sous_type;choix_valide=false;
|
|
rep = " ";
|
|
string chaine_a_ecrire=" ";
|
|
int indic_avec_Calcul = 0; // on initialise une variable entière car pb avec les booléens
|
|
cout
|
|
<< "\n (0) (pas de sous type) (f) fin "
|
|
<< "\n (1) avec_remonte (2) remonte "
|
|
<< "\n (3) avec_remonte_erreur (4) remonte_erreur"
|
|
<< "\n (5) avec plus visualisation (6) visualisation"
|
|
<< "\n (7) frontieres (8) lineaire -> quadra incomplet"
|
|
<< "\n (9) quadra incomplet -> quadra complet"
|
|
<< "\n (10) reloc pt milieu Quadra (11) sauveCommandesVisu"
|
|
<< "\n (12) lectureCommandesVisu (13) prevision_visu_sigma "
|
|
<< "\n (14) prevision_visu_epsilon (15) prevision_visu_erreur"
|
|
<< "\n (16) commandeInteractive (17) sauveMaillagesEnCours "
|
|
<< "\n (18) extrusion2D3D (19) creation_de_references "
|
|
<< "\n (20) modif_orientation_element (21) creationMaillageSFE "
|
|
<< "\n (22) suppression_noeud_non_references (23) renumerotation_des_noeuds "
|
|
<< "\n (24) fusion_de_noeuds (25) fusion_elements "
|
|
<< "\n (26) fusion_maillages (27) cree_sous_maillage "
|
|
<< "\n (28) calcul_geometrique \n "
|
|
<< endl;
|
|
bool non_choix_defaut=false; // pour controller une sortie d'un choix par défaut
|
|
while ((!choix_valide) || (!((rep == "f")||(rep == "0"))) // (!(choix_valide || (rep != "f")||(rep != "0")))
|
|
&& !non_choix_defaut
|
|
)
|
|
{
|
|
try
|
|
{
|
|
rep = "_";
|
|
int c = std::cin.peek(); // peek character (sans changer le flux !!)
|
|
if (( c == EOF )||(c=='\n'))
|
|
{rep = "5";
|
|
cout << "--> valeur par defaut : 5 "<<endl;
|
|
c = getchar(); // on lit quand même le caractère
|
|
non_choix_defaut=true;
|
|
}
|
|
else // sinon on peut lire
|
|
{std::getline (std::cin,rep);
|
|
// a priori les prochaines lectures vont utilisées un getline
|
|
};
|
|
if (rep.size()==0)
|
|
{rep = "5";
|
|
cout << "--> valeur par defaut : 5 "<<endl;
|
|
non_choix_defaut=true;
|
|
};
|
|
if (rep == "fin_prog") {Sortie(1);}
|
|
else // sinon
|
|
num = ChangeEntier(rep);
|
|
//cout << "\n debug info_commande_type_calcul: num= "<< num << flush;
|
|
if (rep == "f") num = -1; // cas particulier pour la sortie
|
|
if ((num >= -1)&&(num<=28))
|
|
{ choix_valide=true; }
|
|
else { cout << "\n Erreur on attendait un entier entre 0 et 26 !!, "
|
|
<< "\n redonnez une bonne valeur"
|
|
<< "\n ou taper fin_prog pour arreter le programme";
|
|
choix_valide=false;
|
|
}
|
|
switch (num)
|
|
{ case -1: //pas de sous type
|
|
{ indic_avec_Calcul +=0;enum_sous_type= aucun_soustypedecalcul; break;}
|
|
case 0: //pas de sous type
|
|
{ indic_avec_Calcul +=1;enum_sous_type= aucun_soustypedecalcul; break;}
|
|
case 1: // avec_remonte
|
|
{ indic_avec_Calcul +=1;enum_sous_type= avec_remonte; break;}
|
|
case 2: // remonte
|
|
{ indic_avec_Calcul += 0 ;enum_sous_type= remonte; break;}
|
|
case 3: // avec_remonte_erreur
|
|
{ indic_avec_Calcul +=1;enum_sous_type= avec_remonte_erreur; break;}
|
|
case 4: // remonte_erreur
|
|
{ indic_avec_Calcul += 0;enum_sous_type= remonte_erreur; break;}
|
|
case 5: // avec plus visualisation
|
|
{ indic_avec_Calcul +=1;enum_sous_type= visualisation; break;}
|
|
case 6: // visualisation
|
|
{ indic_avec_Calcul += 0;enum_sous_type= visualisation; break;}
|
|
case 7: // frontieres
|
|
{ indic_avec_Calcul += 0;enum_sous_type= frontieres; break;}
|
|
case 8: // transformation lineaire en quadratique incomplet
|
|
{ indic_avec_Calcul += 0;enum_sous_type= LinVersQuad; break;}
|
|
case 9: // transformation quadratique incomplet en quadratique complet
|
|
{ indic_avec_Calcul += 0;enum_sous_type= QuadIncVersQuadComp; break;}
|
|
case 10: // transformation quadratique incomplet en quadratique complet
|
|
{ indic_avec_Calcul += 0;enum_sous_type= relocPtMilieuQuad; break;}
|
|
case 11: // sauvegarde des commandes de visualisation
|
|
{ indic_avec_Calcul += 0;enum_sous_type= sauveCommandesVisu; break;}
|
|
case 12: // lecture des commandes de visualisation
|
|
{ indic_avec_Calcul += 0;enum_sous_type= lectureCommandesVisu; break;}
|
|
case 13: // visualisation automatique par fichier de commande
|
|
{ indic_avec_Calcul += 0;enum_sous_type= prevision_visu_sigma; break;}
|
|
case 14: // visualisation automatique par fichier de commande
|
|
{ indic_avec_Calcul += 0;enum_sous_type= prevision_visu_epsilon; break;}
|
|
case 15: // visualisation automatique par fichier de commande
|
|
{ indic_avec_Calcul += 0;enum_sous_type= prevision_visu_erreur; break;}
|
|
case 16: // prise en compte interactive de commande
|
|
{ indic_avec_Calcul += 0;enum_sous_type= commandeInteractive; break;}
|
|
case 17: // prise en compte interactive de commande
|
|
{ indic_avec_Calcul += 0;enum_sous_type= sauveMaillagesEnCours; break;}
|
|
case 18: // prise en compte interactive de commande
|
|
{ indic_avec_Calcul += 0;enum_sous_type= extrusion2D3D; break;}
|
|
case 19: // création de références
|
|
{ indic_avec_Calcul += 0;enum_sous_type= creation_reference; break;}
|
|
case 20: // modification de l'orientation des éléments
|
|
{ indic_avec_Calcul += 0;enum_sous_type= modif_orientation_element; break;}
|
|
case 21: // création de maillages SFE
|
|
{ indic_avec_Calcul += 0;enum_sous_type= creationMaillageSFE; break;}
|
|
case 22: // suppression des noeuds non referencés
|
|
{ indic_avec_Calcul += 0;enum_sous_type= suppression_noeud_non_references; break;}
|
|
case 23: // renumerotation des noeuds
|
|
{ indic_avec_Calcul += 0;enum_sous_type= renumerotation_des_noeuds; break;}
|
|
case 24: // fusion de noeuds
|
|
{ indic_avec_Calcul += 0;enum_sous_type= fusion_de_noeuds; break;}
|
|
case 25: // fusion d'éléments
|
|
{ indic_avec_Calcul += 0;enum_sous_type= fusion_elements; break;}
|
|
case 26: // fusion de maillages
|
|
{ indic_avec_Calcul += 0;enum_sous_type= fusion_maillages; break;}
|
|
case 27: // création d'un sous maillage
|
|
{ indic_avec_Calcul += 0;enum_sous_type= cree_sous_maillage; break;}
|
|
case 28: // calculs géométriques
|
|
{ indic_avec_Calcul += 0;enum_sous_type= calcul_geometrique; break;}
|
|
}
|
|
if (choix_valide)
|
|
{// comme il ne s'agit pas de faire un calcul (pour l'instant) on met systématiquement
|
|
// avec_Calcul true pour que dans projet il y ait effectivement création de l'algo
|
|
// peut-être par la suite il faudra modifier, donc on laisse les cas dans les case précédents
|
|
if (enum_sous_type != aucun_soustypedecalcul)
|
|
chaine_a_ecrire += " plus " + Nom_SousTypeCalcul(enum_sous_type);
|
|
// on sauvegarde dans la liste
|
|
sousTypeCalcul.push_back(enum_sous_type);
|
|
avec_sousCalcul.push_back(true);
|
|
if (chaine_a_ecrire != " ")
|
|
cout << "--> choix: " << chaine_a_ecrire << endl;
|
|
else
|
|
cout << "--> choix: aucun sous type " << endl;
|
|
};
|
|
if ((rep == "f")||(rep == "0"))
|
|
// on veut l'arrêt
|
|
choix_valide=true;
|
|
}
|
|
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 fin_prog pour arreter le programme";
|
|
choix_valide=false;
|
|
};
|
|
}; //-- fin du while
|
|
if ((indic_avec_Calcul)&&(chaine_a_ecrire != " ")) // on indique si on veut ou non un calcul
|
|
chaine_a_ecrire = " avec " + chaine_a_ecrire;
|
|
if(chaine_a_ecrire != " ") cout << "\n choix global: " << chaine_a_ecrire << endl;
|
|
// écriture dans le fichier de commande
|
|
ofstream & sort = *(lec.Commande_pointInfo()); // pour simplifier
|
|
sort << "\n#-------------------------------"
|
|
<< "\n# definition du type de calcul |"
|
|
<< "\n#-------------------------------"
|
|
<< "\n TYPE_DE_CALCUL"
|
|
<< "\n \n"<< Nom_TypeCalcul(typeCalcul) ;
|
|
if(chaine_a_ecrire != " ")
|
|
sort << chaine_a_ecrire;
|
|
sort << endl;
|
|
// mise à jour du booléen de calcul, ici par défaut = 1, pour que l'algo continue
|
|
avec_Calcul = true;
|
|
|
|
} ;
|
|
|
|
// indique s'il y a remonte ou pas dans le sous-type
|
|
bool Remonte_in(const EnumSousTypeCalcul sousTypeCalcul)
|
|
{ //if (Nom_SousTypeCalcul(sousTypeCalcul) == "remonte")
|
|
if ( Nom_SousTypeCalcul(sousTypeCalcul).find("remonte") != -1)
|
|
return true;
|
|
return false;
|
|
};
|
|
|
|
|
|
// indique s'il y a "avec" ou pas dans le sous-type
|
|
bool Avec_in(const EnumSousTypeCalcul sousTypeCalcul)
|
|
{ //if (Nom_SousTypeCalcul (sousTypeCalcul) == "avec")
|
|
if ( Nom_SousTypeCalcul(sousTypeCalcul).find("avec") != -1)
|
|
return true;
|
|
return false ;
|
|
};
|
|
|
|
|
|
// indique s'il y a erreur dans le sous-type
|
|
bool Erreur_in(const EnumSousTypeCalcul sousTypeCalcul)
|
|
{ //if (Nom_SousTypeCalcul (sousTypeCalcul) == "erreur")
|
|
if ( Nom_SousTypeCalcul(sousTypeCalcul).find("erreur") != -1)
|
|
return true;
|
|
return false ;
|
|
};
|
|
|
|
// indique s'il y a un sous-type ou pas -> retour vrai s'il y a un sous type
|
|
bool SousType(const EnumSousTypeCalcul sousTypeCalcul)
|
|
{ bool retour = true;
|
|
if (sousTypeCalcul==aucun_soustypedecalcul)
|
|
retour = false;
|
|
return retour;
|
|
};
|
|
|
|
// surcharge de l'operator de lecture
|
|
istream & operator >> (istream & entree, EnumTypeCalcul& a)
|
|
{ char nom_EnumTypeCalcul[150];
|
|
entree >> nom_EnumTypeCalcul;
|
|
a = Id_nom_TypeCalcul ( nom_EnumTypeCalcul);
|
|
return entree;
|
|
};
|
|
|
|
// surcharge de l'operator d'ecriture
|
|
ostream & operator << (ostream & sort, const EnumTypeCalcul& a)
|
|
{ // on ecrit la forme caractère
|
|
sort << Nom_TypeCalcul(a) << " ";
|
|
return sort;
|
|
};
|
|
|
|
// surcharge de l'operator de lecture
|
|
istream & operator >> (istream & entree, EnumSousTypeCalcul& a)
|
|
{ char nom_EnumSousTypeCalcul[150];
|
|
entree >> nom_EnumSousTypeCalcul;
|
|
a = Id_nom_SousTypeCalcul ( nom_EnumSousTypeCalcul);
|
|
return entree;
|
|
};
|
|
|
|
// surcharge de l'operator d'ecriture
|
|
ostream & operator << (ostream & sort, const EnumSousTypeCalcul& a)
|
|
{ // on ecrit la forme caractère
|
|
sort << Nom_SousTypeCalcul(a) << " ";
|
|
return sort;
|
|
};
|
|
//--------------------- cas de Enum_evolution_temporelle---------------
|
|
|
|
// Retourne le nom d'un type de Enum_evolution_temporelle a partir de son identificateur de
|
|
// type enumere id_Enum_evolution_temporelle correspondant
|
|
string Nom_evolution_temporelle(const Enum_evolution_temporelle id_evolution_temporelle)
|
|
{string result;
|
|
switch (id_evolution_temporelle)
|
|
{ case STATIQUE : result="STATIQUE"; break;
|
|
case TRANSITOIRE : result="TRANSITOIRE"; break;
|
|
case DYNAMIQUE : result="DYNAMIQUE"; break;
|
|
case AUCUNE_EVOLUTION : result="AUCUNE_EVOLUTION"; break;
|
|
default :
|
|
cout << "\nErreur : valeur incorrecte du type Enum_evolution_temporelle !\n";
|
|
cout << "string Nom_evolution_temporelle (const Enum_evolution_temporelle id_evolution_temporelle)"
|
|
<< id_evolution_temporelle << endl;
|
|
Sortie(1);
|
|
};
|
|
return result;
|
|
};
|
|
|
|
// Retourne l'identificateur de type enumere associe au nom du type de Enum_evolution_temporelle
|
|
Enum_evolution_temporelle Id_nom_evolution_temporelle (const string& nom_evolution_temporelle)
|
|
{Enum_evolution_temporelle result;
|
|
if ( nom_evolution_temporelle == "STATIQUE" )
|
|
{result=STATIQUE;}
|
|
else if ( nom_evolution_temporelle == "TRANSITOIRE" )
|
|
{result=TRANSITOIRE;}
|
|
else if ( nom_evolution_temporelle == "DYNAMIQUE" )
|
|
{result=DYNAMIQUE;}
|
|
else if ( nom_evolution_temporelle == "AUCUNE_EVOLUTION" )
|
|
{result=AUCUNE_EVOLUTION;}
|
|
else
|
|
{
|
|
cout << "\nErreur : nom de type d'evolution temporelle inconnu !\n";
|
|
cout << " nom_evolution_temporelle = " << nom_evolution_temporelle << '\n';
|
|
cout << "Id_nom_evolution_temporelle (const string& nom_evolution_temporelle) " << endl;
|
|
Sortie(1);
|
|
};
|
|
// retour
|
|
return result;
|
|
};
|
|
|
|
// surcharge de l'operator de lecture
|
|
istream & operator >> (istream & entree, Enum_evolution_temporelle& a)
|
|
{ char nom_evolution_temporelle[150];
|
|
entree >> nom_evolution_temporelle;
|
|
a = Id_nom_evolution_temporelle( nom_evolution_temporelle);
|
|
return entree;
|
|
};
|
|
|
|
// surcharge de l'operator d'ecriture
|
|
ostream & operator << (ostream & sort, const Enum_evolution_temporelle& a)
|
|
{ // on ecrit la forme caractère
|
|
sort << Nom_evolution_temporelle(a) << " ";
|
|
return sort;
|
|
};
|
|
|