228 lines
9.6 KiB
C
228 lines
9.6 KiB
C
|
|
||
|
|
||
|
// 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) <https://www.irdl.fr/>.
|
||
|
//
|
||
|
// 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 <https://www.gnu.org/licenses/>.
|
||
|
//
|
||
|
// For more information, please consult: <https://herezh.irdl.fr/>.
|
||
|
|
||
|
/************************************************************************
|
||
|
* 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
|