]> SALOME platform Git repositories - modules/kernel.git/blob - src/MEDWrapper/MED_Wrapper.cxx
Salome HOME
PR: merge from tag mergeto_trunk_17Jan05
[modules/kernel.git] / src / MEDWrapper / MED_Wrapper.cxx
1 //  Copyright (C) 2003  CEA/DEN, EDF R&D
2 //
3 //
4 //
5 //  File   : VISU_DatConvertor.cxx
6 //  Author : Alexey PETROV
7 //  Module : VISU
8
9 #include "MED_Wrapper.hxx"
10 #include "MED_Utilities.hxx"
11
12 using namespace std;
13 using namespace MED;
14
15 #ifdef _DEBUG_
16 static int MYDEBUG = 1;
17 #else
18 static int MYDEBUG = 0;
19 #endif
20
21
22
23 //---------------------------------------------------------------
24 static med_geometrie_element NODEGEOM[1] = {MED_POINT1};
25
26 static med_geometrie_element EDGEGEOM[MED_NBR_GEOMETRIE_ARETE] = {
27   MED_SEG2, MED_SEG3
28 };
29
30 static med_geometrie_element FACEGEOM[MED_NBR_GEOMETRIE_FACE] = {
31   MED_TRIA3, MED_QUAD4, MED_TRIA6, MED_QUAD8
32 };
33
34 static med_geometrie_element  CELLGEOM[MED_NBR_GEOMETRIE_MAILLE] = {
35   MED_POINT1, MED_SEG2, MED_SEG3, MED_TRIA3,
36   MED_QUAD4, MED_TRIA6, MED_QUAD8, MED_TETRA4,
37   MED_PYRA5, MED_PENTA6, MED_HEXA8, MED_TETRA10, 
38   MED_PYRA13, MED_PENTA15, MED_HEXA20
39 };
40
41 void GetEntity2Geom(med_entite_maillage theEntity, med_geometrie_element*& theVector, int* theEnd){
42   switch(theEntity){
43   case MED_MAILLE: theVector = CELLGEOM; *theEnd = MED_NBR_GEOMETRIE_MAILLE; break;
44   case MED_FACE: theVector = FACEGEOM; *theEnd = MED_NBR_GEOMETRIE_FACE; break;
45   case MED_ARETE: theVector = EDGEGEOM; *theEnd = MED_NBR_GEOMETRIE_ARETE; break;
46   case MED_NOEUD: theVector = NODEGEOM; *theEnd = 1; break;
47   default:
48     EXCEPTION(runtime_error,"GetEntity2Geom - theEntity == "<<theEntity<<" is uncorrect");
49   }
50 }
51
52
53 //---------------------------------------------------------------
54 TFile::TFile(const std::string& theFileName): 
55   myFid(0), 
56   myCount(0),
57   myFileName(strdup(theFileName.c_str()))
58 {}
59
60 TFile::~TFile(){ 
61   free(myFileName);
62   Close();
63 }
64
65
66 void TFile::Open(med_mode_acces theMode){
67   if(myCount++ == 0){
68     myFid = MEDouvrir(myFileName,theMode);
69     if(myFid < 0)
70       EXCEPTION(runtime_error,"TFile - MEDouvrir('"<<myFileName<<"',"<<theMode<<")");
71   }
72 }
73  
74 void TFile::Close(){ 
75   if(--myCount == 0) {
76     MEDfermer(myFid);
77   }
78 }
79
80 const med_idt& TFile::Id() const { 
81   if(myFid < 0)
82     EXCEPTION(runtime_error,"TFile - GetFid() < 0");
83   return myFid;
84 }
85
86
87 //---------------------------------------------------------------
88 TWrapper::TWrapper(const std::string& theFileName): 
89   myFile(theFileName)
90 {}
91
92
93 med_int TWrapper::GetNbMeshes(){
94   TFileWrapper aFileWrapper(myFile,MED_LECT);
95
96   return MEDnMaa(myFile.Id());
97 }
98
99
100 void TWrapper::GetMeshInfo(med_int theMeshId, TMeshInfo& theInfo){
101   TFileWrapper aFileWrapper(myFile,MED_LECT);
102
103   med_err ret = MEDmaaInfo(myFile.Id(),
104                            theMeshId,
105                            &theInfo.myName[0],
106                            &theInfo.myDim);
107   if(ret < 0)
108     EXCEPTION(runtime_error,"GetMeshInfo - MEDmaaInfo(...)");
109 }
110
111
112 void TWrapper::SetMeshInfo(const TMeshInfo& theInfo){
113   med_err ret = -1;
114   try{
115     TFileWrapper aFileWrapper(myFile,MED_ECRI);
116     
117     TMeshInfo& anInfo = const_cast<TMeshInfo&>(theInfo);
118     ret = MEDmaaCr(myFile.Id(),
119                    &anInfo.myName[0],
120                    anInfo.myDim);
121   }catch(...){}
122   if(ret < 0){
123     TFileWrapper aFileWrapper(myFile,MED_REMP);
124     
125     TMeshInfo& anInfo = const_cast<TMeshInfo&>(theInfo);
126     ret = MEDmaaCr(myFile.Id(),
127                    &anInfo.myName[0],
128                    anInfo.myDim);
129   }
130   if(ret < 0)
131     EXCEPTION(runtime_error,"SetMeshInfo - MEDmaaCr(...)");
132 }
133
134
135 med_int TWrapper::GetNbFamilies(const TMeshInfo& theInfo){
136   TFileWrapper aFileWrapper(myFile,MED_LECT);
137
138   TMeshInfo& anInfo = const_cast<TMeshInfo&>(theInfo);
139   return MEDnFam(myFile.Id(),
140                  &anInfo.myName[0],
141                  0,
142                  MED_FAMILLE);
143 }
144
145
146 med_int TWrapper::GetNbFamAttr(med_int theFamId, const TMeshInfo& theInfo){
147   TFileWrapper aFileWrapper(myFile,MED_LECT);
148
149   TMeshInfo& anInfo = const_cast<TMeshInfo&>(theInfo);
150   return MEDnFam(myFile.Id(),
151                  &anInfo.myName[0],
152                  theFamId,
153                  MED_ATTR);
154 }
155
156
157 med_int TWrapper::GetNbFamGroup(med_int theFamId, const TMeshInfo& theInfo){
158   TFileWrapper aFileWrapper(myFile,MED_LECT);
159
160   TMeshInfo& anInfo = const_cast<TMeshInfo&>(theInfo);
161   return MEDnFam(myFile.Id(),
162                  &anInfo.myName[0],
163                  theFamId,
164                  MED_GROUPE);
165 }
166
167
168 void TWrapper::GetFamilyInfo(med_int theFamId, TFamilyInfo& theInfo){
169   TFileWrapper aFileWrapper(myFile,MED_LECT);
170
171   TMeshInfo& aMeshInfo = *theInfo.myMeshInfo;
172
173   med_err ret = MEDfamInfo(myFile.Id(),
174                            &aMeshInfo.myName[0],
175                            theFamId,
176                            &theInfo.myName[0],
177                            &theInfo.myId,
178                            &theInfo.myAttrId[0],
179                            &theInfo.myAttrVal[0],
180                            &theInfo.myAttrDesc[0],
181                            &theInfo.myNbAttr,
182                            &theInfo.myGroupNames[0],
183                            &theInfo.myNbGroup);
184   if(ret < 0)
185     EXCEPTION(runtime_error,"GetFamilyInfo - MEDfamInfo(...)");
186 }
187
188
189 void TWrapper::SetFamilyInfo(const TFamilyInfo& theInfo){
190   TFileWrapper aFileWrapper(myFile,MED_ECRI);
191
192   TFamilyInfo& anInfo = const_cast<TFamilyInfo&>(theInfo);
193   TMeshInfo& aMeshInfo = *anInfo.myMeshInfo;
194
195   med_err ret = MEDfamCr(myFile.Id(),
196                          &aMeshInfo.myName[0],
197                          &anInfo.myName[0],
198                          anInfo.myId,
199                          &anInfo.myAttrId[0],
200                          &anInfo.myAttrVal[0],
201                          &anInfo.myAttrDesc[0],
202                          anInfo.myNbAttr,
203                          &anInfo.myGroupNames[0],
204                          anInfo.myNbGroup);
205   if(ret < 0)
206     EXCEPTION(runtime_error,"SetFamilyInfo - MEDfamCr(...)");
207 }
208
209
210 med_int TWrapper::GetNbNodes(const TMeshInfo& theMeshInfo){
211   TFileWrapper aFileWrapper(myFile,MED_LECT);
212
213   TMeshInfo& aMeshInfo = const_cast<TMeshInfo&>(theMeshInfo);
214
215   return MEDnEntMaa(myFile.Id(),
216                     &aMeshInfo.myName[0],
217                     MED_COOR,MED_NOEUD,
218                     med_geometrie_element(0),
219                     med_connectivite(0));
220 }
221
222
223 void TWrapper::GetNodeInfo(TNodeInfo& theInfo){
224   TFileWrapper aFileWrapper(myFile,MED_LECT);
225
226   TMeshInfo& aMeshInfo = *theInfo.myMeshInfo;
227
228   med_err ret = MEDnoeudsLire(myFile.Id(),
229                               &aMeshInfo.myName[0],
230                               aMeshInfo.myDim,
231                               &theInfo.myCoord[0],
232                               MED_FULL_INTERLACE,
233                               &theInfo.mySystem,
234                               &theInfo.myCoordNames[0],
235                               &theInfo.myCoordUnits[0],
236                               &theInfo.myElemNames[0],
237                               &theInfo.myIsElemNames,
238                               &theInfo.myElemNum[0],
239                               &theInfo.myIsElemNum,
240                               &theInfo.myFamNum[0],
241                               theInfo.myNbElem);
242   if(ret < 0)
243     EXCEPTION(runtime_error,"GetNodeInfo - MEDnoeudsLire(...)");
244 }
245
246
247 void TWrapper::SetNodeInfo(const TNodeInfo& theInfo)
248 {
249   TFileWrapper aFileWrapper(myFile,MED_ECRI);
250
251   TNodeInfo& anInfo = const_cast<TNodeInfo&>(theInfo);
252   TMeshInfo& aMeshInfo = *anInfo.myMeshInfo;
253
254   med_err ret = MEDnoeudsEcr(myFile.Id(),
255                              &aMeshInfo.myName[0],
256                              aMeshInfo.myDim,
257                              &anInfo.myCoord[0],
258                              MED_FULL_INTERLACE,
259                              anInfo.mySystem,
260                              &anInfo.myCoordNames[0],
261                              &anInfo.myCoordUnits[0],
262                              &anInfo.myElemNames[0],
263                              anInfo.myIsElemNames,
264                              &anInfo.myElemNum[0],
265                              anInfo.myIsElemNum,
266                              &anInfo.myFamNum[0],
267                              anInfo.myNbElem,
268                              MED_REMP);
269   if(ret < 0)
270     EXCEPTION(runtime_error,"SetNodeInfo - MEDnoeudsEcr(...)");
271 }
272
273
274 TEntityInfo TWrapper::GetEntityInfo(const TMeshInfo& theMeshInfo){
275   TFileWrapper aFileWrapper(myFile,MED_LECT);
276
277   TEntityInfo anInfo;
278   if(med_int aNbElem = GetNbNodes(theMeshInfo)){
279     anInfo[MED_NOEUD][MED_POINT1] = aNbElem;
280     med_entite_maillage anEntityVector[3] = {MED_MAILLE, MED_FACE, MED_ARETE};
281     for(med_int iEntity = 0; iEntity < 3; iEntity++){
282       med_int iGeomEnd;
283       med_entite_maillage& anEntity = anEntityVector[iEntity];
284       med_geometrie_element* aGeomVector;
285       GetEntity2Geom(anEntity,aGeomVector,&iGeomEnd);
286       for(med_int iGeom = 0; iGeom < iGeomEnd; iGeom++) {
287         med_geometrie_element& aGeom = aGeomVector[iGeom];
288         if(med_int aNb = GetNbCells(theMeshInfo,anEntity,aGeom)){
289           anInfo[anEntity][aGeom] = aNb;
290         }
291       }
292     }
293   }
294   return anInfo;
295 }
296
297
298 med_int TWrapper::GetNbCells(const TMeshInfo& theMeshInfo, 
299                              med_entite_maillage theTEntity, 
300                              med_geometrie_element theTGeom, 
301                              med_connectivite theTConn)
302 {
303   TFileWrapper aFileWrapper(myFile,MED_LECT);
304
305   TMeshInfo& aMeshInfo = const_cast<TMeshInfo&>(theMeshInfo);
306
307   return MEDnEntMaa(myFile.Id(),
308                     &aMeshInfo.myName[0],
309                     MED_CONN,
310                     theTEntity,
311                     theTGeom,
312                     theTConn); 
313 }
314
315
316 void TWrapper::GetCellInfo(TCellInfo& theInfo)
317 {
318   TFileWrapper aFileWrapper(myFile,MED_LECT);
319
320   TMeshInfo& aMeshInfo = *theInfo.myMeshInfo;
321   med_int aNbElem = theInfo.myElemNum.size();
322
323   med_err ret = MEDelementsLire(myFile.Id(),
324                                 &aMeshInfo.myName[0],
325                                 aMeshInfo.myDim,
326                                 &theInfo.myConn[0],
327                                 MED_FULL_INTERLACE,
328                                 &theInfo.myElemNames[0],
329                                 &theInfo.myIsElemNames,
330                                 &theInfo.myElemNum[0],
331                                 &theInfo.myIsElemNum,
332                                 &theInfo.myFamNum[0],
333                                 aNbElem,
334                                 theInfo.myTEntity,
335                                 theInfo.myTGeom,
336                                 theInfo.myTConn);
337   if(ret < 0)
338     EXCEPTION(runtime_error,"GetCellInfo - MEDelementsLire(...)");
339 }
340
341
342 void TWrapper::SetCellInfo(const TCellInfo& theInfo)
343 {
344   TFileWrapper aFileWrapper(myFile,MED_ECRI);
345
346   TCellInfo& anInfo = const_cast<TCellInfo&>(theInfo);
347   TMeshInfo& aMeshInfo = *anInfo.myMeshInfo;
348   med_int aNbElem = anInfo.myElemNum.size();
349
350   med_err ret = MEDelementsEcr(myFile.Id(),
351                                &aMeshInfo.myName[0],
352                                aMeshInfo.myDim,
353                                &anInfo.myConn[0],
354                                MED_FULL_INTERLACE,
355                                &anInfo.myElemNames[0],
356                                anInfo.myIsElemNames,
357                                &anInfo.myElemNum[0],
358                                anInfo.myIsElemNum,
359                                &anInfo.myFamNum[0],
360                                anInfo.myNbElem,
361                                anInfo.myTEntity,
362                                anInfo.myTGeom,
363                                anInfo.myTConn,
364                                MED_REMP);
365
366   if(ret < 0)
367     EXCEPTION(runtime_error,"GetCellInfo - MEDelementsLire(...)");
368 }
369
370
371 med_int TWrapper::GetNbFields(){
372   TFileWrapper aFileWrapper(myFile,MED_LECT);
373
374   return MEDnChamp(myFile.Id(),0);
375 }
376
377
378 med_int TWrapper::GetNbComp(med_int theFieldId){
379   TFileWrapper aFileWrapper(myFile,MED_LECT);
380
381   return MEDnChamp(myFile.Id(),theFieldId);
382 }
383
384
385 void TWrapper::GetFieldInfo(med_int theFieldId, TFieldInfo& theInfo){
386   TFileWrapper aFileWrapper(myFile,MED_LECT);
387   
388   med_err ret = MEDchampInfo(myFile.Id(),
389                              theFieldId,
390                              &theInfo.myName[0],
391                              &theInfo.myType,
392                              &theInfo.myCompNames[0],
393                              &theInfo.myUnitNames[0],
394                              theInfo.myNbComp);
395   if(ret < 0)
396     EXCEPTION(runtime_error,"GetFieldInfo - MEDchampInfo(...)");
397 }
398
399
400 void TWrapper::SetFieldInfo(const TFieldInfo& theInfo)
401 {
402   TFileWrapper aFileWrapper(myFile,MED_ECRI);
403   
404   TFieldInfo& anInfo = const_cast<TFieldInfo&>(theInfo);
405   med_err ret = MEDchampCr(myFile.Id(),
406                            &anInfo.myName[0],
407                            anInfo.myType,
408                            &anInfo.myCompNames[0],
409                            &anInfo.myUnitNames[0],
410                            anInfo.myNbComp);
411   if(ret < 0)
412     EXCEPTION(runtime_error,"SetFieldInfo - MEDchampEcr(...)");
413 }
414
415
416 med_int TWrapper::GetNbTimeStamps(const TFieldInfo& theInfo, 
417                                   const TEntityInfo& theEntityInfo,
418                                   med_entite_maillage& theEntity,
419                                   TGeom& theGeom)
420 {
421   TFileWrapper aFileWrapper(myFile,MED_LECT);
422
423   if(theEntityInfo.empty()) 
424     EXCEPTION(runtime_error,"GetNbTimeStamps - There is no any Entity on the Mesh");
425
426   theGeom.clear();
427   med_int aNbTimeStamps = 0;
428   TFieldInfo& anInfo = const_cast<TFieldInfo&>(theInfo);
429   TEntityInfo::const_iterator anIter = theEntityInfo.begin();
430   for(; anIter != theEntityInfo.end(); anIter++){
431     const med_entite_maillage& anEntity = anIter->first;
432     const TGeom& aTGeom = anIter->second;
433     TGeom::const_iterator anGeomIter = aTGeom.begin();
434     for(; anGeomIter != aTGeom.end(); anGeomIter++){
435       const med_geometrie_element& aGeom = anGeomIter->first;
436       aNbTimeStamps = MEDnPasdetemps(myFile.Id(),&anInfo.myName[0],anEntity,aGeom);
437       if(aNbTimeStamps){
438         theEntity = anEntity;
439         theGeom[aGeom] = anGeomIter->second;
440       }
441     }
442     if(aNbTimeStamps) break;
443   }
444   return aNbTimeStamps;
445 }
446
447
448 void TWrapper::GetTimeStampInfo(med_int theTimeStampId, TTimeStampInfo& theInfo)
449 {
450   TFileWrapper aFileWrapper(myFile,MED_LECT);
451   med_idt anId = myFile.Id();
452
453   TFieldInfo& aFieldInfo = *theInfo.myFieldInfo;
454   TMeshInfo& aMeshInfo = *aFieldInfo.myMeshInfo;
455
456   med_entite_maillage anEntity = theInfo.myEntity;
457   TGeom& aTGeom = theInfo.myGeom;
458   if(aTGeom.empty())
459     EXCEPTION(runtime_error,"GetTimeStampInfo - There is no any cell");
460
461   TGeom::iterator anIter = aTGeom.begin();
462   med_geometrie_element aGeom = anIter->first;
463
464   med_err ret = MEDpasdetempsInfo(anId,
465                                   &aFieldInfo.myName[0],
466                                   anEntity,
467                                   aGeom,
468                                   theTimeStampId,
469                                   &aMeshInfo.myName[0],
470                                   &theInfo.myNbGauss,
471                                   &theInfo.myNumDt,
472                                   &theInfo.myUnitDt[0],
473                                   &theInfo.myDt,
474                                   &theInfo.myNumOrd);
475   if(ret < 0)
476     EXCEPTION(runtime_error,"GetTimeStampInfo - MEDpasdetempsInfo(...)");
477
478   static med_int MAX_NB_GAUSS_POINTS = 32;
479   if(theInfo.myNbGauss > MAX_NB_GAUSS_POINTS) 
480     theInfo.myNbGauss = 1;
481 }
482
483 void TWrapper::SetTimeStamp(const TTimeStampVal& theVal)
484 {
485   TFileWrapper aFileWrapper(myFile,MED_ECRI);
486   
487   TTimeStampVal& aVal = const_cast<TTimeStampVal&>(theVal);
488   TTimeStampInfo& aTimeStampInfo = *aVal.myTimeStampInfo;
489   TFieldInfo& aFieldInfo = *aTimeStampInfo.myFieldInfo;
490   TMeshInfo& aMeshInfo = *aFieldInfo.myMeshInfo;
491   TMeshValue& aMeshValue = aVal.myMeshValue;
492   
493   med_entite_maillage anEntity = aTimeStampInfo.myEntity;
494   TMeshValue::iterator anIter = aMeshValue.begin();
495   for(; anIter != aMeshValue.end(); anIter++){
496     const med_geometrie_element& aGeom = anIter->first;
497     TValue& aValue = aVal.myMeshValue[aGeom];
498     med_int iEnd = aValue.size();
499     med_int aNbVal = iEnd / aFieldInfo.myNbComp;
500     
501     med_err ret;
502     switch(aFieldInfo.myType){
503     case MED_REEL64: {
504       valarray<med_float>& anArray = aValue;
505
506       ret = MEDchampEcr(myFile.Id(),
507                         &aMeshInfo.myName[0],
508                         &aFieldInfo.myName[0],
509                         (unsigned char*)&anArray[0],
510                         MED_FULL_INTERLACE,
511                         aNbVal,
512                         aTimeStampInfo.myNbGauss,
513                         MED_ALL,
514                         &aVal.myPflName[0],
515                         MED_ECRI, 
516                         anEntity,
517                         aGeom,
518                         aTimeStampInfo.myNumDt,
519                         &aTimeStampInfo.myUnitDt[0],
520                         aTimeStampInfo.myDt,
521                         aTimeStampInfo.myNumOrd);
522       break;
523     }
524     case MED_INT32:
525     case MED_INT: {
526       valarray<med_int> anArray(iEnd);
527       for(med_int i = 0; i< iEnd; i++) anArray[i] = med_int(aValue[i]);
528
529       ret = MEDchampEcr(myFile.Id(),
530                         &aMeshInfo.myName[0],
531                         &aFieldInfo.myName[0],
532                         (unsigned char*)&anArray[0],
533                         MED_FULL_INTERLACE,
534                         aNbVal,
535                         aTimeStampInfo.myNbGauss,
536                         MED_ALL,
537                         &aVal.myPflName[0],
538                         MED_ECRI, 
539                         anEntity,
540                         aGeom,
541                         aTimeStampInfo.myNumDt,
542                         &aTimeStampInfo.myUnitDt[0],
543                         aTimeStampInfo.myDt,
544                         aTimeStampInfo.myNumOrd);
545       break;
546     }
547     default: 
548       EXCEPTION(runtime_error,"SetTimeStamp - Type of the field == "<<aFieldInfo.myType<<" is wrong");
549     }
550     if(ret < 0)
551       EXCEPTION(runtime_error,"SetTimeStamp - MEDchampEcr(...)");
552   }
553 }
554
555 void TWrapper::GetTimeStampVal(TTimeStampVal& theVal)
556 {
557   TFileWrapper aFileWrapper(myFile,MED_LECT);
558   med_idt anId = myFile.Id();
559
560   TTimeStampInfo& aTimeStampInfo = *theVal.myTimeStampInfo;
561   TFieldInfo& aFieldInfo = *aTimeStampInfo.myFieldInfo;
562   TMeshInfo& aMeshInfo = *aFieldInfo.myMeshInfo;
563   TMeshValue& aMeshValue = theVal.myMeshValue;
564
565   med_entite_maillage anEntity = aTimeStampInfo.myEntity;
566   TGeom& aTGeom = aTimeStampInfo.myGeom;
567   TGeom::iterator anIter = aTGeom.begin();
568   for(; anIter != aTGeom.end(); anIter++){
569     const med_geometrie_element& aGeom = anIter->first;
570     med_int aNbVal = MEDnVal(anId,&aFieldInfo.myName[0],anEntity,aGeom,
571                              aTimeStampInfo.myNumDt,aTimeStampInfo.myNumOrd);
572     if(aNbVal <= 0)
573       EXCEPTION(runtime_error,"GetTimeStampInfo - MEDnVal(...) - aNbVal == "<<aNbVal<<" <= 0");
574
575     TValue& aValue = theVal.myMeshValue[aGeom];
576     med_int iEnd = aNbVal * aFieldInfo.myNbComp;
577
578     if(iEnd != aValue.size())
579       EXCEPTION(runtime_error,"GetTimeStampInfo - iEnd == "<<iEnd<<" != aValue.size() == "<<aValue.size());
580
581     med_err ret;
582     switch(aFieldInfo.myType){
583     case MED_REEL64: {
584       valarray<med_float> anArray(iEnd);
585       ret = MEDchampLire(myFile.Id(),
586                          &aMeshInfo.myName[0],
587                          &aFieldInfo.myName[0],
588                          (unsigned char*)&anArray[0],
589                          MED_FULL_INTERLACE,
590                          MED_ALL,
591                          &theVal.myPflName[0],
592                          anEntity,
593                          aGeom,
594                          aTimeStampInfo.myNumDt,
595                          aTimeStampInfo.myNumOrd);
596       if(ret >= 0) 
597         for(med_int i = 0; i < iEnd; i++) aValue[i] = anArray[i];
598       break;
599     }
600     case MED_INT32:
601     case MED_INT: {
602       valarray<med_int> anArray(iEnd);
603       ret = MEDchampLire(myFile.Id(),
604                          &aMeshInfo.myName[0],
605                          &aFieldInfo.myName[0],
606                          (unsigned char*)&anArray[0],
607                          MED_FULL_INTERLACE,
608                          MED_ALL,
609                          &theVal.myPflName[0],
610                          anEntity,
611                          aGeom,
612                          aTimeStampInfo.myNumDt,
613                          aTimeStampInfo.myNumOrd);
614       if(ret >= 0) 
615         for(med_int i = 0; i < iEnd; i++) aValue[i] = anArray[i];
616       break;
617     }
618     default:
619       EXCEPTION(runtime_error,"GetValTimeStamp - Type of the field == "<<aFieldInfo.myType<<" is wrong");
620     }
621     if(ret < 0)
622       EXCEPTION(runtime_error,"GetValTimeStamp - MEDchampLire(...)");
623   }
624 }