Salome HOME
merging the main trunk with the BrForComp branch to build a pre V3_0_1
[modules/med.git] / src / MEDMEM / test_copie_field_.cxx
1 /* Programme de test du constructeur de copies de la classe FIELD_ de MEDMEM
2    jroy - 12/12/2002 */
3
4 #include<string>
5
6 #include <math.h>
7 #include <stdlib.h>
8
9 #include "MEDMEM_Exception.hxx"
10 #include "MEDMEM_Mesh.hxx"
11 #include "MEDMEM_Family.hxx"
12 #include "MEDMEM_Group.hxx"
13
14 #include "MEDMEM_MedMeshDriver.hxx"
15 #include "MEDMEM_MedFieldDriver.hxx"
16 #include "MEDMEM_Support.hxx"
17 #include "MEDMEM_Field.hxx"
18 #include "MEDMEM_define.hxx"
19
20 #ifdef _DEBUG_
21 #include "LocalTraceCollector.hxx"
22 #endif /* ifdef _DEBUG_*/
23
24 using namespace MEDMEM;
25 using namespace MED_EN;
26
27
28 void affiche_field(FIELD_ * myField, const SUPPORT * mySupport)
29 {
30   cout << "Field "<< myField->getName() << " : " <<myField->getDescription() <<  endl ;
31   int NumberOfComponents = myField->getNumberOfComponents() ;
32   cout << "- Nombre de composantes : "<< NumberOfComponents << endl ;
33   for (int i=1; i<NumberOfComponents+1; i++) {
34     cout << "  - composante "<<i<<" :"<<endl ;
35     cout << "      - nom         : "<<myField->getComponentName(i)<< endl;
36     cout << "      - description : "<<myField->getComponentDescription(i) << endl;
37     cout << "      - units       : "<<myField->getMEDComponentUnit(i) << endl;
38   }
39   cout << "- iteration :" << endl ;
40   cout << "    - numero : " << myField->getIterationNumber()<< endl  ;
41   cout << "    - ordre  : " << myField->getOrderNumber()<< endl  ;
42   cout << "    - temps  : " << myField->getTime()<< endl  ;
43
44   cout << "- Type : " << myField->getValueType()<< endl;
45   /*
46   cout << "- Valeurs :"<<endl;
47   int NumberOf = mySupport->getNumberOfElements(MED_ALL_ELEMENTS);
48
49   for (int i=1; i<NumberOf+1; i++) {
50     double * value = myField->getValueI(MED_FULL_INTERLACE,i) ;
51     for (int j=0; j<NumberOfComponents; j++)
52       cout << value[j]<< " ";
53     cout<<endl;
54   }
55   */
56   cout << "- Adresse support : " << mySupport << endl;
57 }
58
59
60 int main (int argc, char ** argv) {
61 #ifdef _DEBUG_
62   LocalTraceCollector::instance();
63 #endif /* ifdef _DEBUG_*/
64
65   // int read; !! UNUSED VARIABLE !!
66
67   if ((argc !=3) && (argc != 4)) {
68     cerr << "Usage : " << argv[0] 
69          << " filename meshname fieldname" << endl << endl;
70     exit(-1);
71   }
72
73   string filename = argv[1] ;
74   string meshname = argv[2] ;
75
76   //  MESH * myMesh= new MESH(MED_DRIVER,filename,meshname) ;
77   MESH * myMesh= new MESH() ;
78   myMesh->setName(meshname);
79   MED_MESH_RDONLY_DRIVER myMeshDriver(filename,myMesh) ;
80   myMeshDriver.setMeshName(meshname);
81   myMeshDriver.open() ;
82   myMeshDriver.read() ;
83   myMeshDriver.close() ;
84
85   //    int drv = myMesh->addDriver(MED_DRIVER,"sortie.med",meshname);
86   //    myMesh->write(drv); 
87
88
89   
90
91   // if (argc < 4) return 0;
92
93   // read field :
94
95   if (argc != 4) exit(0) ;
96   // else we have a field !
97
98   string fieldname = argv[3];
99
100
101   //  SUPPORT * mySupport = new SUPPORT(myMesh,"On_all_node",MED_NODE);
102   SUPPORT * mySupport = new SUPPORT(myMesh,"On_all_cell",MED_EN::MED_CELL);
103   FIELD<double> * myField = new FIELD<double>() ;
104   myField->setValueType(MED_EN::MED_REEL64);
105
106   myField->setName(fieldname);
107   myField->setSupport(mySupport);
108   MED_FIELD_RDONLY_DRIVER<double> myFieldDriver(filename,myField) ;
109   myFieldDriver.setFieldName(fieldname);
110   myFieldDriver.open() ;
111
112   try {
113     myFieldDriver.read() ;
114   } catch (...) {
115     delete mySupport ;
116     mySupport = new SUPPORT(myMesh,"On_all_node",MED_EN::MED_NODE);
117     myField->setSupport(mySupport);
118     try {
119       myFieldDriver.read() ;
120     } catch (...) {
121       cout << "Field " << fieldname << " not found !!!" << endl ;
122       exit (-1) ;
123     }
124   }
125   
126   myFieldDriver.close() ;
127
128   FIELD_ * pt_field_ = myField;
129   affiche_field(pt_field_, mySupport);
130   FIELD_ * pt_field_2 = new FIELD_(* pt_field_);
131   delete myField;
132   affiche_field(pt_field_2, pt_field_2->getSupport());
133   
134   delete pt_field_2 ;
135
136   delete mySupport ;
137   delete myMesh ;
138
139   return 0;
140 }