-void DriverMED_W_SMESHDS_Mesh::Add() {
-
- med_err ret = 0;
- int i,j,k,l;
- int numero;
- char message[200];
- Standard_Boolean ok;
- /* nombre d'objets MED */
- char nom_universel[MED_TAILLE_LNOM+1];
- med_int long_fichier_en_tete;
- char *fichier_en_tete;
- char version_hdf[10];
- char version_med[10];
- med_int nmaa,mdim,nnoe;
- med_int nmai[MED_NBR_GEOMETRIE_MAILLE],nfac[MED_NBR_GEOMETRIE_FACE];
- med_int nare[MED_NBR_GEOMETRIE_ARETE];
- /* nom du maillage */
- char nommaa[MED_TAILLE_NOM+1];
- /* noeuds */
- med_float *coo;
- // PN : Initilialisation de nomcoo et unicoo pour lisibilite du maillage
- char nomcoo[3*MED_TAILLE_PNOM+1]="x y z ";
- char unicoo[3*MED_TAILLE_PNOM+1]="m m m ";
- char *nomnoe;
- med_int *numnoe;
- med_int *nufano;
- med_repere rep;
- med_booleen inonoe,inunoe;
- med_mode_switch mode_coo;
- char str[MED_TAILLE_PNOM+1];
- med_int nbNodes;
- /* elements */
- med_int nsup;
- med_int edim;
- med_int taille;
- med_int elem_id,myId;
- med_int *connectivite;
- char *nomele;
- med_int *numele;
- med_int *nufael;
- med_booleen inoele, inuele;
- med_connectivite typ_con;
- med_geometrie_element typgeo;
- med_geometrie_element typmai[MED_NBR_GEOMETRIE_MAILLE] = {MED_POINT1,MED_SEG2,
- MED_SEG3,MED_TRIA3,
- MED_TRIA6,MED_QUAD4,
- MED_QUAD8,MED_TETRA4,
- MED_TETRA10,MED_HEXA8,
- MED_HEXA20,MED_PENTA6,
- MED_PENTA15,MED_PYRA5,
- MED_PYRA13};
- med_int desmai[MED_NBR_GEOMETRIE_MAILLE] = {0,2,3,3,3,4,4,4,4,6,6,5,5,5,5};
- med_int nmailles[MED_NBR_GEOMETRIE_MAILLE];
- char nommai[MED_NBR_GEOMETRIE_MAILLE] [MED_TAILLE_NOM+1] = {"MED_POINT1",
- "MED_SEG2",
- "MED_SEG3",
- "MED_TRIA3",
- "MED_TRIA6",
- "MED_QUAD4",
- "MED_QUAD8",
- "MED_TETRA4",
- "MED_TETRA10",
- "MED_HEXA8",
- "MED_HEXA20",
- "MED_PENTA6",
- "MED_PENTA15",
- "MED_PYRA5",
- "MED_PYRA13"};
- med_geometrie_element typfac[MED_NBR_GEOMETRIE_FACE] = {MED_TRIA3,MED_TRIA6,
- MED_QUAD4,MED_QUAD8};
- med_int desfac[MED_NBR_GEOMETRIE_FACE] = {3,3,4,4};
- med_int nfaces[MED_NBR_GEOMETRIE_FACE];
- char nomfac[MED_NBR_GEOMETRIE_FACE][MED_TAILLE_NOM+1] = {"MED_TRIA3","MED_TRIA6",
- "MED_QUAD4","MED_QUAD8"};
- med_geometrie_element typare[MED_NBR_GEOMETRIE_ARETE] = {MED_SEG2,MED_SEG3};
- med_int desare[MED_NBR_GEOMETRIE_ARETE] = {2,3};
- med_int naretes[MED_NBR_GEOMETRIE_ARETE];
- char nomare[MED_NBR_GEOMETRIE_ARETE] [MED_TAILLE_NOM+1] = {"MED_SEG2","MED_SEG3"};
-
- typ_con = MED_NOD;
- mode_coo = MED_FULL_INTERLACE;
- numero = myMeshId;
-
- //---- provisoire : switch pour ecrire les familles de mailles
- int besoinfamilledemaille=1;
- //---- provisoire : switch pour ecrire les familles de mailles
-
- /****************************************************************************
- * OUVERTURE DU FICHIER EN ECRITURE *
- ****************************************************************************/
- char* file2Read = (char*)myFile.c_str();
-
- MESSAGE ( " file2Read " << file2Read )
-
- myFileId = MEDouvrir(file2Read,MED_REMP);
- if (myFileId < 0)
- {
- fprintf(stderr,">> ERREUR : ouverture du fichier %s \n",file2Read);
- exit(EXIT_FAILURE);
- }
-
- /****************************************************************************
- * NOMBRES D'OBJETS MED *
- ****************************************************************************/
- MESSAGE("(****************************)");
- MESSAGE("(* INFORMATIONS GENERALES : *)");
- MESSAGE("(****************************)");
-
- /* calcul de la dimension */
- mdim=2;
- double epsilon=0.00001;
- double nodeRefX;
- double nodeRefY;
- double nodeRefZ;
-
- bool dimX = true;
- bool dimY = true;
- bool dimZ = true;
-
- SMDS_MeshNodesIterator myItNodes(myMesh);
- int inode = 0;
- for (;myItNodes.More();myItNodes.Next()) {
- const Handle(SMDS_MeshElement)& elem = myItNodes.Value();
- const Handle(SMDS_MeshNode)& node = myMesh->GetNode(1,elem);
- if ( inode == 0 ) {
- nodeRefX = fabs(node->X());
- nodeRefY = fabs(node->Y());
- nodeRefZ = fabs(node->Z());
- }
- SCRUTE( inode );
- SCRUTE( nodeRefX );
- SCRUTE( nodeRefY );
- SCRUTE( nodeRefZ );
-
- if ( inode !=0 ) {
- if ( (fabs(fabs(node->X()) - nodeRefX) > epsilon ) && dimX )
- dimX = false;
- if ( (fabs(fabs(node->Y()) - nodeRefY) > epsilon ) && dimY )
- dimY = false;
- if ( (fabs(fabs(node->Z()) - nodeRefZ) > epsilon ) && dimZ )
- dimZ = false;
- }
- if ( !dimX && !dimY && !dimZ ) {
- mdim = 3;
- break;
- }
- inode++;
- }
-
- if ( mdim != 3 ) {
- if ( dimX && dimY && dimZ )
- mdim = 0;
- else if ( !dimX ) {
- if ( dimY && dimZ )
- mdim = 1;
- else if (( dimY && !dimZ ) || ( !dimY && dimZ ) )
- mdim = 2;
- } else if ( !dimY ) {
- if ( dimX && dimZ )
- mdim = 1;
- else if (( dimX && !dimZ ) || ( !dimX && dimZ ) )
- mdim = 2;
- } else if ( !dimZ ) {
- if ( dimY && dimX )
- mdim = 1;
- else if (( dimY && !dimX ) || ( !dimY && dimX ) )
- mdim = 2;
- }
- }
-
- MESSAGE ( " mdim " << mdim );
-
- /* creation du maillage */
- //mdim=3;
- sprintf(nommaa,"Mesh %d",numero);
- SCRUTE(nommaa);
- ret = MEDmaaCr(myFileId,nommaa,mdim);
-
- ASSERT(ret == 0);
- SCRUTE( ret );