Télécharger topofonc.procedur

Retour à la liste

Numérotation des lignes :

  1. * TOPOFONC PROCEDUR FD218221 25/12/18 21:15:07 12429
  2.  
  3. ************************************************************************
  4. ** Procedure providing various functions used by TOPOPTIM
  5. ** (penalization, projection, etc.) and their derivatives.
  6. **
  7. ** Author:
  8. ** Guenhael Le Quilliec (LaMe - Polytech Tours)
  9. **
  10. ** Version:
  11. ** 1.0 2025/11/13 Initial version
  12. ************************************************************************
  13.  
  14. DEBP TOPOFONC ;
  15.  
  16. * Input data
  17. * **********
  18.  
  19. ARGU option1/'MOT' ;
  20. ARGU option2/'MOT' ;
  21. ARGU option3/'MOT' ;
  22. ARGU X*'MCHAML' ;
  23.  
  24. * Initialization
  25. typ = MOT ' ' ;
  26. Lval = FAUX ;
  27. LdX = FAUX ;
  28.  
  29. * Options
  30. SI (EXIS option1) ;
  31. SI (EGA option1 'VALEUR') ;
  32. Lval = VRAI ;
  33. SINO ;
  34. SI (EGA option1 'DERIVEE') ;
  35. LdX = VRAI ;
  36. SINO ;
  37. typ = MOT option1 ;
  38. FINS ;
  39. FINS ;
  40. FINS ;
  41. SI (EXIS option2) ;
  42. SI (EGA option2 'VALEUR') ;
  43. Lval = VRAI ;
  44. SINO ;
  45. SI (EGA option2 'DERIVEE') ;
  46. LdX = VRAI ;
  47. SINO ;
  48. typ = MOT option2 ;
  49. FINS ;
  50. FINS ;
  51. FINS ;
  52. SI (EXIS option3) ;
  53. SI (EGA option3 'VALEUR') ;
  54. Lval = VRAI ;
  55. SINO ;
  56. SI (EGA option3 'DERIVEE') ;
  57. LdX = VRAI ;
  58. SINO ;
  59. typ = MOT option3 ;
  60. FINS ;
  61. FINS ;
  62. FINS ;
  63. SI ((NON Lval) ET (NON LdX)) ;
  64. Lval = VRAI ;
  65. FINS ;
  66.  
  67. **********************************************************************
  68. * PENALIZATION FUNCTIONS *
  69. **********************************************************************
  70.  
  71. * SIMP and modified SIMP
  72. * **********************
  73.  
  74. SI (EGA typ 'SIMP') ;
  75. * Specific inputs
  76. ARGU p*'FLOTTANT' F1 ;
  77. ARGU tmp1/'FLOTTANT' tmp2/'MCHAML' ;
  78. SI (EXIS tmp1) ;
  79. F2 = tmp1 ;
  80. FINS ;
  81. SI (EXIS tmp2) ;
  82. F2 = tmp2 ;
  83. FINS ;
  84. * SIMP
  85. SI (NON (EXIS F2)) ;
  86. SI Lval ;
  87. fld = F1 * (X ** p) ;
  88. FINS ;
  89. SI LdX ;
  90. dfld = (F1 * p) * (X ** (p - 1.0)) ;
  91. FINS ;
  92. * Modified SIMP
  93. SINO ;
  94. dif = F2 - F1 ;
  95. SI Lval ;
  96. fld = F1 + (dif * (X ** p)) ;
  97. FINS ;
  98. SI LdX ;
  99. dfld = (dif * p) * (X ** (p - 1.0)) ;
  100. FINS ;
  101. FINS ;
  102. FINS ;
  103.  
  104. * RAMP
  105. * ****
  106.  
  107. SI (EGA typ 'RAMP') ;
  108. * Specific inputs
  109. ARGU q*'FLOTTANT' minfld maxfld ;
  110. dif = maxfld - minfld ;
  111. tmp = (1.0 + q) - (q * X) ;
  112. * Compute F
  113. SI Lval ;
  114. fld = minfld + ((dif * X) / tmp) ;
  115. FINS ;
  116. * Compute dF
  117. SI LdX ;
  118. dfld = (dif * (1.0 + q)) / (tmp ** 2) ;
  119. FINS ;
  120. FINS ;
  121.  
  122. **********************************************************************
  123. * PROJECTION FUNCTIONS *
  124. **********************************************************************
  125.  
  126. * Heaviside, Guest et al. (2004)
  127. * ******************************
  128.  
  129. SI (EGA typ 'GUEST_2004') ;
  130. * Specific input
  131. ARGU bta*'FLOTTANT' eta/'FLOTTANT' ;
  132. tmp1 = EXP ((-1.0 * bta) * X) ;
  133. tmp2 = EXP (-1.0 * bta) ;
  134. * Compute F
  135. SI Lval ;
  136. fld = (1.0 - tmp1) + (X * tmp2) ;
  137. FINS ;
  138. * Compute dF
  139. SI LdX ;
  140. dfld = (bta * tmp1) + tmp2 ;
  141. FINS ;
  142. FINS ;
  143.  
  144. * Shifted hyperbolic sigmoid
  145. * **************************
  146.  
  147. SI (EGA typ 'SIGMOID_TANH') ;
  148. * Specific inputs
  149. ARGU bta*'FLOTTANT' eta/'FLOTTANT' ;
  150. SI (NON (EXIS eta)) ;
  151. eta = 0.0 ;
  152. FINS ;
  153. * Normalized hyperbolic sigmoid
  154. SI (EGA eta 0.0) ;
  155. tmp1 = TANH (bta * X) ;
  156. tmp2 = TANH bta ;
  157. * Compute F
  158. SI Lval ;
  159. fld = tmp1 / tmp2 ;
  160. FINS ;
  161. * Compute dF
  162. SI LdX ;
  163. dfld = (bta / tmp2) * (1.0 - (tmp1 ** 2)) ;
  164. FINS ;
  165. SINO ;
  166. * Centered hyperbolic sigmoid
  167. SI (EGA eta 0.5) ;
  168. tmp1 = TANH (bta * (X - 0.5)) ;
  169. tmp2 = TANH (bta * 0.5) ;
  170. * Compute F
  171. SI Lval ;
  172. fld = (tmp1 + tmp2) / (2.0 * tmp2) ;
  173. FINS ;
  174. * Compute dF
  175. SI LdX ;
  176. dfld = (bta / (2.0 * tmp2)) * (1.0 - (tmp1 ** 2)) ;
  177. FINS ;
  178. * Shifted hyperbolic sigmoid
  179. SINO ;
  180. tmp1 = TANH (bta * eta) ;
  181. tmp2 = TANH (bta * (X - eta)) ;
  182. tmp3 = TANH (bta * (1.0 - eta)) ;
  183. * Compute F
  184. SI Lval ;
  185. fld = (tmp1 + tmp2) / (tmp1 + tmp3) ;
  186. FINS ;
  187. * Compute dF
  188. SI LdX ;
  189. dfld = (bta / (tmp1 + tmp3)) * (1.0 - (tmp2 ** 2)) ;
  190. FINS ;
  191. FINS ;
  192. FINS ;
  193. FINS ;
  194.  
  195. * Output data
  196. * ***********
  197.  
  198. SI Lval ;
  199. RESP fld ;
  200. FINS ;
  201. SI LdX ;
  202. RESP dfld ;
  203. FINS ;
  204.  
  205. FINP ;
  206.  
  207.  
  208.  

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