Télécharger ch_theta.procedur

Retour à la liste

Numérotation des lignes :

  1. * CH_THETA PROCEDUR JB251061 21/02/24 21:15:01 10900
  2. * =============================================================================
  3. * PROCEDURE DE CALCUL DU CHAMP THETA/PI
  4. * -------------------------------------
  5. *
  6. * DESCRIPTION : DETERMINE UN CHPOINT DE NORME CONSTANTE A L'INTERIEUR D'UNE
  7. * COURONNE ENTOURANT LE FRONT DE FISSURE ET NUL A L'EXTERIEUR DE
  8. * CETTE COURONNE. LE CHPOINT THETA AINSI DEFINI REPRESENTE LA
  9. * DIRECTION DE PROPAGATION EVENTUELLE DE LA FISSURE.
  10. * =============================================================================
  11. DEBP CH_THETA SUPTAB*TABLE OBJUTI*'TABLE' BOOL*'TABLE' ;
  12.  
  13. * ON DETERMINE 'SI' ON CALCULE CHAMP_THETA OU CHAMP_PI
  14. SI BOOL.'CHAMP_THETA' ;
  15. 'SI' BOOL.'DJ/DA' ;
  16. 'SI' BOOL.'CHAMP_PI' ;
  17. CALCUL = FAUX ;
  18. 'SINON' ;
  19. CALCUL = VRAI ;
  20. RESULT = MOT 'PI' ;
  21. 'FINSI' ;
  22. 'SINON' ;
  23. CALCUL = FAUX ;
  24. 'FINSI' ;
  25. SINON ;
  26. CALCUL = VRAI ;
  27. RESULT = MOT 'THETA' ;
  28. FINSI ;
  29. * ON DETERMINE 'SI' ON CALCULE LA DIRECTION DE PROPAGATION
  30. DIRECTION = NON ('EXIS' SUPTAB 'UTILTETA') ;
  31.  
  32. * RECUPERATION DE CERTAINES DONNEES
  33. GDIME = OBJUTI.'DIMENSION' ;
  34. MAILLAGE = SUPTAB.'MAILLAGE' ;
  35. CRACK = SUPTAB.'FISSURE' ;
  36. FRONFISS = SUPTAB.'FRONT_FISSURE' ;
  37. COUCHE = SUPTAB.'COUCHE' ;
  38. MOD_MEC = OBJUTI.'MOD_MEC' ;
  39. * QUELQUES MOTS UTILES
  40. * (ON EXTRAIT LES GDIME PREMIERS MOTS CAR ON NE VEUT PAS DES ROTATIONS
  41. * DANS LE CAS DES COQUES)
  42. MUI = EXTR (EXTR MOD_MEC 'DEPL') (LECT 1 PAS 1 GDIME) ;
  43. MFI = EXTR (EXTR MOD_MEC 'FORC') (LECT 1 PAS 1 GDIME) ;
  44. MU1 = EXTR MUI 1 ; MU2 = EXTR MUI 2 ;
  45. MF1 = EXTR MFI 1 ; MF2 = EXTR MFI 2 ;
  46. 'SI' (EGA GDIME 3) ;
  47. MU3 = EXTR MUI 3 ;
  48. MF3 = EXTR MFI 3 ;
  49. 'FINSI' ;
  50.  
  51.  
  52. * =============================================================================
  53. * PARTIE 1 : CALCUL DU CHAMP THETA OU PI
  54. * --------------------------------------
  55.  
  56. SI CALCUL ;
  57.  
  58. MESS 'DETERMINATION DU CHAMP' ' ' RESULT ;
  59. RESULT = CHAI 'CHAMP_' RESULT ;
  60.  
  61.  
  62. * I - COMPATIBILITE DES DONNEES
  63. * -----------------------------
  64.  
  65. * VERIFICATION DE LA VALEUR DE 'ELEM'
  66. GELEM = VALE 'ELEM' ;
  67. 'SI' (EGA GELEM ' ') ;
  68. MESS 'ERREUR : TYPE D''ELEMENTS NON DECLARE. UTILISEZ' ;
  69. MESS ' L OPERATEUR OPTI POUR LE DECLARER' ;
  70. QUIT CH_THETA ;
  71. 'FINSI' ;
  72.  
  73. * DEFINITION DU MAILLAGE ET DU NOMBRE DE NOEUDS
  74. 'SI' ('EXIS' SUPTAB 'MAILLAGE') ;
  75. MAILLAGE = SUPTAB.'MAILLAGE' ;
  76. NB1 = NBNO (CHAN MAILLAGE 'POI1') ;
  77. 'SINON' ;
  78. MESS 'ERREUR : ON N A PAS TROUVE DANS LA TABLE L''INDICE ''MAILLAGE''' ;
  79. QUIT CH_THETA ;
  80. 'FINSI' ;
  81. M_FISS = ELEM MAILLAGE 'APPUYE' 'LARGEMENT' SUPTAB.'FRONT_FISSURE' ;
  82.  
  83. * VERIFICATION QUE L'EPAISSEUR EST DONNEE POUR LES COQUES
  84. 'SI' (BOOL.'COQ' ET (NON ('EXIS' SUPTAB 'EPAISSEUR'))) ;
  85. MESS 'ERREUR : L EPAISSEUR DE LA COQUE N EST PAS DONNEE' ;
  86. QUIT CH_THETA ;
  87. 'FINSI' ;
  88.  
  89. * VERIFICATIONS SUR LA FISSURE :
  90. * ******************************
  91. * DEFINITION DE LA FISSURE
  92. 'SI' (NON ('EXIS' SUPTAB 'FISSURE')) ;
  93. MESS 'ERREUR : LA FISSURE DU PROBLEME N EST PAS DONNEE' ;
  94. QUIT CH_THETA ;
  95. 'SINON' ;
  96. CRACK = SUPTAB.'FISSURE' ;
  97. 'FINSI' ;
  98. * VERIFICATION QUE LA FISSURE EST DE TYPE MAILLAGE
  99. 'SI' (NEG (TYPE CRACK) 'MAILLAGE') ;
  100. MESS 'ERREUR : LA FISSURE DOIT ETRE UN OBJET DE TYPE MAILLAGE' ;
  101. QUIT CH_THETA ;
  102. 'FINSI' ;
  103. * VERIFICATION QU'IL N'Y A PAS DE NOEUDS DOUBLES
  104. NB2 = NBNO (CHAN (CRACK ET MAILLAGE) 'POI1') ;
  105. 'SI' (NEG NB1 NB2) ;
  106. MESS 'ERREUR : IL Y A DES NOEUDS DOUBLES ENTRE' ;
  107. MESS ' LE MAILLAGE ET LA FISSURE' ;
  108. QUIT CH_THETA ;
  109. 'FINSI' ;
  110. * VERIFICATION QUE LA FISSURE EST UNE LIGNE EN 2D OU 3D COQUE
  111. * ET UNE SURFACE EN 3D MASSIF
  112. LMFISS = ELEM CRACK 'TYPE' ;
  113. LMLIGN = MOTS 'SEG2' 'SEG3' ;
  114. LMSURF = MOTS 'TRI3' 'TRI6' 'QUA4' 'QUA8' ;
  115. 'SI' ((EGA GDIME 2) OU ((EGA GDIME 3) ET BOOL.'COQ')) ;
  116. 'SI' (NON ('EXIS' LMLIGN LMFISS 'ET')) ;
  117. MESS 'ERREUR : EN 2D OU ELEMENTS DE COQUE MINCE' ;
  118. MESS ' LA FISSURE DOIT ETRE UNE LIGNE' ;
  119. QUIT CH_THETA ;
  120. 'FINSI' ;
  121. 'FINSI' ;
  122. 'SI' ((EGA GDIME 3) ET (NON BOOL.'COQ')) ;
  123. 'SI' (NON ('EXIS' LMSURF LMFISS 'ET')) ;
  124. MESS 'ERREUR : EN 2D OU ELEMENTS DE COQUE MINCE' ;
  125. MESS ' LA FISSURE DOIT ETRE UNE LIGNE' ;
  126. QUIT CH_THETA ;
  127. 'FINSI' ;
  128. 'FINSI' ;
  129. * NOMBRE DE LEVRES MODELISEES
  130. NB_LEVRES = 0 ;
  131. 'SI' ('EXIS' SUPTAB 'LEVRE_SUPERIEURE') ;
  132. NB_LEVRES = NB_LEVRES + 1 ;
  133. 'FINSI' ;
  134. 'SI' ('EXIS' SUPTAB 'LEVRE_INFERIEURE') ;
  135. NB_LEVRES = NB_LEVRES + 1 ;
  136. 'FINSI' ;
  137. 'SI' (EGA NB_LEVRES 2) ;
  138. XMULT = 1. ;
  139. 'SINON' ;
  140. XMULT = 2. ;
  141. 'FINSI' ;
  142.  
  143. * VERIFICATIONS SUR LE FRONT DE FISSURE :
  144. * ***************************************
  145. * VERIFICATION QUE LE FRONT EST FOURNI
  146. 'SI' (NON ('EXIS' SUPTAB 'FRONT_FISSURE')) ;
  147. MESS 'ERREUR : LE FRONT DE LA FISSURE N EST PAS DONNE' ;
  148. QUIT CH_THETA ;
  149. 'FINSI' ;
  150. NB2 = NBNO (CHAN (SUPTAB.'FRONT_FISSURE' ET MAILLAGE) 'POI1') ;
  151. 'SI' (NEG NB1 NB2) ;
  152. MESS 'ERREUR : IL Y A DES NOEUDS DOUBLES ENTRE LE' ;
  153. MESS ' MAILLAGE ET LE FRONT DE LA FISSURE' ;
  154. QUIT CH_THETA ;
  155. 'FINSI' ;
  156. * VERIFICATION QUE LE FRONT DE FISSURE EST UNE LIGNE EN 3D MASSIF
  157. * ET UN POINT EN 2D OU 3D COQUE
  158. MFRONT = TYPE SUPTAB.'FRONT_FISSURE' ;
  159. 'SI' ((GDIME EGA 3) ET (NON BOOL.'COQ')) ;
  160. 'SI' (NEG MFRONT 'MAILLAGE') ;
  161. MESS 'ERREUR : EN 3D AVEC ELEMENTS MASSIFS LE FRONT' ;
  162. MESS ' DOIT ETRE DE TYPE MAILLAGE.' ;
  163. QUIT CH_THETA ;
  164. 'FINSI' ;
  165. LMFRONT = SUPTAB.'FRONT_FISSURE' ELEM 'TYPE' ;
  166. 'SI' (NON ('EXIS' LMLIGN LMFRONT 'ET')) ;
  167. MESS 'ERREUR : EN 3D AVEC ELEMENTS MASSIFS LE FRONT' ;
  168. MESS ' DE LA FISSURE DOIT ETRE UNE LIGNE' ;
  169. QUIT CH_THETA ;
  170. 'FINSI' ;
  171. 'FINSI' ;
  172. 'SI' ((GDIME EGA 2) 'OU' ((GDIME EGA 3) ET BOOL.'COQ')) ;
  173. 'SI' (NON (EGA MFRONT 'POINT')) ;
  174. MESS 'ERREUR : EN 2D OU ELEMENTS EN COQUE MINCE LE' ;
  175. MESS ' FOND DE LA FISSURE DOIT ETRE UN POINT' ;
  176. QUIT CH_THETA ;
  177. 'FINSI' ;
  178. 'FINSI' ;
  179. * VERIFICATION QU'IL N'Y A PAS DE NOEUDS DOUBLES ENTRE LE FRONT ET LA FISSURE
  180. NB1 = NBNO (CHAN CRACK 'POI1') ;
  181. NB2 = NBNO (CHAN (SUPTAB.'FRONT_FISSURE' ET CRACK) 'POI1') ;
  182. 'SI' (NEG NB1 NB2) ;
  183. MESS 'ERREUR : IL Y A DES NOEUDS DOUBLES ENTRE LE FRONT' ;
  184. MESS ' DE LA FISSURE ET LA FISSURE ELLE MEME' ;
  185. QUIT CH_THETA ;
  186. 'FINSI' ;
  187.  
  188. * VERIFICATION QUE LE NOMBRE DE COUCHES EST FOURNI
  189. 'SI' (NON ('EXIS' SUPTAB 'COUCHE')) ;
  190. MESS 'ERREUR : ON VEUT LE NOMBRE DE COUCHES D ELEMENTS' ;
  191. MESS ' AUTOUR DE LA FISSURE QUI SE DEPLACE' ;
  192. MESS ' POUR SIMULER LA PROPAGATION DE LA FISSURE' ;
  193. QUIT CH_THETA ;
  194. 'SINON' ;
  195. COUCHE = SUPTAB.'COUCHE' ;
  196. 'FINSI' ;
  197.  
  198. * CAS 3D : VERIFICATIONS EN CAS DE TUYAU DROIT ET COUDE :
  199. * *******************************************************
  200. * TTD = TRANSLATION TUYAUTERIE DROITE
  201. * RTD = ROTATION TUYAUTERIE DROITE
  202. * RC = ROTATION COUDE
  203. * DEFINITION DE BOOLEENS UTILES
  204. LCHTRAN = 'EXIS' SUPTAB 'CHPOINT_TRANSFORMATION' ;
  205. LOPERA = 'EXIS' SUPTAB 'OPERATEUR' ;
  206. LPOINT1 = 'EXIS' SUPTAB 'POINT_1' ;
  207. LPOINT2 = 'EXIS' SUPTAB 'POINT_2' ;
  208. LPOINT3 = 'EXIS' SUPTAB 'POINT_3' ;
  209. 'SI' (EGA GDIME 3) ;
  210. 'SI' (LPOINT1 ET LPOINT2 ET LPOINT3) ;
  211. * LES 3 POINTS SONT DONNES
  212. 'SI' (LCHTRAN OU LOPERA) ;
  213. * 'SI' ON DONNE LES 3 POINTS PLUS L'UN DE CES 2 INDICES ON NE SAIT PAS QUOI FAIRE
  214. MESS 'ERREUR : DONNEES IMCOMPATIBLES. CONSULTEZ LA NOTICE;' ;
  215. QUIT CH_THETA ;
  216. 'SINON' ;
  217. * ON A UNIQUEMENT LES 3 POINTS DONC LE CAS EST 'TTD'
  218. BOOL.'TTD' = VRAI ;
  219. BOOL.'RTD' = FAUX ;
  220. BOOL.'RC' = FAUX ;
  221. PAXEZ1 = SUPTAB.'POINT_1';
  222. PAXEZ2 = SUPTAB.'POINT_2';
  223. PAXEZ3 = SUPTAB.'POINT_3';
  224. 'FINSI' ;
  225. 'SINON' ;
  226. * IL MANQUE DONC AU MOINS UN POINT
  227. 'SI' (LPOINT1 ET LPOINT2) ;
  228. * LES POINTS 1 ET 2 SONT DONNES
  229. BOOL.'TTD' = FAUX ;
  230. POINT_1 = SUPTAB.'POINT_1';
  231. POINT_2 = SUPTAB.'POINT_2';
  232. 'SI' (LCHTRAN ET LOPERA) ;
  233. * AVEC CES 2 INDICES EN PLUS ON EST DANS LE CAS 'RC'
  234. BOOL.'RTD' = FAUX ;
  235. BOOL.'RC' = VRAI ;
  236. OPER1 = MOT SUPTAB.'OPERATEUR' ;
  237. 'SINON' ;
  238. * IL MANQUE AU MOINS UN DES DEUX INDICES
  239. 'SI' (LCHTRAN OU LOPERA) ;
  240. * S'IL Y EN A UN DES DEUX ALORS IL MANQUE UNE INFO
  241. MESS 'ERREUR : LE NOM DE L''OPERATEUR ET LE CHPOINT QUI' ;
  242. MESS ' TRANSFORME LE COUDE EN TUYAUTERIE DROITE'
  243. MESS ' SONT TOUS DEUX OBLIGATOIRES.' ;
  244. QUIT CH_THETA ;
  245. 'SINON' ;
  246. * AUCUN DES DEUX INDICES N'EST DONNE DONC ON EST DANS LE CAS 'RTD'
  247. BOOL.'RTD' = VRAI ;
  248. BOOL.'COUDE' = FAUX ;
  249. 'FINSI' ;
  250. 'FINSI' ;
  251. 'SINON' ;
  252. * IL MANQUE DONC AU MOINS 2 POINTS
  253. 'SI' (LPOINT1 OU LPOINT2) ;
  254. * ON NE PEUT RIEN FAIRE AVEC UN SEUL DES DEUX POINTS
  255. MESS 'ERREUR : ON VEUT POINT_1 ET POINT_2 POUR CONSTITUER' ;
  256. MESS ' L''AXE PERPENDICULAIRE A LA SECTION FISSUREE.' ;
  257. QUIT CH_THETA ;
  258. 'SINON' ;
  259. * IL N'Y A AUCUN DES POINTS
  260. BOOL.'TTD' = FAUX ;
  261. BOOL.'RTD' = FAUX ;
  262. BOOL.'RC' = FAUX ;
  263. 'FINSI' ;
  264. 'FINSI' ;
  265. 'FINSI' ;
  266. * BOOLEEN POUR ROTATION (SINON C'EST FORCEMENT UNE TRANSLATION)
  267. BOOL.'ROTATION' = BOOL.'RTD' OU BOOL.'RC' ;
  268. 'SINON' ;
  269. * PAS EN 3D DONC AUCUN DES INDICES NE DOIT ETRE RENSEIGNE
  270. 'SI' (LCHTRAN OU LOPERA OU LPOINT1 OU LPOINT2 OU LPOINT3) ;
  271. MESS 'ERREUR : UN DES INDICES RENSEIGNES NECESSITE' ;
  272. MESS ' D''ETRE EN DIMENSION 3.' ;
  273. QUIT CH_THETA ;
  274. 'SINON' ;
  275. * AUCUN DES INDICES N'A ETE RENSEIGNE DONC ON EST DANS AUCUN DES CAS
  276. BOOL.'TTD' = FAUX ;
  277. BOOL.'RTD' = FAUX ;
  278. BOOL.'RC' = FAUX ;
  279. 'FINSI' ;
  280. 'FINSI' ;
  281.  
  282. * CAS 2D : VERIFICATIONS EN CAS DE FISSURE CIRCULAIRE
  283. 'SI' (EGA GDIME 2) ;
  284. * BOOLEEN POUR ROTATION (SINON C'EST FORCEMENT UNE TRANSLATION)
  285. BOOL.'ROTATION' = 'EXIS' SUPTAB 'PCENTRE' ;
  286. 'SI' BOOL.'ROTATION' ;
  287. PCENTRE = SUPTAB.'PCENTRE' ;
  288. 'FINSI' ;
  289. 'FINSI' ;
  290.  
  291.  
  292. * II - EXTRACTION DES MAILLAGES NECESSAIRES
  293. * -----------------------------------------
  294.  
  295. * CREATION DU MAILLAGE A BOUGER : MBOUGER
  296. MBOUGER = FRONFISS ;
  297. REPE IBOUG COUCHE ;
  298. MBOUGER = MAILLAGE ELEM 'APPUYE' 'LARGEMENT' MBOUGER ;
  299. FIN IBOUG ;
  300. * CREATION DU MAILLAGE OU THETA N'EST PAS NUL : MAIL
  301. MAIL = MAILLAGE ELEM 'APPUYE' 'LARGEMENT' MBOUGER ;
  302.  
  303. * CAS 2D OU 3D COQUE :
  304. * ********************
  305. 'SI' ((EGA GDIME 2) OU BOOL.'COQ') ;
  306. * ON DETERMINE LA DIRECTION DE PROPAGATION
  307. PFISS = FRONFISS ;
  308. FISS1 = CRACK ELEM 'APPUYE' 'LARGEMENT' PFISS ;
  309. NELEM = NBEL FISS1 ;
  310. * ON FAIT LA MOYENNE SUR LES DEUX POINTS QUI NE SONT PAS PFISS
  311. * POUR LE CAS OU LES DEUX LEVRES SONT MODELISEES
  312. VECTEUR = PFISS MOIN PFISS ;
  313. REPE IELEM NELEM ;
  314. SEG1 = FISS1 ELEM &IELEM ;
  315. PINIFIN = ('POIN' SEG1 'INIT') ET ('POIN' SEG1 'FINA') ;
  316. P1 = 'POIN' ('DIFF' PINIFIN ('MANU' 'POI1' PFISS)) 1 ;
  317. VEC1 = PFISS MOIN P1 ;
  318. VECTEUR = VECTEUR PLUS (VEC1 / (NORM VEC1)) ;
  319. FIN IELEM ;
  320. VECTEUR = VECTEUR / NELEM ;
  321. 'FINSI' ;
  322.  
  323.  
  324. * CAS 3D MASSIF :
  325. * ***************
  326. 'SI' ((EGA GDIME 3) ET (NON BOOL.'COQ')) ;
  327. * ON ORDONNE LE FRONT DE FISSURE
  328. FRONFISS = ORDO FRONFISS ;
  329. PINIT = FRONFISS 'POIN' 'INIT' ;
  330. PFINA = FRONFISS 'POIN' 'FINA' ;
  331. FDEBOUCH = NEG (NOEU PINIT) (NOEU PFINA) ;
  332. * DETERMINATION DES NOEUDS DU FRONT DANS L'ORDRE DE PARCOURT
  333. TPFISS = TABL ;
  334. REPE IELEM (NBEL FRONFISS) ;
  335. ELEM1 = FRONFISS ELEM &IELEM ;
  336. PENLE = 'MANU' 'POI1' (ELEM1 POIN 'FINA') ;
  337. PELEM1 = CHAN 'POI1' ELEM1 ;
  338. PAJOU = PELEM1 DIFF PENLE ;
  339. REPE IAJOU (NBNO PAJOU) ;
  340. TPFISS.((DIME TPFISS) + 1) = PAJOU 'POIN' &IAJOU ;
  341. FIN IAJOU ;
  342. FIN IELEM ;
  343. TPFISS.((DIME TPFISS) + 1) = PFINA ;
  344.  
  345. * DECOUPAGE EN TRANCHES DE MAIL ET MBOUGER
  346. TMAIL = COPI TPFISS ;
  347. N1 = (NBNO (FRONFISS ELEM 1)) - 1 ;
  348. REPE ICOUCH (COUCHE + 1) ;
  349. REPE IELEM (NBEL FRONFISS) ;
  350. I1 = (N1*(&IELEM - 1)) + 1 ;
  351. I2 = I1 + N1 ;
  352. SURF1 = TMAIL.I1 ;
  353. SURF2 = TMAIL.I2 ;
  354. VOL1 = MAILLAGE ELEM 'APPUYE' 'LARGEMENT' SURF1 ;
  355. VOL2 = MAILLAGE ELEM 'APPUYE' 'LARGEMENT' SURF2 ;
  356. VOL3 = VOL1 INTE VOL2 ;
  357. DVOL3 = ENVE VOL3 ;
  358. SURF1 = DVOL3 ELEM 'APPUYE' 'LARGEMENT' SURF1 ;
  359. SURF2 = DVOL3 ELEM 'APPUYE' 'LARGEMENT' SURF2 ;
  360. SURF12 = SURF1 INTE SURF2 ;
  361. SURF1 = SURF1 DIFF SURF12 ;
  362. SURF2 = SURF2 DIFF SURF12 ;
  363. TMAIL.I1 = SURF1 ;
  364. 'SI' (EGA N1 2) ;
  365. MIL1 = (CHAN 'POI1' VOL3) DIFF (CHAN 'POI1' (SURF1 ET SURF2)) ;
  366. TMAIL.(I1 + 1) = MIL1 ;
  367. 'FINSI' ;
  368. FIN IELEM ;
  369. TMAIL.(DIME TMAIL) = SURF2 ;
  370. 'SI' (EGA &ICOUCH COUCHE) ;
  371. TMBOUGER = COPI TMAIL ;
  372. 'FINSI' ;
  373. FIN ICOUCH ;
  374.  
  375. * DETERMINATION DU VECTEUR NORMAL AU PLAN DE FISSURE
  376. SEG1 = (CHAN 'LIGNE' CRACK) ELEM 'APPUYE' 'LARGEMENT' PINIT ;
  377. SEG1 = SEG1 DIFF (SEG1 INTE FRONFISS) ;
  378. PMOY = PINIT MOIN PINIT ;
  379. REPE IELEM (NBEL SEG1) ;
  380. ELEM1 = SEG1 ELEM &IELEM ;
  381. PINIFIN = ('POIN' ELEM1 'INIT') ET ('POIN' ELEM1 'FINA') ;
  382. P1 = 'POIN' ('DIFF' PINIFIN ('MANU' 'POI1' PINIT)) 1 ;
  383. PMOY = PMOY PLUS P1 ;
  384. FIN IELEM ;
  385. PMOY = PMOY / (NBEL SEG1) ;
  386. VEC1 = PINIT MOIN PMOY ;
  387. VEC2 = TPFISS.(2) MOIN TPFISS.(1) ;
  388. VNORM = VEC1 PVEC VEC2 ;
  389. VNORM = VNORM / (NORM VNORM) ;
  390.  
  391. * PASSAGE DU TUYAU EN PLAQUE
  392. 'SI' BOOL.'TTD' ;
  393. DEPL MAILLAGE 'COOR' 'CYLI' PAXEZ1 PAXEZ2 PAXEZ3 ;
  394. 'FINSI' ;
  395.  
  396. * DIRECTION D'AVANCEE DE FISSURE EN CHAQUE POINT DU FRONT
  397. TVECTEUR = TABL ;
  398. NPFISS = DIME TPFISS ;
  399. REPE IPFISS NPFISS ;
  400. * POUR UN FRONT DEBOUCHANT ON TRAITE LE PREMIER
  401. * ET LE DERNIER POINT HORS DE LA BOUCLE
  402. 'SI' (FDEBOUCH ET ((EGA &IPFISS 1) OU (EGA &IPFISS NPFISS))) ;
  403. ITER IPFISS ;
  404. 'FINSI' ;
  405. * POUR LE 1ER NOEUD ON FAIT ATTENTION DE PRENDRE LE BON NOEUD 1
  406. 'SI' ((NON FDEBOUCH) ET (EGA &IPFISS 1)) ;
  407. P1 = TPFISS.(NPFISS - 1) ;
  408. 'SINON' ;
  409. P1 = TPFISS.(&IPFISS - 1) ;
  410. 'FINSI' ;
  411. * POUR LE DERNIER NOEUD ON FAIT ATTENTION DE PRENDRE LE BON NOEUD 2
  412. 'SI' ((NON FDEBOUCH) ET (EGA &IPFISS NPFISS)) ;
  413. P2 = TPFISS.(2) ;
  414. 'SINON' ;
  415. P2 = TPFISS.(&IPFISS + 1) ;
  416. 'FINSI' ;
  417. * ON OBTIENT LE VECTEUR TANGENT AU FRONT
  418. VTANG = (P2 MOIN P1)/2. ;
  419. * LE PRODUIT VECTORIEL AVEC VNORM DONNE LA DIRECTION DE PROPAGATION
  420. * ON DIVISE LA NORME PAR 100 POUR AVOIR UN MOUVEMENT INFINITESIMAL
  421. TVECTEUR.&IPFISS = (VTANG PVEC VNORM)/100. ;
  422. FIN IPFISS ;
  423. 'SI' FDEBOUCH ;
  424. * POUR UN FRONT DEBOUCHANT ON DETERMINE LA DIRECTION DE PROPAGATION DIFFEREMMENT
  425. * POUR LE PREMIER ET LE DERNIER NOEUD
  426. LENT1 = LECT 1 NPFISS ;
  427. REPE IENT 2 ;
  428. * ON BOUCLE SUR LE PREMIER ET LE DERNIER NOEUD
  429. INOEU = EXTR LENT1 &IENT ;
  430. P1 = TPFISS.INOEU ;
  431. SEG1 = (CHAN 'LIGNE' CRACK) ELEM 'APPUYE' 'LARGEMENT' P1 ;
  432. SEG1 = SEG1 DIFF (SEG1 INTE FRONFISS) ;
  433. PMOY = P1 MOIN P1 ;
  434. REPE IELEM (NBEL SEG1) ;
  435. * ON BOUCLE SUR LE OU LES SEGMENTS APPUYES SUR P1 (1 OU 2 LEVRES DONNEES)
  436. ELEM1 = SEG1 ELEM &IELEM ;
  437. PINIFIN = (ELEM1 POIN 'INIT') ET (ELEM1 POIN 'FINA') ;
  438. 'SI' BOOL.'EL_LIN' ;
  439. * 'SI' LES ELEMENTS SONT LINEAIRES ON PREND LE DEUXIEME POINT DU SEGMENT
  440. P2 = ('DIFF' PINIFIN ('MANU' 'POI1' P1)) 'POIN' 1 ;
  441. 'SINON' ;
  442. * 'SI' LES ELEMENTS SONT QUADRATIQUES ON PREND LE POINT AU MILIEU DU SEGMENT
  443. P2 = ('DIFF' ('CHAN' 'POI1' ELEM1) PINIFIN) 'POIN' 1 ;
  444. 'FINSI' ;
  445. PMOY = PMOY PLUS P2 ;
  446. FIN IELEM ;
  447. PMOY = PMOY / (NBEL SEG1) ;
  448. TVECTEUR.INOEU = (P1 MOIN PMOY) / 100. ;
  449. FIN IENT ;
  450. 'FINSI' ;
  451.  
  452. * 'SI' LE FRONT EST FERME ON ENLEVE LES DERNIERS INDICES DES TABLEAUX
  453. * CAR ILS SONT IDENTIQUES AUX PREMIERS
  454. 'SI' (NON FDEBOUCH) ;
  455. OTER TPFISS NPFISS ;
  456. OTER TMAIL NPFISS ;
  457. OTER TMBOUGER NPFISS ;
  458. 'FINSI' ;
  459.  
  460. * ON AJOUTE LES MAILLAGES GLOBAUX
  461. NPFISS = DIME TPFISS ;
  462. TPFISS.(NPFISS + 1) = FRONFISS ;
  463. TMAIL.(NPFISS + 1) = MAIL ;
  464. TMBOUGER.(NPFISS + 1) = MBOUGER ;
  465.  
  466. * PUIS LE CHAMP GLOBAL DE DIRECTION DE PROPAGATION
  467. LNORM = PROG ;
  468. * ON BOUCLE SUR LES NOEUDS POUR DETERMINER LE MIN DES NORMES DES VECTEURS
  469. REPE IPFISS NPFISS ;
  470. LNORM = LNORM ET (PROG (NORM TVECTEUR.&IPFISS)) ;
  471. FIN IPFISS ;
  472. MINNORM = MINI LNORM ;
  473. * PUIS ON REBOUCLE POUR CREER LE CHPO DE DIRECTION
  474. GDIR = 'VIDE' 'CHPOINT'/'DIFFUS' ;
  475. REPE IPFISS NPFISS ;
  476. N1 = MINNORM / (EXTR LNORM &IPFISS) ;
  477. X Y Z = COOR (TVECTEUR.&IPFISS * N1) ;
  478. CHPO1 = MANU 'CHPO' TMAIL.&IPFISS MUI (PROG X Y Z) 'NATURE' 'DIFFUS' ;
  479. GDIR = GDIR + CHPO1 ;
  480. FIN IPFISS ;
  481. TVECTEUR.(NPFISS + 1) = GDIR ;
  482.  
  483. * ON REPASSE LA PLAQUE EN TUYAU
  484. 'SI' BOOL.'TTD' ;
  485. DEPL MAILLAGE 'COOR' 'CART' ;
  486. 'FINSI' ;
  487.  
  488. * ON EN PROFITE POUR CREER LA TABLE DES DIRECTIONS
  489. OBJUTI.'DIRECTION' = TABL ;
  490. 'FINSI' ;
  491.  
  492.  
  493. * III - CREATION DES CHAMPS THETA
  494. * -------------------------------
  495.  
  496. * CONFIGURATION INITIALE
  497. CONF0 = FORM ;
  498.  
  499. * NOMBRE DE POINTS DU FRONT (+ 1 EN 3D MASSIF)
  500. 'SI' (EGA (TYPE FRONFISS) 'MAILLAGE') ;
  501. PFRONFISS = CHAN 'POI1' FRONFISS ;
  502. 'SINON' ;
  503. PFRONFISS = MANU 'POI1' FRONFISS ;
  504. 'FINSI' ;
  505. NP = NBNO PFRONFISS ;
  506. 'SI' ((EGA GDIME 3) ET (NON BOOL.'COQ')) ;
  507. NP = NP + 1 ;
  508. 'FINSI' ;
  509.  
  510. * BOUCLE SUR LES POINTS DU FRONT
  511. TABTHET = TABL ;
  512. 'REPE' IPOIN NP ;
  513. 'SI' ((EGA GDIME 3) ET (NON BOOL.'COQ')) ;
  514. * EN 3D MASSIF IL FAUT REDEFINIR CES MAILLAGES
  515. MAIL = TMAIL.&IPOIN ;
  516. PFISS = TPFISS.&IPOIN ;
  517. MBOUGER = TMBOUGER.&IPOIN ;
  518. VECTEUR = TVECTEUR.&IPOIN ;
  519. 'FINSI' ;
  520.  
  521. * CHAMP THETA INITIALISE A 0
  522. THETA = MANU 'CHPO' MAIL MUI (PROG GDIME * 0.) 'NATURE' 'DIFFUS' ;
  523.  
  524.  
  525. * ACCROISSEMENT DE L'AIRE DE FISSURE :
  526. * ************************************
  527. 'SI' (EGA GDIME 2) ;
  528. 'SI' (EGA OBJUTI.'MODE' 'AXIS') ;
  529. XAIRE = 2.*PI*(COOR 1 PFISS) ;
  530. 'SINON' ;
  531. XAIRE = 1. ;
  532. 'FINSI' ;
  533. 'SINON' ;
  534. 'SI' BOOL.'COQ' ;
  535. XAIRE = SUPTAB.'EPAISSEUR' ;
  536. 'SINON' ;
  537. PLFISS = CRACK ELEM 'APPUY' 'LARGEMENT' MBOUGER ;
  538. MODFIS = MODE PLFISS 'MECANIQUE' 'ELASTIQUE' ;
  539. CHFIS1 = MANU 'CHPO' CRACK 1 'SCAL' 1. ;
  540. CHFIS1 = CHAN 'CHAM' CHFIS1 MODFIS 'STRESSES' ;
  541. XAIREI = INTG CHFIS1 MODFIS ;
  542. 'SI' (EGA NB_LEVRES 2) ;
  543. XAIREI = XAIREI / 2. ;
  544. 'FINSI' ;
  545. 'FINSI' ;
  546. 'FINSI' ;
  547.  
  548.  
  549. * CALCUL DE THETA :
  550. * *****************
  551. X0 = COOR 1 MAIL ;
  552. Y0 = COOR 2 MAIL ;
  553. 'SI' (EGA GDIME 3) ;
  554. Z0 = COOR 3 MAIL ;
  555. 'FINSI' ;
  556. 'SI' BOOL.'ROTATION' ;
  557. * ROTATION DE LA FISSURE AUTOUR DU POINT OU DE L'AXE DONNE
  558. ANG1 = .01 ;
  559. 'SI' (EGA GDIME 2) ;
  560. DEPL 'TOUR' MBOUGER ANG1 PCENTRE ;
  561. X1 Y1 = COOR MAIL ;
  562. DEPL 'TOUR' MBOUGER (0. - ANG1) PCENTRE ;
  563. THETAR = (NOMC MU1 (X1 - X0)) + (NOMC MU2 (Y1 - Y0)) ;
  564. X1 = EXTR THETAR MU1 PFISS ;
  565. Y1 = EXTR THETAR MU2 PFISS ;
  566. NOR1 = (NORM (X1 Y1)) + 1.E-20 ;
  567. THETAR = THETAR / NOR1 ;
  568. 'SINON' ;
  569. 'SI' BOOL.'RC' ;
  570. 'DEPL' OPER1 MAILLAGE SUPTAB.'CHPOINT_TRANSFORMATION' ;
  571. 'FINSI' ;
  572. 'DEPL' 'TOUR' MBOUGER ANG1 POINT_1 POINT_2 ;
  573. 'SI' BOOL.'RC' ;
  574. 'DEPL' OPER1 MAILLAGE (-1.*(SUPTAB.'CHPOINT_TRANSFORMATION')) ;
  575. 'FINSI' ;
  576. X1 Y1 Z1 = COOR MAIL ;
  577. 'SI' (NON BOOL.'COQ') ;
  578. XAIREF = INTG CHFIS1 MODFIS ;
  579. 'SI' (EGA NB_LEVRES 2) ;
  580. XAIREF = XAIREF / 2. ;
  581. 'FINSI' ;
  582. 'FINSI' ;
  583. 'SI' BOOL.'RC' ;
  584. 'DEPL' OPER1 MAILLAGE SUPTAB.'CHPOINT_TRANSFORMATION' ;
  585. 'FINSI' ;
  586. 'DEPL' 'TOUR' MBOUGER ANG1 POINT_1 POINT_2 ;
  587. 'SI' BOOL.'RC' ;
  588. 'DEPL' OPER1 MAILLAGE (-1.*(SUPTAB.'CHPOINT_TRANSFORMATION')) ;
  589. 'FINSI' ;
  590. THETAR = (NOMC MU1 (X1 - X0)) + (NOMC MU2 (Y1 - Y0)) +
  591. (NOMC MU3 (Z1 - Z0)) ;
  592. 'SI' BOOL.'COQ' ;
  593. X1 = EXTR THETAR MU1 PFISS ;
  594. Y1 = EXTR THETAR MU2 PFISS ;
  595. Z1 = EXTR THETAR MU3 PFISS ;
  596. NOR1 = (NORM (X1 Y1 Z1)) + 1.E-20 ;
  597. THETAR = THETAR / NOR1 ;
  598. 'SINON' ;
  599. XAIRE = XAIREF - XAIREI ;
  600. 'FINSI' ;
  601. 'FINSI' ;
  602. THETA = (THETAR * XMULT / XAIRE) + THETA ;
  603. 'SINON' ;
  604. * TRANSLATION DE LA FISSURE
  605. 'SI' BOOL.'TTD' ;
  606. DEPL MAILLAGE 'COOR' 'CYLI' PAXEZ1 PAXEZ2 PAXEZ3 ;
  607. 'FINSI' ;
  608. DEPL 'PLUS' MBOUGER VECTEUR ;
  609. 'SI' BOOL.'TTD' ;
  610. DEPL MAILLAGE 'COOR' 'CART' ;
  611. 'FINSI' ;
  612. 'SI' (EGA GDIME 2) ;
  613. X1 Y1 = COOR MAIL ;
  614. 'SINON' ;
  615. X1 Y1 Z1 = COOR MAIL ;
  616. 'SI' (NON BOOL.'COQ') ;
  617. XAIREF = INTG CHFIS1 MODFIS ;
  618. 'SI' (EGA NB_LEVRES 2) ;
  619. XAIREF = XAIREF / 2. ;
  620. 'FINSI' ;
  621. 'FINSI' ;
  622. 'FINSI' ;
  623. 'SI' BOOL.'TTD' ;
  624. DEPL MAILLAGE 'COOR' 'CYLI' PAXEZ1 PAXEZ2 PAXEZ3 ;
  625. 'FINSI' ;
  626. DEPL 'MOIN' MBOUGER VECTEUR ;
  627. 'SI' BOOL.'TTD' ;
  628. DEPL MAILLAGE 'COOR' 'CART' ;
  629. 'FINSI' ;
  630. THETAT = (NOMC MU1 (X1 - X0)) + (NOMC MU2 (Y1 - Y0)) ;
  631. 'SI' (EGA GDIME 3) ;
  632. THETAT = THETAT + (NOMC MU3 (Z1 - Z0)) ;
  633. 'SI' (NON BOOL.'COQ') ;
  634. XAIRE = XAIREF - XAIREI ;
  635. 'FINSI' ;
  636. 'FINSI' ;
  637. THETA = (THETAT * XMULT / XAIRE) + THETA ;
  638. 'FINSI' ;
  639.  
  640. * STOCKAGE DES DONNEES
  641. 'SI' ((EGA GDIME 2) OU BOOL.'COQ') ;
  642. OBJUTI.'DIRECTION' = VECTEUR ;
  643. 'SINON' ;
  644. 'SI' (&IPOIN < NP) ;
  645. TABTHET.(TPFISS.&IPOIN) = THETA ;
  646. OBJUTI.'DIRECTION'.(TPFISS.&IPOIN) = VECTEUR ;
  647. 'SINON' ;
  648. TABTHET.'GLOBAL' = THETA ;
  649. OBJUTI.'DIRECTION'.'GLOBAL' = VECTEUR ;
  650. 'FINSI' ;
  651. 'FINSI' ;
  652. FIN IPOIN ;
  653.  
  654. * ON RENOMME L'OBJET TABLE EN 3D MASSIF
  655. 'SI' ((EGA GDIME 3) ET (NON BOOL.'COQ')) ;
  656. THETA = TABTHET ;
  657. 'FINSI'
  658.  
  659. * ON REPREND LA CONFIGURATION INITIALE DANS LE CAS OU ELLE AURAIT ETE
  660. * MODIFIEE PAR DEPL
  661. FORM CONF0 ;
  662.  
  663.  
  664. * IV - FINITIONS
  665. * --------------
  666.  
  667. * ON S'ASSURE QUE LES CHPOINTS SONT COMPATIBLES
  668. 'SI' (EGA ('TYPE' THETA) 'CHPOINT') ;
  669. THETA = CFND THETA OBJUTI.'MOD_MEC' ;
  670. 'SINON' ;
  671. 'REPE' IPOIN (NP - 1) ;
  672. THETA.(TPFISS.&IPOIN) = CFND THETA.(TPFISS.&IPOIN) OBJUTI.'MOD_MEC' ;
  673. FIN IPOIN ;
  674. THETA.'GLOBAL' = CFND THETA.'GLOBAL' OBJUTI.'MOD_MEC' ;
  675. 'FINSI' ;
  676.  
  677. * STOCKAGE DANS SUPTAB
  678. SUPTAB.RESULT = THETA ;
  679. BOOL.RESULT = VRAI ;
  680.  
  681. FINSI ;
  682.  
  683.  
  684. * =============================================================================
  685. * PARTIE 2 : EXTRACTION DE LA DIRECTION DE PROPAGATION
  686. * ----------------------------------------------------
  687.  
  688. SI DIRECTION ;
  689. * ON EXTRAIT LA DIRECTION DE PROPAGATION ET LES NORMALES DU CHAMP THETA
  690. CHTHETA = SUPTAB.'CHAMP_THETA' ;
  691. 'SI' (NEG (TYPE CHTHETA) 'CHPOINT') ;
  692. CHTHETA = CHTHETA.'GLOBAL' ;
  693. 'FINSI' ;
  694. DIR1 = REDU CHTHETA (SUPTAB.'FRONT_FISSURE') ;
  695. NDIR1 = (PSCA DIR1 DIR1 MUI MUI)**0.5 ;
  696. DIR1 = DIR1 / NDIR1 ;
  697. 'SI' (NON BOOL.'COQ') ;
  698. 'SI' ('EXIS' SUPTAB 'LEVRE_SUPERIEURE') ;
  699. F1 = PRES 'MASS' MOD_MEC SUPTAB.'LEVRE_SUPERIEURE' 1. ;
  700. 'SINON' ;
  701. F1 = PRES 'MASS' MOD_MEC SUPTAB.'LEVRE_INFERIEURE' -1. ;
  702. 'FINSI' ;
  703. DIR2 = REDU F1 (SUPTAB.'FRONT_FISSURE') ;
  704. DIR2 = EXCO DIR2 MFI MUI 'NOID' ;
  705. NDIR2 = (PSCA DIR2 DIR2 MUI MUI)**0.5 ;
  706. DIR2 = DIR2 / NDIR2 ;
  707. 'SI' (EGA GDIME 3) ;
  708. DIR3 = PVEC DIR1 DIR2 MUI MUI MUI ;
  709. 'FINSI' ;
  710. 'FINSI' ;
  711. * ON STOCKE LES DIRECTIONS DANS OBJUTI
  712. OBJUTI.'DIRECTION1' = DIR1 ;
  713. 'SI' (NON BOOL.'COQ') ;
  714. OBJUTI.'DIRECTION2' = DIR2 ;
  715. 'SI' (EGA GDIME 3) ;
  716. OBJUTI.'DIRECTION3' = DIR3 ;
  717. 'FINSI' ;
  718. 'FINSI' ;
  719. FINSI ;
  720.  
  721.  
  722. * =============================================================================
  723. * PARTIE 3 : APPEL RECURSIF POUR LE CALCUL DU CHAMP PI
  724. * ----------------------------------------------------
  725.  
  726. * 'SI' L'OBJECTIF EST 'DJ/DA' ET QU'ON A PAS ENCORE CALCULE LE CHAMP PI, ALORS
  727. * ON RELANCE CH_THETA SUR UNE COPIE DE SUPTAB AVEC LES MODIFICATIONS
  728. * NECESSAIRES, PUIS ON EXTRAIT L'INDICE 'CHAMP_PI' DU RESULTAT
  729. SI (BOOL.'DJ/DA' ET (NON BOOL.'CHAMP_PI')) ;
  730. SUPTAB2 = COPI SUPTAB ;
  731. 'SI' (NON ('EXIS' SUPTAB 'FRONT_FISSURE_2')) ;
  732. SUPTAB2.'COUCHE' = (SUPTAB.'COUCHE') - 1 ;
  733. 'SINON' ;
  734. SUPTAB2.'FRONT_FISSURE' = SUPTAB.'FRONT_FISSURE_2' ;
  735. SUPTAB2.'FISSURE' = SUPTAB.'FISSURE_2' ;
  736. 'FINSI' ;
  737. CH_THETA SUPTAB2 OBJUTI BOOL ;
  738. SUPTAB.'CHAMP_PI' = SUPTAB2.'CHAMP_PI' ;
  739. FINSI ;
  740.  
  741. FINP ;
  742.  
  743.  
  744.  
  745.  
  746.  

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