// 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: 14/03/2005 * * $ * * AUTEUR: G RIO (mailto:gerardrio56@free.fr) * * $ * * PROJET: Herezh++ * * $ * ************************************************************************ * BUT: Conteneur pour stocker les differentes energies générées * * par la mécanique. * * $ * * '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' * * * VERIFICATION: * * * * ! date ! auteur ! but ! * * ------------------------------------------------------------ * * ! ! ! ! * * $ * * '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' * * MODIFICATIONS: * * ! date ! auteur ! but ! * * ------------------------------------------------------------ * * $ * ************************************************************************/ #ifndef ENERGIE_MECA_H #define ENERGIE_MECA_H #include #include #include #include "Sortie.h" /** @defgroup Les_conteneurs_energies * * BUT: groupe des conteneurs pour les différentes énergies * * * \author Gérard Rio * \version 1.0 * \date 14/03/2005 * \brief groupe des conteneurs pour les différentes énergies * */ /// @addtogroup Les_conteneurs_energies /// @{ /// class EnergieMeca { // surcharge de l'operator de lecture avec le type friend istream & operator >> (istream &, EnergieMeca &); // surcharge de l'operator d'ecriture friend ostream & operator << (ostream &, const EnergieMeca &); public : // CONSTRUCTEURS : // par défaut EnergieMeca() : energie_elastique(0.),dissipation_plastique(0.),dissipation_visqueuse(0.) {}; // constructeur fonction des trois énergies EnergieMeca(const double& e_elastique, const double& d_plastique, const double& d_visqueuse) : energie_elastique(e_elastique),dissipation_plastique(d_plastique) ,dissipation_visqueuse(d_visqueuse) {}; // de copie EnergieMeca(const EnergieMeca& a) : energie_elastique(a.energie_elastique),dissipation_plastique(a.dissipation_plastique) ,dissipation_visqueuse(a.dissipation_visqueuse) {}; // DESTRUCTEUR : // METHODES PUBLIQUES : // affichage à l'écran void Affiche() const {cout << "\n EnergieMeca: energie_elastique=" << energie_elastique << " dissipation_plastique= " << dissipation_plastique << " dissipation_visqueuse= " << dissipation_visqueuse << " "; }; // opérateurs EnergieMeca operator + ( const EnergieMeca & a) const {EnergieMeca ret(*this); ret += a; return ret; }; EnergieMeca operator - ( const EnergieMeca & a) const {EnergieMeca ret(*this); ret -= a; return ret; }; void operator += ( const EnergieMeca & a) {energie_elastique += a.energie_elastique; dissipation_plastique += a.dissipation_plastique; dissipation_visqueuse += a.dissipation_visqueuse; }; void operator -= ( const EnergieMeca & a) {energie_elastique -= a.energie_elastique; dissipation_plastique -= a.dissipation_plastique; dissipation_visqueuse -= a.dissipation_visqueuse; }; void operator *= ( const double & x) {energie_elastique *= x;dissipation_plastique *= x;dissipation_visqueuse *= x;}; void operator /= ( const double & x) {energie_elastique /= x;dissipation_plastique /= x;dissipation_visqueuse /= x;}; EnergieMeca operator * ( const double & x) const { EnergieMeca re(*this); re *=x; return re;}; EnergieMeca operator / ( const double & x) const { EnergieMeca re(*this); re /=x; return re;}; EnergieMeca & operator = ( const EnergieMeca & a) {energie_elastique = a.energie_elastique; dissipation_plastique = a.dissipation_plastique; dissipation_visqueuse = a.dissipation_visqueuse; return *this; }; // initialisation à une valeur vale void Inita(const double& vale) {energie_elastique = dissipation_plastique = dissipation_visqueuse =vale; }; // initialisation différentiée // élastique à 0 et les autres aux valeurs passées en paramètre void Initialisation_differenciee(const EnergieMeca & energlob) {energie_elastique = 0.; dissipation_plastique = energlob.dissipation_plastique; dissipation_visqueuse = energlob.dissipation_visqueuse; }; // mise à jour différenciée // l'énergie élastique de this = celle d'ener * coef // les deux autres énergies sont incrémentées par le delta valeur void Ajout_differenciee(const EnergieMeca & ener, const EnergieMeca & ener_t,const double& coef) {energie_elastique += coef * ener.energie_elastique; dissipation_plastique += coef * (ener.dissipation_plastique-ener_t.dissipation_plastique); dissipation_visqueuse += coef * (ener.dissipation_visqueuse-ener_t.dissipation_visqueuse); }; // retourne l'énergie élastique const double& EnergieElastique() const {return energie_elastique;}; // retourne la dissipation plastique const double& DissipationPlastique() const {return dissipation_plastique;}; // retourne la dissipation visqueuse const double & DissipationVisqueuse() const {return dissipation_visqueuse;}; // changement de l'énergie élastique void ChangeEnergieElastique(double en) { energie_elastique = en;}; // changement de la dissipation plastique void ChangeDissipationPlastique(const double& en) {dissipation_plastique=en;}; void ChangeDissipationVisqueuse(const double& en) {dissipation_visqueuse=en;}; private : // VARIABLES PROTEGEES : double energie_elastique; // énergie élastique double dissipation_plastique ; // dissipation plastique double dissipation_visqueuse; // dissipation visqueuse // METHODES PROTEGEES : }; /// @} // end of group #endif