// 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: 23/01/97 * * $ * * AUTEUR: G RIO (mailto:gerardrio56@free.fr) * * $ * * PROJET: Herezh++ * * $ * ************************************************************************ * BUT: Definition, gestion et stockage des ddl de l'element. * * $ * * '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' * * * VERIFICATION: * * * * ! date ! auteur ! but ! * * ------------------------------------------------------------ * * ! ! ! ! * * $ * * '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' * * MODIFICATIONS: * * ! date ! auteur ! but ! * * ------------------------------------------------------------ * * $ * ************************************************************************/ #ifndef DDLELEMENT_H #define DDLELEMENT_H #include "Tableau_T.h" #include "DdlNoeudElement.h" //#ifdef SYSTEM_MAC_OS_X // #include // a priori ce n'est pas portable //#el #if defined SYSTEM_MAC_OS_CARBON #include // a priori ce n'est pas portable #else #include // pour le flot en memoire centrale #endif #include #include /// @addtogroup Les_classes_Ddl_en_tout_genre /// @{ /// /// BUT: Definition, gestion et stockage des ddl de l'element. /// /// \author Gérard Rio /// \version 1.0 /// \date 23/01/97 /// /// class DdlElement { // surcharge de l'operator de lecture friend istream & operator >> (istream & entree, DdlElement& a); // surcharge de l'operator d'ecriture friend ostream & operator << (ostream & sort, const DdlElement& a); public : // CONSTRUCTEURS : DdlElement (); // par defaut // definition du tableau pour n noeuds vide DdlElement (int n); // definition du tableau pour n noeuds et m ddl par noeud // utile lorsque tous les noeuds ont le meme nombre de ddl // par contre ici aucun ddl n'est encore défini DdlElement (int n, int m); // definition du tableau pour n noeuds et un nombre de ddl par noeud // stocke dans le tableau mddl qui doit avoir la dimension n // par contre ici aucun ddl n'est encore défini DdlElement (int n,const Tableau & mddl); // definition du tableau pour n noeuds et une meme liste de ddl pour chaque // noeud identique au second argument DdlElement (int n, DdlNoeudElement d); // de copie DdlElement (const DdlElement& a); // DESTRUCTEUR : ~DdlElement (); // retourne nombre de noeud int NbNoeud() const { return te.Taille();}; // acces en modification au ddl j du noeud i void Change_Enum(int i,int j,const Enum_ddl enu); // acces en lecture seulement au ddl j du noeud i Enum_ddl operator() (const int i,const int j) const { return (te(i)).tb(j);}; // acces en lecture seulement au tableau de ddl du noeud i const DdlNoeudElement& operator() (int i) const { return (te(i));}; // nb de ddl total contenu int NbDdl() const { return nbddl;}; // nb de ddl du noeudElement i contenu int NbDdl(int i) const ; // retour du nombre de ddl d'une famille donnée int NbDdl_famille(Enum_ddl enu)const; // change la dimension du tableau de ddl pour n noeuds et m ddl par noeud //dans le cas ou tous les noeuds ont le meme nombre de ddl // si la nouvelle taille est plus petite: suppression // si la nouvelle dimension est plus grande on met les ddl suplémentaires à NU_DDL void Change_taille(int n,int m); // change la dimension du tableau de ddl pour n noeuds et un nombre de ddl par noeud // stocke dans le tableau mddl qui doit avoir la dimension n // si la nouvelle taille est plus petite: suppression // si la nouvelle dimension est plus grande on met les ddl suplémentaires à NU_DDL void Change_taille(int n,Tableau mddl); // change un des ddlNoeudElements void Change_un_ddlNoeudElement(int i,const DdlNoeudElement& add); // mais le tableau de ddl a zero void TailleZero(); // surcharge de l'operateur d'affectation DdlElement& operator = (const DdlElement & a); // surcharge des operator de test bool operator == (const DdlElement & a) const ; bool operator != (const DdlElement & a) const ; // VARIABLES et méthodes protegees : protected : Tableau te; int nbddl; // on définit un tableau associatif pour contenir le nombre de ddl de chaque famille // on redéfini une classe de int dont les éléments sont mis à 0 au début class Int_initer {public: int vali; Int_initer(): vali(0) {}; Int_initer(const Int_initer& a): vali(a.vali) {}; Int_initer& operator =(const Int_initer& a){vali=a.vali;return *this;}; void operator ++(int){vali++;}; void operator --(int){vali--;};}; map < Enum_ddl, Int_initer , std::less > tab_enum_famille; // calcul du nb de ddl total contenu void Calcul_NbDdl() ; // calcul du nb de ddl de chaque type contenu void Calcul_NbDdl_typer() ; }; /// @} // end of group #endif