Salome HOME
update from the MedMemory V1.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
21 void affiche_field(FIELD_ * myField, const SUPPORT * mySupport)
22 {
23   cout << "Field "<< myField->getName() << " : " <<myField->getDescription() <<  endl ;
24   int NumberOfComponents = myField->getNumberOfComponents() ;
25   cout << "- Nombre de composantes : "<< NumberOfComponents << endl ;
26   for (int i=1; i<NumberOfComponents+1; i++) {
27     cout << "  - composante "<<i<<" :"<<endl ;
28     cout << "      - nom         : "<<myField->getComponentName(i)<< endl;
29     cout << "      - description : "<<myField->getComponentDescription(i) << endl;
30     cout << "      - units       : "<<myField->getMEDComponentUnit(i) << endl;
31   }
32   cout << "- iteration :" << endl ;
33   cout << "    - numero : " << myField->getIterationNumber()<< endl  ;
34   cout << "    - ordre  : " << myField->getOrderNumber()<< endl  ;
35   cout << "    - temps  : " << myField->getTime()<< endl  ;
36
37   cout << "- Type : " << myField->getValueType()<< endl;
38   /*
39   cout << "- Valeurs :"<<endl;
40   int NumberOf = mySupport->getNumberOfElements(MED_ALL_ELEMENTS);
41
42   for (int i=1; i<NumberOf+1; i++) {
43     double * value = myField->getValueI(MED_FULL_INTERLACE,i) ;
44     for (int j=0; j<NumberOfComponents; j++)
45       cout << value[j]<< " ";
46     cout<<endl;
47   }
48   */
49   cout << "- Adresse support : " << mySupport << endl;
50 }
51
52
53 int main (int argc, char ** argv) {
54
55   // int read; !! UNUSED VARIABLE !!
56
57   if ((argc !=3) && (argc != 4)) {
58     cerr << "Usage : " << argv[0] 
59          << " filename meshname fieldname" << endl << endl;
60     exit(-1);
61   }
62
63   string filename = argv[1] ;
64   string meshname = argv[2] ;
65
66   //  MESH * myMesh= new MESH(MED_DRIVER,filename,meshname) ;
67   MESH * myMesh= new MESH() ;
68   myMesh->setName(meshname);
69   MED_MESH_RDONLY_DRIVER myMeshDriver(filename,myMesh) ;
70   myMeshDriver.setMeshName(meshname);
71   myMeshDriver.open() ;
72   myMeshDriver.read() ;
73   myMeshDriver.close() ;
74
75   //    int drv = myMesh->addDriver(MED_DRIVER,"sortie.med",meshname);
76   //    myMesh->write(drv); 
77
78
79   
80
81   // if (argc < 4) return 0;
82
83   // read field :
84
85   if (argc != 4) exit(0) ;
86   // else we have a field !
87
88   string fieldname = argv[3];
89
90
91   //  SUPPORT * mySupport = new SUPPORT(myMesh,"On_all_node",MED_NODE);
92   SUPPORT * mySupport = new SUPPORT(myMesh,"On_all_cell",MED_CELL);
93   FIELD<double> * myField = new FIELD<double>() ;
94   myField->setValueType(MED_REEL64);
95
96   myField->setName(fieldname);
97   myField->setSupport(mySupport);
98   MED_FIELD_RDONLY_DRIVER<double> myFieldDriver(filename,myField) ;
99   myFieldDriver.setFieldName(fieldname);
100   myFieldDriver.open() ;
101
102   try {
103     myFieldDriver.read() ;
104   } catch (...) {
105     delete mySupport ;
106     mySupport = new SUPPORT(myMesh,"On_all_node",MED_NODE);
107     myField->setSupport(mySupport);
108     try {
109       myFieldDriver.read() ;
110     } catch (...) {
111       cout << "Field " << fieldname << " not found !!!" << endl ;
112       exit (-1) ;
113     }
114   }
115   
116   myFieldDriver.close() ;
117
118   FIELD_ * pt_field_ = myField;
119   affiche_field(pt_field_, mySupport);
120   FIELD_ * pt_field_2 = new FIELD_(* pt_field_);
121   delete myField;
122   affiche_field(pt_field_2, pt_field_2->getSupport());
123   
124   delete pt_field_2 ;
125
126   delete mySupport ;
127   delete myMesh ;
128
129   return 0;
130 }