Télécharger coller.procedur

Retour à la liste

Numérotation des lignes :

  1. * COLLER PROCEDUR CHAT 04/01/15 21:15:02 4784
  2. *
  3. ************************************************************************
  4. *
  5. * C O L L E R
  6. * -----------
  7. *
  8. * FONCTION:
  9. * ---------
  10. *
  11. * DEFINIR DES JONCTIONS COQUE-MASSIF OU POUTRE-MASSIF EN 3D.
  12. *
  13. * C'est aussi un moyen de generer les valeurs de rotation sur un
  14. * ensemble de noeuds appartenant a des elements massifs.
  15. *
  16. * PHRASE D'APPEL:
  17. * ---------------
  18. *
  19. * COQMASF = COLLER VOLUM8 SURF4 ('SOUPLE') ;
  20. *
  21. * OPERANDES:
  22. * ----------
  23. *
  24. * VOLUM8 "MAILLAGE" ZONE VOLUMIQUE.
  25. * SURF4 "MAILLAGE" ZONE MODELISEE EN COQUES OU POUTRES, ou
  26. * ensemble de points de l'enveloppe de
  27. * "VOLUM8" sur lesquels on veut connaitre les
  28. * rotations.
  29. * 'SOUPLE' "MOT " MOT-CLE DEMANDANT UNE CERTAINE SOUPLESSE A
  30. * LA "COLLE": ON NE DEFINIT LA JONCTION QU'EN
  31. * 1 POINT SUR 2.
  32. *
  33. * RESULTATS:
  34. * ----------
  35. *
  36. * COQMASF "RIGIDITE" Matrice definissant des rotations sur
  37. * l'enveloppe des massifs.
  38. * A adjoindre a la Matrice de Rigidite.
  39. *
  40. * REMARQUES:
  41. * ----------
  42. *
  43. * L'OPTION "SOUPLE" A ETE INTRODUITE POUR CONTRE-BALANCER LA
  44. * RAIDEUR EXCESSIVE D'UN MAILLAGE TROP GROSSIER.
  45. * L'EFFET DE L'OPTION "SOUPLE" EST AUSSI FACILE A QUANTIFIER QUE
  46. * CELUI DES GROSSES MAILLES ...
  47. *
  48. * MODE DE FONCTIONNEMENT:
  49. * -----------------------
  50. *
  51. * UNE ROTATION EST APPROXIMEE PAR LES DEPLACEMENTS RELATIFS DE
  52. * POINTS DU VOLUME QUI SONT VOISINS DU NOEUD CONSIDERE.
  53. * PLUS FACILE A DIRE QU'A FAIRE ...
  54. *
  55. * VARIABLES:
  56. * ----------
  57. *
  58. * OXYZ = TABLE DE 3 POINTS VOISINS DU POINT COURANT "P1" ET QUI
  59. * REPRESENTENT AU MIEUX LE TRIEDRE LOCAL PARALLELE AU
  60. * REPERE GENERAL.
  61. * OXYZ.K.'PT' = POINT "P2" TEL QUE P1P2 EST UNE BONNE
  62. * APPROXIMATION DE LA DIRECTION "K".
  63. * OXYZ.K.'COS2' = VALEUR D'AUTANT PLUS PROCHE DE 1 QUE
  64. * L'APPROXIMATION DE LA DIRECTION "K" EST
  65. * BONNE.
  66. *
  67. 'DEBPROC' COLLER VOLUM8*'MAILLAGE' SURF4*'MAILLAGE' OPT/'MOT';
  68. OXYZ = 'TABLE' ;
  69. OXYZ. 1 = 'TABLE' ;
  70. OXYZ. 2 = 'TABLE' ;
  71. OXYZ. 3 = 'TABLE' ;
  72. UX = 'MOT' 'UX' ;
  73. UY = 'MOT' 'UY' ;
  74. UZ = 'MOT' 'UZ' ;
  75. RX = 'MOT' 'RX' ;
  76. RY = 'MOT' 'RY' ;
  77. RZ = 'MOT' 'RZ' ;
  78. IND = 'TABLE' ;
  79. IND. 1 = 1 ;
  80. IND. 2 = 2 ;
  81. IND. 3 = 3 ;
  82. IND. 4 = 1 ;
  83. IND. 5 = 2 ;
  84. DEP = 'TABLE' ;
  85. DEP. 1 = 'MOT' UX ;
  86. DEP. 2 = 'MOT' UY ;
  87. DEP. 3 = 'MOT' UZ ;
  88. ROT = 'TABLE' ;
  89. ROT. 1 = 'MOT' RX ;
  90. ROT. 2 = 'MOT' RY ;
  91. ROT. 3 = 'MOT' RZ ;
  92. *
  93. * AUTEUR, DATE DE CREATION:
  94. * -------------------------
  95. *
  96. * P. MANIGOT 28 JUIN 1989
  97. * REPRISE: P.M. 05/09/89
  98. * P.M. 09/02/90: "AXE" enleve. PSCAL --> COORD
  99. * P.M. 19/02/90: durcissement du test ">0.99"
  100. * P.M. 19/03/90: utilisation de "RELA ... DIRECTION"
  101. * P.M. 22/10/91: correction pour elements de volume dont les aretes
  102. * sont a 45› par rapport aux axes du repere general.
  103. * P.M. 24/03/92: mise en commentaire brutale de TASSER qui pose des
  104. * problemes. A arranger plus tard.
  105. *
  106. ************************************************************************
  107. *
  108. SI = 'MOT' 'SI' ; SINON = 'MOT' 'SINON' ; FINSI = 'MOT' 'FINSI' ;
  109. REPETER = 'MOT' 'REPETER'; QUITTER = 'MOT' 'QUITTER'; FIN = 'MOT' 'FIN';
  110. *
  111. *
  112. INIT = VRAI ;
  113. X = 'TABLE' ;
  114. * INITIALISATION DE LA LISTE DES POINTS SUR LESQUELS ONT ETE DEFINIES
  115. * LES ROTATIONS:
  116. T_LIAIS = 'TABLE' 'liaison' ;
  117. * INITIALISATION DE LA LISTE DES POINTS "VOISINS" UTILISES POUR DEFINIR
  118. * LES ROTATIONS:
  119. T_VOISIN = 'TABLE' 'voisin' ;
  120. *
  121. *
  122. SOUPLE = 'EXISTE' OPT ;
  123. SI SOUPLE ;
  124. SOUPLE = 'EGA' OPT 'SOUPLE' ;
  125. FINSI;
  126. *
  127. ENVELO4 = 'ENVELOPPE' VOLUM8 ;
  128. SURF1 = 'CHANGER' SURF4 'POI1' ;
  129. SOUDURE = 'ELEMENTS' SURF1 'APPUYES' 'LARGEMENT SUR' ENVELO4 ;
  130. 'OUBLIER' SURF1 ;
  131. NBPT1 = 'NBNOEUDS' SOUDURE ;
  132. *
  133. *
  134. * BOUCLE SUR TOUS LES POINTS DE L'INTERSECTION:
  135. * ---------------------------------------------
  136. IP = 0 ;
  137. REPETER REP1 NBPT1 ;
  138. IP = IP + 1 ;
  139. PT1 = 'POINT' SOUDURE IP ;
  140. *
  141. SI SOUPLE ;
  142. * CAS DE LIAISON 1 SUR 2 :
  143. SI ('EXISTE' T_VOISIN PT1) ;
  144. * "PT1", VOISIN D'UN POINT LIE EN ROTATION, DOIT ETRE SAUTE.
  145. 'ITERER' REP1 ;
  146. FINSI;
  147. PT2 = 'POINT' ('DIFFERENCE' SOUDURE ('MANUEL' 'POI1' PT1))
  148. 'PROCHE' PT1 ;
  149. SI ('EXISTE' T_LIAIS PT2) ;
  150. 'ITERER' REP1 ;
  151. FINSI;
  152. *
  153. * ON REPERTORIE A PEU PRES LES NOEUDS VOISINS:
  154. VOISIN4 = 'ELEMENT' ENVELO4 'APPUYE' 'LARGEMENT SUR' PT1 ;
  155. NBPROCHE = 'NBELEM' VOISIN4 ;
  156. NBPROCHE = 'MINIMUM' ('LECT' NBPROCHE 4) ;
  157. PT2 = PT1 ;
  158. VOISIN2 = 'CHANGER' VOISIN4 'POI1' ;
  159. REPETER REP11 NBPROCHE ;
  160. VOISIN2 = 'DIFFERENCE' VOISIN2 ('MANUEL' 'POI1' PT2) ;
  161. PT2 = 'POINT' VOISIN2 'PROCHE' PT2 ;
  162. T_VOISIN.PT2 = 1 ;
  163. * (CE QUI IMPORTE SIMPLEMENT, C'EST QUE L'INDICE EXISTE)
  164. FIN REP11 ;
  165. FINSI;
  166. *
  167. T_LIAIS.PT1 = 1 ;
  168. * (CE QUI IMPORTE SIMPLEMENT, C'EST QUE L'INDICE EXISTE)
  169. *
  170. VOISIN8 = 'ELEMENT' VOLUM8 'APPUYE' 'LARGEMENT SUR' PT1 ;
  171. VOISIN1 = 'CHANGER' VOISIN8 'POI1' ;
  172. VOISIN1 = 'DIFFERENCE' VOISIN1 ('MANUEL' 'POI1' PT1) ;
  173. NBPROCHE = 'NBNOEUDS' VOISIN1 ;
  174. *
  175. *
  176. * RECHERCHE DE 3 POINTS VOISINS APPROXIMANT LE TRIEDRE DU REPERE:
  177. * ---------------------------------------------------------------
  178. *
  179. * On suppose que les elements massifs sont corrects; ce qui fait qu'ils
  180. * comprennent au moins 4 points (tetraedre) et que "VOISIN1" contient
  181. * au moins 3 points voisins formant un repere avec le point "PT1" comme
  182. * origine (repere non orthonorme, mais non degenere).
  183. K = 0 ;
  184. REPETER REP23 3 ;
  185. K = K + 1 ;
  186. I = 0 ;
  187. REPETER REP22 ;
  188. I = I + 1 ;
  189. SI (I > NBPROCHE) ; QUITTER REP22 ; FINSI;
  190. *
  191. PT2 = 'POINT' VOISIN1 I ;
  192. V12 = PT2 'MOINS' PT1 ;
  193. X. 1 = ('COORDONNEE' V12 1) ** 2 ;
  194. X. 2 = ('COORDONNEE' V12 2) ** 2 ;
  195. X. 3 = ('COORDONNEE' V12 3) ** 2 ;
  196. XYZ = (X. 1) + (X. 2) + (X. 3) ;
  197. *
  198. COS2 = X.K / XYZ ;
  199. SI (I 'EGA' 1) ;
  200. OXYZ.K.'PT' = PT2 ;
  201. OXYZ.K.'COS2' = COS2 ;
  202. SINON;
  203. SI (OXYZ.K.'COS2' < COS2) ;
  204. OXYZ.K.'PT' = PT2 ;
  205. OXYZ.K.'COS2' = COS2 ;
  206. FINSI;
  207. FINSI;
  208. *
  209. FIN REP22 ;
  210. SI (K < 3) ;
  211. * (risque inutile de plantage si K=3)
  212. VOISIN1 = 'DIFFERENCE' VOISIN1 ('MANUEL' 'POI1' OXYZ.K. 'PT') ;
  213. NBPROCHE = NBPROCHE - 1 ;
  214. FINSI;
  215. *
  216. FIN REP23 ;
  217.  
  218. *
  219. *
  220. * CREATION DES 3 MATRICES ELEMENTAIRES DES ROTATIONS EN 1 POINT:
  221. * --------------------------------------------------------------
  222. K = 0 ;
  223. REPETER REP33 3 ;
  224. K = K + 1 ;
  225. K2 = IND.(K + 1) ;
  226. K3 = IND.(K + 2) ;
  227. *
  228. P2 = OXYZ.K2.'PT' ;
  229. P3 = OXYZ.K3.'PT' ;
  230. R1 = 'MOT' ROT.K ;
  231. U2 = 'MOT' DEP.K2 ;
  232. U3 = 'MOT' DEP.K3 ;
  233. COS2 = OXYZ.K2.'COS2' ;
  234. COS3 = OXYZ.K3.'COS2' ;
  235. *
  236. SI ( (COS2 > 0.999) 'ET' (COS3 > 0.999) ) ;
  237. *
  238.  
  239. * si ( ega r1 'RY' ) ; mess ' on saute le point';
  240. * list pt1; iterer rep33; finsi;
  241. D2 = ('COORDONNEE' P2 K2) - ('COORDONNEE' PT1 K2) ;
  242. D3 = ('COORDONNEE' P3 K3) - ('COORDONNEE' PT1 K3) ;
  243. DD1 = 2.D0 * D2 * D3 ;
  244. MAT1 = 'RELA' DD1 R1 PT1 - D2 U2 PT1 + D3 U3 PT1
  245. + D2 U2 P3 - D3 U3 P2 ;
  246.  
  247. *
  248. SINON;
  249. *
  250. * CE N'EST PAS TOUT-A-FAIT "R1" DONT ON CONNAIT L'APPROXIMATION.
  251. * CE N'EST PAS TOUT-A-FAIT "U2" ET "U3" QU'IL FAUT UTILISER.
  252. V12 = P2 'MOINS' PT1 ;
  253. V13 = P3 'MOINS' PT1 ;
  254. D2 = 'NORME' V12 ;
  255. D3 = 'NORME' V13 ;
  256. DD0 = 2.D0 * D2 * D3 ;
  257. N1 = 'PVECTORIEL' V12 V13 ;
  258. N1 = N1 / ('NORME' N1) ;
  259. V12 = V12 / D2 ;
  260. V13 = V13 / D3 ;
  261. N2 = 'PVECTORIEL' V13 N1 ;
  262. N3 = 'PVECTORIEL' N1 V12 ;
  263. *
  264.  
  265. n22 = n2 * d2;
  266. nn3= n3* d3;
  267. ndi3= nn3 'MOINS' n22;
  268. nndi3 = 'NORME' ndi3;
  269. ndi3 = ndi3 / nndi3;
  270. * cx cy cz = coor n1;
  271. *mess ' cx cy cz ' cx cy cz;
  272. * si ( (abs cy) > 0.999); mess ' on saute pour le point '; list pt1;
  273. * iterer rep33; finsi;
  274.  
  275. * MAT1 = 'RELA' DD0 'ROTA' 'DIRECTION' N1 PT1
  276. * + D2 'DEPL' 'DIRECTION' N2 P3
  277. * - D2 'DEPL' 'DIRECTION' N2 PT1
  278. * - D3 'DEPL' 'DIRECTION' N3 P2
  279. * + D3 'DEPL' 'DIRECTION' N3 PT1 ;
  280. MAT1 = 'RELA' DD0 'ROTA' 'DIRECTION' N1 PT1
  281. + D2 'DEPL' 'DIRECTION' N2 P3
  282. - D3 'DEPL' 'DIRECTION' N3 P2
  283. + nndi3 'DEPL' 'DIRECTION' ndi3 pt1;
  284. *
  285. FINSI;
  286. *
  287. SI INIT ;
  288. COQMASF = MAT1 ;
  289. INIT = FAUX ;
  290. SINON;
  291. COQMASF = COQMASF 'ET' MAT1 ;
  292. FINSI;
  293. *
  294. FIN REP33 ;
  295. *
  296. * SI (IP 'MULTIPLE' 100) ;
  297. * 'MENAGE' ;
  298. * FINSI;
  299. *
  300. FIN REP1 ;
  301. *
  302. 'MESSAGE' NBPT1 'noeuds de jonction entre massifs et coques.' ;
  303. NBPT2 = ('DIMENSION' T_LIAIS) - 1 ;
  304. SI (NBPT2 < NBPT1) ;
  305. 'MESSAGE' NBPT2 'noeuds lies en rotation.' ;
  306. FINSI;
  307. *
  308. 'OUBLIER' T_LIAIS ;
  309. 'OUBLIER' T_VOISIN ;
  310. 'OUBLIER' ENVELO4 ;
  311. 'OUBLIER' SOUDURE ;
  312. 'MENAGE' ;
  313. *+*'TASSER' 'NOOPT' ;
  314. *
  315. 'FINPROC' COQMASF ;
  316.  
  317.  

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