Back to index

salome-smesh  6.5.0
Classes | Enumerations | Functions | Variables
MESHCUT Namespace Reference

Classes

class  Carre
class  Cube
class  Maillage

Enumerations

enum  TYPE_MAILLE {
  POI1, SEG2, SEG3, TRIA3,
  TRIA6, QUAD4, QUAD8, TETRA4,
  TETRA10, PYRAM5, PYRAM13, PENTA6,
  PENTA15, HEXA8, HEXA20
}

Functions

void cas1 (int VN[6], int it4)
 Le cas 1 traduit le fait que deux des sommets du T4 initial sont dans le plan de coupe.
void cas2 (int VN[6], int it4)
 Deux points d'intersection Le cas 2 traduit le fait qu'un des sommets du T4 est dans le plan de coupe.
void cas3 (int VN[6], int it4)
 Trois points d'intersection ATTENTION: pour les PENTA6 on adopte la convention d'orientation SALOME :
void cas4 (int VN[6], int it4)
 Quatre points d'intersection.
float longueurSegment (int ngA, int ngB)
float distanceNoeudPlan (float point[3])
float distanceNoeudPlan (int ng)
int positionNoeudPlan (int indiceNoeud)
int intersectionSegmentPlan (int it4, int na)
 Equation paramétrique de la droite AB: OP = OA + lambda AB.
bool estUnTypeMaille (std::string S)
void ERREUR (const char *msg)
char * string2char (std::string str)
std::string int2string (int k)
float char2float (const char *ch)
std::string float2string (float f)
bool appartient (std::string e, std::string tableau[], int taille)
float arrondi (float x)
int numNoeudPointe (std::string b1, std::string b2, std::string b3)
std::string strip (std::string S)
std::string entierSur10_g (int i)
std::string entierSur10_d (int i)
std::string typeEnsight (std::string type)
int Nnoeuds (TYPE_MAILLE type)
int NnoeudsGeom (TYPE_MAILLE type)
int codeGMSH (std::string type)
std::string floatEnsight (float x)
bool typeComplexe (std::string type)
std::string ASTER8 (std::string s)
float dObservateur (float a, float b, float c)
 Distance à laquelle doit se tenir l'observateur sur un axe pour voir sous 90° un objet centré de dimensions a et b selon les deux autres axes.
int copieFichier (std::string source, std::string cible)
med_geometry_type InstanceMGE (TYPE_MAILLE TYPE)
int chrono ()
TYPE_MAILLE typeMaille (std::string type)
std::string MGE2string (med_geometry_type MGE)
std::string TM2string (TYPE_MAILLE MGE)
TYPE_MAILLE string2TM (std::string stm)
std::string coordIndex_ILS (TYPE_MAILLE tm)
std::string coordIndex_IFS (TYPE_MAILLE tm)
std::string SIGNE (double x)
void champType (std::string type, med_entity_type MEM, med_geometry_type MGE, med_idt fid, med_idt fidout, char *maa, char *nomChamp, char *nomChampMoy, med_field_type typeChamp, char *compChamp, char *unitChamp, med_int nCompChamp, std::map< std::string, int > REFGAUSS, int ichamp)
std::string nomMaille (TYPE_MAILLE tm, int nl)
bool appartientVN (int n, std::vector< int > V)
float distance2 (float x1, float y1, float z1, float x2, float y2, float z2)
void conversionCNX (int *CNXtm, TYPE_MAILLE tm, int N)
 Conversion HL-MED d'une table de connectivités.

Variables

std::map< std::string, int > intersections
 Table des points d'intersection calculés.
int indexNouvellesMailles
int indexNouveauxNoeuds
int offsetMailles
std::string str_id_GMplus
std::string str_id_GMmoins
MaillageMAILLAGE1
MaillageMAILLAGE2
std::vector< float > newXX
std::vector< float > newYY
std::vector< float > newZZ
std::map< TYPE_MAILLE,
std::vector< int > > 
newCNX
std::map< TYPE_MAILLE, int > cptNouvellesMailles
std::map< TYPE_MAILLE,
std::vector< int > > 
GMplus
std::map< TYPE_MAILLE,
std::vector< int > > 
GMmoins
std::vector< int > cutTetras
float * DNP
 Distance Noeud Plan.
int * POSN
 Version -1/0/+1 du précédent, selon epsilon.
std::string str_id_maillagenew
float normale [3]
float pointPlan [3]
 Définition du plan de coupe.
float d
 coefficient constant de l'équation du plan de coupe
float epsilon
 distance en dessous de laquelle un point est considéré comme appartenant au plan de coupe
bool debug
int Naretes

Enumeration Type Documentation

Enumerator:
POI1 
SEG2 
SEG3 
TRIA3 
TRIA6 
QUAD4 
QUAD8 
TETRA4 
TETRA10 
PYRAM5 
PYRAM13 
PENTA6 
PENTA15 
HEXA8 
HEXA20 

Definition at line 35 of file MeshCut_Utils.hxx.


Function Documentation

bool MESHCUT::appartient ( std::string  e,
std::string  tableau[],
int  taille 
)

Definition at line 86 of file MeshCut_Utils.cxx.

{
  for (int i = 0; i < taille; i++)
    if (tableau[i] == e)
      return true;
  return false;
}
bool MESHCUT::appartientVN ( int  n,
std::vector< int >  V 
)

Definition at line 1017 of file MeshCut_Utils.cxx.

{
  bool app = false;
  for (unsigned int i = 0; i < V.size(); i++)
    if (n == V[i])
      {
        app = true;
        break;
      }
  return app;
}
float MESHCUT::arrondi ( float  x)

Definition at line 94 of file MeshCut_Utils.cxx.

{
  if (x > 0 && x < 1.0e-5)
    return 0;
  else if (x < 0 && x > -1.0e-5)
    return 0;
  else
    return x;
}
std::string MESHCUT::ASTER8 ( std::string  s)

Definition at line 474 of file MeshCut_Utils.cxx.

{
  if (s.size() == 0)
    return (s + (string) "        ");
  else if (s.size() == 1)
    return (s + (string) "       ");
  else if (s.size() == 2)
    return (s + (string) "      ");
  else if (s.size() == 3)
    return (s + (string) "     ");
  else if (s.size() == 4)
    return (s + (string) "    ");
  else if (s.size() == 5)
    return (s + (string) "   ");
  else if (s.size() == 6)
    return (s + (string) "  ");
  else if (s.size() == 7)
    return (s + (string) " ");
  else if (s.size() == 8)
    return (s);
  else
    ERREUR("More than 8 char for an ASTER string");
  return (s);
}

Here is the call graph for this function:

void MESHCUT::cas1 ( int  VN[6],
int  it4 
)

Le cas 1 traduit le fait que deux des sommets du T4 initial sont dans le plan de coupe.

Le point d'intersection franc trouvé est sur l'arête opposée à ces deux points du T4.

Le T4 initial produit deux nouveaux T4.

Definition at line 33 of file MeshCut_Cas.cxx.

{
  cutTetras.push_back(it4);
  //  cout << "Cas 1 - it4=" << it4 << ", VN = " << VN[0] << " " << VN[1] << " " << VN[2] << " " << VN[3] << " " << VN[4]
  //      << " " << VN[5] << " " << endl;

  // Numéros des noeuds du TETRA4
  int ng0 = MAILLAGE1->CNX[TETRA4][4 * it4 + 0];
  int ng1 = MAILLAGE1->CNX[TETRA4][4 * it4 + 1];
  int ng2 = MAILLAGE1->CNX[TETRA4][4 * it4 + 2];
  int ng3 = MAILLAGE1->CNX[TETRA4][4 * it4 + 3];

  int i1, i2;

  if (VN[0] != -1)
    {
      // Le sommet de T4new1 servant à la détermination du groupe est le noeud 1 du T4 d'origine

      // cout << "cas 1/0" << endl;
      newCNX[TETRA4].push_back(VN[0]);
      newCNX[TETRA4].push_back(ng1);
      newCNX[TETRA4].push_back(ng2);
      newCNX[TETRA4].push_back(ng3);
      cptNouvellesMailles[TETRA4]++;
      i1 = cptNouvellesMailles[TETRA4] - 1;

      newCNX[TETRA4].push_back(ng0);
      newCNX[TETRA4].push_back(VN[0]);
      newCNX[TETRA4].push_back(ng2);
      newCNX[TETRA4].push_back(ng3);
      cptNouvellesMailles[TETRA4]++;
      i2 = cptNouvellesMailles[TETRA4] - 1;

      if (POSN[ng1 - 1] == 1)
        {
          GMplus[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + i1);
          GMmoins[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + i2);
        }
      else
        {
          GMplus[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + i2);
          GMmoins[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + i1);
        }
    }

  else if (VN[1] != -1)
    {
      // Le sommet de T4new1 servant à la détermination du groupe est le noeud 0 du T4 d'origine

      // cout << "cas 1/1" << endl;
      newCNX[TETRA4].push_back(ng0);
      newCNX[TETRA4].push_back(ng1);
      newCNX[TETRA4].push_back(VN[1]);
      newCNX[TETRA4].push_back(ng3);
      cptNouvellesMailles[TETRA4]++;
      i1 = cptNouvellesMailles[TETRA4] - 1;

      newCNX[TETRA4].push_back(ng1);
      newCNX[TETRA4].push_back(ng2);
      newCNX[TETRA4].push_back(VN[1]);
      newCNX[TETRA4].push_back(ng3);
      cptNouvellesMailles[TETRA4]++;
      i2 = cptNouvellesMailles[TETRA4] - 1;

      if (POSN[ng0 - 1] == 1)
        {
          GMplus[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + i1);
          GMmoins[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + i2);
        }
      else
        {
          GMplus[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + i2);
          GMmoins[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + i1);
        }
    }

  else if (VN[2] != -1)
    {
      // Le sommet de T4new1 servant à la détermination du groupe est le noeud 0 du T4 d'origine

      // cout << "cas 1/2" << endl;
      newCNX[TETRA4].push_back(ng0);
      newCNX[TETRA4].push_back(ng1);
      newCNX[TETRA4].push_back(ng2);
      newCNX[TETRA4].push_back(VN[2]);
      cptNouvellesMailles[TETRA4]++;
      i1 = cptNouvellesMailles[TETRA4] - 1;

      newCNX[TETRA4].push_back(ng1);
      newCNX[TETRA4].push_back(ng2);
      newCNX[TETRA4].push_back(VN[2]);
      newCNX[TETRA4].push_back(ng3);
      cptNouvellesMailles[TETRA4]++;
      i2 = cptNouvellesMailles[TETRA4] - 1;

      if (POSN[ng0 - 1] == 1)
        {
          GMplus[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + i1);
          GMmoins[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + i2);
        }
      else
        {
          GMplus[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + i2);
          GMmoins[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + i1);
        }
    }

  else if (VN[3] != -1)
    {
      // Le sommet de T4new1 servant à la détermination du groupe est le noeud 1 du T4 d'origine

      // cout << "cas 1/3" << endl;
      newCNX[TETRA4].push_back(ng0);
      newCNX[TETRA4].push_back(ng1);
      newCNX[TETRA4].push_back(VN[3]);
      newCNX[TETRA4].push_back(ng3);
      cptNouvellesMailles[TETRA4]++;
      i1 = cptNouvellesMailles[TETRA4] - 1;

      newCNX[TETRA4].push_back(ng0);
      newCNX[TETRA4].push_back(VN[3]);
      newCNX[TETRA4].push_back(ng2);
      newCNX[TETRA4].push_back(ng3);
      cptNouvellesMailles[TETRA4]++;
      i2 = cptNouvellesMailles[TETRA4] - 1;

      if (POSN[ng1 - 1] == 1)
        {
          GMplus[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + i1);
          GMmoins[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + i2);
        }
      else
        {
          GMplus[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + i2);
          GMmoins[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + i1);
        }
    }

  else if (VN[4] != -1)
    {
      // Le sommet de T4new1 servant à la détermination du groupe est le noeud 1 du T4 d'origine

      // cout << "cas 1/4" << endl;
      newCNX[TETRA4].push_back(ng0);
      newCNX[TETRA4].push_back(ng1);
      newCNX[TETRA4].push_back(ng2);
      newCNX[TETRA4].push_back(VN[4]);
      cptNouvellesMailles[TETRA4]++;
      i1 = cptNouvellesMailles[TETRA4] - 1;

      newCNX[TETRA4].push_back(ng0);
      newCNX[TETRA4].push_back(VN[4]);
      newCNX[TETRA4].push_back(ng2);
      newCNX[TETRA4].push_back(ng3);
      cptNouvellesMailles[TETRA4]++;
      i2 = cptNouvellesMailles[TETRA4] - 1;

      if (POSN[ng1 - 1] == 1)
        {
          GMplus[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + i1);
          GMmoins[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + i2);
        }
      else
        {
          GMplus[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + i2);
          GMmoins[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + i1);
        }
    }

  else if (VN[5] != -1)
    {
      // Le sommet de T4new1 servant à la détermination du groupe est le noeud 3 du T4 d'origine

      // cout << "cas 1/5" << endl;
      newCNX[TETRA4].push_back(ng0);
      newCNX[TETRA4].push_back(ng1);
      newCNX[TETRA4].push_back(VN[5]);
      newCNX[TETRA4].push_back(ng3);
      cptNouvellesMailles[TETRA4]++;
      i1 = cptNouvellesMailles[TETRA4] - 1;

      newCNX[TETRA4].push_back(ng0);
      newCNX[TETRA4].push_back(ng1);
      newCNX[TETRA4].push_back(ng2);
      newCNX[TETRA4].push_back(VN[5]);
      cptNouvellesMailles[TETRA4]++;
      i2 = cptNouvellesMailles[TETRA4] - 1;

      if (POSN[ng3 - 1] == 1)
        {
          GMplus[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + i1);
          GMmoins[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + i2);
        }
      else
        {
          GMplus[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + i2);
          GMmoins[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + i1);
        }
    }

  else
    ERREUR(" Intersections configuration not taken into account (case cptPI=1) ");

  //int nl1 = MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + i1;
  //int nl2 = MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + i2;
  // cout << "La maille TETRA4 " << it4 << " produit les mailles TETRA4-" << nl1 << " et TETRA4-" << nl2 << endl;

}

