Télécharger ch_theta.procedur

Retour à la liste

Numérotation des lignes :

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

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