MEDnGroupe.c

Aller à la documentation de ce fichier.
00001 /*  This file is part of MED.
00002  *
00003  *  COPYRIGHT (C) 1999 - 2015  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 <string.h>
00024 #include <stdlib.h>
00025 
00026 med_int
00027 MEDnGroupe(med_idt fid,char *maa, int indice)
00028 {
00029   med_idt datagroup,famid;
00030   med_err ret;
00031   char chemin[MED_TAILLE_MAA+MED_TAILLE_FAS+MED_TAILLE_FAS_ENTITE+2*MED_TAILLE_NOM+1];
00032   char stockage[MED_TAILLE_MAA+MED_TAILLE_FAS+MED_TAILLE_FAS_ENTITE+2*MED_TAILLE_NOM+1];
00033   med_int n;
00034   int n_tmp;
00035   int num;
00036   char famille[MED_TAILLE_NOM+1];
00037   int nfamnoe,nfammai;
00038 
00039   /*
00040    * On inhibe le gestionnaire d'erreur HDF
00041    */
00042   _MEDmodeErreurVerrouiller();
00043 if (MEDcheckVersion(fid) < 0) return -1;
00044 
00045 
00046   strcpy(chemin,MED_MAA);
00047   strcat(chemin,maa);
00048   strcat(chemin,MED_FAS);
00049 
00050   num = indice - 1;
00051   
00052   /* Acces a la famille :
00053    * nfam = nfamnoe + 1 + nfammai
00054    * Repartition selon l'indice "num" dans le datagroup :
00055    *    - 0..nfammai - 1 : familles des mailles/faces/aretes
00056    *    - nfamai : famille 0
00057    *    - (nfamai + 1)..(nfammai+nfamnoe) : familles de noeuds 
00058    */
00059 
00060   /* On va compter les familles de mailles/faces/aretes */
00061   strcpy(stockage,chemin);
00062   strcat(stockage,MED_FAS_ELEME_NOM);
00063   nfammai = 0;
00064   n_tmp = 0;
00065   if ((ret =_MEDnObjets(fid,stockage,&n_tmp)) == 0) 
00066     nfammai = (med_int ) n_tmp;
00067   strcat(stockage,"/");
00068   
00069   /* Pour la famille 0 */
00070   if (num == nfammai) 
00071     return 0;
00072 
00073   if (num > nfammai) {
00074     /* C'est une famille de noeuds */
00075     strcpy(stockage,chemin);
00076     strcat(stockage,MED_FAS_NOEUD_NOM);
00077     strcat(stockage,"/");
00078     num = num - nfammai - 1;
00079   }
00080       
00081   /* 
00082    * Si le Data Group de la famille n'existe pas => erreur
00083    */
00084   if ((ret = _MEDobjetIdentifier(fid,stockage,num,
00085                                  famille)) < 0)
00086     return -1;
00087   strcat(stockage,famille);
00088   
00089   if ((famid = _MEDdatagroupOuvrir(fid,stockage)) < 0)
00090     return -1;
00091   
00092   if ((datagroup = _MEDdatagroupOuvrir(famid,MED_NOM_GRO)) < 0)
00093     n = 0;
00094   else
00095     {
00096       if ((ret = _MEDattrEntierLire(datagroup,MED_NOM_NBR,&n)) < 0)
00097         return -1;
00098       if ((ret = _MEDdatagroupFermer(datagroup)) < 0)
00099         return -1;
00100     }
00101 
00102   if ((ret = _MEDdatagroupFermer(famid)) < 0)
00103     return -1;
00104 
00105   return (med_int) n;
00106 }

Généré le Thu Oct 8 14:26:16 2015 pour MED fichier par  doxygen 1.6.1