Back to index

salome-med  6.5.0
MEDcoordLire.cxx
Go to the documentation of this file.
00001 /*************************************************************************
00002 * COPYRIGHT (C) 1999 - 2002  EDF R&D
00003 * THIS LIBRARY IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
00004 * IT UNDER THE TERMS OF THE GNU LESSER GENERAL PUBLIC LICENSE 
00005 * AS PUBLISHED BY THE FREE SOFTWARE FOUNDATION; 
00006 * EITHER VERSION 2.1 OF THE LICENSE, OR (AT YOUR OPTION) ANY LATER VERSION.
00007 *  
00008 * THIS LIBRARY IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
00009 * WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
00010 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
00011 * LESSER GENERAL PUBLIC LICENSE FOR MORE DETAILS.
00012 *
00013 * YOU SHOULD HAVE RECEIVED A COPY OF THE GNU LESSER GENERAL PUBLIC LICENSE
00014 * ALONG WITH THIS LIBRARY; IF NOT, WRITE TO THE FREE SOFTWARE FOUNDATION,
00015 * INC., 59 TEMPLE PLACE, SUITE 330, BOSTON, MA 02111-1307 USA
00016 *
00017 *************************************************************************/
00018 
00019 #include "med_outils.hxx"
00020 #include "med.hxx"
00021 
00022 #include <string.h>
00023 #include <stdlib.h>
00024 
00025 extern int mode_interlace;
00026 
00027 namespace med_2_1{
00028 
00029 med_err 
00030 MEDcoordLire(med_idt fid, char *maa, med_int mdim, med_float *coo,
00031              med_mode_switch mode_coo,med_int numco,
00032              med_int * pfltabtmp, med_size psize, med_repere *type_rep, char *nom, char *unit)
00033 {
00034   med_idt   maaid, noeid, dataset;
00035   med_err   ret;
00036   char      chemin[MED_TAILLE_MAA+MED_TAILLE_NOM+1];
00037   int       i;
00038   med_int   type_rep_int;
00039   med_ssize * pfltab = NULL;
00040 
00041   /*
00042    * On inhibe le gestionnaire d'erreur
00043    */
00044   _MEDmodeErreurVerrouiller();
00045 
00046   /*
00047    * Si le maillage n'existe pas => erreur
00048    * Sinon on recupere sa dimension au passage
00049    */
00050   strcpy(chemin,MED_MAA);
00051   strcat(chemin,maa);
00052   if ((maaid = _MEDdatagroupOuvrir(fid,chemin)) < 0)
00053       return -1;
00054 
00055   /*
00056    * Si le Data Group "NOE" n'existe pas => erreur
00057    */
00058   if ((noeid = _MEDdatagroupOuvrir(maaid,MED_NOM_NOE)) < 0)
00059       return -1;
00060 
00061   /*
00062    * Convertion de med_int en med_ssize
00063    */
00064   if ( psize != MED_NOPF ) {  
00065     pfltab = (med_ssize *) malloc (sizeof(med_ssize)*(size_t)psize);
00066     for (i=0;i<psize;i++)
00067       pfltab[i] = (med_ssize) pfltabtmp[i];
00068   }
00069 
00070   /*
00071    * Lecture du Data Set "COO"
00072    */
00073   if ((ret = _MEDdatasetNumLire(noeid,MED_NOM_COO,MED_REEL64,
00074                                 mode_coo,mdim,numco,
00075                                 psize,pfltab,MED_NOPG,
00076                                 (unsigned char*) coo)) < 0)
00077     return -1;
00078 
00079   
00080 
00081   /*
00082    * On re-ouvre le Data Set "COO" pour y lire des attributs
00083    */
00084   if ((dataset = _MEDdatasetOuvrir(noeid,MED_NOM_COO)) < 0)
00085     return -1;
00086 
00087   /*
00088    * L'attribut "REP"
00089    */
00090   if ((ret = _MEDattrEntierLire(dataset,MED_NOM_REP,&type_rep_int)) < 0)
00091     return -1;
00092   else
00093     *type_rep = (med_repere) type_rep_int;
00094 
00095   /*
00096    * Attribut "NOM"
00097    */
00098   if ((ret = _MEDattrStringLire(dataset,MED_NOM_NOM,mdim*MED_TAILLE_PNOM,
00099                                 nom)) < 0)
00100     return -1;
00101 
00102   /*
00103    * Attribut "UNI"
00104    */
00105   if ((ret = _MEDattrStringLire(dataset,MED_NOM_UNI,mdim*MED_TAILLE_PNOM,
00106                                 unit)) < 0)
00107     return -1;
00108 
00109   /*
00110    * On ferme tout
00111    */
00112   if ( psize != MED_NOPF ) free(pfltab); 
00113   
00114   if ((ret = _MEDdatasetFermer(dataset)) < 0)
00115     return -1;
00116   if ((ret = _MEDdatagroupFermer(noeid)) < 0)
00117     return -1;
00118   if ((ret = _MEDdatagroupFermer(maaid)) < 0)
00119     return -1;
00120 
00121   return 0; 
00122 }
00123 
00124 }