#define _a 0.446948490915965
#define _b 0.091576213509771
#define _p1 0.11169079483905
#define _p2 0.0549758718227661
#include <med.h>
#define MESGERR 1
#include "med_utils.h"
#include <string.h>
#ifdef DEF_LECT_ECR
#define MODE_ACCES MED_LECTURE_ECRITURE
#elif DEF_LECT_AJOUT
#define MODE_ACCES MED_LECTURE_AJOUT
#else
#define MODE_ACCES MED_CREATION
#endif
#ifndef USER_INTERLACE
#define USER_INTERLACE MED_FULL_INTERLACE
#endif
#define USER_MODE MED_COMPACT
 
int main (int argc, char **argv)
{
  med_err ret=0;
  med_idt fid;
  
  
  
  char maa1[MED_TAILLE_NOM+1]= "maa1";
  char maa2[MED_TAILLE_NOM+1]= "maa2";
  char * lien_maa2 = "./testfoo.med";
  char maa3[MED_TAILLE_NOM+1]= "maa3";
  
  char nomcha1[MED_TAILLE_NOM+1]  = "champ reel";
  char comp1[2*MED_TAILLE_PNOM+1] = "comp1           comp2           ";
                                   
  char unit1[2*MED_TAILLE_PNOM+1] = "unit1           unit2           ";
  med_int ncomp1  = 2; 
  
  med_int ngauss1_1 = 6;
  char gauss1_1[MED_TAILLE_NOM+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 }; 
  
  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; 
  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};  
  
  med_int ngauss1_2 = 3;
  char gauss1_2[MED_TAILLE_NOM+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; 
  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};  
  med_float valr1_2p[2*3*2]  = {                              12.0,13.0, 20.0,21.0, 22.0,23.0};  
 
  med_int   nval1_3= 6; 
  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};  
  med_float valr1_3p[2*2*2] = {         2.0,3.0, 10.0,11.0                                 };  
  
  
  char nomcha2[MED_TAILLE_NOM+1]  = "champ entier";
  char comp2[3*MED_TAILLE_PNOM+1] = "comp1           comp2           comp3           ";
                                   
  char unit2[3*MED_TAILLE_PNOM+1] = "unit1           unit2           unit3           ";
  med_int ncomp2  = 3; 
  med_int nval2 = 5;   
  med_int   valr2[5*3  ]  = {0,1,2, 10,11,12, 20,21,22, 30,31,32, 40,41,42};              
  med_int   valr2p[3*3  ] = {0,1,2,           20,21,22,           40,41,42};              
  
  char nomprofil1[MED_TAILLE_NOM+1]  = "PROFIL(champ(1))";
  char nomprofil2[MED_TAILLE_NOM+1]  = "PROFIL(champ2)";
  med_int profil1[2] = { 2, 3 };
  med_int profil2[3] = { 1, 3, 5 };
  
  char nomcha3[MED_TAILLE_NOM+1]  = "champ entier 3";
  char comp3[3*MED_TAILLE_PNOM+1] = "comp1           comp2           ";
                                   
  char unit3[3*MED_TAILLE_PNOM+1] = "unit1           unit2           ";
  med_int ncomp3  = 2;
  med_int nval3 = 5*4;     
  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};    
  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};    
  
  if ((fid = MEDouvrir("test10.med",MODE_ACCES)) < 0){
    MESSAGE("Erreur à l'ouverture du fichier : ");
    return -1;
  }
  
  
  if ( MEDmaaCr(fid,maa1,3,MED_NON_STRUCTURE,"Maillage vide") < 0) {
    MESSAGE("Erreur à la création du maillage : ");SSCRUTE(maa1);
    ret = -1;
  };
  
  if ( MEDmaaCr(fid,maa3,3,MED_NON_STRUCTURE,"Maillage vide") < 0) {
    MESSAGE("Erreur à la création du maillage : ");SSCRUTE(maa3);
    ret = -1;
  };
    
  
  if ( MEDchampCr(fid,nomcha1,MED_FLOAT64,comp1,unit1,ncomp1) < 0) {
    MESSAGE("Erreur à la création du champ : ");SSCRUTE(nomcha1);
    ret = -1;
  };
  
  
  if ( MEDchampCr(fid,nomcha2,MED_INT32,comp2,unit2,ncomp2) < 0) {
    MESSAGE("Erreur à la création du champ : ");SSCRUTE(nomcha2);
    ret = -1;
  };
  
  
  if (MEDlienEcr(fid,lien_maa2,maa2) < 0) {
    MESSAGE("Erreur à la création du lien : ");SSCRUTE(lien_maa2);
    ret = -1;
  };
  
  if (MEDgaussEcr(fid, MED_TRIA6, refcoo1, USER_INTERLACE,
                  ngauss1_1, gscoo1_1, wg1_1, gauss1_1) < 0) {
    MESSAGE("Erreur à la création du modèle n°1 : ");SSCRUTE(gauss1_1);
    ret = -1;
  };
   
  if (MEDgaussEcr(fid, MED_TRIA6, refcoo1, USER_INTERLACE,
                  ngauss1_2, gscoo1_2, wg1_2, gauss1_2) < 0) {
    MESSAGE("Erreur à la création du modèle n°1 : ");SSCRUTE(gauss1_2);
    ret = -1;
  };
 
  
  
  if ( MEDchampEcr(fid,maa1,nomcha1,(unsigned char*)valr1_1,USER_INTERLACE,nval1_1,gauss1_1,
                   2,MED_NOPFL,MED_NO_PFLMOD,MED_MAILLE,MED_TRIA6,MED_NOPDT,"",0.0,MED_NONOR ) < 0) {
    MESSAGE("Erreur à l'écriture du champ : ");
    SSCRUTE(nomcha1);ISCRUTE_int(MED_NOPDT);ISCRUTE_int(MED_NONOR);SSCRUTE(MED_NOPFL);
    SSCRUTE(maa1);
    ret = -1;
  };
  
  
  if ( MEDchampEcr(fid,maa1,nomcha1,(unsigned char*)valr1_1,USER_INTERLACE,nval1_1,gauss1_1,
                      1,MED_NOPFL,MED_NO_PFLMOD,MED_MAILLE,MED_TRIA6,MED_NOPDT,"",0.0,MED_NONOR) < 0) {
    MESSAGE("Erreur à l'écriture du champ : ");
    SSCRUTE(nomcha1);ISCRUTE_int(MED_NOPDT);ISCRUTE_int(MED_NONOR);SSCRUTE(MED_NOPFL);
    SSCRUTE(maa1);
    ret = -1;
  };
  
  
  if ( MEDchampEcr(fid,maa2,nomcha1,(unsigned char*)valr1_2,USER_INTERLACE,nval1_2,gauss1_2,
                      1,MED_NOPFL,MED_NO_PFLMOD,MED_MAILLE,MED_TRIA6,1,"ms",5.5,MED_NONOR) < 0) {
    MESSAGE("Erreur à l'écriture du champ : ");
    SSCRUTE(nomcha1);ISCRUTE_int(1);ISCRUTE_int(MED_NONOR);SSCRUTE(MED_NOPFL);
    SSCRUTE(maa2);
    ret = -1;
  };
  
  
  if ( MEDchampEcr(fid,maa1,nomcha1,(unsigned char*)valr1_1,USER_INTERLACE,nval1_1,gauss1_1,
                      2,MED_NOPFL,MED_NO_PFLMOD,MED_MAILLE,MED_TRIA6,1,"ms",5.5,MED_NONOR) < 0) {
    MESSAGE("Erreur à l'écriture du champ : ");
    SSCRUTE(nomcha1);ISCRUTE_int(1);ISCRUTE_int(MED_NONOR);SSCRUTE(MED_NOPFL);
    SSCRUTE(maa1);
    ret = -1;
  };
    
    
  if ( MEDchampEcr(fid,maa3,nomcha1,(unsigned char*)valr1_2,USER_INTERLACE,nval1_2,gauss1_2,
                   1,MED_NOPFL,MED_NO_PFLMOD,MED_MAILLE,MED_TRIA6,1,"ms",5.5,2) < 0) {
    MESSAGE("Erreur à l'écriture du champ : ");
    SSCRUTE(nomcha1);ISCRUTE_int(1);ISCRUTE_int(2);SSCRUTE(MED_NOPFL);
    SSCRUTE(maa3);
    ret = -1;
  };
  
  
  
  if ( MEDprofilEcr(fid,profil1,1,nomprofil1) < 0) {
    MESSAGE("Erreur à l'écriture du profil : ");
    SSCRUTE(nomprofil1);
    ret = -1;
  };
  
  if ( MEDchampEcr(fid,maa1, nomcha1,(unsigned char*)valr1_3p,USER_INTERLACE,nval1_3,MED_NOGAUSS,
                   MED_ALL,nomprofil1,USER_MODE,MED_MAILLE,MED_TRIA6,2,"ms",5.6,2) < 0) {
    MESSAGE("Erreur à l'écriture du champ : ");
    SSCRUTE(nomcha1);ISCRUTE_int(2);ISCRUTE_int(2);SSCRUTE(nomprofil1);
    SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
    ret = -1;
  };
  
  if ( MEDchampEcr(fid,maa2, nomcha1,(unsigned char*)valr1_2p,USER_INTERLACE,nval1_2,gauss1_2,
                   MED_ALL,nomprofil1,USER_MODE,MED_MAILLE,MED_TRIA6,2,"ms",5.6,2) < 0) {
    MESSAGE("Erreur à l'écriture du champ : ");
    SSCRUTE(nomcha1);ISCRUTE_int(2);ISCRUTE_int(2);SSCRUTE(nomprofil1);
    SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
    ret = -1;
  }; 
  
  if ( MEDchampEcr(fid,maa1,nomcha1,(unsigned char*)valr1_3p,USER_INTERLACE,nval1_3,MED_NOGAUSS,
                   2,nomprofil1,USER_MODE,MED_MAILLE,MED_TRIA6,3,"ms",5.7,2) < 0)  {
    MESSAGE("Erreur à l'écriture du champ : ");
    SSCRUTE(nomcha1);ISCRUTE_int(2);ISCRUTE_int(2);SSCRUTE(nomprofil1);
    SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
    ret = -1;
  };
    
    
    
  
  
    
  
  if (MEDchampEcr(fid,maa1,nomcha2,(unsigned char*)valr2,USER_INTERLACE,nval2,MED_NOGAUSS,
                  1,MED_NOPFL,MED_NO_PFLMOD,MED_ARETE,MED_SEG2,MED_NOPDT,"",0.0,MED_NONOR) < 0)  {
    MESSAGE("Erreur à l'écriture du champ : ");
    SSCRUTE(nomcha2);ISCRUTE_int(MED_NOPDT);ISCRUTE_int(MED_NONOR);SSCRUTE(MED_NOPFL);
    SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
    ret = -1;
  };
  
  
  if (MEDchampEcr(fid,maa1,nomcha2,(unsigned char*)valr2,USER_INTERLACE,nval2,MED_NOGAUSS,
                      2,MED_NOPFL,MED_NO_PFLMOD,MED_NOEUD,0,MED_NOPDT,"",0.0,MED_NONOR) < 0)  {
    MESSAGE("Erreur à l'écriture du champ : ");
    SSCRUTE(nomcha2);ISCRUTE_int(MED_NOPDT);ISCRUTE_int(MED_NONOR);SSCRUTE(MED_NOPFL);
    SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
    ret = -1;
  };
  
  
  if ( MEDchampEcr(fid,maa1,nomcha2,(unsigned char*)valr2,USER_INTERLACE,nval2,MED_NOGAUSS,
                   3,MED_NOPFL,MED_NO_PFLMOD,MED_FACE,MED_TRIA6,MED_NOPDT,"",0.0,MED_NONOR) < 0 ) {
    MESSAGE("Erreur à l'écriture du champ : ");
    SSCRUTE(nomcha2);ISCRUTE_int(MED_NOPDT);ISCRUTE_int(MED_NONOR);SSCRUTE(MED_NOPFL);
    SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
    ret = -1;
  };
  
  
  if ( MEDprofilEcr(fid,profil2,3,nomprofil2) < 0) {
    MESSAGE("Erreur à l'écriture du profil : ");
    SSCRUTE(nomprofil2);
    ret = -1;
  };
  
  if ( MEDchampEcr(fid,maa1,nomcha2,(unsigned char*)valr2p,USER_INTERLACE,nval2,MED_NOGAUSS,
                      3,nomprofil2,USER_MODE,MED_MAILLE,MED_TRIA6,MED_NOPDT,"",0.0,MED_NONOR) < 0 ) {
    MESSAGE("Erreur à l'écriture du champ : ");
    SSCRUTE(nomcha2);ISCRUTE_int(MED_NOPDT);ISCRUTE_int(MED_NONOR);SSCRUTE(MED_NOPFL);
    SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
    ret = -1;
  };
  
  if ( MEDchampCr(fid,nomcha3,MED_INT32,comp3,unit3,ncomp3) < 0) {
    MESSAGE("Erreur à la création du champ : ");SSCRUTE(nomcha3);
    ret = -1;
  };
  
  
  
  if (MEDchampEcr(fid,maa1,nomcha3,(unsigned char*)valr3,USER_INTERLACE,nval3,MED_NOGAUSS,
                  1,MED_NOPFL,MED_NO_PFLMOD,MED_NOEUD_MAILLE,MED_QUAD4,MED_NOPDT,"",0.0,MED_NONOR) < 0)  {
    MESSAGE("Erreur à l'écriture du champ : ");
    SSCRUTE(nomcha3);ISCRUTE_int(MED_NOPDT);ISCRUTE_int(MED_NONOR);SSCRUTE(MED_NOPFL);
    SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
    ret = -1;
  };
  
  if (MEDchampEcr(fid,maa2,nomcha3,(unsigned char*)valr3,USER_INTERLACE,nval3,MED_NOGAUSS,
                  MED_ALL,MED_NOPFL,MED_NO_PFLMOD,MED_NOEUD_MAILLE,MED_QUAD4,MED_NOPDT,"",0.0,MED_NONOR) < 0)  {
    MESSAGE("Erreur à l'écriture du champ : ");
    SSCRUTE(nomcha3);ISCRUTE_int(MED_NOPDT);ISCRUTE_int(MED_NONOR);SSCRUTE(MED_NOPFL);
    SSCRUTE(maa2);SSCRUTE(MED_NOLIEN);
    ret = -1;
  };
  
  if (MEDchampEcr(fid,maa3,nomcha3,(unsigned char*)valr3p,USER_INTERLACE,nval3,MED_NOGAUSS,
                  MED_ALL,nomprofil2,USER_MODE,MED_NOEUD_MAILLE,MED_QUAD4,MED_NOPDT,"",0.0,MED_NONOR) < 0)  {
    MESSAGE("Erreur à l'écriture du champ : ");
    SSCRUTE(nomcha3);ISCRUTE_int(MED_NOPDT);ISCRUTE_int(MED_NONOR);SSCRUTE(nomprofil2);
    SSCRUTE(maa3);SSCRUTE(MED_NOLIEN);
    ret = -1;
  };
  
  if ( MEDfermer(fid) < 0 ) ret=-1;
  
  return ret;
}