Télécharger topocrit.procedur

Retour à la liste

Numérotation des lignes :

  1. * TOPOCRIT PROCEDUR FD218221 21/04/14 21:15:08 10965
  2.  
  3. ************************************************************************
  4. ** Procedure called by TOPOPTIM for updating the topology using the
  5. ** Optimality Criterion method
  6. **
  7. ** Author:
  8. ** Guenhael Le Quilliec (LaMe - Polytech Tours)
  9. **
  10. ** Version:
  11. ** 2.2 2021/03/19 Modification of default value of 'OC_L2'
  12. ** 2.1 2018/01/29 Fixing an issue with quadratic elements
  13. ** 2.0 2017/11/11
  14. ************************************************************************
  15.  
  16. DEBP TOPOCRIT tab0*'TABLE' ;
  17. * Input data
  18. un1 = tab0.'WTABLE'.'UN'.(1) ;
  19. d0 = tab0.'WTABLE'.'FACTEUR_D' ;
  20. move0 = un1 * tab0.'TOPOLOGIE_MAX_INC' ;
  21. void0 = tab0.'TOPOLOGIE_MIN' ;
  22. xOld0 = tab0.'WTABLE'.'TOPOLOGIE' ;
  23. xOldP0 = xOld0 + move0 ;
  24. xOldM0 = xOld0 - move0 ;
  25. dc0 = tab0.'WTABLE'.'SENSIBILITE' ;
  26. q0 = tab0.'WTABLE'.'FACTEUR_Q' ;
  27. mcn0 = EXIS tab0 'MECANISME' ;
  28. mecha0 = EXIS tab0.'WTABLE' 'MECANIQUE' ;
  29. SI mecha0 ;
  30. mod1 = tab0.'WTABLE'.'MECANIQUE'.'MODELE'.(1) ;
  31. mat1 = tab0.'WTABLE'.'MECANIQUE'.'CARACTERISTIQUES'.(1) ;
  32. SINO ;
  33. mod1 = tab0.'WTABLE'.'THERMIQUE'.'MODELE'.(1) ;
  34. mat1 = tab0.'WTABLE'.'THERMIQUE'.'CARACTERISTIQUES'.(1) ;
  35. FINS ;
  36. v1 = tab0.'WTABLE'.'VOLUME'.(1) * tab0.'FRACTION_VOLUME' ;
  37. l1 = tab0.'OC_L1' ;
  38. SI (NON (EXIS tab0 'OC_L2')) ;
  39. l2 = MAXI 'ABS' dc0 ;
  40. SINO ;
  41. l2 = tab0.'OC_L2' ;
  42. FINS ;
  43. l2min = tab0.'OC_L2_MIN' ;
  44. crit0 = tab0.'OC_CRITERE' ;
  45. maxit0 = tab0.'OC_MAX_IT' ;
  46. **** SI mcn0 ;
  47. bmin0 = tab0.'OC_B_MIN' ;
  48. **** FINS ;
  49. * x0 = tab0.'WTABLE'.'UN'.(1) * 0.0 ;
  50. * Update the topology
  51. REPE loop1 maxit0 ;
  52. SI ((((l2 - l1) / (l1 + l2)) > crit0) ET (l2 > l2min)) ;
  53. lmid0 = 0.5 * (l2 + l1) ;
  54. Be0 = dc0 * (-1.0 / lmid0) ;
  55. * Negative values does not only happen for compliant
  56. * mechanism synthesis but also for elastic strain energy
  57. * minimization with quadratic elements
  58. **** SI mcn0 ;
  59. Be0 = BORN Be0 'SCAL' 'MINI' bmin0 ;
  60. **** FINS ;
  61. x0 = xOld0 * (Be0**d0) ;
  62. SI (q0 > 1) ;
  63. x0 = x0**q0 ;
  64. FINS ;
  65. * Bound x0 (void0<x0<1 and Abs(x0-xOld0)<move0)
  66. mask0 = x0 MASQ 'INFE' xOldP0 ;
  67. x0 = (x0 * mask0) - (xOldP0 * (mask0 - un1)) ;
  68. x0 = BORN x0 'SCAL' 'MAXI' 1.0 ;
  69. mask0 = x0 MASQ 'SUPE' xOldM0 ;
  70. x0 = (x0 * mask0) - (xOldM0 * (mask0 - un1)) ;
  71. x0 = BORN x0 'SCAL' 'MINI' void0 ;
  72. * New bound of the Lagrange multiplier
  73. SI ((INTG x0 mod1 mat1) > v1) ;
  74. l1 = lmid0 ;
  75. SINO ;
  76. l2 = lmid0 ;
  77. FINS ;
  78. SINO ;
  79. QUIT loop1 ;
  80. FINS ;
  81. FIN loop1 ;
  82. * Save the new topology
  83. tab0.'WTABLE'.'TOPOLOGIE' = x0 ;
  84. FINP ;
  85.  

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