Gérard Rio
9692dbd130
- contient les éléments finis, métriques associées, déformations ... intégration du réperoire Géométrie: - contient les géométries 1D 2D et 3D, les frontières des éléments géométriques
453 lines
24 KiB
C++
453 lines
24 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-2021 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 "Met_PiPoCo.h"
|
|
# include "Util.h"
|
|
|
|
// =========================================================================================
|
|
// vu la taille des executables le fichier est decompose en trois
|
|
// le premier : Met_PiPoCo1.cp concerne les constructeurs, destructeur et
|
|
// la gestion des variables
|
|
// le second : Met_PiPoCo2.cp concerne le calcul des grandeurs publics
|
|
// le troisieme : Met_PiPoCo3.cp concerne le calcul des grandeurs protegees
|
|
// =========================================================================================
|
|
|
|
Met_PiPoCo::Met_PiPoCo () : // constructeur par defaut mettant les pointeurs a NULL
|
|
Met_abstraite(), Ia(),
|
|
curb_0(),curb_t(),curb_tdt(), dcurb_t(),dcurb_tdt(),
|
|
N_0(),N_t(),N_tdt(),
|
|
d_aijBB_t(),d_aijBB_tdt(),d_aijHH_t(),d_aijHH_tdt(),d_ajacobien_t(),d_ajacobien_tdt()
|
|
{ P0 = NULL; Pt = NULL;d_Pt = NULL; Ptdt = NULL; d_Ptdt = NULL;
|
|
aiB_0 = NULL;aiB_t = NULL; aiB_tdt = NULL;
|
|
aiH_0 = NULL;aiH_t = NULL;aiH_tdt = NULL;
|
|
aijBB_0 = NULL;aijBB_t = NULL;aijBB_tdt = NULL;
|
|
aijHH_0 = NULL;aijHH_t = NULL;aijHH_tdt = NULL;
|
|
d_aiB_t = NULL;d_aiB_tdt = NULL;
|
|
d_aiH_t = NULL;d_aiH_tdt = NULL;
|
|
};
|
|
// 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_PiPoCo::Met_PiPoCo (int dim_base,int nbvec,const DdlElement& tabddl,
|
|
const Tableau<Enum_variable_metrique>& tabb,int nomb_noeud):
|
|
Met_abstraite(dim_base,nbvec,tabddl,tabb,nomb_noeud),Ia(dim_base),
|
|
// pour la courbure
|
|
curb_0(),curb_t(),curb_tdt(), dcurb_t(),dcurb_tdt(),
|
|
N_0(dim_base),N_t(dim_base),N_tdt(dim_base),
|
|
d_aijBB_t(),d_aijBB_tdt(),d_aijHH_t(),d_aijHH_tdt(),d_ajacobien_t(),d_ajacobien_tdt()
|
|
{ // pour la courbure, lorsque la dimension de l'espace est 2 on a une courbure
|
|
// et avec dim = 3 on a 2 courbures (dim = 1 -> erreur)
|
|
// on alloue en fonction des parametres
|
|
int nbddl_x = tab_ddl.NbDdl_famille(X1); // nombre de ddl en position
|
|
int nbddl_v = tab_ddl.NbDdl_famille(V1); // nombre de ddl en vitesse
|
|
dcurb_t.Change_taille(nbddl_x);dcurb_tdt.Change_taille(nbddl_x);
|
|
if (dim_base == 2)
|
|
{ curb_0.Change_taille(1);curb_t.Change_taille(1);
|
|
curb_tdt.Change_taille(1);
|
|
}
|
|
else // cas de la dimension 3
|
|
{ curb_0.Change_taille(3);curb_t.Change_taille(3);
|
|
curb_tdt.Change_taille(3);
|
|
}
|
|
#ifdef MISE_AU_POINT
|
|
if (dim_base == 1)
|
|
{ cout << "\nErreur : avec cette m\'etrique la dimension doit etre de 2 ou 3 \n";
|
|
cout << "Met_PiPoCo::Met_PiPoCo (int...)\n";
|
|
Sortie(1);
|
|
};
|
|
#endif
|
|
AllocPiPoCo();
|
|
// def de Ia
|
|
for (int ii=1;ii<=dim_base;ii++)
|
|
{ Ia(ii).Change_dim(dim_base);
|
|
Ia(ii)(ii) = 1.;
|
|
}
|
|
};
|
|
// Constructeur de copie :
|
|
Met_PiPoCo::Met_PiPoCo (const Met_PiPoCo& a) :
|
|
Met_abstraite(a), Ia(dim_base),
|
|
curb_0(a.curb_0),curb_t(a.curb_t),curb_tdt(a.curb_tdt),
|
|
dcurb_t(a.dcurb_t),dcurb_tdt(a.dcurb_tdt),
|
|
N_0(dim_base),N_t(dim_base),N_tdt(dim_base),
|
|
ajacobien_0(a.ajacobien_0) , ajacobien_t(a.ajacobien_t),
|
|
ajacobien_tdt(a.ajacobien_tdt), d_aijBB_t() ,
|
|
d_aijBB_tdt (a.d_aijBB_tdt.Taille()), d_aijHH_t(a.d_aijHH_t.Taille()) ,
|
|
d_aijHH_tdt (a.d_aijHH_tdt.Taille()), d_ajacobien_t(a.d_ajacobien_t),
|
|
d_ajacobien_tdt(a.d_ajacobien_tdt)
|
|
{ // on met à NULL les grandeurs pointées
|
|
P0 = NULL; Pt = NULL;d_Pt = NULL; Ptdt = NULL; d_Ptdt = NULL;
|
|
aiB_0 = NULL;aiB_t = NULL; aiB_tdt = NULL;
|
|
aiH_0 = NULL;aiH_t = NULL;aiH_tdt = NULL;
|
|
aijBB_0 = NULL;aijBB_t = NULL;aijBB_tdt = NULL;
|
|
aijHH_0 = NULL;aijHH_t = NULL;aijHH_tdt = NULL;
|
|
d_aiB_t = NULL;d_aiB_tdt = NULL;
|
|
d_aiH_t = NULL;d_aiH_tdt = NULL;
|
|
// copie des grandeurs pointées
|
|
Copie_metPiPoCo(a);
|
|
// def de Ia
|
|
for (int ii=1;ii<=dim_base;ii++)
|
|
{ Ia(ii).Change_dim(dim_base);
|
|
Ia(ii)(ii) = 1.;
|
|
}
|
|
};
|
|
Met_PiPoCo::~Met_PiPoCo ()
|
|
{ DeAllocPiPoCo();
|
|
};
|
|
|
|
// Surcharge de l'operateur = : realise l'affectation
|
|
// dérivant de virtuel, a ne pas employer -> message d'erreur
|
|
Met_abstraite& Met_PiPoCo::operator= (const Met_abstraite& )
|
|
{ // normalement ne devrait pas être utilisé
|
|
cout << "\n erreur , l operateur d affectation a utiliser doit etre celui explicite "
|
|
<< " de la classe Met_PiPoCo \n"
|
|
<< " Met_abstraite& Met_PiPoCo::operator= (const Met_abstraite& met) \n";
|
|
Sortie(1);
|
|
return (*this);
|
|
};
|
|
// normale
|
|
Met_PiPoCo& Met_PiPoCo::operator= (const Met_PiPoCo& met)
|
|
{ (*this) = Met_abstraite::operator=(met); // partie met_abstraite
|
|
// copie des grandeurs pointées
|
|
Copie_metPiPoCo(met);
|
|
// copie des grandeurs non pointées
|
|
Ia = met.Ia;
|
|
curb_0 = met.curb_0;curb_t = met.curb_t;curb_tdt = met.curb_tdt;
|
|
dcurb_t = met.dcurb_t;dcurb_tdt = met.dcurb_tdt;
|
|
N_0 = met.N_0;N_t = met.N_t;N_tdt = met.N_tdt;
|
|
ajacobien_0 = met.ajacobien_0;ajacobien_t = met.ajacobien_t;ajacobien_tdt = met.ajacobien_tdt;
|
|
d_ajacobien_t = met.d_ajacobien_t; d_ajacobien_tdt = met.d_ajacobien_tdt;
|
|
return (*this);
|
|
};
|
|
|
|
// ------------------------ gestion de la memoire --------------------------
|
|
// Changement d'initialisation des differentes variables
|
|
void Met_PiPoCo::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);
|
|
// tout d'abord on alloue a la classe superieur
|
|
Met_abstraite::PlusInitVariables(tab);
|
|
// puis on alloue en fonction des parametres pour la base plane
|
|
// on alloue en fonction des parametres
|
|
int nbddl_x = tab_ddl.NbDdl_famille(X1); // nombre de ddl en position
|
|
int nbddl_v = tab_ddl.NbDdl_famille(V1); // nombre de ddl en vitesse
|
|
if (Existe(tab,iM0) && (P0 == NULL) )
|
|
{P0 = new Coordonnee(dim_base);tabbool(Existe_num(tab,iM0))=true;}
|
|
if (Existe(tab,iMt) && (Pt == NULL) )
|
|
{Pt = new Coordonnee(dim_base);tabbool(Existe_num(tab,iMt))=true;}
|
|
if (Existe(tab,idMt) && (d_Pt == NULL) )
|
|
{Coordonnee toto(dim_base); d_Pt = new Tableau <Coordonnee> (nbddl_x,toto);
|
|
tabbool(Existe_num(tab,idMt))=true;}
|
|
if (Existe(tab,iMtdt) && (Ptdt == NULL) )
|
|
{Ptdt = new Coordonnee(dim_base);tabbool(Existe_num(tab,iMtdt))=true;}
|
|
if (Existe(tab,idMtdt) && (d_Ptdt == NULL) )
|
|
{Coordonnee toto(dim_base); d_Ptdt = new Tableau <Coordonnee> (nbddl_x,toto);
|
|
tabbool(Existe_num(tab,idMtdt))=true;}
|
|
if (Existe(tab,igiB_0) && (aiB_0 == NULL) )
|
|
{aiB_0 = new BaseB(dim_base,nbvec_base);tabbool(Existe_num(tab,igiB_0))=true;}
|
|
if (Existe(tab,igiB_t) && (aiB_t == NULL) )
|
|
{aiB_t = new BaseB(dim_base,nbvec_base);tabbool(Existe_num(tab,igiB_t))=true;}
|
|
if (Existe(tab,igiB_tdt) && (aiB_tdt == NULL) )
|
|
{aiB_tdt = new BaseB(dim_base,nbvec_base);tabbool(Existe_num(tab,igiB_tdt))=true;}
|
|
if (Existe(tab,igiH_0) && (aiH_0 == NULL) )
|
|
{aiH_0 = new BaseH (dim_base,nbvec_base);tabbool(Existe_num(tab,igiH_0))=true;}
|
|
if (Existe(tab,igiH_t) && (aiH_t == NULL) )
|
|
{aiH_t = new BaseH (dim_base,nbvec_base);tabbool(Existe_num(tab,igiH_t))=true;}
|
|
if (Existe(tab,igiH_tdt) && (aiH_tdt == NULL) )
|
|
{aiH_tdt = new BaseH (dim_base,nbvec_base);tabbool(Existe_num(tab,igiH_tdt))=true;}
|
|
if (Existe(tab,igijBB_0) && (aijBB_0 == NULL) )
|
|
{aijBB_0 = NevezTenseurBB(nbvec_base);tabbool(Existe_num(tab,igijBB_0))=true;}
|
|
if (Existe(tab,igijBB_t) && (aijBB_t == NULL) )
|
|
{aijBB_t = NevezTenseurBB(nbvec_base);tabbool(Existe_num(tab,igijBB_t))=true;}
|
|
if (Existe(tab,igijBB_tdt) && (aijBB_tdt == NULL) )
|
|
{aijBB_tdt = NevezTenseurBB(nbvec_base);tabbool(Existe_num(tab,igijBB_tdt))=true;}
|
|
if (Existe(tab,igijHH_0) && (aijHH_0 == NULL) )
|
|
{aijHH_0 = NevezTenseurHH(nbvec_base);tabbool(Existe_num(tab,igijHH_0))=true;}
|
|
if (Existe(tab,igijHH_t) && (aijHH_t == NULL) )
|
|
{aijHH_t = NevezTenseurHH(nbvec_base);tabbool(Existe_num(tab,igijHH_t))=true;}
|
|
if (Existe(tab,igijHH_tdt) && (aijHH_tdt == NULL) )
|
|
{aijHH_tdt = NevezTenseurHH(nbvec_base);tabbool(Existe_num(tab,igijHH_tdt))=true;}
|
|
if (Existe(tab,id_giB_t) && (d_aiB_t == NULL) )
|
|
{ BaseB truc(dim_base,nbvec_base,0);
|
|
tabbool(Existe_num(tab,id_giB_t))=true;
|
|
d_aiB_t = new Tableau <BaseB> (nbddl_x,truc); }
|
|
if (Existe(tab,id_giB_tdt) && (d_aiB_tdt == NULL) )
|
|
{ BaseB truc(dim_base,nbvec_base,0);
|
|
tabbool(Existe_num(tab,id_giB_tdt))=true;
|
|
d_aiB_tdt = new Tableau <BaseB> (nbddl_x,truc); }
|
|
if (Existe(tab,id_giH_t) && (d_aiH_t == NULL) )
|
|
{ BaseH truc(dim_base,nbvec_base,0);
|
|
tabbool(Existe_num(tab,id_giH_t))=true;
|
|
d_aiH_t = new Tableau <BaseH> (nbddl_x,truc); }
|
|
if (Existe(tab,id_giH_tdt) && (d_aiH_tdt == NULL) )
|
|
{ BaseH truc(dim_base,nbvec_base,0);
|
|
tabbool(Existe_num(tab,id_giH_tdt))=true;
|
|
d_aiH_tdt = new Tableau <BaseH> (nbddl_x,truc); }
|
|
if (Existe(tab,id_gijBB_t) && ( d_aijBB_t.Taille() == 0) )
|
|
{ tabbool(Existe_num(tab,id_gijBB_t))=true;
|
|
d_aijBB_t.Change_taille(nbddl_x);
|
|
for (int i=1;i<=nbddl_x;i++)
|
|
d_aijBB_t(i) = NevezTenseurBB(nbvec_base); }
|
|
if (Existe(tab,id_gijBB_tdt) && ( d_aijBB_tdt.Taille() == 0) )
|
|
{ tabbool(Existe_num(tab,id_gijBB_tdt))=true;
|
|
d_aijBB_tdt.Change_taille(nbddl_x);
|
|
for (int i=1;i<=nbddl_x;i++)
|
|
d_aijBB_tdt(i) = NevezTenseurBB(nbvec_base); }
|
|
if (Existe(tab,id_gijHH_t) && (d_aijHH_t.Taille() == 0) )
|
|
{ tabbool(Existe_num(tab,id_gijHH_t))=true;
|
|
d_aijHH_t.Change_taille(nbddl_x);
|
|
for (int i=1;i<=nbddl_x;i++)
|
|
d_aijHH_t(i) = NevezTenseurHH(nbvec_base); }
|
|
if (Existe(tab,id_gijHH_tdt) && (d_aijHH_tdt.Taille() == 0) )
|
|
{ tabbool(Existe_num(tab,id_gijHH_tdt))=true;
|
|
d_aijHH_tdt.Change_taille(nbddl_x);
|
|
for (int i=1;i<=nbddl_x;i++)
|
|
d_aijHH_tdt(i) = NevezTenseurHH(nbvec_base); }
|
|
if (Existe(tab,id_jacobien_t) && (d_ajacobien_t.Taille() == 0) )
|
|
{d_ajacobien_t.Change_taille(nbddl_x);tabbool(Existe_num(tab,id_jacobien_t))=true;}
|
|
if (Existe(tab,id_jacobien_tdt) && (d_ajacobien_tdt.Taille() == 0) )
|
|
{d_ajacobien_tdt.Change_taille(nbddl_x);tabbool(Existe_num(tab,id_jacobien_tdt))=true;}
|
|
// 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);}
|
|
};
|
|
|
|
|
|
//---------------------------------- fonctions privées -------------------------------------------
|
|
|
|
// allocation de la memoire
|
|
void Met_PiPoCo::AllocPiPoCo ()
|
|
{
|
|
// on met les pointeurs a NULL
|
|
P0 = NULL; Pt = NULL;d_Pt = NULL; Ptdt = NULL; d_Ptdt = NULL;
|
|
aiB_0 = NULL;aiB_t = NULL; aiB_tdt = NULL;
|
|
aiH_0 = NULL;aiH_t = NULL;aiH_tdt = NULL;
|
|
aijBB_0 = NULL;aijBB_t = NULL;aijBB_tdt = NULL;
|
|
aijHH_0 = NULL;aijHH_t = NULL;aijHH_tdt = NULL;
|
|
d_aiB_t = NULL;d_aiB_tdt = NULL;
|
|
d_aiH_t = NULL;d_aiH_tdt = NULL;
|
|
// on alloue en fonction des parametres
|
|
// on alloue en fonction des parametres
|
|
int nbddl_x = tab_ddl.NbDdl_famille(X1); // nombre de ddl en position
|
|
int nbddl_v = tab_ddl.NbDdl_famille(V1); // nombre de ddl en vitesse
|
|
if (Existe(tab,iM0)) P0 = new Coordonnee(dim_base);
|
|
if (Existe(tab,iMt)) Pt = new Coordonnee(dim_base);
|
|
if (Existe(tab,idMt))
|
|
{Coordonnee toto(dim_base); d_Pt = new Tableau <Coordonnee> (nbddl_x,toto);}
|
|
if (Existe(tab,iMtdt)) Ptdt = new Coordonnee(dim_base);
|
|
if (Existe(tab,idMtdt))
|
|
{Coordonnee toto(dim_base); d_Ptdt = new Tableau <Coordonnee> (nbddl_x,toto);}
|
|
if (Existe(tab,igiB_0)) aiB_0 = new BaseB(dim_base,nbvec_base);
|
|
if (Existe(tab,igiB_t)) aiB_t = new BaseB(dim_base,nbvec_base);
|
|
if (Existe(tab,igiB_tdt)) aiB_tdt = new BaseB(dim_base,nbvec_base);
|
|
if (Existe(tab,igiH_0)) aiH_0 = new BaseH (dim_base,nbvec_base);
|
|
if (Existe(tab,igiH_t)) aiH_t = new BaseH (dim_base,nbvec_base);
|
|
if (Existe(tab,igiH_tdt)) aiH_tdt = new BaseH (dim_base,nbvec_base);
|
|
if (Existe(tab,igijBB_0)) aijBB_0 = NevezTenseurBB(nbvec_base);
|
|
if (Existe(tab,igijBB_t)) aijBB_t = NevezTenseurBB(nbvec_base);
|
|
if (Existe(tab,igijBB_tdt)) aijBB_tdt = NevezTenseurBB(nbvec_base);
|
|
if (Existe(tab,igijHH_0)) aijHH_0 = NevezTenseurHH(nbvec_base);
|
|
if (Existe(tab,igijHH_t)) aijHH_t = NevezTenseurHH(nbvec_base);
|
|
if (Existe(tab,igijHH_tdt)) aijHH_tdt = NevezTenseurHH(nbvec_base);
|
|
if (Existe(tab,id_giB_t)) { BaseB truc(dim_base,nbvec_base,0);
|
|
d_aiB_t = new Tableau <BaseB> (nbddl_x,truc); }
|
|
if (Existe(tab,id_giB_tdt)) { BaseB truc(dim_base,nbvec_base,0);
|
|
d_aiB_tdt = new Tableau <BaseB> (nbddl_x,truc); }
|
|
if (Existe(tab,id_giH_t)) { BaseH truc(dim_base,nbvec_base,0);
|
|
d_aiH_t = new Tableau <BaseH> (nbddl_x,truc); }
|
|
if (Existe(tab,id_giH_tdt)) { BaseH truc(dim_base,nbvec_base,0);
|
|
d_aiH_tdt = new Tableau <BaseH> (nbddl_x,truc); }
|
|
if (Existe(tab,id_gijBB_t)) { d_aijBB_t.Change_taille(nbddl_x);
|
|
for (int i=1;i<=nbddl_x;i++)
|
|
d_aijBB_t(i) = NevezTenseurBB(nbvec_base); }
|
|
if (Existe(tab,id_gijBB_tdt)) { d_aijBB_tdt.Change_taille(nbddl_x);
|
|
for (int i=1;i<=nbddl_x;i++)
|
|
d_aijBB_tdt(i) = NevezTenseurBB(nbvec_base); }
|
|
if (Existe(tab,id_gijHH_t)) { d_aijHH_t.Change_taille(nbddl_x);
|
|
for (int i=1;i<=nbddl_x;i++)
|
|
d_aijHH_t(i) = NevezTenseurHH(nbvec_base); }
|
|
if (Existe(tab,id_gijHH_tdt)) { d_aijHH_tdt.Change_taille(nbddl_x);
|
|
for (int i=1;i<=nbddl_x;i++)
|
|
d_aijHH_tdt(i) = NevezTenseurHH(nbvec_base); }
|
|
if (Existe(tab,id_jacobien_t)) d_ajacobien_t.Change_taille(nbddl_x);
|
|
if (Existe(tab,id_jacobien_tdt)) d_ajacobien_tdt.Change_taille(nbddl_x);
|
|
};
|
|
|
|
// deallocation de la memoire complète, uniquement des grandeurs spécifiques à Met_PiPoCo
|
|
void Met_PiPoCo::DeAllocPiPoCo()
|
|
{ DeAllocPiPoCo(tab);
|
|
};
|
|
|
|
// deallocation de la memoire en fonction du tableau tib, uniquement des grandeurs spécifiques à Met_PiPoCo
|
|
void Met_PiPoCo::DeAllocPiPoCo(Tableau<Enum_variable_metrique>& tib)
|
|
{ if (Existe(tib,iM0)) {delete P0;P0=NULL;}
|
|
if (Existe(tib,iMt)) {delete Pt;Pt=NULL;}
|
|
if (Existe(tib,idMt)) {delete d_Pt;d_Pt=NULL;};
|
|
if (Existe(tib,iMtdt)) {delete Ptdt;Ptdt=NULL;}
|
|
if (Existe(tib,idMtdt)) {delete d_Ptdt;d_Ptdt=NULL;};
|
|
if (Existe(tib,igiB_0)) {delete aiB_0;aiB_0=NULL;}
|
|
if (Existe(tib,igiB_t)) {delete aiB_t;aiB_t=NULL;}
|
|
if (Existe(tib,igiB_tdt)) {delete aiB_tdt;aiB_tdt=NULL;}
|
|
if (Existe(tib,igiH_0)) {delete aiH_0;aiH_0=NULL;}
|
|
if (Existe(tib,igiH_t)) {delete aiH_t;aiH_t=NULL;}
|
|
if (Existe(tib,igiH_tdt)) {delete aiH_tdt;aiH_tdt=NULL;}
|
|
if (Existe(tib,igijBB_0)) {delete aijBB_0;aijBB_0=NULL;}
|
|
if (Existe(tib,igijBB_t)) {delete aijBB_t;aijBB_t=NULL;}
|
|
if (Existe(tib,igijBB_tdt)) {delete aijBB_tdt;aijBB_tdt=NULL;}
|
|
if (Existe(tib,igijHH_0)) {delete aijHH_0;aijHH_0=NULL;}
|
|
if (Existe(tib,igijHH_t)) {delete aijHH_t;aijHH_t=NULL;}
|
|
if (Existe(tib,igijHH_tdt)) {delete aijHH_tdt;aijHH_tdt=NULL;}
|
|
if (Existe(tib,id_giB_t)) {delete d_aiB_t;d_aiB_t=NULL;}
|
|
if (Existe(tib,id_giB_tdt)) {delete d_aiB_tdt;d_aiB_tdt=NULL;}
|
|
if (Existe(tib,id_giH_t)) {delete d_aiH_t;d_aiH_t=NULL;}
|
|
if (Existe(tib,id_giH_tdt)) {delete d_aiH_tdt;d_aiH_tdt=NULL;}
|
|
if (Existe(tib,id_gijBB_t)) { for (int i = 1; i<= d_aijBB_t.Taille(); i++)
|
|
delete d_aijBB_t(i);
|
|
d_aijBB_t.Change_taille(0); }
|
|
if (Existe(tib,id_gijBB_tdt)) { for (int i = 1; i<= d_aijBB_tdt.Taille(); i++)
|
|
delete d_aijBB_tdt(i);
|
|
d_aijBB_tdt.Change_taille(0); }
|
|
if (Existe(tib,id_gijHH_t)) { for (int i = 1; i<= d_aijHH_t.Taille(); i++)
|
|
delete d_aijHH_t(i);
|
|
d_aijHH_t.Change_taille(0); }
|
|
if (Existe(tib,id_gijHH_tdt)) { for (int i = 1; i<= d_aijHH_tdt.Taille(); i++)
|
|
delete d_aijHH_tdt(i);
|
|
d_aijHH_tdt.Change_taille(0); }
|
|
if (Existe(tib,id_jacobien_t)) d_ajacobien_t.Change_taille(0);
|
|
if (Existe(tib,id_jacobien_tdt)) d_ajacobien_tdt.Change_taille(0);
|
|
|
|
};
|
|
|
|
// copie en fonction de l'instance passée
|
|
// concerne que les grandeurs pointées
|
|
void Met_PiPoCo::Copie_metPiPoCo(const Met_PiPoCo& a)
|
|
{// on alloue en fonction des parametres
|
|
int nbddl_x = tab_ddl.NbDdl_famille(X1); // nombre de ddl en position
|
|
int nbddl_v = tab_ddl.NbDdl_famille(V1); // nombre de ddl en vitesse
|
|
if (a.P0 != NULL)
|
|
{if (P0==NULL) P0 = new Coordonnee(*(a.P0)); else *P0=*a.P0;}
|
|
else {if (P0!=NULL) {delete P0;P0=NULL;}}
|
|
if (a.Pt != NULL)
|
|
{if (Pt==NULL) Pt = new Coordonnee(*(a.Pt)); else *Pt=*a.Pt;}
|
|
else {if (Pt!=NULL) {delete Pt;Pt=NULL;}}
|
|
if (a.d_Pt != NULL)
|
|
{if (d_Pt==NULL) d_Pt = new Tableau <Coordonnee> (*(a.d_Pt)); else *d_Pt=*a.d_Pt;}
|
|
else {if (d_Pt != NULL) {delete d_Pt;d_Pt=NULL;}}
|
|
if (a.Ptdt != NULL)
|
|
{if (Ptdt==NULL) Ptdt = new Coordonnee(*(a.Ptdt)); else *Ptdt=*a.Ptdt;}
|
|
else {if (Ptdt!=NULL) {delete Ptdt;Ptdt=NULL;}}
|
|
if (a.d_Ptdt != NULL)
|
|
{if (d_Ptdt==NULL) d_Mtdt = new Tableau <Coordonnee> (*(a.d_Ptdt)); else *d_Ptdt=*a.d_Ptdt;}
|
|
else {if (d_Ptdt != NULL) {delete d_Ptdt;d_Ptdt=NULL;}}
|
|
if (a.aiB_0 != NULL)
|
|
{if (aiB_0==NULL) aiB_0 = new BaseB(*(a.aiB_0)); else *aiB_0=*a.aiB_0;}
|
|
else {if (aiB_0!=NULL) {delete aiB_0;aiB_0 = NULL;}}
|
|
if (a.aiB_t != NULL)
|
|
{if (aiB_t==NULL) aiB_t = new BaseB(*(a.aiB_t)); else *aiB_t=*a.aiB_t;}
|
|
else {if (aiB_t!=NULL) {delete aiB_t;aiB_t = NULL;}}
|
|
if (a.aiB_tdt != NULL)
|
|
{if (aiB_tdt==NULL) aiB_tdt = new BaseB(*(a.aiB_tdt)); else *aiB_tdt=*a.aiB_tdt;}
|
|
else {if (aiB_tdt!=NULL) {delete aiB_tdt;aiB_tdt = NULL;}}
|
|
if (a.aiH_0 != NULL)
|
|
{if (aiH_0==NULL) aiH_0 = new BaseH(*(a.aiH_0)); else *aiH_0=*a.aiH_0;}
|
|
else {if (aiH_0!=NULL) {delete aiH_0;aiH_0 = NULL;}}
|
|
if (a.aiH_t != NULL)
|
|
{if (aiH_t==NULL) aiH_t = new BaseH(*(a.aiH_t)); else *aiH_t=*a.aiH_t;}
|
|
else {if (aiH_t!=NULL) {delete aiH_t;aiH_t = NULL;}}
|
|
if (a.aiH_tdt != NULL)
|
|
{if (aiH_tdt==NULL) aiH_tdt = new BaseH(*(a.aiH_tdt)); else *aiH_tdt=*a.aiH_tdt;}
|
|
else {if (aiH_tdt!=NULL) {delete aiH_tdt;aiH_tdt = NULL;}}
|
|
if (a.aijBB_0 != NULL)
|
|
{if (aijBB_0==NULL) aijBB_0 = NevezTenseurBB(*a.aijBB_0);else *aijBB_0=*a.aijBB_0;}
|
|
else {if (aijBB_0!=NULL) {delete aijBB_0;aijBB_0 = NULL;}}
|
|
if (a.aijBB_t != NULL)
|
|
{if (aijBB_t==NULL) aijBB_t = NevezTenseurBB(*a.aijBB_t);else *aijBB_t=*a.aijBB_t;}
|
|
else {if (aijBB_t!=NULL) {delete aijBB_t;aijBB_t = NULL;}}
|
|
if (a.aijBB_tdt != NULL)
|
|
{if (aijBB_tdt==NULL) aijBB_tdt = NevezTenseurBB(*a.aijBB_tdt);else *aijBB_tdt=*a.aijBB_tdt;}
|
|
else {if (aijBB_tdt!=NULL) {delete aijBB_tdt;aijBB_tdt = NULL;}}
|
|
if (a.aijHH_0 != NULL)
|
|
{if (aijHH_0==NULL) aijHH_0 = NevezTenseurHH(*a.aijHH_0);else *aijHH_0=*a.aijHH_0;}
|
|
else {if (aijHH_0!=NULL) {delete aijHH_0;aijHH_0 = NULL;}}
|
|
if (a.aijHH_t != NULL)
|
|
{if (aijHH_t==NULL) aijHH_t = NevezTenseurHH(*a.aijHH_t);else *aijHH_t=*a.aijHH_t;}
|
|
else {if (aijHH_t!=NULL) {delete aijHH_t;aijHH_t = NULL;}}
|
|
if (a.aijHH_tdt != NULL)
|
|
{if (aijHH_tdt==NULL) aijHH_tdt = NevezTenseurHH(*a.aijHH_tdt);else *aijHH_tdt=*a.aijHH_tdt;}
|
|
else {if (aijHH_tdt!=NULL) {delete aijHH_tdt;aijHH_tdt = NULL;}}
|
|
if (a.d_aiB_t != NULL)
|
|
{if (d_aiB_t==NULL) d_aiB_t = new Tableau <BaseB>( *a.d_aiB_t);else *d_aiB_t = *a.d_aiB_t;}
|
|
else {if (d_aiB_t!=NULL) {delete d_aiB_t;d_aiB_t = NULL;} }
|
|
if (a.d_aiB_tdt != NULL)
|
|
{if (d_aiB_tdt==NULL) d_aiB_tdt = new Tableau <BaseB>( *a.d_aiB_tdt);else *d_aiB_tdt = *a.d_aiB_tdt;}
|
|
else {if (d_aiB_tdt!=NULL) {delete d_aiB_tdt;d_aiB_tdt = NULL;} }
|
|
if (a.d_aiH_t != NULL)
|
|
{if (d_aiH_t==NULL) d_aiH_t = new Tableau <BaseH>( *a.d_aiH_t);else *d_aiH_t = *a.d_aiH_t;}
|
|
else {if (d_aiH_t!=NULL) {delete d_aiH_t;d_aiH_t = NULL;} }
|
|
if (a.d_aiH_tdt != NULL)
|
|
{if (d_aiH_tdt==NULL) d_aiH_tdt = new Tableau <BaseH>( *a.d_aiH_tdt);else *d_aiH_tdt = *a.d_aiH_tdt;}
|
|
else {if (d_aiH_tdt!=NULL) {delete d_aiH_tdt;d_aiH_tdt = NULL;} }
|
|
if (Existe(tab,id_gijBB_t))
|
|
{ d_aijBB_t.Change_taille(a.d_aijBB_t.Taille());
|
|
for (int i=1;i<=nbddl_x;i++)
|
|
{ d_aijBB_t(i) = NevezTenseurBB(nbvec_base);
|
|
*((d_aijBB_t)(i)) = *((a.d_aijBB_t)(i)) ; } }
|
|
else d_aijBB_t.Change_taille(0);
|
|
if (Existe(tab,id_gijBB_tdt))
|
|
{ d_aijBB_tdt.Change_taille(a.d_aijBB_tdt.Taille());
|
|
for (int i=1;i<=nbddl_x;i++)
|
|
{ d_aijBB_tdt(i) = NevezTenseurBB(nbvec_base);
|
|
*((d_aijBB_tdt)(i)) = *((a.d_aijBB_tdt)(i)) ; }}
|
|
else d_aijBB_tdt.Change_taille(0);
|
|
if (Existe(tab,id_gijHH_t))
|
|
{ d_aijHH_t.Change_taille(a.d_aijHH_t.Taille());
|
|
for (int i=1;i<=nbddl_x;i++)
|
|
{ d_aijHH_t(i) = NevezTenseurHH(nbvec_base);
|
|
*((d_aijHH_t)(i)) = *((a.d_aijHH_t)(i)) ; }}
|
|
else d_aijHH_t.Change_taille(0);
|
|
if (Existe(tab,id_gijHH_tdt))
|
|
{ d_aijHH_tdt.Change_taille(a.d_aijHH_tdt.Taille());
|
|
for (int i=1;i<=nbddl_x;i++)
|
|
{ d_aijHH_tdt(i) = NevezTenseurHH(nbvec_base);
|
|
*((d_aijHH_tdt)(i)) = *((a.d_aijHH_tdt)(i)); }}
|
|
else d_aijHH_tdt.Change_taille(0);
|
|
};
|
|
|
|
|
|
|
|
|
|
|