Télécharger topocrit.procedur

Retour à la liste

Numérotation des lignes :

  1. * TOPOCRIT PROCEDUR CB215821 18/03/22 21:15:02 9786
  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.1 2018/01/29 Fixing an issue with quadratic elements
  12. ** 2.0 2017/11/11
  13. ************************************************************************
  14.  
  15. DEBP TOPOCRIT tab0*'TABLE' ;
  16. * Input data
  17. un1 = tab0.'WTABLE'.'UN'.(1) ;
  18. d0 = tab0.'WTABLE'.'FACTEUR_D' ;
  19. move0 = un1 * tab0.'TOPOLOGIE_MAX_INC' ;
  20. void0 = tab0.'TOPOLOGIE_MIN' ;
  21. xOld0 = tab0.'WTABLE'.'TOPOLOGIE' ;
  22. xOldP0 = xOld0 + move0 ;
  23. xOldM0 = xOld0 - move0 ;
  24. dc0 = tab0.'WTABLE'.'SENSIBILITE' ;
  25. q0 = tab0.'WTABLE'.'FACTEUR_Q' ;
  26. mcn0 = EXIS tab0 'MECANISME' ;
  27. mecha0 = EXIS tab0.'WTABLE' 'MECANIQUE' ;
  28. SI mecha0 ;
  29. mod1 = tab0.'WTABLE'.'MECANIQUE'.'MODELE'.(1) ;
  30. mat1 = tab0.'WTABLE'.'MECANIQUE'.'CARACTERISTIQUES'.(1) ;
  31. SINO ;
  32. mod1 = tab0.'WTABLE'.'THERMIQUE'.'MODELE'.(1) ;
  33. mat1 = tab0.'WTABLE'.'THERMIQUE'.'CARACTERISTIQUES'.(1) ;
  34. FINS ;
  35. v1 = tab0.'WTABLE'.'VOLUME'.(1) * tab0.'FRACTION_VOLUME' ;
  36. l1 = tab0.'OC_L1' ;
  37. l2 = tab0.'OC_L2' ;
  38. l2min = tab0.'OC_L2_MIN' ;
  39. crit0 = tab0.'OC_CRITERE' ;
  40. maxit0 = tab0.'OC_MAX_IT' ;
  41. **** SI mcn0 ;
  42. bmin0 = tab0.'OC_B_MIN' ;
  43. **** FINS ;
  44. * x0 = tab0.'WTABLE'.'UN'.(1) * 0.0 ;
  45. * Update the topology
  46. REPE loop1 maxit0 ;
  47. SI ((((l2 - l1) / (l1 + l2)) > crit0) ET (l2 > l2min)) ;
  48. lmid0 = 0.5 * (l2 + l1) ;
  49. tmp1 = dc0 * (-1.0 / lmid0) ;
  50. * Negative values does not only happen for compliant
  51. * mechanism synthesis but also for elastic strain energy
  52. * minimization with quadratic elements
  53. **** SI mcn0 ;
  54. tmp1 = BORN tmp1 'SCAL' 'MINI' bmin0 ;
  55. **** FINS ;
  56. tmp1 = xOld0 * (tmp1**d0) ;
  57. SI (q0 > 1) ;
  58. tmp1 = tmp1**q0 ;
  59. FINS ;
  60. ma1 = tmp1 MASQ 'INFE' xOldP0 ;
  61. tmp1 = (tmp1 * ma1) - (xOldP0 * (ma1 - un1)) ;
  62. tmp1 = BORN tmp1 'SCAL' 'MAXI' 1.0 ;
  63. ma1 = tmp1 MASQ 'SUPE' xOldM0 ;
  64. tmp1 = (tmp1 * ma1) - (xOldM0 * (ma1 - un1)) ;
  65. x0 = BORN tmp1 'SCAL' 'MINI' void0 ;
  66. tmp1 = INTG x0 mod1 mat1 ;
  67. SI (tmp1 > v1) ;
  68. l1 = lmid0 ;
  69. SINO ;
  70. l2 = lmid0 ;
  71. FINS ;
  72. SINO ;
  73. QUIT loop1 ;
  74. FINS ;
  75. FIN loop1 ;
  76. * Save the new topology
  77. tab0.'WTABLE'.'TOPOLOGIE' = x0 ;
  78. FINP ;
  79.  
  80.  
  81.  

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