From cf9d9d7344906960e5fe5126b72eae740e536003 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9rard=20Rio?= Date: Sun, 24 Mar 2024 12:25:52 +0100 Subject: [PATCH] - corr bug affichage intempestif contact MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - fct nD: amélioration message d'erreur (arguments), et en fct du niveau géré par une fct nD - première validation du fct. en // en implicite statique et en RD, nombreuses modifications et amélioration ! --- contact/ElContact_3.cc | 123 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100755 contact/ElContact_3.cc diff --git a/contact/ElContact_3.cc b/contact/ElContact_3.cc new file mode 100755 index 0000000..0890f5f --- /dev/null +++ b/contact/ElContact_3.cc @@ -0,0 +1,123 @@ + +// 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) . +// +// 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 . +// +// For more information, please consult: . + + +#include "Droite.h" +#include "ConstMath.h" +#include "MathUtil.h" +#include "ElemMeca.h" +#include "Util.h" +#include +#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 + + #include "ElContact.h" + +#ifdef UTILISATION_MPI // spécifique au calcul parallèle + // 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); + } + + }; + // 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 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 + +