// 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: 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 Valeur_multi(bool absolue,Enum_dure enu_t,const List_io& 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& 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& 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 Valeur_multi_interpoler_ou_calculer
(bool absolue, Enum_dure temps,const List_io& 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* 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& 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* 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 & tqi
,List_io& 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* exclure_Q
);
*/
};
#endif