Salome HOME
This commit was generated by cvs2git to create branch 'IMPORT'.
[modules/med.git] / src / MEDMEM / test_copie_support.cxx
1 using namespace std;
2 #include<string>
3
4 #include <math.h>
5 #include <stdlib.h>
6
7 #include "MEDMEM_Exception.hxx"
8 #include "MEDMEM_Mesh.hxx"
9 #include "MEDMEM_Family.hxx"
10 #include "MEDMEM_Group.hxx"
11
12 #include "MEDMEM_MedMeshDriver.hxx"
13 #include "MEDMEM_MedFieldDriver.hxx"
14 #include "MEDMEM_Support.hxx"
15 #include "MEDMEM_Field.hxx"
16 #include "MEDMEM_define.hxx"
17
18
19 void affiche_support(SUPPORT * mySupport) 
20 {
21   cout << "  - Name : "<<mySupport->getName().c_str()<<endl ;
22   cout << "  - Description : "<<mySupport->getDescription().c_str()<<endl ;
23   cout << "  - Entity : "<<mySupport->getEntity()<<endl ;
24   cout << "  - Entities list : "<<endl ;
25   if (!(mySupport->isOnAllElements())) {
26     int NumberOfTypes = mySupport->getNumberOfTypes() ;
27     cout<<"  - NumberOfTypes : "<<NumberOfTypes<<endl;
28     medGeometryElement * Types = mySupport->getTypes() ;
29     for (int j=0;j<NumberOfTypes;j++) {
30       cout<<"    * Type "<<Types[j]<<" : ";
31       int NumberOfElements = mySupport->getNumberOfElements(Types[j]) ;
32       int * Number = mySupport->getNumber(Types[j]) ;
33       for (int k=0; k<NumberOfElements;k++)
34         cout << Number[k] << " ";
35       cout << endl ;
36     }
37   } else
38     cout << "    Is on all entities !"<< endl;
39 }
40
41
42 void affiche_famille(MESH *myMesh,medEntityMesh Entity) 
43 {
44   int NumberOfFamilies = myMesh->getNumberOfFamilies(Entity) ;
45   cout << "NumberOfFamilies : "<<NumberOfFamilies<<endl;
46   for (int i=1; i<NumberOfFamilies+1;i++) {
47     FAMILY* myFamily = myMesh->getFamily(Entity,i);
48     affiche_support(myFamily);
49     cout << "  - Identifier : "<<myFamily->getIdentifier()<<endl ;
50     int NumberOfAttributes = myFamily->getNumberOfAttributes() ;
51     cout << "  - Attributes ("<<NumberOfAttributes<<") :"<<endl;
52     for (int j=1;j<NumberOfAttributes+1;j++)
53       cout << "    * "<<myFamily->getAttributeIdentifier(j)<<" : "<<myFamily->getAttributeValue(j)<<", "<<myFamily->getAttributeDescription(j).c_str()<<endl ;
54     int NumberOfGroups = myFamily->getNumberOfGroups() ;
55     cout << "  - Groups ("<<NumberOfGroups<<") :"<<endl;
56     for (int j=1;j<NumberOfGroups+1;j++)
57       cout << "    * "<<myFamily->getGroupName(j).c_str()<<endl ;
58   }
59 }
60
61 void affiche_groupe(MESH *myMesh,medEntityMesh Entity) 
62 {
63   int NumberOfGroups = myMesh->getNumberOfGroups(Entity) ;
64   cout << "NumberOfGroups : "<<NumberOfGroups<<endl;
65   for (int i=1; i<NumberOfGroups+1;i++) {
66     GROUP* myGroup = myMesh->getGroup(Entity,i);
67     affiche_support(myGroup);
68     int NumberOfFamillies = myGroup->getNumberOfFamilies() ;
69     cout << "  - Families ("<<NumberOfFamillies<<") :"<<endl;
70     for (int j=1;j<NumberOfFamillies+1;j++)
71       cout << "    * "<<myGroup->getFamily(j)->getName().c_str()<<endl ;
72   }
73 }
74
75 int main (int argc, char ** argv) {
76
77   int read;
78
79   if (argc !=3) {
80     cerr << "Usage : " << argv[0] 
81          << " filename meshname" << endl << endl;
82     exit(-1);
83   }
84
85   string filename = argv[1] ;
86   string meshname = argv[2] ;
87
88   MESH * myMesh= new MESH() ;
89   myMesh->setName(meshname);
90   MED_MESH_RDONLY_DRIVER myMeshDriver(filename,myMesh) ;
91   myMeshDriver.setMeshName(meshname);
92   myMeshDriver.open() ;
93   myMeshDriver.read() ;
94   myMeshDriver.close() ;
95
96   //Construction d'un support total
97   SUPPORT * mySupport = new SUPPORT(myMesh,"Support on CELLs",MED_CELL);
98
99   cout << "Show Support on all :"<<endl ;
100   affiche_support(mySupport);
101   SUPPORT * mySupport2 = new SUPPORT(* mySupport);
102   delete mySupport;
103   affiche_support(mySupport2);
104   delete mySupport2;
105
106   //Construction d'un support partiel
107   mySupport = new SUPPORT(myMesh,"Support on CELLs",MED_CELL);
108   mySupport->setAll(false);
109
110   //  int NumberOfGeometricType = 1;
111   int NumberOfGeometricType = 0;
112   //  int TotalNumberOfEntity = 2;
113   //  medGeometryElement * GeometricTypePartial = new medGeometryElement[NumberOfGeometricType];
114   //  GeometricTypePartial[0] = MED_HEXA8;
115   medGeometryElement * GeometricType = myMesh->getTypes(MED_CELL);
116   int TotalNumberOfEntity = 0;
117   int * NumberOfEntity = new int[myMesh->getNumberOfTypes(MED_CELL)];
118   //  NumberOfEntity[0] = 2;
119   //  int * NumberValue = new int[TotalNumberOfEntity];
120   int * NumberValue = new int[myMesh->getGlobalNumberingIndex(MED_CELL)[myMesh->getNumberOfTypes(MED_CELL)]-1];
121   //  NumberValue[0] = 14;
122   //  NumberValue[1] = 15;
123   int cmp = 0;
124   medGeometryElement * GeometricTypePartial = new medGeometryElement[myMesh->getNumberOfTypes(MED_CELL)];
125   for (int i=0;i<myMesh->getNumberOfTypes(MED_CELL);i=i+2)
126     { 
127       NumberOfGeometricType=NumberOfGeometricType+1;
128       TotalNumberOfEntity=TotalNumberOfEntity+myMesh->getNumberOfElements(MED_CELL,GeometricType[i]);
129       NumberOfEntity[i/2]=myMesh->getNumberOfElements(MED_CELL,GeometricType[i]);
130       for (int j=0;j<myMesh->getNumberOfElements(MED_CELL,GeometricType[i]);j++)
131         {
132           NumberValue[cmp]=myMesh->getGlobalNumberingIndex(MED_CELL)[i]+j;
133           cmp=cmp+1;
134         }
135       GeometricTypePartial[i/2]=GeometricType[i];
136     }
137
138   mySupport->setpartial("Support partiel",NumberOfGeometricType,TotalNumberOfEntity,GeometricTypePartial,NumberOfEntity,NumberValue);
139
140   cout << "Show Partial Support :"<<endl ;
141   affiche_support(mySupport);
142   mySupport2 = new SUPPORT(* mySupport);
143   delete mySupport;
144   affiche_support(mySupport2);
145   delete mySupport2;
146
147   /*
148   cout << "Show Family :"<<endl ;
149   affiche_famille(myMesh,MED_NODE);
150   affiche_famille(myMesh,MED_CELL);
151   affiche_famille(myMesh,MED_FACE);
152   affiche_famille(myMesh,MED_EDGE);
153
154   cout << "Show Group :"<<endl ;
155   affiche_groupe(myMesh,MED_NODE);
156   affiche_groupe(myMesh,MED_CELL);
157   affiche_groupe(myMesh,MED_FACE);
158   affiche_groupe(myMesh,MED_EDGE);
159   */
160   return 0;
161 }