Salome HOME
PR: merged from V5_1_4rc1
[modules/smesh.git] / src / SMDS / Notes
1 Problemes en cours
2 ==================
3 - a faire
4 + en cours, OK mais perfectible
5 * OK
6
7 + visualisation de groupe (type d'element): on voit tout le maillage, mais le groupe est OK
8   creation d'une structure vtkUnstructuredGrid locale : iteration un peu lourde, et pas de partage avec la structure du maillage (pas evident)
9 - inversion d'un volume (tetra): exception
10 - script de creation de noeuds et d'elements: OK, mais pas compatible avec version precedente (numerotation noeuds differente)
11 + affichage numeros noeuds: numeros en trop sur (O,0,0) pas systematique, trouver la condition (enlever dans vtkUnstructuredGrid ?)
12   ==> purge systematique noeuds et cellules en trop dans compactage grid.
13 + gestion du mode embedded mal faite lors d'un script python : journal commandes intempestif
14 - affichage des noeuds apres changement lineaire <--> quadratique à l'IHM : pas pris en compte, alors que maillage OK,
15   mais script OK
16   ==> cassé apres mode embedded ou elimination noeuds en trop ?
17 - extrusion elements 2D along a path : affichage apres calcul pas toujours OK (filaire)
18 - branche git a ouvrir pour merge avec V5_1_4_BR tag V5_1_4rc1
19
20 A tester, non pris en compte
21 ============================
22 - engine standalone
23 - polyedres (attendre vtk)
24
25
26 =============================== Hypothese de refonte de l'API de SMDS
27
28 n'utiliser que vtkUnstructuredGrid, ne pas avor d'objets SMDS_MeshElement mais seulement des index de vtkUnstructuredGrid.
29 2987 usages de SMDS_MeshNodes
30 810            SMDS_MeshElement
31 ...
32 ==> en dernier ressort, lourd
33 ================================================================================
34
35 Essai a API SMDS a peu pres constante
36 =====================================
37
38 SMDS_Mesh
39   static vector<SMDS_Mesh*> _meshList;     --> retrouver un SMDS_Mesh
40   vtkUnstructuredGrid*      myGrid;
41
42   vector<SMDS_MeshNode *>   myNodes;       --> meme index que dans le pointSet de myGrid
43   vector<SMDS_MeshCell *>   myCells;       --> index = ID client, pas le meme index que dans le cellTypes de myGrid (ID vtk)
44
45
46
47 SMDS_MeshElement
48   int myID;                                --> index dans la structure geree par SMDS_Mesh
49   int myMeshId;                            --> pour retrouver SMDS_Mesh* dans _meshList
50   int myShapeId;                           --> pour retrouver la subShape
51                                                          
52
53 SMDS_MeshNode: SMDS_MeshElement
54   SMDS_PositionPtr myPosition;             -->  A REVOIR : objet position dans la shape geom
55   ##vector<int> myInverseElements;         -->  SUPPRIME : pour retrouver les elements, vtkCellLinks
56
57
58 SMDS_MeshCell: SMDS_MeshElement            --> generique pour tous les elements (cells)
59   int myVtkID                              --> A SUPPRIMER
60
61 SMDS_MeshVolume: SMDS_MeshCell
62
63 SMDS_VolumeOfNodes: SMDS_MeshVolume        --> Garder temporairement, utilisation dans StdMesher et SMDS_VolumeTool
64   const SMDS_MeshNode **myNodes;           --> Couteux
65   int                 myNbNodes;           -->  ""
66
67 SMDS_VolumeVtkNodes: SMDS_MeshVolume       --> Utiliser systematiquement dans SMDS,
68                                            --> IMPLEMENTER.
69
70
71 SMDS_MeshElementIDFactory: SMDS_MeshNodeIDFactory
72   vector<int> myIDElements; // index = ID client, value = ID vtk  --> A SUPPRIMER, ne sert que dans SMDS_MeshElementIDFactory
73   vector<int> myVtkIndex;   // index = ID vtk, value = ID client  --> A REPORTER dans SMDS_Mesh
74
75
76
77
78 ========= TODO ============
79
80 enlever vtkId de SMDS_MeshCell, utiliser SMDS_MeshElementIDFactory.
81
82 ajouter ID dans SMDS_Mesh::createTriangle 
83 verifier ID dans SMDS_Mesh::Find*OrCreate
84
85 ===================================================
86 occupation memoire cube 100*100*100 sans affichage
87 NOTES:
88 - sur Debian Sarge 64 bits, les mesures malloc_stat() semblent coherentes
89   avec une mesure externe globale(recherche du passage en swap du process).
90 - sur Ubuntu 9.10 64 bits, les mesures malloc_stat() donnent des resultats bizarres (surestimation ?),
91   mais la mesure avec l'outil KDE de surveillance systeme est OK avec la recherche du swap.
92
93
94 Reference : V513 Debian Sarge 64 bits: --> 463 - 33 = 430 Mo
95 -------------------------------------
96 Total (incl. mmap):
97 system bytes     =   43757568
98 in use bytes     =   32909584 = 33M
99 max mmap regions =         41
100 max mmap bytes   =   16371712
101 ----
102 Total (incl. mmap):
103 system bytes     =  464670720
104 in use bytes     =  463105120 = 463M
105 max mmap regions =         47
106 max mmap bytes   =   28188672
107
108 Debian Sarge 64 bits, vtkUnstructuredGrid nodes et hexa, 4 janvier 2010 --> 512 - 41 = 471M
109 -----------------------------------
110
111 Total (incl. mmap):
112 system bytes     =   52133888
113 in use bytes     =   41340320 : 41M
114 max mmap regions =         72
115 max mmap bytes   =   24625152
116 ----
117 Total (incl. mmap):
118 system bytes     =  520560640
119 in use bytes     =  518735584 : 512M
120 max mmap regions =         88
121 max mmap bytes   =  198385664
122
123 idem avec pool SMDS_MeshNodes --> 483 -33 = 450M
124 -----------------------------
125 Total (incl. mmap):
126 system bytes     =   43696128
127 in use bytes     =   32915184 : 33M 
128 max mmap regions =         41
129 max mmap bytes   =   16371712
130 ----
131 Total (incl. mmap):
132 system bytes     =  484806656
133 in use bytes     =  482980992 : 483M
134 max mmap regions =         58
135 max mmap bytes   =  184557568
136
137 idem ci-dessus + pool SMDS_VolumeVtkNodes --> 475 -33 = 442M (git: add ObjectPool.hxx)
138 -----------------------------------------
139
140 Total (incl. mmap):
141 system bytes     =   43200512
142 in use bytes     =   32908576 : 33M
143 max mmap regions =         41
144 max mmap bytes   =   16371712
145 ----
146 Total (incl. mmap):
147 system bytes     =  478068736
148 in use bytes     =  475144400 : 475M
149 max mmap regions =         59
150 max mmap bytes   =  184692736
151
152 remplacement SMDS_PositionPtr: (boost::shared_ptr<SMDS_Position> --> SMDS_Position*) --> 436 - 35 = 401M (git SMDS_Position)
153 ------------------------------------------------------------------------------------
154 Total (incl. mmap):
155 system bytes     =   45408256
156 in use bytes     =   35097680 : 35M
157 max mmap regions =         47
158 max mmap bytes   =   18116608
159 ----
160 Total (incl. mmap):
161 system bytes     =  438935552
162 in use bytes     =  436116560 : 436M
163 max mmap regions =         65
164 max mmap bytes   =  186437632
165
166 simplification SMDS_SpacePosition (pas de double[3]) --> 418 -33 = 385M (git SMDS_SpacePosition)
167 ----------------------------------------------------
168 Total (incl. mmap):
169 system bytes     =   42582016
170 in use bytes     =   32883552 : 33M
171 max mmap regions =         41
172 max mmap bytes   =   16371712
173 ----
174 Total (incl. mmap):
175 system bytes     =  421728256
176 in use bytes     =  418378000 : 418M
177 max mmap regions =         58
178 max mmap bytes   =  183640064
179
180 sizeof(SMDS_MeshElement) 16
181 sizeof(SMDS_MeshNode) 24
182 sizeof(SMDS_MeshCell) 24
183 sizeof(SMDS_VolumeVtkNodes) 24
184 sizeof(SMDS_Position) 16
185 sizeof(SMDS_SpacePosition) 16
186
187 impact d'un int en plus dans SMDS_MeshElement --> 426 - 33 = 393M
188 ---------------------------------------------
189
190 sizeof(SMDS_MeshElement) 24
191 sizeof(SMDS_MeshNode) 32       --> on retrouve bien les 8M
192 sizeof(SMDS_MeshCell) 24
193 sizeof(SMDS_VolumeVtkNodes) 24
194 sizeof(SMDS_Position) 16
195 sizeof(SMDS_SpacePosition) 16
196
197 Total (incl. mmap):
198 system bytes     =   43192320
199 in use bytes     =   32681088 : 33M
200 max mmap regions =         41
201 max mmap bytes   =   16371712
202 ----
203 Total (incl. mmap):
204 system bytes     =  429334528
205 in use bytes     =  426424576 : 426M
206 max mmap regions =         59
207 max mmap bytes   =  184692736
208
209 remplacement std::set par std::vector dans SMESHDS_SubMesh --> 347 - 35 = 312M
210 ----------------------------------------------------------
211 sizeof(SMDS_MeshElement) 24
212 sizeof(SMDS_MeshNode) 32
213 sizeof(SMDS_MeshCell) 24
214 sizeof(SMDS_VolumeVtkNodes) 24
215 sizeof(SMDS_Position) 16
216 sizeof(SMDS_SpacePosition) 16
217
218 Total (incl. mmap):
219 system bytes     =   45404160
220 in use bytes     =   35132160 --> 35M
221 max mmap regions =         49
222 max mmap bytes   =   17723392
223 ----
224 Total (incl. mmap):
225 system bytes     =  349831168
226 in use bytes     =  346885424 --> 347M
227 max mmap regions =         73
228 max mmap bytes   =  204148736
229
230 Ce resultat est coherent avec une recherche de swap sur une machine a 8Go de memoire:
231 Cube a 270**3 mailles (~20M mailles) --> 6.2 Go (idem Debian Sarge et Ubuntu 9.10, 64 bits)
232 Le meme avec V5.1.3 --> 14 Go (swap)
233