Herezh_dev/Elements/Mecanique/Deformation_gene/Met_abstraite1s2.cc
Gérard Rio ece68c42db V 7.012 : résolution du pb de l'utilisation de l'accélération dans une fonction nD
Introduction du calcul de l'accélération interpolée, au niveau de la métrique
Intro de nouveaux affichages au niveau des fonctions nD
2023-06-01 08:47:54 +02:00

807 lines
44 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/>.
//#include "Debug.h"
# include "Met_abstraite.h"
# include "Util.h"
using namespace std; //introduces namespace std
// a priori on n'en n'a pas besoin mais c'est pour que l'éditeur reconnaisse les différentes
// fonctions ??
// =========================================================================================
// vu la taille des executables le fichier est decompose en trois
// le premier : Met_abstraite1s2.cp concerne les constructeurs, destructeur et
// la gestion des variables
// le deuxième : Met_abstraite2s2.cp concerne le calcul des méthodes publiques
// le troisième: Met_abstraite2s2.cp concerne le calcul des méthodes privées
// =========================================================================================
// ***********$ il faut utiliser des références pour optimiser l'opérateur parenthèse
/// ceci dans la plupart des routines gourmandes !!!!!!!!!!!!!!!!!!!!
Met_abstraite::Met_abstraite () : // constructeur par defaut mettant les pointeurs a NULL
d_gijBB_t(),d_gijBB_tdt(),d2_gijBB_tdt(),d_gijHH_t(),d_gijHH_tdt(),d_jacobien_t(),d_jacobien_tdt(),
tab_ddl(),tab(),posi_tab(1),d_gradVBB_t(),d_gradVBB_tdt(),d_gradVmoyBB_t(),d_gradVmoyBB_tdt()
,V_moy_t(),V_moy_tdt(),nbddl_sup_xi(0)
{ dim_base = 0; nbvec_base = 0;
M0 = NULL;Mt = NULL;d_Mt = NULL;Mtdt = NULL;d_Mtdt = NULL;
V0 = NULL;Vt = NULL;d_Vt = NULL;Vtdt = NULL;d_Vtdt = NULL;
gamma0 = NULL;gammat = NULL;gammatdt = NULL;
giB_0 = NULL;giB_t = NULL; giB_tdt = NULL;
giH_0 = NULL;giH_t = NULL;giH_tdt = NULL;
gijBB_0 = NULL;gijBB_t = NULL;gijBB_tdt = NULL;
gijHH_0 = NULL;gijHH_t = NULL;gijHH_tdt = NULL;
gradVBB_t = NULL; gradVBB_tdt = NULL;gradVmoyBB_t=NULL;gradVmoyBB_tdt=NULL;
dmatV_moy_t=NULL; dmatV_moy_tdt = NULL;
d_giB_t = NULL;d_giB_tdt = NULL;
d_giH_t = NULL;d_giH_tdt = NULL;
nomb_noeud = 0; // a priori le nombre de noeud est nul
Init_conteneur_de_retour_methode(); // Init des conteneurs de retour de fonction
};
// constructeur permettant de dimensionner uniquement certaine variables
// dim = dimension de l'espace, nbvec = nb de vecteur des bases, tab = liste
// des variables a initialiser
Met_abstraite::Met_abstraite (int dim,int nbvec,const DdlElement& tabddl,
const Tableau<Enum_variable_metrique>& tabb,int nb_noeud
,int nnbddl_sup_xi):
tab_ddl(tabddl),tab(tabb),
d_gijBB_t(),d_gijBB_tdt(),d2_gijBB_tdt(),d_gijHH_t(),d_gijHH_tdt(),
d_jacobien_t(),d_jacobien_tdt(),posi_tab(1)
,d_gradVBB_t(),d_gradVBB_tdt(),d_gradVmoyBB_t(),d_gradVmoyBB_tdt()
,V_moy_t(),V_moy_tdt(),nbddl_sup_xi(nnbddl_sup_xi)
{ dim_base = dim; nbvec_base = nbvec;
Allocation();
nomb_noeud = nb_noeud;
Init_conteneur_de_retour_methode(); // mise à jour des conteneurs de retour de fonction
};
// Constructeur de copie :
Met_abstraite::Met_abstraite (const Met_abstraite& a) :
tab_ddl(a.tab_ddl), dim_base(a.dim_base) , nbvec_base(a.nbvec_base)
,nomb_noeud(a.nomb_noeud),tab(a.tab)
,jacobien_0(a.jacobien_0) , jacobien_t(a.jacobien_t),
jacobien_tdt(a.jacobien_tdt), d_gijBB_t() ,
d_gijBB_tdt (a.d_gijBB_tdt.Taille()), d_gijHH_t(a.d_gijHH_t.Taille()) ,
d2_gijBB_tdt(a.d2_gijBB_tdt.Taille1()), // a priori la matrice est carré
d_gijHH_tdt (a.d_gijHH_tdt.Taille()), d_jacobien_t(a.d_jacobien_t),
d_jacobien_tdt(a.d_jacobien_tdt),posi_tab(1),d_gradVBB_t(),d_gradVBB_tdt()
,d_gradVmoyBB_t(a.d_gradVmoyBB_t),d_gradVmoyBB_tdt(a.d_gradVmoyBB_tdt)
,V_moy_t(a.V_moy_t),V_moy_tdt(a.V_moy_tdt),nbddl_sup_xi(a.nbddl_sup_xi)
{ // on met à NULL les grandeurs pointées
M0 = NULL;Mt = NULL;d_Mt = NULL;Mtdt = NULL;d_Mtdt = NULL;
V0 = NULL;Vt = NULL;d_Vt = NULL;Vtdt = NULL;d_Vtdt = NULL;
gamma0 = NULL;gammat = NULL;gammatdt = NULL;
giB_0 = NULL;giB_t = NULL; giB_tdt = NULL;
giH_0 = NULL;giH_t = NULL;giH_tdt = NULL;
gijBB_0 = NULL;gijBB_t = NULL;gijBB_tdt = NULL;
gijHH_0 = NULL;gijHH_t = NULL;gijHH_tdt = NULL;
gradVmoyBB_t = NULL; gradVmoyBB_tdt = NULL;
gradVBB_t = NULL; gradVBB_tdt = NULL;
dmatV_moy_t = NULL; dmatV_moy_tdt = NULL;
d_giB_t = NULL;d_giB_tdt = NULL;
d_giH_t = NULL;d_giH_tdt = NULL;
// on recopie les grandeurs
Copie_met(a);
Init_conteneur_de_retour_methode(); // mise à jour des conteneurs de retour de fonction
};
Met_abstraite::~Met_abstraite ()
{ Deallocation();
};
/// surcharge de l'opérateur d'affectation
Met_abstraite& Met_abstraite::operator = (const Met_abstraite& met)
{ // copie des grandeurs pointées et désallocation si nécessaire
Copie_met(met);
// copie des grandeurs non pointées
tab=met.tab;
tab_ddl = met.tab_ddl;
dim_base = met.dim_base;
nbvec_base = met.nbvec_base;
nomb_noeud = met.nomb_noeud;
jacobien_0 = met.jacobien_0;
jacobien_t = met.jacobien_t;
jacobien_tdt = met.jacobien_tdt;
d_jacobien_t = met.d_jacobien_t;
d_jacobien_tdt = met.d_jacobien_tdt;
return (*this);
};
// affichage minimale des éléments de métrique de base
void Met_abstraite::Affiche() const
{ cout << "\n -- info elements de base de la metrique -- ";
if (giB_0 != NULL)
{ cout << "\n giB_0: "; giB_0->Affiche();};
if (giB_t != NULL)
{ cout << "\n giB_t: "; giB_t->Affiche();};
if (giB_tdt != NULL)
{ cout << "\n giB_tdt: "; giB_tdt->Affiche();};
if (giH_0 != NULL)
{ cout << "\n giH_0: "; giH_0->Affiche();};
if (giH_t != NULL)
{ cout << "\n giH_t: "; giH_t->Affiche();};
if (giH_tdt != NULL)
{ cout << "\n giH_tdt: "; giH_tdt->Affiche();};
if (gijBB_0 != NULL)
{ cout << "\n gijBB_0: "; gijBB_0->Ecriture(cout);}
if (gijBB_t != NULL)
{ cout << "\n gijBB_t: "; gijBB_t->Ecriture(cout);}
if (gijBB_tdt != NULL)
{ cout << "\n gijBB_tdt: "; gijBB_tdt->Ecriture(cout);}
if (gijHH_0 != NULL)
{ cout << "\n gijHH_0: "; gijHH_0->Ecriture(cout);}
if (gijHH_t != NULL)
{ cout << "\n gijHH_t: "; gijHH_t->Ecriture(cout);}
if (gijHH_tdt != NULL)
{ cout << "\n gijHH_tdt: "; gijHH_tdt->Ecriture(cout);}
cout << "\n jacobien_0= "<< jacobien_0
<< " jacobien_t= "<< jacobien_t
<< " jacobien_tdt= "<< jacobien_tdt;
cout << "\n -- fin info elements de metrique --" << flush;
};
// ------------------------ gestion de la memoire --------------------------
// Changement d'initialisation des differentes variables
void Met_abstraite::PlusInitVariables(Tableau<Enum_variable_metrique>& tab)
{ // on définit un tableau d'indicateurs pour gérer le tableau tab interne
int tabtaille = tab.Taille();
Tableau <bool> tabbool(tabtaille,false);
// on alloue en fonction des parametres
int nbddl_x = tab_ddl.NbDdl_famille(X1); // nombre de ddl en position
nbddl_x += nbddl_sup_xi; // on tiens compte de ddl sup éventuels
int nbddl_v = tab_ddl.NbDdl_famille(V1); // nombre de ddl en vitesse
nbddl_v += nbddl_sup_xi; // on tiens compte de ddl sup éventuels
if (Existe(tab,iM0) && (M0 == NULL) )
{M0 = new Coordonnee(dim_base);tabbool(Existe_num(tab,iM0))=true;}
if (Existe(tab,iMt) && (Mt == NULL) )
{Mt = new Coordonnee(dim_base);tabbool(Existe_num(tab,iMt))=true;}
if (Existe(tab,idMt) && (d_Mt == NULL) )
{Coordonnee toto(dim_base); d_Mt = new Tableau <Coordonnee> (nbddl_x,toto);
tabbool(Existe_num(tab,idMt))=true;}
if (Existe(tab,iMtdt) && (Mtdt == NULL) )
{Mtdt = new Coordonnee(dim_base);tabbool(Existe_num(tab,iMtdt))=true;}
if (Existe(tab,idMtdt) && (d_Mtdt == NULL) )
{Coordonnee toto(dim_base); d_Mtdt = new Tableau <Coordonnee> (nbddl_x,toto);
tabbool(Existe_num(tab,idMtdt))=true;}
if (Existe(tab,iV0) && (V0 == NULL) )
{V0 = new Coordonnee(dim_base);tabbool(Existe_num(tab,iV0))=true;}
if (Existe(tab,iVt) && (Vt == NULL) )
{Vt = new Coordonnee(dim_base);tabbool(Existe_num(tab,iVt))=true;}
if (Existe(tab,idVt) && (d_Vt == NULL) )
{Coordonnee toto(dim_base); d_Vt = new Tableau <Coordonnee> (nbddl_x,toto);
tabbool(Existe_num(tab,idVt))=true;}
if (Existe(tab,iVtdt) && (Vtdt == NULL) )
{Vtdt = new Coordonnee(dim_base);tabbool(Existe_num(tab,iVtdt))=true;}
if (Existe(tab,idVtdt) && (d_Vtdt == NULL) )
{Coordonnee toto(dim_base); d_Vtdt = new Tableau <Coordonnee> (nbddl_x,toto);
tabbool(Existe_num(tab,idVtdt))=true;}
if (Existe(tab,igamma0) && (gamma0 == NULL) )
{gamma0 = new Coordonnee(dim_base);tabbool(Existe_num(tab,igamma0))=true;}
if (Existe(tab,igammat) && (gammat == NULL) )
{gammat = new Coordonnee(dim_base);tabbool(Existe_num(tab,igammat))=true;}
if (Existe(tab,igammatdt) && (gammatdt == NULL) )
{gammatdt = new Coordonnee(dim_base);tabbool(Existe_num(tab,igammatdt))=true;}
if (Existe(tab,igiB_0) && (giB_0 == NULL) )
{giB_0 = new BaseB(dim_base,nbvec_base);tabbool(Existe_num(tab,igiB_0))=true;}
if (Existe(tab,igiB_t) && (giB_t == NULL) )
{giB_t = new BaseB(dim_base,nbvec_base);tabbool(Existe_num(tab,igiB_t))=true;}
if (Existe(tab,igiB_tdt) && (giB_tdt == NULL) )
{giB_tdt = new BaseB(dim_base,nbvec_base);tabbool(Existe_num(tab,igiB_tdt))=true;}
if (Existe(tab,igiH_0) && (giH_0 == NULL) )
{giH_0 = new BaseH (dim_base,nbvec_base);tabbool(Existe_num(tab,igiH_0))=true;}
if (Existe(tab,igiH_t) && (giH_t == NULL) )
{giH_t = new BaseH (dim_base,nbvec_base);tabbool(Existe_num(tab,igiH_t))=true;}
if (Existe(tab,igiH_tdt) && (giH_tdt == NULL) )
{giH_tdt = new BaseH (dim_base,nbvec_base);tabbool(Existe_num(tab,igiH_tdt))=true;}
if (Existe(tab,igijBB_0) && (gijBB_0 == NULL) )
{gijBB_0 = NevezTenseurBB(nbvec_base);tabbool(Existe_num(tab,igijBB_0))=true;}
if (Existe(tab,igijBB_t) && (gijBB_t == NULL) )
{gijBB_t = NevezTenseurBB(nbvec_base);tabbool(Existe_num(tab,igijBB_t))=true;}
if (Existe(tab,igijBB_tdt) && (gijBB_tdt == NULL) )
{gijBB_tdt = NevezTenseurBB(nbvec_base);tabbool(Existe_num(tab,igijBB_tdt))=true;}
if (Existe(tab,igijHH_0) && (gijHH_0 == NULL) )
{gijHH_0 = NevezTenseurHH(nbvec_base);tabbool(Existe_num(tab,igijHH_0))=true;}
if (Existe(tab,igijHH_t) && (gijHH_t == NULL) )
{gijHH_t = NevezTenseurHH(nbvec_base);tabbool(Existe_num(tab,igijHH_t))=true;}
if (Existe(tab,igijHH_tdt) && (gijHH_tdt == NULL) )
{gijHH_tdt = NevezTenseurHH(nbvec_base);tabbool(Existe_num(tab,igijHH_tdt))=true;}
if (Existe(tab,igradVmoyBB_t) && (gradVmoyBB_t == NULL) )
{if (nbvec_base != 1)
{gradVmoyBB_t = NevezTenseurBB(-nbvec_base);} // tenseur non symétrique
else
{gradVmoyBB_t = NevezTenseurBB(nbvec_base);} // cas 1D pas de différence symétrique non symétrique
tabbool(Existe_num(tab,igradVmoyBB_t))=true;
// on dimensionne également le tableau des vitesses moyennes aux noeuds
V_moy_t.Change_taille(nomb_noeud); for (int i=1;i<=nomb_noeud;i++) V_moy_t(i).Change_dim(dim_base);
// et leurs dérivées covariantes
if (dmatV_moy_t == NULL)
{dmatV_moy_t = new BaseB(dim_base,nbvec_base);};
}
if (Existe(tab,igradVmoyBB_tdt) && (gradVmoyBB_tdt == NULL) )
{if (nbvec_base != 1)
{gradVmoyBB_tdt = NevezTenseurBB(-nbvec_base);} // tenseur non symétrique
else
{gradVmoyBB_tdt = NevezTenseurBB(nbvec_base);} // cas 1D pas de différence symétrique non symétrique
tabbool(Existe_num(tab,igradVmoyBB_tdt))=true;
// on dimensionne également le tableau des vitesses moyennes aux noeuds
V_moy_tdt.Change_taille(nomb_noeud); for (int i=1;i<=nomb_noeud;i++) V_moy_tdt(i).Change_dim(dim_base);
// et leurs dérivées covariantes
if (dmatV_moy_t == NULL)
{dmatV_moy_tdt = new BaseB(dim_base,nbvec_base);};
}
if (Existe(tab,igradVBB_t) && (gradVBB_t == NULL) )
{if (nbvec_base != 1)
{gradVBB_t = NevezTenseurBB(-nbvec_base);} // tenseur non symétrique
else
{gradVBB_t = NevezTenseurBB(nbvec_base);} // cas 1D pas de différence symétrique non symétrique
tabbool(Existe_num(tab,igradVBB_t))=true;
}
if (Existe(tab,igradVBB_tdt) && (gradVBB_tdt == NULL) )
{if (nbvec_base != 1)
{gradVBB_tdt = NevezTenseurBB(-nbvec_base);} // tenseur non symétrique
else
{gradVBB_tdt = NevezTenseurBB(nbvec_base);} // cas 1D pas de différence symétrique non symétrique
tabbool(Existe_num(tab,igradVBB_tdt))=true;
}
if (Existe(tab,id_giB_t) && (d_giB_t == NULL) )
{ BaseB truc(dim_base,nbvec_base,0);
tabbool(Existe_num(tab,id_giB_t))=true;
d_giB_t = new Tableau <BaseB> (nbddl_x,truc); }
if (Existe(tab,id_giB_tdt) && (d_giB_tdt == NULL) )
{ BaseB truc(dim_base,nbvec_base,0);
tabbool(Existe_num(tab,id_giB_tdt))=true;
d_giB_tdt = new Tableau <BaseB> (nbddl_x,truc); }
if (Existe(tab,id_giH_t) && (d_giH_t == NULL) )
{ BaseH truc(dim_base,nbvec_base,0);
tabbool(Existe_num(tab,id_giH_t))=true;
d_giH_t = new Tableau <BaseH> (nbddl_x,truc); }
if (Existe(tab,id_giH_tdt) && (d_giH_tdt == NULL) )
{ BaseH truc(dim_base,nbvec_base,0);
tabbool(Existe_num(tab,id_giH_tdt))=true;
d_giH_tdt = new Tableau <BaseH> (nbddl_x,truc); }
if (Existe(tab,id_gijBB_t) && ( d_gijBB_t.Taille() == 0) )
{ tabbool(Existe_num(tab,id_gijBB_t))=true;
d_gijBB_t.Change_taille(nbddl_x);
for (int i=1;i<=nbddl_x;i++)
d_gijBB_t(i) = NevezTenseurBB(nbvec_base); }
if (Existe(tab,id_gijBB_tdt) && ( d_gijBB_tdt.Taille() == 0) )
{ tabbool(Existe_num(tab,id_gijBB_tdt))=true;
d_gijBB_tdt.Change_taille(nbddl_x);
for (int i=1;i<=nbddl_x;i++)
d_gijBB_tdt(i) = NevezTenseurBB(nbvec_base); }
if (Existe(tab,id2_gijBB_tdt) && ( d2_gijBB_tdt.Taille1() == 0) )
{ tabbool(Existe_num(tab,id2_gijBB_tdt))=true;
d2_gijBB_tdt.Change_taille(nbddl_x);
for (int i=1;i<=nbddl_x;i++)
for (int j=1;j<=nbddl_x;j++)
d2_gijBB_tdt(i,j) = NevezTenseurBB(nbvec_base); }
if (Existe(tab,id_gijHH_t) && (d_gijHH_t.Taille() == 0) )
{ tabbool(Existe_num(tab,id_gijHH_t))=true;
d_gijHH_t.Change_taille(nbddl_x);
for (int i=1;i<=nbddl_x;i++)
d_gijHH_t(i) = NevezTenseurHH(nbvec_base); }
if (Existe(tab,id_gijHH_tdt) && (d_gijHH_tdt.Taille() == 0) )
{ tabbool(Existe_num(tab,id_gijHH_tdt))=true;
d_gijHH_tdt.Change_taille(nbddl_x);
for (int i=1;i<=nbddl_x;i++)
d_gijHH_tdt(i) = NevezTenseurHH(nbvec_base); }
if (Existe(tab,id_jacobien_t) && (d_jacobien_t.Taille() == 0) )
{d_jacobien_t.Change_taille(nbddl_x);tabbool(Existe_num(tab,id_jacobien_t))=true;}
if (Existe(tab,id_jacobien_tdt) && (d_jacobien_tdt.Taille() == 0) )
{d_jacobien_tdt.Change_taille(nbddl_x);tabbool(Existe_num(tab,id_jacobien_tdt))=true;}
if (Existe(tab,id_gradVmoyBB_t) && ( d_gradVmoyBB_t.Taille() == 0) )
{ tabbool(Existe_num(tab,id_gradVmoyBB_t))=true;
d_gradVmoyBB_t.Change_taille(nbddl_v);
for (int i=1;i<=nbddl_v;i++)
d_gradVmoyBB_t(i) = NevezTenseurBB(nbvec_base); }
if (Existe(tab,id_gradVmoyBB_tdt) && ( d_gradVmoyBB_tdt.Taille() == 0) )
{ tabbool(Existe_num(tab,id_gradVmoyBB_tdt))=true;
d_gradVmoyBB_tdt.Change_taille(nbddl_v);
for (int i=1;i<=nbddl_v;i++)
d_gradVmoyBB_tdt(i) = NevezTenseurBB(nbvec_base); }
if (Existe(tab,id_gradVBB_t) && ( d_gradVBB_t.Taille() == 0) )
{ tabbool(Existe_num(tab,id_gradVBB_t))=true;
d_gradVBB_t.Change_taille(nbddl_v);
for (int i=1;i<=nbddl_v;i++)
d_gradVBB_t(i) = NevezTenseurBB(nbvec_base); }
if (Existe(tab,id_gradVBB_tdt) && ( d_gradVBB_tdt.Taille() == 0) )
{ tabbool(Existe_num(tab,id_gradVBB_tdt))=true;
d_gradVBB_tdt.Change_taille(nbddl_v);
for (int i=1;i<=nbddl_v;i++)
d_gradVBB_tdt(i) = NevezTenseurBB(nbvec_base); }
// maintenant on met à jour le tableau local tab,
int nbplus = 0;
// on compte les éléments à rajouter
for (int i=1;i<=tabtaille;i++) if(tabbool(i)) nbplus++;
// on agrandi le tableau existant et on le complète
int taille_i = this->tab.Taille();
this->tab.Change_taille(taille_i + nbplus);
nbplus = 0;
for (int i=1;i<=tabtaille;i++)
if(tabbool(i))
{ nbplus++; this->tab(taille_i + nbplus) = tab(i);}
// comme on a changé tab, on réinitialise posi_tab
posi_tab = 1;
Init_conteneur_de_retour_methode(); // Init des conteneurs de retour de fonction
};
// initialisation de la dimension , du nb de vecteur et du tableau de ddl
// cette fonction n'agi qu'une fois , lors des autres appels elle ne fait rien
void Met_abstraite::Dim_NbVec(int dim,int nbvec,DdlElement& tabddl,int nb_noeud_interpol)
{ if(dim_base == 0)
dim_base = dim;
if(nbvec_base == 0)
nbvec_base = nbvec;
if(tab_ddl.NbDdl() == 0)
tab_ddl = tabddl;
nomb_noeud=nb_noeud_interpol;
};
//---------------------------------- fonctions privées -------------------------------------------
//== Existe, recherche si un element de l'enumeration existe
// retourne 1 si x appartiend au tableau 0 sinon
bool Met_abstraite::Existe(Tableau<Enum_variable_metrique> &tab,const Enum_variable_metrique& x)
{ int tabtaille = tab.Taille();
// dans le cas ou posi_tab concernait un tableau plus grand (par exemple le tableau tab de la métrique
// il n'est pas utilisatble on le remet à 1
if (posi_tab >= tabtaille) posi_tab = 1;
for (int i = Met_abstraite::posi_tab; i<= tabtaille; i++)
if(x == tab(i)) { Met_abstraite::posi_tab = i;
return true;}
if (Met_abstraite::posi_tab <= tabtaille)
{for (int i = 1;i< Met_abstraite::posi_tab;i++)
if(x == tab(i)) { Met_abstraite::posi_tab = i;
return true;}
}
else { cout << "\n erreur dans posi_tab = " << posi_tab
<< " \n bool Met_abstraite::Existe(...";
Sortie(1);
}
return false ;
};
//== Existe_num, recherche si un element de l'enumeration existe
// retourne le numéro si x appartiend au tableau, 0 sinon
int Met_abstraite::Existe_num(Tableau<Enum_variable_metrique>& tab,const Enum_variable_metrique& x)
{ int tabtaille = tab.Taille();
// dans le cas ou posi_tab concernait un tableau plus grand (par exemple le tableau tab de la métrique
// il n'est pas utilisatble on le remet à 1
if (posi_tab >= tabtaille) posi_tab = 1;
for (int i = 1; i<= tabtaille; i++)
if(x == tab(i)) { Met_abstraite::posi_tab = i;
return i;}
if (Met_abstraite::posi_tab <= tabtaille)
{for (int i = 1;i< Met_abstraite::posi_tab;i++)
if(x == tab(i)) { Met_abstraite::posi_tab = i;
return i;}
}
else { cout << "\n erreur dans posi_tab = " << posi_tab
<< " \n int Met_abstraite::Existe(...";
Sortie(1);
}
return 0 ;
};
// allocation de la memoire
void Met_abstraite::Allocation ()
{
// on met les pointeurs a NULL
M0 = NULL;Mt = NULL;d_Mt = NULL;Mtdt = NULL;d_Mtdt = NULL;
V0 = NULL;Vt = NULL;d_Vt = NULL;Vtdt = NULL;d_Vtdt = NULL;
gamma0 = NULL;gammat = NULL;gammatdt = NULL;
giB_0 = NULL;giB_t = NULL; giB_tdt = NULL;
giH_0 = NULL;giH_t = NULL;giH_tdt = NULL;
gijBB_0 = NULL;gijBB_t = NULL;gijBB_tdt = NULL;
gijHH_0 = NULL;gijHH_t = NULL;gijHH_tdt = NULL;
gradVmoyBB_t = NULL; gradVmoyBB_tdt = NULL;
gradVBB_t = NULL; gradVBB_tdt = NULL;
dmatV_moy_t = NULL; dmatV_moy_tdt = NULL;
d_giB_t = NULL;d_giB_tdt = NULL;
d_giH_t = NULL;d_giH_tdt = NULL;
// on alloue en fonction des parametres
int nbddl_x = tab_ddl.NbDdl_famille(X1); // nombre de ddl en position
nbddl_x += nbddl_sup_xi; // on tiens compte de ddl sup éventuels
int nbddl_v = tab_ddl.NbDdl_famille(V1); // nombre de ddl en vitesse
nbddl_v += nbddl_sup_xi; // on tiens compte de ddl sup éventuels
if (Existe(tab,iM0)) M0 = new Coordonnee(dim_base);
if (Existe(tab,iMt)) Mt = new Coordonnee(dim_base);
if (Existe(tab,idMt))
{Coordonnee toto(dim_base); d_Mt = new Tableau <Coordonnee> (nbddl_x,toto);}
if (Existe(tab,iMtdt)) Mtdt = new Coordonnee(dim_base);
if (Existe(tab,idMtdt))
{Coordonnee toto(dim_base); d_Mtdt = new Tableau <Coordonnee> (nbddl_x,toto);}
if (Existe(tab,iV0)) V0 = new Coordonnee(dim_base);
if (Existe(tab,iVt)) Vt = new Coordonnee(dim_base);
if (Existe(tab,idVt))
{Coordonnee toto(dim_base); d_Vt = new Tableau <Coordonnee> (nbddl_x,toto);}
if (Existe(tab,iVtdt)) Vtdt = new Coordonnee(dim_base);
if (Existe(tab,idVtdt))
{Coordonnee toto(dim_base); d_Vtdt = new Tableau <Coordonnee> (nbddl_x,toto);}
if (Existe(tab,igamma0)) gamma0 = new Coordonnee(dim_base);
if (Existe(tab,igammat)) gammat = new Coordonnee(dim_base);
if (Existe(tab,igammatdt)) gammatdt = new Coordonnee(dim_base);
if (Existe(tab,igiB_0)) giB_0 = new BaseB(dim_base,nbvec_base);
if (Existe(tab,igiB_t)) giB_t = new BaseB(dim_base,nbvec_base);
if (Existe(tab,igiB_tdt)) giB_tdt = new BaseB(dim_base,nbvec_base);
if (Existe(tab,igiH_0)) giH_0 = new BaseH (dim_base,nbvec_base);
if (Existe(tab,igiH_t)) giH_t = new BaseH (dim_base,nbvec_base);
if (Existe(tab,igiH_tdt)) giH_tdt = new BaseH (dim_base,nbvec_base);
if (Existe(tab,igijBB_0)) gijBB_0 = NevezTenseurBB(nbvec_base);
if (Existe(tab,igijBB_t)) gijBB_t = NevezTenseurBB(nbvec_base);
if (Existe(tab,igijBB_tdt)) gijBB_tdt = NevezTenseurBB(nbvec_base);
if (Existe(tab,igijHH_0)) gijHH_0 = NevezTenseurHH(nbvec_base);
if (Existe(tab,igijHH_t)) gijHH_t = NevezTenseurHH(nbvec_base);
if (Existe(tab,igijHH_tdt)) gijHH_tdt = NevezTenseurHH(nbvec_base);
if (Existe(tab,igradVmoyBB_t))
{gradVmoyBB_t = NevezTenseurBB(-nbvec_base);
// on dimensionne également le tableau des vitesses moyennes aux noeuds
V_moy_t.Change_taille(nomb_noeud); for (int i=1;i<=nomb_noeud;i++) V_moy_t(i).Change_dim(dim_base);
// et leurs dérivées covariantes
dmatV_moy_t = new BaseB(dim_base,nbvec_base);
};
if (Existe(tab,igradVmoyBB_tdt))
{gradVmoyBB_tdt = NevezTenseurBB(-nbvec_base);
// on dimensionne également le tableau des vitesses moyennes aux noeuds
V_moy_tdt.Change_taille(nomb_noeud); for (int i=1;i<=nomb_noeud;i++) V_moy_tdt(i).Change_dim(dim_base);
// et leurs dérivées covariantes
dmatV_moy_tdt = new BaseB(dim_base,nbvec_base);
};
if (Existe(tab,igradVBB_t)) gradVBB_t = NevezTenseurBB(-nbvec_base);
if (Existe(tab,igradVBB_tdt)) gradVBB_tdt = NevezTenseurBB(-nbvec_base);
if (Existe(tab,id_giB_t)) { BaseB truc(dim_base,nbvec_base,0);
d_giB_t = new Tableau <BaseB> (nbddl_x,truc); }
if (Existe(tab,id_giB_tdt)) { BaseB truc(dim_base,nbvec_base,0);
d_giB_tdt = new Tableau <BaseB> (nbddl_x,truc); }
if (Existe(tab,id_giH_t)) { BaseH truc(dim_base,nbvec_base,0);
d_giH_t = new Tableau <BaseH> (nbddl_x,truc); }
if (Existe(tab,id_giH_tdt)) { BaseH truc(dim_base,nbvec_base,0);
d_giH_tdt = new Tableau <BaseH> (nbddl_x,truc); }
if (Existe(tab,id_gijBB_t)) { d_gijBB_t.Change_taille(nbddl_x);
for (int i=1;i<=nbddl_x;i++)
d_gijBB_t(i) = NevezTenseurBB(nbvec_base); }
if (Existe(tab,id_gijBB_tdt)) { d_gijBB_tdt.Change_taille(nbddl_x);
for (int i=1;i<=nbddl_x;i++)
d_gijBB_tdt(i) = NevezTenseurBB(nbvec_base); }
if (Existe(tab,id2_gijBB_tdt)) { d2_gijBB_tdt.Change_taille(nbddl_x);
for (int i=1;i<=nbddl_x;i++)
for (int j=1;j<=nbddl_x;j++)
d2_gijBB_tdt(i,j) = NevezTenseurBB(nbvec_base); }
if (Existe(tab,id_gijHH_t)) { d_gijHH_t.Change_taille(nbddl_x);
for (int i=1;i<=nbddl_x;i++)
d_gijHH_t(i) = NevezTenseurHH(nbvec_base); }
if (Existe(tab,id_gijHH_tdt)) { d_gijHH_tdt.Change_taille(nbddl_x);
for (int i=1;i<=nbddl_x;i++)
d_gijHH_tdt(i) = NevezTenseurHH(nbvec_base); }
if (Existe(tab,id_jacobien_t)) d_jacobien_t.Change_taille(nbddl_x);
if (Existe(tab,id_jacobien_tdt)) d_jacobien_tdt.Change_taille(nbddl_x);
if (Existe(tab,id_gradVmoyBB_t)) { d_gradVmoyBB_t.Change_taille(nbddl_v);
for (int i=1;i<=nbddl_v;i++)
d_gradVmoyBB_t(i) = NevezTenseurBB(nbvec_base); }
if (Existe(tab,id_gradVmoyBB_tdt)) { d_gradVmoyBB_tdt.Change_taille(nbddl_v);
for (int i=1;i<=nbddl_v;i++)
d_gradVmoyBB_tdt(i) = NevezTenseurBB(nbvec_base); }
if (Existe(tab,id_gradVBB_t)) { d_gradVBB_t.Change_taille(nbddl_v);
for (int i=1;i<=nbddl_v;i++)
d_gradVBB_t(i) = NevezTenseurBB(nbvec_base); }
if (Existe(tab,id_gradVBB_tdt)) { d_gradVBB_tdt.Change_taille(nbddl_v);
for (int i=1;i<=nbddl_v;i++)
d_gradVBB_tdt(i) = NevezTenseurBB(nbvec_base); }
};
// deallocation de la memoire compléte
void Met_abstraite::Deallocation()
{ Deallocation(tab);
// mise a zero des tableaux
tab_ddl.TailleZero();
dim_base = 0;
nbvec_base = 0;
posi_tab=1;
};
// deallocation de la memoire en fonction d'un tableau d'énumération
void Met_abstraite::Deallocation( Tableau<Enum_variable_metrique>& tib)
{
if (Existe(tib,iM0)) {delete M0;M0=NULL;};
if (Existe(tib,iMt)) {delete Mt;Mt=NULL;};
if (Existe(tib,idMt)) {delete d_Mt;d_Mt=NULL;};
if (Existe(tib,iMtdt)) {delete Mtdt;Mtdt=NULL;};
if (Existe(tib,idMtdt)) {delete d_Mtdt;d_Mtdt=NULL;};
if (Existe(tib,iV0)) {delete V0;V0=NULL;};
if (Existe(tib,iVt)) {delete Vt;Vt=NULL;};
if (Existe(tib,idVt)) {delete d_Vt;d_Vt=NULL;};
if (Existe(tib,iVtdt)) {delete Vtdt;Vtdt=NULL;};
if (Existe(tib,idVtdt)) {delete d_Vtdt;d_Vtdt=NULL;};
if (Existe(tib,igamma0)) {delete gamma0;gamma0=NULL;};
if (Existe(tib,igammat)) {delete gammat;gammat=NULL;};
if (Existe(tib,igammatdt)) {delete gammatdt;gammatdt=NULL;};
if (Existe(tib,igiB_0)) {delete giB_0;giB_0=NULL;};
if (Existe(tib,igiB_t)) {delete giB_t;giB_t=NULL;};
if (Existe(tib,igiB_tdt)) {delete giB_tdt;giB_tdt=NULL;};
if (Existe(tib,igiH_0)) {delete giH_0;giH_0=NULL;};
if (Existe(tib,igiH_t)) {delete giH_t;giH_t=NULL;};
if (Existe(tib,igiH_tdt)) {delete giH_tdt;giH_tdt=NULL;};
if (Existe(tib,igijBB_0)) {delete gijBB_0;gijBB_0=NULL;};
if (Existe(tib,igijBB_t)) {delete gijBB_t;gijBB_t=NULL;};
if (Existe(tib,igijBB_tdt)) {delete gijBB_tdt;gijBB_tdt=NULL;};
if (Existe(tib,igijHH_0)) {delete gijHH_0;gijHH_0=NULL;};
if (Existe(tib,igijHH_t)) {delete gijHH_t;gijHH_t=NULL;};
if (Existe(tib,igijHH_tdt)) {delete gijHH_tdt;gijHH_tdt=NULL;};
if (Existe(tib,igradVmoyBB_t))
{delete gradVmoyBB_t;gradVmoyBB_t=NULL;
delete dmatV_moy_t; dmatV_moy_t=NULL;
};
if (Existe(tib,igradVmoyBB_tdt))
{delete gradVmoyBB_tdt;gradVmoyBB_tdt=NULL;
delete dmatV_moy_tdt; dmatV_moy_tdt=NULL;
};
if (Existe(tib,igradVBB_t)) {delete gradVBB_t;gradVBB_t=NULL;};
if (Existe(tib,igradVBB_tdt)) {delete gradVBB_tdt;gradVBB_tdt=NULL;};
if (Existe(tib,id_giB_t)) {delete d_giB_t;d_giB_t=NULL;};
if (Existe(tib,id_giB_tdt)) {delete d_giB_tdt;d_giB_tdt=NULL;};
if (Existe(tib,id_giH_t)) {delete d_giH_t;d_giH_t=NULL;};
if (Existe(tib,id_giH_tdt)) {delete d_giH_tdt;d_giH_tdt=NULL;};
if (Existe(tib,id_gijBB_t)) { for (int i = 1; i<= d_gijBB_t.Taille(); i++)
delete d_gijBB_t(i);
d_gijBB_t.Change_taille(0); }
if (Existe(tib,id_gijBB_tdt)) { for (int i = 1; i<= d_gijBB_tdt.Taille(); i++)
delete d_gijBB_tdt(i);
d_gijBB_tdt.Change_taille(0); }
if (Existe(tib,id2_gijBB_tdt))
{ for (int i = 1; i<= d2_gijBB_tdt.Taille1(); i++)
for (int j = 1; j<= d2_gijBB_tdt.Taille2(); j++)
delete d2_gijBB_tdt(i,j);
d2_gijBB_tdt.Change_taille(0); }
if (Existe(tib,id_gijHH_t)) { for (int i = 1; i<= d_gijHH_t.Taille(); i++)
delete d_gijHH_t(i);
d_gijHH_t.Change_taille(0); }
if (Existe(tib,id_gijHH_tdt)) { for (int i = 1; i<= d_gijHH_tdt.Taille(); i++)
delete d_gijHH_tdt(i);
d_gijHH_tdt.Change_taille(0); }
if (Existe(tib,id_jacobien_t)) d_jacobien_t.Change_taille(0);
if (Existe(tib,id_jacobien_tdt)) d_jacobien_tdt.Change_taille(0);
if (Existe(tib,id_gradVmoyBB_t)) { for (int i = 1; i<= d_gradVmoyBB_t.Taille(); i++)
delete d_gradVmoyBB_t(i);
d_gradVmoyBB_t.Change_taille(0); }
if (Existe(tib,id_gradVmoyBB_tdt)) { for (int i = 1; i<= d_gradVmoyBB_tdt.Taille(); i++)
delete d_gradVmoyBB_tdt(i);
d_gradVmoyBB_tdt.Change_taille(0); }
if (Existe(tib,id_gradVBB_t)) { for (int i = 1; i<= d_gradVBB_t.Taille(); i++)
delete d_gradVBB_t(i);
d_gradVBB_t.Change_taille(0); }
if (Existe(tib,id_gradVBB_tdt)) { for (int i = 1; i<= d_gradVBB_tdt.Taille(); i++)
delete d_gradVBB_tdt(i);
d_gradVBB_tdt.Change_taille(0); }
posi_tab=1; // car le tableau tab a changé
// maintenant on reinitialise à NULL les variables de retour
Impli toto; ex_impli = toto;
};
// copie en fonction de l'instance passée
// concerne que les grandeurs pointées
void Met_abstraite::Copie_met(const Met_abstraite& a)
{int nbddl_x = tab_ddl.NbDdl_famille(X1); // nombre de ddl en position
nbddl_sup_xi = a.nbddl_sup_xi;
nbddl_x += nbddl_sup_xi; // on tiens compte de ddl sup éventuels
int nbddl_v = tab_ddl.NbDdl_famille(V1); // nombre de ddl en vitesse
nbddl_v += nbddl_sup_xi; // on tiens compte de ddl sup éventuels
nomb_noeud = a.nomb_noeud;
if (a.M0 != NULL)
{if (M0==NULL) M0 = new Coordonnee(*(a.M0)); else *M0=*a.M0;}
else {if (M0!=NULL) {delete M0;M0=NULL;}}
if (a.Mt != NULL)
{if (Mt==NULL) Mt = new Coordonnee(*(a.Mt)); else *Mt=*a.Mt;}
else {if (Mt!=NULL) {delete Mt;Mt=NULL;}}
if (a.d_Mt != NULL)
{if (d_Mt==NULL) d_Mt = new Tableau <Coordonnee> (*(a.d_Mt)); else *d_Mt=*a.d_Mt;}
else {if (d_Mt != NULL) {delete d_Mt;d_Mt=NULL;}}
if (a.Mtdt != NULL)
{if (Mtdt==NULL) Mtdt = new Coordonnee(*(a.Mtdt)); else *Mtdt=*a.Mtdt;}
else {if (Mtdt!=NULL) {delete Mtdt;Mtdt=NULL;}}
if (a.d_Mtdt != NULL)
{if (d_Mtdt==NULL) d_Mtdt = new Tableau <Coordonnee> (*(a.d_Mtdt)); else *d_Mtdt=*a.d_Mtdt;}
else {if (d_Mtdt != NULL) {delete d_Mtdt;d_Mtdt=NULL;}}
if (a.V0 != NULL)
{if (V0==NULL) V0 = new Coordonnee(*(a.V0)); else *V0=*a.V0;}
else {if (V0!=NULL) {delete V0;V0=NULL;}}
if (a.Vt != NULL)
{if (Vt==NULL) Vt = new Coordonnee(*(a.Vt)); else *Vt=*a.Vt;}
else {if (Vt!=NULL) {delete Vt;Vt=NULL;}}
if (a.d_Vt != NULL)
{if (d_Vt==NULL) d_Vt = new Tableau <Coordonnee> (*(a.d_Vt)); else *d_Vt=*a.d_Vt;}
else {if (d_Vt != NULL) {delete d_Vt;d_Vt=NULL;}}
if (a.Vtdt != NULL)
{if (Vtdt==NULL) Vtdt = new Coordonnee(*(a.Vtdt)); else *Vtdt=*a.Vtdt;}
else {if (Vtdt!=NULL) {delete Vtdt;Vtdt=NULL;}}
if (a.d_Vtdt != NULL)
{if (d_Vtdt==NULL) d_Vtdt = new Tableau <Coordonnee> (*(a.d_Vtdt)); else *d_Vtdt=*a.d_Vtdt;}
else {if (d_Vtdt != NULL) {delete d_Vtdt;d_Vtdt=NULL;}}
if (a.gamma0 != NULL)
{if (gamma0==NULL) gamma0 = new Coordonnee(*(a.gamma0)); else *gamma0=*a.gamma0;}
else {if (gamma0!=NULL) {delete gamma0;gamma0=NULL;}}
if (a.gammat != NULL)
{if (gammat==NULL) gammat = new Coordonnee(*(a.gammat)); else *gammat=*a.gammat;}
else {if (gammat!=NULL) {delete gammat;gammat=NULL;}}
if (a.gammatdt != NULL)
{if (gammatdt==NULL) gammatdt = new Coordonnee(*(a.gammatdt)); else *gammatdt=*a.gammatdt;}
else {if (gammatdt!=NULL) {delete gammatdt;gammatdt=NULL;}}
if (a.giB_0 != NULL)
{if (giB_0==NULL) giB_0 = new BaseB(*(a.giB_0)); else *giB_0=*a.giB_0;}
else {if (giB_0!=NULL) {delete giB_0;giB_0 = NULL;}}
if (a.giB_t != NULL)
{if (giB_t==NULL) giB_t = new BaseB(*(a.giB_t)); else *giB_t=*a.giB_t;}
else {if (giB_t!=NULL) {delete giB_t;giB_t = NULL;}}
if (a.giB_tdt != NULL)
{if (giB_tdt==NULL) giB_tdt = new BaseB(*(a.giB_tdt)); else *giB_tdt=*a.giB_tdt;}
else {if (giB_tdt!=NULL) {delete giB_tdt;giB_tdt = NULL;}}
if (a.giH_0 != NULL)
{if (giH_0==NULL) giH_0 = new BaseH(*(a.giH_0)); else *giH_0=*a.giH_0;}
else {if (giH_0!=NULL) {delete giH_0;giH_0 = NULL;}}
if (a.giH_t != NULL)
{if (giH_t==NULL) giH_t = new BaseH(*(a.giH_t)); else *giH_t=*a.giH_t;}
else {if (giH_t!=NULL) {delete giH_t;giH_t = NULL;}}
if (a.giH_tdt != NULL)
{if (giH_tdt==NULL) giH_tdt = new BaseH(*(a.giH_tdt)); else *giH_tdt=*a.giH_tdt;}
else {if (giH_tdt!=NULL) {delete giH_tdt;giH_tdt = NULL;}}
if (a.gijBB_0 != NULL)
{if (gijBB_0==NULL) gijBB_0 = NevezTenseurBB(*a.gijBB_0);else *gijBB_0=*a.gijBB_0;}
else {if (gijBB_0!=NULL) {delete gijBB_0;gijBB_0 = NULL;}}
if (a.gijBB_t != NULL)
{if (gijBB_t==NULL) gijBB_t = NevezTenseurBB(*a.gijBB_t);else *gijBB_t=*a.gijBB_t;}
else {if (gijBB_t!=NULL) {delete gijBB_t;gijBB_t = NULL;}}
if (a.gijBB_tdt != NULL)
{if (gijBB_tdt==NULL) gijBB_tdt = NevezTenseurBB(*a.gijBB_tdt);else *gijBB_tdt=*a.gijBB_tdt;}
else {if (gijBB_tdt!=NULL) {delete gijBB_tdt;gijBB_tdt = NULL;}}
if (a.gijHH_0 != NULL)
{if (gijHH_0==NULL) gijHH_0 = NevezTenseurHH(*a.gijHH_0);else *gijHH_0=*a.gijHH_0;}
else {if (gijHH_0!=NULL) {delete gijHH_0;gijHH_0 = NULL;}}
if (a.gijHH_t != NULL)
{if (gijHH_t==NULL) gijHH_t = NevezTenseurHH(*a.gijHH_t);else *gijHH_t=*a.gijHH_t;}
else {if (gijHH_t!=NULL) {delete gijHH_t;gijHH_t = NULL;}}
if (a.gijHH_tdt != NULL)
{if (gijHH_tdt==NULL) gijHH_tdt = NevezTenseurHH(*a.gijHH_tdt);else *gijHH_tdt=*a.gijHH_tdt;}
else {if (gijHH_tdt!=NULL) {delete gijHH_tdt;gijHH_tdt = NULL;}}
if (a.gradVmoyBB_t != NULL)
{if (gradVmoyBB_t==NULL) gradVmoyBB_t = NevezTenseurBB(*a.gradVmoyBB_t);else *gradVmoyBB_t=*a.gradVmoyBB_t;}
else {if (gradVmoyBB_t!=NULL) {delete gradVmoyBB_t;gradVmoyBB_t = NULL;}}
if (a.gradVmoyBB_tdt != NULL)
{if (gradVmoyBB_tdt==NULL) gradVmoyBB_tdt = NevezTenseurBB(*a.gradVmoyBB_tdt);else *gradVmoyBB_tdt=*a.gradVmoyBB_tdt;}
else {if (gradVmoyBB_tdt!=NULL) {delete gradVmoyBB_tdt;gradVmoyBB_tdt = NULL;}}
if (a.gradVBB_t != NULL)
{if (gradVBB_t==NULL) gradVBB_t = NevezTenseurBB(*a.gradVBB_t);else *gradVBB_t=*a.gradVBB_t;}
else {if (gradVBB_t!=NULL) {delete gradVBB_t;gradVBB_t = NULL;}}
if (a.gradVBB_tdt != NULL)
{if (gradVBB_tdt==NULL) gradVBB_tdt = NevezTenseurBB(*a.gradVBB_tdt);else *gradVBB_tdt=*a.gradVBB_tdt;}
else {if (gradVBB_tdt!=NULL) {delete gradVBB_tdt;gradVBB_tdt = NULL;}}
if (a.d_giB_t != NULL)
{if (d_giB_t==NULL) d_giB_t = new Tableau <BaseB>( *a.d_giB_t);else *d_giB_t = *a.d_giB_t;}
else {if (d_giB_t!=NULL) {delete d_giB_t;d_giB_t = NULL;} }
if (a.d_giB_tdt != NULL)
{if (d_giB_tdt==NULL) d_giB_tdt = new Tableau <BaseB>( *a.d_giB_tdt);else *d_giB_tdt = *a.d_giB_tdt;}
else {if (d_giB_tdt!=NULL) {delete d_giB_tdt;d_giB_tdt = NULL;} }
if (a.d_giH_t != NULL)
{if (d_giH_t==NULL) d_giH_t = new Tableau <BaseH>( *a.d_giH_t);else *d_giH_t = *a.d_giH_t;}
else {if (d_giH_t!=NULL) {delete d_giH_t;d_giH_t = NULL;} }
if (a.d_giH_tdt != NULL)
{if (d_giH_tdt==NULL) d_giH_tdt = new Tableau <BaseH>( *a.d_giH_tdt);else *d_giH_tdt = *a.d_giH_tdt;}
else {if (d_giH_tdt!=NULL) {delete d_giH_tdt;d_giH_tdt = NULL;} }
if (Existe(tab,id_gijBB_t))
{ d_gijBB_t.Change_taille(a.d_gijBB_t.Taille());
for (int i=1;i<=nbddl_x;i++)
{ d_gijBB_t(i) = NevezTenseurBB(nbvec_base);
*((d_gijBB_t)(i)) = *((a.d_gijBB_t)(i)) ; } }
else d_gijBB_t.Change_taille(0);
if (Existe(tab,id_gijBB_tdt))
{ d_gijBB_tdt.Change_taille(a.d_gijBB_tdt.Taille());
for (int i=1;i<=nbddl_x;i++)
{ d_gijBB_tdt(i) = NevezTenseurBB(nbvec_base);
*((d_gijBB_tdt)(i)) = *((a.d_gijBB_tdt)(i)) ; }}
else d_gijBB_tdt.Change_taille(0);
if (Existe(tab,id2_gijBB_tdt))
{ d2_gijBB_tdt.Change_taille(a.d2_gijBB_tdt.Taille1()); // a priori carré
for (int i=1;i<=nbddl_x;i++)
for (int j=1;j<=nbddl_x;j++)
{ d2_gijBB_tdt(i,j) = NevezTenseurBB(nbvec_base);
*((d2_gijBB_tdt)(i,j)) = *((a.d2_gijBB_tdt)(i,j)) ; }}
else d2_gijBB_tdt.Change_taille(0);
if (Existe(tab,id_gijHH_t))
{ d_gijHH_t.Change_taille(a.d_gijHH_t.Taille());
for (int i=1;i<=nbddl_x;i++)
{ d_gijHH_t(i) = NevezTenseurHH(nbvec_base);
*((d_gijHH_t)(i)) = *((a.d_gijHH_t)(i)) ; }}
else d_gijHH_t.Change_taille(0);
if (Existe(tab,id_gijHH_tdt))
{ d_gijHH_tdt.Change_taille(a.d_gijHH_tdt.Taille());
for (int i=1;i<=nbddl_x;i++)
{ d_gijHH_tdt(i) = NevezTenseurHH(nbvec_base);
*((d_gijHH_tdt)(i)) = *((a.d_gijHH_tdt)(i)); }}
else d_gijHH_tdt.Change_taille(0);
if (Existe(tab,id_gradVmoyBB_t))
{ d_gradVmoyBB_t.Change_taille(a.d_gradVmoyBB_t.Taille());
for (int i=1;i<=nbddl_x;i++)
{ d_gradVmoyBB_t(i) = NevezTenseurBB(nbvec_base);
*((d_gradVmoyBB_t)(i)) = *((a.d_gradVmoyBB_t)(i)) ; } }
else d_gradVmoyBB_t.Change_taille(0);
if (Existe(tab,id_gradVmoyBB_tdt))
{ d_gradVmoyBB_tdt.Change_taille(a.d_gradVmoyBB_tdt.Taille());
for (int i=1;i<=nbddl_x;i++)
{ d_gradVmoyBB_tdt(i) = NevezTenseurBB(nbvec_base);
*((d_gradVmoyBB_tdt)(i)) = *((a.d_gradVmoyBB_tdt)(i)) ; } }
else d_gradVmoyBB_tdt.Change_taille(0);
if (Existe(tab,id_gradVBB_t))
{ d_gradVBB_t.Change_taille(a.d_gradVBB_t.Taille());
for (int i=1;i<=nbddl_x;i++)
{ d_gradVBB_t(i) = NevezTenseurBB(nbvec_base);
*((d_gradVBB_t)(i)) = *((a.d_gradVBB_t)(i)) ; } }
else d_gradVBB_t.Change_taille(0);
if (Existe(tab,id_gradVBB_tdt))
{ d_gradVBB_tdt.Change_taille(a.d_gradVBB_tdt.Taille());
for (int i=1;i<=nbddl_x;i++)
{ d_gradVBB_tdt(i) = NevezTenseurBB(nbvec_base);
*((d_gradVBB_tdt)(i)) = *((a.d_gradVBB_tdt)(i)) ; } }
else d_gradVBB_tdt.Change_taille(0);
};
// initialisation des conteneurs de retour des méthodes
void Met_abstraite::Init_conteneur_de_retour_methode()
{ ex_impli.Mise_a_jour_grandeur(giB_0,giH_0,giB_t,giH_t,giB_tdt,d_giB_tdt,giH_tdt,d_giH_tdt
,gijBB_0,gijHH_0,gijBB_t,gijHH_t,gijBB_tdt,gijHH_tdt,gradVmoyBB_t,gradVmoyBB_tdt,gradVBB_tdt
,&d_gijBB_tdt,&d2_gijBB_tdt,&d_gijHH_tdt,&jacobien_tdt,&jacobien_t,&jacobien_0,&d_jacobien_tdt
,&d_gradVmoyBB_t,&d_gradVmoyBB_tdt,&d_gradVBB_t,&d_gradVBB_tdt);
ex_expli.Mise_a_jour_grandeur(giB_0,giH_0,giB_t,giH_t,gijBB_0,gijHH_0,gijBB_t,gijHH_t,gradVmoyBB_t,gradVBB_t,
&d_gijBB_t,&jacobien_t,&jacobien_0);
ex_expli_t_tdt.Mise_a_jour_grandeur(giB_0,giH_0,giB_t,giH_t,giB_tdt,giH_tdt,gijBB_0,gijHH_0,gijBB_t,gijHH_t,gijBB_tdt
,gijHH_tdt,gradVmoyBB_t,gradVmoyBB_tdt,gradVBB_tdt,&d_gijBB_tdt
,&jacobien_tdt,&jacobien_t,&jacobien_0);
ex_gijHH_0_et_giH_0.Mise_a_jour_grandeur(giH_0,gijHH_0);
ex_Dynamiq.Mise_a_jour_grandeur(giB_0,giB_tdt,gijBB_0,gijBB_tdt,
&jacobien_tdt,&jacobien_0);
ex_flambe_lin.Mise_a_jour_grandeur(giB_0,giH_0,giB_t,giH_t,giB_tdt,d_giB_tdt,giH_tdt,d_giH_tdt
,gijBB_0,gijHH_0,gijBB_t,gijHH_t,gijBB_tdt,gijHH_tdt,gradVmoyBB_t,gradVmoyBB_tdt,gradVBB_tdt
,&d_gijBB_tdt,&d2_gijBB_tdt,&d_gijHH_tdt,&jacobien_tdt,&jacobien_t,&jacobien_0,&d_jacobien_tdt
,&d_gradVmoyBB_t,&d_gradVmoyBB_tdt,&d_gradVBB_t,&d_gradVBB_tdt);
umat_cont.Mise_a_jour_grandeur(giB_0,giH_0,giB_t,giH_t,giB_tdt,giH_tdt,gijBB_0,gijHH_0,gijBB_t,gijHH_t,gijBB_tdt
,gijHH_tdt,gradVmoyBB_t,gradVmoyBB_tdt,gradVBB_tdt,&jacobien_tdt,&jacobien_t,&jacobien_0);
ex_InfoImp.Mise_a_jour_grandeur(M0,Mtdt,giB_0,giB_tdt,giH_0,giH_tdt,gijHH_tdt,gijBB_tdt,gijBB_0,gijHH_0);
ex_InfoExp_t.Mise_a_jour_grandeur(M0,Mt,giB_0,giB_t,giH_0,giH_t,gijHH_t,gijBB_t,gijBB_0,gijHH_0);
ex_InfoExp_tdt.Mise_a_jour_grandeur(M0,Mtdt,giB_0,giB_tdt,giH_0,giH_tdt,gijHH_tdt,gijBB_tdt,gijBB_0,gijHH_0);
ex_Info0_t_tdt.Mise_a_jour_grandeur(M0,Mt,Mtdt,giB_0,giB_t,giB_tdt,giH_0,giH_t,giH_tdt);
};