Télécharger toporstr.procedur

Retour à la liste

Numérotation des lignes :

  1. * TOPORSTR PROCEDUR CB215821 18/03/22 21:15:05 9786
  2.  
  3. ************************************************************************
  4. ** Procedure called by TOPOPTIM for applying geometric restrictions
  5. **
  6. ** Author:
  7. ** Guenhael Le Quilliec (LaMe - Polytech Tours)
  8. **
  9. ** Version:
  10. ** 1.0 2017/04/18
  11. ************************************************************************
  12.  
  13. DEBP TOPORSTR tab0*'TABLE' ;
  14. * Criterion to fuse the nodes
  15. d0 = 1.0e-9 ;
  16. * Node mesh of the barycenters
  17. m0 = tab0.'WTABLE'.'MAILLAGE'.'GRAVITE' ;
  18. * Switch the sensitivity from element field to node field
  19. f0 = PROI m0 tab0.'WTABLE'.'SENSIBILITE' ;
  20. * Loop on each restriction
  21. REPE loop0 (DIME tab0.'RESTRICTIONS') ;
  22. * Find the next restriction
  23. SI (EXIS tab0.'RESTRICTIONS' &loop0) ;
  24. Rstr0 = tab0.'RESTRICTIONS'.&loop0 ;
  25. SINO ;
  26. QUIT loop0 ;
  27. FINS ;
  28. * Node mesh of the barycenters of the restricted zone
  29. * and its initial sensitivity
  30. RstrZ0 = EXIS Rstr0 'ZONE' ;
  31. SI RstrZ0 ;
  32. m1 = (REDU tab0.'WTABLE'.'UN'.(1) Rstr0.'ZONE')
  33. POIN 'SUPE' -1.0 ;
  34. ELIM m0 m1 d0 ;
  35. f1 = REDU f0 m1 ;
  36. SINO ;
  37. m1 = m0 ;
  38. f1 = f0 ;
  39. FINS ;
  40. * Make copies with the prescribed gometric transformation
  41. * Fuse the nodes of their supports
  42. * And get the mean sensitivity fields
  43. SI (EGA Rstr0.'TYPE' 'SYME_POIN') ;
  44. m2 f2 = m1 f1 SYME 'POIN' Rstr0.'POIN1' ;
  45. ELIM m1 m2 d0 ;
  46. f1 = (f1 + f2) / 2.0 ;
  47. FINS ;
  48. SI (EGA Rstr0.'TYPE' 'SYME_DROI') ;
  49. m2 f2 = m1 f1 SYME 'DROI' Rstr0.'POIN1'
  50. Rstr0.'POIN2' ;
  51. ELIM m1 m2 d0 ;
  52. f1 = (f1 + f2) / 2.0 ;
  53. FINS ;
  54. SI (EGA Rstr0.'TYPE' 'SYME_PLAN') ;
  55. m2 f2 = m1 f1 SYME 'PLAN' Rstr0.'POIN1'
  56. Rstr0.'POIN2'
  57. Rstr0.'POIN3' ;
  58. ELIM m1 m2 d0 ;
  59. f1 = (f1 + f2) / 2.0 ;
  60. FINS ;
  61. SI (EGA Rstr0.'TYPE' 'PERIODICITE_CIRCULAIRE') ;
  62. SI (Rstr0.'PERIODES' EGA 2) ;
  63. SI ((VALE 'DIME') EGA 3) ;
  64. m2 f2 = m1 f1 TOUR 180.0 Rstr0.'POIN1'
  65. Rstr0.'POIN2' ;
  66. SINO ;
  67. m2 f2 = m1 f1 TOUR 180.0 Rstr0.'POIN1' ;
  68. FINS ;
  69. ELIM m1 m2 d0 ;
  70. f1 = (f1 + f2) / 2.0 ;
  71. SINO ;
  72. msh0 = TABL ;
  73. msh0.(0) = m1 ;
  74. fld0 = TABL ;
  75. fld0.(0) = f1 ;
  76. p0 = Rstr0.'PERIODES' ;
  77. a0 = 360.0 / p0 ;
  78. SI ((VALE 'DIME') EGA 3) ;
  79. p1 = Rstr0.'POIN1' ;
  80. p2 = Rstr0.'POIN2' ;
  81. REPE loop1 (p0 - 1) ;
  82. old0 = &loop1 - 1 ;
  83. msh0.&loop1 fld0.&loop1 = msh0.old0 fld0.old0
  84. TOUR a0 p1 p2 ;
  85. FIN loop1 ;
  86. SINO ;
  87. p1 = Rstr0.'POIN1' ;
  88. REPE loop1 (p0 - 1) ;
  89. old0 = &loop1 - 1 ;
  90. msh0.&loop1 fld0.&loop1 = msh0.old0 fld0.old0
  91. TOUR a0 p1 ;
  92. FIN loop1 ;
  93. FINS ;
  94. REPE loop1 (p0 - 1) ;
  95. ELIM m1 msh0.&loop1 d0 ;
  96. f1 = f1 + fld0.&loop1 ;
  97. FIN loop1 ;
  98. f1 = f1 / p0 ;
  99. FINS ;
  100. FINS ;
  101. SI (EGA Rstr0.'TYPE' 'PERIODICITE_AXIALE') ;
  102. msh0 = TABL ;
  103. msh0.(0) = m1 ;
  104. fld0 = TABL ;
  105. fld0.(0) = f1 ;
  106. p0 = Rstr0.'PERIODES' ;
  107. v0 = Rstr0.'POIN2' MOIN
  108. Rstr0.'POIN1' ;
  109. REPE loop1 (p0 - 1) ;
  110. old0 = &loop1 - 1 ;
  111. msh0.&loop1 fld0.&loop1 = msh0.old0 fld0.old0
  112. PLUS v0 ;
  113. loop2 = -1 * &loop1 ;
  114. old0 = loop2 + 1 ;
  115. msh0.loop2 fld0.loop2 = msh0.old0 fld0.old0 MOIN v0 ;
  116. FIN loop1 ;
  117. REPE loop1 (p0 - 1) ;
  118. ELIM m1 msh0.&loop1 d0 ;
  119. f1 = f1 + fld0.&loop1 ;
  120. loop2 = -1 * &loop1 ;
  121. ELIM m1 msh0.loop2 d0 ;
  122. f1 = f1 + fld0.loop2 ;
  123. FIN loop1 ;
  124. f1 = f1 / p0 ;
  125. FINS ;
  126. * Final sensitivity
  127. SI RstrZ0 ;
  128. f0 = f0 - (REDU f0 m1) + f1 ;
  129. SINO ;
  130. f0 = f1 ;
  131. FINS ;
  132. FIN loop0 ;
  133. * Switch the sensitivity from node field to element field
  134. SI (EXIS tab0.'WTABLE' 'MECANIQUE') ;
  135. mod1 = tab0.'WTABLE'.'MECANIQUE'.'MODELE'.(1) ;
  136. SINO ;
  137. mod1 = tab0.'WTABLE'.'THERMIQUE'.'MODELE'.(1) ;
  138. FINS ;
  139. tab0.'WTABLE'.'SENSIBILITE' = MANU 'CHML' mod1 'REPA' 'SCAL'
  140. (EXTR f0 'VALE') 'GRAVITE' ;
  141. FINP ;
  142.  
  143.  
  144.  

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