121 lines
4.7 KiB
C++
121 lines
4.7 KiB
C++
// 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) <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/>.
|
|
|
|
|
|
|
|
# include <iostream>
|
|
using namespace std; //introduces namespace std
|
|
#include <math.h>
|
|
#include <stdlib.h>
|
|
#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<Enum_variable_metrique>& 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<Enum_variable_metrique>& 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;
|
|
};
|
|
|
|
|