Exemplo n.º 1
0
int main (int argc, char **argv) {
  med_idt fid;
  const char meshname[MED_NAME_SIZE+1] = "2D unstructured mesh";
  const med_int spacedim = 2;
  const med_int meshdim = 2;
  /*                                         12345678901234561234567890123456 */
  const char axisname[2*MED_SNAME_SIZE+1] = "x               y               ";
  const char unitname[2*MED_SNAME_SIZE+1] = "cm              cm              ";
  const med_float coordinates[30] = { 2.,1.,  7.,1.,  12.,1.,  17.,1.,  22.,1.,
				      2.,6.,  7.,6.,  12.,6.,  17.,6.,  22.,6.,
				      2.,11., 7.,11., 12.,11., 17.,11., 22.,11.};
  const med_int nnodes = 15;
  const med_int triaconnectivity[24] = { 1,7,6,   2,7,1,  3,7,2,   8,7,3,   
					 13,7,8, 12,7,13, 11,7,12, 6,7,11 };
  const med_int ntria3 = 8;
  const med_int quadconnectivity[16] = {3,4,9,8,    4,5,10,9, 
					15,14,9,10, 13,8,9,14};
  const med_int nquad4 = 4;
  med_err ret=-1;
  
  /* open MED file */
  fid = MEDfileOpen("UsesCase_MEDmesh_1.med",MED_ACC_CREAT);
  if (fid < 0) {
    MESSAGE("ERROR : file creation ...");
    goto ERROR;
  }

  /* write a comment in the file */
  if (MEDfileCommentWr(fid,"A 2D unstructured mesh : 15 nodes, 12 cells") < 0) {
    MESSAGE("ERROR : write file description ...");
    goto ERROR;
  }
  
  /* mesh creation : a 2D unstructured mesh */
  if (MEDmeshCr(fid, meshname, spacedim, meshdim, MED_UNSTRUCTURED_MESH, 
		"A 2D unstructured mesh","",MED_SORT_DTIT,MED_CARTESIAN, axisname, unitname) < 0) {
    MESSAGE("ERROR : mesh creation ...");
    goto ERROR;
  }

  /* nodes coordinates in a cartesian axis in full interlace mode 
     (X1,Y1, X2,Y2, X3,Y3, ...) with no iteration and computation step 
  */
  if (MEDmeshNodeCoordinateWr(fid, meshname, MED_NO_DT, MED_NO_IT, 0.0,
			      MED_FULL_INTERLACE, nnodes, coordinates) < 0) {
    MESSAGE("ERROR : nodes coordinates ...");
    goto ERROR;
  }

  /* cells connectiviy is defined in nodal mode with no iteration and computation step */
  if (MEDmeshElementConnectivityWr(fid, meshname, MED_NO_DT, MED_NO_IT, 0.0, MED_CELL, MED_TRIA3,
				   MED_NODAL, MED_FULL_INTERLACE, ntria3, triaconnectivity) < 0) {
    MESSAGE("ERROR : triangular cells connectivity ...");
    goto ERROR;
  }
  if (MEDmeshElementConnectivityWr(fid, meshname, MED_NO_DT, MED_NO_IT, 0.0, MED_CELL, MED_QUAD4,
				   MED_NODAL, MED_FULL_INTERLACE, nquad4, quadconnectivity) < 0) {
    MESSAGE("ERROR : quadrangular cells connectivity ...");
    goto ERROR;
  }

  /* create family 0 : by default, all mesh entities family number is 0 */
  if (MEDfamilyCr(fid, meshname,MED_NO_NAME, 0, 0, MED_NO_GROUP) < 0) {
    MESSAGE("ERROR : family 0 creation ...");
    goto ERROR;
  }

  ret = 0;
 ERROR :
  
  /* close MED file */
  if (MEDfileClose(fid)  < 0) {
    MESSAGE("ERROR : close file ...");
    return -1;
  }

  return ret;
}
int main (int argc, char **argv)


