// 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: . /************************************************************************ * DATE: 06/03/2023 * * $ * * AUTEUR: G RIO (mailto:gerardrio56@free.fr) * * $ * * PROJET: Herezh++ * * $ * ************************************************************************ * BUT: def d'une classe relative a l'exportation en variables * * globales de grandeurs définies dans les maillages. * * Cela concerne les constantes utilisateur et les variables * * calculées par Herezh. * * $ * * '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' * * VERIFICATION: * * * * ! date ! auteur ! but ! * * ------------------------------------------------------------ * * ! ! ! ! * * $ * * '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' * * MODIFICATIONS: * * ! date ! auteur ! but ! * * ------------------------------------------------------------ * * $ * ************************************************************************/ #ifndef VARIABLES_EXPORTER_H #define VARIABLES_EXPORTER_H #include #include #ifndef ENLINUX_STREAM #include // pour le flot en memoire centrale #else #include // pour le flot en memoire centrale #endif #include "UtilLecture.h" #include "Enum_IO_XML.h" #include "LesMaillages.h" #include "Basiques.h" /** @defgroup Les_classes_exportation_en_variables * * BUT:def de classes relatives a l'exportation en variables * globales de grandeurs définies dans les maillages. * Cela concerne les constantes utilisateur et les variables * calculées par Herezh. * * \author Gérard Rio * \version 1.0 * \date 23/01/97 * \brief Définition de classes relatives a l'exportation en variables * */ /// @addtogroup Les_classes_exportation_en_variables /// @{ /// class VariablesExporter { public : friend class LesMaillages; //=================%%%%%%%% classes de conteneurs %%%%%%%%================= // classe conteneur de base pour noeud, élément etc. class A_un_NE { // surcharge de l'operator de lecture avec le type friend istream & operator >> (istream &, A_un_NE &); // surcharge de l'operator d'ecriture friend ostream & operator << (ostream &, const A_un_NE &); public : A_un_NE(); // constructeur par défaut // constructeur fonction de toutes les grandeurs A_un_NE(string ref ,string nom_mail_,string nom_var_); // constructeur de copie A_un_NE (const A_un_NE& a); // DESTRUCTEUR : virtual ~A_un_NE (); // opérateurs A_un_NE& operator= (const A_un_NE& a); bool operator== (const A_un_NE& a) const; bool operator!= (const A_un_NE& a) const {if ( (*this)==a ) return true; else return false;}; bool operator < (const A_un_NE& a) const; bool operator <= (const A_un_NE& a) const; bool operator > (const A_un_NE& a) const; bool operator >= (const A_un_NE& a) const; void Affiche(); // retour des grandeurs const string& Ref_const() const {return ref;}; // la ref const string& Nom_mail_const() const {return nom_mail;}; // le nom du maillage du noeud const string& Nom_var_const() const {return nom_var;}; // nom de la variable associée string& Ref_NE() {return ref;}; // la ref string* Pointeur_Ref_NE() {return &ref;}; // la ref string& Nom_mail() {return nom_mail;}; // le nom du maillage du noeud string* Pointeur_Nom_mail() {return &nom_mail;}; // le nom du maillage du noeud string& Nom_var() {return nom_var;}; // nom de la variable associée // récupération du pointeur de la classe const A_un_NE* PointeurClass_const() const {return this;}; A_un_NE* PointeurClass() {return this;}; protected : string ref; // la ref associée string nom_mail; // le nom du maillage du noeud ou élément string nom_var; // nom de la variable associée }; // classe conteneur pour un ddl à un noeud class Ddl_a_un_noeud { // surcharge de l'operator de lecture avec le type friend istream & operator >> (istream &, Ddl_a_un_noeud &); // surcharge de l'operator d'ecriture friend ostream & operator << (ostream &, const Ddl_a_un_noeud &); public : Ddl_a_un_noeud (); // constructeur par défaut // constructeur fonction de toutes les grandeurs Ddl_a_un_noeud (Ddl_enum_etendu e,string ref_noeud , string nom_mail_,string nom_var_, Enum_dure tps); // constructeur de copie Ddl_a_un_noeud (const Ddl_a_un_noeud& a); // DESTRUCTEUR : virtual ~Ddl_a_un_noeud (); // opérateurs Ddl_a_un_noeud& operator= (const Ddl_a_un_noeud& a); bool operator== (const Ddl_a_un_noeud& a) const; bool operator!= (const Ddl_a_un_noeud& a) const {if ( (*this)==a ) return true; else return false;}; bool operator < (const Ddl_a_un_noeud& a) const; bool operator <= (const Ddl_a_un_noeud& a) const; bool operator > (const Ddl_a_un_noeud& a) const; bool operator >= (const Ddl_a_un_noeud& a) const; void Affiche(); // retour des grandeurs const Ddl_enum_etendu& Enu_const() const {return enu;} ; // le ddl const string& Ref_Num_NE_const() const {return ref_num_NE;}; // la ref de num du noeud const string& Nom_mail_const() const {return nom_mail;}; // le nom du maillage du noeud const string& Nom_var_const() const {return nom_var;}; // nom de la variable associée const Enum_dure& Temps_const() const {return temps;}; // temps de validation du ddl string* Pointeur_Nom_mail() {return &nom_mail;}; // le nom du maillage du noeud Ddl_enum_etendu& Enu() {return enu;} ; // le ddl string& Ref_Num_NE() {return ref_num_NE;}; // la ref de num du noeud string& Nom_mail() {return nom_mail;}; // le nom du maillage du noeud string& Nom_var() {return nom_var;}; // nom de la variable associée Enum_dure& Temps() {return temps;}; // temps de validation du ddl protected : Ddl_enum_etendu enu; // le ddl string ref_num_NE; // le num du noeud string nom_mail; // le nom du maillage du noeud string nom_var; // nom de la variable associée Enum_dure temps; // temps de validation du ddl }; // classe conteneur pour un ddl étendu à un noeud class Ddl_etendu_a_un_noeud : public A_un_NE { // surcharge de l'operator de lecture avec le type friend istream & operator >> (istream &, Ddl_etendu_a_un_noeud &); // surcharge de l'operator d'ecriture friend ostream & operator << (ostream &, const Ddl_etendu_a_un_noeud &); public : Ddl_etendu_a_un_noeud (); // constructeur par défaut // constructeur fonction de toutes les grandeurs Ddl_etendu_a_un_noeud (Ddl_enum_etendu e,string ref_noeud , string nom_mail_,string nom_var_); // constructeur de copie Ddl_etendu_a_un_noeud (const Ddl_etendu_a_un_noeud& a); // DESTRUCTEUR : virtual ~Ddl_etendu_a_un_noeud (); // opérateurs Ddl_etendu_a_un_noeud& operator= (const Ddl_etendu_a_un_noeud& a); bool operator== (const Ddl_etendu_a_un_noeud& a) const; bool operator!= (const Ddl_etendu_a_un_noeud& a) const {if ( (*this)==a ) return true; else return false;}; bool operator < (const Ddl_etendu_a_un_noeud& a) const; bool operator <= (const Ddl_etendu_a_un_noeud& a) const; bool operator > (const Ddl_etendu_a_un_noeud& a) const; bool operator >= (const Ddl_etendu_a_un_noeud& a) const; void Affiche(); // retour des grandeurs Ddl_enum_etendu Enu_const() const {return enu;} ; // le ddl Ddl_enum_etendu& Enu() {return enu;} ; // le ddl protected : Ddl_enum_etendu enu; // le ddl }; // classe conteneur pour une grandeur quelconque à un noeud class Quelconque_a_un_noeud : public A_un_NE { // surcharge de l'operator de lecture avec le type friend istream & operator >> (istream &, Quelconque_a_un_noeud &); // surcharge de l'operator d'ecriture friend ostream & operator << (ostream &, const Quelconque_a_un_noeud &); public : Quelconque_a_un_noeud (); // constructeur par défaut // constructeur fonction de toutes les grandeurs Quelconque_a_un_noeud (TypeQuelconque_enum_etendu e,string ref_noeud , string nom_mail_,string nom_var_,int num_ord); // constructeur de copie Quelconque_a_un_noeud (const Quelconque_a_un_noeud& a); // DESTRUCTEUR : virtual ~Quelconque_a_un_noeud (); // opérateurs Quelconque_a_un_noeud& operator= (const Quelconque_a_un_noeud& a); bool operator== (const Quelconque_a_un_noeud& a) const; bool operator!= (const Quelconque_a_un_noeud& a) const {if ( (*this)==a ) return true; else return false;}; bool operator < (const Quelconque_a_un_noeud& a) const; bool operator <= (const Quelconque_a_un_noeud& a) const; bool operator > (const Quelconque_a_un_noeud& a) const; bool operator >= (const Quelconque_a_un_noeud& a) const; void Affiche(); // retour des grandeurs const TypeQuelconque_enum_etendu& Quelc_const() const {return quelc;} ; // la grandeur constante TypeQuelconque_enum_etendu& Quelc() {return quelc;} ; // la grandeur en i/o const int& Num_ordre_const() const {return num_ordre;}; int& Num_ordre() {return num_ordre;}; protected : TypeQuelconque_enum_etendu quelc; // la grandeur int num_ordre; // le numéro de la composante }; // classe conteneur pour un pti d'élément class A_un_E : public A_un_NE { // surcharge de l'operator de lecture avec le type friend istream & operator >> (istream &, A_un_E &); // surcharge de l'operator d'ecriture friend ostream & operator << (ostream &, const A_un_E &); public : A_un_E (); // constructeur par défaut // constructeur fonction de toutes les grandeurs A_un_E (int absolu_,string ref_ ,string nom_mail_,string nom_var_,int nbpti); // constructeur de copie A_un_E (const A_un_E& a); // DESTRUCTEUR : virtual ~A_un_E (); // opérateurs A_un_E& operator= (const A_un_E& a); bool operator== (const A_un_E& a) const; bool operator!= (const A_un_E& a) const {if ( (*this)==a ) return true; else return false;}; bool operator < (const A_un_E& a) const; bool operator <= (const A_un_E& a) const; bool operator > (const A_un_E& a) const; bool operator >= (const A_un_E& a) const; void Affiche(); // récupération du pointeur de la classe const A_un_E* PointeurClass_E_const() const {return this;}; A_un_E* PointeurClass_E() {return this;}; // retour des grandeurs const int& NBpti_const() const {return num_pti;}; // num du pti en const int& NBpti() {return num_pti;}; // idem direct const int& Absolue_const() const {return absolu;}; // absolu ou pas int& Absolue() {return absolu;}; protected : int num_pti; // numéro du point d'intégration int absolu; // indique si la grandeur est dans un repère absolu ou local }; // classe conteneur pour un ddl à un élément class Ddl_a_un_element : public A_un_E { // surcharge de l'operator de lecture avec le type friend istream & operator >> (istream &, Ddl_a_un_element &); // surcharge de l'operator d'ecriture friend ostream & operator << (ostream &, const Ddl_a_un_element &); public : Ddl_a_un_element (); // constructeur par défaut // constructeur fonction de toutes les grandeurs Ddl_a_un_element (int absolu_,Ddl_enum_etendu e,string ref_noeud ,string nom_mail_,Enum_dure tps,string nom_var_,int nbpti); // constructeur de copie Ddl_a_un_element (const Ddl_a_un_element& a); // DESTRUCTEUR : virtual ~Ddl_a_un_element (); // opérateurs Ddl_a_un_element& operator= (const Ddl_a_un_element& a); bool operator== (const Ddl_a_un_element& a) const; bool operator!= (const Ddl_a_un_element& a) const {if ( (*this)==a ) return true; else return false;}; bool operator < (const Ddl_a_un_element& a) const; bool operator <= (const Ddl_a_un_element& a) const; bool operator > (const Ddl_a_un_element& a) const; bool operator >= (const Ddl_a_un_element& a) const; void Affiche(); // retour des grandeurs const Ddl_enum_etendu& Enu_const() const {return enu;} ; // le ddl en const Ddl_enum_etendu& Enu() {return enu;} ; // le ddl direct const Enum_dure& Temps_const() const {return temps;}; // temps de validation du ddl Enum_dure& Temps() {return temps;}; // temps de validation du ddl protected : Ddl_enum_etendu enu; // le ddl Enum_dure temps; // temps de validation du ddl }; // classe conteneur pour un TypeQuelconque à un élément class TypeQuelconque_a_un_element : public A_un_E { // surcharge de l'operator de lecture avec le type friend istream & operator >> (istream &, TypeQuelconque_a_un_element &); // surcharge de l'operator d'ecriture friend ostream & operator << (ostream &, const TypeQuelconque_a_un_element &); public : TypeQuelconque_a_un_element (); // constructeur par défaut // constructeur fonction de toutes les grandeurs 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); // constructeur de copie TypeQuelconque_a_un_element (const TypeQuelconque_a_un_element& a); // DESTRUCTEUR : virtual ~TypeQuelconque_a_un_element (); // opérateurs TypeQuelconque_a_un_element& operator= (const TypeQuelconque_a_un_element& a); bool operator== (const TypeQuelconque_a_un_element& a) const; bool operator!= (const TypeQuelconque_a_un_element& a) const {if ( (*this)==a ) return true; else return false;}; bool operator < (const TypeQuelconque_a_un_element& a) const; bool operator <= (const TypeQuelconque_a_un_element& a) const; bool operator > (const TypeQuelconque_a_un_element& a) const; bool operator >= (const TypeQuelconque_a_un_element& a) const; void Affiche(); // récupération du pointeur de la classe const TypeQuelconque_a_un_element* PointeurClass_Quelc_const() const {return this;}; TypeQuelconque_a_un_element* PointeurClass_Quelc() {return this;}; // retour des grandeurs const TypeQuelconque_enum_etendu& Quelc_const() const {return quelc;} ; // la grandeur constante TypeQuelconque_enum_etendu& Quelc() {return quelc;} ; // la grandeur en i/o const int& Num_ordre_const() const {return num_ordre;}; int& Num_ordre() {return num_ordre;}; protected : TypeQuelconque_enum_etendu quelc; // la grandeur int num_ordre; // le numéro de la composante }; // classe conteneur pour les grandeurs particulières à un élément class TypeParticulier_a_un_element : public TypeQuelconque_a_un_element { // surcharge de l'operator de lecture avec le type friend istream & operator >> (istream &, TypeParticulier_a_un_element &); // surcharge de l'operator d'ecriture friend ostream & operator << (ostream &, const TypeParticulier_a_un_element &); public : TypeParticulier_a_un_element(): TypeQuelconque_a_un_element() {}; // constructeur par défaut // constructeur fonction de toutes les grandeurs TypeParticulier_a_un_element (int absolu_,TypeQuelconque_enum_etendu e,string ref_noeud ,string nom_mail_,Enum_dure tps,string nom_var_,int nbpti,int num_ord): TypeQuelconque_a_un_element(absolu_,e,ref_noeud,nom_mail_,tps,nom_var_,nbpti,num_ord) {} ; // constructeur de copie TypeParticulier_a_un_element(const TypeParticulier_a_un_element& a): TypeQuelconque_a_un_element(a) {}; // DESTRUCTEUR : virtual ~TypeParticulier_a_un_element() {}; // opérateurs TypeParticulier_a_un_element& operator= (const TypeParticulier_a_un_element& a) {(*PointeurClass_Quelc())= (*a.PointeurClass_Quelc_const());}; bool operator== (const TypeParticulier_a_un_element& a) const {return ((*PointeurClass_Quelc_const()) == (*a.PointeurClass_Quelc_const()));}; bool operator!= (const TypeParticulier_a_un_element& a) const {if ( (*this)==a ) return true; else return false;}; bool operator < (const TypeParticulier_a_un_element& a) const {return ((*PointeurClass_Quelc_const()) < (*a.PointeurClass_Quelc_const()));}; bool operator <= (const TypeParticulier_a_un_element& a) const {return ((*PointeurClass_Quelc_const()) <= (*a.PointeurClass_Quelc_const()));}; bool operator > (const TypeParticulier_a_un_element& a) const {return ((*PointeurClass_Quelc_const()) > (*a.PointeurClass_Quelc_const()));}; bool operator >= (const TypeParticulier_a_un_element& a) const {return ((*PointeurClass_Quelc_const()) == (*a.PointeurClass_Quelc_const()));}; void Affiche(); }; // classe conteneur pour les grandeurs évoluées à un élément class TypeEvoluee_a_un_element : public TypeQuelconque_a_un_element { // surcharge de l'operator de lecture avec le type friend istream & operator >> (istream &, TypeEvoluee_a_un_element &); // surcharge de l'operator d'ecriture friend ostream & operator << (ostream &, const TypeEvoluee_a_un_element &); public : TypeEvoluee_a_un_element(): TypeQuelconque_a_un_element() {}; // constructeur par défaut // constructeur fonction de toutes les grandeurs TypeEvoluee_a_un_element (int absolu_,TypeQuelconque_enum_etendu e,string ref_noeud ,string nom_mail_,Enum_dure tps,string nom_var_,int nbpti,int num_ord): TypeQuelconque_a_un_element(absolu_,e,ref_noeud,nom_mail_,tps,nom_var_,nbpti,num_ord) {} ; // constructeur de copie TypeEvoluee_a_un_element(const TypeEvoluee_a_un_element& a): TypeQuelconque_a_un_element(a) {}; // DESTRUCTEUR : virtual ~TypeEvoluee_a_un_element() {}; // opérateurs TypeEvoluee_a_un_element& operator= (const TypeEvoluee_a_un_element& a) {(*PointeurClass_Quelc())= (*a.PointeurClass_Quelc_const());}; bool operator== (const TypeEvoluee_a_un_element& a) const {return ((*PointeurClass_Quelc_const()) == (*a.PointeurClass_Quelc_const()));}; bool operator!= (const TypeEvoluee_a_un_element& a) const {if ( (*this)==a ) return true; else return false;}; bool operator < (const TypeEvoluee_a_un_element& a) const {return ((*PointeurClass_Quelc_const()) < (*a.PointeurClass_Quelc_const()));}; bool operator <= (const TypeEvoluee_a_un_element& a) const {return ((*PointeurClass_Quelc_const()) <= (*a.PointeurClass_Quelc_const()));}; bool operator > (const TypeEvoluee_a_un_element& a) const {return ((*PointeurClass_Quelc_const()) > (*a.PointeurClass_Quelc_const()));}; bool operator >= (const TypeEvoluee_a_un_element& a) const {return ((*PointeurClass_Quelc_const()) == (*a.PointeurClass_Quelc_const()));}; void Affiche(); }; // classe conteneur pour un TypeQuelconque à une face ou arête class TypeQuelconque_a_Face_arete : public TypeQuelconque_a_un_element { public : TypeQuelconque_a_Face_arete (); // constructeur par défaut // constructeur fonction de toutes les grandeurs 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); // constructeur de copie TypeQuelconque_a_Face_arete (const TypeQuelconque_a_Face_arete& a); // DESTRUCTEUR : virtual ~TypeQuelconque_a_Face_arete (); // opérateurs TypeQuelconque_a_Face_arete& operator= (const TypeQuelconque_a_Face_arete& a); bool operator== (const TypeQuelconque_a_Face_arete& a) const; bool operator!= (const TypeQuelconque_a_Face_arete& a) const {if ( (*this)==a ) return true; else return false;}; bool operator < (const TypeQuelconque_a_Face_arete& a) const; bool operator <= (const TypeQuelconque_a_Face_arete& a) const; bool operator > (const TypeQuelconque_a_Face_arete& a) const; bool operator >= (const TypeQuelconque_a_Face_arete& a) const; // récupération du pointeur de la classe const TypeQuelconque_a_Face_arete* PointClass_QuelcFA_const() const {return this;}; TypeQuelconque_a_Face_arete* PointClass_QuelcFA() {return this;}; // retour des grandeurs const int& Num_FA_const() const {return num_FA;} ; // la grandeur constante int& Num_FA() {return num_FA;} ; // la grandeur en i/O protected : int num_FA; // ref de numéro de la face ou de l'arête }; // classe conteneur pour les grandeurs quelconque à une face d'élément class TypeQuelc_face_a_un_element : public TypeQuelconque_a_Face_arete { // surcharge de l'operator de lecture avec le type friend istream & operator >> (istream &, TypeQuelc_face_a_un_element &); // surcharge de l'operator d'ecriture friend ostream & operator << (ostream &, const TypeQuelc_face_a_un_element &); public : TypeQuelc_face_a_un_element(): TypeQuelconque_a_Face_arete() {}; // constructeur par défaut // constructeur fonction de toutes les grandeurs TypeQuelc_face_a_un_element (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_Face_arete(absolu_,e,ref_element,nom_mail,nbFA,tps,nom_var_,nbpti,num_ord) {} ; // constructeur de copie TypeQuelc_face_a_un_element(const TypeQuelc_face_a_un_element& a): TypeQuelconque_a_Face_arete(a) {}; // DESTRUCTEUR : virtual ~TypeQuelc_face_a_un_element() {}; // opérateurs TypeQuelc_face_a_un_element& operator= (const TypeQuelc_face_a_un_element& a) {(*PointClass_QuelcFA())= (*a.PointClass_QuelcFA_const());}; bool operator== (const TypeQuelc_face_a_un_element& a) const {return ((*PointClass_QuelcFA_const()) == (*a.PointClass_QuelcFA_const()));}; bool operator!= (const TypeQuelc_face_a_un_element& a) const {if ( (*this)==a ) return true; else return false;}; bool operator < (const TypeQuelc_face_a_un_element& a) const {return ((*PointClass_QuelcFA_const()) < (*a.PointClass_QuelcFA_const()));}; bool operator <= (const TypeQuelc_face_a_un_element& a) const {return ((*PointClass_QuelcFA_const()) <= (*a.PointClass_QuelcFA_const()));}; bool operator > (const TypeQuelc_face_a_un_element& a) const {return ((*PointClass_QuelcFA_const()) > (*a.PointClass_QuelcFA_const()));}; bool operator >= (const TypeQuelc_face_a_un_element& a) const {return ((*PointClass_QuelcFA_const()) == (*a.PointClass_QuelcFA_const()));}; void Affiche(); }; // classe conteneur pour les grandeurs quelconque à une arête d'élément class TypeQuelc_arete_a_un_element : public TypeQuelconque_a_Face_arete { // surcharge de l'operator de lecture avec le type friend istream & operator >> (istream &, TypeQuelc_arete_a_un_element &); // surcharge de l'operator d'ecriture friend ostream & operator << (ostream &, const TypeQuelc_arete_a_un_element &); public : TypeQuelc_arete_a_un_element(): TypeQuelconque_a_Face_arete() {}; // constructeur par défaut // constructeur fonction de toutes les grandeurs TypeQuelc_arete_a_un_element (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_Face_arete(absolu_,e,ref_element,nom_mail,nbFA,tps,nom_var_,nbpti,num_ord) {} ; // constructeur de copie TypeQuelc_arete_a_un_element(const TypeQuelc_arete_a_un_element& a): TypeQuelconque_a_Face_arete(a) {}; // DESTRUCTEUR : virtual ~TypeQuelc_arete_a_un_element() {}; // opérateurs TypeQuelc_arete_a_un_element& operator= (const TypeQuelc_arete_a_un_element& a) {(*PointClass_QuelcFA())= (*a.PointClass_QuelcFA_const());}; bool operator== (const TypeQuelc_arete_a_un_element& a) const {return ((*PointClass_QuelcFA_const()) == (*a.PointClass_QuelcFA_const()));}; bool operator!= (const TypeQuelc_arete_a_un_element& a) const {if ( (*this)==a ) return true; else return false;}; bool operator < (const TypeQuelc_arete_a_un_element& a) const {return ((*PointClass_QuelcFA_const()) < (*a.PointClass_QuelcFA_const()));}; bool operator <= (const TypeQuelc_arete_a_un_element& a) const {return ((*PointClass_QuelcFA_const()) <= (*a.PointClass_QuelcFA_const()));}; bool operator > (const TypeQuelc_arete_a_un_element& a) const {return ((*PointClass_QuelcFA_const()) > (*a.PointClass_QuelcFA_const()));}; bool operator >= (const TypeQuelc_arete_a_un_element& a) const {return ((*PointClass_QuelcFA_const()) == (*a.PointClass_QuelcFA_const()));}; void Affiche(); }; // classe conteneur pour une composante d'une grandeur globale class TypeQuelc_Une_composante_Grandeur_globale { // surcharge de l'operator de lecture avec le type friend istream & operator >> (istream &, TypeQuelc_Une_composante_Grandeur_globale &); // surcharge de l'operator d'ecriture friend ostream & operator << (ostream &, const TypeQuelc_Une_composante_Grandeur_globale &); public : TypeQuelc_Une_composante_Grandeur_globale(): var() {}; // constructeur par défaut // constructeur fonction de toutes les grandeurs TypeQuelc_Une_composante_Grandeur_globale (string nom_var, string nom_glob, int num_ord): var(nom_var,nom_glob,num_ord) {} ; // constructeur de copie TypeQuelc_Une_composante_Grandeur_globale(const TypeQuelc_Une_composante_Grandeur_globale& a): var(a.var) {}; // DESTRUCTEUR : virtual ~TypeQuelc_Une_composante_Grandeur_globale() {}; // opérateurs TypeQuelc_Une_composante_Grandeur_globale& operator= (const TypeQuelc_Une_composante_Grandeur_globale& a) {var = a.var;}; bool operator== (const TypeQuelc_Une_composante_Grandeur_globale& a) const {return (var == a.var);}; bool operator!= (const TypeQuelc_Une_composante_Grandeur_globale& a) const {if ( (*this)==a ) return true; else return false;}; bool operator < (const TypeQuelc_Une_composante_Grandeur_globale& a) const {return (var < a.var);}; bool operator <= (const TypeQuelc_Une_composante_Grandeur_globale& a) const {return (var <= a.var);}; bool operator > (const TypeQuelc_Une_composante_Grandeur_globale& a) const {return (var > a.var);}; bool operator >= (const TypeQuelc_Une_composante_Grandeur_globale& a) const {return (var >= a.var);}; void Affiche(); // retour des grandeurs const string& Nom_var_const() const {return var.nom1;}; // nom de la variable associée string& Nom_var() {return var.nom1;}; // nom de la variable associée const string& Nom_grandeur_globale_const() const {return var.nom2;}; // nom de la grandeur globale associé string& Nom_grandeur_globale() {return var.nom2;}; // nom de la grandeur globale associé const int& Indice_const() const {return var.n;}; int& Indice() {return var.n;}; Deux_String_un_entier Deux_String_un_entier_const() const {return var;} ; Deux_String_un_entier& Deux_String_un_entier_() {return var;} ; protected : Deux_String_un_entier var ; // var.nom1 -> nom de la variable // var.nom2 -> nom de la grandeur globale // var.n -> le numéro de la composante }; // METHODES : //=================%%%%%%%% la classe principale %%%%%%%%================= // CONSTRUCTEURS : // Constructeur par defaut VariablesExporter (); // Constructeur de copie, cependant ici il n'y a pas de création de noeud ni d'élément // c'est seulement une création de nouveaux conteneurs de pointeurs // cependant le numéro de maillage et le nom de maillage n'est pas valide, il faut // ensuite les définir VariablesExporter (const VariablesExporter& var); // DESTRUCTEUR : ~VariablesExporter (); // lecture void LectureVariablesExporter(UtilLecture * entreePrinc); // insertion des constantes et variables utilisateurs vers globales void InsertConstVarUtilisateur_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 InitialisationConteneursQuelconques(LesMaillages& lesMail,const List_io < TypeQuelconque >& listeVecGlob,const LesReferences& lesRef); // ramène les liste des infos qui seront consultés pour les noeuds const List_io < Ddl_a_un_noeud >& List_noeud_type_ddl() const {return list_noeud_type_ddl;}; // ddl pur aux noeuds const List_io < Ddl_etendu_a_un_noeud >& List_noeud_type_ddlEtendu() const {return list_noeud_type_ddlEtendu;}; // idem pour les ddl étendu const List_io & List_noeud_type_quelconque() const {return list_noeud_type_quelconque;}; // idem en quelconque // affichage et definition interactive des commandes void Info_commande_VariablesExporters(UtilLecture * entreePrinc); // Affiche void Affiche () const ; // Surcharge de l'operateur = : realise l'egalite de deux instances VariablesExporter& operator= (VariablesExporter& var); // test si toutes les informations sont completes // = true -> complet // = false -> incomplet bool Complet_VariablesExporter(const LesReferences& lesRef); // mises à jour de constantes globales définies par l'utilisateur // permet de changer les valeurs, lors d'une suite .info par exemple void MiseAjourConstantesUtilisateur(UtilLecture& lec); // renseigne les variables définies par l'utilisateur // via les valeurs calculées par Herezh void RenseigneVarUtilisateur(LesMaillages& lesMail,const LesReferences& lesRef); //----- lecture écriture dans base info ----- // cas donne le niveau de la récupération // = 1 : on récupère tout // = 2 : on récupère uniquement les données variables (supposées comme telles) void Lecture_base_info(ifstream& ent,const int cas); // cas donne le niveau de sauvegarde // = 1 : on sauvegarde tout // = 2 : on sauvegarde uniquement les données variables (supposées comme telles) void Ecriture_base_info(ofstream& sort,const int cas); // sortie du schemaXML: en fonction de enu static void SchemaXML_VariablesExporters(UtilLecture * entreePrinc,const Enum_IO_XML enu) ; protected : // données: // ---- les constantes utilisateur list li_Q; // les constantes list li_nom; // le nom des constantes // ------- les variables // -> noeuds List_io < Ddl_a_un_noeud > list_noeud_type_ddl; // ddl pur aux noeuds List_io < Ddl_etendu_a_un_noeud > list_noeud_type_ddlEtendu; // idem pour les ddl étendu List_io list_noeud_type_quelconque; // idem en quelconque // -> éléments List_io < Ddl_a_un_element > list_element_type_ddl; // ddl pur aux pti d'élément // idem pour les grandeurs particulières et évoluées List_io < TypeParticulier_a_un_element > list_element_type_particulier; List_io < TypeQuelconque > list_quelc_element_type_particulier; // les conteneurs associés List_io < TypeEvoluee_a_un_element > list_element_type_evoluee; List_io < TypeQuelconque > list_quelc_element_type_evoluee; // les conteneurs associés // -> face d'éléments List_io list_face_element_type_quelc; List_io < TypeQuelconque > list_quelc_face_element_type_quelc; // les conteneurs associés // -> arête d'éléments List_io list_arete_element_type_quelc; List_io < TypeQuelconque > list_quelc_arete_element_type_quelc; // les conteneurs associés bool initiaConteneurQuelconque; // pour gérer une seule initialisation // -> une composante d'une variable globale de type multidimentionnel List_io list_var_glob_sur_grandeur_globale; // méthodes //---- constantes utilisateurs // lecture éventuelle de constantes globales définies par l'utilisateur void LecConstantesUtilisateur(UtilLecture& lec); // insertion des constantes utilisateur dans les variables globales void InsertConstUtilisateur_dans_globale(); // def de constantes utilisateur pour une sortie sur un fichier de commande void Info_commande_ConstantesUtilisateur(UtilLecture * lec); // ---- variables utilisateur // lecture éventuelle des variables globales définies par l'utilisateur void LecVariablesUtilisateur(UtilLecture& lec); // def de variables utilisateur pour une sortie sur un fichier de commande void Info_commande_VariablesUtilisateur(UtilLecture * lec); // insertion et stockage des variables au niveau de ParaGlob void Insert_VarUtilisateur_dans_globale(); // 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 VerifNomVariable(const string& nom,bool avec_sortie) const; // lecture interactive du nom de la variable: hors variable relais string Lect_interactive_nom_var(); // lecture interactive du nom d'une variable relais string Lect_interactive_nom_var_relais(); // insertion d'une composante d'une grandeur quelconque en globale // sous forme d'un double void InsertCompGrandeurQuelc(const string& non_var,const TypeQuelconque_enum_etendu& enu); }; /// @} // end of group #endif