00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 #include <med.h>
00020 #include <med_config.h>
00021 #include <med_outils.h>
00022 #include <string.h>
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 
00035 
00036 
00037 
00038 
00039 
00040 
00041 
00042 
00043  
00044 
00045 med_err
00046 MEDpasdetempsInfo(med_idt fid,char *champ,
00047                   med_entite_maillage type_ent, med_geometrie_element type_geo,
00048                   int indice, med_int * ngauss, med_int * numdt, med_int * numo,
00049                   char * dt_unit, med_float * dt,  char * maa, med_booleen * local, med_int *nmaa)
00050 
00051 {
00052   med_err ret=-1;
00053   med_idt gid=0,datagroup3=0,gid_maa=0,gid_lien=0;
00054   char chemin      [(MED_TAILLE_CHA+MED_TAILLE_NOM+1)+(2*MED_TAILLE_NOM_ENTITE+2)+2*MED_MAX_PARA+1]="";
00055   char chemin_maa  [MED_TAILLE_MAA+MED_TAILLE_NOM+1]="";
00056   char chemin_lien [MED_TAILLE_LIENS+MED_TAILLE_NOM+1]=""; 
00057   int nmaa_i=0;
00058   int num=0;
00059   char tmp1         [MED_TAILLE_NOM_ENTITE+1]="";
00060   char nomdatagroup1[2*MED_TAILLE_NOM_ENTITE+2]="";
00061   char nomdatagroup2[2*MED_MAX_PARA+1]="";
00062 
00063   
00064 
00065 
00066   _MEDmodeErreurVerrouiller();
00067 if (MEDcheckVersion(fid) < 0) return -1;
00068 
00069 
00070   
00071 
00072 
00073   strcpy(chemin,MED_CHA);
00074   strcat(chemin,champ);
00075   strcat(chemin,"/");
00076 
00077   
00078 
00079 
00080 
00081   
00082   
00083   if (_MEDnomEntite(nomdatagroup1,type_ent) < 0) {
00084     MESSAGE("L'entité demandée n'est pas une entité <med_entite_maillage> : ");
00085     SSCRUTE(chemin); ISCRUTE(type_ent); goto ERROR;
00086   };
00087 
00088   if ((type_ent != MED_NOEUD)) {
00089     if (_MEDnomGeometrie30(tmp1,type_geo) < 0) {
00090       MESSAGE("Le type géométrique demandé n'est pas un <med_geometrie_element> : ");
00091       SSCRUTE(chemin); ISCRUTE(type_geo); goto ERROR;
00092     };
00093     strcat(nomdatagroup1,".");
00094     strcat(nomdatagroup1,tmp1);
00095   }
00096   strcat(chemin,nomdatagroup1);
00097   strcat(chemin,"/");
00098 
00099   
00100 
00101 
00102   num = indice - 1;
00103   if (_MEDobjetIdentifier(fid,chemin,num,nomdatagroup2) < 0) {
00104     MESSAGE("Impossible de trouver un groupe à l'indice spécifié : ");
00105     SSCRUTE(chemin); ISCRUTE(num); goto ERROR;
00106   };
00107   
00108   strcat(chemin,nomdatagroup2);
00109   if ((gid = _MEDdatagroupOuvrir(fid,chemin)) < 0) {
00110     MESSAGE("Erreur d'ouverture du datagroup  : ");
00111     SSCRUTE(chemin); goto ERROR;
00112   };
00113   
00114   
00115 
00116 
00117   nmaa_i = 0;
00118   if ( _MEDnObjets(fid,chemin,&nmaa_i) < 0) {
00119     MESSAGE("Impossible d'itérer dans le groupe : ");
00120     SSCRUTE(chemin); goto ERROR;
00121   };
00122   *nmaa = nmaa_i;
00123 
00124   
00125 
00126 
00127   
00128 
00129   if (_MEDattrEntierLire(gid,MED_NOM_NDT,(med_int*) numdt) < 0) {
00130     MESSAGE("Erreur d'ouverture de l'attribut numdt : ");
00131     SSCRUTE(chemin); goto ERROR;
00132   };
00133   
00134   if (_MEDattrFloatLire(gid,MED_NOM_PDT,(med_float*) dt) < 0) {
00135     MESSAGE("Erreur d'ouverture de l'attribut dt : ");
00136     SSCRUTE(chemin); goto ERROR;
00137   };
00138 
00139   if (_MEDattrStringLire(gid,MED_NOM_UNI,MED_TAILLE_PNOM,dt_unit) < 0) {
00140     MESSAGE("Erreur d'ouverture de l'attribut dt_unit : ");
00141     SSCRUTE(chemin); goto ERROR;
00142   };
00143   
00144   if (_MEDattrEntierLire(gid,MED_NOM_NOR,(med_int*) numo) < 0) {
00145     MESSAGE("Erreur d'ouverture de l'attribut numo : ");
00146     SSCRUTE(chemin); goto ERROR;
00147   };
00148 
00149 
00150   
00151   
00152   if (_MEDattrStringLire(gid,MED_NOM_MAI,MED_TAILLE_NOM,maa) < 0) {
00153     MESSAGE("Erreur d'ouverture de l'attribut maa : ");
00154     SSCRUTE(chemin);  goto ERROR;
00155   };
00156 
00157   
00158 
00159 
00160  
00161   if ((datagroup3 = _MEDdatagroupOuvrir(gid,maa)) < 0) {
00162     MESSAGE("Erreur d'ouverture du datagroup lien au maillage : ");
00163     SSCRUTE(chemin); SSCRUTE(maa); goto ERROR;
00164   };
00165   
00166   
00167   strcpy(chemin_maa,MED_MAA);
00168   strcat(chemin_maa,maa);
00169   
00170   if ( (gid_maa = _MEDdatagroupOuvrir(fid,chemin_maa)) < 0)  {
00171     
00172       
00173     strcpy(chemin_lien,MED_LIENS);
00174     strcat(chemin_lien,maa); 
00175     if ((gid_lien = _MEDdatagroupOuvrir(fid,chemin_lien)) < 0) {
00176 
00177 
00178       *local = MED_FAUX;
00179     }
00180   
00181     *local = MED_FAUX;
00182     
00183   } else
00184     
00185     *local = MED_VRAI;
00186     
00187   
00188   if (_MEDattrEntierLire(datagroup3,MED_NOM_NGA,ngauss) < 0) {
00189     MESSAGE("Erreur à la lecture de l'attribut MED_NOM_NGA : ");
00190     ISCRUTE(*ngauss);goto ERROR;
00191   };
00192 
00193 
00194   
00195 
00196 
00197 
00198   ret = 0;
00199 
00200  ERROR:
00201   
00202 
00203   if (gid_lien>0) if (_MEDdatagroupFermer(gid_lien) < 0) {
00204       MESSAGE("Impossible de fermer le datagroup : ");
00205       SSCRUTE(chemin_lien); ret = -1; 
00206   }
00207 
00208   if (gid_maa>0)  if (_MEDdatagroupFermer(gid_maa) < 0) {
00209       MESSAGE("Impossible de fermer le datagroup : ");
00210       ISCRUTE_id(gid_maa); ret = -1; 
00211   }
00212     
00213  
00214   if (datagroup3>0)     if (_MEDdatagroupFermer(datagroup3) < 0) {
00215       MESSAGE("Impossible de fermer le datagroup : ");
00216       ISCRUTE_int(datagroup3); ret = -1; 
00217   }
00218 
00219   if (gid>0)     if (_MEDdatagroupFermer(gid) < 0) {
00220       MESSAGE("Impossible de fermer le datagroup : ");
00221       ISCRUTE_id(gid); ret = -1; 
00222   }
00223   
00224   return ret; 
00225 
00226 
00227 }