{
  med_err ret = 0;
  med_idt fid;
  /* la dimension du maillage */
  med_int mdim = 2;
  /* nom du maillage de longueur maxi MED_NAME_SIZE */
  char maa[MED_NAME_SIZE+1] = "maa1";
  /* le nombre de noeuds */
  med_int nnoe = 4;
  /* table des coordonnees
      (dimension * nombre de noeuds) */
  med_float coo[8] = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0};
  med_float coo_2[8] = {0.0, 10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0};
  /* tables des noms et des unites des coordonnees
      (dimension*MED_SNAME_SIZE+1) */
  /*                                  12345678901234561234567890123456*/
  char nomcoo[2*MED_SNAME_SIZE+1] = "x               y               ";
  char unicoo[2*MED_SNAME_SIZE+1] = "cm              cm              ";
  /* tables des noms, numeros, numeros de familles des noeuds
     autant d'elements que de noeuds - les noms ont pout longueur
     MED_SNAME_SIZE */
  /*                                  1234567890123456123456789012345612345678901234561234567890123456*/
  char nomnoe[4*MED_SNAME_SIZE+1] = "nom1            nom2            nom3            nom4            ";
  med_int numnoe[4] = {1,2,3,4};
  med_int nufano[4] = {0,1,2,2};
  const med_float phi1=0;
  const med_float phi2=M_PI_4;
  const med_float phi3=M_PI_2;
  med_float       trsf1[7]= {0,0,0, cos(phi1/2), 0, sin(phi1/2), 0 };
  med_float       trsf2[7]= {0,0,0, cos(phi2/2), 0, sin(phi2/2), 0 };
  med_float       trsf3[7]= {0,0,0, cos(phi3/2), 0, sin(phi3/2), 0 };

  /* ouverture du fichier */
  if ((fid = MEDfileOpen("Test_MEDmeshNodeCoordinateTrsfWr.med",MODE_ACCES)) < 0){
    MESSAGE("Erreur à l'ouverture du fichier : ");
    return -1;
  }

  /* Creation du maillage "maa" de type MED_NON_STRUCURE
     et de dimension 2 */
  if (MEDmeshCr( fid, maa, mdim, mdim, MED_UNSTRUCTURED_MESH,
	     "un maillage pour Test_MEDmeshNodeCoordinateTrsfWr","s", MED_SORT_DTIT,
		 MED_CARTESIAN, nomcoo, unicoo) < 0) {
    MESSAGE("Erreur a la creation du maillage : "); SSCRUTE(maa);
    ret = -1;
  }

  /* Ecriture des coordonnees des noeuds en mode MED_FULL_INTERLACE :
     (X1,Y1, X2,Y2, X3,Y3, ...) dans un repere cartesien */
  if (MEDmeshNodeCoordinateWr(fid,maa,MED_NO_DT,MED_NO_IT,MED_UNDEF_DT,
			      MED_FULL_INTERLACE,nnoe,  coo) < 0) {
    MESSAGE("Erreur a l'ecriture des coordonnees des noeuds");
    ret = -1;
  }

  /* Ecriture des noms des noeuds (optionnel dans un maillage MED) */
  if (MEDmeshEntityNameWr(fid,maa,MED_NO_DT,MED_NO_IT,MED_NODE,MED_NONE,nnoe,nomnoe) < 0) {
    MESSAGE("Erreur a l'ecriture des noms des noeuds");
    ret = -1;
  }

  /* Ecriture des numeros des noeuds (optionnel dans un maillage MED) */
  if (MEDmeshEntityNumberWr(fid,maa,MED_NO_DT,MED_NO_IT,MED_NODE,MED_NONE,nnoe,numnoe) < 0) {
    MESSAGE("Erreur a l'ecriture des numeros des noeuds");
    ret = -1;
  }

  /* Ecriture des numeros de famille des noeuds */
  if (MEDmeshEntityFamilyNumberWr(fid,maa,MED_NO_DT,MED_NO_IT,MED_NODE,MED_NONE,nnoe,nufano) < 0) {
    MESSAGE("Erreur a l'ecriture des numeros de familles des noeuds");
    ret = -1;
  }

  /* Transformation des coordonnees des noeuds coo_1 :
   */
  fprintf(stdout,"Un message d'erreur est attendu: \n");
  if ( MEDmeshNodeCoordinateTrsfWr(fid,maa,MED_NO_DT,MED_NO_IT,0.4,trsf1) >= 0) {
    MESSAGE("Erreur a l'ecriture de la transformation géométrique n°1");
    MESSAGE("Aucune transformation géométrique à la séquence de calcul MED_NO_DT,MED_NO_IT n'est possible.");
  }
  fprintf(stdout,"Fin du message d'erreur attendu\n :");

  /* Transformation des coordonnees des noeuds coo_1 :
   */
  if ( MEDmeshNodeCoordinateTrsfWr(fid,maa,1,1,0.4,trsf1) < 0) {
    MESSAGE("Erreur a l'ecriture de la transformation géométrique n°1");
    ret = -1;
  }

  /* Ecriture des coordonnees des noeuds en mode MED_FULL_INTERLACE :
     (X1,Y1, X2,Y2, X3,Y3, ...) dans un repere cartesien */
  fprintf(stdout,"Un message d'erreur est attendu : \n");
  if (MEDmeshNodeCoordinateWr(fid,maa,1,1, 0.5,
			      MED_FULL_INTERLACE,nnoe, coo_2) >= 0) {
    MESSAGE("Erreur a l'ecriture des coordonnees des noeuds");
    MESSAGE("Aucune ecriture des coordonnees des noeuds n'est possible sur une séquence de calcul comportant "\
	    "une transformation géométrique.");
  }
  fprintf(stdout,"Fin du message d'erreur attendu :\n");

  /* Ecriture des coordonnees des noeuds en mode MED_FULL_INTERLACE :
     (X1,Y1, X2,Y2, X3,Y3, ...) dans un repere cartesien */
  if (MEDmeshNodeCoordinateWr(fid,maa,2,1, 0.5,
			      MED_FULL_INTERLACE,nnoe, coo_2) < 0) {
    MESSAGE("Erreur a l'ecriture des coordonnees des noeuds");
    ret = -1;
  }

  /* Transformation des coordonnees des noeuds coo_2 :
   */
  fprintf(stdout,"Un message d'erreur est attendu\n :");
  if ( MEDmeshNodeCoordinateTrsfWr(fid,maa,2,1,0.5,trsf2) >= 0) {
    MESSAGE("Erreur a l'ecriture de la transformation géométrique n°2");
    MESSAGE("Aucune transformation géométrique à une séquence de calcul comportant de nouvelles coordonnées n'est possible.");
  }
  fprintf(stdout,"Fin du message d'erreur attendu\n :");

  /* Transformation des coordonnees des noeuds coo_2 :
   */
  if ( MEDmeshNodeCoordinateTrsfWr(fid,maa,2,2,0.6,trsf2) < 0) {
    MESSAGE("Erreur a l'ecriture de la transformation géométrique n°2");
    ret = -1;
  }

  /* Transformation des coordonnees des noeuds coo_3 :
   */
  if ( MEDmeshNodeCoordinateTrsfWr(fid,maa,3,2,0.7,trsf3) < 0) {
    MESSAGE("Erreur a l'ecriture de la transformation géométrique n°3");
    ret = -1;
  }

  if ( MEDmeshComputationStepCr(fid,maa, 3,2, 3,3, 3.3) < 0) {
    MESSAGE("Erreur a la creation d'un pas de temps du maillage maa");
  }

 /* Modification des numeros des noeuds (optionnel dans un maillage MED) */
  numnoe[2]=200;
  if (MEDmeshEntityNumberWr(fid,maa,3,3,MED_NODE,MED_NONE,nnoe,numnoe) < 0) {
    MESSAGE("Erreur a l'ecriture des numeros des noeuds");
    ret = -1;
  }

  if ( MEDmeshComputationStepCr(fid,maa, 3,3, 3,4, 3.4) < 0) {
    MESSAGE("Erreur a la creation d'un pas de temps du maillage maa");
  }

  /*TODO : Ecrire un test de comparaison interne next prev et ordre de découverte itératif */

  /* Fermeture du fichier */
  if (MEDfileClose(fid) < 0) {
    MESSAGE("Erreur a la fermeture du fichier test4.med");
    return -1;
  }
  return ret;
}
Exemplo n.º 3
0
int main (int argc, char **argv)


