Salome HOME
Version ok de MED avec MEDGUI.
[modules/med.git] / src / MEDMEM / duplicateMED.cxx
1 #include<string>
2 #include<deque>
3
4 #include "MEDMEM_Exception.hxx"
5 #include "MEDMEM_define.hxx"
6
7 #include "MEDMEM_Med.hxx"
8 #include "MEDMEM_Mesh.hxx"
9 #include "MEDMEM_Family.hxx"
10 #include "MEDMEM_Support.hxx"
11 #include "MEDMEM_Field.hxx"
12
13 #include "MEDMEM_GenDriver.hxx"
14 #include "MEDMEM_MedMedDriver.hxx"
15 #include "MEDMEM_MedMeshDriver.hxx"
16 #include "MEDMEM_MedFieldDriver.hxx"
17
18
19 void usage(char * name)
20 {
21   cout << "  " << name << " <input med file> <output med file> " <<endl ;
22   cout << "    " << "(the two file name are mandatory)" << endl ;
23   exit(-1);
24 }
25
26 int main (int argc, char ** argv) {
27   
28   if (argc != 3) usage(argv[0]);
29
30   string filenameIN = argv[1] ;
31   string filenameOUT = argv[2] ;
32   
33   MED * myMed = new MED() ;
34   MED_MED_DRIVER myMedDriver(filenameIN,myMed) ;
35
36   // we read all meshes and fields in filenameIN
37   try {
38     
39     int read ;
40     myMedDriver.open();
41     myMedDriver.readFileStruct();
42     myMedDriver.close();
43     
44     // read all mesh
45     MESSAGE("Read all meshes :") ;
46     int NumberOfMeshes = myMed->getNumberOfMeshes() ;
47     MESSAGE("Number of meshes : "<<NumberOfMeshes) ;
48     deque<string> MeshName = myMed->getMeshNames() ;
49     map<string,MESH*> _meshes ;
50     for (int i=0; i<NumberOfMeshes; i++) {
51       _meshes[MeshName[i]]=myMed->getMesh(MeshName[i]) ;
52       _meshes[MeshName[i]]->read();
53       MESSAGE("  - Mesh "<<i+1<<", named "<<MeshName[i]<<" read !");
54       MED_MESH_WRONLY_DRIVER myMeshDriver(filenameOUT,_meshes[MeshName[i]]);
55       myMeshDriver.setMeshName(MeshName[i]);
56       myMeshDriver.open() ;
57       myMeshDriver.write() ;
58       myMeshDriver.close() ;
59     }
60
61     // set support : support must be calculated with mesh information !!!
62     myMed->updateSupport() ;
63     
64     // read all field
65     MESSAGE("Read all fields :") ;
66     int NumberOfFields = myMed->getNumberOfFields() ;
67     MESSAGE("Number of fields : "<<NumberOfFields);
68     deque<string> FieldName = myMed->getFieldNames() ;
69     map<string,FIELD_*> _fields ;
70     for (int i=0; i<NumberOfFields; i++) {
71       deque<DT_IT_> FieldIteration = myMed->getFieldIteration(FieldName[i]) ;
72       MESSAGE("  - Field "<<i+1<<", named "<<FieldName[i]<<" :");
73       int NumberOfIteration = FieldIteration.size() ;
74       MESSAGE("    Number of iteration pair : "<<NumberOfIteration);
75       for (int j=0; j<NumberOfIteration; j++) {
76         MESSAGE("    FieldName[i] "<<FieldName[i]<<",Iteration "<< FieldIteration[j].dt<<", order number "<<FieldIteration[j].it<<" j="<<j<<",i="<<i<<" :");
77         FIELD_ * myField = myMed->getField(FieldName[i],FieldIteration[j].dt,FieldIteration[j].it) ;
78         
79         med_type_champ type = myField->getValueType() ;
80         switch (type) {
81         case MED_FR::MED_INT32: {
82           //    if (type == MED_FR::MED_INT32) {
83           MESSAGE("    * Field named "<<((FIELD<int>*)myField)->getName());
84           ((FIELD<int>*)myField)->read() ;
85           MESSAGE("    * Iteration "<<FieldIteration[j].dt<<", order number "<<FieldIteration[j].it<<" read !");
86           MED_FIELD_WRONLY_DRIVER<int> myFieldDriver(filenameOUT,(FIELD<int>*)myField);
87           myFieldDriver.setFieldName(FieldName[i]);
88           myFieldDriver.open() ;
89           myFieldDriver.write() ;
90           myFieldDriver.close() ;
91           break ;
92         }
93           //    else
94         case MED_FR::MED_REEL64: {
95           //      if (type == MED_FR::MED_REEL64) {
96           FIELD<double>* myField2 = (FIELD<double>*)myField ;
97           MESSAGE("    * Field named "<<myField2->getName());
98           myField2->read() ;
99           MESSAGE("    * Iteration "<<FieldIteration[j].dt<<", order number "<<FieldIteration[j].it<<" read !");          
100           MED_FIELD_WRONLY_DRIVER<double> myFieldDriver(filenameOUT,myField2);
101           myFieldDriver.setFieldName(FieldName[i]);
102           myFieldDriver.open() ;
103           myFieldDriver.write() ;
104           myFieldDriver.close() ;
105           break ;
106         }
107           //    else {
108         default: {
109           MESSAGE("    * Iteration "<<FieldIteration[j].dt<<", order number "<<FieldIteration[j].it<<" not read : wrond type "<<type);
110           break ;
111         }
112         }
113       }
114     }
115   } catch (MEDEXCEPTION& ex){
116     MESSAGE(ex.what()) ;
117   }
118
119   // we write all in file filenameOUT :
120 //    try {
121     
122 //      MED_MED_DRIVER myMedDriverOUT("/tmp/test.med",myMed) ;
123 //      myMedDriverOUT.open() ;
124 //      myMedDriverOUT.write() ;
125 //      myMedDriverOUT.close() ;
126 //    } catch (MEDEXCEPTION& ex){
127 //      MESSAGE(ex.what()) ;
128 //    }
129
130   delete myMed ;
131
132 }