Télécharger ch_theta.procedur

Retour à la liste

Numérotation des lignes :

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

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