Herezh_dev/tenseurs_mai99/Reperes_bases/Base3D3.cc

368 lines
9.5 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 "debug.h"
#include "Base3D3.h"
#ifndef BASE3D3_H_deja_inclus
//===============================================================
// Les base covariantes et absolus
//===============================================================
// CONSTRUCTEURS :
// par defaut, defini une Base de coordonnŕes nulles
#ifndef MISE_AU_POINT
inline
#endif
Base3D3B::Base3D3B () :
v1(),v2(),v3()
{ v[0] = & v1;v[1] = & v1;v[2] = & v1;
};
// defini une Base unitaire en dimension 3 :100,010,001
#ifndef MISE_AU_POINT
inline
#endif
Base3D3B::Base3D3B (bool ):
v1(),v2(),v3()
{ v1(1) = 1.; v2(2) = 1.;v3(3) = 1.;
v[0] = & v1;v[1] = & v1;v[2] = & v1;
};
// defini une Base donnŕe a partir d'un tableau
#ifndef MISE_AU_POINT
inline
#endif
Base3D3B::Base3D3B ( const Tableau<Coordonnee3B > & vv) :
v1(vv(1)),v2(vv(2)),v3(vv(3))
{v[0] = & v1;v[1] = & v1;v[2] = & v1;};
// defini une Base donnŕe a partir de trois vecteur
#ifndef MISE_AU_POINT
inline
#endif
Base3D3B::Base3D3B
( const Coordonnee3B& vv1,const Coordonnee3B& vv2,const Coordonnee3B& vv3) :
v1(vv1),v2(vv2),v3(vv3)
{v[0] = & v1;v[1] = & v1;v[2] = & v1;};
// constructeur de copie
#ifndef MISE_AU_POINT
inline
#endif
Base3D3B::Base3D3B (const Base3D3B & aB) :
v1(aB.v1),v2(aB.v2),v3(aB.v3)
{v[0] = & v1;v[1] = & v1;v[2] = & v1;};
// DESTRUCTEUR :
#ifndef MISE_AU_POINT
inline
#endif
Base3D3B::~Base3D3B ()
{ };
// surcharge de l'affectation
#ifndef MISE_AU_POINT
inline
#endif
Base3D3B & Base3D3B::operator = (const Base3D3B & aB)
{ v1 = aB.v1; v2 = aB.v2;v3 = aB.v3;
v[0] = & v1;v[1] = & v1;v[2] = & v1;
return *this;
};
// retourne le i ieme Coordonnee3s en I/O
#ifndef MISE_AU_POINT
inline
#endif
Coordonnee3B & Base3D3B::operator () (int i)
{
#ifdef MISE_AU_POINT
if ((i < 1) || (i > 3))
{ cout << "\nErreur : vecteur inexistant !\n";
cout << " i = " << i << '\n';
cout << "Base3D3B::OPERATOR() (int ) \n";
Sortie(1);
};
#endif
return *(v[i-1]);
};
// retourne le i ieme Coordonnee3s en lecture only
#ifndef MISE_AU_POINT
inline
#endif
Coordonnee3B Base3D3B::operator () (int i) const
{
#ifdef MISE_AU_POINT
if ((i < 1) || (i > 3))
{ cout << "\nErreur : vecteur inexistant !\n";
cout << " i = " << i << '\n';
cout << "Base3D3B::OPERATOR() (int ) const \n";
Sortie(1);
};
#endif
return *(v[i-1]);
};
// retourne la j ieme composante du i ieme vecteur en I/O
#ifndef MISE_AU_POINT
inline
#endif
double & Base3D3B::operator () (int i,int j)
{
#ifdef MISE_AU_POINT
if ((i < 1) || (i > 3))
{ cout << "\nErreur : vecteur inexistant !\n";
cout << " i = " << i << '\n';
cout << " Base3D3B::operator () (int i,int j)\n";
Sortie(1);
};
if ((j < 1) || (j > 3))
{ cout << "\nErreur : composante inexistante !\n";
cout << " j = " << j << '\n';
cout << " Base3D3B::operator () (int i,int j)\n";
Sortie(1);
};
#endif
return (*(v[i-1]))(j);
};
// retourne la j ieme composante du i ieme vecteur en lecture only
#ifndef MISE_AU_POINT
inline
#endif
double Base3D3B::operator () (int i,int j) const
{
#ifdef MISE_AU_POINT
if ((i < 1) || (i > 3))
{ cout << "\nErreur : vecteur inexistant !\n";
cout << " i = " << i << '\n';
cout << " Base3D3B::operator () (int i,int j)\n";
Sortie(1);
};
if ((j < 1) || (j > 3))
{ cout << "\nErreur : composante inexistante !\n";
cout << " j = " << j << '\n';
cout << " Base3D3B::operator () (int i,int j)\n";
Sortie(1);
};
#endif
return (*(v[i-1]))(j);
};
// surcharge de l'operateur de lecture
#ifndef MISE_AU_POINT
inline
#endif
istream & operator >> ( istream & ent, Base3D3B & ba)
{ // lecture du type et vŕrification
string nomtype; ent >> nomtype;
if (nomtype != "Base3D3B")
{ Sortie(1);
return ent;
}
// lecture des data
ent >> ba.v1 >> ba.v2 >> ba.v3;
return ent;
};
// surcharge de l'operateur d'ecriture
#ifndef MISE_AU_POINT
inline
#endif
ostream & operator << ( ostream & sort,const Base3D3B & ba)
{ // ŕcriture du type
sort << "Base3D3B " ;
// les data
sort << ba.v1 << ba.v2 << ba.v3 << "\n";
return sort;
};
//===============================================================
// Les base duales
//===============================================================
// CONSTRUCTEURS :
// par defaut, defini une Base de coordonnŕes nulles
#ifndef MISE_AU_POINT
inline
#endif
Base3D3H::Base3D3H () :
v1(),v2(),v3()
{ v[0] = & v1;v[1] = & v1;v[2] = & v1;
};
// defini une Base unitaire en dimension 3 :100,010,001
#ifndef MISE_AU_POINT
inline
#endif
Base3D3H::Base3D3H (bool ):
v1(),v2(),v3()
{ v1(1) = 1.; v2(2) = 1.;v3(3) = 1.;
v[0] = & v1;v[1] = & v1;v[2] = & v1;
};
// defini une Base donnŕe a partir d'un tableau
#ifndef MISE_AU_POINT
inline
#endif
Base3D3H::Base3D3H ( const Tableau<Coordonnee3H > & vv) :
v1(vv(1)),v2(vv(2)),v3(vv(3))
{v[0] = & v1;v[1] = & v1;v[2] = & v1;};
// defini une Base donnŕe a partir de trois vecteur
#ifndef MISE_AU_POINT
inline
#endif
Base3D3H::Base3D3H
( const Coordonnee3H& vv1,const Coordonnee3H& vv2,const Coordonnee3H& vv3) :
v1(vv1),v2(vv2),v3(vv3)
{v[0] = & v1;v[1] = & v1;v[2] = & v1;};
// constructeur de copie
#ifndef MISE_AU_POINT
inline
#endif
Base3D3H::Base3D3H (const Base3D3H & aB) :
v1(aB.v1),v2(aB.v2),v3(aB.v3)
{v[0] = & v1;v[1] = & v1;v[2] = & v1;};
// DESTRUCTEUR :
#ifndef MISE_AU_POINT
inline
#endif
Base3D3H::~Base3D3H ()
{ };
// surcharge de l'affectation
#ifndef MISE_AU_POINT
inline
#endif
Base3D3H & Base3D3H::operator = (const Base3D3H & aH)
{ v1 = aH.v1; v2 = aH.v2;v3 = aH.v3;
v[0] = & v1;v[1] = & v1;v[2] = & v1;
return *this;
};
// retourne le i ieme Coordonnee3s en I/O
#ifndef MISE_AU_POINT
inline
#endif
Coordonnee3H & Base3D3H::operator () (int i)
{
#ifdef MISE_AU_POINT
if ((i < 1) || (i > 3))
{ cout << "\nErreur : vecteur inexistant !\n";
cout << " i = " << i << '\n';
cout << "Base3D3H::OPERATOR() (int ) \n";
Sortie(1);
};
#endif
return *(v[i-1]);
};
// retourne le i ieme Coordonnee3s en lecture only
#ifndef MISE_AU_POINT
inline
#endif
Coordonnee3H Base3D3H::operator () (int i) const
{
#ifdef MISE_AU_POINT
if ((i < 1) || (i > 3))
{ cout << "\nErreur : vecteur inexistant !\n";
cout << " i = " << i << '\n';
cout << "Base3D3H::OPERATOR() (int ) const \n";
Sortie(1);
};
#endif
return *(v[i-1]);
};
// retourne la j ieme composante du i ieme vecteur en I/O
#ifndef MISE_AU_POINT
inline
#endif
double & Base3D3H::operator () (int i,int j)
{
#ifdef MISE_AU_POINT
if ((i < 1) || (i > 3))
{ cout << "\nErreur : vecteur inexistant !\n";
cout << " i = " << i << '\n';
cout << " Base3D3H::operator () (int i,int j)\n";
Sortie(1);
};
if ((j < 1) || (j > 3))
{ cout << "\nErreur : composante inexistante !\n";
cout << " j = " << j << '\n';
cout << " Base3D3H::operator () (int i,int j)\n";
Sortie(1);
};
#endif
return (*(v[i-1]))(j);
};
// retourne la j ieme composante du i ieme vecteur en lecture only
#ifndef MISE_AU_POINT
inline
#endif
double Base3D3H::operator () (int i,int j) const
{
#ifdef MISE_AU_POINT
if ((i < 1) || (i > 3))
{ cout << "\nErreur : vecteur inexistant !\n";
cout << " i = " << i << '\n';
cout << " Base3D3H::operator () (int i,int j)\n";
Sortie(1);
};
if ((j < 1) || (j > 3))
{ cout << "\nErreur : composante inexistante !\n";
cout << " j = " << j << '\n';
cout << " Base3D3H::operator () (int i,int j)\n";
Sortie(1);
};
#endif
return (*(v[i-1]))(j);
};
// surcharge de l'operateur de lecture
#ifndef MISE_AU_POINT
inline
#endif
istream & operator >> ( istream & ent, Base3D3H & ba)
{ // lecture du type et vŕrification
string nomtype; ent >> nomtype;
if (nomtype != "Base3D3H")
{ Sortie(1);
return ent;
}
// lecture des data
ent >> ba.v1 >> ba.v2 >> ba.v3;
return ent;
};
// surcharge de l'operateur d'ecriture
#ifndef MISE_AU_POINT
inline
#endif
ostream & operator << ( ostream & sort,const Base3D3H & ba)
{ // ŕcriture du type
sort << "Base3D3H " ;
// les data
sort << ba.v1 << ba.v2 << ba.v3 << "\n";
return sort;
};
#endif