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 }