# MEDindicesCoordLire.c

Aller à la documentation de ce fichier.

    00001 /*  This file is part of MED.
    00002  *
    00003  *  COPYRIGHT (C) 1999 - 2011  EDF R&D, CEA/DEN
    00004  *  MED is free software: you can redistribute it and/or modify
    00005  *  it under the terms of the GNU Lesser General Public License as published by
    00006  *  the Free Software Foundation, either version 3 of the License, or
    00007  *  (at your option) any later version.
    00008  *
    00009  *  MED is distributed in the hope that it will be useful,
    00010  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
    00011  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    00012  *  GNU Lesser General Public License for more details.
    00013  *
    00014  *  You should have received a copy of the GNU Lesser General Public License
    00015  *  along with MED.  If not, see <http://www.gnu.org/licenses/>.
    00016  */
    00017
    00018
    00019 #include <med.h>
    00020 #include <med_config.h>
    00021 #include <med_outils.h>
    00022
    00023 #include <stdlib.h>
    00024 #include <string.h>
    00025
    00026 med_err
    00027 MEDindicesCoordLire(med_idt fid,char *maillage,med_int mdim,med_float *indices,
    00028                    med_int n,med_int axe,char *comp,char *unit)
    00029 {
    00030   med_idt maaid, noeid, dataset;
    00031   med_err ret;
    00032   char chemin[MED_TAILLE_MAA+MED_TAILLE_NOM+1];
    00033   char nom_dataset[MED_TAILLE_NOM_ENTITE+1];
    00034   med_int att;
    00035   med_maillage maillage_type;
    00036   med_type_grille type;
    00037
    00038   /*
    00039    * Si axe > mdim => erreur
    00040    */
    00041   if (axe > mdim)
    00042     return -1;
    00043
    00044   /*
    00045    * On inhibe le gestionnaire d'erreur HDF
    00046    */
    00047   _MEDmodeErreurVerrouiller();
    00048 if (MEDcheckVersion(fid) < 0) return -1;
    00049
    00050
    00051   /*
    00052    * Si le maillage n'existe pas => erreur
    00053    */
    00054   strcpy(chemin,MED_MAA);
    00055   strcat(chemin,maillage);
    00056   if ((maaid = _MEDdatagroupOuvrir(fid,chemin)) < 0)
    00057       return -1;
    00058
    00059   /*
    00060    * Si le maillage est de type MED_NON_STRUCTURE => erreur
    00061    */
    00062   if ((ret = _MEDattrEntierLire(maaid,MED_NOM_TYP,&att)) < 0)
    00063     return -1;
    00064   maillage_type = (med_maillage) att;
    00065   if (maillage_type == MED_NON_STRUCTURE)
    00066     return -1;
    00067
    00068   /*
    00069    * Si la grille n'est pas de type MED_GRILLE_CARTESIENNE ou
    00070    * MED_GRILLE_POLAIRE => erreur
    00071    */
    00072   if ((ret = _MEDattrEntierLire(maaid,MED_NOM_GTY,&att)) < 0)
    00073     return -1;
    00074   type = (med_type_grille) att;
    00075   if ((type != MED_GRILLE_CARTESIENNE) && (type != MED_GRILLE_POLAIRE))
    00076     return -1;
    00077
    00078   /*
    00079    * Si le groupe HDF "NOE" n'existe pas => erreur
    00080    */
    00081   if ((noeid = _MEDdatagroupOuvrir(maaid,MED_NOM_NOE)) < 0)
    00082     return -1;
    00083
    00084   /*
    00085    * On ecrit le tableau d'indice dans un dataset HDF
    00086    */
    00087   switch(axe) {
    00088
    00089   case 1 :
    00090     strcpy(nom_dataset,MED_NOM_IN1);
    00091     break;
    00092
    00093   case 2 :
    00094     strcpy(nom_dataset,MED_NOM_IN2);
    00095     break;
    00096
    00097   case 3 :
    00098     strcpy(nom_dataset,MED_NOM_IN3);
    00099     break;
    00100
    00101   default :
    00102     return -1;
    00103
    00104   }
    00105
    00106   if ((ret = _MEDdatasetNumLire(noeid,nom_dataset,MED_FLOAT64,MED_FULL_INTERLACE,1,MED_ALL,MED_NOPF,MED_NO_PFLMOD,MED_PFL_NON_COMPACT,0,
    00107                                 MED_NOPG,0,(unsigned char*) indices)) < 0)
    00108     return -1;
    00109
    00110   /*
    00111    * On re-ouvre le dataset HDF pour y placer des attributs
    00112    */
    00113   if ((dataset = _MEDdatasetOuvrir(noeid,nom_dataset)) < 0)
    00114     return -1;
    00115
    00116   /*
    00117    * Attribut "NOM" (nom de la composante)
    00118    */
    00119   if ((ret = _MEDattrStringLire(dataset,MED_NOM_NOM,MED_TAILLE_PNOM,comp)) < 0)
    00120     return -1;
    00121
    00122   /*
    00123    * Attribut "UNI" (unite de la composante)
    00124    */
    00125   if ((ret = _MEDattrStringLire(dataset,MED_NOM_UNI,MED_TAILLE_PNOM,unit)) < 0)
    00126     return -1;
    00127
    00128   /*
    00129    * On ferme tout
    00130    */
    00131   if ((ret = _MEDdatasetFermer(dataset)) < 0)
    00132     return -1;
    00133   if ((ret = _MEDdatagroupFermer(noeid)) < 0)
    00134     return -1;
    00135   if ((ret = _MEDdatagroupFermer(maaid)) < 0)
    00136     return -1;
    00137
    00138   return 0;
    00139 }