Back to index

salome-smesh  6.5.0
MeshCut_Maillage.hxx
Go to the documentation of this file.
00001 // Copyright (C) 2006-2012  EDF R&D
00002 //
00003 // This library is free software; you can redistribute it and/or
00004 // modify it under the terms of the GNU Lesser General Public
00005 // License as published by the Free Software Foundation; either
00006 // version 2.1 of the License.
00007 //
00008 // This library is distributed in the hope that it will be useful,
00009 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00010 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00011 // Lesser General Public License for more details.
00012 //
00013 // You should have received a copy of the GNU Lesser General Public
00014 // License along with this library; if not, write to the Free Software
00015 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
00016 //
00017 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
00018 //
00019 
00020 #ifndef __MESHCUT_MAILLAGE_HXX__
00021 #define __MESHCUT_MAILLAGE_HXX__
00022 
00023 #include "MeshCut_Utils.hxx"
00024 
00025 #include <string>
00026 #include <vector>
00027 #include <map>
00028 
00029 namespace MESHCUT
00030   {
00031     class Maillage
00032     {
00033     public:
00034       // Toutes ces variables doivent être placées au niveau du principal pour être connues de toutes les fonctions
00035 
00036       // Vecteurs des familles d'éléments
00037       std::map<int, std::vector<int> > FAMILLES;
00038       std::map<int, std::vector<TYPE_MAILLE> > FAM_TYPES;
00039 
00040       // Vecteurs des familles de noeuds
00041       std::map<int, std::vector<int> > FAMILLES_NOEUDS;
00042 
00043       // Description des groupes (par familles)
00044       std::map<std::string, std::vector<int> > GROUPES_MAILLES;
00045       std::map<std::string, std::vector<int> > GROUPES_NOEUDS;
00046 
00047       // Commun noeuds et mailles
00048       std::map<int, int> tailleFAMILLES; // la clé est un num. de famille
00049       std::map<std::string, int> tailleGROUPES; // Tailles des vecteurs GROUPES_MAILLES et GROUPES_NOEUDS - la clé est un nom de groupe (de noeuds ou de mailles)
00050 
00051       // Résidus mailles
00052       std::map<TYPE_MAILLE, std::vector<int> > RESIDU;
00053 
00054     public:
00055       std::string ID;
00056       int nombreNoeudsMaillage; // ****** MED-OBLIGATOIRE ******
00057       int nombreMaillesMaillage; // ****** MED-OBLIGATOIRE ******
00058 
00059       class Cube *enveloppeMaillage;
00060 
00061       int dimensionMaillage; // ****** MED-OBLIGATOIRE ******
00062       int dimensionEspace; // ****** MED-OBLIGATOIRE ******
00063 
00064       char axisname[3*MED_SNAME_SIZE+1]; // ****** MED-OBLIGATOIRE ******
00065       char unitname[3*MED_SNAME_SIZE+1]; // ****** MED-OBLIGATOIRE ******
00066 
00067       float *XX;
00068       float *YY;
00069       float *ZZ; // ****** MED-OBLIGATOIRE ******
00070 
00071       // Effectifs des éléments par type
00072       std::map<TYPE_MAILLE, int> EFFECTIFS_TYPES; // ****** MED-OBLIGATOIRE ******
00073 
00074       // Connectivités des types
00075       // Le numéro global du j-ième noeud de la maille de numéro global i est stocké à l'adresse
00076       //           CNX[tm]+t*(i-1)+(j-1)
00077       // (t = taille du type, i.e. nombre de noeuds de l'élément)
00078       std::map<TYPE_MAILLE, int*> CNX; // ****** MED-OBLIGATOIRE ******
00079 
00080       // Enveloppes cubiques
00081       std::map<TYPE_MAILLE, float*> EC;
00082 
00083       // Description des groupes
00084       std::map<std::string, std::map<TYPE_MAILLE, std::vector<int> > > GM;
00085       std::map<std::string, std::vector<int> > GN;
00086 
00087       //  std::vector<std::string> IDS_NOEUDS; // Indice = num. global - 1
00088       //  std::map<TYPE_MAILLE, std::vector<std::string> > IDS_MAILLES; // Indice = num local de maille dans le type
00089       //
00090       //  std::vector<int> NUM_NOEUDS; // Indice = num. global - 1
00091       //  std::map<TYPE_MAILLE, std::vector<int> > NUM_MAILLES; // Indice = num local de maille dans le type
00092 
00093       Maillage(std::string _ID);
00094       virtual ~Maillage();
00095 
00096       void creationGMtype(TYPE_MAILLE tm, std::string nomGMtype);
00097       void afficheMailles(TYPE_MAILLE tm);
00098       void listeMaillesType(TYPE_MAILLE tm);
00099       void listeMaillesTousTypes();
00100       void listeMaillesParGM();
00101       void listeMaillesGM(std::string nomGM);
00102       // void listeMaillesGMordonne(std::string nomGM);
00103       void listeNoeuds();
00104       void listeNoeudsGN(std::string nomGN);
00105       void listeNoeudsGNordonne(std::string nomGN);
00106       std::vector<float> G(int i, TYPE_MAILLE tm);
00107       float distanceNoeudMaille(int ngnoeud, int imaille, TYPE_MAILLE tm);
00108       int noeudVoisin(int ngnoeud, int imaille, TYPE_MAILLE tm);
00109       float distanceNoeudNoeud(int ng1, int ng2);
00110       //  void encombrements()
00111 
00112       void inputMED(std::string fichierMED);
00113       void outputMED(std::string fichierMED);
00114       void outputMEDold(std::string fichierMED);
00115 
00116       void inputHL(std::string fichierHL /*, std::string ficDICnoeuds, std::string ficDICmailles, bool DICO */);
00117       void outputHL(std::string fichierHL);
00118 
00119       void outputVRML(std::string ficVRML, float rNoeuds, char *renduAretes, char *renduFaces, float transparence);
00120       // std::string vrmlType(TYPE_MAILLE tm, char *renduAretes, char *renduFaces, float transparence);
00121       // void Maillage::creationGMtype(TYPE_MAILLE tm, std::vector<int> CON_TYPE);
00122       int NGLOBAL(TYPE_MAILLE typeMaille, int nlocal);
00123       int NLOCAL(int nglobal, TYPE_MAILLE tm);
00124       TYPE_MAILLE TYPE(int nglobal);
00125       void eliminationMailles(TYPE_MAILLE typeMaille, std::vector<int> listeMaillesSuppr);
00126 
00127       // acquisitionTYPE_inputMED appelée par inputMED
00128       void
00129           acquisitionTYPE_inputMED(TYPE_MAILLE TYPE, int nTYPE, med_idt fid, char maa[MED_NAME_SIZE + 1], med_int mdim);
00130 
00131       // void infoChamps(std::string type, med_entity_type MEM, med_geometry_type MGE, med_idt fid, char *maa,
00132       //                 char *nomChamp, med_field_type typeChamp, med_int nCompChamp, std::map<std::string, int> REFGAUSS);
00133 
00134       bool NoeudDansHEXA8(int n, int n0, int n1, int n2, int n3, int n4, int n5, int n6, int n7, float epsilon);
00135       bool NoeudDansPENTA6(int n, int n0, int n1, int n2, int n3, int n4, int n5, float epsilon);
00136       bool NoeudDansPYRAM5(int n, int n0, int n1, int n2, int n3, int n4, float epsilon);
00137       bool NoeudDansTETRA4(int n, int n1, int n2, int n3, int n4, float epsilon);
00138       bool NoeudDansQUAD4(int n, int n1, int n2, int n3, int n4, float epsilon);
00139       bool NoeudDansTRIA3(int n, int n1, int n2, int n3, float epsilon);
00140       double volumeTETRA(int n1, int n2, int n3, int n4);
00141       double aireTRIA(int n1, int n2, int n3);
00142       double DET3(int n1, int n2, int n3);
00143       double DET2(int n1, int n2);
00144       void * chargeEnveloppesCubiques(TYPE_MAILLE tm);
00145       void * chargeEnveloppesCarrees(TYPE_MAILLE tm);
00146       bool noeudDeMaille(int ngnoeud, int i, TYPE_MAILLE tm);
00147       bool NoeudDansMaille3D(int n, int i, TYPE_MAILLE tm, float epsilon);
00148       bool NoeudDansMaille2D(int n, int i, TYPE_MAILLE tm, float epsilon);
00149       bool NoeudDansEnveloppeMaille2D(int n, int i, TYPE_MAILLE tm, float epsilon);
00150       bool NoeudDansEnveloppeMaille3D(int n, int i, TYPE_MAILLE tm, float epsilon);
00151       void * afficheEnveloppesCubiques(TYPE_MAILLE tm);
00152       void * afficheEnveloppesCarrees(TYPE_MAILLE tm);
00153 
00154       std::vector<int> noeudsGeomCommuns(int i1, TYPE_MAILLE tm1, int i2, TYPE_MAILLE tm2);
00155       void creationGMresidu();
00156 
00157       float longueurMoyenne();
00158       // void Maillage::infoChamps2(std::string type, med_entity_type MEM, med_geometry_type MGE, med_idt fid,
00159       //                            char *maa, char *nomChamp, med_field_type typeChamp, med_int nCompChamp, map<string,
00160       //                            int> REFGAUSS);
00161 
00162     };
00163   }
00164 
00165 #endif