{
  med_err ret = 0;
  med_idt fid;
  /* la dimension du maillage */
  med_int mdim = 2;
  /* nom du maillage de longueur maxi MED_NAME_SIZE */
  char maa[MED_NAME_SIZE+1] = "maa1";
  /* le nombre de noeuds */
  med_int nnoe = 4;
  /* table des coordonnees
      (dimension * nombre de noeuds) */
  med_float coo[8] = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0};
  med_float coo_2[8] = {0.0, 10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0};
  /* tables des noms et des unites des coordonnees
      (dimension*MED_SNAME_SIZE+1) */
  /*                                  12345678901234561234567890123456*/
  char nomcoo[2*MED_SNAME_SIZE+1] = "x               y               ";
  char unicoo[2*MED_SNAME_SIZE+1] = "cm              cm              ";
  /* tables des noms, numeros, numeros de familles des noeuds
     autant d'elements que de noeuds - les noms ont pout longueur
     MED_SNAME_SIZE */
  /*                                  1234567890123456123456789012345612345678901234561234567890123456*/
  char nomnoe[4*MED_SNAME_SIZE+1] = "nom1            nom2            nom3            nom4            ";
  med_int numnoe[4] = {1,2,3,4};
  med_int nufano[4] = {0,1,2,2};

  /* Creation du fichier "test4.med" */
  /* ouverture du fichier */
  if ((fid = MEDfileOpen("test4.med",MODE_ACCES)) < 0){
    MESSAGE("Erreur à l'ouverture du fichier : ");
    return -1;
  }

  /* Creation du maillage "maa" de type MED_NON_STRUCURE
     et de dimension 2 */
  if (MEDmeshCr( fid, maa, mdim, mdim, MED_UNSTRUCTURED_MESH,
	     "un maillage pour test4","s", MED_SORT_DTIT,
		 MED_CARTESIAN, nomcoo, unicoo) < 0) {
    MESSAGE("Erreur a la creation du maillage : "); SSCRUTE(maa);
    ret = -1;
  }

  /* Ecriture des coordonnees des noeuds en mode MED_FULL_INTERLACE :
     (X1,Y1, X2,Y2, X3,Y3, ...) dans un repere cartesien */
  if (MEDmeshNodeCoordinateWr(fid,maa,MED_NO_DT,MED_NO_IT,MED_UNDEF_DT,
			      MED_FULL_INTERLACE,nnoe,  coo) < 0) {
    MESSAGE("Erreur a l'ecriture des coordonnees des noeuds");
    ret = -1;
  }

  /* Ecriture des attributs des noeuds du maillage  */
  if (MEDmeshAttributeWr(fid,maa, 0, nnoe, 0) < 0 ) {
    MESSAGE("Erreur a l'ecriture des attributs des noeuds du maillage");
    ret = -1;
  }

  /* Ecriture des noms des noeuds (optionnel dans un maillage MED) */
  if (MEDmeshEntityNameWr(fid,maa,MED_NO_DT,MED_NO_IT,MED_NODE,MED_NONE,nnoe,nomnoe) < 0) {
    MESSAGE("Erreur a l'ecriture des noms des noeuds");
    ret = -1;
  }

  /* Ecriture des numeros des noeuds (optionnel dans un maillage MED) */
  if (MEDmeshEntityNumberWr(fid,maa,MED_NO_DT,MED_NO_IT,MED_NODE,MED_NONE,nnoe,numnoe) < 0) {
    MESSAGE("Erreur a l'ecriture des numeros des noeuds");
    ret = -1;
  }

  /* Ecriture des numeros de famille des noeuds */
  if (MEDmeshEntityFamilyNumberWr(fid,maa,MED_NO_DT,MED_NO_IT,MED_NODE,MED_NONE,nnoe,nufano) < 0) {
    MESSAGE("Erreur a l'ecriture des numeros de familles des noeuds");
    ret = -1;
  }

  /* Ecriture des coordonnees des noeuds en mode MED_FULL_INTERLACE :
     (X1,Y1, X2,Y2, X3,Y3, ...) dans un repere cartesien */
  if (MEDmeshNodeCoordinateWr(fid,maa,0,5,0.5,
			      MED_FULL_INTERLACE,nnoe, coo_2) < 0) {
    MESSAGE("Erreur a l'ecriture des coordonnees des noeuds");
    ret = -1;
  }

  /* Ecriture des coordonnees des noeuds en mode MED_FULL_INTERLACE :
     (X1,Y1, X2,Y2, X3,Y3, ...) dans un repere cartesien */
  if (MEDmeshNodeCoordinateWr(fid,maa,2,0,2.0,
			      MED_FULL_INTERLACE,nnoe,  coo) < 0) {
    MESSAGE("Erreur a l'ecriture des coordonnees des noeuds");
    ret = -1;
  }

  /*TODO : Ecrire un test de comparaison next prev et ordre de découverte itératif */
  MEDmeshComputationStepCr(fid,maa,-1,-1,0,2,0.25);

  MEDmeshComputationStepCr(fid,maa,0,2,0,3,0.35);

  /* Fermeture du fichier */
  if (MEDfileClose(fid) < 0) {
    MESSAGE("Erreur a la fermeture du fichier test4.med");
    return -1;
  }
  return ret;
}
Exemplo n.º 4
0
int main (int argc, char **argv)

