213 lines
11 KiB
C
213 lines
11 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-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 <https://www.gnu.org/licenses/>.
|
||
|
//
|
||
|
// For more information, please consult: <https://herezh.irdl.fr/>.
|
||
|
|
||
|
/************************************************************************
|
||
|
* DATE: 27/07/2022 *
|
||
|
* $ *
|
||
|
* AUTEUR: G RIO (mailto:gerardrio56@free.fr) *
|
||
|
* $ *
|
||
|
* PROJET: Herezh++ *
|
||
|
* $ *
|
||
|
************************************************************************
|
||
|
* BUT: Méthodes génériques de transformations *
|
||
|
* de tenseurs. Utilisées en particulier par ElemMeca et les
|
||
|
* lois de comportement
|
||
|
* $ *
|
||
|
* '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' *
|
||
|
* VERIFICATION: *
|
||
|
* *
|
||
|
* ! date ! auteur ! but ! *
|
||
|
* ------------------------------------------------------------ *
|
||
|
* ! ! ! ! *
|
||
|
* $ *
|
||
|
* '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' *
|
||
|
* MODIFICATIONS: *
|
||
|
* ! date ! auteur ! but ! *
|
||
|
* ------------------------------------------------------------ *
|
||
|
* $ *
|
||
|
************************************************************************/
|
||
|
#ifndef TRANS_VAL_MULTI_TENSORIEL_H
|
||
|
#define TRANS_VAL_MULTI_TENSORIEL_H
|
||
|
|
||
|
#include "Tenseur.h"
|
||
|
#include "NevezTenseur.h"
|
||
|
#include "Enum_calcul_masse.h"
|
||
|
#include "Basiques.h"
|
||
|
#include "Enum_dure.h"
|
||
|
#include "LesPtIntegMecaInterne.h"
|
||
|
#include "Enum_StabHourglass.h"
|
||
|
#include "Temps_CPU_HZpp.h"
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
* BUT: Méthodes génériques de transformations
|
||
|
* de tenseurs. Utilisées en particulier par ElemMeca et les
|
||
|
* lois de comportement
|
||
|
*
|
||
|
* \author Gérard Rio
|
||
|
* \version 1.0
|
||
|
* \date 27/07/2022
|
||
|
* \brief Méthodes génériques de transformations de tenseurs
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
|
||
|
class Trans_val_multi_tensoriel :
|
||
|
{
|
||
|
public :
|
||
|
// VARIABLES PUBLIQUES :
|
||
|
|
||
|
/* // CONSTRUCTEURS par défaut:
|
||
|
Trans_val_multi_tensoriel();
|
||
|
// Constructeur de copie
|
||
|
Trans_val_multi_tensoriel(const Trans_val_multi_tensoriel& a);
|
||
|
|
||
|
// DESTRUCTEUR :
|
||
|
~Trans_val_multi_tensoriel();
|
||
|
|
||
|
// METHODES PUBLIQUES :
|
||
|
|
||
|
|
||
|
// récupération des valeurs au numéro d'ordre = iteg pour
|
||
|
// les grandeur enu
|
||
|
// absolue: indique si oui ou non on sort les tenseurs dans la base absolue ou une base particulière
|
||
|
// NB Importante: il faut faire attention à ce que ces métriques soient identiques à celles qui ont servit
|
||
|
// pour le calcul des tenseurs: en particulier si c'est utilisé pour calculer les grandeurs pour le chargement
|
||
|
// il faut s'assurer que ce sont les "mêmes pti" qui servent pour la charge et pour la raideur !!
|
||
|
Tableau <double> Valeur_multi(bool absolue,Enum_dure enu_t,const List_io<Ddl_enum_etendu>& enu
|
||
|
,int iteg,int cas
|
||
|
) ;
|
||
|
|
||
|
// récupération des valeurs Tensorielles (et non scalaire comme avec Valeur_multi)
|
||
|
// au numéro d'ordre = iteg pour les grandeur enu
|
||
|
// enu contient les grandeurs de retour
|
||
|
// absolue: indique si oui ou non on sort les tenseurs dans la base absolue ou une base particulière
|
||
|
// NB Importante: il faut faire attention à ce que ces métriques soient identiques à celles qui ont servit
|
||
|
// pour le calcul des tenseurs: en particulier si c'est utilisé pour calculer les grandeurs pour le chargement
|
||
|
// il faut s'assurer que ce sont les "mêmes pti" qui servent pour la charge et pour la raideur !!
|
||
|
void Valeurs_Tensorielles(bool absolue, Enum_dure enu_t,List_io<TypeQuelconque>& enu
|
||
|
,int iteg,int cas
|
||
|
) ;
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
// récupération de valeurs interpolées pour les grandeur enu
|
||
|
// absolue: indique si oui ou non on sort les tenseurs dans la base absolue ou une base particulière
|
||
|
// une seule des 3 métriques doit-être renseigné, les autres doivent être un pointeur nul
|
||
|
void Valeurs_Tensorielles_interpoler_ou_calculer
|
||
|
(bool absolue, Enum_dure temps,List_io<TypeQuelconque>& enu
|
||
|
,Deformation & defor
|
||
|
,const Met_abstraite::Impli* ex_impli
|
||
|
,const Met_abstraite::Expli_t_tdt* ex_expli_tdt
|
||
|
,const Met_abstraite::Expli* ex_expli
|
||
|
);
|
||
|
|
||
|
|
||
|
// récupération de valeurs interpolées pour les grandeur enu ou directement calculées
|
||
|
// absolue: indique si oui ou non on sort les tenseurs dans la base absolue ou une base particulière
|
||
|
// exclure_dd_etend: donne une liste de Ddl_enum_etendu à exclure de la recherche
|
||
|
// parce que par exemple, ils sont calculés par ailleurs
|
||
|
// on peut également ne pas définir de métrique et matrice de passage (c-a-d gijHH == NULL)
|
||
|
// ==> tous les autres pointeurs d'éléments de métrique et matrices de passages sont alors réputés NULL
|
||
|
// donc inutilisable
|
||
|
// , dans ce cas on ne peut pas calculer certaines grandeurs
|
||
|
// -> il y a vérification
|
||
|
Tableau <double> Valeur_multi_interpoler_ou_calculer
|
||
|
(bool absolue, Enum_dure temps,const List_io<Ddl_enum_etendu>& enu
|
||
|
// éléments de métrique et matrices de passage
|
||
|
,TenseurHH* gijHH,TenseurBB* gijBB,BaseB* giB
|
||
|
,BaseH* giH_0,BaseH* giH
|
||
|
,BaseB* giB_0
|
||
|
,BaseB* giB_t // n'est définit "que" pour certains cas
|
||
|
,Mat_pleine* Aa0,Mat_pleine* Aafin
|
||
|
,Mat_pleine* gamma0,Mat_pleine* gammafin
|
||
|
,Mat_pleine* beta0,Mat_pleine* betafin
|
||
|
// exclusion du calcul
|
||
|
,const List_io<Ddl_enum_etendu>* exclure_dd_etend
|
||
|
);
|
||
|
|
||
|
// récupération de valeurs interpolées pour les grandeur enu
|
||
|
// absolue: indique si oui ou non on sort les tenseurs dans la base absolue ou une base particulière
|
||
|
// exclure_Q: donne une liste de grandeur quelconque à exclure de la recherche
|
||
|
// parce que par exemple, ils sont calculés par ailleurs
|
||
|
// on peut également ne pas définir de métrique et matrice de passage (c-a-d gijHH == NULL)
|
||
|
// ==> tous les autres pointeurs d'éléments de métrique et matrices de passages sont alors réputés NULL
|
||
|
// donc inutilisable
|
||
|
// , dans ce cas on ne peut pas calculer certaines grandeurs
|
||
|
// -> il y a vérification
|
||
|
void Valeurs_Tensorielles_interpoler_ou_calculer
|
||
|
(bool absolue, Enum_dure temps,List_io<TypeQuelconque>& enu
|
||
|
// éléments de métrique et matrices de passage
|
||
|
,TenseurHH* gijHH,TenseurBB* gijBB,BaseB* giB
|
||
|
,BaseH* giH_0,BaseH* giH
|
||
|
,BaseB* giB_0
|
||
|
,BaseB* giB_t // n'est définit "que" pour certains cas
|
||
|
,Mat_pleine* Aa0,Mat_pleine* Aafin
|
||
|
,Mat_pleine* gamma0,Mat_pleine* gammafin
|
||
|
,Mat_pleine* beta0,Mat_pleine* betafin
|
||
|
// exclusion du calcul
|
||
|
,const List_io<EnumTypeQuelconque>* exclure_Q
|
||
|
);
|
||
|
|
||
|
// récupération de valeurs interpolées pour les grandeur ici considéré quelconque enu
|
||
|
// ces grandeurs ne sont pas définies dans la liste des Ddl_enum_etendu : ex mises à t
|
||
|
// ou le numéro de l'élément etc.
|
||
|
// absolue: indique si oui ou non on sort les tenseurs dans la base absolue ou une base particulière
|
||
|
// exclure_Q: donne une liste de grandeur quelconque à exclure de la recherche
|
||
|
// parce que par exemple, ils sont calculés par ailleurs
|
||
|
// on peut également ne pas définir de métrique et matrice de passage (c-a-d gijHH == NULL)
|
||
|
// ==> tous les autres pointeurs d'éléments de métrique et matrices de passages sont alors réputés NULL
|
||
|
// donc inutilisable
|
||
|
// , dans ce cas on ne peut pas calculer certaines grandeurs
|
||
|
// -> il y a vérification
|
||
|
// retour: la list li_quelc
|
||
|
void Valeurs_quelconque_interpoler_ou_calculer
|
||
|
(bool absolue, Enum_dure temps
|
||
|
,const Tableau <EnumTypeQuelconque>& tqi
|
||
|
,List_io<TypeQuelconque>& li_quelc
|
||
|
// éléments de métrique et matrices de passage
|
||
|
,TenseurHH* gijHH,TenseurBB* gijBB,BaseB* giB
|
||
|
,BaseH* giH_0,BaseH* giH
|
||
|
,BaseB* giB_0
|
||
|
,BaseB* giB_t // n'est définit "que" pour certains cas
|
||
|
,Mat_pleine* Aa0,Mat_pleine* Aafin
|
||
|
,Mat_pleine* gamma0,Mat_pleine* gammafin
|
||
|
,Mat_pleine* beta0,Mat_pleine* betafin
|
||
|
// exclusion du calcul
|
||
|
,const List_io<EnumTypeQuelconque>* exclure_Q
|
||
|
);
|
||
|
*/
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
#endif
|