Télécharger topovisu.procedur

Retour à la liste

Numérotation des lignes :

  1. * TOPOVISU PROCEDUR FD218221 25/12/18 21:15:15 12429
  2.  
  3. ************************************************************************
  4. ** Procedure called by TOPOPTIM to display results on-the-fly at the end
  5. ** of each cycle.
  6. **
  7. ** Author:
  8. ** Guenhael Le Quilliec (LaMe - Polytech Tours)
  9. **
  10. ** Version:
  11. ** 1.0 2025/11/13 Previously defined directly in TOPOPTIM. Now shows
  12. ** von Mises stress field when any stress constraint
  13. ** is active and improved for compatibility with
  14. ** TOPOPTIM V4.0.
  15. ************************************************************************
  16.  
  17. DEBP TOPOVISU tab*'TABLE' ;
  18.  
  19. * Input data
  20. * **********
  21.  
  22. Wtab = tab.'WTABLE' ;
  23. Ltab = Wtab.'LOGIQUE' ;
  24. visu = Wtab.'VISU' ;
  25.  
  26. * Number of cycles since the last call to TOPOPTIM
  27. nbritr = Wtab.'ITERATION' ;
  28.  
  29. * Initialization
  30. * **************
  31.  
  32. SI (nbritr EGA 1) ;
  33.  
  34. * Title of any printable variables
  35. * --------------------------------
  36. tmp = TABL ;
  37. tmp.'TEMPS_CYCLE' = CHAI ' Temps/cycle ' ;
  38. tmp.'OBJECTIF' = CHAI ' Objectif ' ;
  39. tmp.'FRACTION_VOLUME' = CHAI ' Vol. frac. ' ;
  40. tmp.'SIGMA_VM_MAX' = CHAI 'Max. von Mis.' ;
  41. tmp.'MAX_X_CHANGE' = CHAI ' Max X change' ;
  42. tmp.'PENALISATION_P' = CHAI ' Penalisat. P' ;
  43. tmp.'OC_D' = CHAI ' OC amort. D ' ;
  44. tmp.'OC_Q' = CHAI 'OC fac. GSF Q' ;
  45. tmp.'PROJECTION_RAIDEUR' = CHAI ' Raid. proj. ' ;
  46. tmp.'NB_ACTIVE_ELEM' = CHAI ' Nb. el. ' ;
  47.  
  48. * Create the title line
  49. * ---------------------
  50. visu.'TITRE' = CHAI 'FORMAT' '(A8)' ' Cycle ' ;
  51. pos = 8 ;
  52. REPE itr1 (DIME visu.'VARIABLES') ;
  53. varnam = EXTR visu.'VARIABLES' &itr1 ;
  54. SI (EGA varnam 'NB_ACTIVE_ELEM') ;
  55. visu.'TITRE' = CHAI visu.'TITRE' '|'/pos tmp.varnam/(pos+1) ;
  56. pos = pos + 10;
  57. SINO ;
  58. visu.'TITRE' = CHAI visu.'TITRE' '|'/pos tmp.varnam/(pos+1) ;
  59. pos = pos + 14;
  60. FINS ;
  61. FIN itr1 ;
  62.  
  63. * Save the cursor position
  64. * ------------------------
  65. visu.'POSITION' = pos ;
  66.  
  67. * Title, separation line and history table for PASAPAS
  68. * ----------------------------------------------------
  69. SI Ltab.'PASAPAS' ;
  70. visu.'TITRE_PASAPAS' = CHAI '|' visu.'TITRE' '|'/(pos+1);
  71. line = CHAI ;
  72. REPE itr1 ((DIME visu.'TITRE_PASAPAS') - 3) ;
  73. line = CHAI line '-' ;
  74. FIN itr1 ;
  75. visu.'LIGNE_PASAPAS' = line ;
  76. FINS ;
  77. SI Ltab.'PASAPAS' ;
  78. visu.'HISTORIQUE' = TABL ;
  79. FINS ;
  80.  
  81. FINS ;
  82.  
  83. * Save progression information and prepare new string to print
  84. * ************************************************************
  85.  
  86. print = CHAI Wtab.'CYCLE'*6 ;
  87. pos = 8 ;
  88. REPE itr1 (DIME visu.'VARIABLES') ;
  89. varnam = EXTR visu.'VARIABLES' &itr1 ;
  90. * Update its value if it is 'FRACTION_VOLUME' or 'TEMPS_CYCLE'
  91. SI (EGA varnam 'FRACTION_VOLUME') ;
  92. modD = Wtab.'MODELE_D' ;
  93. matD = Wtab.'CARACTERISTIQUES_D' ;
  94. SI (TOPOMODI tab (CHAI 'FRACTION_VOLUME') Wtab.'Y_D_PRECED' modD matD) ;
  95. Wtab.'FRACTION_VOLUME' = (INTG Wtab.'Y_D_PRECED' modD matD) /
  96. Wtab.'VOLUME_TOTAL_D' ;
  97. FINS ;
  98. FINS ;
  99. SI (EGA varnam 'TEMPS_CYCLE') ;
  100. Wtab.'TEMPS_CYCLE' = (TEMP 'HORL') - Wtab.'HORLOGE' ;
  101. FINS ;
  102. SI (EXIS Wtab varnam) ;
  103. SI (EGA varnam 'NB_ACTIVE_ELEM') ;
  104. print = CHAI print '|'/pos Wtab.varnam *(pos+6) ;
  105. pos = pos + 10;
  106. SINO ;
  107. SI (EGA varnam 'TEMPS_CYCLE') ;
  108. print = CHAI print '|'/pos (TOPOTEMP Wtab.varnam) /(pos+2) ;
  109. pos = pos + 14;
  110. SINO ;
  111. print = CHAI print '|'/pos
  112. 'FORMAT' '(ES13.6E2)' Wtab.varnam /(pos+1) ;
  113. pos = pos + 14;
  114. FINS ;
  115. FINS ;
  116. FINS ;
  117. FIN itr1 ;
  118.  
  119. SI Ltab.'PASAPAS' ;
  120. print = CHAI '|' print '|'/(pos+1) ;
  121. visu.'HISTORIQUE'.nbritr = print ;
  122. FINS ;
  123.  
  124. * On-the-fly field visualization
  125. * ******************************
  126.  
  127. * TODO to be improved for 3D
  128. SI tab.'TRAC' ;
  129. * Model
  130. * -----
  131. SI Ltab.'MECANIQUE' ;
  132. modA = Wtab.'MECANIQUE'.'MODELE_A' ;
  133. SINO ;
  134. modA = Wtab.'THERMIQUE'.'MODELE_A' ;
  135. FINS ;
  136. * Topology
  137. * --------
  138. SI Ltab.'ZONE_FIGEE' ;
  139. * Combine the Y field on D with the unitary field on F
  140. * This creates a 2-zone field merged into a single zone
  141. * field using to REDU
  142. YA = REDU (Wtab.'Y_D' ET Wtab.'UNIT_F') modA ;
  143. SINO ;
  144. YA = REDU Wtab.'Y_D' modA ;
  145. FINS ;
  146. * Deformed mesh
  147. * -------------
  148. SI ((NON Ltab.'CAS_MULTIPLES') ET (NON Ltab.'MECANISME')
  149. ET Ltab.'MECANIQUE' ET Ltab.'PASAPAS') ;
  150. tmp = Wtab.'RESOLUTION_A'.'MAX_ID' ;
  151. YA modYA = YA modA PLUS Wtab.'RESOLUTION_A'.'DEPLACEMENTS'.tmp ;
  152. SINO ;
  153. modYA = modA ;
  154. FINS ;
  155. * Microscopic von Mises
  156. * ---------------------
  157. SI Ltab.'CONTRAINTE_SIGMA_VM' ;
  158. * Microscopic von Mises on A
  159. * Remark: values on F (if present) will be set to 0.0
  160. micvnmA = REDU Wtab.'MICROSCOPIC_VM_I' modA ;
  161. * Deformed mesh
  162. SI ((NON Ltab.'CAS_MULTIPLES') ET (NON Ltab.'MECANISME')
  163. ET Ltab.'MECANIQUE' ET Ltab.'PASAPAS') ;
  164. tmp = Wtab.'RESOLUTION_A'.'MAX_ID' ;
  165. micvnmA modvnmA = micvnmA modA PLUS Wtab.'RESOLUTION_A'.'DEPLACEMENTS'.tmp ;
  166. SINO ;
  167. modvnmA = modA ;
  168. FINS ;
  169. * Copy the von Mises field & model on the top of the topology
  170. SI (EGA (VALE 'MODE') 'TRID') ;
  171. tmp = (CONT (EXTR modA 'MAIL')) COOR 3 ;
  172. tmp = 0.0 (1.05 * ((MAXI tmp) - (MINI tmp))) 0.0 ;
  173. SINO ;
  174. tmp = (CONT (EXTR modA 'MAIL')) COOR 2 ;
  175. tmp = 0.0 (1.05 * ((MAXI tmp) - (MINI tmp))) ;
  176. FINS ;
  177. micvnmA modvnmA = micvnmA modvnmA PLUS tmp ;
  178. * Rescaling of the topology field
  179. min = MINI micvnmA ;
  180. * max = MAXI micvnmA ;
  181. max = tab.'SIGMA_VM_LIMITE' ;
  182. YA = (YA * (max - min)) + min ;
  183. * Rename field component
  184. micvnmA = EXCO 'SCAL' micvnmA 'MCVM' ;
  185. YA = EXCO 'SCAL' YA 'MCVM' ;
  186. * Plot von Mises (top) and topology (bottom)
  187. TRAC (YA ET micvnmA) (modYA ET modvnmA) (PROG min 'PAS' ((max - min) / 56.0) max) 'NCLK'
  188. TITR (CHAI 'TOPOPTIM : trace en temps reel de la cont. de von Mises micro. et de la topologie (cycle' ' ' Wtab.'CYCLE' ')') ;
  189. SINO ;
  190. * Plot topology
  191. TRAC YA modYA (PROG 0.0 'PAS' (1.0 / 56.0) 1.0) 'NCLK'
  192. TITR (CHAI 'TOPOPTIM : trace en temps reel de la topologie (cycle' ' ' Wtab.'CYCLE' ')') ;
  193. FINS ;
  194. FINS ;
  195.  
  196. * Print progression to screen
  197. * ***************************
  198.  
  199. SI (NON Ltab.'PASAPAS') ;
  200. SI ((nbritr EGA 1) OU Ltab.'CAS_MULTIPLES') ;
  201. MESS visu.'TITRE';
  202. FINS ;
  203. MESS print ;
  204. SI (Ltab.'STOP' OU Ltab.'CAS_MULTIPLES') ;
  205. MESS visu.'TITRE';
  206. SAUT 1 'LIGN' ;
  207. FINS ;
  208. SINO ;
  209. tmp = DIME print ;
  210. SI (NON Ltab.'STOP') ;
  211. SAUT 1 'LIGN' ;
  212. MESS (CHAI '+' visu.'LIGNE_PASAPAS' /2 '+') ;
  213. MESS (CHAI '|' '|'/tmp) ;
  214. MESS (CHAI '|' 'TOPOPTIM : Progression'/((tmp - 22) / 2) '|'/tmp) ;
  215. MESS (CHAI '|' '|'/tmp) ;
  216. MESS (CHAI '|' 'Cycle'*(tmp / 2) ' ' Wtab.'CYCLE' '|'/tmp) ;
  217. MESS (CHAI '|' '|'/tmp) ;
  218. MESS visu.'TITRE_PASAPAS' ;
  219. MESS print ;
  220. MESS (CHAI '|' '|'/tmp) ;
  221. MESS (CHAI '+' visu.'LIGNE_PASAPAS' /2 '+') ;
  222. SAUT 1 'LIGN' ;
  223. SINO ;
  224. SAUT 1 'LIGN' ;
  225. MESS (CHAI '+' visu.'LIGNE_PASAPAS' /2 '+') ;
  226. MESS (CHAI '|' '|'/tmp) ;
  227. MESS (CHAI '|' 'TOPOPTIM : Historique'/((tmp - 21) / 2) '|'/tmp) ;
  228. MESS (CHAI '|' '|'/tmp) ;
  229. MESS visu.'TITRE_PASAPAS';
  230. REPE itr1 nbritr ;
  231. MESS visu.'HISTORIQUE'.&itr1 ;
  232. FIN itr1 ;
  233. MESS (CHAI '+' visu.'LIGNE_PASAPAS' /2 '+') ;
  234. FINS ;
  235. FINS ;
  236.  
  237. * Write last information before leaving
  238. * *************************************
  239.  
  240. SI Ltab.'STOP' ;
  241. * Summary
  242. * -------
  243. SI (NON Ltab.'PASAPAS') ;
  244. MESS '-------------------------------------------------------------------------------' ;
  245. FINS ;
  246. SAUT 1 'LIGN' ;
  247. MESS 'Bilan :' ;
  248. MESS '=======' ;
  249. SI tab.'CONVERGENCE' ;
  250. MESS ' - Convergence apres' ' ' Wtab.'CYCLE' ' cycles.' ;
  251. SINO ;
  252. MESS ' - Nombre maximum de cycles d''optimisation atteint.' ;
  253. FINS ;
  254. SI (EGA (DIME tab.'REPRISES') 0) ;
  255. MESS ' - Duree de l''optimisation topologique' ' ' (TOPOTEMP (TEMP 'HORL')) ;
  256. SINO ;
  257. MESS ' - Duree de la reprise d''optimisation topologique' ' ' (TOPOTEMP (TEMP 'HORL')) ;
  258. FINS ;
  259. SAUT 1 'LIGN' ;
  260. MESS '+-----------------------------------------------------------------------------+' ;
  261. SI (EGA (DIME tab.'REPRISES') 0) ;
  262. MESS '| F I N D E L A P R O C E D U R E T O P O P T I M |' ;
  263. SINO ;
  264. MESS '| P R O C E D U R E T O P O P T I M : F I N D E L A R E P R I S E |' ;
  265. FINS ;
  266. MESS '+-----------------------------------------------------------------------------+' ;
  267. SAUT 1 'LIGN' ;
  268. FINS ;
  269.  
  270. FINP ;
  271.  
  272.  
  273.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales