      1 /*************************************************************************
      2 * COPYRIGHT (C) 1999 - 2007  EDF R&D, CEA/DEN
      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 #define _a 0.446948490915965
     19 #define _b 0.091576213509771
     20 #define _p1 0.11169079483905
     21 #define _p2 0.0549758718227661
     22
     23 /******************************************************************************
     24  * - Nom du fichier : test10.c
     25  *
     26  * - Description : ecriture de champs de resultats MED
     27  *
     28  *****************************************************************************/
     29
     30 #include <med.h>
     31 #define MESGERR
     32 #include <med_utils.h>
     33
     34 #ifdef DEF_LECT_ECR
     35 #define MODE_ACCES MED_LECTURE_ECRITURE
     36 #elif DEF_LECT_AJOUT
     37 #define MODE_ACCES MED_LECTURE_AJOUT
     38 #else
     39 #define MODE_ACCES MED_CREATION
     40 #endif
     41
     42 #ifndef USER_INTERLACE
     43 #define USER_INTERLACE MED_FULL_INTERLACE
     44 #endif
     45
     46 #define USER_MODE MED_COMPACT
     47
     48 int main (int argc, char **argv)
     49
     50
     51 {
     52   med_err ret=0;
     53   med_idt fid;
     54
     55
     56
     57   /* Maillage support aux champs*/
     58   /* Ces maillages sont vides*/
     59   char maa1[MED_TAILLE_NOM+1]= "maa1";
     60   char maa2[MED_TAILLE_NOM+1]= "maa2";
     61   char * lien_maa2 = "./testfoo.med";
     62   char maa3[MED_TAILLE_NOM+1]= "maa3";
     63
     64
     65   /* Caractéristiques du champ n° 1 sur TRIA6 */
     66   char nomcha1[MED_TAILLE_NOM+1]  = "champ reel";
     67   char comp1[2*MED_TAILLE_PNOM+1] = "comp1           comp2           ";
     68                                    /*12345678901234561234567890123456*/
     69   char unit1[2*MED_TAILLE_PNOM+1] = "unit1           unit2           ";
     70   med_int ncomp1  = 2;
     71   /* Caractéristiques du model n° 1 de localisation des points de gauss pour le champ n°1*/
     72   med_int ngauss1_1 = 6;
     73   char gauss1_1[MED_TAILLE_NOM+1]  = "Model n1";
     74   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 };
     75
     76   /* Constantes */
     77
     78   med_float gscoo1_1[12] = { 2*_b-1, 1-4*_b, 2*_b-1, 2*_b-1, 1-4*_b,
     79                              2*_b-1, 1-4*_a, 2*_a-1, 2*_a-1, 1-4*_a, 2*_a-1, 2*_a-1 };
     80   med_float wg1_1[6] = { 4*_p2, 4*_p2, 4*_p2, 4*_p1, 4*_p1, 4*_p1 };
     81
     82   med_int   nval1_1= 1*6; /*1 valeurs et 6 points de gauss par valeur */
     83   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*/
     84   /* Caractéristiques du model n° 2 de localisation des points de gauss pour le champ n°1*/
     85   med_int ngauss1_2 = 3;
     86   char gauss1_2[MED_TAILLE_NOM+1]  = "Model n2";
     87   med_float gscoo1_2[6] = { -2.0/3,1.0/3, -2.0/3,-2.0/3, 1.0/3,-2.0/3  };
     88   med_float wg1_2[3] = { 2.0/3, 2.0/3, 2.0/3 };
     89   med_int   nval1_2= 2*3; /*2 valeurs et 3 points de gauss par valeur */
     90   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*/
     91   med_float valr1_2p[2*3*2]  = {                              12.0,13.0, 20.0,21.0, 22.0,23.0};  /* 2 composantes*/
     92  /* Caractéristiques du model n° 3 sans points de gauss pour le champ n°1*/
     93   med_int   nval1_3= 6; /*6 valeurs et pas de points de gauss */
     94   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*/
     95   med_float valr1_3p[2*2*2] = {         2.0,3.0, 10.0,11.0                                 };  /* 2 composantes profil1 */
     96
     97   /* Caractéristiques du champ n° 2 */
     98   char nomcha2[MED_TAILLE_NOM+1]  = "champ entier";
     99   char comp2[3*MED_TAILLE_PNOM+1] = "comp1           comp2           comp3           ";
    100                                    /*123456789012345612345678901234561234567890123456*/
    101   char unit2[3*MED_TAILLE_PNOM+1] = "unit1           unit2           unit3           ";
    102   med_int ncomp2  = 3;
    103   med_int nval2 = 5;   /*5 valeurs */
    104   med_int   valr2[5*3  ]  = {0,1,2, 10,11,12, 20,21,22, 30,31,32, 40,41,42};              /* 3 composantes*/
    105   med_int   valr2p[3*3  ] = {0,1,2,           20,21,22,           40,41,42};              /* 3 composantes*/
    106
    107   /* Profils utilisés */
    108   char nomprofil1[MED_TAILLE_NOM+1]  = "PROFIL(champ(1))";
    109   char nomprofil2[MED_TAILLE_NOM+1]  = "PROFIL(champ2)";
    110   med_int profil1[2] = { 2, 3 };
    111   med_int profil2[3] = { 1, 3, 5 };
    112
    113
    114   /* Caractéristiques du champ n° 3 */
    115   char nomcha3[MED_TAILLE_NOM+1]  = "champ entier 3";
    116   char comp3[3*MED_TAILLE_PNOM+1] = "comp1           comp2           ";
    117                                    /*123456789012345612345678901234561234567890123456*/
    118   char unit3[3*MED_TAILLE_PNOM+1] = "unit1           unit2           ";
    119   med_int ncomp3  = 2;
    120   med_int nval3 = 5*4;     /*5 valeurs et 4 noeuds par element*/
    121   med_int valr3[5*4*2]   = {0,1, 10,11, 20,21, 30,31,
    122                             40,41, 50,51, 60,61, 70,71,
    123                             80,81, 90,91, 100,101, 110,111,
    124                             120,121, 130,131, 140,141, 150,151,
    125                             160,161, 170,171, 180,181, 190,191};    /* 2 composantes*/
    126   med_int valr3p[3*4*2]  = {0,1, 10,11, 20,21, 30,31,
    127                             80,81, 90,91, 100,101, 110,111,
    128                             160,161, 170,171, 180,181, 190,191};    /* 2 composantes*/
    129
    130
    131
    132
    133
    134
    135   /* ouverture du fichier */
    136   if ((fid = MEDouvrir("test10.med",MODE_ACCES)) < 0){
    137     MESSAGE("Erreur à l'ouverture du fichier : ");
    138     return -1;
    139   }
    140
    141   /* creation de maa1 de dimension 3*/
    142   if ( MEDmaaCr(fid,maa1,3,MED_NON_STRUCTURE,"Maillage vide") < 0) {
    143     MESSAGE("Erreur à la création du maillage : ");SSCRUTE(maa1);
    144     ret = -1;
    145   };
    146
    147   /* creation de maa3 de dimension 3*/
    148   if ( MEDmaaCr(fid,maa3,3,MED_NON_STRUCTURE,"Maillage vide") < 0) {
    149     MESSAGE("Erreur à la création du maillage : ");SSCRUTE(maa3);
    150     ret = -1;
    151   };
    152
    153   /* creation du champ réel n°1 */
    154   if ( MEDchampCr(fid,nomcha1,MED_FLOAT64,comp1,unit1,ncomp1) < 0) {
    155     MESSAGE("Erreur à la création du champ : ");SSCRUTE(nomcha1);
    156     ret = -1;
    157   };
    158
    159   /* creation du champ entier n°2 */
    160   if ( MEDchampCr(fid,nomcha2,MED_INT32,comp2,unit2,ncomp2) < 0) {
    161     MESSAGE("Erreur à la création du champ : ");SSCRUTE(nomcha2);
    162     ret = -1;
    163   };
    164
    165   /* creation du lien au fichier distant contenant maa2 */
    166   if (MEDlienEcr(fid,lien_maa2,maa2) < 0) {
    167     MESSAGE("Erreur à la création du lien : ");SSCRUTE(lien_maa2);
    168     ret = -1;
    169   };
    170
    171   /* creation de la localisation des points de Gauss modèle n°1 */
    172   if (MEDgaussEcr(fid, MED_TRIA6, refcoo1, USER_INTERLACE,
    173                   ngauss1_1, gscoo1_1, wg1_1, gauss1_1) < 0) {
    174     MESSAGE("Erreur à la création du modèle n°1 : ");SSCRUTE(gauss1_1);
    175     ret = -1;
    176   };
    177
    178    /* creation de la localisation des points de Gauss modèle n°2 */
    179   if (MEDgaussEcr(fid, MED_TRIA6, refcoo1, USER_INTERLACE,
    180                   ngauss1_2, gscoo1_2, wg1_2, gauss1_2) < 0) {
    181     MESSAGE("Erreur à la création du modèle n°1 : ");SSCRUTE(gauss1_2);
    182     ret = -1;
    183   };
    184
    185   /* ecriture du champ n°1*/
    186   /* enregistre uniquement les composantes n°2 de valr1_1, et n'utilise ni pas de temps ni n° d'ordre*/
    187   if ( MEDchampEcr(fid,maa1,nomcha1,(unsigned char*)valr1_1,USER_INTERLACE,nval1_1,gauss1_1,
    188                    2,MED_NOPFL,MED_NO_PFLMOD,MED_MAILLE,MED_TRIA6,MED_NOPDT,"",0.0,MED_NONOR ) < 0) {
    189     MESSAGE("Erreur à l'écriture du champ : ");
    190     SSCRUTE(nomcha1);ISCRUTE(MED_NOPDT);ISCRUTE(MED_NONOR);SSCRUTE(MED_NOPFL);
    191     SSCRUTE(maa1);
    192     ret = -1;
    193   };
    194
    195
    196   /* enregistre uniquement les composantes n°1 de valr1_1, et n'utilise ni pas de temps ni n° d'ordre */
    197   if ( MEDchampEcr(fid,maa1,nomcha1,(unsigned char*)valr1_1,USER_INTERLACE,nval1_1,gauss1_1,
    198                       1,MED_NOPFL,MED_NO_PFLMOD,MED_MAILLE,MED_TRIA6,MED_NOPDT,"",0.0,MED_NONOR) < 0) {
    199     MESSAGE("Erreur à l'écriture du champ : ");
    200     SSCRUTE(nomcha1);ISCRUTE(MED_NOPDT);ISCRUTE(MED_NONOR);SSCRUTE(MED_NOPFL);
    201     SSCRUTE(maa1);
    202     ret = -1;
    203   };
    204
    205
    206   /* enregistre uniquement les composantes n°1 de valr1_2, au pas de temps n°1(5.5), n'utilise pas de n°d'ordre*/
    207   /* ce champ repose sur le maillage maa2 qui est distant */
    208   if ( MEDchampEcr(fid,maa2,nomcha1,(unsigned char*)valr1_2,USER_INTERLACE,nval1_2,gauss1_2,
    209                       1,MED_NOPFL,MED_NO_PFLMOD,MED_MAILLE,MED_TRIA6,1,"ms",5.5,MED_NONOR) < 0) {
    210     MESSAGE("Erreur à l'écriture du champ : ");
    211     SSCRUTE(nomcha1);ISCRUTE(1);ISCRUTE(MED_NONOR);SSCRUTE(MED_NOPFL);
    212     SSCRUTE(maa2);
    213     ret = -1;
    214   };
    215
    216   /* enregistre uniquement les composantes n°2 de valr1_2, au pas de temps n°1(5.5), n'utilise pas de n°d'ordre*/
    217   /* ce champ repose sur le maillage maa1 qui est local */
    218   if ( MEDchampEcr(fid,maa1,nomcha1,(unsigned char*)valr1_1,USER_INTERLACE,nval1_1,gauss1_1,
    219                       2,MED_NOPFL,MED_NO_PFLMOD,MED_MAILLE,MED_TRIA6,1,"ms",5.5,MED_NONOR) < 0) {
    220     MESSAGE("Erreur à l'écriture du champ : ");
    221     SSCRUTE(nomcha1);ISCRUTE(1);ISCRUTE(MED_NONOR);SSCRUTE(MED_NOPFL);
    222     SSCRUTE(maa1);
    223     ret = -1;
    224   };
    225
    226     /* enregistre uniquement les composantes n°1 de valr1_1, au pas de temps n°1(5.5), et n°d'itération n°2*/
    227     /* ce champ repose sur le maillage maa3 qui est local */
    228   if ( MEDchampEcr(fid,maa3,nomcha1,(unsigned char*)valr1_2,USER_INTERLACE,nval1_2,gauss1_2,
    229                    1,MED_NOPFL,MED_NO_PFLMOD,MED_MAILLE,MED_TRIA6,1,"ms",5.5,2) < 0) {
    230     MESSAGE("Erreur à l'écriture du champ : ");
    231     SSCRUTE(nomcha1);ISCRUTE(1);ISCRUTE(2);SSCRUTE(MED_NOPFL);
    232     SSCRUTE(maa3);
    233     ret = -1;
    234   };
    235
    236   /* Creation d'un profil (selection  du deuxieme élément de valr1_1) */
    237   /* On n'utilise que la première valeur (2) du profil */
    238   if ( MEDprofilEcr(fid,profil1,1,nomprofil1) < 0) {
    239     MESSAGE("Erreur à l'écriture du profil : ");
    240     SSCRUTE(profil1);
    241     ret = -1;
    242   };
    243
    244
    245   /* enregistre toutes les composantes du deuxième élément de valr1_1 (premier élément en stockage compact de valr1p),
    246      au pas de temps n°2(5.6), et n°d'itération n°2*/
    247   if ( MEDchampEcr(fid,maa1, nomcha1,(unsigned char*)valr1_3p,USER_INTERLACE,nval1_3,MED_NOGAUSS,
    248                    MED_ALL,nomprofil1,USER_MODE,MED_MAILLE,MED_TRIA6,2,"ms",5.6,2) < 0) {
    249     MESSAGE("Erreur à l'écriture du champ : ");
    250     SSCRUTE(nomcha1);ISCRUTE(2);ISCRUTE(2);SSCRUTE(nomprofil1);
    251     SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
    252     ret = -1;
    253   };
    254
    255   /* enregistre toutes les composantes du deuxième élément de valr1_1 (premier élément en stockage compact de valr1p),
    256      au pas de temps n°2(5.6), et n°d'itération n°2 */
    257   if ( MEDchampEcr(fid,maa2, nomcha1,(unsigned char*)valr1_2p,USER_INTERLACE,nval1_2,gauss1_2,
    258                    MED_ALL,nomprofil1,USER_MODE,MED_MAILLE,MED_TRIA6,2,"ms",5.6,2) < 0) {
    259     MESSAGE("Erreur à l'écriture du champ : ");
    260     SSCRUTE(nomcha1);ISCRUTE(2);ISCRUTE(2);SSCRUTE(nomprofil1);
    261     SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
    262     ret = -1;
    263   };
    264
    265
    266   /* 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*/
    267   if ( MEDchampEcr(fid,maa1,nomcha1,(unsigned char*)valr1_3p,USER_INTERLACE,nval1_3,MED_NOGAUSS,
    268                    2,nomprofil1,USER_MODE,MED_MAILLE,MED_TRIA6,3,"ms",5.7,2) < 0)  {
    269     MESSAGE("Erreur à l'écriture du champ : ");
    270     SSCRUTE(nomcha1);ISCRUTE(2);ISCRUTE(2);SSCRUTE(nomprofil1);
    271     SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
    272     ret = -1;
    273   };
    274
    275
    276
    277   /* Ecriture du champ n° 2 */
    278   /* TESTER EGALEMENT EN MODE FULL_INTERLACE EN MODIFIANT LA SIGNATURE DE LA ROUTINE */
    279
    280   /* enregistre la composante n°1 des éléments de valr2, et n'utilise ni pas de temps ni n° d'ordre */
    281   if (MEDchampEcr(fid,maa1,nomcha2,(unsigned char*)valr2,USER_INTERLACE,nval2,MED_NOGAUSS,
    282                   1,MED_NOPFL,MED_NO_PFLMOD,MED_ARETE,MED_SEG2,MED_NOPDT,"",0.0,MED_NONOR) < 0)  {
    283     MESSAGE("Erreur à l'écriture du champ : ");
    284     SSCRUTE(nomcha2);ISCRUTE(MED_NOPDT);ISCRUTE(MED_NONOR);SSCRUTE(MED_NOPFL);
    285     SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
    286     ret = -1;
    287   };
    288
    289
    290   /* enregistre la composante n°2 des éléments de valr2, et n'utilise ni pas de temps ni n° d'ordre */
    291   /*        pour des raisons de complétude des tests on change le type d'élément (aucun sens phys.))*/
    292   if (MEDchampEcr(fid,maa1,nomcha2,(unsigned char*)valr2,USER_INTERLACE,nval2,MED_NOGAUSS,
    293                       2,MED_NOPFL,MED_NO_PFLMOD,MED_NOEUD,0,MED_NOPDT,"",0.0,MED_NONOR) < 0)  {
    294     MESSAGE("Erreur à l'écriture du champ : ");
    295     SSCRUTE(nomcha2);ISCRUTE(MED_NOPDT);ISCRUTE(MED_NONOR);SSCRUTE(MED_NOPFL);
    296     SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
    297     ret = -1;
    298   };
    299
    300   /* enregistre la composante n°3 des éléments de valr2, et n'utilise ni pas de temps ni n° d'ordre */
    301   /*        pour des raisons de complétude des tests on change le type d'élément (aucun sens phys.))*/
    302   if ( MEDchampEcr(fid,maa1,nomcha2,(unsigned char*)valr2,USER_INTERLACE,nval2,MED_NOGAUSS,
    303                    3,MED_NOPFL,MED_NO_PFLMOD,MED_FACE,MED_TRIA6,MED_NOPDT,"",0.0,MED_NONOR) < 0 ) {
    304     MESSAGE("Erreur à l'écriture du champ : ");
    305     SSCRUTE(nomcha2);ISCRUTE(MED_NOPDT);ISCRUTE(MED_NONOR);SSCRUTE(MED_NOPFL);
    306     SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
    307     ret = -1;
    308   };
    309
    310   /* Creation d'un profil (selection  des éléments 1,3,5 de valr2) */
    311   /* On utilise les trois valeurs du profil */
    312   if ( MEDprofilEcr(fid,profil2,3,nomprofil2) < 0) {
    313     MESSAGE("Erreur à l'écriture du profil : ");
    314     SSCRUTE(nomprofil2);
    315     ret = -1;
    316   };
    317
    318   /* enregistre la composante n°3 des éléments du profil2 de valr2, et n'utilise ni pas de temps ni n° d'ordre */
    319   if ( MEDchampEcr(fid,maa1,nomcha2,(unsigned char*)valr2p,USER_INTERLACE,nval2,MED_NOGAUSS,
    320                       3,nomprofil2,USER_MODE,MED_MAILLE,MED_TRIA6,MED_NOPDT,"",0.0,MED_NONOR) < 0 ) {
    321     MESSAGE("Erreur à l'écriture du champ : ");
    322     SSCRUTE(nomcha2);ISCRUTE(MED_NOPDT);ISCRUTE(MED_NONOR);SSCRUTE(MED_NOPFL);
    323     SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
    324     ret = -1;
    325   };
    326
    327   /* creation du champ entier n°3 */
    328   if ( MEDchampCr(fid,nomcha3,MED_INT32,comp3,unit3,ncomp3) < 0) {
    329     MESSAGE("Erreur à la création du champ : ");SSCRUTE(nomcha3);
    330     ret = -1;
    331   };
    332
    333   /* Ecriture du champ n° 3 */
    334
    335   /* enregistre la composante n°1 des éléments de valr3, et n'utilise ni pas de temps ni n° d'ordre */
    336   if (MEDchampEcr(fid,maa1,nomcha3,(unsigned char*)valr3,USER_INTERLACE,nval3,MED_NOGAUSS,
    337                   1,MED_NOPFL,MED_NO_PFLMOD,MED_NOEUD_MAILLE,MED_QUAD4,MED_NOPDT,"",0.0,MED_NONOR) < 0)  {
    338     MESSAGE("Erreur à l'écriture du champ : ");
    339     SSCRUTE(nomcha3);ISCRUTE(MED_NOPDT);ISCRUTE(MED_NONOR);SSCRUTE(MED_NOPFL);
    340     SSCRUTE(maa1);SSCRUTE(MED_NOLIEN);
    341     ret = -1;
    342   };
    343
    344   /* enregistre les composantes des éléments de valr3, et n'utilise ni pas de temps ni n° d'ordre */
    345   if (MEDchampEcr(fid,maa2,nomcha3,(unsigned char*)valr3,USER_INTERLACE,nval3,MED_NOGAUSS,
    346                   MED_ALL,MED_NOPFL,MED_NO_PFLMOD,MED_NOEUD_MAILLE,MED_QUAD4,MED_NOPDT,"",0.0,MED_NONOR) < 0)  {
    347     MESSAGE("Erreur à l'écriture du champ : ");
    348     SSCRUTE(nomcha3);ISCRUTE(MED_NOPDT);ISCRUTE(MED_NONOR);SSCRUTE(MED_NOPFL);
    349     SSCRUTE(maa2);SSCRUTE(MED_NOLIEN);
    350     ret = -1;
    351   };
    352
    353   /* enregistre les composantes des éléments de valr3, et n'utilise ni pas de temps ni n° d'ordre */
    354   if (MEDchampEcr(fid,maa3,nomcha3,(unsigned char*)valr3p,USER_INTERLACE,nval3,MED_NOGAUSS,
    355                   MED_ALL,nomprofil2,USER_MODE,MED_NOEUD_MAILLE,MED_QUAD4,MED_NOPDT,"",0.0,MED_NONOR) < 0)  {
    356     MESSAGE("Erreur à l'écriture du champ : ");
    357     SSCRUTE(nomcha3);ISCRUTE(MED_NOPDT);ISCRUTE(MED_NONOR);SSCRUTE(nomprofil2);
    358     SSCRUTE(maa3);SSCRUTE(MED_NOLIEN);
    359     ret = -1;
    360   };
    361
    362
    363   /* fermeture du fichier */
    364   if ( MEDfermer(fid) < 0 ) ret=-1;
    365
    366   return ret;
    367 }
    368
    369
    370
    371