
// 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 "Droite.h"
#include "ConstMath.h"
#include "MathUtil.h"
#include "ElemMeca.h"
#include "Util.h"
#include <cmath>
#include "TypeConsTens.h"
#include "TypeQuelconqueParticulier.h"

#ifndef  ElContact_deja_inclus
  #include "ElContact.h"
#endif

// contient que les méthodes nécessitant les templates, qui doivent donc être
//incluses dans le .h

#ifndef  ElContact_deja_inclus


#ifdef UTILISATION_MPI // spécifique au calcul parallèle
// ----- pour l'instant ne sert pas !!! on commente ------

//  // stockage dans un unique vecteur, des infos à  partir de l'indice rang inclus
//  // correspond à une sérialisation des  infos
//  // ramène le positionnement dans  v pour un prochain enreg, sauf si > à la taille de v
//  // dans ce cas ramène 0
//  // niveau: == 1 -> niveau minimum de sauvegarde, concerne uniquement la structure de l'élément
//  int ElContact::Pack_vecteur(int niveau, Vecteur&  v,int rang) const
//    { switch (niveau)
//        {case 1:
//             {v(rang) = actif; rang++;
//              int tail_tabNoeud = tabNoeud.Taille();
//              v(rang)= tail_tabNoeud;rang++;
//              for  (int i=1;i<=tail_tabNoeud;i++)
//                {v(rang)= tabNoeud(i)->Num_Mail();rang++;
//                 v(rang)= tabNoeud(i)->Num_noeud();rang++;
//                };
//              v(rang) = num_zone_contact; rang++;
//             }
//            break;
//         default:
//           cout << "\n *** erreur ElContact::Pack_vecteur(int niveau, ..."
//                << " le niveau demande "<< niveau << " n'est pas implante "
//                << " on ne peut pas continuer ";
//           Sortie(1);
//        }
//      return rang;
//    };
//  // taille du conteneur actuel de la condition  linéaire
//  // dépend du niveau de sauvegarde
//  int ElContact::Taille_Pack(int niveau) const
//       { switch (niveau)
//           {case 1:
//               break;
//            default:
//              cout << "\n *** erreur ElContact::Taille_Pack(int niveau, ..."
//                   << " le niveau demande "<< niveau << " n'est pas implante "
//                   << " on ne peut pas continuer ";
//              Sortie(1);
//            }
//
//       };
//
// // modification des infos à  partir de l'indice rang inclus en fonction du vecteur passé en paramètre
//  // correspond à une désérialisation
//  // ramène le positionnement dans  v pour un prochain enreg, sauf si > à la taille de v
//  // dans ce cas ramène 0
//  // on passe  un  pointeur  de fonctions qui ramène un noeud en fonction d'un numéro de maillage et d'un
//  // numéro de noeud, ceci pour éviter de  passer toute l'instance de la classe Les_maillages
//  // niveau: == 1 -> niveau minimum de sauvegarde, concerne uniquement la structure de l'élément
//
//  template <class T> int ElContact::UnPack_vecteur(T& instance,int niveau,const Vecteur&  v,int rang,
//                      Noeud & (T::*Ptfonc) (int num_mail,int  num_noeud) const )
//                         { switch (niveau)
//                             {case 1:
//                                 break;
//                              default:
//                                cout << "\n *** erreur ElContact::UnPack_vecteur(..,int niveau, ..."
//                                     << " le niveau demande "<< niveau << " n'est pas implante "
//                                     << " on ne peut pas continuer ";
//                                Sortie(1);
//                             }
//
//                         };
//
 #endif

#endif


