Télécharger waam.procedur

Retour à la liste

Numérotation des lignes :

  1. * WAAM PROCEDUR PASCAL 20/09/11 21:15:00 10710
  2. DEBP WAAM TAB1*'TABLE' ;
  3.  
  4. *-------------------------- Initialisations ---------------------------*
  5.  
  6. * Lecture des options :
  7. argu MOT1*'MOT' ;
  8.  
  9. * icas1 = 1 / 2 pour MAIL / VISU
  10. * Si 0 in fine : erreur.
  11. icas1 = 0 ;
  12.  
  13. *----------------------------------------------------------------------*
  14. * Option MAIL
  15. *----------------------------------------------------------------------*
  16.  
  17. si (ega mot1 'MAIL') ;
  18. icas1 = 1 ;
  19.  
  20. *----------------- Lecture des arguments de l'option ------------------*
  21.  
  22. imot1 = faux ; imot2 = faux ; imot3 = faux ;
  23. repe b1 3 ;
  24. argu moti1/'MOT' ;
  25. si (non (exis moti1)) ; quit b1 ; fins ;
  26. si (ega moti1 'PAS') ;
  27. imot1 = vrai ;
  28. argu pas1*'FLOTTANT' ;
  29. fins ;
  30. si (ega moti1 'LARG') ;
  31. imot2 = vrai ;
  32. argu larg1*'FLOTTANT' ;
  33. fins ;
  34. si (ega moti1 'DENS') ;
  35. imot3 = vrai ;
  36. argu dens1*'FLOTTANT' ;
  37. fins ;
  38. fin b1 ;
  39. si (non imot1) ;
  40. erre '***** ERREUR : il manque la donnee du PAS de discretisation du depot' ;
  41. quit waam ;
  42. fins ;
  43. si (non imot2) ;
  44. si (exis tab1 'LARGEUR_DE_PASSE') ;
  45. larg1 = tab1.largeur_de_passe ;
  46. sino ;
  47. erre '***** ERREUR : il manque la donnee de la LARGeur du depot' ;
  48. quit waam ;
  49. fins ;
  50. fins ;
  51. si (non imot3) ;
  52. argu N1/'ENTIER' ;
  53. si (exis N1) ;
  54. N1 = maxi (lect N1 1) ;
  55. sino ;
  56. N1 = 1 ;
  57. fins ;
  58. dens1 = pas1 / (flot N1) ;
  59. fins ;
  60.  
  61. *------------------- MAILLAGE des passes de soudage -------------------*
  62.  
  63. si (non (exis tab1 passes)) ;
  64. erre '***** ERREUR : la table de SOUDAGE en entree n"a pas d"indice PASSES' ;
  65. quit waam ;
  66. fins ;
  67.  
  68. * Definition d'une tolerance geometrique :
  69. tol1 = 1.e-4 * dens1 ;
  70.  
  71. * Maillage d'une section de cordon :
  72. lsi1 = (0 0 0) droi (0 larg1 0) dini dens1 dfin dens1 ;
  73.  
  74. * Initialisattion sorties (MAIL) :
  75. tab2 = table ;
  76. ttps1 = table ;
  77. tmai1 = table ;
  78. indi1 = 0 ;
  79.  
  80. *--------------- Maillage de la trajectoire (MAILLAGE) ----------------*
  81.  
  82. mtraj1 = tab1.trajectoire ;
  83. evdep1 = tab1.evolution_deplacement ;
  84.  
  85. nb1 = nbel mtraj1 ;
  86. mail2 = vide maillage ;
  87. idebui1 = vrai ;
  88. ibouci1 = faux ;
  89.  
  90. * Boucle sur elements de la trajectoire :
  91. repe b1 nb1 ;
  92.  
  93. * Lecture ieme element de la trajectoire :
  94. eli1 = mtraj1 elem &b1 ;
  95. Pi1 = eli1 poin 1 ;
  96. Pi2 = eli1 poin 2 ;
  97. vai1 = Pi2 moin Pi1 ;
  98. vni1 = vai1 / (norm vai1) ;
  99. mcouli1 = (eli1 elem coul) extr 1 ;
  100. imaili1 = ega mcouli1 'ROUG' ;
  101. idepli1 = ega mcouli1 'VERT' ;
  102. *
  103. * Segment VERT : deplacement
  104. si idepli1 ;
  105. idebui1 = vrai ;
  106. ibouci1 = faux ;
  107. iter b1 ;
  108. fins ;
  109. *
  110. * Segment ROUGE : maillage
  111. si imaili1 ;
  112.  
  113. * Si debut nouvelle passe :
  114. si idebui1 ;
  115.  
  116. * Identification de la passe :
  117. npassi1 = 0 ;
  118. repe bp1 (dime tab1.passes) ;
  119. mailpss1 = (tab1.passes.&bp1).maillage ;
  120. pps1 pps2 = (mailpss1 poin 1) (mailpss1 poin 2) ;
  121. si ((Pi1 ega pps1) et (Pi2 ega pps2)) ;
  122. tpassi1 = tab1.passes.&bp1 ;
  123. npassi1 = &bp1 ;
  124. mess '***** WAMM : maillage de la passe :' npassi1 ;
  125. quit bp1 ;
  126. fins ;
  127. fin bp1 ;
  128. si (npassi1 ega 0) ;
  129. erre '***** WAAM : passe non identifiee' ;
  130. quit waam ;
  131. fins ;
  132.  
  133. * Hauteur de cordon :
  134. debi1 = tpassi1 . debit ;
  135. vite1 = tpassi1 . vitesse ;
  136. haut1 = debi1 / vite1 / larg1 ;
  137. mess (chai '***** WAMM : hauteur de la passe :' npassi1 ' =' haut1) ;
  138.  
  139. * Maillage :
  140. * si1 : maillage section courante :
  141. * vnsi1 : normale a la section
  142. si1 = lsi1 tran (0 0 haut1) dini dens1 dfin dens1 ;
  143. vnsi1 = 1 0 0 ;
  144.  
  145. * Positionnement extremite initiale (Pi1 au centre de l'arete superieure) :
  146. Pmsup1 = 0 (0.5*larg1) haut1 ;
  147. si1 = si1 plus (Pi1 moin Pmsup1) ;
  148.  
  149. * Initialisation section extremite finale :
  150. si2 = si1 plus vai1 ;
  151. vnsi2 = vnsi1 ;
  152. angl2 = 0. ;
  153. *
  154. * Orientation sections de maillage :
  155. * Par defaut, selon vni1 :
  156. vnsmai1 = vni1 ;
  157. vnsmai2 = vnsmai1 ;
  158.  
  159. * Detection suite segments rouges et boucle :
  160. si (&b1 neg nb1) ;
  161. elip1 = mtraj1 elem (&b1 + 1) ;
  162. mcoulip1 = (elip1 elem coul) extr 1 ;
  163. isuiti1 = ega mcoulip1 'ROUG' ;
  164. si isuiti1 ;
  165. idebui1 = faux ;
  166. vai2 = (elip1 poin 2) moin (elip1 poin 1) ;
  167. vni2 = vai2 / (norm vai2) ;
  168. vasmai2 = vni1 plus vni2 ;
  169. vnsmai2 = vasmai2 / (norm vasmai2) ;
  170. elfini1 = elip1 ;
  171. pfini1 = elip1 poin 2 ;
  172. nb2 = nb1 - (&b1 + 1) ;
  173. i2 = &b1 + 2 ;
  174. * Rq : si nb2 = 0, le bloc n'est pas execute
  175. repe b2 nb2 ;
  176. eli2 = mtraj1 elem i2 ;
  177. mcoul2 = (eli2 elem coul) extr 1 ;
  178. si (neg mcoul2 'ROUG') ; quit b2 ; fins ;
  179. pfini1 = eli2 poin 2 ;
  180. elfini1 = eli2 ;
  181. vafini1 = pfini1 moin (eli2 poin 1) ;
  182. vnfini1 = vafini1 / (norm vafini1) ;
  183. i2 = i2 + 1 ;
  184. fin b2 ;
  185. ibouci1 = (norm (pfini1 moin pi1)) < tol1 ;
  186. si ibouci1 ;
  187. mess '***** WAAM : boucle fermee detectee' ;
  188. * On definit la normale a la section de maillage (SMA) :
  189. vasmai1 = vni1 plus vnfini1 ;
  190. vnsmai1 = vasmai1 / (norm vasmai1) ;
  191. fins ;
  192. fins ;
  193. fins ;
  194.  
  195. * Orientation de si1 selon vnsmai1 :
  196. *list vnsmai1 ; list vnsi1 ;
  197. *trac (0 -0 3) (mtraj1 et mail2 et (si1 coul rose) et (si2 coul turq) et pi1 et pi2) ;
  198. vnnz1 = pvec vnsmai1 vnsi1 ;
  199. lvnnz1 = norm vnnz1 ;
  200. * Si sinus non nul a tol1 pres, on oriente la section :
  201. si (lvnnz1 neg 0. (tol1 / dens1)) ;
  202. si (lvnnz1 ega 1. (vale prec)) ; lvnnz1 = 1. ; fins ;
  203. angl1 = asin lvnnz1 ;
  204. si ((psca vnsmai1 vnsi1) > 0.) ;
  205. angl1 = -1. * angl1 ;
  206. fins ;
  207. si1 = si1 tour angl1 pi1 (pi1 plus vnnz1) ;
  208. vnsi1 = vnsmai1 ;
  209. si2 = si1 plus vai1 ;
  210. vnsi2 = vnsi1 ;
  211. angl2 = 0. ;
  212. fins ;
  213. *trac (0 -0 3) (mtraj1 et mail2 et (si1 coul rose) et (si2 coul turq) et pi1 et pi2) ;
  214.  
  215. * Si boucle, on garde la section de maillage du debut :
  216. si ibouci1 ;
  217. sfini1 = si1 ;
  218. vnfini1 = vnsmai1 ;
  219. fins ;
  220.  
  221. sino ;
  222.  
  223. * On a deja si1 correctement orientee.
  224. * On doit orienter si2.
  225. * Par defaut, orientation de si1 :
  226. vnsmai2 = vni1 ;
  227.  
  228. * Si fin d'une boucle, orientation si2 connue :
  229. si (ibouci1 et (pi2 ega pfini1)) ;
  230. vnsmai2 = vnfini1 ;
  231. sino ;
  232. si (&b1 neg nb1) ;
  233. elip1 = mtraj1 elem (&b1 + 1) ;
  234. mcoulip1 = (elip1 elem coul) extr 1 ;
  235. isuiti1 = ega mcoulip1 'ROUG' ;
  236. si isuiti1 ;
  237. vai2 = (elip1 poin 2) moin (elip1 poin 1) ;
  238. vni2 = vai2 / (norm vai2) ;
  239. vasmai2 = vni1 plus vni2 ;
  240. vnsmai2 = vasmai2 / (norm vasmai2) ;
  241. fins ;
  242. fins ;
  243. fins ;
  244.  
  245. * Fin "Si idebui1 / sinon" :
  246. fins ;
  247. *
  248. * Orientation de si2 selon vnsmai2 :
  249. *list vnsmai2 ; list vnsi2 ;
  250. *trac (0 0 100) (mtraj1 et mail2 et (si1 coul rose) et (si2 coul turq) et pi1 et pi2) titr 'orientation si2' ;
  251. vnnz1 = pvec vnsmai2 vnsi2 ;
  252. lvnnz1 = norm vnnz1 ;
  253. * Si sinus non nul a tol1 pres, on oriente la section :
  254. si (lvnnz1 neg 0. (tol1 / dens1)) ;
  255. si (lvnnz1 ega 1. (vale prec)) ; lvnnz1 = 1. ; fins ;
  256. angl2 = asin lvnnz1 ;
  257. si ((psca vnsmai2 vnsi2) > 0.) ;
  258. angl2 = -1. * angl2 ;
  259. fins ;
  260. si2 = si2 tour angl2 pi2 (pi2 plus vnnz1) ;
  261. vnsi2 = vnsi2 tour angl2 (0 0 0) vnnz1 ;
  262. fins ;
  263. *trac (0 0 100) (mtraj1 et mail2 et (si1 coul rose) et (si2 coul turq) et pi1 et pi2) ;
  264. *si (ibouci1 et (pi2 ega pfini1)) ;
  265. *trac (5 -2 3) (mtraj1 et mail2 et (si1 coul rose) et (si2 coul turq) et (si22 coul oran) et pi1 et pi2) ;
  266. *fins ;
  267.  
  268. * Maillage du segment :
  269. * nei1 : nb maillages pour ce segment
  270. * pasi1 : pas de maillage pour ce segment :
  271. * nei2 : nbel crees par pas de maillage
  272. nei1 = (mesu eli1) / pas1 + 0.5 ;
  273. nei1 = maxi (lect (enti nei1) 1) ;
  274. *mess 'nei1=' nei1 ;
  275. pasi1 = (mesu eli1) / (flot nei1) ;
  276. vtrani1 = pasi1 * vni1 ;
  277. ltrani1 = norm vtrani1 ;
  278. nei2 = enti (ltrani1 / dens1 + 0.5) ;
  279. nei2 = maxi (lect (enti nei2) 1) ;
  280. *mess 'nei2=' nei2 ;
  281. itouri1 = (abs angl2) > 0. ;
  282. *list itouri1 ;
  283. *list angl2 ;
  284. angli2 = angl2 / (flot nei1) ;
  285. vnsi22 = vnsi1 ;
  286. si22 = si1 ;
  287. tpsi2 = tpassi1.instants extr 1 ;
  288. dti2 = ltrani1 / vite1 ;
  289. repe b2 nei1 ;
  290. pi22 = pi1 plus vtrani1 ;
  291. si itouri1 ;
  292. vnsi22 = vnsi22 tour angli2 (0 0 0) vnnz1 ;
  293. pi33 = pi22 plus vnnz1 ;
  294. pi44 = pi22 plus (pvec vnsi22 vnnz1) ;
  295. si22 = si22 proj cyli vtrani1 plan pi22 pi33 pi44 ;
  296. sino ;
  297. si22 = si1 plus vtrani1 ;
  298. fins ;
  299. maili2 = si1 volu si22 nei2 ;
  300. si1 = si22 ;
  301. pi1 = pi22 ;
  302. maili2 = maili2 coul &b2 ;
  303. mail2 = mail2 et maili2 ;
  304. tpsi2 = tpsi2 ;
  305. tmai1 . indi1 = mail2 ;
  306. ttps1 . indi1 = tpsi2 ;
  307. tpsi2 = tpsi2 + dti2 ;
  308. indi1 = indi1 + 1 ;
  309. fin b2 ;
  310. *trac (5 -2 3) (mtraj1 et mail2 et (si1 coul rose) et (si2 coul turq) et (si22 coul oran) et pi1 et pi2) ;
  311.  
  312. * si1 = si2 ;
  313. vnsi1 = vnsi2 ;
  314. vnsmai1 = vnsmai2 ;
  315.  
  316. * Fin si imail1 (segment rouge) ;
  317. sino ;
  318. erre '***** ERREUR : pb definition trajectoire, couleur segment inconnue' ;
  319. quit waam ;
  320. fins ;
  321.  
  322. * Fin boucle segments trajectoire
  323. fin b1 ;
  324. * elim mail2 tol1 ;
  325.  
  326. * Enregistrement des sorties :
  327. tab2.maillage = mail2 ;
  328. tab2.evolution_maillage = table ;
  329. tab2.evolution_maillage.temps = ttps1 ;
  330. tab2.evolution_maillage.maillage = tmai1 ;
  331.  
  332. resp tab2 ;
  333. quit waam ;
  334. * Fin option MAILLAGE :
  335. fins ;
  336.  
  337. *----------------------------------------------------------------------*
  338. * Option VISU *
  339. *----------------------------------------------------------------------*
  340.  
  341. si (ega mot1 'VISU') ;
  342. icas1 = 2 ;
  343. *
  344. * Lecture MOT CACH / FACE :
  345. argu mot1/'MOT' ;
  346. si (exis mot1) ;
  347. cle1 = text mot1 ;
  348. sino ;
  349. cle1 = text ' ' ;
  350. fins ;
  351.  
  352. * Lecture maillage complementaire a afficher :
  353. argu mail2/maillage ;
  354. si (non (exis mail2)) ;
  355. mail2 = vide maillage ;
  356. fins ;
  357.  
  358. mail1 = tab1.maillage ;
  359. tmai1 = tab1.evolution_maillage.maillage ;
  360. dep0 = manu chpo (mail1 et mail2) 3 ux 0 uy 0 uz 0 ;
  361. def0 = vide deforme ;
  362. i1 = 0 ;
  363. repe b2 (dime tmai1) ;
  364. maili1 = tmai1.i1 ;
  365. maili1 = maili1 et mail2 ;
  366. defi1 = defo maili1 dep0 0. ;
  367. def0 = def0 et defi1 ;
  368. i1 = i1 + 1 ;
  369. fin b2 ;
  370. trac cle1 anim def0 ;
  371.  
  372. quit waam ;
  373. * Fin option VISU :
  374. fins ;
  375.  
  376. *----------------------------------------------------------------------*
  377. * FIN *
  378. *----------------------------------------------------------------------*
  379. *
  380. * MOT1 n'est pas un des mots-cles des options de la procedure :
  381. si (icas1 ega 0) ;
  382. erre '***** ERREUR WAAM : MOT-cle option WAAM non reconnu.' ;
  383. quit waam ;
  384. fins ;
  385.  
  386. FINP ;
  387.  
  388.  
  389.  

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