      1  /*************************************************************************
      2  * COPYRIGHT (C) 1999 - 2003  EDF R&D
      3  * THIS LIBRARY IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
      4  * IT UNDER THE TERMS OF THE GNU LESSER GENERAL PUBLIC LICENSE
      5  * AS PUBLISHED BY THE FREE SOFTWARE FOUNDATION;
      6  * EITHER VERSION 2.1 OF THE LICENSE, OR (AT YOUR OPTION) ANY LATER VERSION.
      7  *
      8  * THIS LIBRARY IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
      9  * WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
     10  * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
     11  * LESSER GENERAL PUBLIC LICENSE FOR MORE DETAILS.
     12  *
     13  * YOU SHOULD HAVE RECEIVED A COPY OF THE GNU LESSER GENERAL PUBLIC LICENSE
     14  * ALONG WITH THIS LIBRARY; IF NOT, WRITE TO THE FREE SOFTWARE FOUNDATION,
     15  * INC., 59 TEMPLE PLACE, SUITE 330, BOSTON, MA 02111-1307 USA
     16  *
     17  *************************************************************************/
     18
     19
     20  /******************************************************************************
     21   * - Nom du fichier : test10.c
     22   *
     23   * - Description : ecriture de champs de resultats MED
     24   *
     25   *****************************************************************************/
     26
     27  #include <med.h>
     28  #include <med_utils.h>
     29  #include <stdio.h>
     30  #include <string.h>
     31  #include <stdlib.h>
     32  #define USER_INTERLACE MED_FULL_INTERLACE
     33  #define USER_MODE MED_COMPACT
     34  int main (int argc, char **argv)
     35  {
     36    med_err ret=0;
     37    med_idt fid;
     38
     39    /* Constantes */
     40    med_float a=0.446948490915965;
     41    med_float b=0.091576213509771;
     42    med_float p1=0.11169079483905;
     43    med_float p2=0.0549758718227661;
     44
     45    /* Maillage support aux champs*/
     46    /* Ces maillages sont vides*/
     47    char maa1[MED_TAILLE_NOM+1]= "maa1";
     48    char maa2[MED_TAILLE_NOM+1]= "maa2";
     49    char * lien_maa2 = "./testfoo.med";
     50    char maa3[MED_TAILLE_NOM+1]= "maa3";
     51
     52
     53    /* Caractéristiques du champ n° 1 sur TRIA6 */
     54    char nomcha1[MED_TAILLE_NOM+1]  = "champ reel";
     55    char comp1[2*MED_TAILLE_PNOM+1] = "comp1           comp2           ";
     56                                     /*12345678901234561234567890123456*/
     57    char unit1[2*MED_TAILLE_PNOM+1] = "unit1           unit2           ";
     58    med_int ncomp1  = 2;
     59    /* Caractéristiques du model n° 1 de localisation des points de gauss pour le champ n°1*/
     60    med_int ngauss1_1 = 6;
     61    char gauss1_1[MED_TAILLE_NOM+1]  = "Model n1";
     62    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 };
     63    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   };
     64    med_float wg1_1[6] = { 4*p2, 4*p2, 4*p2, 4*p1, 4*p1, 4*p1 };
     65    med_int   nval1_1= 1*6; /*1 valeurs et 6 points de gauss par valeur */
     66    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*/
     67    /* Caractéristiques du model n° 2 de localisation des points de gauss pour le champ n°1*/
     68    med_int ngauss1_2 = 3;
     69    char gauss1_2[MED_TAILLE_NOM+1]  = "Model n2";
     70    med_float gscoo1_2[6] = { -2.0/3,1.0/3, -2.0/3,-2.0/3, 1.0/3,-2.0/3  };
     71    med_float wg1_2[3] = { 2.0/3, 2.0/3, 2.0/3 };
     72    med_int   nval1_2= 2*3; /*2 valeurs et 3 points de gauss par valeur */
     73    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*/
     74    med_float valr1_2p[2*3*2]  = {                              12.0,13.0, 20.0,21.0, 22.0,23.0};  /* 2 composantes*/
     75   /* Caractéristiques du model n° 3 sans points de gauss pour le champ n°1*/
     76    med_int   nval1_3= 6; /*6 valeurs et pas de points de gauss */
     77    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*/
     78    med_float valr1_3p[2*2*2] = {         2.0,3.0, 10.0,11.0                                 };  /* 2 composantes profil1 */
     79
     80    /* Caractéristiques du champ n° 2 */
     81    char nomcha2[MED_TAILLE_NOM+1]  = "champ entier";
     82    char comp2[3*MED_TAILLE_PNOM+1] = "comp1           comp2           comp3           ";
     83                                     /*123456789012345612345678901234561234567890123456*/
     84    char unit2[3*MED_TAILLE_PNOM+1] = "unit1           unit2           unit3           ";
     85    med_int ncomp2  = 3;
     86    med_int nval2 = 5;   /*5 valeurs */
     87    med_int   valr2[5*3  ]  = {0,1,2, 10,11,12, 20,21,22, 30,31,32, 40,41,42};              /* 3 composantes*/
     88    med_int   valr2p[3*3  ] = {0,1,2,           20,21,22,           40,41,42};              /* 3 composantes*/
     89
     90    /* Profils utilisés */
     91    char nomprofil1[MED_TAILLE_NOM+1]  = "PROFIL(champ(1))";
     92    med_int profil1[2] = { 2, 3 };
     93    med_int profil2[3] = { 1, 3, 5 };
     94
     95    /* ouverture du fichier */
     96    if ((fid = MEDouvrir("test10.med",MED_CREATION)) < 0){
     97      MESSAGE("Erreur à l'ouverture du fichier : ");
     98      return -1;
     99    }
    100
    101    /* creation de maa1 de dimension 3*/
    102    if ( MEDmaaCr(fid,maa1,3,MED_NON_STRUCTURE,"Maillage vide") < 0) {
    103      MESSAGE("Erreur à la création du maillage : ");SSCRUTE(maa1);
    104      ret = -1;
    105    };
    106
    107    /* creation de maa3 de dimension 3*/
    108    if ( MEDmaaCr(fid,maa3,3,MED_NON_STRUCTURE,"Maillage vide") < 0) {
    109      MESSAGE("Erreur à la création du maillage : ");SSCRUTE(maa3);
    110      ret = -1;
    111    };
    112
    113    /* creation du champ réel n°1 */
    114    if ( MEDchampCr(fid,nomcha1,MED_FLOAT64,comp1,unit1,ncomp1) < 0) {
    115      MESSAGE("Erreur à la création du champ : ");SSCRUTE(nomcha1);
    116      ret = -1;
    117    };
    118
    119    /* creation du champ entier n°2 */
    120    if ( MEDchampCr(fid,nomcha2,MED_INT32,comp2,unit2,ncomp2) < 0) {
    121      MESSAGE("Erreur à la création du champ : ");SSCRUTE(nomcha2);
    122      ret = -1;
    123    };
    124
    125    /* creation du lien au fichier distant contenant maa2 */
    126    if (MEDlienEcr(fid,lien_maa2,maa2) < 0) {
    127      MESSAGE("Erreur à la création du lien : ");SSCRUTE(lien_maa2);
    128      ret = -1;
    129    };
    130
    131    /* creation de la localisation des points de Gauss modèle n°1 */
    132    if (MEDgaussEcr(fid, MED_TRIA6, refcoo1, USER_INTERLACE,
    133            ngauss1_1, gscoo1_1, wg1_1, gauss1_1) < 0) {
    134      MESSAGE("Erreur à la création du modèle n°1 : ");SSCRUTE(gauss1_1);
    135      ret = -1;
    136    };
    137
    138     /* creation de la localisation des points de Gauss modèle n°2 */
    139    if (MEDgaussEcr(fid, MED_TRIA6, refcoo1, USER_INTERLACE,
    140            ngauss1_2, gscoo1_2, wg1_2, gauss1_2) < 0) {
    141      MESSAGE("Erreur à la création du modèle n°1 : ");SSCRUTE(gauss1_2);
    142      ret = -1;
    143    };
    144
    145    /* ecriture du champ n°1*/
    146    /* enregistre uniquement les composantes n°2 de valr1_1, et n'utilise ni pas de temps ni n° d'ordre*/
    147    if ( MEDchampEcr(fid,maa1,nomcha1,(unsigned char*)valr1_1,USER_INTERLACE,nval1_1,gauss1_1,
    148             2,MED_NOPFL,MED_NO_PFLMOD,MED_MAILLE,MED_TRIA6,MED_NOPDT,"",0.0,MED_NONOR ) < 0) {
    149      MESSAGE("Erreur à l'écriture du champ : ");
    150      SSCRUTE(nomcha1);ISCRUTE(MED_NOPDT);ISCRUTE(MED_NONOR);SSCRUTE(MED_NOPFL);
    151      SSCRUTE(maa1);
    152      ret = -1;
    153    };
    154
    155
    156    /* enregistre uniquement les composantes n°1 de valr1_1, et n'utilise ni pas de temps ni n° d'ordre */
    157    if ( MEDchampEcr(fid,maa1,nomcha1,(unsigned char*)valr1_1,USER_INTERLACE,nval1_1,gauss1_1,
    158                1,MED_NOPFL,MED_NO_PFLMOD,MED_MAILLE,MED_TRIA6,MED_NOPDT,"",0.0,MED_NONOR) < 0) {
    159      MESSAGE("Erreur à l'écriture du champ : ");
    160      SSCRUTE(nomcha1);ISCRUTE(MED_NOPDT);ISCRUTE(MED_NONOR);SSCRUTE(MED_NOPFL);
    161      SSCRUTE(maa1);
    162      ret = -1;
    163    };
    164
    165
    166    /* enregistre uniquement les composantes n°1 de valr1_2, au pas de temps n°1(5.5), n'utilise pas de n°d'ordre*/
    167    /* ce champ repose sur le maillage maa2 qui est distant */
    168    if ( MEDchampEcr(fid,maa2,nomcha1,(unsigned char*)valr1_2,USER_INTERLACE,nval1_2,gauss1_2,
    169                1,MED_NOPFL,MED_NO_PFLMOD,MED_MAILLE,MED_TRIA6,1,"ms",5.5,MED_NONOR) < 0) {
    170      MESSAGE("Erreur à l'écriture du champ : ");
    171      SSCRUTE(nomcha1);ISCRUTE(1);ISCRUTE(MED_NONOR);SSCRUTE(MED_NOPFL);
    172      SSCRUTE(maa2);
    173      ret = -1;
    174    };
    175
    176    /* enregistre uniquement les composantes n°2 de valr1_2, au pas de temps n°1(5.5), n'utilise pas de n°d'ordre*/
    177    /* ce champ repose sur le maillage maa1 qui est local */
    178    if ( MEDchampEcr(fid,maa1,nomcha1,(unsigned char*)valr1_1,USER_INTERLACE,nval1_1,gauss1_1,
    179                2,MED_NOPFL,MED_NO_PFLMOD,MED_MAILLE,MED_TRIA6,1,"ms",5.5,MED_NONOR) < 0) {
    180      MESSAGE("Erreur à l'écriture du champ : ");
    181      SSCRUTE(nomcha1);ISCRUTE(1);ISCRUTE(MED_NONOR);SSCRUTE(MED_NOPFL);
    182      SSCRUTE(maa1);
    183      ret = -1;
    184    };
    185
    186      /* enregistre uniquement les composantes n°1 de valr1_1, au pas de temps n°1(5.5), et n°d'itération n°2*/
    187      /* ce champ repose sur le maillage maa3 qui est local */
    188    if ( MEDchampEcr(fid,maa3,nomcha1,(unsigned char*)valr1_2,USER_INTERLACE,nval1_2,gauss1_2,
    189             1,MED_NOPFL,MED_NO_PFLMOD,MED_MAILLE,MED_TRIA6,1,"ms",5.5,2) < 0) {
    190      MESSAGE("Erreur à l'écriture du champ : ");
    191      SSCRUTE(nomcha1);ISCRUTE(1);ISCRUTE(2);SSCRUTE(MED_NOPFL);
    192      SSCRUTE(maa3);
    193      ret = -1;
    194    };
    195
    196    /* Creation d'un profil (selection  du deuxieme élément de valr1_1) */
    197    /* On n'utilise que la première valeur (2) du profil */
    198    if ( MEDprofilEcr(fid,profil1,1,nomprofil1) < 0) {
    199      MESSAGE("Erreur à l'écriture du profil : ");
    200      SSCRUTE(profil1);
    201      ret = -1;
    202    };
    203
    204
    205    /* enregistre toutes les composantes du deuxième élément de valr1_1 (premier élément en stockage compact de valr1p),
    206       au pas de temps n°2(5.6), et n°d'itération n°2*/
    207    if ( MEDchampEcr(fid,maa1, nomcha1,(unsigned char*)valr1_3p,USER_INTERLACE,nval1_3,MED_NOGAUSS,
    208             MED_ALL,nomprofil1,USER_MODE,MED_MAILLE,MED_TRIA6,2,"ms",5.6,2) < 0) {
    209      MESSAGE("Erreur à l'écriture du champ : ");
    210      SSCRUTE(nomcha1);ISCRUTE(2);ISCRUTE(2);SSCRUTE(nomprofil1);
    211      SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
    212      ret = -1;
    213    };
    214
    215    /* enregistre toutes les composantes du deuxième élément de valr1_1 (premier élément en stockage compact de valr1p),
    216       au pas de temps n°2(5.6), et n°d'itération n°2 */
    217    if ( MEDchampEcr(fid,maa2, nomcha1,(unsigned char*)valr1_2p,USER_INTERLACE,nval1_2,gauss1_2,
    218             MED_ALL,nomprofil1,USER_MODE,MED_MAILLE,MED_TRIA6,2,"ms",5.6,2) < 0) {
    219      MESSAGE("Erreur à l'écriture du champ : ");
    220      SSCRUTE(nomcha1);ISCRUTE(2);ISCRUTE(2);SSCRUTE(nomprofil1);
    221      SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
    222      ret = -1;
    223    };
    224
    225
    226    /* enregistre la composante n°2 du deuxième élément de valr1, au pas de temps n°2(5.7), et n°d'itération n°2*/
    227    if ( MEDchampEcr(fid,maa1,nomcha1,(unsigned char*)valr1_3p,USER_INTERLACE,nval1_3,MED_NOGAUSS,
    228             2,nomprofil1,USER_MODE,MED_MAILLE,MED_TRIA6,3,"ms",5.7,2) < 0)  {
    229      MESSAGE("Erreur à l'écriture du champ : ");
    230      SSCRUTE(nomcha1);ISCRUTE(2);ISCRUTE(2);SSCRUTE(nomprofil1);
    231      SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
    232      ret = -1;
    233    };
    234
    235
    236
    237    /* Ecriture du champ n° 2 */
    238    /* TESTER EGALEMENT EN MODE FULL_INTERLACE EN MODIFIANT LA SIGNATURE DE LA ROUTINE */
    239
    240    /* enregistre la composante n°1 des éléments de valr2, et n'utilise ni pas de temps ni n° d'ordre */
    241    if (MEDchampEcr(fid,maa1,nomcha2,(unsigned char*)valr2,USER_INTERLACE,nval2,MED_NOGAUSS,
    242            1,MED_NOPFL,MED_NO_PFLMOD,MED_ARETE,MED_SEG2,MED_NOPDT,"",0.0,MED_NONOR) < 0)  {
    243      MESSAGE("Erreur à l'écriture du champ : ");
    244      SSCRUTE(nomcha2);ISCRUTE(MED_NOPDT);ISCRUTE(MED_NONOR);SSCRUTE(MED_NOPFL);
    245      SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
    246      ret = -1;
    247    };
    248
    249
    250    /* enregistre la composante n°2 des éléments de valr2, et n'utilise ni pas de temps ni n° d'ordre */
    251    /*        pour des raisons de complétude des tests on change le type d'élément (aucun sens phys.))*/
    252    if (MEDchampEcr(fid,maa1,nomcha2,(unsigned char*)valr2,USER_INTERLACE,nval2,MED_NOGAUSS,
    253                        2,MED_NOPFL,MED_NO_PFLMOD,MED_NOEUD,0,MED_NOPDT,"",0.0,MED_NONOR) < 0)  {
    254      MESSAGE("Erreur à l'écriture du champ : ");
    255      SSCRUTE(nomcha2);ISCRUTE(MED_NOPDT);ISCRUTE(MED_NONOR);SSCRUTE(MED_NOPFL);
    256      SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
    257      ret = -1;
    258    };
    259
    260    /* enregistre la composante n°3 des éléments de valr2, et n'utilise ni pas de temps ni n° d'ordre */
    261    /*        pour des raisons de complétude des tests on change le type d'élément (aucun sens phys.))*/
    262    if ( MEDchampEcr(fid,maa1,nomcha2,(unsigned char*)valr2,USER_INTERLACE,nval2,MED_NOGAUSS,
    263             3,MED_NOPFL,MED_NO_PFLMOD,MED_FACE,MED_TRIA6,MED_NOPDT,"",0.0,MED_NONOR) < 0 ) {
    264      MESSAGE("Erreur à l'écriture du champ : ");
    265      SSCRUTE(nomcha2);ISCRUTE(MED_NOPDT);ISCRUTE(MED_NONOR);SSCRUTE(MED_NOPFL);
    266      SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
    267      ret = -1;
    268    };
    269
    270    /* Creation d'un profil (selection  des éléments 1,3,5 de valr2) */
    271    /* On utilise les trois valeurs du profil */
    272    if ( MEDprofilEcr(fid,profil2,3,"PROFIL(champ2)") < 0) {
    273      MESSAGE("Erreur à l'écriture du profil : ");
    274      SSCRUTE(profil1);
    275      ret = -1;
    276    };
    277
    278    /* enregistre la composante n°3 des éléments du profil2 de valr2, et n'utilise ni pas de temps ni n° d'ordre */
    279    if ( MEDchampEcr(fid,maa1,nomcha2,(unsigned char*)valr2p,USER_INTERLACE,nval2,MED_NOGAUSS,
    280                        3,"PROFIL(champ2)",USER_MODE,MED_MAILLE,MED_TRIA6,MED_NOPDT,"",0.0,MED_NONOR) < 0 ) {
    281      MESSAGE("Erreur à l'écriture du champ : ");
    282      SSCRUTE(nomcha2);ISCRUTE(MED_NOPDT);ISCRUTE(MED_NONOR);SSCRUTE(MED_NOPFL);
    283      SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
    284      ret = -1;
    285    };
    286
    287
    288    /* fermeture du fichier */
    289    if ( MEDfermer(fid) < 0 ) ret=-1;
    290
    291    return ret;
    292  }
    293
    294
    295
    296