// FICHIER : VariablesExporter.cc
// CLASSE : VariablesExporter
// 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: .
#include "VariablesExporter.h"
# include
using namespace std; //introduces namespace std
#include
#include "Sortie.h"
#include
#include
#include "List_io.h"
#include "CharUtil.h"
#include "TypeQuelconqueParticulier.h"
#include "Banniere.h"
#include "ReferenceNE.h"
#include "ReferenceAF.h"
// ------------ classes conteneur ----------------
// ======== A_un_NE ============
// classe conteneur de base pour noeud et élément
ostream & operator << ( ostream & sort,const VariablesExporter::A_un_NE & a)
{ sort << a.nom_var;
if (a.nom_mail != "")
{sort << " nom_mail= "<< a.nom_mail;};
sort << " ref_ " << a.ref ;
return sort;
};
// lecture
istream & operator >> ( istream & ent, VariablesExporter::A_un_NE & a)
{ string toto;
ent >> a.nom_var >> toto;
// lecture éventuelle d'un nom de maillage
if (toto == "nom_mail=")
{ent >> a.nom_mail >> toto;}
else if (toto == "ref_")
{a.nom_mail ="";}
else
{cout << "\n *** erreur de syntaxe en lecture d'une variable utilisateur,"
<< " on attendait soit la chaine de characteres: nom_mail= ou soit ref_ "
<< " et on a lu: "<< toto << " !!"
<< endl;
Sortie(1);
} ;
// fin de la lecture
ent >> a.ref ;
// vérif il faut que les 3 premiers caractères de a.nom_var soit un V__
if (!((a.nom_var[0]== 'V')&&(a.nom_var[1]== '_')&&(a.nom_var[2]== '_')))
{ cout << "\n *** erreur de syntaxe en lecture d'une variable utilisateur,"
<< " les 3 premieres lettres "
<< " devraientt etre un 'V__' et on a lu: "< (const A_un_NE& a) const
{if (nom_mail != a.nom_mail)
{ return (nom_mail > a.nom_mail);}
else // cas nom_mail = a.nom_mail
{ if (ref != a.ref)
{return (ref > a.ref);}
else //cas nom_mail = a.nom_mail et ref = a.ref
{if (nom_var != a.nom_var)
{return (nom_var > a.nom_var);}
else // cas où tout est égal on n'est pas supérieur
{return false;};
};
};
};
bool VariablesExporter::A_un_NE::operator>= (const A_un_NE& a) const
{if (nom_mail != a.nom_mail)
{ return (nom_mail >= a.nom_mail);}
else // cas nom_mail = a.nom_mail
{ if (ref != a.ref)
{return (ref >= a.ref);}
else //cas nom_mail = a.nom_mail et ref = a.ref
{if (nom_var != a.nom_var)
{return (nom_var >= a.nom_var);}
else // cas où tout est égal
{return true;};
};
};
};
// affichage
void VariablesExporter::A_un_NE::Affiche()
{ cout << "\n Variable utilisateur: " << nom_var
<< " au_noeud_ref: " << ref
<< " maillage: " << nom_mail;
};
// ======== Ddl_a_un_noeud ============
// classe conteneur pour un ddl à un noeud
ostream & operator << ( ostream & sort,const VariablesExporter::Ddl_a_un_noeud & a)
{ sort << "\n Ddl_noeud_ " << a.nom_var;
if (a.nom_mail != "")
{sort << " nom_mail= "<< a.nom_mail;};
sort << " ref_ " << a.ref_num_NE << " ddl_ " << a.enu
<< " temps_ " << a.temps;
return sort;
};
istream & operator >> ( istream & ent, VariablesExporter::Ddl_a_un_noeud & a)
{// lecture du type et vérification
string nomtype; ent >> nomtype;
if (nomtype != "Ddl_noeud_")
{ cout << "\n *** erreur en lecture: on attendait le mot cle Ddl_noeud_ et on a lue "
<< nomtype
<< "\n operator >> ( istream & ent, VariablesExporter::Ddl_a_un_noeud(...";
Sortie(1);
return ent;
};
// lecture
string toto;
ent >> a.nom_var >> toto;
// lecture éventuelle d'un nom de maillage
if (toto == "nom_mail=")
{ent >> a.nom_mail >> toto;}
else if (toto == "ref_")
{a.nom_mail ="";}
else
{cout << "\n *** erreur de syntaxe en lecture d'une variable utilisateur de type ddl,"
<< " on attendait soit la chaine de characteres: nom_mail= ou soit ref_ "
<< " et on a lu: "<< toto << " !!"
<< endl;
Sortie(1);
} ;
// fin de la lecture
ent >> a.ref_num_NE >> toto >> a.enu >> toto >> a.temps;
// vérif il faut que les 3 premiers caractères de a.nom_var soit un V__
if (!((a.nom_var[0]== 'V')&&(a.nom_var[1]== '_')&&(a.nom_var[2]== '_')))
{ cout << "\n *** erreur de syntaxe en lecture d'une variable utilisateur de type ddl,"
<< " les 3 premieres lettres "
<< " devraientt etre un 'V__' et on a lu: "< (const Ddl_a_un_noeud& a) const
{if (enu != a.enu)
{ return (enu > a.enu);}
else // cas enu = a.enu
{if (nom_mail != a.nom_mail)
{ return (nom_mail > a.nom_mail);}
else // cas enu = a.enu et nom_mail = a.nom_mail
{ if (ref_num_NE != a.ref_num_NE)
{return (ref_num_NE > a.ref_num_NE);}
else //cas enu = a.enu et nom_mail = a.nom_mail et ref_num_NE = a.ref_num_NE
{if (nom_var != a.nom_var)
{return (nom_var > a.nom_var);}
else //cas enu = a.enu et nom_mail = a.nom_mail et ref_num_NE = a.ref_num_NE
// et nom_var == a.nom_var
{if (temps != a.temps)
{return (temps <= a.temps);}
else // cas où tout est égal on n'est pas supérieur
{return false;};
};
};
};
};
};
bool VariablesExporter::Ddl_a_un_noeud::operator>= (const Ddl_a_un_noeud& a) const
{if (enu != a.enu)
{ return (enu >= a.enu);}
else // cas enu = a.enu
{if (nom_mail != a.nom_mail)
{ return (nom_mail >= a.nom_mail);}
else // cas enu = a.enu et nom_mail = a.nom_mail
{ if (ref_num_NE != a.ref_num_NE)
{return (ref_num_NE >= a.ref_num_NE);}
else //cas enu = a.enu et nom_mail = a.nom_mail et ref_num_NE = a.ref_num_NE
{if (nom_var != a.nom_var)
{return (nom_var >= a.nom_var);}
else //cas enu = a.enu et nom_mail = a.nom_mail et ref_num_NE = a.ref_num_NE
// et nom_var == a.nom_var
{if (temps != a.temps)
{return (temps <= a.temps);}
else // cas où tout est égal
{return true;};
};
};
};
};
};
// affichage
void VariablesExporter::Ddl_a_un_noeud::Affiche()
{ cout << "\n Variable utilisateur: " << nom_var
<< "ddl " << enu.Nom_plein()
<< " au_noeud_ref: " << ref_num_NE
<< " maillage: " << nom_mail
<< " temps= " << temps;
};
// ======== Ddl_etendu_a_un_noeud ============
// classe conteneur pour un ddl étendu à un noeud
ostream & operator << ( ostream & sort,const VariablesExporter::Ddl_etendu_a_un_noeud & a)
{ // récup du pointeur de la classe mère
const VariablesExporter::A_un_NE* aA = a.PointeurClass_const();
// sortie
sort << "\n Ddl_etendu_a_un_noeud_ ";
sort << *aA; // la classe mère
sort << " ddl_etendu_ "<< a.Enu_const() << " ";
// retour
return sort;
};
istream & operator >> ( istream & ent, VariablesExporter::Ddl_etendu_a_un_noeud & a)
{ // récup du pointeur de la classe mère
VariablesExporter::A_un_NE* aA = a.PointeurClass();
// lecture du type et vérification
string nomtype,toto; ent >> nomtype ;
if (nomtype != "Ddl_etendu_a_un_noeud_")
{ cout << "\n *** erreur en lecture: on attendait le mot cle Ddl_etendu_a_un_noeud_ et on a lue "
<< nomtype
<< "\n operator >> ( istream & ent, VariablesExporter::Ddl_etendu_a_un_noeud(...";
Sortie(1);
return ent;
};
// lecture de la partie mère
ent >> *aA;
// on vérifie également qu'il s'agit bien d'une ref de noeud
if (aA->Ref_NE()[0] != 'N')
{ cout << "\n *** lecture de la variable utilisateur: " << a.nom_var
<< " erreur de syntaxe en lecture d'une reference de noeud ,"
<< " la premiere lettre "
<< " devraientt etre N et on a lu: "<Ref_NE() << " !!"
<< endl;
Sortie(1);
};
// lecture du ddl étendu
ent >> toto >> a.enu ;
return ent;
};
VariablesExporter::Ddl_etendu_a_un_noeud::Ddl_etendu_a_un_noeud () : // constructeur par défaut
A_un_NE(),enu() {};
// constructeur fonction de toutes les grandeurs
VariablesExporter::Ddl_etendu_a_un_noeud::Ddl_etendu_a_un_noeud
(Ddl_enum_etendu e,string ref_noeud,string nom_mail_,string nom_var_) :
A_un_NE(ref_noeud,nom_mail_,nom_var_)
,enu(e)
{};
// constructeur de copie
VariablesExporter::Ddl_etendu_a_un_noeud::Ddl_etendu_a_un_noeud (const Ddl_etendu_a_un_noeud& a) :
A_un_NE(a)
,enu(a.enu)
{};
// destructeur
VariablesExporter::Ddl_etendu_a_un_noeud::~Ddl_etendu_a_un_noeud()
{};
// opérateurs
VariablesExporter::Ddl_etendu_a_un_noeud& VariablesExporter::Ddl_etendu_a_un_noeud::operator=
(const VariablesExporter::Ddl_etendu_a_un_noeud& a)
{enu = a.enu;
*(this->PointeurClass()) = *(a.PointeurClass_const());
return (*this);
};
bool VariablesExporter::Ddl_etendu_a_un_noeud::operator== (const Ddl_etendu_a_un_noeud& a) const
{if ((enu ==a.enu)
&& (*(this->PointeurClass_const()) == *(a.PointeurClass_const())))
return true;
else
return false;
};
bool VariablesExporter::Ddl_etendu_a_un_noeud::operator< (const Ddl_etendu_a_un_noeud& a) const
{if (enu != a.enu)
{ return (enu < a.enu);}
else // cas enu = a.enu
{return (*(this->PointeurClass_const()) < *(a.PointeurClass_const()));}
};
bool VariablesExporter::Ddl_etendu_a_un_noeud::operator<= (const Ddl_etendu_a_un_noeud& a) const
{if (enu != a.enu)
{ return (enu <= a.enu);}
else // cas enu = a.enu
{return (*(this->PointeurClass_const()) <= *(a.PointeurClass_const()));}
};
bool VariablesExporter::Ddl_etendu_a_un_noeud::operator> (const Ddl_etendu_a_un_noeud& a) const
{if (enu != a.enu)
{ return (enu > a.enu);}
else // cas enu = a.enu
{return (*(this->PointeurClass_const()) > *(a.PointeurClass_const()));}
};
bool VariablesExporter::Ddl_etendu_a_un_noeud::operator>= (const Ddl_etendu_a_un_noeud& a) const
{if (enu != a.enu)
{ return (enu >= a.enu);}
else // cas enu = a.enu
{return (*(this->PointeurClass_const()) >= *(a.PointeurClass_const()));}
};
// affichage
void VariablesExporter::Ddl_etendu_a_un_noeud::Affiche()
{ A_un_NE::Affiche();
cout << " Ddl_etendu_a_un_noeud_ " << Enu() ;
};
// ======== Quelconque_a_un_noeud ============
// classe conteneur pour une grandeur quelconque à un noeud
ostream & operator << ( ostream & sort,const VariablesExporter::Quelconque_a_un_noeud & a)
{ // récup du pointeur de la classe mère
const VariablesExporter::A_un_NE* aA = a.PointeurClass_const();
// récup de l'énuméré du type quelconque
const TypeQuelconque_enum_etendu& quelc = a.Quelc_const();
// sortie
sort << "\n Quelconque_a_un_noeud_ " ;
sort << *aA; // la classe mère
sort << " grandeur_quelconque_ " << quelc.NomPlein() << " composante: " << a.num_ordre << " ";
// retour
return sort;
};
istream & operator >> ( istream & ent, VariablesExporter::Quelconque_a_un_noeud & a)
{ // récup du pointeur de la classe mère
VariablesExporter::A_un_NE* aA = a.PointeurClass();
// lecture du type et vérification
string nomtype,toto; ent >> nomtype ;
if (nomtype != "Quelconque_a_un_noeud_")
{ cout << "\n *** erreur en lecture: on attendait le mot cle Quelconque_a_un_noeud_ et on a lue "
<< nomtype
<< "\n operator >> ( istream & ent, VariablesExporter::Quelconque_a_un_noeud(...";
Sortie(1);
return ent;
};
// lecture de la partie mère
ent >> *aA;
// on vérifie également qu'il s'agit bien d'une ref de noeud
if (aA->Ref_NE()[0] != 'N')
{ cout << "\n *** lecture de la variable utilisateur: " << a.nom_var
<< " erreur de syntaxe en lecture d'une reference de noeud ,"
<< " la premiere lettre "
<< " devraientt etre N et on a lu: "<Ref_NE() << " !!"
<< endl;
Sortie(1);
};
// lecture de la grandeur quelconque
string nom_quelc;
ent >> toto >> nom_quelc;
a.quelc = TypeQuelconque_enum_etendu(nom_quelc);
ent >> toto >> a.num_ordre;
return ent;
};
VariablesExporter::Quelconque_a_un_noeud::Quelconque_a_un_noeud () : // constructeur par défaut
A_un_NE(),quelc() {};
// constructeur fonction de toutes les grandeurs
VariablesExporter::Quelconque_a_un_noeud::Quelconque_a_un_noeud
(TypeQuelconque_enum_etendu e,string ref_noeud,string nom_mail_,string nom_var_,int num_ord) :
A_un_NE(ref_noeud,nom_mail_,nom_var_)
,quelc(e),num_ordre(num_ord)
{};
// constructeur de copie
VariablesExporter::Quelconque_a_un_noeud::Quelconque_a_un_noeud (const Quelconque_a_un_noeud& a) :
A_un_NE(a)
,quelc(a.quelc),num_ordre(a.num_ordre)
{};
// destructeur
VariablesExporter::Quelconque_a_un_noeud::~Quelconque_a_un_noeud()
{};
// opérateurs
VariablesExporter::Quelconque_a_un_noeud& VariablesExporter::Quelconque_a_un_noeud::operator=
(const VariablesExporter::Quelconque_a_un_noeud& a)
{quelc = a.quelc;num_ordre = a.num_ordre;
*(this->PointeurClass()) = *(a.PointeurClass_const());
return (*this);
};
bool VariablesExporter::Quelconque_a_un_noeud::operator== (const Quelconque_a_un_noeud& a) const
{if ((quelc==a.quelc) && (num_ordre == a.num_ordre)
&& (*(this->PointeurClass_const()) == *(a.PointeurClass_const())))
return true;
else
return false;
};
bool VariablesExporter::Quelconque_a_un_noeud::operator< (const Quelconque_a_un_noeud& a) const
{if (quelc != a.quelc)
{ return (quelc < a.quelc);}
else // cas quelc = a.quelc
{if (num_ordre != a.num_ordre)
{return (num_ordre < a.num_ordre); }
else
{return (*(this->PointeurClass_const()) < *(a.PointeurClass_const()));}
};
};
bool VariablesExporter::Quelconque_a_un_noeud::operator<= (const Quelconque_a_un_noeud& a) const
{if (quelc != a.quelc)
{ return (quelc <= a.quelc);}
else // cas quelc = a.quelc
{if (num_ordre != a.num_ordre)
{return (num_ordre <= a.num_ordre); }
else
{return (*(this->PointeurClass_const()) <= *(a.PointeurClass_const()));}
};
};
bool VariablesExporter::Quelconque_a_un_noeud::operator> (const Quelconque_a_un_noeud& a) const
{if (quelc != a.quelc)
{ return (quelc > a.quelc);}
else // cas quelc = a.quelc
{if (num_ordre != a.num_ordre)
{return (num_ordre > a.num_ordre); }
else
{return (*(this->PointeurClass_const()) > *(a.PointeurClass_const()));}
};
};
bool VariablesExporter::Quelconque_a_un_noeud::operator>= (const Quelconque_a_un_noeud& a) const
{if (quelc != a.quelc)
{ return (quelc >= a.quelc);}
else // cas quelc = a.quelc
{if (num_ordre != a.num_ordre)
{return (num_ordre >= a.num_ordre); }
else
{return (*(this->PointeurClass_const()) >= *(a.PointeurClass_const()));}
};
};
// affichage
void VariablesExporter::Quelconque_a_un_noeud::Affiche()
{ A_un_NE::Affiche();
cout << " quelconque_a_un_noeud_ " << quelc.NomPlein()
<< " composante: " << num_ordre ;
};
// ======== A_un_E ============
// classe conteneur pour un élément
ostream & operator << ( ostream & sort,const VariablesExporter::A_un_E & a)
{ // récup du pointeur de la classe mère
const VariablesExporter::A_un_NE* aA = a.PointeurClass_const();
// sortie
sort << *aA; // la classe mère
sort << " absolu_ " << a.absolu
<< " num_pti_ " << a.num_pti
<< " ";
// retour
return sort;
};
istream & operator >> ( istream & ent, VariablesExporter::A_un_E & a)
{ // récup du pointeur de la classe mère
VariablesExporter::A_un_NE* aA = a.PointeurClass();
// lecture du type et vérification
// lecture de la partie mère
ent >> *aA ;
// on vérifie également qu'il s'agit bien d'une ref d'élément
if (aA->Ref_NE()[0] != 'E')
{ cout << "\n *** lecture de la variable utilisateur: " << a.nom_var
<< " erreur de syntaxe en lecture d'une reference d'element ,"
<< " la premiere lettre "
<< " devraientt etre E et on a lu: "<Ref_NE() << " !!"
<< endl;
Sortie(1);
};
string toto;
ent >> toto;
// lecture éventuelle du paramètre absolu
if (toto == "absolu_")
{ent >> a.absolu >> toto;}
else if (toto == "num_pti_")
{a.absolu = 1;}
else
{cout << "\n *** erreur de syntaxe en lecture d'une variable utilisateur,"
<< " on attendait soit la chaine de characteres: absolu_ ou soit num_pti_ "
<< " et on a lu: "<< toto << " !!"
<< endl;
Sortie(1);
} ;
// fin de la lecture
ent >> a.num_pti ;
return ent;
};
VariablesExporter::A_un_E::A_un_E () : // constructeur par défaut
A_un_NE(),num_pti(0),absolu(1) {};
// constructeur fonction de toutes les grandeurs
VariablesExporter::A_un_E::A_un_E
(int absolu_,string ref
,string nom_mail_,string nom_var_,int nbpti) :
A_un_NE(ref,nom_mail_,nom_var_)
,num_pti(nbpti),absolu(absolu_)
{};
// constructeur de copie
VariablesExporter::A_un_E::A_un_E (const A_un_E& a) :
A_un_NE(a)
,num_pti(a.num_pti),absolu(a.absolu)
{};
// destructeur
VariablesExporter::A_un_E::~A_un_E()
{};
// opérateurs
VariablesExporter::A_un_E& VariablesExporter::A_un_E::operator=
(const VariablesExporter::A_un_E& a)
{num_pti=a.num_pti;
absolu = a.absolu;
*(this->PointeurClass()) = *(a.PointeurClass_const());
return (*this);
};
bool VariablesExporter::A_un_E::operator== (const A_un_E& a) const
{if (((num_pti==a.num_pti)&&(absolu ==a.absolu)
&& (*(this->PointeurClass_const()) == *(a.PointeurClass_const())))
)
return true;
else
return false;
};
bool VariablesExporter::A_un_E::operator< (const A_un_E& a) const
{ if (num_pti != a.num_pti)
{return (num_pti < a.num_pti);}
else // num_pti == a.num_pti
{if (absolu != a.absolu)
{return (absolu < a.absolu);}
else
{return (*(this->PointeurClass_const()) < *(a.PointeurClass_const()));}
}
};
bool VariablesExporter::A_un_E::operator<= (const A_un_E& a) const
{ if (num_pti != a.num_pti)
{return (num_pti <= a.num_pti);}
else // num_pti == a.num_pti
{if (absolu != a.absolu)
{return (absolu <= a.absolu);}
else
{return (*(this->PointeurClass_const()) <= *(a.PointeurClass_const()));}
}
};
bool VariablesExporter::A_un_E::operator> (const A_un_E& a) const
{ if (num_pti != a.num_pti)
{return (num_pti > a.num_pti);}
else // num_pti == a.num_pti
{if (absolu != a.absolu)
{return (absolu > a.absolu);}
else
{return (*(this->PointeurClass_const()) > *(a.PointeurClass_const()));}
};
};
bool VariablesExporter::A_un_E::operator>= (const A_un_E& a) const
{ if (num_pti != a.num_pti)
{return (num_pti >= a.num_pti);}
else // temps == a.temps et num_pti == a.num_pti
{if (absolu != a.absolu)
{return (absolu >= a.absolu);}
else
{return (*(this->PointeurClass_const()) >= *(a.PointeurClass_const()));}
}
};
// affichage
void VariablesExporter::A_un_E::Affiche()
{ A_un_NE::Affiche();
cout << " absolu= " << absolu
<< " num_pti= " << num_pti << " ";
};
// ======== Ddl_a_un_element ============
// classe conteneur pour un ddl à un élément
ostream & operator << ( ostream & sort,const VariablesExporter::Ddl_a_un_element & a)
{ // récup du pointeur de la classe mère
const VariablesExporter::A_un_E* aA = a.PointeurClass_E_const();
// sortie
sort << "\n Ddl_a_un_element_ ";
sort << *aA; // la classe mère
sort << " temps_ " << a.temps
<< " ddl_ "<< a.enu << " ";
// retour
return sort;
};
istream & operator >> ( istream & ent, VariablesExporter::Ddl_a_un_element & a)
{ // récup du pointeur de la classe mère
VariablesExporter::A_un_E* aA = a.PointeurClass_E();
// lecture du type et vérification
string nomtype,toto; ent >> nomtype ;
if (nomtype != "Ddl_a_un_element_")
{ cout << "\n *** erreur en lecture: on attendait le mot cle Ddl_a_un_element_ et on a lue "
<< nomtype
<< "\n operator >> ( istream & ent, VariablesExporter::Ddl_a_un_element(...";
Sortie(1);
return ent;
};
// lecture de la partie mère
ent >> *aA;
// on vérifie également qu'il s'agit bien d'une ref d'élément
if (aA->Ref_NE()[0] != 'E')
{ cout << "\n *** lecture de la variable utilisateur: " << a.nom_var
<< " erreur de syntaxe en lecture d'une reference d'element ,"
<< " la premiere lettre "
<< " devraientt etre E et on a lu: "<Ref_NE() << " !!"
<< endl;
Sortie(1);
};
// lecture du ddl étendu
ent >> toto >> a.temps >> toto >> a.enu ;
return ent;
};
VariablesExporter::Ddl_a_un_element::Ddl_a_un_element () : // constructeur par défaut
A_un_E(),enu(),temps() {};
// constructeur fonction de toutes les grandeurs
VariablesExporter::Ddl_a_un_element::Ddl_a_un_element
(int absolu_,Ddl_enum_etendu e,string ref_NE
,string nom_mail_,Enum_dure tps,string nom_var_,int nbpti) :
A_un_E(absolu_,ref_NE,nom_mail,nom_var,nbpti)
,enu(e),temps(tps)
{};
// constructeur de copie
VariablesExporter::Ddl_a_un_element::Ddl_a_un_element (const Ddl_a_un_element& a) :
A_un_E(a)
,enu(a.enu),temps(a.temps)
{};
// destructeur
VariablesExporter::Ddl_a_un_element::~Ddl_a_un_element()
{};
// opérateurs
VariablesExporter::Ddl_a_un_element& VariablesExporter::Ddl_a_un_element::operator=
(const VariablesExporter::Ddl_a_un_element& a)
{enu = a.enu;temps=a.temps;
*(this->PointeurClass()) = *(a.PointeurClass_E_const());
return (*this);
};
bool VariablesExporter::Ddl_a_un_element::operator== (const Ddl_a_un_element& a) const
{if ((enu ==a.enu) && (temps == a.temps)
&& (*(this->PointeurClass_E_const()) == *(a.PointeurClass_E_const())))
return true;
else
return false;
};
bool VariablesExporter::Ddl_a_un_element::operator< (const Ddl_a_un_element& a) const
{if (enu != a.enu)
{ return (enu < a.enu);}
else // cas enu = a.enu
{if (temps != a.temps)
{return (temps < a.temps);}
else
{return (*(this->PointeurClass_E_const()) < *(a.PointeurClass_E_const()));}
};
};
bool VariablesExporter::Ddl_a_un_element::operator<= (const Ddl_a_un_element& a) const
{if (enu != a.enu)
{ return (enu <= a.enu);}
else // cas enu = a.enu
{if (temps != a.temps)
{return (temps <= a.temps);}
else
{return (*(this->PointeurClass_E_const()) <= *(a.PointeurClass_E_const()));}
};
};
bool VariablesExporter::Ddl_a_un_element::operator> (const Ddl_a_un_element& a) const
{if (enu != a.enu)
{ return (enu > a.enu);}
else // cas enu = a.enu
{if (temps != a.temps)
{return (temps > a.temps);}
else
{return (*(this->PointeurClass_E_const()) > *(a.PointeurClass_E_const()));}
};
};
bool VariablesExporter::Ddl_a_un_element::operator>= (const Ddl_a_un_element& a) const
{if (enu != a.enu)
{ return (enu >= a.enu);}
else // cas enu = a.enu
{if (temps != a.temps)
{return (temps >= a.temps);}
else
{return (*(this->PointeurClass_E_const()) >= *(a.PointeurClass_E_const()));}
};
};
// affichage
void VariablesExporter::Ddl_a_un_element::Affiche()
{ A_un_E::Affiche();
cout << " Ddl_a_un_element_ " << Enu() << " temps_ " << temps ;
};
// ======== TypeQuelconque_a_un_element ============
// classe conteneur pour les grandeurs particulières à un élément
ostream & operator << ( ostream & sort,const VariablesExporter::TypeQuelconque_a_un_element & a)
{ // récup du pointeur de la classe mère
const VariablesExporter::A_un_E* aA = a.PointeurClass_Quelc_const();
// récup de l'énuméré du type quelconque
const TypeQuelconque_enum_etendu& quelc = a.Quelc_const();
// sortie
sort << *aA; // la classe mère
sort << " grandeur_quelconque_ " << quelc.NomPlein() << " composante: " << a.num_ordre << " ";
// retour
return sort;
};
istream & operator >> ( istream & ent, VariablesExporter::TypeQuelconque_a_un_element & a)
{ // récup du pointeur de la classe mère
VariablesExporter::A_un_E* aA = a.PointeurClass_Quelc();
// lecture de la partie mère
ent >> *aA;
// on vérifie également qu'il s'agit bien d'une ref d'élément
if (aA->Ref_NE()[0] != 'E')
{ cout << "\n *** lecture de la variable utilisateur: " << a.nom_var
<< " erreur de syntaxe en lecture d'une reference d'element ,"
<< " la premiere lettre "
<< " devraientt etre E et on a lu: "<Ref_NE() << " !!"
<< endl;
Sortie(1);
};
// lecture de la grandeur quelconque
string toto,nom_quelc;
ent >> toto >> nom_quelc;
a.quelc = TypeQuelconque_enum_etendu(nom_quelc);
ent >> toto >> a.num_ordre;
return ent;
};
VariablesExporter::TypeQuelconque_a_un_element::TypeQuelconque_a_un_element () : // constructeur par défaut
A_un_E(),quelc() {};
// constructeur fonction de toutes les grandeurs
VariablesExporter::TypeQuelconque_a_un_element::TypeQuelconque_a_un_element
(int absolu_,TypeQuelconque_enum_etendu e,string ref_NE
,string nom_mail_,Enum_dure tps,string nom_var_,int nbpti,int num_ord) :
A_un_E(absolu_,ref_NE,nom_mail,nom_var,nbpti)
,quelc(e),num_ordre(num_ord)
{};
// constructeur de copie
VariablesExporter::TypeQuelconque_a_un_element::TypeQuelconque_a_un_element (const TypeQuelconque_a_un_element& a) :
A_un_E(a)
,quelc(a.quelc),num_ordre(a.num_ordre)
{};
// destructeur
VariablesExporter::TypeQuelconque_a_un_element::~TypeQuelconque_a_un_element()
{};
// opérateurs
VariablesExporter::TypeQuelconque_a_un_element& VariablesExporter::TypeQuelconque_a_un_element::operator=
(const VariablesExporter::TypeQuelconque_a_un_element& a)
{quelc = a.quelc;num_ordre = a.num_ordre;
*(this->PointeurClass()) = *(a.PointeurClass_E_const());
return (*this);
};
bool VariablesExporter::TypeQuelconque_a_un_element::operator== (const TypeQuelconque_a_un_element& a) const
{if ((quelc ==a.quelc)&& (num_ordre == a.num_ordre)
&& (*(this->PointeurClass_E_const()) == *(a.PointeurClass_E_const())))
return true;
else
return false;
};
bool VariablesExporter::TypeQuelconque_a_un_element::operator< (const TypeQuelconque_a_un_element& a) const
{if (quelc != a.quelc)
{ return (quelc < a.quelc);}
else // cas quelc = a.quelc
{if (num_ordre != a.num_ordre)
{return (num_ordre < a.num_ordre); }
else
{return (*(this->PointeurClass_E_const()) < *(a.PointeurClass_E_const()));}
};
};
bool VariablesExporter::TypeQuelconque_a_un_element::operator<= (const TypeQuelconque_a_un_element& a) const
{if (quelc != a.quelc)
{ return (quelc <= a.quelc);}
else // cas quelc = a.quelc
{if (num_ordre != a.num_ordre)
{return (num_ordre <= a.num_ordre); }
else
{return (*(this->PointeurClass_E_const()) <= *(a.PointeurClass_E_const()));}
};
};
bool VariablesExporter::TypeQuelconque_a_un_element::operator> (const TypeQuelconque_a_un_element& a) const
{if (quelc != a.quelc)
{ return (quelc > a.quelc);}
else // cas quelc = a.quelc
{if (num_ordre != a.num_ordre)
{return (num_ordre > a.num_ordre); }
else
{return (*(this->PointeurClass_E_const()) > *(a.PointeurClass_E_const()));}
};
};
bool VariablesExporter::TypeQuelconque_a_un_element::operator>= (const TypeQuelconque_a_un_element& a) const
{if (quelc != a.quelc)
{ return (quelc >= a.quelc);}
else // cas enu = a.enu
{if (num_ordre != a.num_ordre)
{return (num_ordre >= a.num_ordre); }
else
{return (*(this->PointeurClass_E_const()) >= *(a.PointeurClass_E_const()));}
};
};
// ======== TypeParticulier_a_un_element ============
// classe conteneur pour les grandeurs particulières à un élément
ostream & operator << ( ostream & sort,const VariablesExporter::TypeParticulier_a_un_element & a)
{ // récup du pointeur de la classe mère
const VariablesExporter::TypeQuelconque_a_un_element* aA = a.PointeurClass_Quelc_const();
// récup de l'énuméré du type quelconque
// const TypeQuelconque_enum_etendu& quelc = a.Quelc_const();
// sortie
sort << "\n Particulier_a_un_element_ ";
sort << *aA; // la classe mère
// retour
return sort;
};
istream & operator >> ( istream & ent, VariablesExporter::TypeParticulier_a_un_element & a)
{ // récup du pointeur de la classe mère
VariablesExporter::TypeQuelconque_a_un_element* aA = a.PointeurClass_Quelc();
// lecture du type et vérification
string nomtype,toto; ent >> nomtype ;
if (nomtype != "Particulier_a_un_element_")
{ cout << "\n *** erreur en lecture: on attendait le mot cle Particulier_a_un_element_ et on a lue "
<< nomtype
<< "\n operator >> ( istream & ent, VariablesExporter::Particulier_a_un_element_(...";
Sortie(1);
return ent;
};
// lecture de la partie mère
ent >> *aA;
// on vérifie également qu'il s'agit bien d'une ref d'élément
if (aA->Ref_NE()[0] != 'E')
{ cout << "\n *** lecture de la variable utilisateur: " << a.nom_var
<< " erreur de syntaxe en lecture d'une reference d'element ,"
<< " la premiere lettre "
<< " devraientt etre E et on a lu: "<Ref_NE() << " !!"
<< endl;
Sortie(1);
};
return ent;
};
// affichage
void VariablesExporter::TypeParticulier_a_un_element::Affiche()
{ A_un_E::Affiche();
cout << " grandeur_particuliere_a_un_element_ " << quelc.NomPlein()
<< " composante: " << num_ordre ;
};
// ======== TypeEvoluee_a_un_element ============
// classe conteneur pour les grandeurs évoluées à un élément
ostream & operator << ( ostream & sort,const VariablesExporter::TypeEvoluee_a_un_element & a)
{ // récup du pointeur de la classe mère
const VariablesExporter::TypeQuelconque_a_un_element* aA = a.PointeurClass_Quelc_const();
// récup de l'énuméré du type quelconque
// const TypeQuelconque_enum_etendu& quelc = a.Quelc_const();
// sortie
sort << "\n Evoluee_a_un_element_ ";
sort << *aA; // la classe mère
// retour
return sort;
};
istream & operator >> ( istream & ent, VariablesExporter::TypeEvoluee_a_un_element & a)
{ // récup du pointeur de la classe mère
VariablesExporter::TypeQuelconque_a_un_element* aA = a.PointeurClass_Quelc();
// lecture du type et vérification
string nomtype,toto; ent >> nomtype ;
if (nomtype != "Evoluee_a_un_element_")
{ cout << "\n *** erreur en lecture: on attendait le mot cle Evoluee_a_un_element_ et on a lue "
<< nomtype
<< "\n operator >> ( istream & ent, VariablesExporter::TypeEvoluee_a_un_element(...";
Sortie(1);
return ent;
};
// lecture de la partie mère
ent >> *aA;
// on vérifie également qu'il s'agit bien d'une ref d'élément
if (aA->Ref_NE()[0] != 'E')
{ cout << "\n *** lecture de la variable utilisateur: " << a.nom_var
<< " erreur de syntaxe en lecture d'une reference d'element ,"
<< " la premiere lettre "
<< " devraientt etre E et on a lu: "<Ref_NE() << " !!"
<< endl;
Sortie(1);
};
return ent;
};
// affichage
void VariablesExporter::TypeEvoluee_a_un_element::Affiche()
{ A_un_E::Affiche();
cout << " grandeur_Evoluee_a_un_element_ " << quelc.NomPlein()
<< " composante: " << num_ordre ;
};
// ======== TypeQuelconque_a_Face_arete ============
// classe conteneur pour un TypeQuelconque à une face ou arête
ostream & operator << ( ostream & sort,const VariablesExporter::TypeQuelconque_a_Face_arete & a)
{ // récup du pointeur de la classe mère
const VariablesExporter::TypeQuelconque_a_un_element* aA = a.PointeurClass_Quelc_const();
// sortie
sort << *aA; // la classe mère
// num FA
sort << " num_FA_ "<< a.Num_FA_const() << " ";
// retour
return sort;
};
istream & operator >> ( istream & ent, VariablesExporter::TypeQuelconque_a_Face_arete & a)
{ // récup du pointeur de la classe mère
VariablesExporter::TypeQuelconque_a_un_element* aA = a.PointeurClass_Quelc();
// lecture de la partie mère
ent >> *aA;
// num FA
string toto;
ent >> toto >> a.Num_FA() ;
return ent;
};
VariablesExporter::TypeQuelconque_a_Face_arete::TypeQuelconque_a_Face_arete () : // constructeur par défaut
TypeQuelconque_a_un_element(),num_FA() {};
// constructeur fonction de toutes les grandeurs
VariablesExporter::TypeQuelconque_a_Face_arete::TypeQuelconque_a_Face_arete
(int absolu_,TypeQuelconque_enum_etendu e,string ref_element
,string nom_mail_,int nbFA, Enum_dure tps,string nom_var_,int nbpti,int num_ord) :
TypeQuelconque_a_un_element(absolu_,e,ref_element,nom_mail,tps,nom_var,nbpti,num_ord)
,num_FA(nbFA)
{};
// constructeur de copie
VariablesExporter::TypeQuelconque_a_Face_arete::TypeQuelconque_a_Face_arete (const TypeQuelconque_a_Face_arete& a) :
TypeQuelconque_a_un_element(a)
,num_FA(a.num_FA)
{};
// destructeur
VariablesExporter::TypeQuelconque_a_Face_arete::~TypeQuelconque_a_Face_arete()
{};
// opérateurs
VariablesExporter::TypeQuelconque_a_Face_arete& VariablesExporter::TypeQuelconque_a_Face_arete::operator=
(const VariablesExporter::TypeQuelconque_a_Face_arete& a)
{num_FA = a.num_FA;
*(this->PointClass_QuelcFA()) = *(a.PointClass_QuelcFA_const());
return (*this);
};
bool VariablesExporter::TypeQuelconque_a_Face_arete::operator== (const TypeQuelconque_a_Face_arete& a) const
{if ((num_FA ==a.num_FA)
&& (*(this->PointClass_QuelcFA_const()) == *(a.PointClass_QuelcFA_const())))
return true;
else
return false;
};
bool VariablesExporter::TypeQuelconque_a_Face_arete::operator< (const TypeQuelconque_a_Face_arete& a) const
{if (num_FA != a.num_FA)
{ return (num_FA < a.num_FA);}
else // cas num_FA = a.num_FA
{return (*(this->PointClass_QuelcFA_const()) < *(a.PointClass_QuelcFA_const()));}
};
bool VariablesExporter::TypeQuelconque_a_Face_arete::operator<= (const TypeQuelconque_a_Face_arete& a) const
{if (num_FA != a.num_FA)
{ return (num_FA <= a.num_FA);}
else // cas num_FA = a.num_FA
{return (*(this->PointClass_QuelcFA_const()) <= *(a.PointClass_QuelcFA_const()));}
};
bool VariablesExporter::TypeQuelconque_a_Face_arete::operator> (const TypeQuelconque_a_Face_arete& a) const
{if (num_FA != a.num_FA)
{ return (num_FA > a.num_FA);}
else // cas num_FA = a.num_FA
{return (*(this->PointClass_QuelcFA_const()) > *(a.PointClass_QuelcFA_const()));}
};
bool VariablesExporter::TypeQuelconque_a_Face_arete::operator>= (const TypeQuelconque_a_Face_arete& a) const
{if (num_FA != a.num_FA)
{ return (num_FA >= a.num_FA);}
else // cas num_FA = a.num_FA
{return (*(this->PointClass_QuelcFA_const()) >= *(a.PointClass_QuelcFA_const()));}
};
// ======== TypeQuelc_face_a_un_element ============
// classe conteneur pour les grandeurs quelconque à une face d'élément
ostream & operator << ( ostream & sort,const VariablesExporter::TypeQuelc_face_a_un_element & a)
{ // récup du pointeur de la classe mère
const VariablesExporter::TypeQuelconque_a_Face_arete* aA = a.PointClass_QuelcFA_const();
// sortie
sort << "\n Quelconque_face_element_ ";
sort << *aA; // la classe mère
// retour
return sort;
};
istream & operator >> ( istream & ent, VariablesExporter::TypeQuelc_face_a_un_element & a)
{ // récup du pointeur de la classe mère
VariablesExporter::TypeQuelconque_a_Face_arete* aA = a.PointClass_QuelcFA();
// lecture du type et vérification
string nomtype,toto; ent >> nomtype ;
if (nomtype != "Quelconque_face_element_")
{ cout << "\n *** erreur en lecture: on attendait le mot cle Quelconque_face_element_ et on a lue "
<< nomtype
<< "\n operator >> ( istream & ent, VariablesExporter::TypeQuelc_face_a_un_element(...";
Sortie(1);
return ent;
};
// lecture de la partie mère
ent >> *aA;
// on vérifie également qu'il s'agit bien d'une ref d'élément
if (aA->Ref_NE()[0] != 'E')
{ cout << "\n *** lecture de la variable utilisateur: " << a.nom_var
<< " erreur de syntaxe en lecture d'une reference d'element ,"
<< " la premiere lettre "
<< " devraientt etre E et on a lu: "<Ref_NE() << " !!"
<< endl;
Sortie(1);
};
return ent;
};
// affichage
void VariablesExporter::TypeQuelc_face_a_un_element::Affiche()
{ cout << (*this) ;
};
// ======== TypeQuelc_arete_a_un_element ============
// classe conteneur pour les grandeurs quelconque à une arete d'élément
ostream & operator << ( ostream & sort,const VariablesExporter::TypeQuelc_arete_a_un_element & a)
{ // récup du pointeur de la classe mère
const VariablesExporter::TypeQuelconque_a_Face_arete* aA = a.PointClass_QuelcFA_const();
// sortie
sort << "\n Quelconque_arete_element_ ";
sort << *aA; // la classe mère
// retour
return sort;
};
istream & operator >> ( istream & ent, VariablesExporter::TypeQuelc_arete_a_un_element & a)
{ // récup du pointeur de la classe mère
VariablesExporter::TypeQuelconque_a_Face_arete* aA = a.PointClass_QuelcFA();
// lecture du type et vérification
string nomtype,toto; ent >> nomtype ;
if (nomtype != "Quelconque_arete_element_")
{ cout << "\n *** erreur en lecture: on attendait le mot cle Quelconque_arete_element_ et on a lue "
<< nomtype
<< "\n operator >> ( istream & ent, VariablesExporter::TypeQuelc_arete_a_un_element(...";
Sortie(1);
return ent;
};
// lecture de la partie mère
ent >> *aA;
// on vérifie également qu'il s'agit bien d'une ref d'élément
if (aA->Ref_NE()[0] != 'E')
{ cout << "\n *** lecture de la variable utilisateur: " << a.nom_var
<< " erreur de syntaxe en lecture d'une reference d'element ,"
<< " la premiere lettre "
<< " devraientt etre E et on a lu: "<Ref_NE() << " !!"
<< endl;
Sortie(1);
};
return ent;
};
// affichage
void VariablesExporter::TypeQuelc_arete_a_un_element::Affiche()
{ cout << (*this) ;
};
// ======== TypeQuelc_Une_composante_Grandeur_globale ============
// classe conteneur pour une composante de grandeur globale
ostream & operator << ( ostream & sort,const VariablesExporter::TypeQuelc_Une_composante_Grandeur_globale & a)
{ // sortie
sort << "\n Une_composante_Grandeur_globale_ ";
sort << a.var.nom1 << " " << a.var.nom2 << " composante: " << a.var.n << " ";
// retour
return sort;
};
istream & operator >> ( istream & ent, VariablesExporter::TypeQuelc_Une_composante_Grandeur_globale & a)
{ // lecture du type et vérification
string nomtype,toto; ent >> nomtype ;
if (nomtype != "Une_composante_Grandeur_globale_")
{ cout << "\n *** erreur en lecture: on attendait le mot cle Une_composante_Grandeur_globale_ et on a lue "
<< nomtype
<< "\n operator >> ( istream & ent, VariablesExporter::TypeQuelc_Une_composante_Grandeur_globale(...";
Sortie(1);
return ent;
};
// lecture des infos
ent >> a.var.nom1 >> a.var.nom2 >> toto >> a.var.n;
// vérif il faut que les 3 premiers caractères de a.nom_var soit un VR_
if (!((a.var.nom1[0]== 'V')&&(a.var.nom1[1]== 'R')&&(a.var.nom1[2]== '_')))
{ cout << "\n *** erreur de syntaxe en lecture d'une variable utilisateur,"
<< " les 3 premieres lettres "
<< " devraientt etre un 'VR_' et on a lu: "<> ( istream & ent, VariablesExporter::TypeQuelc_Une_composante_Grandeur_globale(...";
Sortie(1);
return ent;
};
return ent;
};
// affichage
void VariablesExporter::TypeQuelc_Une_composante_Grandeur_globale::Affiche()
{ cout << (*this) ;
};
//--------------------------- VariablesExporter --------------
// CONSTRUCTEURS :
// Constructeur par defaut
VariablesExporter::VariablesExporter ():
li_Q(),li_nom()
// ----- les variables
// -> noeuds
,list_noeud_type_ddl()
,list_noeud_type_ddlEtendu()
,list_noeud_type_quelconque()
// -> éléments
,list_element_type_ddl()
,list_element_type_particulier(),list_quelc_element_type_particulier()
,list_element_type_evoluee()
,list_quelc_element_type_evoluee()
// -> face d'éléments
,list_face_element_type_quelc()
,list_quelc_face_element_type_quelc()
// -> arête d'éléments
,list_arete_element_type_quelc()
,list_quelc_arete_element_type_quelc()
// -> une composante d'une variable globale de type multidimentionnel
,list_var_glob_sur_grandeur_globale()
,initiaConteneurQuelconque(false)
{
};
// Constructeur de copie,
VariablesExporter::VariablesExporter (const VariablesExporter& a):
li_Q(a.li_Q),li_nom(a.li_nom)
// ----- les variables
// -> noeuds
,list_noeud_type_ddl(a.list_noeud_type_ddl)
,list_noeud_type_ddlEtendu(a.list_noeud_type_ddlEtendu)
,list_noeud_type_quelconque(a.list_noeud_type_quelconque)
// -> éléments
,list_element_type_ddl(a.list_element_type_ddl)
,list_element_type_particulier(a.list_element_type_particulier)
,list_quelc_element_type_particulier(a.list_quelc_element_type_particulier)
,list_element_type_evoluee(a.list_element_type_evoluee)
,list_quelc_element_type_evoluee(a.list_quelc_element_type_evoluee)
// -> face d'éléments
,list_face_element_type_quelc(a.list_face_element_type_quelc)
,list_quelc_face_element_type_quelc(a.list_quelc_face_element_type_quelc)
// -> arête d'éléments
,list_arete_element_type_quelc(a.list_arete_element_type_quelc)
,list_quelc_arete_element_type_quelc(a.list_quelc_arete_element_type_quelc)
// -> une composante d'une variable globale de type multidimentionnel
,list_var_glob_sur_grandeur_globale(a.list_var_glob_sur_grandeur_globale)
,initiaConteneurQuelconque(a.initiaConteneurQuelconque)
{
};
VariablesExporter::~VariablesExporter()
// Destructeur
{
};
// lecture
void VariablesExporter::LectureVariablesExporter(UtilLecture * entreePrinc)
{ if (ParaGlob::NiveauImpression() >= 5) cout << " debut de lecture des constantes et variables a exporter globalement " << endl;
// 1) cas des constantes
LecConstantesUtilisateur(*entreePrinc);
LecVariablesUtilisateur(*entreePrinc);
};
// affichage et definition interactive des commandes
// cas = 1: interactif complet
// cas = 2: entrée uniquement de noms de fichier
void VariablesExporter::Info_commande_VariablesExporters(UtilLecture * entreePrinc)
{ Info_commande_ConstantesUtilisateur(entreePrinc);
Info_commande_VariablesUtilisateur(entreePrinc);
};
// insertion des constantes et variables utilisateurs vers globales
void VariablesExporter::InsertConstVarUtilisateur_dans_globale()
{InsertConstUtilisateur_dans_globale();
Insert_VarUtilisateur_dans_globale();
};
// initialisation des conteneurs quelconques
// création des conteneurs aux noeuds s'il s'agit d'une variable
// associée à un vecteur global (au sens des algorithmes globaux)
void VariablesExporter::InitialisationConteneursQuelconques(LesMaillages& lesMail
,const List_io < TypeQuelconque >& listeVecGlob,const LesReferences& lesRef)
{ if (!initiaConteneurQuelconque)
{ // on commence par récupérer les conteneurs disponibles
// on se met en absolu par défaut -> le conteneur le + grand
// ---> pourrait poser pb, si ensuite le conteneur diminue !! à surveiller !
bool absolu = true;
Tableau > tabelement_typeParti
(lesMail.Les_type_de_donnees_particulieres_par_element(absolu));
// idem mais sous forme de grandeurs évoluées
Tableau > tabelement_evoluee
(lesMail.Les_type_de_donnees_evolues_internes_par_element(absolu));
// pour les faces et arêtes
Tableau >tab_F_element_TypeQuelconque
(lesMail.Les_type_de_donnees_evolues_internes_par_face_element(absolu));
Tableau > tab_A_element_TypeQuelconque
(lesMail.Les_type_de_donnees_evolues_internes_par_arete_element(absolu));
// on passe en revue les grandeurs pour définir les conteneurs associés
// --- cas des grandeurs particulières aux pti d'élément
{list_quelc_element_type_particulier.clear(); // init
List_io < TypeParticulier_a_un_element >::iterator
il,ilfin=list_element_type_particulier.end();
for (il = list_element_type_particulier.begin(); il != ilfin;il++)
{// on vérifie qu'elle appartient à la liste des grandeurs disponibles
int n_mail = 1; // init par défaut
if ((*il).Nom_mail() != "")
n_mail = lesMail.NumMaillage((*il).Nom_mail());
TypeQuelconque a((*il).Quelc_const()); // création d'un type quelconque sans grandeur
List_io& tpg = (tabelement_typeParti(n_mail)); // pour simplifier
if (find(tpg.begin(),tpg.end(),a) != tpg.end())
{ // il existe -> enregistrement
List_io::iterator it = find(tpg.begin(),tpg.end(),a); // récup du réel type
list_quelc_element_type_particulier.push_back(*it);
}
else
{ cout << "\n *** erreur dans l'initialisation de la variable utilisateur "
<< (*il).Nom_var() << " la grandeur associee " << (*il).Quelc_const().NomPlein()
<< " n'existe pas !! "
<< "\n VariablesExporter::InitialisationConteneursQuelconques(..." << flush;
(*il).Affiche();
Sortie(1);
};
};
};
// --- cas des grandeurs évoluées aux pti d'élément
{list_quelc_element_type_evoluee.clear(); // init
List_io < TypeEvoluee_a_un_element >::iterator
il,ilfin=list_element_type_evoluee.end();
for (il = list_element_type_evoluee.begin(); il != ilfin;il++)
{// on vérifie qu'elle appartient à la liste des grandeurs disponibles
int n_mail = 1; // init par défaut
if ((*il).Nom_mail() != "")
n_mail = lesMail.NumMaillage((*il).Nom_mail());
TypeQuelconque a((*il).Quelc_const()); // création d'un type quelconque sans grandeur
List_io& tpg = (tabelement_typeParti(n_mail)); // pour simplifier
if (find(tpg.begin(),tpg.end(),a) != tpg.end())
{ // il existe -> enregistrement
List_io::iterator it = find(tpg.begin(),tpg.end(),a); // récup du réel type
list_quelc_element_type_evoluee.push_back(*it);
}
else
{ cout << "\n *** erreur dans l'initialisation de la variable utilisateur "
<< (*il).Nom_var() << " la grandeur associee " << (*il).Quelc_const().NomPlein()
<< " n'existe pas !! "
<< "\n VariablesExporter::InitialisationConteneursQuelconques(..." << flush;
(*il).Affiche();
Sortie(1);
};
};
};
// --- cas des grandeurs quelconques aux pti de faces d'élément
{list_quelc_face_element_type_quelc.clear(); // init
List_io < TypeQuelc_face_a_un_element >::iterator
il,ilfin=list_face_element_type_quelc.end();
for (il = list_face_element_type_quelc.begin(); il != ilfin;il++)
{// on vérifie qu'elle appartient à la liste des grandeurs disponibles
int n_mail = 1; // init par défaut
if ((*il).Nom_mail() != "")
n_mail = lesMail.NumMaillage((*il).Nom_mail());
TypeQuelconque a((*il).Quelc_const()); // création d'un type quelconque sans grandeur
List_io& tpg = (tab_F_element_TypeQuelconque(n_mail)); // pour simplifier
if (find(tpg.begin(),tpg.end(),a) != tpg.end())
{ // il existe -> enregistrement
List_io::iterator it = find(tpg.begin(),tpg.end(),a); // récup du réel type
list_quelc_face_element_type_quelc.push_back(*it);
}
else
{ cout << "\n *** erreur dans l'initialisation de la variable utilisateur "
<< (*il).Nom_var() << " la grandeur associee " << (*il).Quelc_const().NomPlein()
<< " n'existe pas !! "
<< "\n VariablesExporter::InitialisationConteneursQuelconques(..." << flush;
(*il).Affiche();
Sortie(1);
};
};
};
// --- cas des grandeurs quelconques aux pti d'arêtes d'élément
{list_quelc_arete_element_type_quelc.clear(); // init
List_io < TypeQuelc_arete_a_un_element >::iterator
il,ilfin=list_arete_element_type_quelc.end();
for (il = list_arete_element_type_quelc.begin(); il != ilfin;il++)
{// on vérifie qu'elle appartient à la liste des grandeurs disponibles
int n_mail = 1; // init par défaut
if ((*il).Nom_mail() != "")
n_mail = lesMail.NumMaillage((*il).Nom_mail());
TypeQuelconque a((*il).Quelc_const()); // création d'un type quelconque sans grandeur
List_io& tpg = (tab_A_element_TypeQuelconque(n_mail)); // pour simplifier
if (find(tpg.begin(),tpg.end(),a) != tpg.end())
{ // il existe -> enregistrement
List_io::iterator it = find(tpg.begin(),tpg.end(),a); // récup du réel type
list_quelc_arete_element_type_quelc.push_back(*it);
}
else
{ cout << "\n *** erreur dans l'initialisation de la variable utilisateur "
<< (*il).Nom_var() << " la grandeur associee " << (*il).Quelc_const().NomPlein()
<< " n'existe pas !! "
<< "\n VariablesExporter::InitialisationConteneursQuelconques(..." << flush;
(*il).Affiche();
Sortie(1);
};
};
};
// --- traitement particulier pour les noeuds
{// dans le cas où il y a des vecteurs globaux qui ont été retenus,
// il faut définir aux noeuds des conteneurs adéquates
if ((listeVecGlob.size() != 0) && (list_noeud_type_quelconque.size() != 0))
{ // on boucle sur les var de noeud: a priori c'est le nombre le plus petit
List_io ::iterator il,ilfin=list_noeud_type_quelconque.end();
for(il= list_noeud_type_quelconque.begin();il != ilfin; il++)
{// on boucle sur les vecteurs globaux pour savoir s'il y en a un qui correspond
List_io < TypeQuelconque >::const_iterator it,itfin = listeVecGlob.end();
for (it=listeVecGlob.begin();it != itfin;it++)
{//cout << "\n (*it) "<<(*it).EnuTypeQuelconque().NomPlein()
// << " *il "<< (*il).Quelc().NomPlein() << flush;
if ((*it).EnuTypeQuelconque() == (*il).Quelc())
{ // récup de la reférence
const string * point_mail = NULL;
if ((*il).Nom_mail_const() != "")
point_mail = &((*il).Nom_mail_const());
const ReferenceNE & ref =
((ReferenceNE &) lesRef.Trouve((*il).Ref_NE(),point_mail));
int ne = ref.Numero(1); // le num du noeud: uniquement le premier
int nmail = 1;
if ((*il).Nom_mail() != "")
nmail = lesMail.NumMaillage((*il).Nom_mail());
Noeud * noo = & lesMail.Noeud_LesMaille(nmail,ne);
noo->AjoutUnTypeQuelconque(*it);
};
};
};
};
};
initiaConteneurQuelconque=true; // pour une initialisation unique
}
};
// insertion et stockage des variables au niveau de ParaGlob
void VariablesExporter::Insert_VarUtilisateur_dans_globale()
{
// --- cas des ddl aux noeuds: list_noeud_type_ddl
{List_io < Ddl_a_un_noeud >::iterator il,ilfin=list_noeud_type_ddl.end();
for (il=list_noeud_type_ddl.begin();il != ilfin;il++)
{ Ddl_a_un_noeud& dan = *il; // pour simplifier
// on regarde si la grandeur existe déjà
const void* pointe = (ParaGlob::param->GrandeurGlobal(dan.Nom_var()));
if (pointe != NULL)
{cout << "\n *** pb dans dans la def de la variable utilisateur globale "<< dan.Nom_var()
<< " elle existe deja !! , ce n'est pas normal "
<< "\n VariablesExporter::Insert_VarUtilisateur_dans_globale(..."
<< endl;
Sortie(1);
}
else // sinon c'est ok, on la défini
{// on crée un conteneur d'un double
double val=0;
Grandeur_scalaire_double grand_courant(val);
switch (dan.Temps())
{case TEMPS_0 :
{TypeQuelconque typQ1(GENERIQUE_UNE_VARIABLE_GLOB_DOUBLE_UTILISATEUR_0,NU_DDL,grand_courant);
ParaGlob::param->Ajout_grandeur_consultable(&typQ1,dan.Nom_var());
break;
}
case TEMPS_t :
{TypeQuelconque typQ1(GENERIQUE_UNE_VARIABLE_GLOB_DOUBLE_UTILISATEUR_T,NU_DDL,grand_courant);
ParaGlob::param->Ajout_grandeur_consultable(&typQ1,dan.Nom_var());
break;
}
case TEMPS_tdt :
{TypeQuelconque typQ1(GENERIQUE_UNE_VARIABLE_GLOB_DOUBLE_UTILISATEUR_TDT,NU_DDL,grand_courant);
ParaGlob::param->Ajout_grandeur_consultable(&typQ1,dan.Nom_var());
break;
}
default :
cout << "\nErreur : valeur incorrecte du temps pour une variable ddl globale !\n";
cout << "\n VariablesExporter::Insert_VarUtilisateur_dans_globale(... \n";
Sortie(1);
};
};
};
};
// --- cas des ddl étendus aux noeuds: list_noeud_type_ddlEtendu
{List_io < Ddl_etendu_a_un_noeud >::iterator il,ilfin=list_noeud_type_ddlEtendu.end();
for (il=list_noeud_type_ddlEtendu.begin();il != ilfin;il++)
{ Ddl_etendu_a_un_noeud& dan = *il; // pour simplifier
// on regarde si la grandeur existe déjà
const void* pointe = (ParaGlob::param->GrandeurGlobal(dan.Nom_var()));
if (pointe != NULL)
{cout << "\n *** pb dans dans la def de la variable utilisateur globale "<< dan.Nom_var()
<< " elle existe deja !! , ce n'est pas normal "
<< "\n VariablesExporter::Insert_VarUtilisateur_dans_globale(..."
<< endl;
Sortie(1);
}
else // sinon c'est ok, on la défini
{// on crée un conteneur d'un double
double val=0;
Grandeur_scalaire_double grand_courant(val);
TypeQuelconque typQ1(UN_DDL_ENUM_ETENDUE,NU_DDL,grand_courant);
ParaGlob::param->Ajout_grandeur_consultable(&typQ1,dan.Nom_var());
};
};
};
// --- cas des grandeurs quelconques aux noeuds: list_noeud_type_quelconque
{List_io < Quelconque_a_un_noeud >::iterator il,ilfin=list_noeud_type_quelconque.end();
for (il=list_noeud_type_quelconque.begin();il != ilfin;il++)
{ Quelconque_a_un_noeud& dan = *il; // pour simplifier
// on regarde si la grandeur existe déjà
const void* pointe = (ParaGlob::param->GrandeurGlobal(dan.Nom_var()));
if (pointe != NULL)
{cout << "\n *** pb dans dans la def de la variable utilisateur globale "<< dan.Nom_var()
<< " elle existe deja !! , ce n'est pas normal "
<< "\n VariablesExporter::Insert_VarUtilisateur_dans_globale(..."
<< endl;
Sortie(1);
}
else // sinon c'est ok, on la défini
{// on insert un conteneur double associé
VariablesExporter::InsertCompGrandeurQuelc(dan.Nom_var(),dan.Quelc_const());
};
};
};
// --- cas des ddl pur à un pti d'élément : list_element_type_ddl
{List_io < Ddl_a_un_element >::iterator il,ilfin=list_element_type_ddl.end();
for (il=list_element_type_ddl.begin();il != ilfin;il++)
{ Ddl_a_un_element& dan = *il; // pour simplifier
// on regarde si la grandeur existe déjà
const void* pointe = (ParaGlob::param->GrandeurGlobal(dan.Nom_var()));
if (pointe != NULL)
{cout << "\n *** pb dans dans la def de la variable utilisateur globale "<< dan.Nom_var()
<< " elle existe deja !! , ce n'est pas normal "
<< "\n VariablesExporter::Insert_VarUtilisateur_dans_globale(..."
<< endl;
Sortie(1);
}
else // sinon c'est ok, on la défini
{// on crée un conteneur d'un double
double val=0;
Grandeur_scalaire_double grand_courant(val);
switch (dan.Temps())
{case TEMPS_0 :
{TypeQuelconque typQ1(GENERIQUE_UNE_VARIABLE_GLOB_DOUBLE_UTILISATEUR_0,NU_DDL,grand_courant);
ParaGlob::param->Ajout_grandeur_consultable(&typQ1,dan.Nom_var());
break;
}
case TEMPS_t :
{TypeQuelconque typQ1(GENERIQUE_UNE_VARIABLE_GLOB_DOUBLE_UTILISATEUR_T,NU_DDL,grand_courant);
ParaGlob::param->Ajout_grandeur_consultable(&typQ1,dan.Nom_var());
break;
}
case TEMPS_tdt :
{TypeQuelconque typQ1(GENERIQUE_UNE_VARIABLE_GLOB_DOUBLE_UTILISATEUR_TDT,NU_DDL,grand_courant);
ParaGlob::param->Ajout_grandeur_consultable(&typQ1,dan.Nom_var());
break;
}
default :
cout << "\nErreur : valeur incorrecte du temps pour une variable ddl globale !\n";
cout << "\n VariablesExporter::Insert_VarUtilisateur_dans_globale(... \n";
Sortie(1);
};
};
};
};
// --- cas des grandeurs particulières aux éléments: list_element_type_particulier
{List_io < TypeParticulier_a_un_element >::iterator il,ilfin=list_element_type_particulier.end();
for (il=list_element_type_particulier.begin();il != ilfin;il++)
{ TypeParticulier_a_un_element& dan = *il; // pour simplifier
// on regarde si la grandeur existe déjà
const void* pointe = (ParaGlob::param->GrandeurGlobal(dan.Nom_var()));
if (pointe != NULL)
{cout << "\n *** pb dans dans la def de la variable utilisateur globale "<< dan.Nom_var()
<< " elle existe deja !! , ce n'est pas normal "
<< "\n VariablesExporter::Insert_VarUtilisateur_dans_globale(..."
<< endl;
Sortie(1);
}
else // sinon c'est ok, on la défini
{// on insert un conteneur double associé
VariablesExporter::InsertCompGrandeurQuelc(dan.Nom_var(),dan.Quelc_const());
};
};
};
// --- cas des grandeurs évoluées aux éléments: list_element_type_evoluee
{List_io < TypeEvoluee_a_un_element >::iterator il,ilfin=list_element_type_evoluee.end();
for (il=list_element_type_evoluee.begin();il != ilfin;il++)
{ TypeEvoluee_a_un_element& dan = *il; // pour simplifier
// on regarde si la grandeur existe déjà
const void* pointe = (ParaGlob::param->GrandeurGlobal(dan.Nom_var()));
if (pointe != NULL)
{cout << "\n *** pb dans dans la def de la variable utilisateur globale "<< dan.Nom_var()
<< " elle existe deja !! , ce n'est pas normal "
<< "\n VariablesExporter::Insert_VarUtilisateur_dans_globale(..."
<< endl;
Sortie(1);
}
else // sinon c'est ok, on la défini
{// on insert un conteneur double associé
VariablesExporter::InsertCompGrandeurQuelc(dan.Nom_var(),dan.Quelc_const());
};
};
};
// --- cas des grandeurs quelconques aux pti de faces d'éléments: list_face_element_type_quelc
{List_io < TypeQuelc_face_a_un_element >::iterator il,ilfin=list_face_element_type_quelc.end();
for (il=list_face_element_type_quelc.begin();il != ilfin;il++)
{ TypeQuelc_face_a_un_element& dan = *il; // pour simplifier
// on regarde si la grandeur existe déjà
const void* pointe = (ParaGlob::param->GrandeurGlobal(dan.Nom_var()));
if (pointe != NULL)
{cout << "\n *** pb dans dans la def de la variable utilisateur globale "<< dan.Nom_var()
<< " elle existe deja !! , ce n'est pas normal "
<< "\n VariablesExporter::Insert_VarUtilisateur_dans_globale(..."
<< endl;
Sortie(1);
}
else // sinon c'est ok, on la défini
{// on insert un conteneur double associé
VariablesExporter::InsertCompGrandeurQuelc(dan.Nom_var(),dan.Quelc_const());
};
};
};
// --- cas des grandeurs quelconques aux pti d'arête d'éléments: list_arete_element_type_quelc
{List_io < TypeQuelc_arete_a_un_element >::iterator il,ilfin=list_arete_element_type_quelc.end();
for (il=list_arete_element_type_quelc.begin();il != ilfin;il++)
{ TypeQuelc_arete_a_un_element& dan = *il; // pour simplifier
// on regarde si la grandeur existe déjà
const void* pointe = (ParaGlob::param->GrandeurGlobal(dan.Nom_var()));
if (pointe != NULL)
{cout << "\n *** pb dans dans la def de la variable utilisateur globale "<< dan.Nom_var()
<< " elle existe deja !! , ce n'est pas normal "
<< "\n VariablesExporter::Insert_VarUtilisateur_dans_globale(..."
<< endl;
Sortie(1);
}
else // sinon c'est ok, on la défini
{// on insert un conteneur double associé
VariablesExporter::InsertCompGrandeurQuelc(dan.Nom_var(),dan.Quelc_const());
};
};
};
// --- cas d'une composante d'une variable globale de type multidimentionnel
{List_io ::iterator
il,ilfin=list_var_glob_sur_grandeur_globale.end();
for (il=list_var_glob_sur_grandeur_globale.begin();il != ilfin;il++)
{ TypeQuelc_Une_composante_Grandeur_globale& dan = *il; // pour simplifier
// on regarde si la grandeur existe déjà
const void* pointe = (ParaGlob::param->GrandeurGlobal(dan.Nom_var()));
if (pointe != NULL)
{cout << "\n *** pb dans dans la def de la variable utilisateur globale "<< dan.Nom_var()
<< " elle existe deja !! , ce n'est pas normal "
<< "\n VariablesExporter::Insert_VarUtilisateur_dans_globale(..."
<< endl;
Sortie(1);
}
else // sinon c'est ok, on la défini
{// on insert un conteneur double nommé et indicé associé
double val=0;
Grandeur_Double_Nommer_indicer grand_courant(dan.Nom_grandeur_globale(),val,dan.Indice_const());
TypeQuelconque typQ1(GENERIQUE_UNE_VARIABLE_GLOB_DOUBLE_UTILISATEUR_TDT,NU_DDL,grand_courant);
ParaGlob::param->Ajout_grandeur_consultable(&typQ1,dan.Nom_var());
};
};
};
};
// Affiche l'ensemble des variables et constantes utilisateur
void VariablesExporter::Affiche () const
{ cout << "\n\t\t*** constantes et Variables exportees globalement ***\n\n";
// -- cas des Constantes utilisateurs ---
cout << "\n ===constantes_utilisateur==== ";
{ List_io < Ddl_a_un_noeud >::const_iterator it, itfin = list_noeud_type_ddl.end();
List_io < string >::const_iterator il = li_nom.begin();
for (it = list_noeud_type_ddl.begin();it != itfin; it++,il++)
cout << "\n double_ " << (*il) ;
};
// -- cas des variables utilisateurs ---
cout << "\n ===variables_utilisateur==== ";
{ List_io < Ddl_a_un_noeud >::const_iterator it, itfin = list_noeud_type_ddl.end();
for (it = list_noeud_type_ddl.begin();it != itfin; it++)
cout << (*it);
};
// -- cas des ddl étendu aux noeuds ---
{ List_io < Ddl_etendu_a_un_noeud >::const_iterator it, itfin = list_noeud_type_ddlEtendu.end();
for (it = list_noeud_type_ddlEtendu.begin();it != itfin; it++)
cout << (*it);
};
// -- cas des grandeurs quelconques aux noeuds ---
{ List_io < Quelconque_a_un_noeud >::const_iterator it, itfin = list_noeud_type_quelconque.end();
for (it = list_noeud_type_quelconque.begin();it != itfin; it++)
cout << (*it);
};
// -- cas des ddl aux pti d'éléments ---
{ List_io < Ddl_a_un_element >::const_iterator it, itfin = list_element_type_ddl.end();
for (it = list_element_type_ddl.begin();it != itfin; it++)
cout << (*it);
};
// -- cas des grandeurs particulières aux pti d'éléments ---
{ List_io < TypeParticulier_a_un_element >::const_iterator it, itfin = list_element_type_particulier.end();
for (it = list_element_type_particulier.begin();it != itfin; it++)
cout << (*it);
};
// -- cas des grandeurs évoluées aux pti d'éléments ---
{ List_io < TypeEvoluee_a_un_element >::const_iterator it, itfin = list_element_type_evoluee.end();
for (it = list_element_type_evoluee.begin();it != itfin; it++)
cout << (*it);
};
// -- cas des grandeurs quelconques aux pti de faces d'éléments ---
{ List_io < TypeQuelc_face_a_un_element >::const_iterator it, itfin = list_face_element_type_quelc.end();
for (it = list_face_element_type_quelc.begin();it != itfin; it++)
cout << (*it);
};
// -- cas des grandeurs quelconques aux pti d'arête d'éléments ---
{ List_io < TypeQuelc_arete_a_un_element >::const_iterator it, itfin = list_arete_element_type_quelc.end();
for (it = list_arete_element_type_quelc.begin();it != itfin; it++)
cout << (*it);
};
// -- cas d'une composante d'une variable globale de type multidimentionnel ---
{ List_io < TypeQuelc_Une_composante_Grandeur_globale >::const_iterator it, itfin = list_var_glob_sur_grandeur_globale.end();
for (it = list_var_glob_sur_grandeur_globale.begin();it != itfin; it++)
cout << (*it);
};
};
// Surcharge de l'operateur = : realise l'egalite entre deux instances
VariablesExporter&
VariablesExporter::operator= (VariablesExporter& a)
{ li_Q=a.li_Q; li_nom=a.li_nom;
// ----- les variables
// -> noeuds
list_noeud_type_ddl = a.list_noeud_type_ddl;
list_noeud_type_ddlEtendu=a.list_noeud_type_ddlEtendu;
list_noeud_type_quelconque = a.list_noeud_type_quelconque;
// -> éléments
list_element_type_ddl = a.list_element_type_ddl;
list_element_type_particulier = a.list_element_type_particulier;
list_quelc_element_type_particulier = a.list_quelc_element_type_particulier;
list_element_type_evoluee = a.list_element_type_evoluee;
list_quelc_element_type_evoluee = a.list_quelc_element_type_evoluee;
// -> face d'éléments
list_face_element_type_quelc = a.list_face_element_type_quelc;
list_quelc_face_element_type_quelc = a.list_quelc_face_element_type_quelc;
// -> arête d'éléments
list_arete_element_type_quelc = a.list_arete_element_type_quelc;
list_quelc_arete_element_type_quelc = a.list_quelc_arete_element_type_quelc;
// -> une composante d'une variable globale de type multidimentionnel
list_var_glob_sur_grandeur_globale = a.list_var_glob_sur_grandeur_globale;
return (*this);
};
// test si toutes les informations des maillages sont completes
// = true -> complet
// = false -> incomplet
bool VariablesExporter::Complet_VariablesExporter(const LesReferences& lesRef)
{ bool res = true; // init
// ***vérifier que toutes les variables ont des noms différents
// a priori c'est ok vu que la vérif est déjà effectuée à la lecture
// on va vérifier que toutes les références sont correctes
// --- cas des ddl aux noeuds
{List_io < Ddl_a_un_noeud >::iterator il,ilfin = list_noeud_type_ddl.end();
for (il = list_noeud_type_ddl.begin();il != ilfin;il++)
{Ddl_a_un_noeud& dan = *il; // pour simplifier
// récup de la reférence
const string * point_mail = NULL;
if ((*il).Nom_mail_const() != "")
point_mail = &((*il).Nom_mail_const());
const ReferenceNE & ref =
((ReferenceNE &) lesRef.Trouve((*il).Ref_Num_NE(),point_mail));
// on vérifie qu'il s'agit d'une ref de noeud
if (ref.Indic() != 1)
{ cout << "\n *** erreur la variable utilisateur " << dan.Nom_var()
<< " n'est pas associee a une reference de noeud "
<< " revoir la mise en donnees ! ";
if (ParaGlob::NiveauImpression() >= 2)
dan.Affiche();
Sortie(1);
};
// on vérifie qu'il n'y a qu'un seule numéro de noeud
if (ref.Taille() != 1)
{ cout << "\n *** erreur la variable utilisateur " << dan.Nom_var()
<< " est associee a une reference qui comporte "
<< ref.Taille() << " noeud(s) alors qu'il ne faut qu'un seul noeud !"
<< " revoir la mise en donnees ! ";
if (ParaGlob::NiveauImpression() >= 2)
dan.Affiche();
Sortie(1);
};
};
};
// --- cas des ddl étendus aux noeuds
{List_io < Ddl_etendu_a_un_noeud >::iterator il,ilfin = list_noeud_type_ddlEtendu.end();
for (il = list_noeud_type_ddlEtendu.begin();il != ilfin;il++)
{Ddl_etendu_a_un_noeud& dan = *il; // pour simplifier
// récup de la reférence
const string * point_mail = NULL;
if ((*il).Nom_mail_const() != "")
point_mail = &((*il).Nom_mail_const());
const ReferenceNE & ref =
((ReferenceNE &) lesRef.Trouve((*il).Ref_NE(),point_mail));
// on vérifie qu'il s'agit d'une ref de noeud
if (ref.Indic() != 1)
{ cout << "\n *** erreur la variable utilisateur " << dan.Nom_var()
<< " n'est pas associee a une reference de noeud "
<< " revoir la mise en donnees ! ";
if (ParaGlob::NiveauImpression() >= 2)
dan.Affiche();
Sortie(1);
};
// on vérifie qu'il n'y a qu'un seule numéro de noeud
if (ref.Taille() != 1)
{ cout << "\n *** erreur la variable utilisateur " << dan.Nom_var()
<< " est associee a une reference qui comporte "
<< ref.Taille() << " noeud(s) alors qu'il ne faut qu'un seul noeud !"
<< " revoir la mise en donnees ! ";
if (ParaGlob::NiveauImpression() >= 2)
dan.Affiche();
Sortie(1);
};
};
};
// --- cas des grandeurs quelconques aux noeuds
{List_io < Quelconque_a_un_noeud >::iterator il,ilfin = list_noeud_type_quelconque.end();
for (il = list_noeud_type_quelconque.begin();il != ilfin;il++)
{Quelconque_a_un_noeud& dan = *il; // pour simplifier
// récup de la reférence
const string * point_mail = NULL;
if ((*il).Nom_mail_const() != "")
point_mail = &((*il).Nom_mail_const());
const ReferenceNE & ref =
((ReferenceNE &) lesRef.Trouve((*il).Ref_NE(),point_mail));
// on vérifie qu'il s'agit d'une ref de noeud
if (ref.Indic() != 1)
{ cout << "\n *** erreur la variable utilisateur " << dan.Nom_var()
<< " n'est pas associee a une reference de noeud "
<< " revoir la mise en donnees ! ";
if (ParaGlob::NiveauImpression() >= 2)
dan.Affiche();
Sortie(1);
};
// on vérifie qu'il n'y a qu'un seule numéro de noeud
if (ref.Taille() != 1)
{ cout << "\n *** erreur la variable utilisateur " << dan.Nom_var()
<< " est associee a une reference qui comporte "
<< ref.Taille() << " noeud(s) alors qu'il ne faut qu'un seul noeud !"
<< " revoir la mise en donnees ! ";
if (ParaGlob::NiveauImpression() >= 2)
dan.Affiche();
Sortie(1);
};
};
};
// --- cas des ddl aux pti d'élément
{List_io < Ddl_a_un_element >::iterator il,ilfin = list_element_type_ddl.end();
for (il = list_element_type_ddl.begin();il != ilfin;il++)
{Ddl_a_un_element& dan = *il; // pour simplifier
// récup de la reférence
const string * point_mail = NULL;
if ((*il).Nom_mail_const() != "")
point_mail = &((*il).Nom_mail_const());
const ReferenceNE & ref =
((ReferenceNE &) lesRef.Trouve((*il).Ref_NE(),point_mail));
// on vérifie qu'il s'agit d'une ref d'élément
if (ref.Indic() != 2)
{ cout << "\n *** erreur la variable utilisateur " << dan.Nom_var()
<< " n'est pas associee a une reference d'element' "
<< " revoir la mise en donnees ! ";
if (ParaGlob::NiveauImpression() >= 2)
dan.Affiche();
Sortie(1);
};
// on vérifie qu'il n'y a qu'un seule numéro d'élément
if (ref.Taille() != 1)
{ cout << "\n *** erreur la variable utilisateur " << dan.Nom_var()
<< " est associee a une reference qui comporte "
<< ref.Taille() << " element(s) alors qu'il ne faut qu'un seul element !"
<< " revoir la mise en donnees ! ";
if (ParaGlob::NiveauImpression() >= 2)
dan.Affiche();
Sortie(1);
};
};
};
// --- cas des grandeurs particulières aux pti d'élément
{List_io < TypeParticulier_a_un_element >::iterator il,ilfin
= list_element_type_particulier.end();
List_io < TypeQuelconque >::iterator it = list_quelc_element_type_particulier.begin();
// on balaie la liste avec les conteneurs associés
for (il = list_element_type_particulier.begin();il != ilfin;il++,it++)
{TypeParticulier_a_un_element& dan = *il; // pour simplifier
// récup de la reférence
const string * point_mail = NULL;
if ((*il).Nom_mail_const() != "")
point_mail = &((*il).Nom_mail_const());
const ReferenceNE & ref =
((ReferenceNE &) lesRef.Trouve((*il).Ref_NE(),point_mail));
// on vérifie qu'il s'agit d'une ref d'élément
if (ref.Indic() != 2)
{ cout << "\n *** erreur la variable utilisateur " << dan.Nom_var()
<< " n'est pas associee a une reference d'element' "
<< " revoir la mise en donnees ! ";
if (ParaGlob::NiveauImpression() >= 2)
dan.Affiche();
Sortie(1);
};
// on vérifie qu'il n'y a qu'un seule numéro d'élément
if (ref.Taille() != 1)
{ cout << "\n *** erreur la variable utilisateur " << dan.Nom_var()
<< " est associee a une reference qui comporte "
<< ref.Taille() << " element(s) alors qu'il ne faut qu'un seul element !"
<< " revoir la mise en donnees ! ";
if (ParaGlob::NiveauImpression() >= 2)
dan.Affiche();
Sortie(1);
};
};
};
// --- cas des grandeurs évoluées aux pti d'élément
{List_io < TypeEvoluee_a_un_element >::iterator il,ilfin
= list_element_type_evoluee.end();
List_io < TypeQuelconque >::iterator it = list_quelc_element_type_evoluee.begin();
// on balaie la liste avec les conteneurs associés
for (il = list_element_type_evoluee.begin();il != ilfin;il++,it++)
{TypeEvoluee_a_un_element& dan = *il; // pour simplifier
// récup de la reférence
const string * point_mail = NULL;
if ((*il).Nom_mail_const() != "")
point_mail = &((*il).Nom_mail_const());
const ReferenceNE & ref =
((ReferenceNE &) lesRef.Trouve((*il).Ref_NE(),point_mail));
// on vérifie qu'il s'agit d'une ref d'élément
if (ref.Indic() != 2)
{ cout << "\n *** erreur la variable utilisateur " << dan.Nom_var()
<< " n'est pas associee a une reference d'element' "
<< " revoir la mise en donnees ! ";
if (ParaGlob::NiveauImpression() >= 2)
dan.Affiche();
Sortie(1);
};
// on vérifie qu'il n'y a qu'un seule numéro d'élément
if (ref.Taille() != 1)
{ cout << "\n *** erreur la variable utilisateur " << dan.Nom_var()
<< " est associee a une reference qui comporte "
<< ref.Taille() << " element(s) alors qu'il ne faut qu'un seul element !"
<< " revoir la mise en donnees ! ";
if (ParaGlob::NiveauImpression() >= 2)
dan.Affiche();
Sortie(1);
};
};
};
// --- cas des grandeurs quelconques aux pti de faces d'élément
{List_io < TypeQuelc_face_a_un_element >::iterator il,ilfin
= list_face_element_type_quelc.end();
List_io < TypeQuelconque >::iterator it = list_quelc_face_element_type_quelc.begin();
// on balaie la liste avec les conteneurs associés
for (il = list_face_element_type_quelc.begin();il != ilfin;il++,it++)
{TypeQuelc_face_a_un_element& dan = *il; // pour simplifier
// récup de la reférence
const string * point_mail = NULL;
if ((*il).Nom_mail_const() != "")
point_mail = &((*il).Nom_mail_const());
const ReferenceNE & ref =
((ReferenceNE &) lesRef.Trouve((*il).Ref_NE(),point_mail));
// on vérifie qu'il s'agit d'une ref d'élément
if (ref.Indic() != 2)
{ cout << "\n *** erreur la variable utilisateur " << dan.Nom_var()
<< " n'est pas associee a une reference d'element' "
<< " revoir la mise en donnees ! ";
if (ParaGlob::NiveauImpression() >= 2)
dan.Affiche();
Sortie(1);
};
// on vérifie qu'il n'y a qu'un seule numéro d'élément
if (ref.Taille() != 1)
{ cout << "\n *** erreur la variable utilisateur " << dan.Nom_var()
<< " est associee a une reference qui comporte "
<< ref.Taille() << " element(s) alors qu'il ne faut qu'un seul element !"
<< " revoir la mise en donnees ! ";
if (ParaGlob::NiveauImpression() >= 2)
dan.Affiche();
Sortie(1);
};
};
};
// --- cas des grandeurs quelconques aux pti d'arêtes d'élément
{List_io < TypeQuelc_arete_a_un_element >::iterator il,ilfin
= list_arete_element_type_quelc.end();
List_io < TypeQuelconque >::iterator it = list_quelc_arete_element_type_quelc.begin();
// on balaie la liste avec les conteneurs associés
for (il = list_arete_element_type_quelc.begin();il != ilfin;il++,it++)
{TypeQuelc_arete_a_un_element& dan = *il; // pour simplifier
// récup de la reférence
const string * point_mail = NULL;
if ((*il).Nom_mail_const() != "")
point_mail = &((*il).Nom_mail_const());
const ReferenceNE & ref =
((ReferenceNE &) lesRef.Trouve((*il).Ref_NE(),point_mail));
// on vérifie qu'il s'agit d'une ref d'élément
if (ref.Indic() != 2)
{ cout << "\n *** erreur la variable utilisateur " << dan.Nom_var()
<< " n'est pas associee a une reference d'un element' "
<< " revoir la mise en donnees ! ";
if (ParaGlob::NiveauImpression() >= 2)
dan.Affiche();
Sortie(1);
};
// on vérifie qu'il n'y a qu'un seule numéro d'élément
if (ref.Taille() != 1)
{ cout << "\n *** erreur la variable utilisateur " << dan.Nom_var()
<< " est associee a une reference qui comporte "
<< ref.Taille() << " element(s) alors qu'il ne faut qu'un seul element !"
<< " revoir la mise en donnees ! ";
if (ParaGlob::NiveauImpression() >= 2)
dan.Affiche();
Sortie(1);
};
};
};
// ----- cas une composante d'une variable globale de type multidimentionnel
// rien à faire, c'est fait à l'appel de la variable globale (cf. ParaGlob)
// retour
return res;
};
// mises à jour de constantes globales définies par l'utilisateur
// permet de changer les valeurs, lors d'une suite .info par exemple
void VariablesExporter::MiseAjourConstantesUtilisateur(UtilLecture& lec)
{ if (strstr(lec.tablcar,"Mise_A_jour_Constantes_utilisateurs_")!=NULL)
{ lec.NouvelleDonnee(); // on se positionne sur le premier enreg
// on lit tant que l'on ne rencontre pas la ligne contenant
// "fin_Mise_A_jour_Constantes_utilisateurs_"
while (strstr(lec.tablcar,"fin_Mise_A_jour_Constantes_utilisateurs_")==0)
{// lecture d'un mot clé
string nom;
*(lec.entree) >> nom;
if ((lec.entree)->rdstate() == 0)
{} // lecture normale
#ifdef ENLINUX
else if ((lec.entree)->fail())
// on a atteind la fin de la ligne et on appelle un nouvel enregistrement
{ lec.NouvelleDonnee(); // lecture d'un nouvelle enregistrement
*(lec.entree) >> nom;
}
#else
else if ((lec.entree)->eof())
// la lecture est bonne mais on a atteind la fin de la ligne
{ if(nom != "fin_Mise_A_jour_Constantes_utilisateurs_")
{lec.NouvelleDonnee(); *(lec.entree) >> nom;};
}
#endif
else // cas d'une erreur de lecture
{ cout << "\n erreur de lecture inconnue ";
lec.MessageBuffer("** erreur en lecture pour la mise a jour des constantes utilisateur **");
throw (UtilLecture::ErrNouvelleDonnee(-1));
Sortie(1);
};
// en fonction du type de donnée on modifie
if (nom == "double_")
{ string nom_constante; double val;
*(lec.entree) >> nom_constante >> val;
// on récupère le pointeur correspondant à la grandeur
const void* pointe = (ParaGlob::param->GrandeurGlobal(nom_constante));
if (pointe != NULL)
{TypeQuelconque* gr_quelc = (TypeQuelconque*) (pointe);
if ((gr_quelc->Grandeur_pointee()->Type_structure_grandeurAssocie()==TYPE_SIMPLE)
&& (gr_quelc->Grandeur_pointee()->Type_enumGrandeurParticuliere()==PARTICULIER_SCALAIRE_DOUBLE)
)
{Grandeur_scalaire_double& gr
= *((Grandeur_scalaire_double*) gr_quelc->Grandeur_pointee()); // pour simplifier
// on met à jour la grandeur
*(gr.ConteneurDouble()) = val;
}
else // sinon pb
{ cout << "\n *** pb dans dans la mise a jour de la constante globale "<< nom_constante
<< " le conteneur lu " << nom << " n'est pas d'un type correct !! "
<< "\n Projet::MiseAjourConstantesUtilisateur(..."
<> nom_constante >> val;
//
// // on récupère le pointeur correspondant à la grandeur
// const void* pointe = (ParaGlob::param->GrandeurGlobal(nom_constante));
// if (pointe != NULL)
// {TypeQuelconque* gr_quelc = (TypeQuelconque*) (pointe);
// if ((gr_quelc->Grandeur_pointee()->Type_structure_grandeurAssocie()==TYPE_SIMPLE)
// && (gr_quelc->Grandeur_pointee()->Type_enumGrandeurParticuliere()==PARTICULIER_SCALAIRE_ENTIER)
// )
// {Grandeur_scalaire_entier& gr
// = *((Grandeur_scalaire_entier*) gr_quelc->Grandeur_pointee()); // pour simplifier
// // on met à jour la grandeur
// *(gr.ConteneurEntier()) = val;
// }
// else // sinon pb
// { cout << "\n *** pb dans dans la mise a jour de la constante globale "<< nom_constante
// << " le conteneur lu " << nom << " n'est pas d'un type correct !! "
// << "\n Projet::MiseAjourConstantesUtilisateur(..."
// <3)
cout << "\n Projet::MiseAjourConstantesUtilisateur(... " << endl ;
throw (UtilLecture::ErrNouvelleDonnee(-1));
Sortie(1);
};
}; //-- fin du while
lec.NouvelleDonnee(); // on prépare la nouvelle lecture
};
};
// renseigne les variables définies par l'utilisateur
// via les valeurs calculées par Herezh
void VariablesExporter::RenseigneVarUtilisateur(LesMaillages& lesMail,const LesReferences& lesRef)
{
// --- cas des ddl aux noeuds
{List_io < Ddl_a_un_noeud >::iterator il,ilfin = list_noeud_type_ddl.end();
for (il = list_noeud_type_ddl.begin();il != ilfin;il++)
{Ddl_a_un_noeud& dan = *il; // pour simplifier
// récup du conteneur global
const void* pointe = (ParaGlob::param->GrandeurGlobal(dan.Nom_var()));
TypeQuelconque* gr_quelc = (TypeQuelconque*) (pointe);
Grandeur_scalaire_double& gr
= *((Grandeur_scalaire_double*) gr_quelc->Grandeur_pointee()); // pour simplifier
// récup de la valeur demandée au niveau des noeuds
int n_mail = 1; // init par défaut
if ((*il).Nom_mail() != "")
n_mail = lesMail.NumMaillage((*il).Nom_mail());
// récup de la reférence
const string * point_mail = NULL;
if ((*il).Nom_mail_const() != "")
point_mail = &((*il).Nom_mail_const());
const ReferenceNE & ref =
((ReferenceNE &) lesRef.Trouve((*il).Ref_Num_NE(),point_mail));
int ne = ref.Numero(1); // le num du noeud: uniquement le premier
Noeud& noe = lesMail.Noeud_LesMaille(n_mail,ne);
if (!noe.Existe_ici((dan.Enu()).Enum()))
{ cout << "\n *** erreur la variable utilisateur " << dan.Nom_var()
<< " ne peut pas etre renseignee car le ddl "
<< dan.Enu().Nom_plein() << " n'est pas disponible !!! ";
if (ParaGlob::NiveauImpression() >= 2)
dan.Affiche();
Sortie(1);
};
switch (dan.Temps())
{ case TEMPS_0 :
(*(gr.ConteneurDouble())) = noe.Valeur_0((dan.Enu()).Enum());break;
case TEMPS_t :
(*(gr.ConteneurDouble())) = noe.Valeur_t((dan.Enu()).Enum());break;
case TEMPS_tdt :
(*(gr.ConteneurDouble())) = noe.Valeur_tdt((dan.Enu()).Enum());break;
};
};
};
// --- cas des ddl étendus aux noeuds
{List_io < Ddl_etendu_a_un_noeud >::iterator il,ilfin = list_noeud_type_ddlEtendu.end();
for (il = list_noeud_type_ddlEtendu.begin();il != ilfin;il++)
{Ddl_etendu_a_un_noeud& dan = *il; // pour simplifier
// récup du conteneur global
const void* pointe = (ParaGlob::param->GrandeurGlobal(dan.Nom_var()));
TypeQuelconque* gr_quelc = (TypeQuelconque*) (pointe);
Grandeur_scalaire_double& gr
= *((Grandeur_scalaire_double*) gr_quelc->Grandeur_pointee()); // pour simplifier
// récup de la valeur demandée au niveau des noeuds
int n_mail = 1; // init par défaut
if ((*il).Nom_mail() != "")
n_mail = lesMail.NumMaillage((*il).Nom_mail());
// récup de la reférence
const string * point_mail = NULL;
if ((*il).Nom_mail_const() != "")
point_mail = &((*il).Nom_mail_const());
const ReferenceNE & ref =
((ReferenceNE &) lesRef.Trouve((*il).Ref_NE(),point_mail));
int ne = ref.Numero(1); // le num du noeud: uniquement le premier
Noeud& noe = lesMail.Noeud_LesMaille(n_mail,ne);
// Noeud& noe = lesMail.Noeud_LesMaille(n_mail,dan.Num_NE());
if (!noe.Existe_ici_ddlEtendu((dan.Enu())))
{ cout << "\n *** erreur la variable utilisateur " << dan.Nom_var()
<< " ne peut pas etre renseignee car le ddl etendu "
<< dan.Enu().Nom_plein() << " n'est pas disponible !!! ";
if (ParaGlob::NiveauImpression() >= 2)
dan.Affiche();
Sortie(1);
};
(*(gr.ConteneurDouble())) = noe.DdlEtendue(dan.Enu()).ConstValeur();
};
};
// --- cas des grandeurs quelconques aux noeuds
{List_io < Quelconque_a_un_noeud >::iterator il,ilfin = list_noeud_type_quelconque.end();
for (il = list_noeud_type_quelconque.begin();il != ilfin;il++)
{Quelconque_a_un_noeud& dan = *il; // pour simplifier
// récup du conteneur global
const void* pointe = (ParaGlob::param->GrandeurGlobal(dan.Nom_var()));
TypeQuelconque* gr_quelc = (TypeQuelconque*) (pointe);
Grandeur_scalaire_double& gr
= *((Grandeur_scalaire_double*) gr_quelc->Grandeur_pointee()); // pour simplifier
// récup de la valeur demandée au niveau des noeuds
int n_mail = 1; // init par défaut
if ((*il).Nom_mail() != "")
n_mail = lesMail.NumMaillage((*il).Nom_mail());
// récup de la reférence
const string * point_mail = NULL;
if ((*il).Nom_mail_const() != "")
point_mail = &((*il).Nom_mail_const());
const ReferenceNE & ref =
((ReferenceNE &) lesRef.Trouve((*il).Ref_NE(),point_mail));
int ne = ref.Numero(1); // le num du noeud: uniquement le premier
Noeud& noe = lesMail.Noeud_LesMaille(n_mail,ne);
// Noeud& noe = lesMail.Noeud_LesMaille(n_mail,dan.Num_NE());
// le conteneur au noeud
const TypeQuelconque_enum_etendu& type_quel = dan.Quelc_const(); // la grandeur constante
if( noe.Existe_ici(type_quel))
{const TypeQuelconque& grand_quelconque_noe = noe.Grandeur_quelconque(dan.Quelc_const());
// l'affectation
(*(gr.ConteneurDouble())) = grand_quelconque_noe.Const_Grandeur_pointee()->GrandeurNumOrdre(dan.Num_ordre());
}
else
{ cout << "\n *** erreur la variable utilisateur " << dan.Nom_var()
<< " ne peut pas etre renseignee car la grandeur "
<< type_quel.NomPlein() << " n'est pas disponible !!! ";
if (ParaGlob::NiveauImpression() >= 2)
dan.Affiche();
Sortie(1);
};
};
};
// --- cas des ddl aux pti d'élément
{List_io < Ddl_a_un_element >::iterator il,ilfin = list_element_type_ddl.end();
for (il = list_element_type_ddl.begin();il != ilfin;il++)
{Ddl_a_un_element& dan = *il; // pour simplifier
// récup du conteneur global
const void* pointe = (ParaGlob::param->GrandeurGlobal(dan.Nom_var()));
TypeQuelconque* gr_quelc = (TypeQuelconque*) (pointe);
Grandeur_scalaire_double& gr
= *((Grandeur_scalaire_double*) gr_quelc->Grandeur_pointee()); // pour simplifier
// récup de la valeur demandée au niveau du pti d'élément
int n_mail = 1; // init par défaut
if ((*il).Nom_mail() != "")
n_mail = lesMail.NumMaillage((*il).Nom_mail());
// récup de la reférence
const string * point_mail = NULL;
if ((*il).Nom_mail_const() != "")
point_mail = &((*il).Nom_mail_const());
const ReferenceNE & ref =
((ReferenceNE &) lesRef.Trouve((*il).Ref_NE(),point_mail));
int ne = ref.Numero(1); // le num du noeud: uniquement le premier
Element& ele = lesMail.Element_LesMaille(n_mail,ne);
List_io inter; inter.push_back(dan.Enu());
Tableau tab= ele.Valeur_a_diff_temps(dan.Absolue_const(),dan.Temps_const(),inter,dan.NBpti_const());
(*(gr.ConteneurDouble())) = tab(1);
};
};
// --- cas des grandeurs particulières aux pti d'élément
{List_io < TypeParticulier_a_un_element >::iterator il,ilfin
= list_element_type_particulier.end();
List_io < TypeQuelconque >::iterator it = list_quelc_element_type_particulier.begin();
// on balaie la liste avec les conteneurs associés
for (il = list_element_type_particulier.begin();il != ilfin;il++,it++)
{TypeParticulier_a_un_element& dan = *il; // pour simplifier
// récup du conteneur global
const void* pointe = (ParaGlob::param->GrandeurGlobal(dan.Nom_var()));
TypeQuelconque* gr_quelc = (TypeQuelconque*) (pointe);
Grandeur_scalaire_double& gr
= *((Grandeur_scalaire_double*) gr_quelc->Grandeur_pointee()); // pour simplifier
// récup de la valeur demandée au niveau du pti d'élément
int n_mail = 1; // init par défaut
if ((*il).Nom_mail() != "")
n_mail = lesMail.NumMaillage((*il).Nom_mail());
// récup de la reférence
const string * point_mail = NULL;
if ((*il).Nom_mail_const() != "")
point_mail = &((*il).Nom_mail_const());
const ReferenceNE & ref =
((ReferenceNE &) lesRef.Trouve((*il).Ref_NE(),point_mail));
int ne = ref.Numero(1); // le num du noeud: uniquement le premier
Element& ele = lesMail.Element_LesMaille(n_mail,ne);
List_io inter; inter.push_back((*it)); // il y a une recopie
ele.Grandeur_particuliere(dan.Absolue_const(),inter,dan.NBpti_const());
// le résultat est dans inter, pas dans (*it)
// affectation
(*(gr.ConteneurDouble())) = (*inter.begin()).GrandeurNumOrdre(dan.Num_ordre());
};
};
// --- cas des grandeurs évoluées aux pti d'élément
{List_io < TypeEvoluee_a_un_element >::iterator il,ilfin
= list_element_type_evoluee.end();
List_io < TypeQuelconque >::iterator it = list_quelc_element_type_evoluee.begin();
// on balaie la liste avec les conteneurs associés
for (il = list_element_type_evoluee.begin();il != ilfin;il++,it++)
{TypeEvoluee_a_un_element& dan = *il; // pour simplifier
// récup du conteneur global
const void* pointe = (ParaGlob::param->GrandeurGlobal(dan.Nom_var()));
TypeQuelconque* gr_quelc = (TypeQuelconque*) (pointe);
Grandeur_scalaire_double& gr
= *((Grandeur_scalaire_double*) gr_quelc->Grandeur_pointee()); // pour simplifier
// récup de la valeur demandée au niveau du pti d'élément
int n_mail = 1; // init par défaut
if ((*il).Nom_mail() != "")
n_mail = lesMail.NumMaillage((*il).Nom_mail());
// récup de la reférence
const string * point_mail = NULL;
if ((*il).Nom_mail_const() != "")
point_mail = &((*il).Nom_mail_const());
const ReferenceNE & ref =
((ReferenceNE &) lesRef.Trouve((*il).Ref_NE(),point_mail));
int ne = ref.Numero(1); // le num du noeud: uniquement le premier
Element& ele = lesMail.Element_LesMaille(n_mail,ne);
List_io inter; inter.push_back((*it)); // il y a une recopie
ele.Grandeur_particuliere(dan.Absolue_const(),inter,dan.NBpti_const());
// le résultat est dans inter, pas dans (*it)
// affectation
(*(gr.ConteneurDouble())) = (*inter.begin()).GrandeurNumOrdre(dan.Num_ordre());
};
};
// --- cas des grandeurs quelconques aux pti de faces d'élément
{List_io < TypeQuelc_face_a_un_element >::iterator il,ilfin
= list_face_element_type_quelc.end();
List_io < TypeQuelconque >::iterator it = list_quelc_face_element_type_quelc.begin();
// on balaie la liste avec les conteneurs associés
for (il = list_face_element_type_quelc.begin();il != ilfin;il++,it++)
{TypeQuelc_face_a_un_element& dan = *il; // pour simplifier
// récup du conteneur global
const void* pointe = (ParaGlob::param->GrandeurGlobal(dan.Nom_var()));
TypeQuelconque* gr_quelc = (TypeQuelconque*) (pointe);
Grandeur_scalaire_double& gr
= *((Grandeur_scalaire_double*) gr_quelc->Grandeur_pointee()); // pour simplifier
// récup de la valeur demandée au niveau du pti d'élément
int n_mail = 1; // init par défaut
if ((*il).Nom_mail() != "")
n_mail = lesMail.NumMaillage((*il).Nom_mail());
// récup de la reférence
const string * point_mail = NULL;
if ((*il).Nom_mail_const() != "")
point_mail = &((*il).Nom_mail_const());
const ReferenceNE & ref =
((ReferenceNE &) lesRef.Trouve((*il).Ref_NE(),point_mail));
int ne = ref.Numero(1); // le num du noeud: uniquement le premier
Element& ele = lesMail.Element_LesMaille(n_mail,ne);
List_io inter; inter.push_back((*it)); // il y a une recopie
ele.Grandeur_particuliere_face(dan.Absolue_const(),inter,dan.Num_FA_const(),dan.NBpti_const());
// le résultat est dans inter, pas dans (*it)
// affectation
(*(gr.ConteneurDouble())) = (*inter.begin()).GrandeurNumOrdre(dan.Num_ordre());
};
};
// --- cas des grandeurs quelconques aux pti d'arêtes d'élément
{List_io < TypeQuelc_arete_a_un_element >::iterator il,ilfin
= list_arete_element_type_quelc.end();
List_io < TypeQuelconque >::iterator it = list_quelc_arete_element_type_quelc.begin();
// on balaie la liste avec les conteneurs associés
for (il = list_arete_element_type_quelc.begin();il != ilfin;il++,it++)
{TypeQuelc_arete_a_un_element& dan = *il; // pour simplifier
// récup du conteneur global
const void* pointe = (ParaGlob::param->GrandeurGlobal(dan.Nom_var()));
TypeQuelconque* gr_quelc = (TypeQuelconque*) (pointe);
Grandeur_scalaire_double& gr
= *((Grandeur_scalaire_double*) gr_quelc->Grandeur_pointee()); // pour simplifier
// récup de la valeur demandée au niveau du pti d'élément
int n_mail = 1; // init par défaut
if ((*il).Nom_mail() != "")
n_mail = lesMail.NumMaillage((*il).Nom_mail());
// récup de la reférence
const string * point_mail = NULL;
if ((*il).Nom_mail_const() != "")
point_mail = &((*il).Nom_mail_const());
const ReferenceNE & ref =
((ReferenceNE &) lesRef.Trouve((*il).Ref_NE(),point_mail));
int ne = ref.Numero(1); // le num du noeud: uniquement le premier
Element& ele = lesMail.Element_LesMaille(n_mail,ne);
List_io inter; inter.push_back((*it)); // il y a une recopie
ele.Grandeur_particuliere_arete(dan.Absolue_const(),inter,dan.Num_FA_const(),dan.NBpti_const());
// le résultat est dans inter, pas dans (*it)
// affectation
(*(gr.ConteneurDouble())) = (*inter.begin()).GrandeurNumOrdre(dan.Num_ordre());
};
};
// ----- cas une composante d'une variable globale de type multidimentionnel
// rien à faire, c'est fait à l'appel de la variable globale (cf. ParaGlob)
};
//----- lecture écriture de base info -----
// lecture base info
// = 1 : on récupère tout
// = 2 : on récupère uniquement les données variables (supposées comme telles)
void VariablesExporter::Lecture_base_info(ifstream& entr,const int cas)
{switch (cas)
{ case 1 : // ------- on récupère tout -------------------------
{
break;
}
case 2 : // ----------- lecture uniquement de se qui varie --------------------
{
break;
}
default :
{ cout << "\nErreur : valeur incorrecte du type de lecture !\n";
cout << "VariablesExporter::Lecture_base_info(ofstream& sort,int cas)"
<< " cas= " << cas << endl;
Sortie(1);
};
};
};
// écriture base info
// = 1 : on sauvegarde tout
// = 2 : on sauvegarde uniquement les données variables (supposées comme telles)
void VariablesExporter::Ecriture_base_info(ofstream& sort,const int cas)
{switch (cas)
{ case 1 : // ------- on sauvegarde tout -------------------------
{
// -- cas des Constantes utilisateurs ---
sort << "\n ===constantes_utilisateur==== ";
{ List_io < Ddl_a_un_noeud >::const_iterator it, itfin = list_noeud_type_ddl.end();
List_io < string >::const_iterator il = li_nom.begin();
for (it = list_noeud_type_ddl.begin();it != itfin; it++,il++)
sort << "\n double_ " << (*il) ;
};
// -- cas des variables utilisateurs ---
sort << "\n ===variables_utilisateur==== ";
{ List_io < Ddl_a_un_noeud >::const_iterator it, itfin = list_noeud_type_ddl.end();
for (it = list_noeud_type_ddl.begin();it != itfin; it++)
sort << (*it);
};
// -- cas des ddl étendu aux noeuds ---
{ List_io < Ddl_etendu_a_un_noeud >::const_iterator it, itfin = list_noeud_type_ddlEtendu.end();
for (it = list_noeud_type_ddlEtendu.begin();it != itfin; it++)
sort << (*it);
};
// -- cas des grandeurs quelconques aux noeuds ---
{ List_io < Quelconque_a_un_noeud >::const_iterator it, itfin = list_noeud_type_quelconque.end();
for (it = list_noeud_type_quelconque.begin();it != itfin; it++)
sort << (*it);
};
// -- cas des ddl aux pti d'éléments ---
{ List_io < Ddl_a_un_element >::const_iterator it, itfin = list_element_type_ddl.end();
for (it = list_element_type_ddl.begin();it != itfin; it++)
sort << (*it);
};
// -- cas des grandeurs particulières aux pti d'éléments ---
{ List_io < TypeParticulier_a_un_element >::const_iterator it, itfin = list_element_type_particulier.end();
for (it = list_element_type_particulier.begin();it != itfin; it++)
sort << (*it);
};
// -- cas des grandeurs évoluées aux pti d'éléments ---
{ List_io < TypeEvoluee_a_un_element >::const_iterator it, itfin = list_element_type_evoluee.end();
for (it = list_element_type_evoluee.begin();it != itfin; it++)
sort << (*it);
};
// -- cas des grandeurs quelconques aux pti de faces d'éléments ---
{ List_io < TypeQuelc_face_a_un_element >::const_iterator it, itfin = list_face_element_type_quelc.end();
for (it = list_face_element_type_quelc.begin();it != itfin; it++)
sort << (*it);
};
// -- cas des grandeurs quelconques aux pti d'arête d'éléments ---
{ List_io < TypeQuelc_arete_a_un_element >::const_iterator it, itfin = list_arete_element_type_quelc.end();
for (it = list_arete_element_type_quelc.begin();it != itfin; it++)
sort << (*it);
};
// -- cas d'une composante d'une variable globale de type multidimentionnel ---
{ List_io < TypeQuelc_Une_composante_Grandeur_globale >::const_iterator it, itfin = list_var_glob_sur_grandeur_globale.end();
for (it = list_var_glob_sur_grandeur_globale.begin();it != itfin; it++)
sort << (*it);
};
break;
}
case 2 : // ----------- sauvegarde uniquement de se qui varie --------------------
{
break;
}
default :
{ cout << "\nErreur : valeur incorrecte du type de sauvegarde !\n";
cout << "VariablesExporter::Ecriture_base_info(ofstream& sort,int cas)"
<< " cas= " << cas << endl;
Sortie(1);
};
};
};
// sortie du schemaXML: en fonction de enu
void VariablesExporter::SchemaXML_VariablesExporters(UtilLecture * entreePrinc,const Enum_IO_XML enu)
{
// switch (enu)
// {case XML_TYPE_GLOBAUX:
// { // cas des classes de base
// DeuxEntiers toto;
// toto.SchemaXML_DeuxEntiers(sort,enu);
// break;
// }
// case XML_IO_POINT_INFO:
// {// cas de def de LesMaillages
// sort << "\n "
// << "\n "
// << "\n "
// << "\n une suite de maillages "
// << "\n "
// << "\n "
// << "\n "
// << "\n "
// << "\n "
// << "\n ";
// // def de Maillage
//// SchemaXML_Maillage(sort,niveau);
// break;
// }
// };
};
// -- def de constantes utilisateur pour une sortie sur un fichier de commande
void VariablesExporter::Info_commande_ConstantesUtilisateur(UtilLecture * entreePrinc)
{ cout << "\n definition de constante(s) utilisateur (defaut 0 c-a-d non) : 1 (c-a-d oui) ? ";
string rep;bool choix_valide=false;
while (!choix_valide)
{ rep = "_";
// procédure de lecture avec prise en charge d'un retour chariot
rep = lect_return_defaut(true,"0");
if (rep.size()==0)
{rep = "0";
cout << "--> valeur: 0 ";
};
if (rep == "1") { choix_valide=true;}
else if (rep == "0") {choix_valide=true;}
else if (rep == "f") {choix_valide=true;}
else if (rep == "fin_prog") Sortie(1);
else { cout << "\n Erreur on attendait 0 ou 1 ou f !!, redonnez une bonne valeur"
<< "\n ou taper fin_prog pour arreter le programme ";
choix_valide=false;
}
};
// écriture
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"
<< endl;
// maintenant on regarde s'il faut des constantes utilisateurs
try
{if (rep == "1")
{sort << "\n#------------------------------------------------------------------"
<< "\n Constantes_utilisateurs_ ";
while (choix_valide)
{ rep = "_";string nom;double val;
cout << "\n nom de la variable ? (ou f ou 0 (defaut)) ";
nom = lect_return_defaut(false,"f");
if ((nom != "f")&&(nom != "0"))
{ cout << "\n valeur ? ";val=lect_double();
cout << "\n constante lue : "<< "C__"+nom << " "<< val << flush;
choix_valide = true;
sort << "\n double_ " << "C__"+nom << " "<< val << flush;
}
else {choix_valide = false;};
};
sort << "\n fin_Constantes_utilisateurs_ \n" << flush;
};
}
catch (ErrSortieFinale)
// cas d'une direction voulue vers la sortie
// on relance l'interuption pour le niveau supérieur
{ ErrSortieFinale toto;
throw (toto);
}
catch (...)
{cout << "\n *** erreur en definition des constantes utilisateurs ! stop " << flush;
Sortie(1);
};
};
// -- def de variables utilisateur pour une sortie sur un fichier de commande
void VariablesExporter::Info_commande_VariablesUtilisateur(UtilLecture * entreePrinc)
{ cout << "\n definition de variable(s) utilisateur (defaut 0 c-a-d non) : 1 (c-a-d oui) ? ";
string rep;bool choix_valide=false;
while (!choix_valide)
{ rep = "_";
// procédure de lecture avec prise en charge d'un retour chariot
rep = lect_return_defaut(true,"0");
if (rep.size()==0)
{rep = "0";
cout << "--> valeur: 0 ";
};
if (rep == "1") { choix_valide=true;}
else if (rep == "0") {choix_valide=true;}
else if (rep == "f") {choix_valide=true;}
else if (rep == "fin_prog") Sortie(1);
else { cout << "\n Erreur on attendait 0 ou 1 ou f !!, redonnez une bonne valeur"
<< "\n ou taper fin_prog pour arreter le programme ";
choix_valide=false;
}
};
// écriture
ofstream & sort = *(entreePrinc->Commande_pointInfo()); // pour simplifier
// maintenant on regarde s'il faut des variables utilisateurs
try
{choix_valide=false;
if (rep == "1")
{sort << "\n#------------------------------------------------------------------"
<< "\n Variables_utilisateurs_ ";
while (!choix_valide)
{ rep = "_";string nom;
cout << "\n ddl aux noeuds -> rep : noe ?"
<< "\n ddl etendu aux noeuds -> rep : net ?"
<< "\n grandeur particuliere aux noeuds -> rep : nop ?"
<< "\n grandeurs generique aux elements -> rep : ele "
<< "\n grandeurs particulieres aux elements -> rep : elp "
<< "\n grandeurs tensorielles aux elements -> rep : elt "
<< "\n grandeurs aux faces d'elements -> rep : elF "
<< "\n grandeurs aux aretes d'elements -> rep : elA "
<< "\n une composante de grandeur globale -> rep : cgl "
<< "\n pour arreter les questions (defaut) -> rep : fin (ou f) ";
if (ParaGlob::Francais())
{cout << "\n reponse ? ";}else {cout << "\n answer ? ";}
rep = lect_return_defaut(false,"f");
cout << " rep lue: "<< rep << " ";
if (rep == "noe")
{ // cas d'un ddl à un noeud
Ddl_a_un_noeud dan;
cout << "\n nom du maillage (defaut aucun) ? ";
dan.Nom_mail() = lect_return_defaut(false,"aucun");
cout << " val lue: "<< dan.Nom_mail();
if (dan.Nom_mail() == "aucun")
{dan.Nom_mail() = "";}
cout << "\n ddl (defaut X1) ? ";
dan.Enu() = lect_return_defaut(false,"X1");
cout << " ddl lu: "<< dan.Enu();
cout << "\n reference du noeud (defaut N_1) ? ";
dan.Ref_Num_NE() = lect_return_defaut(false,"N_1");
cout << " val lue: "<< dan.Ref_Num_NE();
dan.Nom_var() = Lect_interactive_nom_var();
cout << "\n le temps ou est evalue la variable (defaut: TEMPS_0) ? ";
dan.Temps() = Id_nom_dure(lect_return_defaut(false,"TEMPS_0"));
cout << " temps lu "<< Nom_dure(dan.Temps());
// on a toutes les infos, on peut enregistrer
sort << dan << flush;
list_noeud_type_ddl.push_back(dan);
}
else if (rep == "net")
{ // cas d'un ddl étendu à un noeud
Ddl_etendu_a_un_noeud dan;
cout << "\n nom du maillage (defaut aucun) ? ";
dan.Nom_mail() = lect_return_defaut(false,"aucun");
cout << " val lue: "<< dan.Nom_mail();
if (dan.Nom_mail() == "aucun")
{dan.Nom_mail() = "";}
cout << "\n ddl etendu (defaut Masse_diago_noeud) ? ";
// string nom_ddl(lect_return_defaut(false,"Masse_diago_noeud"));
dan.Enu() = lect_return_defaut(false,"Masse_diago_noeud");
cout << " ddl etendu lu: "<< dan.Enu();
cout << "\n reference du noeud (defaut N_1) ? ";
dan.Ref_NE() = lect_return_defaut(false,"N_1");
cout << " val lue: "<< dan.Ref_NE();
dan.Nom_var() = Lect_interactive_nom_var();
// on a toutes les infos, on peut enregistrer
sort << dan << flush;
list_noeud_type_ddlEtendu.push_back(dan);
}
else if (rep == "nop")
{ Quelconque_a_un_noeud dan;
cout << "\n nom du maillage (defaut aucun) ? ";
dan.Nom_mail() = lect_return_defaut(false,"aucun");
cout << " val lue: "<< dan.Nom_mail();
if (dan.Nom_mail() == "aucun")
{dan.Nom_mail() = "";}
cout << "\n grandeur (defaut POSITION_GEOMETRIQUE) ? ";
dan.Quelc() = lect_return_defaut(false,"POSITION_GEOMETRIQUE");
cout << " lu: "<< dan.Quelc().NomPlein();
cout << "\n reference du noeud (defaut N_1) ? ";
dan.Ref_NE() = lect_return_defaut(false,"N_1");
cout << " val lue: "<< dan.Ref_NE();
dan.Nom_var() = Lect_interactive_nom_var();
cout << "\n le num d'ordre (ex: num de la composante, defaut 1) ?";
dan.Num_ordre() = ChangeEntier(lect_return_defaut(false,"1"));
cout << " val lue: "<> nom;
if ((lec.entree)->rdstate() == 0)
{} // lecture normale
#ifdef ENLINUX
else if ((lec.entree)->fail())
// on a atteind la fin de la ligne et on appelle un nouvel enregistrement
{ lec.NouvelleDonnee(); // lecture d'un nouvelle enregistrement
*(lec.entree) >> nom;
}
#else
else if ((lec.entree)->eof())
// la lecture est bonne mais on a atteind la fin de la ligne
{ if(nom != "fin_Constantes_utilisateurs_")
{lec.NouvelleDonnee(); *(lec.entree) >> nom;};
}
#endif
else // cas d'une erreur de lecture
{ cout << "\n erreur de lecture inconnue ";
lec.MessageBuffer("** erreur en lecture des constantes utilisateur **");
throw (UtilLecture::ErrNouvelleDonnee(-1));
Sortie(1);
};
// en fonction du type de donnée on lit, crée et stock
if (nom == "double_")
{ string nom_constante; double val=0.;
*(lec.entree) >> nom_constante >> val;
// il faut que les 3 premiers caractères de nom_constante soit un C__
if (!((nom_constante[0]== 'C')&&(nom_constante[1]== '_')&&(nom_constante[2]== '_')))
{ cout << "\n erreur de syntaxe en lecture d'une constante de type double, les 3 premieres lettres "
<< " devraientt etre un 'C__' et on a lu: "<> nom_constante >> val;
// // il faut que le premier caractère de nom_constante soit un $
// if (nom_constante[0]!= '$')
// { cout << "\n erreur de syntaxe en lecture d'une constante de type int, la premiere lettre "
// << " devrait etre un '$' et on a lu: "<3)
cout << "\n Projet::LecConstantesUtilisateur(... " << endl ;
throw (UtilLecture::ErrNouvelleDonnee(-1));
Sortie(1);
};
}; //-- fin du while
lec.NouvelleDonnee(); // on prépare la nouvelle lecture
};
};
// lecture éventuelle des variables globales définies par l'utilisateur
void VariablesExporter::LecVariablesUtilisateur(UtilLecture& lec)
{ // on initialise les conteneurs
// -> noeuds
list_noeud_type_ddl.clear();
list_noeud_type_ddlEtendu.clear();
list_noeud_type_quelconque.clear();
// -> éléments
list_element_type_ddl.clear();
list_element_type_particulier.clear();
list_element_type_evoluee.clear();
// -> face d'éléments
list_face_element_type_quelc.clear();
// -> arête d'éléments
list_arete_element_type_quelc.clear();
// on regarde s'il y a des variables à lire
if (strstr(lec.tablcar,"Variables_utilisateurs_")!=NULL)
{ lec.NouvelleDonnee(); // on se positionne sur le premier enreg
// on lit tant que l'on ne rencontre pas la ligne contenant "fin_Variables_utilisateurs_"
while (strstr(lec.tablcar,"fin_Variables_utilisateurs_")==0)
{// choix en fonction du type de variable
string nom;
if ((lec.entree)->rdstate() == 0)
{} // lecture normale
#ifdef ENLINUX
else if ((lec.entree)->fail())
// on a atteind la fin de la ligne et on appelle un nouvel enregistrement
{ lec.NouvelleDonnee(); // lecture d'un nouvelle enregistrement
*(lec.entree) >> nom;
}
#else
else if ((lec.entree)->eof())
// la lecture est bonne mais on a atteind la fin de la ligne
{ if(nom != "fin_Variables_utilisateurs_")
{lec.NouvelleDonnee(); };
}
#endif
else // cas d'une erreur de lecture
{ cout << "\n erreur de lecture inconnue ";
lec.MessageBuffer("** erreur en lecture des constantes utilisateur **");
throw (UtilLecture::ErrNouvelleDonnee(-1));
Sortie(1);
};
// en fonction du type de donnée on lit, crée et stock
if (strstr(lec.tablcar,"Ddl_noeud_") != 0)
{ Ddl_a_un_noeud dan;
*(lec.entree) >> dan;
// on vérifie que la variable lue n'existe pas déjà
VariablesExporter::VerifNomVariable(dan.Nom_var(),true);
// stockage
list_noeud_type_ddl.push_back(dan);
}
else if (strstr(lec.tablcar,"Ddl_etendu_a_un_noeud_") != 0)
{ Ddl_etendu_a_un_noeud dan;
*(lec.entree) >> dan;
// on vérifie que la variable lue n'existe pas déjà
VariablesExporter::VerifNomVariable(dan.Nom_var(),true);
// stockage
list_noeud_type_ddlEtendu.push_back(dan);
}
else if (strstr(lec.tablcar,"Quelconque_a_un_noeud_") != 0)
{ Quelconque_a_un_noeud dan;
*(lec.entree) >> dan;
// on vérifie que la variable lue n'existe pas déjà
VariablesExporter::VerifNomVariable(dan.Nom_var(),true);
// stockage
list_noeud_type_quelconque.push_back(dan);
}
else if (strstr(lec.tablcar,"Ddl_a_un_element_") != 0)
{ Ddl_a_un_element dan;
*(lec.entree) >> dan;
// on vérifie que la variable lue n'existe pas déjà
VariablesExporter::VerifNomVariable(dan.Nom_var(),true);
// stockage
list_element_type_ddl.push_back(dan);
}
else if (strstr(lec.tablcar,"Particulier_a_un_element_") != 0)
{ TypeParticulier_a_un_element dan;
*(lec.entree) >> dan;
// on vérifie que la variable lue n'existe pas déjà
VariablesExporter::VerifNomVariable(dan.Nom_var(),true);
// stockage
list_element_type_particulier.push_back(dan);
}
else if (strstr(lec.tablcar,"Evoluee_a_un_element_") != 0)
{ TypeEvoluee_a_un_element dan;
*(lec.entree) >> dan;
// on vérifie que la variable lue n'existe pas déjà
VariablesExporter::VerifNomVariable(dan.Nom_var(),true);
// stockage
list_element_type_evoluee.push_back(dan);
}
else if (strstr(lec.tablcar,"Quelconque_face_element_") != 0)
{ TypeQuelc_face_a_un_element dan;
*(lec.entree) >> dan;
// on vérifie que la variable lue n'existe pas déjà
VariablesExporter::VerifNomVariable(dan.Nom_var(),true);
// stockage
list_face_element_type_quelc.push_back(dan);
}
else if (strstr(lec.tablcar,"Quelconque_arete_element_") != 0)
{ TypeQuelc_arete_a_un_element dan;
*(lec.entree) >> dan;
// on vérifie que la variable lue n'existe pas déjà
VariablesExporter::VerifNomVariable(dan.Nom_var(),true);
// stockage
list_arete_element_type_quelc.push_back(dan);
}
else if (strstr(lec.tablcar,"Une_composante_Grandeur_globale_") != 0)
{ TypeQuelc_Une_composante_Grandeur_globale dan;
*(lec.entree) >> dan;
// on vérifie que la variable lue n'existe pas déjà
VariablesExporter::VerifNomVariable(dan.Nom_var(),true);
// stockage
list_var_glob_sur_grandeur_globale.push_back(dan);
}
else if( strstr(lec.tablcar,"fin_Variables_utilisateurs_")
&& strstr(lec.tablcar,"Quelconque_arete_element_")
&& strstr(lec.tablcar,"Quelconque_face_element_")
&& strstr(lec.tablcar,"Evoluee_a_un_element_")
&& strstr(lec.tablcar,"Particulier_a_un_element_")
&& strstr(lec.tablcar,"Ddl_a_un_element_")
&& strstr(lec.tablcar,"Quelconque_a_un_noeud_")
&& strstr(lec.tablcar,"Ddl_etendu_a_un_noeud_")
&& strstr(lec.tablcar,"Ddl_noeud_")
&& strstr(lec.tablcar,"Une_composante_Grandeur_globale_")
)
{cout << "\n erreur de lecture du type de variable "
<< " on a lu " << nom << ", type qui n'est pas etre pris en compte...";
if (ParaGlob::NiveauImpression()>3)
cout << "\n Projet::LecVariablesUtilisateur(... " << endl ;
throw (UtilLecture::ErrNouvelleDonnee(-1));
Sortie(1);
};
}; //-- fin du while
lec.NouvelleDonnee(); // on prépare la nouvelle lecture
};
};
// insertion des constantes utilisateur dans les variables globales
void VariablesExporter::InsertConstUtilisateur_dans_globale()
{ // on passe en revue tous les éléments de la liste
list::iterator il,ilfin = li_Q.end();
list::const_iterator inom= li_nom.begin();
for (il = li_Q.begin();il != ilfin;il++,inom++)
{ // on regarde si la grandeur n'existe pas déjà: si oui on couine
const void* pointe = (ParaGlob::param->GrandeurGlobal(*inom));
if (pointe != NULL)
{TypeQuelconque* gr_quelc = (TypeQuelconque*) (pointe);
cout << "\n warning *** la constante globale "<< (*inom)
<< " a deja ete definie ! => " << (*(gr_quelc->Grandeur_pointee()));
cout << "\n on remplace par sa nouvelle valeur: => " << (*((*il).Grandeur_pointee()));
ParaGlob::param->Suppression_grandeur_consultable(*inom); // suppression
// puis on ajoute
ParaGlob::param->Ajout_grandeur_consultable(&(*il),*inom);
}
else // sinon on ajoute simplement
{ParaGlob::param->Ajout_grandeur_consultable(&(*il),*inom);};
};
};
// vérification que 2 nom de variables ne soient pas identique
// si avec_sortie = true -> arrêt
// si avec_sortie = false -> retour du test: true si c'est ok
// false si pb
bool VariablesExporter::VerifNomVariable(const string& nom,bool avec_sortie) const
{ // -- cas des ddl aux noeuds ---
{ List_io < Ddl_a_un_noeud >::const_iterator it, itfin = list_noeud_type_ddl.end();
for (it = list_noeud_type_ddl.begin();it != itfin; it++)
if ((*it).Nom_var_const() == nom)
{ cout << "\n *** erreur en lecture d'une variable utilisateur: Ddl_a_un_noeud "
<< " on a deja lue une variable de meme nom = "<< nom ;
if (avec_sortie)
{Sortie(1);}
else {return false;};
};
};
// -- cas des ddl étendu aux noeuds ---
{ List_io < Ddl_etendu_a_un_noeud >::const_iterator it, itfin = list_noeud_type_ddlEtendu.end();
for (it = list_noeud_type_ddlEtendu.begin();it != itfin; it++)
if ((*it).Nom_var_const() == nom)
{ cout << "\n *** erreur en lecture d'une variable utilisateur: Ddl_etendu_a_un_noeud "
<< " on a deja lue une variable de meme nom = "<< nom ;
if (avec_sortie)
{Sortie(1);}
else {return false;};
};
};
// -- cas des grandeurs quelconques aux noeuds ---
{ List_io < Quelconque_a_un_noeud >::const_iterator it, itfin = list_noeud_type_quelconque.end();
for (it = list_noeud_type_quelconque.begin();it != itfin; it++)
if ((*it).Nom_var_const() == nom)
{ cout << "\n *** erreur en lecture d'une variable utilisateur: Quelconque_a_un_noeud "
<< " on a deja lue une variable de meme nom = "<< nom ;
if (avec_sortie)
{Sortie(1);}
else {return false;};
};
};
// -- cas des ddl aux pti d'éléments ---
{ List_io < Ddl_a_un_element >::const_iterator it, itfin = list_element_type_ddl.end();
for (it = list_element_type_ddl.begin();it != itfin; it++)
if ((*it).Nom_var_const() == nom)
{ cout << "\n *** erreur en lecture d'une variable utilisateur: Ddl_a_un_element "
<< " on a deja lue une variable de meme nom = "<< nom ;
if (avec_sortie)
{Sortie(1);}
else {return false;};
};
};
// -- cas des grandeurs particulières aux pti d'éléments ---
{ List_io < TypeParticulier_a_un_element >::const_iterator it, itfin = list_element_type_particulier.end();
for (it = list_element_type_particulier.begin();it != itfin; it++)
if ((*it).Nom_var_const() == nom)
{ cout << "\n *** erreur en lecture d'une variable utilisateur: TypeParticulier_a_un_element "
<< " on a deja lue une variable de meme nom = "<< nom ;
if (avec_sortie)
{Sortie(1);}
else {return false;};
};
};
// -- cas des grandeurs évoluées aux pti d'éléments ---
{ List_io < TypeEvoluee_a_un_element >::const_iterator it, itfin = list_element_type_evoluee.end();
for (it = list_element_type_evoluee.begin();it != itfin; it++)
if ((*it).Nom_var_const() == nom)
{ cout << "\n *** erreur en lecture d'une variable utilisateur: TypeEvoluee_a_un_element "
<< " on a deja lue une variable de meme nom = "<< nom ;
if (avec_sortie)
{Sortie(1);}
else {return false;};
};
};
// -- cas des grandeurs quelconques aux pti de faces d'éléments ---
{ List_io < TypeQuelc_face_a_un_element >::const_iterator it, itfin = list_face_element_type_quelc.end();
for (it = list_face_element_type_quelc.begin();it != itfin; it++)
if ((*it).Nom_var_const() == nom)
{ cout << "\n *** erreur en lecture d'une variable utilisateur: Quelconque_face_element_ "
<< " on a deja lue une variable de meme nom = "<< nom ;
if (avec_sortie)
{Sortie(1);}
else {return false;};
};
};
// -- cas des grandeurs quelconques aux pti d'arête d'éléments ---
{ List_io < TypeQuelc_arete_a_un_element >::const_iterator it, itfin = list_arete_element_type_quelc.end();
for (it = list_arete_element_type_quelc.begin();it != itfin; it++)
if ((*it).Nom_var_const() == nom)
{ cout << "\n *** erreur en lecture d'une variable utilisateur: Quelconque_arete_element_ "
<< " on a deja lue une variable de meme nom = "<< nom ;
if (avec_sortie)
{Sortie(1);}
else {return false;};
};
};
// -- cas d'une composante d'une variable globale de type multidimentionnel---
{ List_io < TypeQuelc_Une_composante_Grandeur_globale >::const_iterator it, itfin = list_var_glob_sur_grandeur_globale.end();
for (it = list_var_glob_sur_grandeur_globale.begin();it != itfin; it++)
if ((*it).Nom_var_const() == nom)
{ cout << "\n *** erreur en lecture d'une variable utilisateur: Une_composante_Grandeur_globale_ "
<< " on a deja lue une variable de meme nom = "<< nom ;
if (avec_sortie)
{Sortie(1);}
else {return false;};
};
};
// arrivée ici, cela veut dire que tout est ok
return true;
};
// lecture interactive du nom de la variable: hors variable relais
string VariablesExporter::Lect_interactive_nom_var()
{ string no_user("");
while(no_user.length()==0)
{ cout << "\n nom_utilisateur de la grandeur ? ";
no_user = lect_return_defaut(false,"");
if (no_user.length()==0)
{cout << "\n vous devez donner un nom !! ";}
else
{// on complète éventuellement
if (!((no_user[0]== 'V')&&(no_user[1]== '_')&&(no_user[2]== '_')))
no_user = "V__" + no_user;
// on teste s'il y en a deux identiques
if (!VerifNomVariable(no_user,false))
{ cout << "\n ce nom de variable existe deja ! donner un autre ";
no_user = "";
};
};
};
cout << " nom lu: "<< no_user;
return no_user;
};
// lecture interactive du nom d'une variable relais
string VariablesExporter::Lect_interactive_nom_var_relais()
{ string no_user("");
while(no_user.length()==0)
{ cout << "\n nom_utilisateur de la grandeur ? ";
no_user = lect_return_defaut(false,"");
if (no_user.length()==0)
{cout << "\n vous devez donner un nom !! ";}
else
{// on complète éventuellement
if (!((no_user[0]== 'V')&&(no_user[1]== 'R') &&(no_user[2]== '_')))
no_user = "VR_" + no_user;
// on teste s'il y en a deux identiques
if (!VerifNomVariable(no_user,false))
{ cout << "\n ce nom de variable existe deja ! donner un autre ";
no_user = "";
};
};
};
cout << " nom lu: "<< no_user;
return no_user;
};
// insertion d'une composante d'une grandeur quelconque en globale
// sous forme d'un double
void VariablesExporter::InsertCompGrandeurQuelc
(const string& non_var,const TypeQuelconque_enum_etendu& enu)
{// on crée un conteneur d'un double
double val=0;
Grandeur_scalaire_double grand_courant(val);
// on récupère le temps
EnumTypeQuelconque eTQ = enu.EnumTQ();
Enum_dure temps = EnumTypeQuelconqueTemps(eTQ);
switch (temps)
{case TEMPS_0 :
{TypeQuelconque typQ1(GENERIQUE_UNE_VARIABLE_GLOB_DOUBLE_UTILISATEUR_0,NU_DDL,grand_courant);
ParaGlob::param->Ajout_grandeur_consultable(&typQ1,non_var);
break;
}
case TEMPS_t :
{TypeQuelconque typQ1(GENERIQUE_UNE_VARIABLE_GLOB_DOUBLE_UTILISATEUR_T,NU_DDL,grand_courant);
ParaGlob::param->Ajout_grandeur_consultable(&typQ1,non_var);
break;
}
case TEMPS_tdt :
{TypeQuelconque typQ1(GENERIQUE_UNE_VARIABLE_GLOB_DOUBLE_UTILISATEUR_TDT,NU_DDL,grand_courant);
ParaGlob::param->Ajout_grandeur_consultable(&typQ1,non_var);
break;
}
default :
cout << "\nErreur : valeur incorrecte du temps pour une variable ddl globale !\n";
cout << "\n VariablesExporter::InsertCompGrandeurQuelc(... \n";
Sortie(1);
};
};