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