// FICHIER : Met_ElemPoint.cc // CLASSE : Met_ElemPoint // 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: . # include using namespace std; //introduces namespace std #include #include #include "Sortie.h" #include "Met_ElemPoint.h" // -Constructeur par defaut Met_ElemPoint::Met_ElemPoint () : metrique_imposee(false) {}; // constructeur permettant de dimensionner uniquement certaine variables // dim = dimension de l'espace, tab = liste // des variables a initialiser Met_ElemPoint::Met_ElemPoint (int dim_base,int nbvec,const DdlElement& tabddl, const Tableau& tab,int nomb_noeud) : Met_abstraite (dim_base,nbvec,tabddl,tab, nomb_noeud) ,metrique_imposee(false) {// par défaut les composantes des gi sont définit unitaire (cf. Met_abstraite) }; // constructeur spécifique pour un point avec une métrique imposée // ici on ne donne pas le nombre de noeud ce qui permet de faire la différence // avec le constructeur précédent Met_ElemPoint::Met_ElemPoint (int dim_base,int nbvec,const DdlElement& tabddl, const Tableau& tab) : Met_abstraite (dim_base,nbvec,tabddl,tab, 0) ,metrique_imposee(true) {}; // constructeur de copie Met_ElemPoint::Met_ElemPoint (const Met_ElemPoint& a) : Met_abstraite (a) ,metrique_imposee(a.metrique_imposee) {}; // destructeur Met_ElemPoint::~Met_ElemPoint () {}; //------------------ méthodes spécifiques ------------------------ // cas explicite à tdt, toutes les grandeurs sont a 0 ou tdt // gradV_instantane : true : calcul du gradient de vitesse instantannée // premier_calcul : true : cas d'un premier calcul -> toutes les grandeurs sont calculées // false: uniquement les grandeurs à t sont calculées const Met_abstraite::Umat_cont& Met_ElemPoint::Calcul_grandeurs_Umat (bool premier_calcul) { // ------ pour l'instant on ne calcul rien -------- // mais ça fonctionne ensuite, cependant pour gagner du temps on courcircuite ! // return umat_cont; if (premier_calcul) { // la base initiale est fixe donc pas de calcul des giB_0 // calcul de la base a t doit déjà avoir été effectué avec la méthode Mise_a_jour Calcul_gijBB_0 (); // metrique base naturelle Calcul_gijHH_0 (); // composantes controvariantes à 0 Jacobien_0(); // jacobien initiale /// Calcul_gradVBB_moyen_t(tab_noeud,dphi,nombre_noeud); // gradient de vitesse moyen Calcul_gijBB_t (); // metrique à t Calcul_gijHH_t (); // metrique à t }; // --- calcul des grandeurs à tdt // calcul de la base a tdt: doit déjà avoir été effectué avec la méthode Mise_a_jour /// Calcul_gradVBB_moyen_tdt(tab_noeud,dphi,nombre_noeud); // gradient de vitesse moyen Calcul_gijBB_tdt (); // " Calcul_gijHH_tdt (); // composantes controvariantes à tdt Jacobien_tdt(); // calcul du jacobien a tdt Calcul_giH_tdt(); // base duale à tdt // liberation des tenseurs intermediaires LibereTenseur(); return umat_cont; }; // mise à jour de grandeur via les infos d'umat // il s'agit des grandeurs suivantes: giB à 0 t et tdt, void Met_ElemPoint::Mise_a_jour(const UmatAbaqus& umat) { // les giB_0 sont identiquent à la matrice identité, on ne les recalcule pas // récup des giB_t *giB_t = umat.giB_t; // récup des giB_tdt *giB_tdt = umat.giB_tdt; };