Ejemplo n.º 1
0
med_int
nmfdfipw(med_int *fid, char *fname, med_int *fnamelen,
	 med_int *numdt, med_int *numit, med_float *dt,
	 med_int *etype, med_int *gtype, 
	 med_int *stm, char *pname, med_int *pnamelen,  
	 char *lname, med_int *lnamelen, 
	 med_int *swm,med_int *cs, med_int *n, med_int *val)
#endif
{
  med_err _ret=0;
  char *_fn1,*_fn2,*_fn3;
  med_switch_mode _swm = (med_switch_mode) *swm;
  med_geometry_type _gtype = (med_geometry_type) *gtype;
  med_entity_type _etype = (med_entity_type) *etype;
  med_storage_mode _stm = (med_storage_mode) *stm;

  _fn1 = _MED2cstring((char *) fname, (int) *fnamelen);
  if (!_fn1)
    return(-1);

  _fn2 = _MED2cstring((char *) pname, (int) *pnamelen);
  if (!_fn2)
    return(-1);

  _fn3 = _MED2cstring((char *) lname, (int) *lnamelen);
  if (!_fn3)
    return(-1);

  _ret = (med_int)  MEDfieldValueWithProfileWr((const med_idt) *fid, 
					       _fn1, 
					       (med_int) *numdt,
					       (med_int) *numit, 
					       (med_float) *dt,
					       _etype, 
					       _gtype, 
					       _stm,
					       _fn2,
					       _fn3,
					       _swm,
					       (med_int) *cs,
					       (med_int) *n,
					       (unsigned char *) val);

  
  _MEDcstringFree(_fn1);
  _MEDcstringFree(_fn2);
  _MEDcstringFree(_fn3);
  
  return (_ret);
}
Ejemplo n.º 2
0
int main (int argc, char **argv) {
  med_idt fid;
  const char meshname[MED_NAME_SIZE+1] = "2D unstructured mesh";
  const char fieldname[MED_NAME_SIZE+1] = "TEMPERATURE_FIELD";
  const med_int ncomponent = 1;
  const char componentname[MED_SNAME_SIZE+1] = "TEMPERATURE";
  const char componentunit[MED_SNAME_SIZE+1] = "C";
  const med_int nquad4 = 4;
  const med_float quad4values_step1[4*4] = { 10000.,  20000.,  30000.,  40000.,
					     50000.,  60000.,  70000.,  80000.,
					     90000., 100000., 110000., 120000.,
					     130000., 140000., 150000., 160000. };
  const med_float quad4values_step2[4*4] = { 100.,  200.,  300.,  400.,
					     500.,  600.,  700.,  800.,
					     900., 1000., 1100., 1200.,
					     1300., 1400., 1500., 1600. };
  int ret=-1;
  
  /* file creation */
  fid = MEDfileOpen("UsesCase_MEDfield_13.med",MED_ACC_CREAT);
  if (fid < 0) {
    MESSAGE("ERROR : file creation ...");
    goto ERROR;
  }

  /* create mesh link */
  if (MEDlinkWr(fid,meshname,"./UsesCase_MEDmesh_1.med") < 0) {
    MESSAGE("ERROR : create mesh link ...");
    goto ERROR;
  }
  
  /* 
   * Temperature field  creation : 
   * - 1 component 
   * - component unit : celsius degree
   * - mesh is the 2D unstructured mesh of UsecaseMEDmesh_1.c use case.
   * - computation step unit in 'ms'
   */ 
  if (MEDfieldCr(fid, fieldname, MED_FLOAT64, 
		 ncomponent, componentname, componentunit,
		 "ms", meshname) < 0) {
    MESSAGE("ERROR : create field");
    goto ERROR;
  }
  
  /* two computation steps */
  /* write values at nodes elements : 4 MED_QUAD4 */

  /* STEP 1 : dt1 = 5.5, it = 1*/
  /* MED_QUAD4  : with no profile */ 
  if (MEDfieldValueWithProfileWr(fid, fieldname, 1, 1, 5.5, MED_NODE_ELEMENT, MED_QUAD4, 
				 MED_COMPACT_STMODE, MED_NO_PROFILE, MED_NO_LOCALIZATION,
				 MED_FULL_INTERLACE, MED_ALL_CONSTITUENT, 
				 nquad4, (unsigned char*) quad4values_step1) < 0) {
    MESSAGE("ERROR : write field values on MED_QUAD4 ");
    goto ERROR;
  }

  /* STEP 2 : dt2 = 8.9, it = 1*/
  /* MED_QUAD4 : with no profile */
  if (MEDfieldValueWithProfileWr(fid, fieldname, 2, 1, 8.9, MED_NODE_ELEMENT, MED_QUAD4, 
				 MED_COMPACT_STMODE, MED_NO_PROFILE, MED_NO_LOCALIZATION,
				 MED_FULL_INTERLACE, MED_ALL_CONSTITUENT,  
				 nquad4, (unsigned char*) quad4values_step2) < 0) {
    MESSAGE("ERROR : write field values on MED_QUAD4 ... ");
    goto ERROR;
  }

  ret=0;
 ERROR:
  
  /* close file */
  if (MEDfileClose(fid) < 0) {
    MESSAGE("ERROR : close file ...");             
    ret=-1; 
  } 
  
  return ret;
}
Ejemplo n.º 3
0
int main (int argc, char **argv)


