Exemplo n.º 1
0
int main (int argc, char **argv)


{
  med_err ret = 0;
  med_idt fid;
  char maa[MED_TAILLE_NOM+1];  
  med_int nmaa,i,mdim,npoly,j;
  char desc[MED_TAILLE_DESC+1];  
  med_int taille,nf,np;
  med_int taille2,nf2,np2;
  med_int *conn, *conn2, *indexf, *indexf2, *num, *fam;
  med_int *indexp, *indexp2;
  char *nom;
  char tmp[MED_TAILLE_PNOM+1];
  int ind1, ind2,k,nfaces,nnoeuds,l;
  med_maillage type;

  /* Ouverture du fichier test25.med en lecture seule */
  fid = MEDouvrir("test25.med",MED_LECTURE);
  if (fid < 0) {
    MESSAGE("Erreur a l'ouverture du fichier test25.med");
    return -1;
  }
  printf("Ouverture du fichier test25.med \n");

  /* Lecture du nombre de maillages */
  nmaa = MEDnMaa(fid);
  if (nmaa < 0) {
    MESSAGE("Erreur a lecture du nombre de maillage");
    return -1;
  }
  printf("Nombre de maillages = "IFORMAT"\n",nmaa);

  for (i=0;i<nmaa;i++)
    if (ret == 0) {
      
      /* Lecture des infos sur le maillage */
      if (MEDmaaInfo(fid,i+1,maa,&mdim,&type,desc) < 0) {
	MESSAGE("Erreur a lecture des infos sur le maillage");
	return -1;
      }
      printf("maillage "IFORMAT" de nom [%s] et de dimension : "IFORMAT" \n",i+1,maa,mdim);
      
      /* Combien de mailles polyedres en mode nodal */
      if ((npoly = MEDnEntMaa(fid,maa,MED_CONN,MED_MAILLE,MED_POLYEDRE,MED_NOD)) < 0) {
	MESSAGE("Erreur a lecture du nombre de maille MED_POLYEDRE en mode nodal");
	return -1;
      }
      printf("Nombre de mailles polyedres : "IFORMAT" \n",npoly); 
      
      /* Quelle taille pour le tableau des connectivites et d'indexation 
	 en mode MED_NOD */
      if (MEDpolyedreInfo(fid,maa,MED_NOD,&nf,&taille) < 0) {
	MESSAGE("Erreur a lecture des infos sur les polyedres");
	return -1;
      }
      printf("Taille a allouer pour la connectivite nodale des polyedres : "IFORMAT" \n",taille);
      printf("Taille a allouer pour le tableau d'indexation des faces : "IFORMAT" \n",nf); 
      
      /* Quelle taille pour le tableau des connectivites et d'indexation 
	 en mode MED_DESC */
      if (MEDpolyedreInfo(fid,maa,MED_DESC,&nf2,&taille2) < 0) {
	MESSAGE("Erreur a la lecture des infos sur les polyedres");
	return -1;
      }
      printf("Taille a allouer pour la connectivite descendante des polyedres : "IFORMAT" \n",taille2);
      printf("Taille a allouer pour le tableau d'indexation des types de faces : "IFORMAT" \n",nf2); 
      
      /* Allocation memoire : 
       *  - tableau indexp et indexp2 : npoly + 1
       *  - tableau indexf et indexf2 : nf et nf2
       *  - tableau des connectivites : consize
       *  - tableaux numeros et numeros de familles : npoly
       *  - tableau des noms : MED_TAILLE_PNOM*npoly + 1 
       */
      indexp   = (med_int *) malloc(sizeof(med_int)*(npoly+1));
      indexp2  = (med_int *) malloc(sizeof(med_int)*(npoly+1));
      indexf   = (med_int *) malloc(sizeof(med_int)*nf);
      indexf2  = (med_int *) malloc(sizeof(med_int)*nf2);
      conn     = (med_int *) malloc(sizeof(med_int)*taille);
      conn2    = (med_int *) malloc(sizeof(med_int)*taille2);
      num      = (med_int *) malloc(sizeof(med_int)*npoly);
      fam      = (med_int *) malloc(sizeof(med_int)*npoly);
      nom      = (char *) malloc(sizeof(char)*MED_TAILLE_PNOM*npoly+1);
      
      /* Lecture de la connectivite des mailles polyedres en mode nodal */
      if (MEDpolyedreConnLire(fid,maa,indexp,npoly+1,indexf,nf,conn,MED_NOD) < 0) {
	MESSAGE("Erreur a lecture de la connectivite nodale des polyedres");
	ret = -1;
      }
      printf("Lecture de la connectivite des mailles MED_POLYEDRE en mode nodal \n");
      
      /* Lecture de la connectivite des mailles polyedres en mode descendant */ 
      if (ret == 0) {
	if (MEDpolyedreConnLire(fid,maa,indexp2,npoly+1,indexf2,nf2,conn2,MED_DESC) < 0) {
	  MESSAGE("Erreur a lecture de la connectivite descendante des polyedres");
	  ret = -1;
	}
	printf("Lecture de la connectivite des mailles MED_POLYEDRE en mode descendant \n");
      }
      
      /* Lecture noms */
      if (ret == 0) {
	if (MEDnomLire(fid,maa,nom,npoly,MED_MAILLE,MED_POLYEDRE) < 0) {
	  MESSAGE("Erreur a lecture des noms des polyedres");
	  ret = -1;
	}
	printf("Lecture des noms des mailles MED_POLYEDRE \n");
      }
      
      /* Lecture des numeros */
      if (ret == 0) {
	if (MEDnumLire(fid,maa,num,npoly,MED_MAILLE,MED_POLYEDRE) < 0) {
	  MESSAGE("Erreur a lecture des numeros des polyedres");
	  ret = -1;
	}
	printf("Lecture des numeros des mailles MED_POLYEDRE \n");
      }
      
      /* Lecture des numeros de familles */
      if (ret == 0) {
	if (MEDfamLire(fid,maa,fam,npoly,MED_MAILLE,MED_POLYEDRE) < 0) {
	  MESSAGE("Erreur a lecture des numeros de famille des polyedres");
	  ret = -1;
	}
	printf("Lecture des numeros de familles des mailles MED_POLYEDRE \n");
      }
      
      if (ret == 0) {
	printf("Affichage des resultats \n");
	for (j=0;j<npoly;j++) {
	  printf(">> Maille MED_POLYEDRE "IFORMAT" : \n",j+1);
	  printf("---- Connectivite nodale      ----- : \n"); 
	  nfaces  = *(indexp+j+1) - *(indexp+j);
	  /* ind1 = indice dans "indexf" pour acceder aux numeros des faces */
	  ind1 = *(indexp+j) - 1;
	  for (k=0;k<nfaces;k++) {
	    /* ind2 = indice dans "conn" pour acceder au premier noeud de la face */
	    ind2 = *(indexf+ind1+k) - 1;
	    nnoeuds = *(indexf+ind1+k+1) - *(indexf+ind1+k);
	    printf("   - Face %d : [ ", k+1);
	    for (l=0;l<nnoeuds;l++)
	      printf(" "IFORMAT" ",*(conn+ind2+l));
	    printf(" ] \n"); 
	  }
	  printf("---- Connectivite descendante ----- : \n");
	  nfaces  = *(indexp2+j+1) - *(indexp2+j);
	  /* ind1 = indice dans "conn2" pour acceder aux numeros des faces */
	  ind1 = *(indexp2+j) - 1;
	  for (k=0;k<nfaces;k++) 
	    printf("   - Face %d de numero : "IFORMAT" et de type "IFORMAT" \n", k+1,*(conn2+ind1+k),*(indexf2+ind1+k));
	  strncpy(tmp,nom+j*MED_TAILLE_PNOM,MED_TAILLE_PNOM);
	  tmp[MED_TAILLE_PNOM] = '\0';
	  printf("---- Nom                      ----- : %s \n",tmp);
	  printf("---- Numero                   ----- : "IFORMAT" \n",*(num+j));
	  printf("---- Numero de famille        ----- : "IFORMAT" \n",*(fam+j));
	}
      }
      
      /* liberation de la memoire */
      free(indexp);
      free(indexp2);
      free(indexf);
      free(indexf2);
      free(conn);
      free(conn2);
      free(num);
      free(fam);
      free(nom);
    }
  
  /* Fermeture du fichier */
  if (MEDfermer(fid) < 0) {
    MESSAGE("Erreur a fermeture du fichier");
    return -1;
  }
  printf("Fermeture du fichier \n");
  
  return ret; 
}
Exemplo n.º 2
0
int main (int argc, char **argv)


