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