// 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-2022 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: Classe de base de tous les lois de comportement, permet * * la definition de fonctions generiques dans la class * * Element. * $ * * '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' * * * VERIFICATION: * * * * ! date ! auteur ! but ! * * ------------------------------------------------------------ * * ! ! ! ! * * $ * * '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' * * MODIFICATIONS: * * ! date ! auteur ! but ! * * ------------------------------------------------------------ * * $ * ************************************************************************/ #ifndef LOIABSTRAITEGENERAL_H #define LOIABSTRAITEGENERAL_H #include "Enum_comp.h" #include "Tableau_T.h" #include "UtilLecture.h" #include "LesCourbes1D.h" #include "Enum_categorie_loi_comp.h" #include "LesReferences.h" #include "Enum_ddl.h" #include "LesFonctions_nD.h" #include "Enum_GrandeurGlobale.h" class LoiAbstraiteGeneral { public : // CONSTRUCTEURS : // Constructeur par defaut LoiAbstraiteGeneral() ; // Constructeur utile si l'identificateur du nom de la loi // de comportement et la dimension sont connus ainsi que la catégorie de la loi // ddl : identificateur donnant le type de degré de liberté // de base, ou est calculé la loi, par défaut pt integ mécanique : SIG11 LoiAbstraiteGeneral(Enum_comp id_compor,int dimension,Enum_categorie_loi_comp id_categorie ,Enum_ddl ddl = SIG11); // Constructeur utile si l'identificateur du nom de la loi // de comportement et la dimension sont connus ainsi que la catégorie de la loi LoiAbstraiteGeneral(string nom, int dimension,Enum_categorie_loi_comp id_categorie ,Enum_ddl ddl = SIG11); // Constructeur de copie LoiAbstraiteGeneral(const LoiAbstraiteGeneral& a); // DESTRUCTEUR : virtual ~LoiAbstraiteGeneral(); // 1) METHODES NON VIRTUELLES : void Change_comport(string nouveau_nom) { id_comp=Id_nom_comp(nouveau_nom); }; // Remplace le nom de la loi de comportement par nouveau_nom // (par l'intermediaire du type enumere associe) // ATTENTION : Les modifications liees au changement de la loi de // comportement sont a la charge de l'utilisateur. void Change_comport(Enum_comp nouveau_id) { id_comp=nouveau_id;}; // Remplace l'identificateur de la loi de comportement // ATTENTION : Les modifications liees au changement de la loi de // comportement sont a la charge de l'utilisateur. // Retourne l'identificateur de la loi de comportement (de type enumere) Enum_comp Id_comport()const { return id_comp; }; // Retourne le nom de la loi de comportement string Nom_comport() const { return Nom_comp(id_comp); }; // retourne la catégorie de la loi de comportement Enum_categorie_loi_comp Id_categorie() {return categorie_loi_comp;}; // ramène l'identificateur donnant le type de degré de liberté // de base, ou est calculé la loi, par exemple pour une loi mécanique // pt d'integ SIG11 Enum_ddl EnumDdlTypePt() const {return enu_ddl_type_pt;}; // changement de l'identificateur de type de ddl de base ou est calculé la loi void Change_EnumDdlTypePt(Enum_ddl enu) {enu_ddl_type_pt=enu;}; // 2) METHODES VIRTUELLES pures public: // Lecture des donnees de la classe sur fichier virtual void LectureDonneesParticulieres (UtilLecture * ,LesCourbes1D& lesCourbes1D ,LesFonctions_nD& lesFonctionsnD) = 0; // affichage de la loi virtual void Affiche() const = 0; //----- lecture écriture de restart ----- // 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) virtual void Lecture_base_info_loi (ifstream& ent,const int cas,LesReferences& lesRef,LesCourbes1D& lesCourbes1D ,LesFonctions_nD& lesFonctionsnD) = 0; // cas donne le niveau de sauvegarde // = 1 : on sauvegarde tout // = 2 : on sauvegarde uniquement les données variables (supposées comme telles) virtual void Ecriture_base_info_loi(ofstream& sort,const int cas) =0; // affichage et definition interactive des commandes particulières à chaques lois virtual void Info_commande_LoisDeComp(UtilLecture& lec) = 0; // 2) METHODES VIRTUELLES public: // test si la loi est complete // = 1 tout est ok, =0 loi incomplete virtual int TestComplet(); // retourne la dimension de la loi: en général 1 ou 2 ou 3 // si ramène 4 => valable quelque soit la dimension virtual int Dimension_loi() const { return dim;}; // modification de l'indicateur de comportement tangent virtual void Modif_comp_tangent_simplifie(bool ) { // doit être def dans les classes dérivées cout << "erreur, non défini pour cette loi "; Affiche(); Sortie(1); }; // test pour connaître l'état du comportement : simplifié ou non virtual bool Test_loi_simplife() { // doit être def dans les classes dérivées cout << "erreur, non défini pour cette loi "; Affiche(); Sortie(1); return false; // pour éviter le warning }; // indique le type Enum_comp_3D_CP_DP_1D correspondant à une loi de comportement // la fonction est simple dans le cas d'une loi basique, par contre dans le cas // d'une loi combinée, la réponse dépend des lois internes donc c'est redéfini // dans les classes dérivées virtual Enum_comp_3D_CP_DP_1D Comportement_3D_CP_DP_1D() {return Comp_3D_CP_DP_1D(id_comp);}; protected : // ---- donnees protegees Enum_comp id_comp; // identificateur de la loi de comportement int dim ; // dimension de la loi Enum_categorie_loi_comp categorie_loi_comp; // identificateur donnant le type de degré de liberté // de base, ou est calculé la loi, par exemple pour une loi mécanique // pt d'integ SIG11 Enum_ddl enu_ddl_type_pt; // ---- fonctions protégées appelées par les classes dérivées // 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 Lect_base_info_loi (ifstream& ent,const int cas,LesReferences& lesRef,LesCourbes1D& lesCourbes1D ,LesFonctions_nD& lesFonctionsnD); // cas donne le niveau de sauvegarde // = 1 : on sauvegarde tout // = 2 : on sauvegarde uniquement les données variables (supposées comme telles) void Ecrit_base_info_loi(ofstream& sort,const int cas) const; // change la catégorie de la loi de comportement void ChangeCategorie(Enum_categorie_loi_comp new_categorie) {categorie_loi_comp=new_categorie;}; // change la dimension de la loi de comportement void Change_dimension(int dime) {dim=dime;}; // fonction utilitaire pour lire une grandeur qui dépend d'une fonction // si la courbe existe déjà dans LesCourbes1D, ramène un pointeur dessus // si la courbe n'exite pas déjà, création indépendamment de LesCourbes (donc via un new) // et ramène un pointeur dessus Courbe1D * Lecture_courbe(UtilLecture * entreePrinc,LesCourbes1D& lesCourbes1D); }; #endif