Télécharger toporstr.procedur

Retour à la liste

Numérotation des lignes :

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

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