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