/*TODO : Tester l'écriture des attributs famille,numéros optionnels, noms optionnels*/
{
  med_idt   fid=0;
  med_int   mdim=2,axe=0,nind=0;
  med_float indiceX[4] = {1.0,1.1,1.2,1.3};
  med_float indiceY[4] = {2.0,2.1,2.2,2.3};
  med_float coo[8]     = {0.0,0.0,1.0,0.0,0.0,1.0,1.0,1.0};
  med_int   nnoeuds    = 4;
  med_int   structure_grille[2] = {2,2};
  char      maa [MED_NAME_SIZE+1]= "grille_cartesian";
  char      maa2[MED_NAME_SIZE+1]= "grille_curvilinear";
  /* composantes et unites */
  /*                               12345678901234561234567890123456 */
  char comp[2*MED_SNAME_SIZE+1] = "X               Y               ";
  char unit[2*MED_SNAME_SIZE+1] = "cm              cm              ";

  /* Creation du fichier test27.med */
  fid = MEDfileOpen("test27.med",MODE_ACCES);
  if (fid < 0) {
    MESSAGE("Erreur a la creation du fichier test27.med");
    return -1;
  }
  printf("Creation du fichier test27.med \n");

  /* Creation du maillage "maa" de type MED_NON_STRUCURE  et de dimension 2 */
  if (MEDmeshCr( fid, "maillage vide",2, 2, MED_UNSTRUCTURED_MESH,
		 "un maillage vide","s", MED_SORT_DTIT,
		 MED_CARTESIAN, comp, unit) < 0) {
    MESSAGE("Erreur a la creation du maillage MED_UNSTRUCTURED_MESH : "); SSCRUTE(maa);
    return -1;
  }
  /* creation d'une grille cartesienne de dimension 2 */
  /* on commence par definir un maillage MED_STRUCTURED_MESH
     de dimension 2 */
  if (MEDmeshCr( fid, maa,mdim, mdim, MED_STRUCTURED_MESH,
		 "un exemple de grille cartesienne","s", MED_SORT_DTIT,
		 MED_CARTESIAN, comp, unit) < 0) {
    MESSAGE("Erreur a la creation de la grille");
    return -1;
  }
  printf("Creation d'un maillage structure MED_STRUCTURED_MESH \n");

  /* On specifie la nature du maillage structure : MED_GRILLE_CARTESIENNE */
  if (MEDmeshGridTypeWr(fid,maa, MED_CARTESIAN_GRID) < 0) {
    MESSAGE("Erreur a l'ecriture de la nature de la grille");
    return -1;
  }

  printf("On definit la nature du maillage structure : MED_GRILLE_CARTESIENNE \n");

  /* on definit les indices des coordonnees de la grille selon chaque dimension  */
  /* axe des "X" */
  nind = 4;
  axe = 1;
  if (MEDmeshGridIndexCoordinateWr(fid,maa,MED_NO_DT,MED_NO_IT,MED_UNDEF_DT,
				   axe,nind,indiceX) < 0) {
    MESSAGE("Erreur a l'ecriture de l'axe X");
    return -1;
  }
  printf("Ecriture des indices des coordonnees selon l'axe des X \n");

  /* axe des "Y" */
  nind = 4;
  axe = 2;
  if (MEDmeshGridIndexCoordinateWr(fid,maa,MED_NO_DT,MED_NO_IT,MED_UNDEF_DT,
				   axe,nind,indiceY) < 0) {
    MESSAGE("Erreur a l'ecriture de l'axe Y");
    return -1;
  }
  printf("Ecriture des indices des coordonnees selon l'axe des Y \n");

  /* Creation d'une grille MED_CURVILINEAR_GRID de dimension 2 */
  /* on commence par definir un maillage MED_STRUCTURED_MESH
     de dimension 2 */
  if (MEDmeshCr( fid, maa2,mdim, mdim, MED_STRUCTURED_MESH,
		 "un exemple de grille standard","s", MED_SORT_DTIT,
		 MED_CARTESIAN, comp, unit) < 0) {
    MESSAGE("Erreur a la creation de la 2e grille");
    return -1;
  }
  printf("Creation d'un maillage structure MED_STRUCTURED_MESH \n");

 /* On specifie la nature du maillage structure : MED_CURVILINEAR_GRID */
  if (MEDmeshGridTypeWr(fid,maa2, MED_CURVILINEAR_GRID) < 0) {
    MESSAGE("Erreur a l'ecriture de la nature de la grille");
    return -1;
  }
  printf("On definit la nature du maillage structure : MED_CURVILINEAR_GRID \n");


  if (MEDmeshNodeCoordinateWr(fid,maa2,MED_NO_DT,MED_NO_IT,MED_UNDEF_DT,
			      MED_FULL_INTERLACE,nnoeuds, coo) < 0) {
    MESSAGE("Erreur a l'ecriture des noeuds de la grille MED_CURVILINEAR_GRID");
    return -1;
  }
  printf("Ecriture des coordonnees des noeuds \n");

  /* On definit la structure de la grille */
  if ( MEDmeshGridStructWr(fid,maa2,MED_NO_DT,MED_NO_IT, MED_UNDEF_DT, structure_grille ) < 0) {
    MESSAGE("Erreur a l'ecriture de la structure de la grille");
    return -1;
  }
  printf("Ecriture de la structure de la grille : / 2,2 / \n");

  /* On ferme le fichier */
  if (MEDfileClose(fid) < 0) {
    MESSAGE("Erreur a la fermeture du fichier");
    return -1;
  }
  printf("Fermeture du fichier \n");

  return 0;
}
Exemplo n.º 5
0
int main (int argc, char **argv) {
  med_idt fid;
  const char meshname[MED_NAME_SIZE+1] = "3D Unstructured Mesh With 2 polyhedrons";
  const med_int spacedim = 3;
  const med_int meshdim  = 3;
  /*                                         12345678901234561234567890123456 */
  const char axisname[3*MED_SNAME_SIZE+1] = "x               y               z               ";
  const char unitname[3*MED_SNAME_SIZE+1] = "cm              cm              cm              ";
 
  const med_int nnodes = 16;
  const med_float coordinates[3 * 16] = {
/* [     1 ] */  -10.0,  -10.0,  +0.0,
/* [     2 ] */  -10.0,  -10.0,  +10., 
/* [     3 ] */  -10.0,  +10.0,  +10., 
/* [     4 ] */  -10.0,  +10.0,  +0.0,
/* [     5 ] */  +10.0,  -10.0,  +0.0,
/* [     6 ] */  +10.0,  -10.0,  +10., 
/* [     7 ] */  +10.0,  +10.0,  +10., 
/* [     8 ] */  +10.0,  +10.0,  +0.0,
/* [     9 ] */  -10.0,  +0.0 , +10.0,
/* [    10 ] */  -10.0,  +0.0 , +0.0 ,
/* [    11 ] */  +0.0 , -10.0 , +10.0,
/* [    12 ] */  +0.0 , -10.0 , +0.0 ,
/* [    13 ] */  +0.0 , +10.0 , +10.0,
/* [    14 ] */  +10.0,  +0.0 , +10.0,
/* [    15 ] */  +0.0 , +10.0 , +0.0 ,
/* [    16 ] */  +10.0,  +0.0 , +0.0
  };

  /*Il y a 58 numéros de noeuds dans le tableau de connextivité*/
  const med_int connectivity[26+32] = {
/*  - Poly 1 : */  
/*  - Face 1 : */  1,  2  ,  9 , 3  , 10, 
/*  - Face 2 : */  1,  12 ,  5 , 6  , 11,  2, 
/*  - Face 3 : */  2,  11 ,  6 , 3  , 9 ,
/*  - Face 4 : */  3,  6  ,  5 ,      
/*  - Face 5 : */  3,  5  , 10 ,      
/*  - Face 6 : */  1,  10 ,  5 , 12,  
/*  - Poly 2 : */	    	      
/*  - Face 1 : */  3,  13 ,  7 , 8  , 15,  4, 
/*  - Face 2 : */  3,  4  , 10 ,      
/*  - Face 3 : */  4,  15 ,  8 , 16 ,  5,  10, 
/*  - Face 4 : */  3,  6  , 14 , 7  , 13, 
/*  - Face 5 : */  5,  16 ,  8 , 7  , 14,  6, 
/*  - Face 6 : */  3,  10 ,  5 , 
/*  - Face 7 : */  3,  5  ,  6
  };

  /* Il y a deux polyèdres, le premier a 6 faces, le second 7 faces */
  /* La face 7 du Poly 2 utilise 59-56=3 noeuds */
  const med_int nodeindex[6+7+1] = { 1, 6, 12, 17, 20, 23,
				     27, 33, 36, 42, 47, 53, 56, 59};
  /* Il y a un total de 13 faces */
  /* NodeIndexSize == Nbre De Faces +1 */
  const med_int nodeindexSize = 6+7+1;

  /* Il y a deux polyèdres, le premier a 6 faces, le second 7 faces */
  /* Pn+1 == FaceIndex[n+1]== NodeIndexSize== Nbre De Faces +1 */
  const med_int faceindex[3] = {1,7,14};
  const med_int faceindexSize = 3;


  /* open MED file */
  fid = MEDfileOpen("UsesCase_MEDmesh_15.med",
        MED_ACC_CREAT);
  if (fid < 0) {
    MESSAGE("ERROR : file creation ...");
    return -1;
  }

  /* write a comment in the file */
  if (MEDfileCommentWr(fid,
           "A 3D unstructured mesh : 2 polyhedrons") < 0) {
    MESSAGE("ERROR : write file description ...");
    return -1;
  }

  /* mesh creation : a 3D unstructured mesh */
  if (MEDmeshCr(fid, meshname, spacedim, meshdim,
		MED_UNSTRUCTURED_MESH, "A 3D mesh with 2 polyhedron",
		"", MED_SORT_DTIT,
		MED_CARTESIAN, axisname, unitname) < 0) {
    MESSAGE("ERROR : mesh creation ...");
    return -1;
  }

  /* nodes coordinates in a cartesian axis in full interlace mode
     (X1,Y1, X2,Y2, X3,Y3, ...) with no iteration and computation step
  */
  if (MEDmeshNodeCoordinateWr(fid, meshname,
            MED_NO_DT, MED_NO_IT, MED_UNDEF_DT,
            MED_FULL_INTERLACE, nnodes, coordinates) < 0) {
    MESSAGE("ERROR : nodes coordinates ...");
    return -1;
  }

  /* cells connectiviy is defined in nodal mode */
  if (MEDmeshPolyhedronWr(fid, meshname,
			  MED_NO_DT, MED_NO_IT, MED_UNDEF_DT,
			  MED_CELL, MED_NODAL,
			  faceindexSize, faceindex,
			  nodeindexSize, nodeindex,
			  connectivity) < 0) {
    MESSAGE("ERROR : polyhedron connectivity ...");
    return -1;
  }

  /* create family 0 : by default, all mesh entities family number is 0 */
  if (MEDfamilyCr(fid, meshname, "", 0, 0, "") < 0) {
    MESSAGE("ERROR : quadrangular cells connectivity ...");
    return -1;
  }

  /* close MED file */
  if (MEDfileClose(fid)  < 0) {
    MESSAGE("ERROR : close file ...");
    return -1;
  }

  return 0;
}
Exemplo n.º 6
0
int main (int argc, char **argv)