Here is the call graph for this function:

Here is the caller graph for this function:

void MESHCUT::cas2 ( int  VN[6],
int  it4 
)

Deux points d'intersection Le cas 2 traduit le fait qu'un des sommets du T4 est dans le plan de coupe.

Ce sommet est celui des quatre qui n'appartient à aucune des deux arêtes sur lesquelles un point d'intersection non -1 a été calculé.

Le T4 initial produit un nouveau T4 et un élément PYRAM5.

Definition at line 250 of file MeshCut_Cas.cxx.

{
  cutTetras.push_back(it4);
  //  cout << "Cas 2 - it4=" << it4 << ", VN = " << VN[0] << " " << VN[1] << " " << VN[2] << " " << VN[3] << " " << VN[4]
  //      << " " << VN[5] << " " << endl;

  // Numéros des noeuds du TETRA4
  int ng0 = MAILLAGE1->CNX[TETRA4][4 * it4 + 0];
  int ng1 = MAILLAGE1->CNX[TETRA4][4 * it4 + 1];
  int ng2 = MAILLAGE1->CNX[TETRA4][4 * it4 + 2];
  int ng3 = MAILLAGE1->CNX[TETRA4][4 * it4 + 3];

  if (VN[0] != -1 && VN[1] != -1)
    {
      // Le sommet du nouveau T4 est le noeud 0 du T4 d'origine

      // cout << "cas 2.01" << endl;
      newCNX[TETRA4].push_back(VN[0]);
      newCNX[TETRA4].push_back(ng3);
      newCNX[TETRA4].push_back(VN[1]);
      newCNX[TETRA4].push_back(ng0);
      cptNouvellesMailles[TETRA4]++;

      newCNX[PYRAM5].push_back(VN[0]);
      newCNX[PYRAM5].push_back(ng1);
      newCNX[PYRAM5].push_back(ng2);
      newCNX[PYRAM5].push_back(VN[1]);
      newCNX[PYRAM5].push_back(ng3);
      cptNouvellesMailles[PYRAM5]++;

      if (POSN[ng0 - 1] == 1)
        {
          GMplus[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + cptNouvellesMailles[TETRA4] - 1);
          GMmoins[PYRAM5].push_back(MAILLAGE1->EFFECTIFS_TYPES[PYRAM5] + cptNouvellesMailles[PYRAM5] - 1);
        }
      else
        {
          GMmoins[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + cptNouvellesMailles[TETRA4] - 1);
          GMplus[PYRAM5].push_back(MAILLAGE1->EFFECTIFS_TYPES[PYRAM5] + cptNouvellesMailles[PYRAM5] - 1);
        }
    }
  else if (VN[0] != -1 && VN[2] != -1)
    {
      // Le sommet du nouveau T4 est le noeud 0 du T4 d'origine

      // cout << "cas 2.02" << endl;
      newCNX[TETRA4].push_back(VN[0]);
      newCNX[TETRA4].push_back(VN[2]);
      newCNX[TETRA4].push_back(ng2);
      newCNX[TETRA4].push_back(ng0);
      cptNouvellesMailles[TETRA4]++;

      newCNX[PYRAM5].push_back(VN[0]);
      newCNX[PYRAM5].push_back(VN[2]);
      newCNX[PYRAM5].push_back(ng3);
      newCNX[PYRAM5].push_back(ng1);
      newCNX[PYRAM5].push_back(ng2);
      cptNouvellesMailles[PYRAM5]++;

      if (POSN[ng0 - 1] == 1)
        {
          GMplus[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + cptNouvellesMailles[TETRA4] - 1);
          GMmoins[PYRAM5].push_back(MAILLAGE1->EFFECTIFS_TYPES[PYRAM5] + cptNouvellesMailles[PYRAM5] - 1);
        }
      else
        {
          GMmoins[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + cptNouvellesMailles[TETRA4] - 1);
          GMplus[PYRAM5].push_back(MAILLAGE1->EFFECTIFS_TYPES[PYRAM5] + cptNouvellesMailles[PYRAM5] - 1);
        }
    }
  else if (VN[0] != -1 && VN[3] != -1)
    {
      // Le sommet du nouveau T4 est le noeud 1 du T4 d'origine

      // cout << "cas 2.03" << endl;
      newCNX[TETRA4].push_back(VN[0]);
      newCNX[TETRA4].push_back(VN[3]);
      newCNX[TETRA4].push_back(ng3);
      newCNX[TETRA4].push_back(ng1);
      cptNouvellesMailles[TETRA4]++;

      newCNX[PYRAM5].push_back(VN[0]);
      newCNX[PYRAM5].push_back(VN[3]);
      newCNX[PYRAM5].push_back(ng2);
      newCNX[PYRAM5].push_back(ng0);
      newCNX[PYRAM5].push_back(ng3);
      cptNouvellesMailles[PYRAM5]++;

      if (POSN[ng1 - 1] == 1)
        {
          GMplus[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + cptNouvellesMailles[TETRA4] - 1);
          GMmoins[PYRAM5].push_back(MAILLAGE1->EFFECTIFS_TYPES[PYRAM5] + cptNouvellesMailles[PYRAM5] - 1);
        }
      else
        {
          GMmoins[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + cptNouvellesMailles[TETRA4] - 1);
          GMplus[PYRAM5].push_back(MAILLAGE1->EFFECTIFS_TYPES[PYRAM5] + cptNouvellesMailles[PYRAM5] - 1);
        }
    }
  else if (VN[0] != -1 && VN[4] != -1)
    {
      // Le sommet du nouveau T4 est le noeud 1 du T4 d'origine

      // cout << "cas 2.04" << endl;
      newCNX[TETRA4].push_back(VN[0]);
      newCNX[TETRA4].push_back(ng2);
      newCNX[TETRA4].push_back(VN[4]);
      newCNX[TETRA4].push_back(ng1);
      cptNouvellesMailles[TETRA4]++;

      newCNX[PYRAM5].push_back(ng0);
      newCNX[PYRAM5].push_back(ng3);
      newCNX[PYRAM5].push_back(VN[4]);
      newCNX[PYRAM5].push_back(VN[0]);
      newCNX[PYRAM5].push_back(ng2);
      cptNouvellesMailles[PYRAM5]++;

      if (POSN[ng1 - 1] == 1)
        {
          GMplus[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + cptNouvellesMailles[TETRA4] - 1);
          GMmoins[PYRAM5].push_back(MAILLAGE1->EFFECTIFS_TYPES[PYRAM5] + cptNouvellesMailles[PYRAM5] - 1);
        }
      else
        {
          GMmoins[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + cptNouvellesMailles[TETRA4] - 1);
          GMplus[PYRAM5].push_back(MAILLAGE1->EFFECTIFS_TYPES[PYRAM5] + cptNouvellesMailles[PYRAM5] - 1);
        }
    }

  else if (VN[0] != -1 && VN[5] != -1)
    ERREUR("Case 2/05 forbidden");

  else if (VN[1] != -1 && VN[2] != -1)
    {
      // Le sommet du nouveau T4 est le noeud 0 du T4 d'origine

      // cout << "cas 2.12" << endl;
      newCNX[TETRA4].push_back(ng1);
      newCNX[TETRA4].push_back(VN[2]);
      newCNX[TETRA4].push_back(VN[1]);
      newCNX[TETRA4].push_back(ng0);
      cptNouvellesMailles[TETRA4]++;

      newCNX[PYRAM5].push_back(ng2);
      newCNX[PYRAM5].push_back(ng3);
      newCNX[PYRAM5].push_back(VN[2]);
      newCNX[PYRAM5].push_back(VN[1]);
      newCNX[PYRAM5].push_back(ng1);
      cptNouvellesMailles[PYRAM5]++;

      if (POSN[ng0 - 1] == 1)
        {
          GMplus[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + cptNouvellesMailles[TETRA4] - 1);
          GMmoins[PYRAM5].push_back(MAILLAGE1->EFFECTIFS_TYPES[PYRAM5] + cptNouvellesMailles[PYRAM5] - 1);
        }
      else
        {
          GMmoins[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + cptNouvellesMailles[TETRA4] - 1);
          GMplus[PYRAM5].push_back(MAILLAGE1->EFFECTIFS_TYPES[PYRAM5] + cptNouvellesMailles[PYRAM5] - 1);
        }
    }
  else if (VN[1] != -1 && VN[3] != -1)
    {
      // Le sommet du nouveau T4 est le noeud 2 du T4 d'origine

      // cout << "cas 2.13" << endl;
      newCNX[TETRA4].push_back(VN[1]);
      newCNX[TETRA4].push_back(ng3);
      newCNX[TETRA4].push_back(VN[3]);
      newCNX[TETRA4].push_back(ng2);
      cptNouvellesMailles[TETRA4]++;

      newCNX[PYRAM5].push_back(ng0);
      newCNX[PYRAM5].push_back(ng1);
      newCNX[PYRAM5].push_back(VN[3]);
      newCNX[PYRAM5].push_back(VN[1]);
      newCNX[PYRAM5].push_back(ng3);
      cptNouvellesMailles[PYRAM5]++;

      if (POSN[ng2 - 1] == 1)
        {
          GMplus[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + cptNouvellesMailles[TETRA4] - 1);
          GMmoins[PYRAM5].push_back(MAILLAGE1->EFFECTIFS_TYPES[PYRAM5] + cptNouvellesMailles[PYRAM5] - 1);
        }
      else
        {
          GMmoins[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + cptNouvellesMailles[TETRA4] - 1);
          GMplus[PYRAM5].push_back(MAILLAGE1->EFFECTIFS_TYPES[PYRAM5] + cptNouvellesMailles[PYRAM5] - 1);
        }
    }

  else if (VN[1] != -1 && VN[4] != -1)
    ERREUR("Case 2/14 excluded");

  else if (VN[1] != -1 && VN[5] != -1)
    {
      // Le sommet du nouveau T4 est le noeud 2 du T4 d'origine

      // cout << "cas 2.15" << endl;
      newCNX[TETRA4].push_back(ng1);
      newCNX[TETRA4].push_back(ng2);
      newCNX[TETRA4].push_back(VN[1]);
      newCNX[TETRA4].push_back(VN[5]);
      cptNouvellesMailles[TETRA4]++;

      newCNX[PYRAM5].push_back(VN[1]);
      newCNX[PYRAM5].push_back(VN[5]);
      newCNX[PYRAM5].push_back(ng3);
      newCNX[PYRAM5].push_back(ng0);
      newCNX[PYRAM5].push_back(ng1);
      cptNouvellesMailles[PYRAM5]++;

      if (POSN[ng2 - 1] == 1)
        {
          GMplus[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + cptNouvellesMailles[TETRA4] - 1);
          GMmoins[PYRAM5].push_back(MAILLAGE1->EFFECTIFS_TYPES[PYRAM5] + cptNouvellesMailles[PYRAM5] - 1);
        }
      else
        {
          GMmoins[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + cptNouvellesMailles[TETRA4] - 1);
          GMplus[PYRAM5].push_back(MAILLAGE1->EFFECTIFS_TYPES[PYRAM5] + cptNouvellesMailles[PYRAM5] - 1);
        }
    }

  else if (VN[2] != -1 && VN[3] != -1)
    ERREUR("Case 2/23 excluded");

  else if (VN[2] != -1 && VN[4] != -1)
    {
      // Le sommet du nouveau T4 est le noeud 3 du T4 d'origine

      // cout << "cas 2.24" << endl;
      newCNX[TETRA4].push_back(VN[2]);
      newCNX[TETRA4].push_back(VN[4]);
      newCNX[TETRA4].push_back(ng2);
      newCNX[TETRA4].push_back(ng3);
      cptNouvellesMailles[TETRA4]++;

      newCNX[PYRAM5].push_back(ng0);
      newCNX[PYRAM5].push_back(VN[2]);
      newCNX[PYRAM5].push_back(VN[4]);
      newCNX[PYRAM5].push_back(ng1);
      newCNX[PYRAM5].push_back(ng2);
      cptNouvellesMailles[PYRAM5]++;

      if (POSN[ng3 - 1] == 1)
        {
          GMplus[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + cptNouvellesMailles[TETRA4] - 1);
          GMmoins[PYRAM5].push_back(MAILLAGE1->EFFECTIFS_TYPES[PYRAM5] + cptNouvellesMailles[PYRAM5] - 1);
        }
      else
        {
          GMmoins[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + cptNouvellesMailles[TETRA4] - 1);
          GMplus[PYRAM5].push_back(MAILLAGE1->EFFECTIFS_TYPES[PYRAM5] + cptNouvellesMailles[PYRAM5] - 1);
        }
    }

  else if (VN[2] != -1 && VN[5] != -1)
    {
      // Le sommet du nouveau T4 est le noeud 3 du T4 d'origine

      // cout << "cas 2.25" << endl;
      newCNX[TETRA4].push_back(ng1);
      newCNX[TETRA4].push_back(VN[5]);
      newCNX[TETRA4].push_back(VN[2]);
      newCNX[TETRA4].push_back(ng3);
      cptNouvellesMailles[TETRA4]++;

      newCNX[PYRAM5].push_back(ng0);
      newCNX[PYRAM5].push_back(ng2);
      newCNX[PYRAM5].push_back(VN[5]);
      newCNX[PYRAM5].push_back(VN[2]);
      newCNX[PYRAM5].push_back(ng1);
      cptNouvellesMailles[PYRAM5]++;

      if (POSN[ng3 - 1] == 1)
        {
          GMplus[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + cptNouvellesMailles[TETRA4] - 1);
          GMmoins[PYRAM5].push_back(MAILLAGE1->EFFECTIFS_TYPES[PYRAM5] + cptNouvellesMailles[PYRAM5] - 1);
        }
      else
        {
          GMmoins[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + cptNouvellesMailles[TETRA4] - 1);
          GMplus[PYRAM5].push_back(MAILLAGE1->EFFECTIFS_TYPES[PYRAM5] + cptNouvellesMailles[PYRAM5] - 1);
        }
    }

  else if (VN[3] != -1 && VN[4] != -1)
    {
      // Le sommet du nouveau T4 est le noeud 1 du T4 d'origine

      // cout << "cas 2.34" << endl;
      newCNX[TETRA4].push_back(ng0);
      newCNX[TETRA4].push_back(VN[3]);
      newCNX[TETRA4].push_back(VN[4]);
      newCNX[TETRA4].push_back(ng1);
      cptNouvellesMailles[TETRA4]++;

      newCNX[PYRAM5].push_back(VN[3]);
      newCNX[PYRAM5].push_back(VN[4]);
      newCNX[PYRAM5].push_back(ng3);
      newCNX[PYRAM5].push_back(ng2);
      newCNX[PYRAM5].push_back(ng0);
      cptNouvellesMailles[PYRAM5]++;

      if (POSN[ng1 - 1] == 1)
        {
          GMplus[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + cptNouvellesMailles[TETRA4] - 1);
          GMmoins[PYRAM5].push_back(MAILLAGE1->EFFECTIFS_TYPES[PYRAM5] + cptNouvellesMailles[PYRAM5] - 1);
        }
      else
        {
          GMmoins[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + cptNouvellesMailles[TETRA4] - 1);
          GMplus[PYRAM5].push_back(MAILLAGE1->EFFECTIFS_TYPES[PYRAM5] + cptNouvellesMailles[PYRAM5] - 1);
        }
    }

  else if (VN[3] != -1 && VN[5] != -1)
    {
      // Le sommet du nouveau T4 est le noeud 2 du T4 d'origine

      // cout << "cas 2.35" << endl;
      newCNX[TETRA4].push_back(VN[3]);
      newCNX[TETRA4].push_back(VN[5]);
      newCNX[TETRA4].push_back(ng2);
      newCNX[TETRA4].push_back(ng0);
      cptNouvellesMailles[TETRA4]++;

      newCNX[PYRAM5].push_back(VN[3]);
      newCNX[PYRAM5].push_back(ng1);
      newCNX[PYRAM5].push_back(ng3);
      newCNX[PYRAM5].push_back(VN[5]);
      newCNX[PYRAM5].push_back(ng0);
      cptNouvellesMailles[PYRAM5]++;

      if (POSN[ng2 - 1] == 1)
        {
          GMplus[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + cptNouvellesMailles[TETRA4] - 1);
          GMmoins[PYRAM5].push_back(MAILLAGE1->EFFECTIFS_TYPES[PYRAM5] + cptNouvellesMailles[PYRAM5] - 1);
        }
      else
        {
          GMmoins[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + cptNouvellesMailles[TETRA4] - 1);
          GMplus[PYRAM5].push_back(MAILLAGE1->EFFECTIFS_TYPES[PYRAM5] + cptNouvellesMailles[PYRAM5] - 1);
        }
    }

  else if (VN[4] != -1 && VN[5] != -1)
    {
      // Le sommet du nouveau T4 est le noeud 3 du T4 d'origine

      // cout << "cas 2.35" << endl;
      newCNX[TETRA4].push_back(ng0);
      newCNX[TETRA4].push_back(VN[4]);
      newCNX[TETRA4].push_back(VN[5]);
      newCNX[TETRA4].push_back(ng3);
      cptNouvellesMailles[TETRA4]++;

      newCNX[PYRAM5].push_back(ng1);
      newCNX[PYRAM5].push_back(VN[4]);
      newCNX[PYRAM5].push_back(VN[5]);
      newCNX[PYRAM5].push_back(ng2);
      newCNX[PYRAM5].push_back(ng0);
      cptNouvellesMailles[PYRAM5]++;

      if (POSN[ng3 - 1] == 1)
        {
          GMplus[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + cptNouvellesMailles[TETRA4] - 1);
          GMmoins[PYRAM5].push_back(MAILLAGE1->EFFECTIFS_TYPES[PYRAM5] + cptNouvellesMailles[PYRAM5] - 1);
        }
      else
        {
          GMmoins[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + cptNouvellesMailles[TETRA4] - 1);
          GMplus[PYRAM5].push_back(MAILLAGE1->EFFECTIFS_TYPES[PYRAM5] + cptNouvellesMailles[PYRAM5] - 1);
        }
    }

  else
    ERREUR(" Intersections configuration not taken into account (case cptPI=2) ");

  // int ngT4 = MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + cptNouvellesMailles[TETRA4] - 1;
  // int ngP5 = MAILLAGE1->EFFECTIFS_TYPES[PYRAM5] + cptNouvellesMailles[PYRAM5] - 1;
  // cout << "La maille TETRA4 " << it4 << " produit les mailles TETRA4-" << ngT4 << " et PYRAM5-" << ngP5 << endl;

}

