Télécharger waam.procedur

Retour à la liste

Numérotation des lignes :

  1. * WAAM PROCEDUR SP204843 25/11/27 21:15:03 12410
  2. DEBP WAAM TAB1*'TABLE' ;
  3.  
  4. *-------------------------- Initialisations ---------------------------*
  5.  
  6. * Lecture des options :
  7. argu MOT1*'MOT' ;
  8.  
  9. * icas1 = 1 / 2 / 3 pour MAIL / VISU / MACRO
  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 ;
  23. imot2 = faux ;
  24. imot3 = faux ;
  25. imot4 = faux ;
  26. imot5 = faux ;
  27. repe b1 5 ;
  28. argu moti1/'MOT' ;
  29. si (non (exis moti1)) ; quit b1 ; fins ;
  30.  
  31. * Arguments option MAIL :
  32. si (ega moti1 'PAS') ;
  33. imot1 = vrai ;
  34. argu lpas1/'LISTREEL' ;
  35. si (exis lpas1) ;
  36. npas1 = dime lpas1 ;
  37. si (npas1 ega 0) ;
  38. erre '***** ERREUR : le LISTREEL fourni est de dimension nulle.' ;
  39. quit waam ;
  40. fins ;
  41. pas1 = extr lpas1 1 ;
  42. sino ;
  43. argu pas1*'FLOTTANT' ;
  44. lpas1 = prog pas1 ;
  45. npas1 = 1 ;
  46. fins ;
  47. fins ;
  48. si (ega moti1 'LARG') ;
  49. imot2 = vrai ;
  50. argu larg1*'FLOTTANT' ;
  51. fins ;
  52. si (ega moti1 'DENS') ;
  53. imot3 = vrai ;
  54. argu dens1*'FLOTTANT' ;
  55. fins ;
  56.  
  57. * Arguments option TEMP :
  58. si (ega moti1 'TEMP') ;
  59. imot4 = vrai ;
  60. argu flot4/'FLOTTANT' ;
  61. si (non (exis flot4)) ;
  62. flot4 = 3. * Pi ;
  63. sino ;
  64. si (flot4 < 1.) ;
  65. erre '***** ERREUR : le nombre de pas de temps doit etre strictement superieur a 1' ;
  66. quit waam ;
  67. fins ;
  68. fins ;
  69. fins ;
  70. si (ega moti1 'MAXI') ;
  71. imot5 = vrai ;
  72. argu flot5*'FLOTTANT' ;
  73. fins ;
  74. fin b1 ;
  75. si (non imot1) ;
  76. erre '***** ERREUR : il manque la donnee du PAS de discretisation du depot' ;
  77. quit waam ;
  78. fins ;
  79. si (non imot2) ;
  80. si (exis tab1 'LARGEUR_DE_PASSE') ;
  81. larg1 = tab1.largeur_de_passe ;
  82. sino ;
  83. erre '***** ERREUR : il manque la donnee de la LARGeur du depot' ;
  84. quit waam ;
  85. fins ;
  86. fins ;
  87. si (non imot3) ;
  88. argu N1/'ENTIER' ;
  89. si (exis N1) ;
  90. N1 = maxi (lect N1 1) ;
  91. sino ;
  92. N1 = 1 ;
  93. fins ;
  94. dens1 = pas1 / (flot N1) ;
  95. fins ;
  96.  
  97. *------------------- MAILLAGE des passes de soudage -------------------*
  98.  
  99. si (non (exis tab1 passes)) ;
  100. erre '***** ERREUR : la table de SOUDAGE en entree n"a pas d"indice PASSES' ;
  101. quit waam ;
  102. fins ;
  103.  
  104. * Definition d'une tolerance geometrique :
  105. tol1 = 1.e-4 * dens1 ;
  106.  
  107. * Maillage d'une section de cordon :
  108. lsi1 = (0 0 0) droi (0 larg1 0) dini dens1 dfin dens1 ;
  109.  
  110. * Initialisattion sorties (MAIL) :
  111. tab2 = table ;
  112. ttps1 = table ;
  113. tmai1 = table ;
  114. indi1 = 0 ;
  115.  
  116. * On parcourt la trajectoire :
  117. mtraj1 = tab1.trajectoire ;
  118. mail2 = vide maillage ;
  119. idebui1 = vrai ;
  120. ibouci1 = faux ;
  121.  
  122. * Boucle sur elements de la trajectoire :
  123. nb1 = nbel mtraj1 ;
  124. repe b1 nb1 ;
  125.  
  126. * Lecture ieme element de la trajectoire :
  127. eli1 = mtraj1 elem &b1 ;
  128. Pi1 = eli1 poin 1 ;
  129. Pi2 = eli1 poin 2 ;
  130. vai1 = Pi2 moin Pi1 ;
  131. vni1 = vai1 / (norm vai1) ;
  132. mcouli1 = (eli1 elem coul) extr 1 ;
  133. imaili1 = ega mcouli1 'ROUG' ;
  134. idepli1 = ega mcouli1 'VERT' ;
  135. *
  136. * Segment VERT : deplacement
  137. si idepli1 ;
  138. idebui1 = vrai ;
  139. ibouci1 = faux ;
  140. iter b1 ;
  141. fins ;
  142. *
  143. * Segment ROUGE : maillage
  144. si imaili1 ;
  145.  
  146. * Si debut nouvelle passe :
  147. si idebui1 ;
  148.  
  149. * Identification de la passe :
  150. npassi1 = 0 ;
  151. nbp1 = dime tab1.passes ;
  152. repe bp1 nbp1 ;
  153. mailpss1 = (tab1.passes.&bp1).maillage ;
  154. pps1 pps2 = (mailpss1 poin 1) (mailpss1 poin 2) ;
  155. si ((Pi1 ega pps1) et (Pi2 ega pps2)) ;
  156. tpassi1 = tab1.passes.&bp1 ;
  157. npassi1 = &bp1 ;
  158. mess '***** WAAM : maillage de la passe :' npassi1 ;
  159. quit bp1 ;
  160. fins ;
  161. fin bp1 ;
  162. si (npassi1 ega 0) ;
  163. erre '***** WAAM : passe non identifiee' ;
  164. quit waam ;
  165. fins ;
  166.  
  167. * Hauteur de cordon :
  168. debi1 = tpassi1 . debit ;
  169. vite1 = tpassi1 . vitesse ;
  170. haut1 = debi1 / vite1 / larg1 ;
  171. mess (chai '***** WAAM : hauteur de la passe :' npassi1 ' =' haut1) ;
  172.  
  173. * Maillage :
  174. * si1 : maillage section courante :
  175. * vnsi1 : normale a la section
  176. si1 = lsi1 tran (0 0 haut1) dini dens1 dfin dens1 ;
  177. vnsi1 = 1 0 0 ;
  178.  
  179. * Positionnement extremite initiale (Pi1 au centre de l'arete superieure) :
  180. Pmsup1 = 0 (0.5*larg1) haut1 ;
  181. si1 = si1 plus (Pi1 moin Pmsup1) ;
  182.  
  183. * Initialisation section extremite finale :
  184. si2 = si1 plus vai1 ;
  185. vnsi2 = vnsi1 ;
  186. angl2 = 0. ;
  187. *
  188. * Orientation sections de maillage :
  189. * Par defaut, selon vni1 :
  190. vnsmai1 = vni1 ;
  191. vnsmai2 = vnsmai1 ;
  192.  
  193. * Detection suite segments rouges et boucle :
  194. tpsi2 = tpassi1.instants extr 1 ;
  195. tpsi22 = tpassi1.instants extr 2 ;
  196. si (&b1 neg nb1) ;
  197. elip1 = mtraj1 elem (&b1 + 1) ;
  198. mcoulip1 = (elip1 elem coul) extr 1 ;
  199. isuiti1 = ega mcoulip1 'ROUG' ;
  200. isuiti2 = non (vide (elip1 inte mailpss1)) ;
  201. si (npassi1 neg nbp1) ;
  202. isuiti2 = isuiti2 ou (ega tpsi22 (tab1.passes.(npassi1+1).instants extr 1)) ;
  203. fins ;
  204. isuiti1 = isuiti1 et isuiti2 ;
  205. si isuiti1 ;
  206. vai2 = (elip1 poin 2) moin (elip1 poin 1) ;
  207. vni2 = vai2 / (norm vai2) ;
  208. vasmai2 = vni1 plus vni2 ;
  209. vnsmai2 = vasmai2 / (norm vasmai2) ;
  210. elfini1 = elip1 ;
  211. pfini1 = elip1 poin 2 ;
  212. nb2 = nb1 - (&b1 + 1) ;
  213. i2 = &b1 + 2 ;
  214. * Rq : si nb2 = 0, le bloc n'est pas execute
  215. repe b2 nb2 ;
  216. eli2 = mtraj1 elem i2 ;
  217. mcoul2 = (eli2 elem coul) extr 1 ;
  218. si (neg mcoul2 'ROUG') ; quit b2 ; fins ;
  219. pfini1 = eli2 poin 2 ;
  220. elfini1 = eli2 ;
  221. vafini1 = pfini1 moin (eli2 poin 1) ;
  222. vnfini1 = vafini1 / (norm vafini1) ;
  223. i2 = i2 + 1 ;
  224. fin b2 ;
  225. ibouci1 = (norm (pfini1 moin pi1)) < tol1 ;
  226. si ibouci1 ;
  227. mess '***** WAAM : boucle fermee detectee' ;
  228. * On definit la normale a la section de maillage (SMA) :
  229. vasmai1 = vni1 plus vnfini1 ;
  230. vnsmai1 = vasmai1 / (norm vasmai1) ;
  231. fins ;
  232. fins ;
  233. fins ;
  234.  
  235. * Orientation de si1 selon vnsmai1 :
  236. *list vnsmai1 ; list vnsi1 ;
  237. *trac (0 -0 3) (mtraj1 et mail2 et (si1 coul rose) et (si2 coul turq) et pi1 et pi2) ;
  238. vnnz1 = pvec vnsi1 vnsmai1 ;
  239. lvnnz1 = norm vnnz1 ;
  240. * Si sinus non nul a tol1 pres, on oriente la section :
  241. si (lvnnz1 neg 0. (tol1 / dens1)) ;
  242. si (lvnnz1 ega 1. (vale prec)) ; lvnnz1 = 1. ; fins ;
  243. angl1 = asin lvnnz1 ;
  244. *list vnsi1 ; list vnsmai1 ; list angl1 ;
  245. si ((psca vnsmai1 vnsi1) < 0.) ;
  246. angl1 = 180. - angl1 ;
  247. *mess ' on prend (180.-angl1)' ;
  248. fins ;
  249. si1 = si1 tour angl1 pi1 (pi1 plus vnnz1) ;
  250. vnsi1 = vnsmai1 ;
  251. si2 = si1 plus vai1 ;
  252. vnsi2 = vnsi1 ;
  253. angl2 = 0. ;
  254. sino ;
  255. si ((psca vnsmai1 vnsi1) < 0.) ;
  256. vnsi1 = vnsmai1 ;
  257. si2 = si1 plus vai1 ;
  258. vnsi2 = vnsi1 ;
  259. angl2 = 0. ;
  260. fins ;
  261. fins ;
  262. *list vnsi1 ; list angl1 ;
  263. titr 'Debut de passe, apres orientation de si1' ;
  264. *trac (0 0 100) (mtraj1 et mail2 et (si1 coul rose) et (si2 coul turq) et pi1 et pi2) ;
  265.  
  266. * Si boucle, on garde la section de maillage du debut :
  267. si ibouci1 ;
  268. sfini1 = si1 ;
  269. vnfini1 = vnsmai1 ;
  270. fins ;
  271.  
  272. sino ;
  273.  
  274. * On a deja si1 correctement orientee.
  275. * On doit orienter si2.
  276. * Par defaut, orientation de si1 :
  277. si2 = si1 plus vai1 ;
  278. vnsi2 = vnsi1 ;
  279. angl2 = 0. ;
  280. vnsmai2 = vnsi2 ;
  281.  
  282. * Si fin d'une boucle, orientation si2 connue :
  283. si (ibouci1 et (pi2 ega pfini1)) ;
  284. vnsmai2 = vnfini1 ;
  285. sino ;
  286. si (&b1 neg nb1) ;
  287. elip1 = mtraj1 elem (&b1 + 1) ;
  288. mcoulip1 = (elip1 elem coul) extr 1 ;
  289. isuiti1 = ega mcoulip1 'ROUG' ;
  290. si isuiti1 ;
  291. vai2 = (elip1 poin 2) moin (elip1 poin 1) ;
  292. vni2 = vai2 / (norm vai2) ;
  293. vasmai2 = vni1 plus vni2 ;
  294. vnsmai2 = vasmai2 / (norm vasmai2) ;
  295. fins ;
  296. fins ;
  297. fins ;
  298.  
  299. * Fin "Si idebui1 / sinon" :
  300. fins ;
  301. *
  302. * Orientation de si2 selon vnsmai2 :
  303. *list vnsmai2 ; list vnsi2 ;
  304. *trac (0 0 100) (mtraj1 et mail2 et (si1 coul rose) et (si2 coul turq) et pi1 et pi2 et (pi1 droi 1 (pi1 plus (0.01*vnsi1))) et (pi2 droi 1 (pi2 plus (0.01*vnsi2)))) titr 'Avant orientation si2' ;
  305. vnnz1 = pvec vnsi2 vnsmai2 ;
  306. lvnnz1 = norm vnnz1 ;
  307. * Si sinus non nul a tol1 pres, on oriente la section :
  308. si (lvnnz1 neg 0. (tol1 / dens1)) ;
  309. si (lvnnz1 ega 1. (vale prec)) ; lvnnz1 = 1. ; fins ;
  310. angl2 = asin lvnnz1 ;
  311. si ((psca vnsi2 vnsmai2) < 0.) ;
  312. *mess ' on prend (180.-angl2)' ; saut 1 lign ;
  313. angl2 = 180. - angl2 ;
  314. fins ;
  315. si2 = si2 tour angl2 pi2 (pi2 plus vnnz1) ;
  316. vnsi2 = vnsi2 tour angl2 (0 0 0) vnnz1 ;
  317. sino ;
  318. * Pas sur que ça serve a quelque chose...
  319. si ((psca vnsi2 vnsmai2) < 0.) ;
  320. vnsi2 = vnsmai2 ;
  321. angl2 = 180. ;
  322. fins ;
  323. fins ;
  324. titr 'En cours de passe, apres orientation de si2' ;
  325. *trac (0 0 100) (mtraj1 et mail2 et (si1 coul rose) et (si2 coul turq) et pi1 et pi2 et (pi1 droi 1 (pi1 plus (0.01*vnsi1))) et (pi2 droi 1 (pi2 plus (0.01*vnsi2)))) ;
  326. *si (ibouci1 et (pi2 ega pfini1)) ;
  327. *trac (5 -2 3) (mtraj1 et mail2 et (si1 coul rose) et (si2 coul turq) et (si22 coul oran) et pi1 et pi2) ;
  328. *fins ;
  329.  
  330. *---- Maillage du segment :
  331.  
  332. llpas1 = somm (lpas1 enle npas1) ;
  333. leli1 = mesu eli1 ;
  334. si (leli1 &lt;EG llpas1) ;
  335. erre '***** ERREUR : somme pas de discretisation > long. ' &b1 'e passe' ;
  336. quit waam ;
  337. fins ;
  338.  
  339. * Boucle sur les pas de discretisation :
  340.  
  341. * pasi1 : pas de discretisation courant
  342. * nei1 : nb maillages pour ce pas de discretisation du segment
  343. * pami1 : pas de maillage courant
  344. * nei2 : nbel crees par pas de maillage
  345.  
  346. idebui1 = non isuiti1 ;
  347. repe bp1 npas1 ;
  348. pasi1 = extr lpas1 &bp1 ;
  349. si (&bp1 neg npas1) ;
  350. nei1 = 1 ;
  351. pami1 = pasi1 ;
  352. sino ;
  353. llmi1 = leli1 - llpas1 ;
  354. nei1 = llmi1 / pasi1 + 0.5 ;
  355. nei1 = maxi (lect (enti nei1) 1) ;
  356. *mess 'nei1=' nei1 ;
  357. pami1 = llmi1 / (flot nei1) ;
  358. fins ;
  359.  
  360. vtrani1 = pami1 * vni1 ;
  361. ltrani1 = norm vtrani1 ;
  362. nei2 = enti (ltrani1 / dens1 + 0.5) ;
  363. nei2 = maxi (lect (enti nei2) 1) ;
  364. *mess 'nei2=' nei2 ;
  365. itouri1 = (abs angl2) > 0. ;
  366. *list itouri1 ;
  367. *list angl2 ;
  368. angli2 = angl2 / (flot nei1) ;
  369. vnsi22 = vnsi1 ;
  370. si22 = si1 ;
  371. dti2 = ltrani1 / vite1 ;
  372. repe b2 nei1 ;
  373. pi22 = pi1 plus vtrani1 ;
  374. si itouri1 ;
  375. vnsi22 = vnsi22 tour angli2 (0 0 0) vnnz1 ;
  376. pi33 = pi22 plus vnnz1 ;
  377. pi44 = pi22 plus (pvec vnsi22 vnnz1) ;
  378. si22 = si22 proj dire vtrani1 plan pi22 pi33 pi44 ;
  379. sino ;
  380. si22 = si1 plus vtrani1 ;
  381. fins ;
  382. maili2 = si1 volu si22 nei2 ;
  383. si1 = si22 ;
  384. pi1 = pi22 ;
  385. maili2 = maili2 coul (indi1+1) ;
  386. mail2 = mail2 et maili2 ;
  387. tmai1 . indi1 = mail2 ;
  388. ttps1 . indi1 = tpsi2 ;
  389. tpsi2 = tpsi2 + dti2 ;
  390. indi1 = indi1 + 1 ;
  391. fin b2 ;
  392.  
  393. fin bp1 ;
  394.  
  395. *trac (5 -2 3) (mtraj1 et mail2 et (si1 coul rose) et (si2 coul turq) et (si22 coul oran) et pi1 et pi2) ;
  396.  
  397. vnsi1 = vnsi2 ;
  398. vnsmai1 = vnsmai2 ;
  399.  
  400. * Fin si imail1 (segment rouge) ;
  401. sino ;
  402. erre '***** ERREUR : pb definition trajectoire, couleur segment inconnue' ;
  403. quit waam ;
  404. fins ;
  405.  
  406. * Fin boucle segments trajectoire
  407. fin b1 ;
  408. * elim mail2 tol1 ;
  409.  
  410. * Verification list des temps de tttps1 bien ordonnee :
  411. ltps1 = prog table ttps1 ;
  412. ltps2 = ordo ltps1 ;
  413. si (((ltps2 - ltps1) maxi abs) > (1.e-3*dti2)) ;
  414. erre '***** la liste des TEMPS de l''evolution du maillage est mal ordonnee' ;
  415. fins ;
  416. * Enregistrement des sorties :
  417. tab2.maillage = mail2 ;
  418. tab2.evolution_maillage = table ;
  419. tab2.evolution_maillage.temps = ttps1 ;
  420. tab2.evolution_maillage.maillage = tmai1 ;
  421.  
  422. *-------------------------- Sous-option TEMP --------------------------*
  423.  
  424. si imot4 ;
  425.  
  426. * Valeurs de dtca1 :
  427. nbp1 = dime tab1 . passes ;
  428. tpi1 = 0. ;
  429. ltp1 = prog ;
  430. ldtca1 = prog ;
  431. repe bp1 nbp1 ;
  432. vsi1 = tab1 . passes . &bp1 . vitesse ;
  433. dtcai1 = pas1 / vsi1 / flot4 ;
  434. si (&bp1 ega nbp1) ;
  435. tpi2 = (tab1 . passes . &bp1 . instants) extr 2 ;
  436. sino ;
  437. ip1 = &bp1 + 1 ;
  438. tpip1 = (tab1 . passes . ip1 . instants) extr 1 ;
  439. tpi2 = tpip1 - tab1 . temps_de_coupure ;
  440. fins ;
  441. ltp1 = ltp1 et tpi1 et tpi2 ;
  442. ldtca1 = ldtca1 et dtcai1 et dtcai1 ;
  443. tpi1 = tpip1 ;
  444. fin bp1 ;
  445. evdtca1 = evol manu ltp1 ldtca1 ;
  446. *list evdtca1 ;
  447.  
  448. * Redecoupage de la liste des temps de l'evolution de la puissance thermique :
  449. evqt1 = tab1.evolution_puissance ;
  450. ltqt1 = extr evqt1 absc ;
  451. lqqt1 = extr evqt1 ordo ;
  452. tol2 = 1.e-6 * (maxi lqqt1) ;
  453. tol3 = 0.001 * tab1.temps_de_coupure ;
  454.  
  455. * Gestion des evenements :
  456. ieve1 = exis tab1 evenements ;
  457. Si ieve1 ;
  458. lteve1 = prog ;
  459. lieve1 = lect ;
  460. repe beve1 (dime tab1.evenements) ;
  461. ie1 = &beve1 ;
  462. lteve1 = lteve1 et tab1.evenements.ie1.temps ;
  463. lieve1 = lieve1 et (lect (dime (tab1.evenements.ie1.temps)) * ie1) ;
  464. fin beve1 ;
  465. lpeve1 = posi ltqt1 dans lteve1 tol3 ;
  466. *list lteve1 ;
  467. *list lieve1 ;
  468. *list lpeve1 ;
  469. sino ;
  470. lpeve1 = lect (dime ltqt1) * 0 ;
  471. fins ;
  472.  
  473. * Sous-decoupage de l'historique de puissance :
  474. nb1 = dime ltqt1 ;
  475. t0 = extr ltqt1 1 ;
  476. q0 = extr lqqt1 1 ;
  477.  
  478. * Gestion evenements :
  479. peve0 = extr lpeve1 1 ;
  480. si (peve0 neg 0) ;
  481. neve0 = extr lieve1 peve0 ;
  482. si ((peve0 + 1) &lt;EG (dime lieve1)) ;
  483. neve1 = extr lieve1 (peve0 + 1) ;
  484. sino ;
  485. neve1 = -1 ;
  486. fins ;
  487. idtev1 = neve0 ega neve1 ;
  488. si idtev1 ;
  489. tev1 = lteve1 extr (peve0 + 1) ;
  490. dtev1 = tev1 - t0 ;
  491. *mess (chai 'Even. = ' neve0 ', dtev1 =' dtev1) ;
  492. fins ;
  493. sino ;
  494. idtev1 = faux ;
  495. fins ;
  496.  
  497. * Boucle sur les piquets de temps :
  498. ltca1 = prog t0 ;
  499. repe b1 (nb1 - 1) ;
  500. ip1 = &b1 + 1 ;
  501. t1 = extr ltqt1 ip1 ;
  502. q1 = extr lqqt1 ip1 ;
  503. peve1 = extr lpeve1 ip1 ;
  504. dt1 = t1 - t0 ;
  505. dtca1 = ipol evdtca1 t0 ;
  506. si (&b1 ega 1) ; dt0 = dt1 ; fins ;
  507. * Avec evements :
  508. si idtev1 ;
  509. si (dt1 &lt;EG dtca1) ;
  510. si (dtev1 &lt;EG dtca1) ;
  511. si (dt1 ega dtev1 tol3) ;
  512. ltca1 = ltca1 et (prog t1) ;
  513. sino ;
  514. si (dt1 < dtev1) ;
  515. ltca1 = ltca1 et (prog t1) et (prog tev1) ;
  516. t1 = tev1 ;
  517. sino ;
  518. ltca1 = ltca1 et (prog tev1) et (prog t1) ;
  519. fins ;
  520. fins ;
  521. sino ;
  522. ltca1 = ltca1 et (prog t1) ;
  523. si ((q0 > tol2) ou (q1 > tol2)) ;
  524. ltca1 = ltca1 et ((prog t1 pas dtca1 tev1) enle 1) ;
  525. sino ;
  526. ltca1 = ltca1 et ((prog t1 pas dt1 geom 2. tev1) enle 1) ;
  527. fins ;
  528. t1 = tev1 ;
  529. fins ;
  530. sino ;
  531. si (dt1 ega dtev1 tol3) ;
  532. si ((q0 > tol2) ou (q1 > tol2)) ;
  533. ltca1 = ltca1 et ((prog t0 pas dtca1 t1) enle 1) ;
  534. sino ;
  535. ltca1 = ltca1 et ((prog t0 pas dtev1 geom 2. t1) enle 1) ;
  536. fins ;
  537. sino ;
  538. si (dtev1 < dt1) ;
  539. si (dtev1 < dtca1) ;
  540. ltca1 = ltca1 et (prog tev1) ;
  541. sino ;
  542. si ((q0 > tol2) ou (q1 > tol2)) ;
  543. *mess '############ Ici 1' ;
  544. ltca1 = ltca1 et ((prog t0 pas dtca1 tev1) enle 1) ;
  545. ltca1 = ltca1 et ((prog tev1 pas dtca1 t1) enle 1) ;
  546. sino ;
  547. ltca1 = ltca1 et (prog tev1 pas dtev1 geom 2. t1) ;
  548. fins ;
  549. fins ;
  550. sino ;
  551. si ((q0 > tol2) ou (q1 > tol2)) ;
  552. *mess '############ Ici 2' ;
  553. ltca1 = ltca1 et ((prog t0 pas dtca1 tev1) enle 1) ;
  554. sino ;
  555. ltca1 = ltca1 et ((prog t0 pas dt0 geom 2. tev1) enle 1) ;
  556. fins ;
  557. t1 = tev1 ;
  558. fins ;
  559. fins ;
  560. fins ;
  561. * Pas d'evenement :
  562. sino ;
  563. si (dt1 &lt;EG dtca1) ;
  564. ltca1 = ltca1 et (prog t1) ;
  565. sino ;
  566. si ((q0 > tol2) ou (q1 > tol2)) ;
  567. ltca1 = ltca1 et ((prog t0 pas dtca1 t1) enle 1) ;
  568. sino ;
  569. ltca1 = ltca1 et ((prog t0 pas dt0 geom 2. t1) enle 1) ;
  570. fins ;
  571. fins ;
  572. fins ;
  573. t0 = t1 ;
  574. q0 = q1 ;
  575. ntca1 = dime ltca1 ;
  576. dt0 = (ltca1 extr ntca1) - (ltca1 extr (ntca1-1)) ;
  577. * Gestion evenement suivant :
  578. peve0 = peve1 ;
  579. si (peve0 neg 0) ;
  580. neve0 = extr lieve1 peve0 ;
  581. si ((peve0 + 1) &lt;EG (dime lieve1)) ;
  582. neve1 = extr lieve1 (peve0 + 1) ;
  583. sino ;
  584. neve1 = -1 ;
  585. fins ;
  586. idtev1 = neve0 ega neve1 ;
  587. si idtev1 ;
  588. tev1 = lteve1 extr (peve0 + 1) ;
  589. dtev1 = tev1 - t0 ;
  590. *mess (chai 'Even. = ' neve0 ', dtev1 =' dtev1) ;
  591. fins ;
  592. sino ;
  593. idtev1 = faux ;
  594. fins ;
  595. fin b1 ;
  596.  
  597. * Raffinement si pas > flot5 (option TEMP MAXI) :
  598. si imot5 ;
  599. ltca1 = ltca1 raff flot5 ;
  600. fins ;
  601.  
  602. * Verification si liste temps calcules bien ordonnee :
  603. ltca2 = ordo ltca1 ;
  604. si (((ltca2 - ltca1) maxi abs) > (1.e-3*dtca1)) ;
  605. erre '***** La liste des TEMPS_CALCULES est mal ordonnee' ;
  606. quit waam ;
  607. fins ;
  608.  
  609. tab2.temps_calcules = ltca1 ;
  610.  
  611. * Sorties si evenements :
  612. si ieve1 ;
  613. tab2.temps_evenements = lteve1 ;
  614. tab2.index_evenements = lieve1 ;
  615. fins ;
  616.  
  617. * Fin sous-option TEMP :
  618. fins ;
  619.  
  620. resp tab2 ;
  621. quit waam ;
  622. * Fin option MAILLAGE :
  623. fins ;
  624.  
  625. *----------------------------------------------------------------------*
  626. * Option VISU *
  627. *----------------------------------------------------------------------*
  628.  
  629. si (ega mot1 'VISU') ;
  630. icas1 = 2 ;
  631. *
  632. * Lecture MOT CACH / FACE :
  633. argu mot1/'MOT' ;
  634. si (exis mot1) ;
  635. cle1 = text mot1 ;
  636. sino ;
  637. cle1 = text ' ' ;
  638. fins ;
  639.  
  640. * Lecture maillage complementaire a afficher :
  641. argu mail2/maillage ;
  642. si (non (exis mail2)) ;
  643. mail2 = vide maillage ;
  644. fins ;
  645.  
  646. mail1 = tab1.maillage ;
  647. tmai1 = tab1.evolution_maillage.maillage ;
  648. dep0 = manu chpo (mail1 et mail2) 3 ux 0 uy 0 uz 0 ;
  649. def0 = vide deforme ;
  650. i1 = 0 ;
  651. repe b2 (dime tmai1) ;
  652. maili1 = tmai1.i1 ;
  653. maili1 = maili1 et mail2 ;
  654. defi1 = defo maili1 dep0 0. ;
  655. def0 = def0 et defi1 ;
  656. i1 = i1 + 1 ;
  657. fin b2 ;
  658. trac cle1 anim def0 ;
  659.  
  660. quit waam ;
  661. * Fin option VISU :
  662. fins ;
  663.  
  664. *----------------------------------------------------------------------*
  665. * Option MACRO
  666. *----------------------------------------------------------------------*
  667.  
  668. si (ega mot1 'MACRO') ;
  669. icas1 = 3 ;
  670.  
  671. *----------------- Lecture des arguments de l'option ------------------*
  672.  
  673. imot1 = faux ; comm mot-cle LONG ;
  674. imot2 = faux ; comm mot-cle LARG ;
  675. imot3 = faux ; comm mot-cle HAUT ;
  676. imot4 = faux ; comm mot-cle DENS ;
  677. imot5 = faux ; comm mot-cle TEMP ;
  678. imot6 = faux ; comm mot-cle MAXI ;
  679. repe b1 10 ; comm volontairement superieur au nombre de mot-cle ;
  680. argu moti1/'MOT' ;
  681. si (non (exis moti1)) ; quit b1 ; fins ;
  682.  
  683. * Arguments option MACRO :
  684. si (ega moti1 'LONG' 4) ;
  685. imot1 = vrai ;
  686. argu long1*'FLOTTANT' ;
  687. long1 = prog long1 ;
  688. npas1 = 1 ;
  689. fins ;
  690. si (ega moti1 'LARG' 4) ;
  691. imot2 = vrai ;
  692. argu larg1*'FLOTTANT' ;
  693. fins ;
  694. si (ega moti1 'HAUT' 4) ;
  695. imot3 = vrai ;
  696. argu enti1*'ENTIER' ;
  697. fins ;
  698. si (ega moti1 'DENS' 4) ;
  699. imot4 = vrai ;
  700. argu dens1*'FLOTTANT' ;
  701. fins ;
  702.  
  703. * Arguments sous-option TEMP :
  704. si (ega moti1 'TEMP' 4) ;
  705. imot5 = vrai ;
  706. * argu flot4/'FLOTTANT' ;
  707. * si (non (exis flot4)) ;
  708. * flot4 = 0.1 ;
  709. * fins ;
  710. * fins ;
  711. * si (ega moti1 'MAXI' 4) ;
  712. argu mot6*'MOT' ;
  713. si (neg mot6 'MAXI') ;
  714. erre ' ***** On attend le mot-cle MAXI' ;
  715. fins ;
  716. imot6 = vrai ;
  717. argu flot5*'FLOTTANT' ;
  718. fins ;
  719. fin b1 ;
  720.  
  721. * Analyse arguments lus :
  722. * iltot1 : indicateur maillage de toute la longeur de la passe :
  723. si (non imot2) ;
  724. si (non (exis tab1 'PASSES')) ;
  725. erre '***** ERREUR : il manque la donnee de la LARGeur du depot' ;
  726. fins ;
  727. fins ;
  728. si (non imot3) ;
  729. enti1 = 1 ;
  730. fins ;
  731. si (non imot4) ;
  732. dens1 = tab1 . passes . 1 . largeur ; comm pour calcul tolerance geom. ;
  733. fins ;
  734. si (non imot5) ;
  735. * flot4 = 0.1 ;
  736. imot5 = vrai ;
  737. fins ;
  738.  
  739. *list long1 ; list larg1 ; list dens1 ; list enti1 ; list flot5 ;
  740.  
  741. *--------------------- MAILLAGE des macro-depots ----------------------*
  742.  
  743. si (non (exis tab1 passes)) ;
  744. erre '***** ERREUR : la table de SOUDAGE en entree n"a pas d''indice PASSES' ;
  745. quit waam ;
  746. fins ;
  747.  
  748. * Definition d'une tolerance geometrique :
  749. tol1 = 1.e-4 * dens1 ;
  750.  
  751. * Appareillement des passes superposees (couches) :
  752. * mtraj1 = tab1.trajectoire ; comm pour affichage et debugage ;
  753. * tgroup1 : table contenant des groupes de passes superposees
  754. tgroup1 = table ;
  755. lsaut1 = lect ; comm liste des passes identifiees dans un groupe ;
  756. nbp1 = dime tab1 . passes ;
  757. repe bp1 nbp1 ;
  758. ip1 = &bp1 ;
  759. si (dans (lect ip1) lsaut1) ; iter bp1 ; fins ;
  760.  
  761. * Initialisation nouveau groupe de passes superposees :
  762. elpi1 = tab1 . passes . ip1 . maillage ;
  763. tgroup1 . ip1 = lect ip1 ;
  764. lsaut1 = lsaut1 et ip1 ;
  765. * lgroup1 = elpi1 ; comm pour affichage et debugage ;
  766.  
  767. si (enti1 ega 1) ; iter bp1 ; fins ;
  768. si (ip1 ega nbp1) ; quit bp1 ; fins ;
  769.  
  770. * Recherche couche suivante :
  771. ip2 = ip1 ;
  772. nc1 = tab1 . passes . ip1 . couche ;
  773. nbc1 = mini (lect (enti1 - 1) (nbp1 - ip1)) ;
  774. repe bc1 nbc1 ;
  775. nc1 = nc1 + 1 ;
  776. pi1 = elpi1 poin 1 ;
  777. pi2 = elpi1 poin (nbno elpi1) ;
  778. nbp2 = nbp1 - ip2 ;
  779. si (nbp2 ega 0) ; quit bc1 ; fins ;
  780. repe bp2 nbp2 ;
  781. ip2 = ip2 + 1 ;
  782. nc2 = tab1 . passes . ip2 . couche ;
  783. si (nc2 ega nc1) ;
  784. elpi2 = tab1 . passes . ip2 . maillage ;
  785. pi3 = elpi2 poin proc pi1 ;
  786. pi4 = elpi2 poin proc pi2 ;
  787. vitei2 = tab1 . passes . ip2 . vitesse ;
  788. debii2 = tab1 . passes . ip2 . debit ;
  789. largi2 = tab1 . passes . ip2 . largeur ;
  790. epc2 = debii2 / vitei2 / largi2 ;
  791. dmaxi2 = maxi (prog (norm (pi3 moin pi1)) (norm (pi4 moin pi2))) ;
  792. *mess 'epc2 =' epc2 ; list dmaxi2 ; trac (lgroup1 et (elpi2 coul or) et (mtraj1 coul blan)) ;
  793. si ((abs (dmaxi2 - epc2)) &lt;EG (0.01 * epc2)) ;
  794. tgroup1 . ip1 = tgroup1 . ip1 et ip2 ;
  795. lsaut1 = lsaut1 et ip2 ;
  796. * lgroup1 = lgroup1 et elpi2 ;
  797. quit bp2 ;
  798. fins ;
  799. fins ;
  800. fin bp2 ;
  801. elpi1 = elpi2 ;
  802. fin bc1 ;
  803. *trac (lgroup1 et (mtraj1 chan poi1)) ;
  804.  
  805. fin bp1 ;
  806.  
  807. * Initialisattion sorties (MACRO) :
  808. tab2 = table ;
  809. ttps1 = table ;
  810. tmai1 = table ;
  811. indi1 = 0 ;
  812.  
  813. * Boucle sur elements de la trajectoire :
  814. mtraj1 = tab1.trajectoire ;
  815. mail2 = vide maillage ;
  816. idebui1 = vrai ;
  817. ibouci1 = faux ;
  818. lsaut1 = lect ; comm liste des passes deja maillees ;
  819. nb1 = nbel mtraj1 ;
  820. repe b1 nb1 ;
  821.  
  822. * Lecture ieme element de la trajectoire :
  823. eli1 = mtraj1 elem &b1 ;
  824. Pi1 = eli1 poin 1 ;
  825. Pi2 = eli1 poin 2 ;
  826. vai1 = Pi2 moin Pi1 ;
  827. vni1 = vai1 / (norm vai1) ;
  828. mcouli1 = (eli1 elem coul) extr 1 ;
  829. imaili1 = ega mcouli1 'ROUG' ;
  830. idepli1 = ega mcouli1 'VERT' ;
  831.  
  832. si (non imot1) ;
  833. long1 = prog (mesu eli1) ;
  834. npas1 = 1 ;
  835. fins ;
  836. *
  837. * Segment VERT : deplacement
  838. si idepli1 ;
  839. idebui1 = vrai ;
  840. ibouci1 = faux ;
  841. iter b1 ;
  842. fins ;
  843. *
  844. * Segment ROUGE : maillage
  845. si imaili1 ;
  846.  
  847. * Si debut nouvelle passe :
  848. si idebui1 ;
  849.  
  850. * Identification de la passe :
  851. npassi1 = 0 ;
  852. nbp1 = dime tab1.passes ;
  853. repe bp1 nbp1 ;
  854. mailpss1 = (tab1.passes.&bp1).maillage ;
  855. si ((dans pi1 mailpss1) et (dans pi2 mailpss1)) ;
  856. tpassi1 = tab1.passes.&bp1 ;
  857. npassi1 = &bp1 ;
  858. quit bp1 ;
  859. fins ;
  860. fin bp1 ;
  861. si (dans (lect npassi1) lsaut1) ;
  862. iter b1 ;
  863. fins ;
  864.  
  865. * Affichage :
  866. si (npassi1 ega 0) ;
  867. erre '***** WAAM : passe non identifiee' ;
  868. sino ;
  869. mess '***** WAAM : maillage de la passe :' npassi1 ;
  870. lsaut1 = lsaut1 et tgroup1 . npassi1 ;
  871. fins ;
  872.  
  873. * Hauteur de cordon :
  874. haut1 = 0. ;
  875. hautp1 = 0. ;
  876. lpassi1 = tgroup1 . npassi1 ;
  877. nbgrp1 = mini (lect enti1 (dime lpassi1)) ;
  878. repe bgrp1 nbgrp1 ;
  879. ipassi1 = extr lpassi1 &bgrp1 ;
  880. debii1 = tab1 . passes . ipassi1 . debit ;
  881. vitei1 = tab1 . passes . ipassi1 . vitesse ;
  882. largi1 = tab1 . passes . ipassi1 . largeur ;
  883. haut1 = debii1 / vitei1 / largi1 + haut1 ;
  884. si (&bgrp1 ega 1) ; hautp1 = haut1 ; fins ;
  885. fin bgrp1 ;
  886. mess (chai '***** WAAM : hauteur du macro-depot :' npassi1 ' =' haut1) ;
  887.  
  888. * Maillage :
  889. * si1 : maillage section courante :
  890. * vnsi1 : normale a la section
  891. largi1 = tab1 . passes . npassi1 . largeur ;
  892. si (non imot4) ;
  893. dens1 = largi1 ;
  894. fins ;
  895. lsi1 = (0 0 0) droi (0 largi1 0) dini dens1 dfin dens1 ;
  896. si1 = lsi1 tran (0 0 haut1) dini dens1 dfin dens1 ;
  897. vnsi1 = 1 0 0 ;
  898.  
  899. * Positionnement extremite initiale (Pi1 au centre de l'arete superieure) :
  900. Pmsup1 = 0 (0.5*largi1) haut1 ;
  901. Prefi1 = Pi1 moin (0 0 hautp1) plus (0 0 haut1) ;
  902. si1 = si1 plus (Prefi1 moin Pmsup1) ;
  903.  
  904. *si (&b1 neg 1) ; trac qual (si1 et mail2 et mtraj1) ; fins ;
  905.  
  906. * Initialisation section extremite finale :
  907. si2 = si1 plus vai1 ;
  908. vnsi2 = vnsi1 ;
  909. angl2 = 0. ;
  910. *
  911. * Orientation sections de maillage :
  912. * Par defaut, selon vni1 :
  913. vnsmai1 = vni1 ;
  914. vnsmai2 = vnsmai1 ;
  915.  
  916. * Detection suite segments rouges et boucle :
  917. tpsi2 = tpassi1.instants extr 1 ;
  918. dtc1 = tab1 . temps_de_coupure ;
  919. si (indi1 neg 0) ;
  920. dtpassi1 = tpsi2 - (tab1.passes.(npassi1-1).instants extr 2) - (1. * dtc1) ;
  921. tpsi2 = (ttps1 . (indi1 - 1)) + dtpassi1 ;
  922. *mess 'tpsi2 =' tpsi2 ;
  923. fins ;
  924. tpsi22 = tpassi1.instants extr 2 ;
  925. si (&b1 neg nb1) ;
  926. elip1 = mtraj1 elem (&b1 + 1) ;
  927. mcoulip1 = (elip1 elem coul) extr 1 ;
  928. isuiti1 = ega mcoulip1 'ROUG' ;
  929. isuiti2 = non (vide (elip1 inte mailpss1)) ;
  930. si (npassi1 neg nbp1) ;
  931. isuiti2 = isuiti2 ou (ega tpsi22 (tab1.passes.(npassi1+1).instants extr 1)) ;
  932. fins ;
  933. isuiti1 = isuiti1 et isuiti2 ;
  934. si isuiti1 ;
  935. vai2 = (elip1 poin 2) moin (elip1 poin 1) ;
  936. vni2 = vai2 / (norm vai2) ;
  937. vasmai2 = vni1 plus vni2 ;
  938. vnsmai2 = vasmai2 / (norm vasmai2) ;
  939. elfini1 = elip1 ;
  940. pfini1 = elip1 poin 2 ;
  941. nb2 = nb1 - (&b1 + 1) ;
  942. i2 = &b1 + 2 ;
  943. * Rq : si nb2 = 0, le bloc n'est pas execute
  944. repe b2 nb2 ;
  945. eli2 = mtraj1 elem i2 ;
  946. mcoul2 = (eli2 elem coul) extr 1 ;
  947. si (neg mcoul2 'ROUG') ; quit b2 ; fins ;
  948. pfini1 = eli2 poin 2 ;
  949. elfini1 = eli2 ;
  950. vafini1 = pfini1 moin (eli2 poin 1) ;
  951. vnfini1 = vafini1 / (norm vafini1) ;
  952. i2 = i2 + 1 ;
  953. fin b2 ;
  954. ibouci1 = (norm (pfini1 moin pi1)) < tol1 ;
  955. si ibouci1 ;
  956. mess '***** WAAM : boucle fermee detectee' ;
  957. * On definit la normale a la section de maillage (SMA) :
  958. vasmai1 = vni1 plus vnfini1 ;
  959. vnsmai1 = vasmai1 / (norm vasmai1) ;
  960. fins ;
  961. fins ;
  962. fins ;
  963.  
  964. * Orientation de si1 selon vnsmai1 :
  965. *list vnsmai1 ; list vnsi1 ;
  966. *trac (0 -0 3) (mtraj1 et mail2 et (si1 coul rose) et (si2 coul turq) et pi1 et pi2) ;
  967. vnnz1 = pvec vnsi1 vnsmai1 ;
  968. lvnnz1 = norm vnnz1 ;
  969. * Si sinus non nul a tol1 pres, on oriente la section :
  970. si (lvnnz1 neg 0. (tol1 / dens1)) ;
  971. si (lvnnz1 ega 1. (vale prec)) ; lvnnz1 = 1. ; fins ;
  972. angl1 = asin lvnnz1 ;
  973. *list vnsi1 ; list vnsmai1 ; list angl1 ;
  974. si ((psca vnsmai1 vnsi1) < 0.) ;
  975. angl1 = 180. - angl1 ;
  976. *mess ' on prend (180.-angl1)' ;
  977. fins ;
  978. si1 = si1 tour angl1 pi1 (pi1 plus vnnz1) ;
  979. vnsi1 = vnsmai1 ;
  980. si2 = si1 plus vai1 ;
  981. vnsi2 = vnsi1 ;
  982. angl2 = 0. ;
  983. sino ;
  984. si ((psca vnsmai1 vnsi1) < 0.) ;
  985. vnsi1 = vnsmai1 ;
  986. si2 = si1 plus vai1 ;
  987. vnsi2 = vnsi1 ;
  988. angl2 = 0. ;
  989. fins ;
  990. fins ;
  991. *list vnsi1 ; list angl1 ;
  992. titr 'Debut de passe, apres orientation de si1' ;
  993. *trac (0 0 100) (mtraj1 et mail2 et (si1 coul rose) et (si2 coul turq) et pi1 et pi2) ;
  994.  
  995. * Si boucle, on garde la section de maillage du debut :
  996. si ibouci1 ;
  997. sfini1 = si1 ;
  998. vnfini1 = vnsmai1 ;
  999. fins ;
  1000.  
  1001. sino ;
  1002.  
  1003. * On a deja si1 correctement orientee.
  1004. * On doit orienter si2.
  1005. * Par defaut, orientation de si1 :
  1006. si2 = si1 plus vai1 ;
  1007. vnsi2 = vnsi1 ;
  1008. angl2 = 0. ;
  1009. vnsmai2 = vnsi2 ;
  1010.  
  1011. * Identification et enregitrement de la passe :
  1012. npassi1 = 0 ;
  1013. nbp1 = dime tab1.passes ;
  1014. repe bp1 nbp1 ;
  1015. mailpss1 = (tab1.passes.&bp1).maillage ;
  1016. si ((dans pi1 mailpss1) et (dans pi2 mailpss1)) ;
  1017. npassi1 = &bp1 ;
  1018. quit bp1 ;
  1019. fins ;
  1020. fin bp1 ;
  1021. lsaut1 = lsaut1 et tgroup1 . npassi1 ;
  1022.  
  1023. * Si fin d'une boucle, orientation si2 connue :
  1024. si (ibouci1 et (pi2 ega pfini1)) ;
  1025. vnsmai2 = vnfini1 ;
  1026. sino ;
  1027. si (&b1 neg nb1) ;
  1028. elip1 = mtraj1 elem (&b1 + 1) ;
  1029. mcoulip1 = (elip1 elem coul) extr 1 ;
  1030. isuiti1 = ega mcoulip1 'ROUG' ;
  1031. si isuiti1 ;
  1032. vai2 = (elip1 poin 2) moin (elip1 poin 1) ;
  1033. vni2 = vai2 / (norm vai2) ;
  1034. vasmai2 = vni1 plus vni2 ;
  1035. vnsmai2 = vasmai2 / (norm vasmai2) ;
  1036. fins ;
  1037. fins ;
  1038. fins ;
  1039.  
  1040. * Fin "Si idebui1 / sinon" :
  1041. fins ;
  1042. *
  1043. * Orientation de si2 selon vnsmai2 :
  1044. *list vnsmai2 ; list vnsi2 ;
  1045. *trac (0 0 100) (mtraj1 et mail2 et (si1 coul rose) et (si2 coul turq) et pi1 et pi2 et (pi1 droi 1 (pi1 plus (0.01*vnsi1))) et (pi2 droi 1 (pi2 plus (0.01*vnsi2)))) titr 'Avant orientation si2' ;
  1046. vnnz1 = pvec vnsi2 vnsmai2 ;
  1047. lvnnz1 = norm vnnz1 ;
  1048. * Si sinus non nul a tol1 pres, on oriente la section :
  1049. si (lvnnz1 neg 0. (tol1 / dens1)) ;
  1050. si (lvnnz1 ega 1. (vale prec)) ; lvnnz1 = 1. ; fins ;
  1051. angl2 = asin lvnnz1 ;
  1052. si ((psca vnsi2 vnsmai2) < 0.) ;
  1053. *mess ' on prend (180.-angl2)' ; saut 1 lign ;
  1054. angl2 = 180. - angl2 ;
  1055. fins ;
  1056. si2 = si2 tour angl2 pi2 (pi2 plus vnnz1) ;
  1057. vnsi2 = vnsi2 tour angl2 (0 0 0) vnnz1 ;
  1058. sino ;
  1059. * Pas sur que ça serve a quelque chose...
  1060. si ((psca vnsi2 vnsmai2) < 0.) ;
  1061. vnsi2 = vnsmai2 ;
  1062. angl2 = 180. ;
  1063. fins ;
  1064. fins ;
  1065. *titr 'En cours de passe, apres orientation de si2' ;
  1066. *trac (0 0 100) (mtraj1 et mail2 et (si1 coul rose) et (si2 coul turq) et pi1 et pi2 et (pi1 droi 1 (pi1 plus (0.01*vnsi1))) et (pi2 droi 1 (pi2 plus (0.01*vnsi2)))) ;
  1067. *si (ibouci1 et (pi2 ega pfini1)) ;
  1068. *trac (5 -2 3) (mtraj1 et mail2 et (si1 coul rose) et (si2 coul turq) et (si22 coul oran) et pi1 et pi2) ;
  1069. *fins ;
  1070.  
  1071. *---- Maillage du segment :
  1072.  
  1073. llong1 = somm (long1 enle npas1) ;
  1074. leli1 = mesu eli1 ;
  1075. si (leli1 &lt;EG llong1) ;
  1076. erre '***** ERREUR : somme pas de discretisation > long. ' &b1 'e passe' ;
  1077. quit waam ;
  1078. fins ;
  1079.  
  1080. * Boucle sur les pas de discretisation :
  1081.  
  1082. * pasi1 : pas de discretisation courant
  1083. * nei1 : nb maillages pour ce pas de discretisation du segment
  1084. * pami1 : pas de maillage courant
  1085. * nei2 : nbel crees par pas de maillage
  1086.  
  1087. idebui1 = non isuiti1 ;
  1088. pi11 = pi1 ;
  1089. repe bp1 npas1 ;
  1090. pasi1 = extr long1 &bp1 ;
  1091. si (&bp1 neg npas1) ;
  1092. nei1 = 1 ;
  1093. pami1 = pasi1 ;
  1094. sino ;
  1095. llmi1 = leli1 - llong1 ;
  1096. nei1 = llmi1 / pasi1 + 0.5 ;
  1097. nei1 = maxi (lect (enti nei1) 1) ;
  1098. *mess 'nei1=' nei1 ;
  1099. pami1 = llmi1 / (flot nei1) ;
  1100. fins ;
  1101.  
  1102. vtrani1 = pami1 * vni1 ;
  1103. ltrani1 = norm vtrani1 ;
  1104. nei2 = enti (ltrani1 / dens1 + 0.5) ;
  1105. nei2 = maxi (lect (enti nei2) 1) ;
  1106. *mess 'nei2=' nei2 ;
  1107. itouri1 = (abs angl2) > 0. ;
  1108. *list itouri1 ;
  1109. *list angl2 ;
  1110. angli2 = angl2 / (flot nei1) ;
  1111. vnsi22 = vnsi1 ;
  1112. si22 = si1 ;
  1113. dti2 = ltrani1 / vitei1 ;
  1114. repe b2 nei1 ;
  1115. pi22 = pi11 plus vtrani1 ;
  1116. si itouri1 ;
  1117. vnsi22 = vnsi22 tour angli2 (0 0 0) vnnz1 ;
  1118. pi33 = pi22 plus vnnz1 ;
  1119. pi44 = pi22 plus (pvec vnsi22 vnnz1) ;
  1120. si22 = si22 proj dire vtrani1 plan pi22 pi33 pi44 ;
  1121. sino ;
  1122. si22 = si1 plus vtrani1 ;
  1123. fins ;
  1124. maili2 = si1 volu si22 nei2 ;
  1125. si1 = si22 ;
  1126. pi11 = pi22 ;
  1127. maili2 = maili2 coul (indi1+1) ;
  1128. mail2 = mail2 et maili2 ;
  1129. tmai1 . indi1 = mail2 ;
  1130. ttps1 . indi1 = tpsi2 ;
  1131. tpsi2 = tpsi2 + dti2 + dtc1 ;
  1132. indi1 = indi1 + 1 ;
  1133. fin b2 ;
  1134.  
  1135. fin bp1 ;
  1136.  
  1137. *trac (5 -2 3) (mtraj1 et mail2 et (si1 coul rose) et (si2 coul turq) et (si22 coul oran) et pi1 et pi2) ;
  1138.  
  1139. vnsi1 = vnsi2 ;
  1140. vnsmai1 = vnsmai2 ;
  1141.  
  1142. * Fin si imail1 (segment rouge) ;
  1143. sino ;
  1144. erre '***** ERREUR : pb definition trajectoire, couleur segment inconnue' ;
  1145. quit waam ;
  1146. fins ;
  1147.  
  1148. * Fin boucle segments trajectoire
  1149. fin b1 ;
  1150. elim mail2 tol1 ;
  1151.  
  1152. * Verification list des temps de tttps1 bien ordonnee :
  1153. ltps1 = prog table ttps1 ;
  1154. ltps2 = ordo ltps1 ;
  1155. si (((ltps2 - ltps1) maxi abs) > (1.e-3 * dti2)) ;
  1156. erre '***** la liste des TEMPS de l''evolution du maillage est mal ordonnee' ;
  1157. fins ;
  1158. * Enregistrement des sorties :
  1159. tab2.maillage = mail2 ;
  1160. tab2.evolution_maillage = table ;
  1161. tab2.evolution_maillage.temps = ttps1 ;
  1162. tab2.evolution_maillage.maillage = tmai1 ;
  1163.  
  1164. *--------------------------- TEMPS_CALCULES ---------------------------*
  1165.  
  1166. nbt1 = dime ttps1 ;
  1167. ltca1 = prog ;
  1168. repe bt1 nbt1 ;
  1169. tps0 = ttps1 . (&bt1 - 1) ;
  1170. si (&bt1 neg nbt1) ;
  1171. tps1 = (ttps1 . &bt1) - dtc1 ;
  1172. sino ;
  1173. tps1 = (tab1 . evolution_puissance extr absc) maxi ;
  1174. fins ;
  1175. si (tps1 < tps0) ;
  1176. * mess 'tps0 =' tps0 ;
  1177. * mess 'tps1 =' tps1 ;
  1178. erre ' ***** Erreur dans le calcul de la liste des TEMPS_CALCULES' ;
  1179. fins ;
  1180. ltcai1 = prog tps0 pas dtc1 geom 2 tps1 ;
  1181. ltca1 = ltca1 et ltcai1 ;
  1182. fin bt1 ;
  1183.  
  1184. * Raffinement si pas > flot5 (option TEMP MAXI) :
  1185. si imot6 ;
  1186. ltca1 = ltca1 raff flot5 ;
  1187. fins ;
  1188.  
  1189. * Verification si liste temps calcules bien ordonnee :
  1190. ltca2 = ordo ltca1 ;
  1191. si (((ltca2 - ltca1) maxi abs) > (1.e-3 * dtc1)) ;
  1192. erre '***** La liste des TEMPS_CALCULES est mal ordonnee' ;
  1193. quit waam ;
  1194. fins ;
  1195. tab2.temps_calcules = ltca1 ;
  1196.  
  1197. resp tab2 ;
  1198. quit waam ;
  1199. * Fin option MACRO-DEPOT :
  1200. fins ;
  1201.  
  1202. *----------------------------------------------------------------------*
  1203. * FIN *
  1204. *----------------------------------------------------------------------*
  1205. *
  1206. * MOT1 n'est pas un des mots-cles des options de la procedure :
  1207. si (icas1 ega 0) ;
  1208. erre '***** ERREUR WAAM : MOT-cle option WAAM non reconnu.' ;
  1209. quit waam ;
  1210. fins ;
  1211.  
  1212. FINP ;
  1213.  
  1214.  
  1215.  
  1216.  
  1217.  
  1218.  
  1219.  

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