{
  med_err ret=0;
  med_idt fid;

  /* Maillage support aux champs*/
  /* Ces maillages sont vides*/
  char maa1[MED_NAME_SIZE+1]= "maa1";
  char maa2[MED_NAME_SIZE+1]= "maa2";
  char * lien_maa2 = "./testfoo.med";
  char maa3[MED_NAME_SIZE+1]= "maa3";


  /* Caractéristiques du champ n° 1 sur TRIA6 */
  char nomcha1[MED_NAME_SIZE+1]  = "champ reel";
  char comp1[2*MED_SNAME_SIZE+1] = "comp1           comp2           ";
                                   /*12345678901234561234567890123456*/
  char unit1[2*MED_SNAME_SIZE+1] = "unit1           unit2           ";
  med_int ncomp1  = 2;
  /* Caractéristiques du model n° 1 de localisation des points de gauss pour le champ n° 1*/
  med_int ngauss1_1 = 6;
  char gauss1_1[MED_NAME_SIZE+1]  = "Model n1";
  med_float refcoo1[12] = { -1.0,1.0, -1.0,-1.0, 1.0,-1.0, -1.0,0.0, 0.0,-1.0, 0.0,0.0 };

  /* Constantes */

  med_float gscoo1_1[12] = { 2*_b-1, 1-4*_b, 2*_b-1, 2*_b-1, 1-4*_b,
                             2*_b-1, 1-4*_a, 2*_a-1, 2*_a-1, 1-4*_a, 2*_a-1, 2*_a-1 };
  med_float wg1_1[6] = { 4*_p2, 4*_p2, 4*_p2, 4*_p1, 4*_p1, 4*_p1 };

  med_int   nval1_1= 1*6; /*1 valeurs et 6 points de gauss par valeur */
  med_int   _nent1_1= 1; /*1 valeurs et 6 points de gauss par valeur */
  med_float valr1_1[1*6*2]  = {0.0,1.0, 2.0,3.0, 10.0,11.0, 12.0,13.0, 20.0,21.0, 22.0,23.0};  /* 2 composantes*/
  /* Caractéristiques du model n° 2 de localisation des points de gauss pour le champ n° 1*/
  med_int ngauss1_2 = 3;
  char gauss1_2[MED_NAME_SIZE+1]  = "Model n2";
  med_float gscoo1_2[6] = { -2.0/3,1.0/3, -2.0/3,-2.0/3, 1.0/3,-2.0/3  };
  med_float wg1_2[3] = { 2.0/3, 2.0/3, 2.0/3 };
  med_int   nval1_2= 2*3; /*2 valeurs et 3 points de gauss par valeur */
  med_int   _nent1_2= 2; /*2 valeurs et 3 points de gauss par valeur */
  med_float valr1_2[2*3*2]  = {0.0,1.0, 2.0,3.0, 10.0,11.0,   12.0,13.0, 20.0,21.0, 22.0,23.0};  /* 2 composantes*/
  med_float valr1_2p[2*3*2]  = {                              12.0,13.0, 20.0,21.0, 22.0,23.0};  /* 2 composantes*/
 /* Caractéristiques du model n° 3 sans points de gauss pour le champ n° 1*/
  med_int   nval1_3= 6; /*6 valeurs et pas de points de gauss */
  med_int   _nent1_3= 6; /*6 valeurs et pas de points de gauss */
  med_float valr1_3[2*3*2]  = {0.0,1.0, 2.0,3.0, 10.0,11.0, 12.0,13.0, 20.0,21.0, 22.0,23.0};  /* 2 composantes*/
  med_float valr1_3p[2*2*2] = {         2.0,3.0, 10.0,11.0                                 };  /* 2 composantes profil1 */

  /* Caractéristiques du champ n° 2 */
  char nomcha2[MED_NAME_SIZE+1]  = "champ entier";
  char comp2[3*MED_SNAME_SIZE+1] = "comp1           comp2           comp3           ";
                                   /*123456789012345612345678901234561234567890123456*/
  char unit2[3*MED_SNAME_SIZE+1] = "unit1           unit2           unit3           ";
  med_int ncomp2  = 3; 
  med_int nval2 = 5;   /*5 valeurs */
  med_int   valr2[5*3  ]  = {0,1,2, 10,11,12, 20,21,22, 30,31,32, 40,41,42};              /* 3 composantes*/
  med_int   valr2p[3*3  ] = {0,1,2,           20,21,22,           40,41,42};              /* 3 composantes*/

  /* Profils utilisés */
  char nomprofil1[MED_NAME_SIZE+1]  = "PROFIL(champ(1))";
  char nomprofil1b[MED_NAME_SIZE+1] = "PROFIL(champ(1b))";
  char nomprofil2[MED_NAME_SIZE+1]  = "PROFIL(champ2)";
  med_int profil1[2] = { 2, 3 };
  med_int profil2[3] = { 1, 3, 5 };


  /* Caractéristiques du champ n° 3 */
  char nomcha3[MED_NAME_SIZE+1]  = "champ entier 3";
  char comp3[3*MED_SNAME_SIZE+1] = "comp1           comp2           ";
                                   /*123456789012345612345678901234561234567890123456*/
  char unit3[3*MED_SNAME_SIZE+1] = "unit1           unit2           ";
  char dtunit[MED_SNAME_SIZE+1] = "s";
  med_int ncomp3  = 2;
  med_int nval3 = 5*4;     /*5 valeurs et 4 noeuds par element*/
  med_int _nent3 = 5;     /*5 valeurs et 4 noeuds par element*/
  med_int valr3[5*4*2]   = {0,1, 10,11, 20,21, 30,31,
                            40,41, 50,51, 60,61, 70,71,
                            80,81, 90,91, 100,101, 110,111,
                            120,121, 130,131, 140,141, 150,151,
                            160,161, 170,171, 180,181, 190,191};    /* 2 composantes*/
  med_int valr3p[3*4*2]  = {0,1, 10,11, 20,21, 30,31,
                            80,81, 90,91, 100,101, 110,111,
                            160,161, 170,171, 180,181, 190,191};    /* 2 composantes*/


  char nomcoo[3*MED_SNAME_SIZE+1] = "x               y               z               ";
  char unicoo[3*MED_SNAME_SIZE+1] = "cm              cm              cm              ";

  char _maa[MED_NAME_SIZE+1]="";
  char _desc[MED_COMMENT_SIZE+1]="";
  char _dtunit[MED_SNAME_SIZE+1]="";
  char _nomcoo[3*MED_SNAME_SIZE+1]="";
  char _unicoo[3*MED_SNAME_SIZE+1]="";
  med_int _nstep=0;
  med_axis_type _rep;
  med_mesh_type _type;
  med_sorting_type _sort;
  char __dtunit [MED_SNAME_SIZE+1]="";
  med_int _mdim=0,_sdim=0;

  med_int ncha=0;
  med_access_mode _accessmode;
  
  /* Il n'est pas necessaire de  pré-allouer la mémoire.
   med-fichier s'occupe d'allouer la mémoire au fil de l'utilsation de l'API.*/
  /* Attention la structure doit être initialisée à MED_MEMFILE_INIT avant toute première utilisation.*/
  med_memfile memfile[1]    = MED_MEMFILE_INIT;

  /* On décide de pré-allouer suffisement de mémoire : 10MB */
  /* med-fichier utilisera l'espace réservé sans réallocation.*/
  /* memfile[0].app_image_size = 10*1024*1024; */
  /* memfile[0].app_image_ptr      = calloc(memfile[0].app_image_size,sizeof(char)); */

  /* On décide de pré-allouer insuffisement de mémoire : 1KB */
  /* med-fichier utilisera l'espace réservé puis effectuera une réallocation.*/
  /* memfile[0].app_image_size = 1024; */
  /* memfile[0].app_image_ptr  = calloc(memfile[0].app_image_size,sizeof(char)); */

  AFF_MEMFILE;

  /* Ouverture du fichier */
  /* mode RDWR uniquement si le fichier test10.med a préalablement été généré par test10
     ou par le sync de test10_mem (en CREATE). 
     Si test10.med n'existe pas et demande le mode RDWR 
         -> erreur car nous n'avons pas initialisé une image mémoire valide ! 
  */
  _accessmode = MED_ACC_CREAT;
  if ((fid = MEDmemFileOpen("test10.med",memfile,MED_TRUE,_accessmode) ) < 0){
    MESSAGE("Erreur à l'ouverture du fichier : ");
    return -1;
  }
  /* Ouverture du fichier */
  /* Si l'on ne veut pas créer de fichier sur disque, sync=MED_FALSE */
  /* if ((fid = MEDmemFileOpen("test10.med",memfile,MED_FALSE,MED_ACC_CREAT) ) < 0){ */
  /*   MESSAGE("Erreur à l'ouverture du fichier : "); */
  /*   return -1; */
  /* } */

  AFF_MEMFILE;

  /* combien de champs dans le fichier (pour tester le fichier mémoire)*/
  if ((ncha = MEDnField(fid)) < 0) {
    MESSAGE("Impossible de lire le nombre de champs : ");ISCRUTE(ncha);
  }
  printf("Nombre de champs : "IFORMAT" \n",ncha);
  if (ncha == 3 ) { /*Un quatrième champ est crée seulement si un fichier test10.med existait et mode RDWR + sync */
  /* creation du champ réel n° 1 */
    if ( MEDfieldCr(fid,"Ajout Complémentaire",MED_FLOAT64,ncomp1,comp1,unit1,dtunit,maa1 ) < 0) {
      MESSAGE("Erreur à la création du champ : ");SSCRUTE("Ajout Complémentaire");
      ret = -1;
    };
  }
  /* creation de maa1 de dimension 3*/
  if (MEDmeshCr( fid, maa1, 3, 3, MED_UNSTRUCTURED_MESH,
		 "Maillage vide","s", MED_SORT_DTIT,
		 MED_CARTESIAN, nomcoo, unicoo) < 0) {
    MESSAGE("Erreur a la creation du maillage : "); SSCRUTE(maa1);
    ret = -1;
  }


  /* creation de maa3 de dimension 3*/
  if (MEDmeshCr( fid, maa3, 3, 3, MED_UNSTRUCTURED_MESH,
		 "Maillage vide","s", MED_SORT_DTIT,
		 MED_CARTESIAN, nomcoo, unicoo) < 0) {
    MESSAGE("Erreur a la creation du maillage : "); SSCRUTE(maa3);
    ret = -1;
  }


  /* creation du champ réel n° 1 */
  if ( MEDfieldCr(fid,nomcha1,MED_FLOAT64,ncomp1,comp1,unit1,dtunit,maa1 ) < 0) {
    MESSAGE("Erreur à la création du champ : ");SSCRUTE(nomcha1);
    ret = -1;
  };

  /* creation du champ entier n° 2 */
  if ( MEDfieldCr(fid,nomcha2,MED_INT32,ncomp2,comp2,unit2,dtunit,maa2 ) < 0) {
    MESSAGE("Erreur à la création du champ : ");SSCRUTE(nomcha2);
    ret = -1;
  };

  /* creation du lien au fichier distant contenant maa2 */
  if (MEDlinkWr(fid,maa2,lien_maa2) < 0) {
    MESSAGE("Erreur à la création du lien : ");SSCRUTE(lien_maa2);
    ret = -1;
  };

  /* creation de la localisation des points de Gauss modèle n° 1 */
  if (MEDlocalizationWr(fid, gauss1_1, MED_TRIA6, MED_TRIA6/100, refcoo1, USER_INTERLACE,
			ngauss1_1, gscoo1_1, wg1_1,
			MED_NO_INTERPOLATION, MED_NO_MESH_SUPPORT ) < 0) {
    MESSAGE("Erreur à la création du modèle n° 1 : ");SSCRUTE(gauss1_1);
    ret = -1;
  };

   /* creation de la localisation des points de Gauss modèle n° 2 */
  if (MEDlocalizationWr(fid, gauss1_2, MED_TRIA6, MED_TRIA6/100, refcoo1, USER_INTERLACE,
			ngauss1_2, gscoo1_2, wg1_2,
			MED_NO_INTERPOLATION, MED_NO_MESH_SUPPORT) < 0) {
    MESSAGE("Erreur à la création du modèle n° 1 : ");SSCRUTE(gauss1_2);
    ret = -1;
  };
 
  /* ecriture du champ n° 1*/
  /* enregistre uniquement les composantes n° 2 de valr1_1, et n'utilise ni pas de temps ni n° d'ordre*/

  if ( MEDfieldValueWithProfileWr(fid, nomcha1,MED_NO_DT,MED_NO_IT,0.0,MED_CELL,MED_TRIA6,USER_MODE,MED_ALLENTITIES_PROFILE,
		       gauss1_1,USER_INTERLACE, 2, _nent1_1, (unsigned char*)valr1_1 ) < 0) {
    MESSAGE("Erreur à l'écriture du champ : ");
    SSCRUTE(nomcha1);ISCRUTE_int(MED_NO_DT);ISCRUTE_int(MED_NO_IT);SSCRUTE(MED_NO_PROFILE);
    SSCRUTE(maa1);
    ret = -1;
  };

  

  /* enregistre uniquement les composantes n° 1 de valr1_1, et n'utilise ni pas de temps ni n° d'ordre */

  if ( MEDfieldValueWithProfileWr(fid, nomcha1,MED_NO_DT,MED_NO_IT,0.0,MED_CELL,MED_TRIA6,USER_MODE,MED_ALLENTITIES_PROFILE,
		       gauss1_1,USER_INTERLACE, 1, _nent1_1, (unsigned char*)valr1_1 ) < 0) {
    MESSAGE("Erreur à l'écriture du champ : ");
    SSCRUTE(nomcha1);ISCRUTE_int(MED_NO_DT);ISCRUTE_int(MED_NO_IT);SSCRUTE(MED_NO_PROFILE);
    SSCRUTE(maa1);
    ret = -1;
  };

  /* enregistre uniquement les composantes n° 1 de valr1_2, au pas de temps n° 1(5.5), n'utilise pas de n° d'ordre*/
  /* ce champ repose sur le maillage maa2 qui est distant */

  if ( MEDfieldValueWithProfileWr(fid, nomcha1,1,MED_NO_IT,5.5,MED_CELL,MED_TRIA6,USER_MODE,MED_ALLENTITIES_PROFILE,
		       gauss1_2,USER_INTERLACE, 1, _nent1_2, (unsigned char*)valr1_2 ) < 0) {
    MESSAGE("Erreur à l'écriture du champ : ");
    SSCRUTE(nomcha1);ISCRUTE_int(MED_NO_IT);SSCRUTE(MED_NO_PROFILE);
    SSCRUTE(maa1);
    ret = -1;
  };

  /* Le test initial utilisait un deuxième maillage epour un même champ et une même séquence de calcul,
     ceci n'existe plus en 3.0*/
  /* enregistre uniquement les composantes n° 2 de valr1_2, au pas de temps n° 1(5.5), n'utilise pas de n° d'ordre*/
  /* ce champ repose sur le maillage maa1 qui est local */

  if ( MEDfieldValueWithProfileWr(fid, nomcha1,1,1,5.5,MED_CELL,MED_TRIA6,USER_MODE,MED_ALLENTITIES_PROFILE,
		       gauss1_1,USER_INTERLACE, 2, _nent1_1, (unsigned char*)valr1_1 ) < 0) {
    MESSAGE("Erreur à l'écriture du champ : ");
    SSCRUTE(nomcha1);ISCRUTE_int(MED_NO_DT);ISCRUTE_int(MED_NO_IT);SSCRUTE(MED_NO_PROFILE);
    SSCRUTE(maa1);
    ret = -1;
  };


    /* enregistre uniquement les composantes n° 1 de valr1_1, au pas de temps n° 1(5.5), et n° d'itération n° 2*/
    /* ce champ repose sur le maillage maa3 qui est local */

  if ( MEDfieldValueWithProfileWr(fid, nomcha1,1,2,5.5,MED_CELL,MED_TRIA6,USER_MODE,MED_ALLENTITIES_PROFILE,
		       gauss1_2,USER_INTERLACE, 1, _nent1_2, (unsigned char*)valr1_2 ) < 0) {
    MESSAGE("Erreur à l'écriture du champ : ");
    SSCRUTE(nomcha1);SSCRUTE(MED_NO_PROFILE);
    SSCRUTE(maa1);
    ret = -1;
  };

  /* Creation d'un profil (selection  du deuxieme élément de valr1_1) */
  /* On n'utilise que la première valeur (2) du profil */
  if ( MEDprofileWr(fid,nomprofil1,1,profil1) < 0) {
    MESSAGE("Erreur à l'écriture du profil : ");
    SSCRUTE(nomprofil1);
    ret = -1;
  };


  if ( MEDprofileWr(fid,nomprofil1b,1,profil1) < 0) {
    MESSAGE("Erreur à l'écriture du profil : ");
    SSCRUTE(nomprofil1b);
    ret = -1;
  };




  /* enregistre toutes les composantes du deuxième élément de valr1_1 (premier élément en stockage compact de valr1p),
     au pas de temps n° 2(5.6), et n° d'itération n° 2*/
  if ( MEDfieldValueWithProfileWr(fid, nomcha1,2,2,5.6,MED_CELL,MED_TRIA6,USER_MODE,nomprofil1,
		       MED_NO_LOCALIZATION,USER_INTERLACE, MED_ALL_CONSTITUENT, nval1_3, (unsigned char*)valr1_3p ) < 0) {
    MESSAGE("Erreur à l'écriture du champ : ");
    SSCRUTE(nomcha1);SSCRUTE(MED_NO_PROFILE);
    SSCRUTE(maa1);
    ret = -1;
  };

  /* enregistre toutes les composantes du deuxième élément de valr1_1 (premier élément en stockage compact de valr1p),
     au pas de temps n° 2(5.6), et n° d'itération n° 2 */

  if ( MEDfieldValueWithProfileWr(fid, nomcha1,2,2,5.6,MED_CELL,MED_TRIA6,USER_MODE,nomprofil1b,
		       gauss1_2,USER_INTERLACE, MED_ALL_CONSTITUENT, _nent1_2, (unsigned char*)valr1_2p ) < 0) {
    MESSAGE("Erreur à l'écriture du champ : ");
    SSCRUTE(nomcha1);SSCRUTE(MED_NO_PROFILE);
    SSCRUTE(maa1);
    ret = -1;
  };


  if ( MEDfieldValueWithProfileWr(fid, nomcha1,3,2,5.7,MED_CELL,MED_TRIA6,USER_MODE,nomprofil1,
		       MED_NO_LOCALIZATION,USER_INTERLACE, 2, _nent1_3, (unsigned char*)valr1_3p ) < 0) {
    MESSAGE("Erreur à l'écriture du champ : ");
    SSCRUTE(nomcha1);SSCRUTE(MED_NO_PROFILE);
    SSCRUTE(maa1);
    ret = -1;
  };


  /* Ecriture du champ n° 2 */
    

  if ( MEDfieldValueWr(fid, nomcha2,MED_NO_DT,MED_NO_IT,0,
				  MED_DESCENDING_EDGE,MED_SEG2,
				  USER_INTERLACE, 1, nval2, (unsigned char*)valr2 ) < 0) {
    MESSAGE("Erreur à l'écriture du champ : ");
    SSCRUTE(nomcha1);ISCRUTE_int(MED_NO_DT);ISCRUTE_int(MED_NO_IT);SSCRUTE(MED_NO_PROFILE);
    SSCRUTE(maa1);
    ret = -1;
  };


  if ( MEDfieldValueWr(fid, nomcha2,MED_NO_DT,MED_NO_IT,0,MED_NODE,MED_NONE,
				  USER_INTERLACE, 2, nval2, (unsigned char*)valr2 ) < 0) {
    MESSAGE("Erreur à l'écriture du champ : ");
    SSCRUTE(nomcha1);ISCRUTE_int(MED_NO_DT);ISCRUTE_int(MED_NO_IT);SSCRUTE(MED_NO_PROFILE);
    SSCRUTE(maa1);
    ret = -1;
  };


  if ( MEDfieldValueWr(fid, nomcha2,MED_NO_DT,MED_NO_IT,0,MED_DESCENDING_FACE,MED_TRIA6,
				  USER_INTERLACE, 3, nval2, (unsigned char*)valr2 ) < 0) {
    MESSAGE("Erreur à l'écriture du champ : ");
    SSCRUTE(nomcha1);ISCRUTE_int(MED_NO_DT);ISCRUTE_int(MED_NO_IT);SSCRUTE(MED_NO_PROFILE);
    SSCRUTE(maa1);
    ret = -1;
  };

  /* Creation d'un profil (selection  des éléments 1,3,5 de valr2) */
  /* On utilise les trois valeurs du profil */
  if ( MEDprofileWr(fid,nomprofil2,3,profil2) < 0) {
    MESSAGE("Erreur à l'écriture du profil : ");
    SSCRUTE(nomprofil2);
    ret = -1;
  };


  if ( MEDfieldValueWithProfileWr(fid, nomcha2,MED_NO_DT,MED_NO_IT,0,MED_CELL,MED_TRIA6,USER_MODE,nomprofil2,
		       MED_NO_LOCALIZATION,USER_INTERLACE, 3, nval2, (unsigned char*)valr2p ) < 0) {
    MESSAGE("Erreur à l'écriture du champ : ");
    SSCRUTE(nomcha1);ISCRUTE_int(MED_NO_DT);ISCRUTE_int(MED_NO_IT);SSCRUTE(MED_NO_PROFILE);
    SSCRUTE(maa1);
    ret = -1;
  };

  /* creation du champ entier n° 3 */
  if ( MEDfieldCr(fid,nomcha3,MED_INT32,ncomp3,comp3,unit3,dtunit,maa1) < 0) {
    MESSAGE("Erreur à la création du champ : ");SSCRUTE(nomcha3);
    ret = -1;
  };
  
  /* Ecriture du champ n° 3 */

  if ( MEDfieldValueWr(fid, nomcha3,MED_NO_DT,MED_NO_IT,0,MED_CELL,MED_QUAD4,
				  USER_INTERLACE, 1, nval3, (unsigned char*)valr3 ) < 0) {
    MESSAGE("Erreur à l'écriture du champ : ");
    SSCRUTE(nomcha1);ISCRUTE_int(MED_NO_DT);ISCRUTE_int(MED_NO_IT);SSCRUTE(MED_NO_PROFILE);
    SSCRUTE(maa1);
    ret = -1;
  };

  if ( MEDfieldValueWr(fid, nomcha3,MED_NO_DT,MED_NO_IT,0,MED_NODE_ELEMENT,MED_QUAD4,
				  USER_INTERLACE, MED_ALL_CONSTITUENT, _nent3, (unsigned char*)valr3 ) < 0) {
    MESSAGE("Erreur à l'écriture du champ : ");
    SSCRUTE(nomcha1);ISCRUTE_int(MED_NO_DT);ISCRUTE_int(MED_NO_IT);SSCRUTE(MED_NO_PROFILE);
    SSCRUTE(maa1);
    ret = -1;
  };

  if ( MEDfieldValueWithProfileWr(fid, nomcha3,MED_NO_DT,MED_NO_IT,0,MED_NODE_ELEMENT,MED_QUAD4,USER_MODE,nomprofil2,
		       MED_NO_LOCALIZATION,USER_INTERLACE, MED_ALL_CONSTITUENT, _nent3, (unsigned char*)valr3p ) < 0) {
    MESSAGE("Erreur à l'écriture du champ : ");
    SSCRUTE(nomcha1);ISCRUTE_int(MED_NO_DT);ISCRUTE_int(MED_NO_IT);SSCRUTE(MED_NO_PROFILE);
    SSCRUTE(maa1);
    ret = -1;
  };

AFF_MEMFILE;

  /* fermeture du fichier */
  if ( MEDfileClose(fid) < 0 ) {
    ret=-1;
    MESSAGE("Erreur à la fermeture du fichier ");
  }
AFF_MEMFILE;

  /* H5Fflush(fid, H5F_SCOPE_GLOBAL ); */
  _accessmode = MED_ACC_RDWR;
  /*ATTENTION : Il faut au moins une écriture/création dans le fichier pour que le sync se fasse en mode RW*/
  if ((fid = MEDmemFileOpen("test10_mem.med",memfile,MED_TRUE,_accessmode) ) < 0){
    MESSAGE("Erreur à l'ouverture du fichier : ");
    return -1;
  }

AFF_MEMFILE;

  /* combien de champs dans le fichier (pour tester le fichier mémoire)*/
  if ((ncha = MEDnField(fid)) < 0) {
    MESSAGE("Impossible de lire le nombre de champs : ");ISCRUTE(ncha);
  }
  printf("Nombre de champs : "IFORMAT" \n",ncha);

  /*Il faut une écriture pour que le sync se fasse en mode RW*/
  if ( (ncha == 3) || (_accessmode == MED_ACC_RDWR) )
  /* creation du champ complémentaire  n° 2 */
    if ( MEDfieldCr(fid,"Ajout Complémentaire 2",MED_FLOAT64,ncomp1,comp1,unit1,dtunit,maa1 ) < 0) {
      MESSAGE("Erreur à la création du champ : Complémentaire 2");
      ret = -1;
    };

AFF_MEMFILE;

 /* Lecture des infos concernant le premier maillage */
  if ( MEDmeshInfo( fid, 1,  _maa, &_sdim, &_mdim, &_type, _desc, __dtunit, &_sort,
  		    &_nstep,  &_rep, _nomcoo,_unicoo) < 0 ) {
    MESSAGE("Erreur a la lecture des informations sur le maillage : ");SSCRUTE(_maa);
    return -1;
  } else {
    printf("Maillage de nom : |%s| , de dimension : "IFORMAT" , et de type %d\n",_maa,_mdim,_type);
    printf("\t -Dimension de l'espace : "IFORMAT"\n",_sdim);
    printf("\t -Description du maillage : %s\n",_desc);
    printf("\t -Noms des axes : |%s|\n",_nomcoo);
    printf("\t -Unités des axes : |%s|\n",_unicoo);
    printf("\t -Type de repère : %d\n",_rep);
    printf("\t -Nombre d'étapes de calcul : "IFORMAT"\n",_nstep);
    printf("\t -Unité des dates : |%s|\n",__dtunit);
  }

  /* combien de champs dans le fichier (pour tester le fichier mémoire)*/
  if ((ncha = MEDnField(fid)) < 0) {
    MESSAGE("Impossible de lire le nombre de champs : ");ISCRUTE(ncha);
  }
  printf("Nombre de champs : "IFORMAT" \n",ncha);

  if ( MEDfileClose(fid) < 0 )  {
    ret=-1;
    MESSAGE("Erreur à la fermeture du fichier ");
  }

AFF_MEMFILE;

  free(memfile[0].app_image_ptr);
  memfile->app_image_size =0;
  return ret;
}
Ejemplo n.º 4
0
med_err MAJ_236_300_fieldOnEntity(med_idt fid, const char * const nomcha, const char * const meshname,
				  med_field_type typcha, med_int ncomp, med_entity_type entite, med_int ncstp,
				  char * const _pathi, char * const _pathf) {

  med_err ret=-1;
  int i,j,k,l,m,n,nb_geo=0;
  med_int nbpdtnor=0,pflsize,*pflval,ngauss=0,ngroup,*vale=NULL,nval;
  med_int numdt=0,numo=0,_nprofile;
  med_int meshnumdt=0,meshnumit=0;
  med_float *valr=NULL,dt=0.0;
  unsigned char * _val=NULL;
  char pflname [MED_NAME_SIZE+1]="";
  char locname [MED_NAME_SIZE+1]="";
  char _meshname [MED_NAME_SIZE+1]="";
  char _fieldname [MED_NAME_SIZE+1]="";
  char _pathtmp[MED_FIELD_GRP_SIZE+3]="/CHA__/";
  char _pathfb[MED_FIELD_GRP_SIZE+2+MED_NAME_SIZE+1]="/CHA_/";
  char * lien = NULL;
  char dt_unit [MED_SNAME_SIZE+1]="unknown";
  med_bool localmesh;
  med_int nmesh=0;
  hid_t   _ocp_plist_id ;
  hid_t   _lcp_plist_id ;
  int     _isavlen=0;
  int     _fsavlen=0;
  int     _fieldnamelen=0;
  htri_t  _groupexist;

  char            _tmpmeshname[MED_NAME_SIZE+1]="";
  med_bool        _tmplocal=MED_FALSE;
  med_field_type  _tmptypcha;
  char           *_tmpcomp=NULL,*_tmpunit=NULL,_tmpdtunit[MED_SNAME_SIZE+1]="";
  med_int         _tmpncstp=0;

  med_geometry_type * type_geo;

  const char * const * AFF;
  const char * const * AFF_ENT=MED_GET_ENTITY_TYPENAME+1;
  switch (entite) {
  case MED_NODE :
    type_geo = MED_GET_NODE_GEOMETRY_TYPE;
    nb_geo   = MED_N_NODE_FIXED_GEO;
    AFF      = MED_GET_NODE_GEOMETRY_TYPENAME;
    break;
  case  MED_CELL :
  case  MED_NODE_ELEMENT :
    type_geo = MED_GET_CELL_GEOMETRY_TYPE;
    nb_geo   = MED_N_CELL_FIXED_GEO;
    AFF      = MED_GET_CELL_GEOMETRY_TYPENAME;
    break;
  case  MED_DESCENDING_FACE :
    type_geo = MED_GET_FACE_GEOMETRY_TYPE;
    nb_geo   = MED_N_FACE_FIXED_GEO;
    AFF      = MED_GET_FACE_GEOMETRY_TYPENAME;
    break;
  case  MED_DESCENDING_EDGE :
    type_geo = MED_GET_EDGE_GEOMETRY_TYPE;
    nb_geo   = MED_N_EDGE_FIXED_GEO;
    AFF      = MED_GET_EDGE_GEOMETRY_TYPENAME;
    break;
  }

  strcpy(_fieldname,nomcha);
  _isavlen=strlen(_pathi);
  _fsavlen=strlen(_pathf);
  _fieldnamelen=strlen(_fieldname);

  _ocp_plist_id = H5Pcreate( H5P_OBJECT_COPY );
  _lcp_plist_id = H5Pcreate( H5P_LINK_CREATE );

  /* Reconstruit les objets pointés par un lien symbolique */
  H5Pset_copy_object( _ocp_plist_id, H5O_COPY_EXPAND_SOFT_LINK_FLAG );
  /*Ne crée pas les liens intermédiaires */
  H5Pset_create_intermediate_group(_lcp_plist_id, -1);
  /* Ne recopie pas en profondeur*/
  H5Pset_copy_object( _ocp_plist_id, H5O_COPY_SHALLOW_HIERARCHY_FLAG);

/*   ISCRUTE(nbpdtnor); */
/*   SSCRUTE(_fieldname); */

  for (k=1;k<=nb_geo;k++) {

    /* Combien de (PDT,NOR) a lire */
    nbpdtnor = ncstp;
    if (nbpdtnor < 1 ) continue;

    for (j=0;j<nbpdtnor;j++) {

      if ( MEDfield23ComputingStepMeshInfo(fid,nomcha,j+1, &numdt, &numo, &dt,
					   &nmesh, _meshname,&localmesh, &meshnumdt, &meshnumit ) <0) {
	MESSAGE("Erreur a la demande d'information sur (pdt,nor) : ");
	ISCRUTE(numdt); ISCRUTE(numo);ISCRUTE(nmesh);SSCRUTE(_meshname);ISCRUTE_int(localmesh);
	ISCRUTE(meshnumdt);ISCRUTE(meshnumit);
	ret = -1; continue;
      }
/* SSCRUTE(_meshname);SSCRUTE(AFF_ENT[(int)entite]);SSCRUTE(AFF[k]);ISCRUTE(nmesh); */
      for (i=0;i< nmesh;++i) {

	if ( (_nprofile = MEDfield23nProfile(fid,nomcha,numdt,numo,entite,type_geo[k],i+1,_meshname,
						pflname,locname   ) ) < 0 ) {
	  MESSAGE("Erreur a la demande du nombre de profils referencés par le champ : ");
	  SSCRUTE(nomcha); ISCRUTE(numdt); ISCRUTE(numo);SSCRUTE(_meshname);
	  ISCRUTE_int(entite);ISCRUTE_int(type_geo[k]);SSCRUTE(pflname);SSCRUTE(locname);
	  SSCRUTE(AFF_ENT[(int)entite]);SSCRUTE(AFF[k]);
	  ret = -1; continue;
	};

/* ISCRUTE(_nprofile); */
/* SSCRUTE(_meshname); */
/* SSCRUTE(meshname); */
/* SSCRUTE(pflname); */

	for (l=0;l<_nprofile;l++) {

	  /* Si le maillage traité dans ce profil n'est pas celui par défaut :
	     - Vérifie que le nom du champ pour ce maillage secondaire existe.
	     - Initialise _fieldname au nom du champ qu'il faut traiter par la suite
	  */
	  if (strcmp(_meshname,meshname)) {

	    /* Lecture du type du champ, des noms des composantes et du nom de l'unité*/
	    _tmpcomp = (char*) malloc(ncomp*MED_SNAME_SIZE+1);
	    EXIT_IF(_tmpcomp == NULL,NULL,NULL);
	    _tmpunit = (char*) malloc(ncomp*MED_SNAME_SIZE+1);
	    EXIT_IF(_tmpunit == NULL,NULL,NULL);

	    /* Evite de passer les paramètres _tmpcomp,_tmpunit,_tmpdtunit,&_tmpncstp dans la fct MAJ_236...*/
	    ret = MEDfieldInfoByName(fid,nomcha,
				     _tmpmeshname,&_tmplocal,&_tmptypcha,_tmpcomp,_tmpunit,_tmpdtunit,&_tmpncstp);
	    MED_ERR_EXIT_IF(ret,MED_ERR_ACCESS,MED_ERR_FIELD,nomcha);
	    /*Ne pose pas de problème de taille de chaîne car MED_NAME_SIZE a doublé en 3.0 */
	    _fieldname[_fieldnamelen]='_';strcpy(&_fieldname[_fieldnamelen+1],_meshname);

	    MAJ_version_num(fid,3,0,8);
	    /*Sauvegarde du champ initial dans _pathtmp*/
	    EXIT_IF( H5Gmove(fid, _pathi, _pathtmp  ) < 0,"Switch to ",_pathtmp);
	    EXIT_IF( H5Gmove(fid, _pathf, _pathi  ) < 0  ,"Switch to ",_pathi);
	    MED_ERR_EXIT_IF( MEDfieldCr(fid,_fieldname,
					_tmptypcha,ncomp,_tmpcomp,_tmpunit,_tmpdtunit,_meshname ) < 0,
			     MED_ERR_CREATE,MED_ERR_FIELD,_fieldname);

	    /*Rétablissement des chemins d'accès au champ initial et au champ cible temporaire*/
	    EXIT_IF( H5Gmove(fid, _pathi  , _pathf  ) < 0,"Switch to ",_pathf);
	    EXIT_IF( H5Gmove(fid, _pathtmp, _pathi  ) < 0,"Switch to ",_pathi);

	    MAJ_version_num(fid,2,3,6);

	    free(_tmpcomp);
	    free(_tmpunit);
	  } else {
	    strcpy(_fieldname,nomcha);
	  }
/* SSCRUTE(_fieldname); */

	  if ( (nval = MEDfield23nValueWithProfile(fid, nomcha, numdt, numo,  entite, type_geo[k],_meshname,
						   l+1,  MED_COMPACT_PFLMODE, pflname,&pflsize,
						   locname, &ngauss) ) < 0 ) {
	    MESSAGE("Erreur a la lecture du nombre de valeurs du champ : ");
	    SSCRUTE(nomcha);ISCRUTE(numdt);ISCRUTE(numo);SSCRUTE(_meshname);
	    ISCRUTE_int(entite);ISCRUTE_int(type_geo[k]);
	    ret = -1; continue;
	  };
/* ISCRUTE(nval); */

/* 	  printf("\n  +Pas de Temps n."IFORMAT" (%f) [%s], n. d'ordre "IFORMAT", avec "IFORMAT" valeur(s) par entité.\n",numdt,dt,dt_unit,numo,ngauss); */
/* 	  printf("\t- Il y a "IFORMAT" entités qui portent des valeurs en mode %i. Chaque entite %s\ */
/*  de type geometrique %s associes au profile |%s| a "IFORMAT" valeurs associées \n", */
/* 		 nval,MED_COMPACT_PFLMODE,AFF_ENT[(int)entite],AFF[k],pflname,ngauss); */
/* 	  printf("\t- Le maillage associé est |%s|\n",_meshname); */

	  /*Lecture des valeurs du champ */
	  if (typcha == MED_FLOAT64) {

	    valr = (med_float*) calloc(ncomp*nval*ngauss,sizeof(med_float));
	    EXIT_IF(valr == NULL,NULL,NULL);

	    if (MEDfield23ValueWithProfileRd(fid, nomcha, numdt,numo, entite,type_geo[k],_meshname,
					     MED_COMPACT_PFLMODE, pflname, MED_NO_INTERLACE,MED_ALL_CONSTITUENT,
					     (unsigned char*) valr) < 0 ) {
	      MESSAGE("Erreur a la lecture des valeurs du champ : ");
	      SSCRUTE(nomcha);ISCRUTE_int(entite);ISCRUTE_int(type_geo[k]);
	      ISCRUTE(numdt);ISCRUTE(numo);
	      ret = -1;
	    }
	    _val = (unsigned char*) valr;
	  } else {

	    vale = (med_int*) calloc(ncomp*nval*ngauss,sizeof(med_int));
	    EXIT_IF(vale == NULL,NULL,NULL);

	    if (MEDfield23ValueWithProfileRd(fid, nomcha, numdt,numo, entite,type_geo[k],_meshname,
					     MED_COMPACT_PFLMODE, pflname, MED_NO_INTERLACE,MED_ALL_CONSTITUENT,
					     (unsigned char*) vale) < 0 ) {
	      MESSAGE("Erreur a la lecture des valeurs du champ : ");
	      SSCRUTE(nomcha);ISCRUTE_int(entite);ISCRUTE_int(type_geo[k]);
	      ISCRUTE(numdt);ISCRUTE(numo);
	      ret = -1;
	    }
	    _val = (unsigned char*) vale;
	  }

	  /* Ecriture du champ destination */
	  MAJ_version_num(fid,3,0,8);
	  /*Sauvegarde du champ initial dans _pathtmp*/
	  EXIT_IF( H5Gmove(fid, _pathi, _pathtmp  ) < 0,"Switch to ",_pathtmp);
	
	  _groupexist=H5Lexists( fid, _pathf, H5P_DEFAULT );
	  EXIT_IF(!_groupexist,"Le champ devrait déjà existé",_pathf);
	  /*Déplacement du champ cible temporaire au chemin des champs écrits par MED */
	  if (_groupexist ) { EXIT_IF( (H5Gmove(fid, _pathf, _pathi  ) < 0) ,"Switch to ",_pathi); }

	  /*Ecriture du champ cible au nouveau format*/
/* 	  ISCRUTE(nval); */
	  MED_ERR_EXIT_IF( MEDfieldValueWithProfileWr(fid, _fieldname, numdt, numo, dt, entite,type_geo[k],
						      MED_COMPACT_PFLMODE, pflname, locname, MED_NO_INTERLACE, MED_ALL_CONSTITUENT,
						      nval, _val) < 0,
			   MED_ERR_WRITE,MED_ERR_FIELD,_fieldname);
	  free(_val);
	  /*Rétablissement des chemins d'accès au champ initial et au champ cible temporaire*/
	  EXIT_IF( H5Gmove(fid, _pathi  , _pathf  ) < 0,"Switch to ",_pathf);
	  EXIT_IF( H5Gmove(fid, _pathtmp, _pathi  ) < 0,"Switch to ",_pathi);

	  MAJ_version_num(fid,2,3,6);

/* 	  if ( strlen(locname) ) */
/* 	    printf("\t- Modèle de localisation des points de Gauss de nom |%s|\n",locname); */

/* 	  if (entite == MED_NODE_ELEMENT) */
/* 	    ngroup = (type_geo[k] % 100); */
/* 	  else */
/* 	    ngroup = ngauss; */

/* 	  switch (MED_NO_INTERLACE) { */

/* 	  case MED_FULL_INTERLACE : */
/* 	    printf("\t- Valeurs :\n\t"); */
/* 	    for (m=0;m<(nval*ngauss)/ngroup;m++) { */
/* 	      printf("|"); */
/* 	      for (n=0;n<ngroup*ncomp;n++) */
/* 		if (typcha == MED_FLOAT64) */
/* 		  printf(" %f ",*(valr+(m*ngroup*ncomp)+n)); */
/* 		else */
/* 		  printf(" "IFORMAT" ",*(vale+(m*ngroup*ncomp)+n)); */

/* 	    } */
/* 	    break; */

/* 	  case MED_NO_INTERLACE : */
/* 	    printf("\t- Valeurs :\n\t"); */
/* 	    for (m=0;m<ncomp;m++) { */
/* 	      printf("|"); */
/* 	      for (n=0;n<(nval*ngauss);n++) */
/* 		if (typcha == MED_FLOAT64) */
/* 		  printf(" %f ",*(valr+(m*nval)+n)); */
/* 		else */
/* 		  printf(" "IFORMAT" ",*(vale+(m*nval)+n)); */
/* 	    } */
/* 	    break; */
/* 	  } */

/* 	  printf("|\n"); */
/* 	  if (typcha == MED_FLOAT64) { */
/* 	    if ( valr ) {free(valr);valr = NULL;}} */
/* 	  else */
/* 	    if (vale) { free(vale);vale = NULL; } */

/* 	  if (strcmp(pflname,MED_NO_PROFILE) == 0 ) */
/* 	    printf("\t- Profil : MED_NO_PROFILE\n"); */
/* 	  else { */
/* 	    if ( (pflsize = MEDprofileSizeByName(fid,pflname)) <0 )  { */
/* 	      MESSAGE("Erreur a la lecture du nombre de valeurs du profil : "); */
/* 	      SSCRUTE(pflname); */
/* 	      ret = -1; continue; */
/* 	    } */

/* 	    printf("\t- Profil : |%s| de taille "IFORMAT"\n",pflname,pflsize); */

/* 	    pflval = (med_int*) malloc(sizeof(med_int)*pflsize); */
/* 	    EXIT_IF(pflval == NULL,NULL,NULL); */
/* 	    if ( MEDprofileRd(fid,pflname,pflval) <0) { */
/* 	      MESSAGE("Erreur a la lecture des valeurs du profil : "); */
/* 	      SSCRUTE(pflname); */
/* 	      ret = -1; */
/* 	    } */
/* 	    printf("\t"); */
/* 	    for (m=0;m<pflsize;m++) printf(" "IFORMAT" ",*(pflval+m)); */
/* 	    printf("\n"); */
/* 	    free(pflval); */
/* 	  } */
	}
      }
    }
  } /* fin for sur les mailles*/

  ret = 0;

 ERROR:
  return ret;
}
Ejemplo n.º 5
0
int main (int argc, char **argv) {
  med_idt fid;
  const char meshname[MED_NAME_SIZE+1] = "2D unstructured mesh";
  const char fieldname[MED_NAME_SIZE+1] = "TEMPERATURE_FIELD";
  const med_int ncomponent = 1;
  const char componentname[MED_SNAME_SIZE+1] = "TEMPERATURE";
  const char componentunit[MED_SNAME_SIZE+1] = "C";
  const med_float tria3values_step1_profile1[3] = {1000.,               4000.,                      8000.};
  const med_float tria3values_step2_profile1[8] = {1500.,    0.,    0., 4500.,    0.,    0.,    0., 8500.};
  const med_float tria3values_step2_profile2[8] = {   0., 2500., 3500.,    0., 5500., 6500., 7500.,   0.};
  const med_float quad4values_step1[4] = {10000., 20000., 30000., 40000.};
  const med_float quad4values_step2[4] = {15000., 25000., 35000., 45000.};
  const char profile1name[MED_NAME_SIZE+1] = "MED_TRIA3_PROFILE1";
  const med_int profile1[3] = {1, 4, 8}; 
  const med_int profile1size = 3;
  const char profile2name[MED_NAME_SIZE+1] = "MED_TRIA3_PROFILE2";
  const med_int profile2[5] = {2, 3, 5, 6, 7}; 
  const med_int profile2size = 5;
  const med_int ntria3 = 8;
  const med_int nquad4 = 4;
  int ret=-1;

  /* file creation */
  fid = MEDfileOpen("UsesCase_MEDfield_7.med",MED_ACC_CREAT);
  if (fid < 0) {
    MESSAGE("ERROR : file creation ...");
    goto ERROR;
  }

  /* create mesh link */
  if (MEDlinkWr(fid,meshname,"./UsesCase_MEDmesh_1.med") < 0) {
    MESSAGE("ERROR : create mesh link ...");
    goto ERROR;
  }
  
  /* create the profiles in the file */
  if (MEDprofileWr(fid, profile1name, profile1size, profile1 ) < 0) {
    MESSAGE("ERROR : create profile ...");
    goto ERROR; 
  }
  
  if (MEDprofileWr(fid, profile2name, profile2size, profile2 ) < 0) {
    MESSAGE("ERROR : create profile ...");
    goto ERROR; 
  }
  
  /* field creation : temperature field  : 1 component in celsius degree
   *                  the mesh is the 2D unstructured mesh of UsecaseMEDmesh_1.c
   *                  use case.
   *                  Computation step unit in 'ms'
   */ 
  if (MEDfieldCr(fid, fieldname, MED_FLOAT64, ncomponent, 
		 componentname, componentunit,"ms", meshname) < 0) {
    MESSAGE("ERROR : create field");
    goto ERROR;
  }
  
  /* two computation steps */
  /* write values at cell centers : 8 MED_TRIA3 and 4 MED_QUAD4 */

  /* STEP 1 : dt1 = 5.5, it = 1*/
  /* MED_TRIA3 : with a profile of 3 values in compact memory storage mode */
  if (MEDfieldValueWithProfileWr(fid, fieldname, 1, 1, 5.5, MED_CELL,MED_TRIA3, 
				 MED_COMPACT_STMODE, profile1name, MED_NO_LOCALIZATION,
				 MED_FULL_INTERLACE, MED_ALL_CONSTITUENT, ntria3,
				 (unsigned char*) tria3values_step1_profile1) < 0) {
    MESSAGE("ERROR : write field values on MED_TRIA3");
    goto ERROR;
  }
   /* MED_QUAD4  : with no profile */ 
  if (MEDfieldValueWithProfileWr(fid, fieldname, 1, 1, 5.5, MED_CELL, MED_QUAD4, 
				 MED_COMPACT_STMODE, MED_NO_PROFILE, MED_NO_LOCALIZATION,
				 MED_FULL_INTERLACE, MED_ALL_CONSTITUENT, nquad4,
				 (unsigned char*) quad4values_step1) < 0) {
    MESSAGE("ERROR : write field values on MED_QUAD4 ");
    goto ERROR;
  }

  /* STEP 2 : dt2 = 8.9, it = 1*/
  /* MED_TRIA3 : with a profile of 3 values then a profile of 5 values in global memory storage mode */
  if (MEDfieldValueWithProfileWr(fid, fieldname, 2 , 1 , 8.9 , MED_CELL, MED_TRIA3, 
				 MED_GLOBAL_STMODE, profile1name, MED_NO_LOCALIZATION,    
				 MED_FULL_INTERLACE, MED_ALL_CONSTITUENT, ntria3,
				 (unsigned char*) tria3values_step2_profile1) < 0) {
    MESSAGE("ERROR : write field values on MED_TRIA3 ...");
    goto ERROR;
  }
  if (MEDfieldValueWithProfileWr(fid, fieldname, 2 , 1 , 8.9 , MED_CELL, MED_TRIA3, 
				 MED_GLOBAL_STMODE, profile2name, MED_NO_LOCALIZATION,    
				 MED_FULL_INTERLACE, MED_ALL_CONSTITUENT, ntria3,
				 (unsigned char*) tria3values_step2_profile2) < 0) {
    MESSAGE("ERROR : write field values on MED_TRIA3 ...");
    goto ERROR;
  }

  /* MED_QUAD4 : with no profile */
  if (MEDfieldValueWithProfileWr(fid, fieldname, 2, 1, 8.9, MED_CELL, MED_QUAD4, 
		      MED_COMPACT_STMODE, MED_NO_PROFILE, MED_NO_LOCALIZATION,
		      MED_FULL_INTERLACE, MED_ALL_CONSTITUENT, nquad4,
		      (unsigned char*) quad4values_step2) < 0) {
    MESSAGE("ERROR : write field values on MED_QUAD4 ... ");
    goto ERROR;
  }

  ret=0;
 ERROR:

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