Télécharger toporstr.procedur

Retour à la liste

Numérotation des lignes :

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

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