// 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-2021 Université Bretagne Sud (France) // AUTHOR : Gérard Rio // E-MAIL : gerardrio56@free.fr // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, // or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty // of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. // See the GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // // 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); }; };