// 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