{

  int     _i          = 0;
  int     _j          = 0;
  med_idt _fid        = 0;
  med_int _meshdim    = 3;
  med_int _rmeshdim   = 0;
  med_int _rspacedim  = 0;
  med_int _n          = 0;
  med_int _rnnoe      = 0;
  med_int _rnse2      = 0;
  med_int _rnaxis     = 0;

  const med_int _nnoe = 5;

  /* table des coordonnees
     (dimension * nombre de noeuds) */
  med_float coo[5*3] = {0.0, 0.0, 0.0, 0.1 , 0.0, 0.0,
			1.0, 0.0, 0.0, 1.1 , 0.0, 0.0,
			2.0, 0.0, 0.0  };
  med_float * _rcoo=NULL;

  med_int nse2 = 4;
  med_int se2[10] = {1,2, 2,3, 3,4, 4,5};
  med_int * _rse2=NULL;

  const char   _supportmeshname[]="SUPPORT_POUTRE";
  char         _axisname[3*MED_SNAME_SIZE+1]="";
  char         _axisunit[3*MED_SNAME_SIZE+1]="";

  char           _rsupportmeshname[MED_NAME_SIZE+1]="";
  char           _raxisname[3*MED_SNAME_SIZE+1]="";
  char           _raxisunit[3*MED_SNAME_SIZE+1]="";
  char           _rdescription[MED_COMMENT_SIZE+1]="";
  med_axis_type  _raxistype;
  med_bool       _chgt=MED_FALSE,_trsf=MED_FALSE;

  strcat(_axisname,"x               ");
  strcat(_axisname,"y               ");
  strcat(_axisname,"z               ");
  strcat(_axisunit,"cm              ");
  strcat(_axisunit,"cm              ");
  strcat(_axisunit,"cm              ");

 /* ouverture du fichier */
  if ((_fid = MEDfileOpen("current.med",MODE_ACCES)) < 0) {
    MESSAGE("Impossible de creer le fichier current.med");
    return -1;
  }

  if (MEDsupportMeshCr( _fid, _supportmeshname, _meshdim, _meshdim,"Maillage support ED de type poutre",
			MED_CARTESIAN,_axisname, _axisname) < 0) {
    MESSAGE("Erreur a la creation du maillage support : "); SSCRUTE(_supportmeshname);
    return -1;
  }

  /* Ecriture des coordonnees des noeuds en mode MED_FULL_INTERLACE :
     (X1,Y1, X2,Y2, X3,Y3, ...) dans un repere cartesien */
  if (MEDmeshNodeCoordinateWr(_fid,_supportmeshname,MED_NO_DT,MED_NO_IT,MED_UNDEF_DT,
			      MED_FULL_INTERLACE, _nnoe,  coo) < 0) {
    MESSAGE("Erreur a l'écriture des coordonnees des noeuds du maillage support");
    return -1;
  }


  /* ecriture des connectivites des segments */
  if ( MEDmeshElementConnectivityWr(_fid,_supportmeshname, MED_NO_DT, MED_NO_IT, MED_UNDEF_DT,
                                    MED_CELL, MED_SEG2, MED_NODAL,
				    MED_FULL_INTERLACE, nse2, se2) < 0 ) {
    MESSAGE("Impossible d'ecrire la connectivité des segments du maillage support : ");
    return -1;
  }

  if (MEDsupportMeshCr( _fid, "MED_BILLE_SUPPORT", _meshdim, _meshdim,"Maillage support ED de type bille",
			MED_CARTESIAN,_axisname, _axisname) < 0) {
    MESSAGE("Erreur a la creation du maillage support : "); SSCRUTE(_supportmeshname);
    return -1;
  }

  /* Ecriture des coordonnees des noeuds en mode MED_FULL_INTERLACE :
     (X1,Y1, X2,Y2, X3,Y3, ...) dans un repere cartesien */
  if (MEDmeshNodeCoordinateWr(_fid,"MED_BILLE_SUPPORT",MED_NO_DT,MED_NO_IT,MED_UNDEF_DT,
			      MED_FULL_INTERLACE, 1,  coo) < 0) {
    MESSAGE("Erreur a l'écriture des coordonnees des noeuds du maillage support : MED_BILLE_SUPPORT.");
    return -1;
  }


  if ( (_n =MEDnSupportMesh(_fid)) < 0 ) {
    MESSAGE("Erreur à la lecture du nombre de maillages supports : ");
    return -1;
  }

  for (_i=1; _i <= _n; ++_i) {

    if ( (_rnaxis = MEDsupportMeshnAxis(_fid, _i)) < 0) {
      MESSAGE("Erreur à la lecture du nombre d'axe du repère d'un maillage support : "); 
      return -1;
    }
    printf("\t -Dimension de l'espace : %d\n",_rnaxis);

    if ( MEDsupportMeshInfo(_fid, _i ,
			    _rsupportmeshname, &_rspacedim, &_rmeshdim, _rdescription,
			    &_raxistype, _raxisname, _raxisunit) < 0 ) {
      MESSAGE("Erreur à la lecture des informations sur le  maillage support : "); SSCRUTE(_supportmeshname);
      return -1;
    }

    printf("Maillage support de nom : |%s| , de dimension : %d.\n",_rsupportmeshname, _rmeshdim);
    printf("\t -Dimension de l'espace : %d\n",_rspacedim);
    printf("\t -Description du maillage : %s\n",_rdescription);
    printf("\t -Noms des axes : %s\n",_raxisname);
    printf("\t -Unités des axes : %s\n",_raxisunit);

    /* Combien de noeuds a lire ? */
    _rnnoe = MEDmeshnEntity(_fid,_rsupportmeshname,MED_NO_DT,MED_NO_IT,
			    MED_NODE,MED_NONE,MED_COORDINATE,MED_NO_CMODE,
			    &_chgt,&_trsf);
    if (_rnnoe < 0) {
      MESSAGE("Erreur a la lecture du nombre de noeuds. ");
      return -1;
    } else
      printf("Nombre de noeuds du maillage support: "IFORMAT" \n",_rnnoe);

    /* Allocations memoires */
    if (_rnnoe > 0) {
      /* table des coordonnees (dimension * nombre de noeuds ) */
      _rcoo = (med_float*) calloc(_rnnoe*_rspacedim,sizeof(med_float));

      if ( MEDmeshNodeCoordinateRd(_fid, _rsupportmeshname, MED_NO_DT, MED_NO_IT,MED_FULL_INTERLACE, _rcoo) < 0 ) {
	MESSAGE("Erreur a la lecture des coordonnees des noeuds");
	return -1;
      } else {
	printf("Valeur de _rcoo : ");
	for (_j=0;_j<_rnnoe*_rspacedim;_j++)  printf("%4.2f ",_rcoo[_j]);
	printf("\n");
      }

      free(_rcoo);
    }

    /* Combien de segments à lire ? */
    _rnse2 = MEDmeshnEntity(_fid,_rsupportmeshname,MED_NO_DT,MED_NO_IT,
			    MED_CELL,MED_SEG2,MED_CONNECTIVITY,MED_NODAL,
			    &_chgt,&_trsf);

    if (_rnse2 < 0) {
      MESSAGE("Erreur a la lecture du nombre de segments.");
      return -1;
    } else
      printf("Nombre de segments du maillage support: "IFORMAT" \n",_rnse2);

    if (_rnse2 > 0) {
      /* table des connectivités (_rnse2 * nombre de noeuds ds un MED_SE2) */
      _rse2 = (med_int*) calloc(_rnse2*2,sizeof(med_int));

      if ( MEDmeshElementConnectivityRd(_fid, _rsupportmeshname, MED_NO_DT, MED_NO_IT,
				       MED_CELL,MED_SEG2,MED_NODAL,MED_FULL_INTERLACE, _rse2) < 0 ) {
	MESSAGE("Erreur a la lecture des connectivités des segments");
	return -1;
      } else {
	printf("Valeur de _rse2 : ");
	for (_j=0;_j<_rnse2*2;_j++)  printf("%d ",_rse2[_j]);
	printf("\n");
      }

      free(_rse2);
    }

  }

  return 0;
}