Here is the call graph for this function:

Here is the caller graph for this function:

void MESHCUT::cas3 ( int  VN[6],
int  it4 
)

Trois points d'intersection ATTENTION: pour les PENTA6 on adopte la convention d'orientation SALOME :

N1 N2 N3 N4 N5 N6

où N1 N2 N3 sont les sommets du haut et N4 N5 N6 les sommets du bas (selon l'orientation donnée par le sens des triangles)

Definition at line 644 of file MeshCut_Cas.cxx.

{
  cutTetras.push_back(it4);
  // cout << "Cas 3 - it4="<<it4<<", VN = " << VN[0] << " " << VN[1] << " " << VN[2] << " " << VN[3] << " " << VN[4] << " " << VN[5] << " " << endl;

  // Numéros des noeuds du TETRA4
  int ng0 = MAILLAGE1->CNX[TETRA4][4 * it4 + 0];
  int ng1 = MAILLAGE1->CNX[TETRA4][4 * it4 + 1];
  int ng2 = MAILLAGE1->CNX[TETRA4][4 * it4 + 2];
  int ng3 = MAILLAGE1->CNX[TETRA4][4 * it4 + 3];

  if (VN[0] != -1 && VN[1] != -1 && VN[2] != -1)
    {

      // Le sommet du nouveau T4 est le noeud 0 du T4 d'origine

      newCNX[TETRA4].push_back(ng0);
      newCNX[TETRA4].push_back(VN[0]);
      newCNX[TETRA4].push_back(VN[1]);
      newCNX[TETRA4].push_back(VN[2]);
      cptNouvellesMailles[TETRA4]++;

      newCNX[PENTA6].push_back(ng1);
      newCNX[PENTA6].push_back(ng3);
      newCNX[PENTA6].push_back(ng2);
      newCNX[PENTA6].push_back(VN[0]);
      newCNX[PENTA6].push_back(VN[2]);
      newCNX[PENTA6].push_back(VN[1]);
      cptNouvellesMailles[PENTA6]++;

      if (POSN[ng0 - 1] == 1)
        {
          GMplus[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + cptNouvellesMailles[TETRA4] - 1);
          GMmoins[PENTA6].push_back(MAILLAGE1->EFFECTIFS_TYPES[PENTA6] + cptNouvellesMailles[PENTA6] - 1);
        }
      else
        {
          GMmoins[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + cptNouvellesMailles[TETRA4] - 1);
          GMplus[PENTA6].push_back(MAILLAGE1->EFFECTIFS_TYPES[PENTA6] + cptNouvellesMailles[PENTA6] - 1);
        }
    }

  else if (VN[0] != -1 && VN[3] != -1 && VN[4] != -1)
    {
      // Le sommet du nouveau T4 est le noeud 1 du T4 d'origine

      //cout << "cas 3.2 (noeud sommet 1)" << endl;
      newCNX[TETRA4].push_back(VN[0]);
      newCNX[TETRA4].push_back(ng1);
      newCNX[TETRA4].push_back(VN[3]);
      newCNX[TETRA4].push_back(VN[4]);
      cptNouvellesMailles[TETRA4]++;

      newCNX[PENTA6].push_back(ng0);
      newCNX[PENTA6].push_back(ng2);
      newCNX[PENTA6].push_back(ng3);
      newCNX[PENTA6].push_back(VN[0]);
      newCNX[PENTA6].push_back(VN[3]);
      newCNX[PENTA6].push_back(VN[4]);
      cptNouvellesMailles[PENTA6]++;

      if (POSN[ng1 - 1] == 1)
        {
          GMplus[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + cptNouvellesMailles[TETRA4] - 1);
          GMmoins[PENTA6].push_back(MAILLAGE1->EFFECTIFS_TYPES[PENTA6] + cptNouvellesMailles[PENTA6] - 1);
        }
      else
        {
          GMmoins[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + cptNouvellesMailles[TETRA4] - 1);
          GMplus[PENTA6].push_back(MAILLAGE1->EFFECTIFS_TYPES[PENTA6] + cptNouvellesMailles[PENTA6] - 1);
        }
    }
  else if (VN[1] != -1 && VN[3] != -1 && VN[5] != -1)
    {
      // Le sommet du nouveau T4 est le noeud 2 du T4 d'origine

      //cout << "cas 3.3 (noeud sommet 2)" << endl;

      newCNX[TETRA4].push_back(VN[1]);
      newCNX[TETRA4].push_back(VN[3]);
      newCNX[TETRA4].push_back(ng2);
      newCNX[TETRA4].push_back(VN[5]);
      cptNouvellesMailles[TETRA4]++;

      newCNX[PENTA6].push_back(ng0);
      newCNX[PENTA6].push_back(ng3);
      newCNX[PENTA6].push_back(ng1);
      newCNX[PENTA6].push_back(VN[1]);
      newCNX[PENTA6].push_back(VN[5]);
      newCNX[PENTA6].push_back(VN[3]);
      cptNouvellesMailles[PENTA6]++;

      if (POSN[ng2 - 1] == 1)
        {
          GMplus[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + cptNouvellesMailles[TETRA4] - 1);
          GMmoins[PENTA6].push_back(MAILLAGE1->EFFECTIFS_TYPES[PENTA6] + cptNouvellesMailles[PENTA6] - 1);
        }
      else
        {
          GMmoins[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + cptNouvellesMailles[TETRA4] - 1);
          GMplus[PENTA6].push_back(MAILLAGE1->EFFECTIFS_TYPES[PENTA6] + cptNouvellesMailles[PENTA6] - 1);
        }
    }
  else if (VN[2] != -1 && VN[4] != -1 && VN[5] != -1)
    {
      // Le sommet du nouveau T4 est le noeud 3 du T4 d'origine

      newCNX[TETRA4].push_back(VN[2]);
      newCNX[TETRA4].push_back(VN[4]);
      newCNX[TETRA4].push_back(VN[5]);
      newCNX[TETRA4].push_back(ng3);
      cptNouvellesMailles[TETRA4]++;

      newCNX[PENTA6].push_back(ng0);
      newCNX[PENTA6].push_back(ng1);
      newCNX[PENTA6].push_back(ng2);
      newCNX[PENTA6].push_back(VN[2]);
      newCNX[PENTA6].push_back(VN[4]);
      newCNX[PENTA6].push_back(VN[5]);
      cptNouvellesMailles[PENTA6]++;

      if (POSN[ng3 - 1] == 1)
        {
          GMplus[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + cptNouvellesMailles[TETRA4] - 1);
          GMmoins[PENTA6].push_back(MAILLAGE1->EFFECTIFS_TYPES[PENTA6] + cptNouvellesMailles[PENTA6] - 1);
        }
      else
        {
          GMmoins[TETRA4].push_back(MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + cptNouvellesMailles[TETRA4] - 1);
          GMplus[PENTA6].push_back(MAILLAGE1->EFFECTIFS_TYPES[PENTA6] + cptNouvellesMailles[PENTA6] - 1);
        }
    }
  else
    {
      //      cout << "Cas 3 - it4=" << it4 << ", VN = " << VN[0] << " " << VN[1] << " " << VN[2] << " " << VN[3] << " "
      //          << VN[4] << " " << VN[5] << " " << endl;
      //
      //      int n0 = *(MAILLAGE1->CNX[TETRA4] + it4 * 4 + 0);
      //      float x0 = MAILLAGE1->XX[n0 - 1];
      //      float y0 = MAILLAGE1->YY[n0 - 1];
      //      float z0 = MAILLAGE1->ZZ[n0 - 1];
      //
      //      int n1 = *(MAILLAGE1->CNX[TETRA4] + it4 * 4 + 1);
      //      float x1 = MAILLAGE1->XX[n1 - 1];
      //      float y1 = MAILLAGE1->YY[n1 - 1];
      //      float z1 = MAILLAGE1->ZZ[n1 - 1];
      //
      //      int n2 = *(MAILLAGE1->CNX[TETRA4] + it4 * 4 + 2);
      //      float x2 = MAILLAGE1->XX[n2 - 1];
      //      float y2 = MAILLAGE1->YY[n2 - 1];
      //      float z2 = MAILLAGE1->ZZ[n2 - 1];
      //
      //      int n3 = *(MAILLAGE1->CNX[TETRA4] + it4 * 4 + 3);
      //      float x3 = MAILLAGE1->XX[n3 - 1];
      //      float y3 = MAILLAGE1->YY[n3 - 1];
      //      float z3 = MAILLAGE1->ZZ[n3 - 1];
      //
      //      cout << x0 << " " << y0 << " " << z0 << " " << endl;
      //      cout << x1 << " " << y1 << " " << z1 << " " << endl;
      //      cout << x2 << " " << y2 << " " << z2 << " " << endl;
      //      cout << x3 << " " << y3 << " " << z3 << " " << endl;

      ERREUR(" Intersections configuration not taken into account (case cptPI=3) ");
    }

  // int ngT4 = MAILLAGE1->EFFECTIFS_TYPES[TETRA4] + cptNouvellesMailles[TETRA4] - 1;
  // int ngP6 = MAILLAGE1->EFFECTIFS_TYPES[PENTA6] + cptNouvellesMailles[PENTA6] - 1;
  // cout << "La maille TETRA4 " << it4 << " produit les mailles TETRA4-" << ngT4 << " et PENTA6-" << ngP6 << endl;
}

Here is the call graph for this function:

Here is the caller graph for this function:

void MESHCUT::cas4 ( int  VN[6],
int  it4 
)

Quatre points d'intersection.

ATTENTION: pour les PENTA6 on adopte la convention d'orientation SALOME

N1 N2 N3 N4 N5 N6

où N1 N2 N3 sont les sommets du haut et N4 N5 N6 les sommets du bas (selon l'orientation donnée par le sens des triangles)

Definition at line 823 of file MeshCut_Cas.cxx.

{
  cutTetras.push_back(it4);
  //  cout << "Cas 4 - it4=" << it4 << ", VN = " << VN[0] << " " << VN[1] << " " << VN[2] << " " << VN[3] << " " << VN[4]
  //      << " " << VN[5] << " " << endl;

  // Numéros des noeuds du TETRA4
  int ng0 = MAILLAGE1->CNX[TETRA4][4 * it4 + 0];
  int ng1 = MAILLAGE1->CNX[TETRA4][4 * it4 + 1];
  int ng2 = MAILLAGE1->CNX[TETRA4][4 * it4 + 2];
  int ng3 = MAILLAGE1->CNX[TETRA4][4 * it4 + 3];

  int i1, i2; // Numéros locaux dans le type des mailles créées

  if (VN[0] == -1 && VN[5] == -1)
    {
      // Les deux arêtes opposées sont [0,1] et [2,3]

      newCNX[PENTA6].push_back(ng0);
      newCNX[PENTA6].push_back(VN[1]);
      newCNX[PENTA6].push_back(VN[2]);
      newCNX[PENTA6].push_back(ng1);
      newCNX[PENTA6].push_back(VN[3]);
      newCNX[PENTA6].push_back(VN[4]);
      cptNouvellesMailles[PENTA6]++;
      i1 = cptNouvellesMailles[PENTA6] - 1;

      newCNX[PENTA6].push_back(ng3);
      newCNX[PENTA6].push_back(VN[4]);
      newCNX[PENTA6].push_back(VN[2]);
      newCNX[PENTA6].push_back(ng2);
      newCNX[PENTA6].push_back(VN[3]);
      newCNX[PENTA6].push_back(VN[1]);
      cptNouvellesMailles[PENTA6]++;
      i2 = cptNouvellesMailles[PENTA6] - 1;

      if (POSN[ng0 - 1] == 1)
        {
          GMplus[PENTA6].push_back(MAILLAGE1->EFFECTIFS_TYPES[PENTA6] + i1);
          GMmoins[PENTA6].push_back(MAILLAGE1->EFFECTIFS_TYPES[PENTA6] + i2);
        }
      else
        {
          GMplus[PENTA6].push_back(MAILLAGE1->EFFECTIFS_TYPES[PENTA6] + i2);
          GMmoins[PENTA6].push_back(MAILLAGE1->EFFECTIFS_TYPES[PENTA6] + i1);
        }

    } // if ( VN[0]==-1 && VN[5]==-1 )

  else if (VN[1] == -1 && VN[4] == -1)
    {
      // Les deux arêtes opposées sont [0,2] et [1,3]

      newCNX[PENTA6].push_back(ng2);
      newCNX[PENTA6].push_back(VN[3]);
      newCNX[PENTA6].push_back(VN[5]);
      newCNX[PENTA6].push_back(ng0);
      newCNX[PENTA6].push_back(VN[0]);
      newCNX[PENTA6].push_back(VN[2]);
      cptNouvellesMailles[PENTA6]++;
      i1 = cptNouvellesMailles[PENTA6] - 1;

      newCNX[PENTA6].push_back(ng1);
      newCNX[PENTA6].push_back(VN[3]);
      newCNX[PENTA6].push_back(VN[0]);
      newCNX[PENTA6].push_back(ng3);
      newCNX[PENTA6].push_back(VN[5]);
      newCNX[PENTA6].push_back(VN[2]);
      cptNouvellesMailles[PENTA6]++;
      i2 = cptNouvellesMailles[PENTA6] - 1;

      if (POSN[ng0 - 1] == 1)
        {
          GMplus[PENTA6].push_back(MAILLAGE1->EFFECTIFS_TYPES[PENTA6] + i1);
          GMmoins[PENTA6].push_back(MAILLAGE1->EFFECTIFS_TYPES[PENTA6] + i2);
        }
      else
        {
          GMplus[PENTA6].push_back(MAILLAGE1->EFFECTIFS_TYPES[PENTA6] + i2);
          GMmoins[PENTA6].push_back(MAILLAGE1->EFFECTIFS_TYPES[PENTA6] + i1);
        }
    }

  else if (VN[2] == -1 && VN[3] == -1)
    {
      // Les deux arêtes opposées sont [0,3] et [1,2]

      newCNX[PENTA6].push_back(ng0);
      newCNX[PENTA6].push_back(VN[0]);
      newCNX[PENTA6].push_back(VN[1]);
      newCNX[PENTA6].push_back(ng3);
      newCNX[PENTA6].push_back(VN[4]);
      newCNX[PENTA6].push_back(VN[5]);
      cptNouvellesMailles[PENTA6]++;
      i1 = cptNouvellesMailles[PENTA6] - 1;

      newCNX[PENTA6].push_back(ng2);
      newCNX[PENTA6].push_back(VN[5]);
      newCNX[PENTA6].push_back(VN[1]);
      newCNX[PENTA6].push_back(ng1);
      newCNX[PENTA6].push_back(VN[4]);
      newCNX[PENTA6].push_back(VN[0]);
      cptNouvellesMailles[PENTA6]++;
      i2 = cptNouvellesMailles[PENTA6] - 1;

      if (POSN[ng0 - 1] == 1)
        {
          GMplus[PENTA6].push_back(MAILLAGE1->EFFECTIFS_TYPES[PENTA6] + i1);
          GMmoins[PENTA6].push_back(MAILLAGE1->EFFECTIFS_TYPES[PENTA6] + i2);
        }
      else
        {
          GMplus[PENTA6].push_back(MAILLAGE1->EFFECTIFS_TYPES[PENTA6] + i2);
          GMmoins[PENTA6].push_back(MAILLAGE1->EFFECTIFS_TYPES[PENTA6] + i1);
        }
    }
  else
    ERREUR(" Intersection configuration not taken into account (case cptPI=4) ");

  // int nl1 = MAILLAGE1->EFFECTIFS_TYPES[PENTA6] + i1;
  // int nl2 = MAILLAGE1->EFFECTIFS_TYPES[PENTA6] + i2;
  // cout << "La maille TETRA4 " << it4 << " produit les mailles PENTA6-" << nl1 << " et PENTA6-" << nl2 << endl;
}

Here is the call graph for this function:

Here is the caller graph for this function:

void MESHCUT::champType ( std::string  type,
med_entity_type  MEM,
med_geometry_type  MGE,
med_idt  fid,
med_idt  fidout,
char *  maa,
char *  nomChamp,
char *  nomChampMoy,
med_field_type  typeChamp,
char *  compChamp,
char *  unitChamp,
med_int  nCompChamp,
std::map< std::string, int >  REFGAUSS,
int  ichamp 
)

Definition at line 825 of file MeshCut_Utils.cxx.

{

  bool debug = true;
  int ipt, nmailles, ngauss, imaille, igauss, icomp;
  //  int ival, ngpdt;
  med_int nval, numdt, numo, nPasTemps;
  char dtunit[MED_SNAME_SIZE + 1] = "";
  char locname[MED_NAME_SIZE + 1] = "";
  char nomprofil[MED_NAME_SIZE + 1] = "";
  med_float dt = 0.0;
  med_float *valr = NULL;
  med_float *valr2 = NULL;
  med_bool local;
  //  med_int nbrefmaa;
  med_field_type fieldType;

  if (MEDfieldInfo(fid, ichamp, nomChamp, maa, &local, &fieldType, compChamp, unitChamp, dtunit, &nPasTemps) < 0)
    ERREUR("Error MEDfieldInfo");
  cout << type << " : " << (int) nPasTemps << " timestep  " << endl;

  for (ipt = 1; ipt <= nPasTemps; ipt++)
    {
      //for (ipt=1; ipt<=min(nPasTemps,1); ipt++) {
      if (debug)
        cout << endl;
      if (debug)
        cout << "************************************************************" << endl;
      if (debug)
        cout << "                    FIELD " << ichamp << endl;
      if (debug)
        cout << "          " << nomChamp << endl;
      if (debug)
        cout << "          " << type << "   ---   Timestep " << ipt << endl;
      if (debug)
        cout << "************************************************************" << endl;
      if (debug)
        cout << endl;

      if (MEDfieldComputingStepInfo(fid, nomChamp, ipt, &numdt, &numo, &dt) < 0)
        {
          cout << endl;
          cout << endl << "####################################################################" << endl;
          cout << "                   ERROR MEDpasdetempsInfo                         " << endl;
          cout << endl << "####################################################################" << endl;
          cout << "                  Field: " << (string) nomChamp << endl;
          cout << "                  Geometrie: " << MGE2string(MGE) << endl;
          cout << "                  Timestep " << ipt << " ignored" << endl;

          continue;
        }

      med_int profilesize, nintegrationpoint;
      nval = MEDfieldnValueWithProfile(fid, nomChamp, numdt, numo, MEM, MGE, ipt, MED_COMPACT_PFLMODE, nomprofil,
                                       &profilesize, locname, &nintegrationpoint);
      if (debug)
        cout << "     Number of values in this timestep: " << (int) nval << endl;

      if (typeChamp == MED_FLOAT64)
        valr = (med_float*) calloc(nCompChamp * nval, sizeof(med_float));
      else
        ERREUR("Type of field not taken into account");

      if (MEDfieldValueWithProfileRd(fid, maa, numdt, numo, MEM, MGE, MED_COMPACT_PFLMODE, nomprofil,
                                     MED_FULL_INTERLACE, MED_ALL_CONSTITUENT, (unsigned char*) valr) < 0)
        {
          cout << endl;
          cout << endl << "####################################################################" << endl;
          cout << "                         ERROR MEDchampLire                        " << endl;
          cout << endl << "####################################################################" << endl;
          cout << endl;
          cout << "   Field: " << (string) nomChamp << endl;
          cout << "   Geometry: " << MGE2string(MGE) << endl;
          cout << "   Timestep " << ipt << " ignored" << endl;
          cout << endl << endl;
          continue;
        }

      if (debug)
        cout << "       profile  = " << (string) nomprofil << endl;
      // Localisation du champ aux points de Gauss
      if (debug)
        cout << "       locname = " << (string) locname << endl;

      if (REFGAUSS[(string) locname])
        {
          ngauss = REFGAUSS[(string) locname];
          if (debug)
            cout << "       " << ngauss << " Gauss points by element)" << endl;
        }
      else
        ngauss = 1;

      nmailles = nval / ngauss;
      if (debug)
        cout << "      Nbre de mailles: " << nmailles << endl;

      if (debug)
        {
          cout << endl << "       Liste des valeurs du champ brut aux 3 premiers éléments:" << endl;
          for (imaille = 0; imaille < min(nmailles, 3); imaille++)
            {
              cout << "         Maille " << imaille << endl;
              for (igauss = 0; igauss < ngauss; igauss++)
                {
                  cout << "             PG " << igauss << " : ";
                  for (icomp = 0; icomp < nCompChamp; icomp++)
                    cout << " " << *(valr + imaille * ngauss * nCompChamp + igauss * nCompChamp + icomp);
                  cout << endl;
                }
              cout << endl;
            }
          cout << endl;
        }

      if (ngauss > 1)
        {

          valr2 = (med_float*) calloc(nCompChamp * nmailles, sizeof(med_float));

          if (debug)
            cout << endl << "       Moyenne sur les PG des mailles" << endl;
          for (imaille = 0; imaille < nmailles; imaille++)
            {
              for (icomp = 0; icomp < nCompChamp; icomp++)
                {
                  float valCompMaille = 0.0;
                  for (igauss = 0; igauss < ngauss; igauss++)
                    valCompMaille += *(valr + imaille * ngauss * nCompChamp + igauss * nCompChamp + icomp);
                  *(valr2 + imaille * nCompChamp + icomp) = valCompMaille / ngauss;

                }
            }

          //cout << endl << "Nom champ moy = " <<  (string)nomChampMoy << endl;
          //cout << endl << "Type champ = " <<  typeChamp << endl;
          //cout << endl << "Comp champ = " <<  (string)compChamp << endl;
          //cout << endl << "Unit champ = " <<  (string)unitChamp << endl;
          //cout << endl << "N comp champ = " <<  nCompChamp << endl;

          if (MEDfieldValueWithProfileWr(fidout, nomChampMoy, numdt, numo, dt, MEM, MGE, MED_COMPACT_PFLMODE,
                                         nomprofil, MED_NO_LOCALIZATION, MED_FULL_INTERLACE, MED_ALL_CONSTITUENT,
                                         (med_int) nmailles, (unsigned char*) valr2) < 0)
            {
              cout << endl;
              cout << endl << "********************************************************************" << endl;
              cout << "********************                         ***********************" << endl;
              cout << "********************   ERROR MEDchampEcr     ***********************" << endl;
              cout << "********************                         ***********************" << endl;
              cout << "********************************************************************" << endl;
              cout << endl;
              cout << "   Champ: " << (string) nomChampMoy << endl;
              cout << "   Géométrie: " << MGE2string(MGE) << endl;
              cout << "   Pas de temps " << ipt << " ignoré" << endl;
              cout << endl << endl;
              continue;
            }

          if (debug)
            cout << "    Writing mean values in new field: OK " << endl;

          // Restitution du champ moyenné
          if (debug)
            {
              cout << endl << "       Liste des valeurs du champ moyenné aux 3 premiers éléments:" << endl;
              for (imaille = 0; imaille < min(nmailles, 3); imaille++)
                {
                  cout << "         Maille " << imaille << endl;
                  for (icomp = 0; icomp < nCompChamp; icomp++)
                    cout << " " << *(valr2 + imaille * nCompChamp + icomp);
                  cout << endl;
                }
              cout << endl;
            }

        }

      free(valr);
      free(valr2);

    } // boucle sur les pas de temps

  cout << endl;
}

Here is the call graph for this function:

float MESHCUT::char2float ( const char *  ch)

Definition at line 73 of file MeshCut_Utils.cxx.

{
  return atof(ch);
}

Here is the caller graph for this function:

int MESHCUT::chrono ( )

Definition at line 592 of file MeshCut_Utils.cxx.

{
  return clock() / CLOCKS_PER_SEC;
}

Here is the caller graph for this function:

int MESHCUT::codeGMSH ( std::string  type)

Definition at line 398 of file MeshCut_Utils.cxx.

{
  if (type == (string) "POI1")
    ERREUR("POI1 not taken into account by GMSH");
  else if (type == (string) "SEG2")
    return 1;
  else if (type == (string) "SEG3")
    return 8;
  else if (type == (string) "TRIA3")
    return 2;
  else if (type == (string) "TRIA6")
    return 9;
  else if (type == (string) "QUAD4")
    return 3;
  else if (type == (string) "QUAD8")
    return 16;
  else if (type == (string) "QUAD9")
    return 10;
  else if (type == (string) "TETRA4")
    return 4;
  else if (type == (string) "TETRA10")
    return 11;
  else if (type == (string) "PYRAM5")
    return 7;
  else if (type == (string) "PENTA6")
    return 6;
  else if (type == (string) "PENTA15")
    return 18;
  else if (type == (string) "HEXA8")
    return 5;
  else if (type == (string) "HEXA20")
    return 17;
  else if (type == (string) "HEXA27")
    return 12;
  else
    ERREUR("Type of elem not accepted (method codeGMSH)");
  return 0;
}

Here is the call graph for this function:

void MESHCUT::conversionCNX ( int *  CNXtm,
TYPE_MAILLE  tm,
int  N 
)

Conversion HL-MED d'une table de connectivités.

Definition at line 1037 of file MeshCut_Utils.cxx.

{

  int n = Nnoeuds(tm);

  if (tm == TETRA4)
    {
      for (int i = 0; i < N; i++)
        {
          int i1 = CNXtm[i * n + 1];
          int i2 = CNXtm[i * n + 2];
          CNXtm[i * n + 1] = i2;
          CNXtm[i * n + 2] = i1;
        }
    }
  else if (tm == PYRAM5)
    {
      for (int i = 0; i < N; i++)
        {
          int i1 = CNXtm[i * n + 1];
          int i3 = CNXtm[i * n + 3];
          CNXtm[i * n + 1] = i3;
          CNXtm[i * n + 3] = i1;
        }
    }
  else if (tm == PENTA6)
    {
      for (int i = 0; i < N; i++)
        {
          int i0 = CNXtm[i * n + 0];
          int i1 = CNXtm[i * n + 1];
          int i2 = CNXtm[i * n + 2];
          int i3 = CNXtm[i * n + 3];
          int i4 = CNXtm[i * n + 4];
          int i5 = CNXtm[i * n + 5];
          CNXtm[i * n + 0] = i3;
          CNXtm[i * n + 1] = i4;
          CNXtm[i * n + 2] = i5;
          CNXtm[i * n + 3] = i0;
          CNXtm[i * n + 4] = i1;
          CNXtm[i * n + 5] = i2;
        }
    }

  else if (tm == HEXA8)
    {
      for (int i = 0; i < N; i++)
        {
          int i0 = CNXtm[i * n + 0];
          int i1 = CNXtm[i * n + 1];
          int i2 = CNXtm[i * n + 2];
          int i3 = CNXtm[i * n + 3];
          int i4 = CNXtm[i * n + 4];
          int i5 = CNXtm[i * n + 5];
          int i6 = CNXtm[i * n + 6];
          int i7 = CNXtm[i * n + 7];
          CNXtm[i * n + 0] = i4;
          CNXtm[i * n + 1] = i5;
          CNXtm[i * n + 2] = i6;
          CNXtm[i * n + 3] = i7;
          CNXtm[i * n + 4] = i0;
          CNXtm[i * n + 5] = i1;
          CNXtm[i * n + 6] = i2;
          CNXtm[i * n + 7] = i3;
        }
    }
}

Here is the call graph for this function:

Here is the caller graph for this function:

std::string MESHCUT::coordIndex_IFS ( TYPE_MAILLE  tm)

Definition at line 781 of file MeshCut_Utils.cxx.

{
  if (tm == SEG2)
    return (string) "  ";
  else if (tm == SEG3)
    return (string) "  "; // Idem SEG2
  else if (tm == TRIA3)
    return (string) " 0,1,2,0,-1, 0,2,1,0,-1 ";
  else if (tm == TRIA6)
    return (string) " 0,1,2,0,-1, 0,2,1,0,-1 ";
  else if (tm == QUAD4)
    return (string) " 0,1,2,3,0,-1, 0,3,2,1,0,-1 ";
  else if (tm == QUAD8)
    return (string) " 0,1,2,3,0,-1, 0,3,2,1,0,-1 ";
  else if (tm == TETRA4)
    return (string) " 0,1,2,0,-1, 0,2,1,0,-1, 0,3,1,0,-1, 0,1,3,0,-1, 1,3,2,1,-1, 1,2,3,1,-1, 0,2,3,0,-1, 0,3,2,0,-1 ";
  else if (tm == TETRA10)
    return (string) " 0,1,2,0,-1, 0,2,1,0,-1, 0,3,1,0,-1, 0,1,3,0,-1, 1,3,2,1,-1, 1,2,3,1,-1, 0,2,3,0,-1, 0,3,2,0,-1 ";
  else if (tm == PYRAM5)
    return (string) " 0,1,2,3,0,-1, 0,3,2,1,0,-1, 0,1,4,0,-1, 0,4,1,0,-1, 1,2,4,1,-1, 1,4,2,1,-1, 2,4,3,2,-1, 2,3,4,2,-1, 3,4,0,3,-1, 3,0,4,3,-1 ";
  else if (tm == PYRAM13)
    return (string) " 0,1,2,3,0,-1, 0,3,2,1,0,-1, 0,1,4,0,-1, 0,4,1,0,-1, 1,2,4,1,-1, 1,4,2,1,-1, 2,4,3,2,-1, 2,3,4,2,-1, 3,4,0,3,-1, 3,0,4,3,-1 ";
  else if (tm == PENTA6)
    return (string) " 0,1,2,0,-1, 0,2,1,0,-1, 3,4,5,3,-1, 3,5,4,3,-1, 0,1,4,3,0,-1, 0,3,4,1,0,-1, 1,4,5,2,1,-1, 1,2,5,4,1,-1, 0,3,5,2,0,-1, 0,2,5,3,0,-1 ";
  else if (tm == PENTA15)
    return (string) " 0,1,2,0,-1, 0,2,1,0,-1, 3,4,5,3,-1, 3,5,4,3,-1, 0,1,4,3,0,-1, 0,3,4,1,0,-1, 1,4,5,2,1,-1, 1,2,5,4,1,-1, 0,3,5,2,0,-1, 0,2,5,3,0,-1 ";
  else if (tm == HEXA8)
    return (string) " 0,1,2,3,0,-1, 0,3,2,1,0,-1, 1,5,6,2,1,-1, 1,2,6,5,1,-1, 5,4,7,6,5,-1, 5,6,7,4,5,-1, 4,0,3,7,4,-1, 4,7,3,0,4,-1, 0,4,5,1,0,-1, 0,1,5,4,0,-1, 3,7,6,2,3,-1, 3,2,6,7,3,-1 ";
  else if (tm == HEXA20)
    return (string) " 0,1,2,3,0,-1, 0,3,2,1,0,-1, 1,5,6,2,1,-1, 1,2,6,5,1,-1, 5,4,7,6,5,-1, 5,6,7,4,5,-1, 4,0,3,7,4,-1, 4,7,3,0,4,-1, 0,4,5,1,0,-1, 0,1,5,4,0,-1, 3,7,6,2,3,-1, 3,2,6,7,3,-1 ";
  else
    return (string) "";
}
std::string MESHCUT::coordIndex_ILS ( TYPE_MAILLE  tm)

Definition at line 747 of file MeshCut_Utils.cxx.

{
  if (tm == SEG2)
    return (string) " 0,1 ";
  else if (tm == SEG3)
    return (string) " 0,1 "; // Idem SEG2
  else if (tm == TRIA3)
    return (string) " 0,1,2,0 ";
  else if (tm == TRIA6)
    return (string) " 0,1,2,0 ";
  else if (tm == QUAD4)
    return (string) " 0,1,2,3,0 ";
  else if (tm == QUAD8)
    return (string) " 0,1,2,3,0 ";
  else if (tm == TETRA4)
    return (string) " 0,1,2,0,-1, 0,3,-1, 1,3,-1, 2,3,-1 ";
  else if (tm == TETRA10)
    return (string) " 0,1,2,0,-1, 0,3,-1, 1,3,-1, 2,3,-1 ";
  else if (tm == PYRAM5)
    return (string) " 0,1,2,3,0,-1, 0,4,-1, 1,4,-1, 2,4,-1, 3,4,-1 ";
  else if (tm == PYRAM13)
    return (string) " 0,1,2,3,0,-1, 0,4,-1, 1,4,-1, 2,4,-1, 3,4,-1 ";
  else if (tm == PENTA6)
    return (string) " 0,1,2,0,-1, 3,4,5,3,-1, 0,3,-1, 1,4,-1, 2,5,-1 ";
  else if (tm == PENTA15)
    return (string) " 0,1,2,0,-1, 3,4,5,3,-1, 0,3,-1, 1,4,-1, 2,5,-1 ";
  else if (tm == HEXA8)
    return (string) " 0,1,2,3,0,-1, 4,5,6,7,4,-1, 0,4,-1, 1,5,-1, 2,6,-1, 3,7,-1 ";
  else if (tm == HEXA20)
    return (string) " 0,1,2,3,0,-1, 4,5,6,7,4,-1, 0,4,-1, 1,5,-1, 2,6,-1, 3,7,-1 ";
  else
    return (string) "";
}
int MESHCUT::copieFichier ( std::string  source,
std::string  cible 
)

Definition at line 516 of file MeshCut_Utils.cxx.

{
  FILE *fsource, *fcible;
  char buffer[512];
  int NbLu;
  if ((fsource = fopen(string2char(source), "rb")) == NULL)
    return -1;
  if ((fcible = fopen(string2char(cible), "wb")) == NULL)
    {
      fclose(fsource);
      return -2;
    }
  while ((NbLu = fread(buffer, 1, 512, fsource)) != 0)
    fwrite(buffer, 1, NbLu, fcible);
  fclose(fcible);
  fclose(fsource);
  return 0;
}

Here is the call graph for this function:

float MESHCUT::distance2 ( float  x1,
float  y1,
float  z1,
float  x2,
float  y2,
float  z2 
)

Definition at line 1029 of file MeshCut_Utils.cxx.

{
  return (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1) + (z2 - z1) * (z2 - z1);
}
float MESHCUT::distanceNoeudPlan ( float  point[3])

Definition at line 48 of file MeshCut_Fonctions.cxx.

{
  return normale[0] * point[0] + normale[1] * point[1] + normale[2] * point[2] + d;
}

Here is the caller graph for this function:

float MESHCUT::distanceNoeudPlan ( int  ng)

Definition at line 53 of file MeshCut_Fonctions.cxx.

{
  float A[3];
  A[0] = MAILLAGE1->XX[ng - 1];
  A[1] = MAILLAGE1->YY[ng - 1];
  A[2] = MAILLAGE1->ZZ[ng - 1];
  return distanceNoeudPlan(A);
}

Here is the call graph for this function:

float MESHCUT::dObservateur ( float  a,
float  b,
float  c 
)

Distance à laquelle doit se tenir l'observateur sur un axe pour voir sous 90° un objet centré de dimensions a et b selon les deux autres axes.

Si on ne tient pas compte de la dimension de l'objet selon l'axe choisi, la formule d_obs=max(a,b)/2 donne la cote qui permet de voir l'objet plat dans un angle de 90°. A cela il faut ajouter la dimension de l'objet selon l'axe d'observation = c.

Parameters:
adimensions de l'objet selon un des axes normal à l'axe d'observation
bdimensions de l'objet selon l'autre axe normal à l'axe d'observation
cest la dimension de l'objet selon l'axe d'observation

Definition at line 511 of file MeshCut_Utils.cxx.

{
  return (max(a, b) / 2.0 + c);
}
std::string MESHCUT::entierSur10_d ( int  i)

Definition at line 157 of file MeshCut_Utils.cxx.

{
  if (i > 999999999)
    ERREUR("trying to write a number superior to 999999999 on more than 10 chars");
  if (i < 10)
    return (string) "         " + int2string(i);
  else if (i < 100)
    return (string) "        " + int2string(i);
  else if (i < 1000)
    return (string) "       " + int2string(i);
  else if (i < 10000)
    return (string) "      " + int2string(i);
  else if (i < 100000)
    return (string) "     " + int2string(i);
  else if (i < 1000000)
    return (string) "    " + int2string(i);
  else if (i < 10000000)
    return (string) "   " + int2string(i);
  else if (i < 100000000)
    return (string) "  " + int2string(i);
  else if (i < 1000000000)
    return (string) " " + int2string(i);
  else
    return int2string(i);
}

Here is the call graph for this function:

std::string MESHCUT::entierSur10_g ( int  i)

Definition at line 131 of file MeshCut_Utils.cxx.

{
  if (i > 999999999)
    ERREUR("trying to write a number superior to 999999999 on more than 10 chars");
  if (i < 10)
    return int2string(i) + (string) "         ";
  else if (i < 100)
    return int2string(i) + (string) "        ";
  else if (i < 1000)
    return int2string(i) + (string) "       ";
  else if (i < 10000)
    return int2string(i) + (string) "      ";
  else if (i < 100000)
    return int2string(i) + (string) "     ";
  else if (i < 1000000)
    return int2string(i) + (string) "    ";
  else if (i < 10000000)
    return int2string(i) + (string) "   ";
  else if (i < 100000000)
    return int2string(i) + (string) "  ";
  else if (i < 1000000000)
    return int2string(i) + (string) " ";
  else
    return int2string(i);
}

Here is the call graph for this function:

void MESHCUT::ERREUR ( const char *  msg)

Definition at line 46 of file MeshCut_Utils.cxx.

{
  cout << endl << "====== ERROR ====== " << msg << endl << endl;
  exit(-1);
}

Here is the caller graph for this function:

bool MESHCUT::estUnTypeMaille ( std::string  S)

Definition at line 34 of file MeshCut_Utils.cxx.

{
  if (S == (string) "POI1" || S == (string) "SEG2" || S == (string) "SEG3" || S == (string) "TRIA3" || S
      == (string) "TRIA6" || S == (string) "QUAD4" || S == (string) "QUAD8" || S == (string) "QUAD9" || S
      == (string) "TETRA4" || S == (string) "TETRA10" || S == (string) "PYRAM5" || S == (string) "PYRAM13" || S
      == (string) "PENTA6" || S == (string) "PENTA15" || S == (string) "HEXA8" || S == (string) "HEXA20" || S
      == (string) "HEXA27")
    return true;
  else
    return false;
}
std::string MESHCUT::float2string ( float  f)

Definition at line 78 of file MeshCut_Utils.cxx.

{
  stringstream buf;
  buf << fixed << f;
  string s = buf.str();
  return s;
}
std::string MESHCUT::floatEnsight ( float  x)

Definition at line 437 of file MeshCut_Utils.cxx.

{
  char buf[12];
  string s;
  if (x < 0.0)
    sprintf(buf, "%1.5E", x);
  else
    sprintf(buf, " %1.5E", x);
  s = (string) buf;
  s.erase(10, 1);
  return s;
}
med_geometry_type MESHCUT::InstanceMGE ( TYPE_MAILLE  TYPE)

Definition at line 535 of file MeshCut_Utils.cxx.

{
  med_geometry_type typeBanaliseMED;

  switch (TYPE)
  {
    case POI1:
      typeBanaliseMED = MED_POINT1;
      break; // Attention, piège !
    case SEG2:
      typeBanaliseMED = MED_SEG2;
      break;
    case SEG3:
      typeBanaliseMED = MED_SEG3;
      break;
    case TRIA3:
      typeBanaliseMED = MED_TRIA3;
      break;
    case TRIA6:
      typeBanaliseMED = MED_TRIA6;
      break;
    case QUAD4:
      typeBanaliseMED = MED_QUAD4;
      break;
    case QUAD8:
      typeBanaliseMED = MED_QUAD8;
      break;
    case TETRA4:
      typeBanaliseMED = MED_TETRA4;
      break;
    case TETRA10:
      typeBanaliseMED = MED_TETRA10;
      break;
    case PYRAM5:
      typeBanaliseMED = MED_PYRA5;
      break; // Attention, piège !
    case PYRAM13:
      typeBanaliseMED = MED_PYRA13;
      break; // Attention, piège !
    case PENTA6:
      typeBanaliseMED = MED_PENTA6;
      break;
    case PENTA15:
      typeBanaliseMED = MED_PENTA15;
      break;
    case HEXA8:
      typeBanaliseMED = MED_HEXA8;
      break;
    case HEXA20:
      typeBanaliseMED = MED_HEXA20;
      break;
    default:
      ERREUR("Method InstanceMGE, unknown type ");
  }
  return typeBanaliseMED;
}

Here is the call graph for this function:

Here is the caller graph for this function:

std::string MESHCUT::int2string ( int  k)

Definition at line 66 of file MeshCut_Utils.cxx.

{
  std::stringstream oss;
  oss << k;
  return oss.str(); //  oss.seekp (ios_base::beg);
}

Here is the caller graph for this function:

int MESHCUT::intersectionSegmentPlan ( int  it4,
int  na 
)

Equation paramétrique de la droite AB: OP = OA + lambda AB.

Fonction caractéristique du plan : PI(X,Y,Z) = nx X + ny Y + nz Z + d

Pour un point P de la droite: PI(OP) = PI(OA) + lambda n.AB avec n=(nx,ny,nz), L'intersection AB/plan est donnée par le point P tel que PI(OP)=0.

Il lui correspond la coordonnée lambda = - PI(OA) / n.AB.

Cette intersection est dans le segment si lambda est dans [0,1]

Definition at line 84 of file MeshCut_Fonctions.cxx.

{

  int ngA, ngB; // Numéros des noeuds extrémités AB
  float lambda, ps; //, ab; // ab = longueur AB
  float A[3], B[3];

  // Détermination des ng des extrémités de l'arête passée en argument na
  int * offset = MAILLAGE1->CNX[TETRA4] + 4 * it4;
  if (na == 0)
    {
      ngA = *(offset + 0);
      ngB = *(offset + 1);
    }
  else if (na == 1)
    {
      ngA = *(offset + 0);
      ngB = *(offset + 2);
    }
  else if (na == 2)
    {
      ngA = *(offset + 0);
      ngB = *(offset + 3);
    }
  else if (na == 3)
    {
      ngA = *(offset + 1);
      ngB = *(offset + 2);
    }
  else if (na == 4)
    {
      ngA = *(offset + 1);
      ngB = *(offset + 3);
    }
  else if (na == 5)
    {
      ngA = *(offset + 2);
      ngB = *(offset + 3);
    }
  else
    ERREUR("Edge number superior to 6");

  string cle1 = int2string(ngA) + (string) "_" + int2string(ngB);
  string cle2 = int2string(ngB) + (string) "_" + int2string(ngA);

  if (intersections[cle1])
    return intersections[cle1];

  else
    {

      A[0] = MAILLAGE1->XX[ngA - 1];
      A[1] = MAILLAGE1->YY[ngA - 1];
      A[2] = MAILLAGE1->ZZ[ngA - 1];
      B[0] = MAILLAGE1->XX[ngB - 1];
      B[1] = MAILLAGE1->YY[ngB - 1];
      B[2] = MAILLAGE1->ZZ[ngB - 1];

      //      // Longueur AB
      //      float lx = B[0] - A[0], ly = B[1] - A[1], lz = B[2] - A[2];
      //      ab = sqrt(lx * lx + ly * ly + lz * lz);
      //      // La longueur maximale théorique est 2 epsilon
      //      if (ab < 2 * epsilon * 0.9)
      //        ERREUR("Arête de longueur inférieure au minimum théorique 2 epsilon");

      // Calcul du produit scalaire AB.n
      ps = 0.0;
      for (int k = 0; k < 3; k++)
        ps += (B[k] - A[k]) * normale[k];
      // ps = ps / ab ;

      if (debug)
        {
          cout << "Routine ISP : arête " << na << " -  ngA=" << ngA << " ngB=" << ngB << endl;
          cout << "A : " << A[0] << ' ' << A[1] << ' ' << A[2] << endl;
          cout << "B : " << B[0] << ' ' << B[1] << ' ' << B[2] << endl;
          cout << "N : " << normale[0] << ' ' << normale[1] << ' ' << normale[2] << endl;
        }

      if (fabs(ps) == 0.0)
        ERREUR("Error on null scalar product");

      // PS non nul: l'intersection AB/plan existe

      lambda = -distanceNoeudPlan(A) / ps;

      float inter[3];
      for (int k = 0; k < 3; k++)
        inter[k] = A[k] + lambda * (B[k] - A[k]);
      newXX.push_back(inter[0]);
      newYY.push_back(inter[1]);
      newZZ.push_back(inter[2]);
      indexNouveauxNoeuds++;
      intersections[cle1] = indexNouveauxNoeuds;
      intersections[cle2] = indexNouveauxNoeuds;

      //      cout << "création noeud " << indexNouveauxNoeuds << " : " << inter[0] << " " << inter[1] << " " << inter[2]
      //          << endl;
      if (debug)
        cout << " sortie nouveau noeud, lambda = " << lambda << " , noeud = " << indexNouveauxNoeuds << endl;
      return indexNouveauxNoeuds;

    }
}

Here is the call graph for this function:

Here is the caller graph for this function:

float MESHCUT::longueurSegment ( int  ngA,
int  ngB 
)

Definition at line 33 of file MeshCut_Fonctions.cxx.

{
  float A[3], B[3];
  A[0] = MAILLAGE1->XX[ngA - 1];
  A[1] = MAILLAGE1->YY[ngA - 1];
  A[2] = MAILLAGE1->ZZ[ngA - 1];
  B[0] = MAILLAGE1->XX[ngB - 1];
  B[1] = MAILLAGE1->YY[ngB - 1];
  B[2] = MAILLAGE1->ZZ[ngB - 1];
  float dx = B[0] - A[0];
  float dy = B[1] - A[1];
  float dz = B[2] - A[2];
  return sqrt(dx * dx + dy * dy + dz * dz);
}

Here is the caller graph for this function:

std::string MESHCUT::MGE2string ( med_geometry_type  MGE)

Definition at line 634 of file MeshCut_Utils.cxx.

{
  if (MGE == MED_NONE)
    return (string) "NOEUD";
  else if (MGE == MED_POINT1)
    return (string) "POI1";
  else if (MGE == MED_SEG2)
    return (string) "SEG2";
  else if (MGE == MED_SEG3)
    return (string) "SEG3";
  else if (MGE == MED_TRIA3)
    return (string) "TRIA3";
  else if (MGE == MED_TRIA6)
    return (string) "TRIA6";
  else if (MGE == MED_QUAD4)
    return (string) "QUAD4";
  else if (MGE == MED_QUAD8)
    return (string) "QUAD8";
  else if (MGE == MED_TETRA4)
    return (string) "TETRA4";
  else if (MGE == MED_TETRA10)
    return (string) "TETRA10";
  else if (MGE == MED_PYRA5)
    return (string) "PYRAM5";
  else if (MGE == MED_PYRA13)
    return (string) "PYRAM13";
  else if (MGE == MED_PENTA6)
    return (string) "PENTA6";
  else if (MGE == MED_PENTA15)
    return (string) "PENTA15";
  else if (MGE == MED_HEXA8)
    return (string) "HEXA8";
  else if (MGE == MED_HEXA20)
    return (string) "HEXA20";
  else
    ERREUR("ERROR method MGE2string, unknown type");
  return (string) "NOEUD";
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 224 of file MeshCut_Utils.cxx.

{
  switch (type)
  {
    case POI1:
      {
        return 1;
        break;
      }
    case SEG2:
      {
        return 2;
        break;
      }
    case SEG3:
      {
        return 3;
        break;
      }
    case TRIA3:
      {
        return 3;
        break;
      }
    case TRIA6:
      {
        return 6;
        break;
      }
    case QUAD4:
      {
        return 4;
        break;
      }
    case QUAD8:
      {
        return 8;
        break;
      }
      //case QUAD9:                   { return 9; break; }
    case TETRA4:
      {
        return 4;
        break;
      }
    case TETRA10:
      {
        return 10;
        break;
      }
    case PYRAM5:
      {
        return 5;
        break;
      }
    case PYRAM13:
      {
        return 13;
        break;
      }
    case PENTA6:
      {
        return 6;
        break;
      }
    case PENTA15:
      {
        return 15;
        break;
      }
    case HEXA8:
      {
        return 8;
        break;
      }
    case HEXA20:
      {
        return 20;
        break;
      }
      //case HEXA27:                      { return 27;    break; }
    default:
      ERREUR("Type of elem not accepted (method Nnoeuds)");
  }
  return 0;
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 311 of file MeshCut_Utils.cxx.

{
  switch (type)
  {
    case POI1:
      {
        return 1;
        break;
      }
    case SEG2:
      {
        return 2;
        break;
      }
    case SEG3:
      {
        return 2;
        break;
      }
    case TRIA3:
      {
        return 3;
        break;
      }
    case TRIA6:
      {
        return 3;
        break;
      }
    case QUAD4:
      {
        return 4;
        break;
      }
    case QUAD8:
      {
        return 4;
        break;
      }
      //case QUAD9:                   { return 9; break; }
    case TETRA4:
      {
        return 4;
        break;
      }
    case TETRA10:
      {
        return 4;
        break;
      }
    case PYRAM5:
      {
        return 5;
        break;
      }
    case PYRAM13:
      {
        return 5;
        break;
      }
    case PENTA6:
      {
        return 6;
        break;
      }
    case PENTA15:
      {
        return 6;
        break;
      }
    case HEXA8:
      {
        return 8;
        break;
      }
    case HEXA20:
      {
        return 8;
        break;
      }
      //case HEXA27:                      { return 27;    break; }
    default:
      ERREUR("Type of elem not accepted (method NnoeudsGeom)");
  }
  return 0;
}

Here is the call graph for this function:

Here is the caller graph for this function:

std::string MESHCUT::nomMaille ( TYPE_MAILLE  tm,
int  nl 
)

Definition at line 1012 of file MeshCut_Utils.cxx.

{
  return (TM2string(tm) + (string) "_" + int2string(nl));
}

Here is the call graph for this function:

int MESHCUT::numNoeudPointe ( std::string  b1,
std::string  b2,
std::string  b3 
)

Definition at line 104 of file MeshCut_Utils.cxx.

{
  if (b1 == "1" && b2 == "1" && b3 == "2")
    return 2;
  else if (b1 == "1" && b2 == "2" && b3 == "1")
    return 1;
  else if (b1 == "1" && b2 == "2" && b3 == "2")
    return 2;
  else if (b1 == "2" && b2 == "1" && b3 == "1")
    return 3;
  else if (b1 == "2" && b2 == "1" && b3 == "2")
    return 3;
  else if (b1 == "2" && b2 == "2" && b3 == "1")
    return 1;
  else
    return -1;
}
int MESHCUT::positionNoeudPlan ( int  indiceNoeud)

Definition at line 62 of file MeshCut_Fonctions.cxx.

{
  if (distanceNoeudPlan(indiceNoeud + 1) > epsilon)
    return 1;
  else if (distanceNoeudPlan(indiceNoeud + 1) < -epsilon)
    return -1;
  else
    return 0;
}

Here is the call graph for this function:

std::string MESHCUT::SIGNE ( double  x)

Definition at line 815 of file MeshCut_Utils.cxx.

{
  if (x < 0)
    return "-";
  else if (x > 0)
    return "+";
  else
    return "0";
}
char * MESHCUT::string2char ( std::string  str)

Definition at line 52 of file MeshCut_Utils.cxx.

{
  // créer le buffer pour copier la chaîne
  size_t size = str.size() + 1;
  char* buffer = new char[size];
  // copier la chaîne
  strncpy(buffer, str.c_str(), size);

  // libérer la mémoire
  //delete [] buffer;

  return buffer;
}

Here is the caller graph for this function:

TYPE_MAILLE MESHCUT::string2TM ( std::string  stm)

Definition at line 710 of file MeshCut_Utils.cxx.

{
  if (stm == (string) "POI1")
    return POI1;
  else if (stm == (string) "SEG2")
    return SEG2;
  else if (stm == (string) "SEG3")
    return SEG3;
  else if (stm == (string) "TRIA3")
    return TRIA3;
  else if (stm == (string) "TRIA6")
    return TRIA6;
  else if (stm == (string) "QUAD4")
    return QUAD4;
  else if (stm == (string) "QUAD8")
    return QUAD8;
  else if (stm == (string) "TETRA4")
    return TETRA4;
  else if (stm == (string) "TETRA10")
    return TETRA10;
  else if (stm == (string) "PYRAM5")
    return PYRAM5;
  else if (stm == (string) "PYRAM13")
    return PYRAM13;
  else if (stm == (string) "PENTA6")
    return PENTA6;
  else if (stm == (string) "PENTA15")
    return PENTA15;
  else if (stm == (string) "HEXA8")
    return HEXA8;
  else if (stm == (string) "HEXA20")
    return HEXA20;
  else
    ERREUR("ERROR method string2TM, unknown type");
  return POI1;
}

Here is the call graph for this function:

std::string MESHCUT::strip ( std::string  S)

Definition at line 122 of file MeshCut_Utils.cxx.

{
  if (S.empty())
    return S;
  int startIndex = S.find_first_not_of(" ");
  int endIndex = S.find_last_not_of(" ");
  return S.substr(startIndex, (endIndex - startIndex + 1));
}

Here is the caller graph for this function:

std::string MESHCUT::TM2string ( TYPE_MAILLE  MGE)

Definition at line 673 of file MeshCut_Utils.cxx.

{
  if (MGE == POI1)
    return (string) "POI1";
  else if (MGE == SEG2)
    return (string) "SEG2";
  else if (MGE == SEG3)
    return (string) "SEG3";
  else if (MGE == TRIA3)
    return (string) "TRIA3";
  else if (MGE == TRIA6)
    return (string) "TRIA6";
  else if (MGE == QUAD4)
    return (string) "QUAD4";
  else if (MGE == QUAD8)
    return (string) "QUAD8";
  else if (MGE == TETRA4)
    return (string) "TETRA4";
  else if (MGE == TETRA10)
    return (string) "TETRA10";
  else if (MGE == PYRAM5)
    return (string) "PYRAM5";
  else if (MGE == PYRAM13)
    return (string) "PYRAM13";
  else if (MGE == PENTA6)
    return (string) "PENTA6";
  else if (MGE == PENTA15)
    return (string) "PENTA15";
  else if (MGE == HEXA8)
    return (string) "HEXA8";
  else if (MGE == HEXA20)
    return (string) "HEXA20";
  else
    ERREUR("ERROR method TM2string, unknown type");
  return (string) "POI1";
}

Here is the call graph for this function:

Here is the caller graph for this function:

bool MESHCUT::typeComplexe ( std::string  type)

Definition at line 450 of file MeshCut_Utils.cxx.

{
  if (type == (string) "SEG3")
    return true;
  else if (type == (string) "TRIA6")
    return true;
  else if (type == (string) "QUAD8")
    return true;
  else if (type == (string) "QUAD9")
    return true;
  else if (type == (string) "TETRA10")
    return true;
  else if (type == (string) "PYRAM13")
    return true;
  else if (type == (string) "PENTA15")
    return true;
  else if (type == (string) "HEXA20")
    return true;
  else if (type == (string) "HEXA27")
    return true;
  else
    return false;
}
std::string MESHCUT::typeEnsight ( std::string  type)

Definition at line 183 of file MeshCut_Utils.cxx.

{
  if (type == (string) "POI1")
    return (string) "point";
  else if (type == (string) "SEG2")
    return (string) "bar2";
  else if (type == (string) "SEG3")
    return (string) "bar2";// ATTENTION, triche!
  else if (type == (string) "TRIA3")
    return (string) "tria3";
  else if (type == (string) "TRIA6")
    return (string) "tria3";// ATTENTION, triche!
  else if (type == (string) "QUAD4")
    return (string) "quad4";
  else if (type == (string) "QUAD8")
    return (string) "quad4"; // ATTENTION, triche!
  else if (type == (string) "QUAD9")
    ERREUR("Type QUAD9 not supported by Ensight");
  else if (type == (string) "TETRA4")
    return (string) "tetra4";
  else if (type == (string) "TETRA10")
    return (string) "tetra4"; // ATTENTION, triche!
  else if (type == (string) "PYRAM5")
    return (string) "pyramid5";
  else if (type == (string) "PYRAM13")
    return (string) "pyramid5"; // ATTENTION, triche!
  else if (type == (string) "PENTA6")
    return (string) "penta6";
  else if (type == (string) "PENTA15")
    return (string) "penta6"; // ATTENTION, triche!
  else if (type == (string) "HEXA8")
    return (string) "hexa8";
  else if (type == (string) "HEXA20")
    return (string) "hexa8"; // ATTENTION, triche!
  else if (type == (string) "HEXA27")
    ERREUR("Type HEXA27 not supported by Ensight");
  else
    ERREUR("Type of element not accepted (method \"typeEnsight\"");
  return (string) "";
}

Here is the call graph for this function:

TYPE_MAILLE MESHCUT::typeMaille ( std::string  type)

Definition at line 597 of file MeshCut_Utils.cxx.

{
  if (type == (string) "POI1")
    return POI1;
  else if (type == (string) "SEG2")
    return SEG2;
  else if (type == (string) "SEG3")
    return SEG3;
  else if (type == (string) "TRIA3")
    return TRIA3;
  else if (type == (string) "TRIA6")
    return TRIA6;
  else if (type == (string) "QUAD4")
    return QUAD4;
  else if (type == (string) "QUAD8")
    return QUAD8;
  else if (type == (string) "TETRA4")
    return TETRA4;
  else if (type == (string) "TETRA10")
    return TETRA10;
  else if (type == (string) "PYRAM5")
    return PYRAM5;
  else if (type == (string) "PYRAM13")
    return PYRAM13;
  else if (type == (string) "PENTA6")
    return PENTA6;
  else if (type == (string) "PENTA15")
    return PENTA15;
  else if (type == (string) "HEXA8")
    return HEXA8;
  else if (type == (string) "HEXA20")
    return HEXA20;
  else
    ERREUR("ERROR method typeMaille, unknown type");
  return POI1;
}

Here is the call graph for this function:

Here is the caller graph for this function:


Variable Documentation

Definition at line 51 of file MeshCut_DC.cxx.

std::vector< int > MESHCUT::cutTetras

Definition at line 53 of file MeshCut_DC.cxx.

float MESHCUT::d

coefficient constant de l'équation du plan de coupe

Definition at line 61 of file MeshCut_DC.cxx.

Definition at line 64 of file MeshCut_DC.cxx.

float * MESHCUT::DNP

Distance Noeud Plan.

Definition at line 55 of file MeshCut_DC.cxx.

distance en dessous de laquelle un point est considéré comme appartenant au plan de coupe

Definition at line 62 of file MeshCut_DC.cxx.

std::map< TYPE_MAILLE, std::vector< int > > MESHCUT::GMmoins

Definition at line 52 of file MeshCut_DC.cxx.

std::map< TYPE_MAILLE, std::vector< int > > MESHCUT::GMplus

Definition at line 52 of file MeshCut_DC.cxx.

Definition at line 45 of file MeshCut_DC.cxx.

Definition at line 45 of file MeshCut_DC.cxx.

std::map< std::string, int > MESHCUT::intersections

Table des points d'intersection calculés.

Si on a calculé une intersection entre le plan et un segment reliant N1 et N2 de numéros globaux n1 et n2, on stocke dans ce tableau, sous les libellés "n1_n2" et "n2_n1", le numéro global du point d'intersection (noeud créé). On évite ainsi de calculer deux fois l'intersection d'une même arête de T4 avec le plan

Definition at line 43 of file MeshCut_DC.cxx.

Definition at line 47 of file MeshCut_DC.cxx.

Definition at line 47 of file MeshCut_DC.cxx.

Definition at line 65 of file MeshCut_DC.cxx.

std::map< TYPE_MAILLE, std::vector< int > > MESHCUT::newCNX

Definition at line 50 of file MeshCut_DC.cxx.

std::vector< float > MESHCUT::newXX

Definition at line 49 of file MeshCut_DC.cxx.

std::vector< float > MESHCUT::newYY

Definition at line 49 of file MeshCut_DC.cxx.

std::vector< float > MESHCUT::newZZ

Definition at line 49 of file MeshCut_DC.cxx.

Definition at line 60 of file MeshCut_DC.cxx.

Definition at line 45 of file MeshCut_DC.cxx.

Définition du plan de coupe.

Definition at line 60 of file MeshCut_DC.cxx.

Version -1/0/+1 du précédent, selon epsilon.

Definition at line 56 of file MeshCut_DC.cxx.

Definition at line 46 of file MeshCut_DC.cxx.

Definition at line 46 of file MeshCut_DC.cxx.

Definition at line 58 of file MeshCut_DC.cxx.