{
  med_err ret = 0;
  med_idt fid;
  med_int nse2;
  med_int *se2_1;
  med_int *se2_2;
  char *nomse2;
  med_int *numse2;
  med_int *nufase2; 
  med_int ntr3;
  med_int *tr3;
  char *nomtr3;
  med_int *numtr3;
  med_int *nufatr3;
  char maa[MED_TAILLE_NOM+1] ="maa1";
  med_int mdim = 2;
  med_booleen inoele,inuele;
  med_int tse2,ttr3;
  med_int i;
  char str[MED_TAILLE_PNOM+1];
  med_int profil[2] = { 2, 3 };
  char desc[MED_TAILLE_DESC+1];
  med_maillage type;
  
  /* Ouverture du fichier en mode lecture seule */
  if ((fid = MEDouvrir("test6.med",MED_LECTURE)) < 0) {
    MESSAGE("Erreur a l'ouverture du fichier test6.med");
    return -1;
  }

  /* Lecture des informations sur le premier maillage */
  if (MEDmaaInfo(fid,1,maa,&mdim,&type,desc) < 0)  {
    MESSAGE("Erreur a la lecture des information sur le 1er maillage");
    return -1;
  } else
    printf("Maillage de nom : %s et de dimension %d \n",maa,mdim);

  /* Combien de triangles et de segments */
  if ((nse2 = MEDnEntMaa(fid,maa,MED_CONN,MED_ARETE,MED_SEG2,MED_DESC)) < 0)  {
    MESSAGE("Erreur a la lecture du nombre de faces MED_SEG2");
    return -1;
  }
  if ((ntr3 = MEDnEntMaa(fid,maa,MED_CONN,MED_MAILLE,MED_TRIA3,MED_DESC))<0) {
    MESSAGE("Erreur a la lecture du nombre de mailles MED_TRIA3");
    return -1;
  }
  printf("Nombre de MED_SEG2 : "IFORMAT" - nombre de MED_TRIA3 : "IFORMAT"\n",nse2,ntr3);

  /* Allocations memoire */ 
  tse2 = 2;
  se2_1  = (med_int*) calloc(tse2*nse2,sizeof(med_int));
  se2_2  = (med_int*) malloc(sizeof(med_int)*tse2*nse2);
  nomse2 = (char*) malloc(MED_TAILLE_PNOM*nse2+1);
  numse2 = (med_int*) malloc(sizeof(med_int)*nse2);
  nufase2 = (med_int*) malloc(sizeof(med_int)*nse2);

  ttr3 = 3;
  tr3 = (med_int*) malloc(sizeof(med_int)*ntr3*ttr3);
  nomtr3 = (char*) malloc(MED_TAILLE_PNOM*ntr3+1);
  numtr3 = (med_int*) malloc(sizeof(med_int)*ntr3);
  nufatr3 = (med_int*) malloc(sizeof(med_int)*ntr3);

  /* Lecture des connectivites des segments avec profil */
  if (MEDconnLire(fid,maa,mdim,se2_1,MED_FULL_INTERLACE,profil,2,
		  MED_ARETE,MED_SEG2,MED_DESC) < 0) {
    MESSAGE("Erreur a la lecture de la connectivite des segments");
    return -1;
  }

  /* Lecture de la connectivite des segments */
  if (MEDconnLire(fid,maa,mdim,se2_2,MED_FULL_INTERLACE,NULL,0,
		  MED_ARETE  ,MED_SEG2,MED_DESC) < 0) {
    MESSAGE("Erreur a la lecture de la connectivite des segments");
    return -1;
  }

  /* Lecture (optionnelle) des noms des segments */
  if (MEDnomLire(fid,maa,nomse2,nse2,MED_ARETE,MED_SEG2) < 0)
    inoele = MED_FAUX;
  else
    inoele = MED_VRAI;

  /* Lecture (optionnelle) des numeros des segments */
  if (MEDnumLire(fid,maa,numse2,nse2,MED_ARETE,MED_SEG2) < 0)
    inuele = MED_FAUX;
  else
    inuele = MED_VRAI;

  /* Lecture des numeros des familles des segments */
  if (MEDfamLire(fid,maa,nufase2,nse2,MED_ARETE,MED_SEG2) < 0) {
    MESSAGE("Erreur a la lecture des numéros de famille des segments");
    return -1;
  }

  /* Lecture de la connectivite des triangles */
  if (MEDconnLire(fid,maa,mdim,tr3,MED_NO_INTERLACE,NULL,0,MED_MAILLE,MED_TRIA3,
		     MED_DESC) < 0) {
    MESSAGE("Erreur a la lecture de la connectivite des triangles");
    return -1;
  }

  /* Lecture (optionnelle) des noms des triangles */
  if (MEDnomLire(fid,maa,nomtr3,ntr3,MED_MAILLE,MED_TRIA3) < 0)
    inoele = MED_FAUX;
  else
    inoele = MED_VRAI;

  /* Lecture (optionnelle) des numeros des triangles */
  if (MEDnumLire(fid,maa,numtr3,ntr3,MED_MAILLE,MED_TRIA3) < 0)
    inuele = MED_FAUX;
  else
    inuele = MED_VRAI;

  /* Lecture des numeros des familles des triangles */
  if (ret = MEDfamLire(fid,maa,nufatr3,ntr3,MED_MAILLE,MED_TRIA3) < 0) {
    MESSAGE("Erreur a la lecture des numeros de famille des segments");
    return -1;
  }

  /* Fermeture du fichier */
  if (MEDfermer(fid) < 0) {
    MESSAGE("Erreur a la fermeture du fichier");
    return -1;
  }

  /* Affichage */
  if (ret == 0) {
    printf("Connectivite des segments (1): \n");
    for (i=0;i<nse2*tse2;i++)
      printf(IFORMAT" ",*(se2_1+i));
    printf("\n");
    printf("Connectivite des segments (2): \n");
    for (i=0;i<nse2*tse2;i++)
      printf(IFORMAT" ",*(se2_2+i));
    if (inoele) {
      printf("\nNoms des segments :\n");
      for (i=0;i<nse2;i++) {
	strncpy(str,nomse2+i*MED_TAILLE_PNOM,MED_TAILLE_PNOM);
	str[MED_TAILLE_PNOM] = '\0';
	printf("%s ",str);
      }
    }
    if (inuele) {
      printf("\nNumeros des segments :\n");
      for (i=0;i<nse2;i++)
	printf(IFORMAT" ",*(numse2+i));
    }      
    printf("\nNumeros des familles des segments :\n");
    for (i=0;i<nse2;i++)
      printf(IFORMAT" ",*(nufase2+i));

    printf("\nConnectivite des triangles : \n");
    for (i=0;i<ntr3*ttr3;i++)
      printf(IFORMAT" ",*(tr3+i));
    if (inoele) {
      printf("\nNoms des triangles :\n");
      for (i=0;i<ntr3;i++) {
	strncpy(str,nomtr3+i*MED_TAILLE_PNOM,MED_TAILLE_PNOM);
	str[MED_TAILLE_PNOM] = '\0';
	printf("%s ",str);
      }
    }
    if (inuele) {
      printf("\nNumeros des triangles :\n");
      for (i=0;i<ntr3;i++)
	printf(IFORMAT" ",*(numtr3+i));
    }      
    printf("\nNumeros des familles des triangles :\n");
    for (i=0;i<ntr3;i++)
      printf(IFORMAT" ",*(nufatr3+i));
    
    printf("\n");
  }

  /* Nettoyage memoire */
  free(se2_1);
  free(se2_2);
  free(nomse2);
  free(numse2);
  free(nufase2);

  free(tr3);
  free(nomtr3);
  free(numtr3);
  free(nufatr3);

  return ret;
}