// 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: 19/01/2006 * * $ * * AUTEUR: G RIO (mailto:gerardrio56@free.fr) * * $ * * PROJET: Herezh++ * * $ * ************************************************************************ * BUT: class de stockage d'un ddl étendue, associé au type * * Ddl_enum_etendu. En fait il s'agit du pendant des types * * Ddl associé au type enum_ddl * * Noter que la grandeur stockée est un scalaire !! * * $ * * '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' * * * VERIFICATION: * * * * ! date ! auteur ! but ! * * ------------------------------------------------------------ * * ! ! ! ! * * $ * * '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' * * MODIFICATIONS: * * ! date ! auteur ! but ! * * ------------------------------------------------------------ * * $ * ************************************************************************/ #ifndef DDL_ETENDU_H #define DDL_ETENDU_H #include "Ddl_enum_etendu.h" #include "Enum_boolddl.h" #include #include #include "Sortie.h" #include /// @addtogroup Les_classes_Ddl_en_tout_genre /// @{ /// /// BUT: class de stockage d'un ddl étendue, associé au type /// Ddl_enum_etendu. En fait il s'agit du pendant des types /// Ddl associé au type enum_ddl /// Noter que la grandeur stockée est un scalaire !! /// /// \author Gérard Rio /// \version 1.0 /// \date 19/01/2006 /// /// class Ddl_etendu { // surcharge de l'operator de lecture friend istream & operator >> (istream & entree, Ddl_etendu& a); // surcharge de l'operator d'ecriture friend ostream & operator << (ostream & sort, const Ddl_etendu& a); public: // CONSTRUCTEURS : // Constructeur par défaut Ddl_etendu (); // Constructeur fonction des variables, la seconde est facultative Ddl_etendu (const Ddl_enum_etendu& ddl,double vale=0.0) ; // Constructeur de copie Ddl_etendu (const Ddl_etendu& d); // DESTRUCTEUR : ~Ddl_etendu (); // METHODES : // Retourne la valeur associee au degre de liberte // en lecture écriture inline double& Valeur() { return val_ddl; }; // idem en lecture seulement inline const double& ConstValeur() const { return val_ddl; }; // Retourne le Ddl_enum_etendu associé // en lecture écriture inline Ddl_enum_etendu& DdlEnumEtendu() { return ddl_enum_etendu; }; // idem mais en constant inline const Ddl_enum_etendu& Const_DdlEnumEtendu() const { return ddl_enum_etendu; }; // Affiche les donnees liees au degre de liberte void Affiche() const { cout << *this; }; void Affiche(ostream& sort) const { sort << *this; }; void Affiche(ostream& sort,int nb) const { sort << setprecision(nb) << *this; }; inline Ddl_etendu& operator= (const Ddl_etendu& d) // Realise l'egalite entre deux degres de liberte étendus { ddl_enum_etendu=d.ddl_enum_etendu; val_ddl=d.val_ddl; return (*this); }; // Surcharge de l'operateur += inline void operator+= (const Ddl_etendu& c) {if (c.ddl_enum_etendu == ddl_enum_etendu) {val_ddl += c.val_ddl;} else {cout << "\n *** erreur d'affectation void operator+= (const Ddl_enum_etendu& c)"; cout << "\n this: "; this->Affiche(); cout << "\n c: "; c.Affiche(); Sortie(1); }; }; // Surcharge de l'operateur -= inline void operator-= (const Ddl_etendu& c) {if (c.ddl_enum_etendu == ddl_enum_etendu) {val_ddl -= c.val_ddl;} else {cout << "\n *** erreur d'affectation void operator-= (const Ddl_enum_etendu& c)"; cout << "\n this: "; this->Affiche(); cout << "\n c: "; c.Affiche(); Sortie(1); }; }; // Surcharge de l'operateur *= inline void operator*= (double val) {val_ddl *= val;}; // Surcharge de l'operateur /= : division par un scalaire inline void operator/= (double val) {val_ddl /= val;}; //Surcharge d'operateur logique // ne concerne que le type et non la valeur bool operator == ( Ddl_etendu& a) const {return (ddl_enum_etendu == a.ddl_enum_etendu);}; bool operator != ( Ddl_etendu& a) const {return (ddl_enum_etendu != a.ddl_enum_etendu);}; // test du type et de la valeur bool Identique(Ddl_etendu& a) { return ((*this == a)&&(val_ddl == a.val_ddl));}; protected : Ddl_enum_etendu ddl_enum_etendu; // identificateur du nom double val_ddl; // valeur associee }; /// @} // end of group // pour faire de l'inline #ifndef MISE_AU_POINT #include "Ddl_etendu.cc" #define Ddl_etendu_deja_inclus #endif #endif