Télécharger ch_theta.procedur

Retour à la liste

Numérotation des lignes :

  1. * CH_THETA PROCEDUR FD218221 16/10/24 21:15:00 9134
  2. 'DEBPROC' CH_THETA SUPTAB*TABLE ;
  3. *|=====================================================================|
  4. *| |
  5. *| << OBJET >> : |
  6. *| |
  7. *| Procedure determinant un champ/point de type THETA, c'est-a-dire |
  8. *| un champ/point dont le norme est constant a l'interieur d'une |
  9. *| courronne entourant le front d'une fissure, zero a l'exterieur de |
  10. *| cette courronne. Le vecteur represente par le champ THETA indique |
  11. *| la direction de propagation eventuelle de la fissure. |
  12. *| |
  13. *| << ENTREE >> : |
  14. *| |
  15. *| SUPTAB = Objet de type TABLE dont les indices sont des |
  16. *| objets de type MOT (a ecrire en toutes lettres) : |
  17. *| |
  18. *| ARGUMENTS OBLIGATOIRES DANS TOUS LES CAS |
  19. *| °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° |
  20. *| |
  21. *| SUPTAB.'MAILLAGE' = Objet de type MAILLAGE representant soit |
  22. *| la structure totale etudiee (maillage |
  23. *| utilise dans l'analyse par elements finis, |
  24. *| soit, pour reduire le temps de calcul, le |
  25. *| maillage entourant le plus grand des contours |
  26. *| qu'on a defini pour calculer le champ THETA. |
  27. *| SUPTAB.'FISSURE' = Objet de type MAILLAGE donnant toutes les deux |
  28. *| levres d'une fissure si elle est complete (la |
  29. *| fissure presente des noeuds doubles), une |
  30. *| seule levre si l'autre levre n'est pas maillée |
  31. *| en raison, par example, de la symetrie du |
  32. *| probleme. |
  33. *| SUPTAB.'FRONT_FISSURE' = Objet de type POINT (representant la |
  34. *| pointe de la fissure) si la fissure est |
  35. *| une ligne, de type MAILLAGE (representant |
  36. *| le front de la fissure) si la fissure est |
  37. *| sur un plan en 3D. |
  38. *| SUPTAB.'COUCHE' = Objet de type ENTIER representant le nombre |
  39. *| de couches d'elements (autour du point de |
  40. *| fissure) qui se deplacent pour simuler la |
  41. *| propagtion de la fissure. |
  42. *| |
  43. *| CAS D'UNE FISSURE CIRCULAIRE DANS UNE GEOMETRIE PLANE |
  44. *| °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° |
  45. *| |
  46. *| SUPTAB.'PCENTRE' = centre de la fissure circulaire |
  47. *| |
  48. *| |
  49. *| CAS OU L EXTENSION DE FISSURE CORRESPOND A UNE |
  50. *| °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° |
  51. *| SIMPLE TRANSLATION DANS UN TUYAUTERIE DROITE (3D) |
  52. *| °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° |
  53. *| |
  54. *| Dans ce cas on effectue dans la procedure une transformation de |
  55. *| tuyau en plaque en passant au systeme de coordonnees cylindriques. |
  56. *| Il est alors necessaire de fournir : |
  57. *| |
  58. *| SUPTAB.'POINT_1' = centre du systeme de coordonnees |
  59. *| SUPTAB.'POINT_2' = POINT tel que l'axe defini par POINT_1 |
  60. *| vers POINT_2 soit l'axe Z poisitif |
  61. *| SUPTAB.'POINT_3' = POINT tel que le plan defini par les 3 points |
  62. *| POINT_1 POINT_2 POINT_3 donne l'angle theta nul |
  63. *| |
  64. *| CAS OU L EXTENSION DE FISSURE NE CORRESPOND PAS |
  65. *| °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° |
  66. *| A UNE SIMPLE TRANSLATION |
  67. *| °°°°°°°°°°°°°°°°°°°°°°°° |
  68. *| |
  69. *| A) Fissure dans un tuyauterie droite (3D, Rotation) |
  70. *| |
  71. *| SUPTAB.'POINT_1' = Objet de type POINT |
  72. *| SUPTAB.'POINT_2' = Objet de type POINT qui, avec le point POINT_1, |
  73. *| constitue l'axe perpendiculaire a la section |
  74. *| fissuree. |
  75. *| |
  76. *| B) Fissure dans un coude (3D, rotation + transformation) |
  77. *| |
  78. *| Outre les deux points SUPTAB.'POINT_1' et SUPTAB.'POINT_2' |
  79. *| definis en haut on donne encore : |
  80. *| SUPTAB.'CHPOINT_TRANSFORMATION' = Objet de type CHPOINT utilise |
  81. *| pour transformer une coude en |
  82. *| un tuyauterie droite. |
  83. *| |
  84. *| SUPTAB.'OPERATEUR' = Objet de type MOT valant 'PLUS' ou 'MOIN' |
  85. *| pour indiquer l'operateur PLUS ou MOIN a |
  86. *| utiliser si l'on veut transformer la coude |
  87. *| en un tuyauterie droite. |
  88. *| |
  89. *| EN CAS DES ELEMENTS DE COQUE |
  90. *| °°°°°°°°°°°°°°°°°°°°°°°°°°°° |
  91. *| |
  92. *| SUPTAB.'EPAISSEUR' = Objet de type FLOTTANT donnant l'épaisseur |
  93. *| de la coque a la pointe de la fissure |
  94. *| |
  95. *| |
  96. *| << SORTIE >> : |
  97. *| |
  98. *| TETA = Objet de type : |
  99. *| |
  100. *| - TABLE INDICEE PAR DES OBJETS DE TYPE POINT CONTENANT |
  101. *| DES ELEMENTS DE TYPE CHPOINT DANS LE CAS 3 DIMENSIONS. |
  102. *| CHAQUE ELEMENT CONTIENT LE CHAMP THETA AU NOEUD DU |
  103. *| FRONT DE COORDONNEES CELLES DU POINT P : TETA.P. ELLE |
  104. *| EST EGALEMENT INDICEE PAR LE MOT 'GLOBAL' POUR DONNER |
  105. *| LE CHAMP THETA GLOBAL LE LONG DE TOUT FRONT DE LA FISSURE |
  106. *| - ELEMENT DE TYPE CHPOINT CONTENANT LE CHAMP THETA EN 2 |
  107. *| DIMENSIONS (OU EN 3 DIMENSIONS AVEC DES ELEMENTS DE |
  108. *| COQUE MINCE) A LA POINTE DE FISSURE |
  109. *| |
  110. *|=====================================================================|
  111. *-- ICOQU = VRAI ==> Elements de coque
  112. *-- ILIN = VRAI ==> Elements lineaires
  113. *-- IQUA = VRAI ==> Elements nonlineaires
  114. &DIME = 'VALEUR' DIME ; &MODE = 'VALEUR' MODE ;
  115. &ELEM = 'VALEUR' ELEM ; MOTAX = 'MOT' AXIS ;
  116. ITRAN = VRAI; IROTA = FAUX; VALPI = PI;
  117. *------------------------------------------------*
  118. *-------- TEST DE COMPABILITE DES DONNEES -------*
  119. *------------------------------------------------*
  120. 'SI' ('EGA' &ELEM 'UUUU');
  121. 'MESS' 'ERREUR : TYPE D ELEMENTS NON CONNU. UTILISEZ';
  122. 'MESS' ' L OPERATEUR OPTI POUR LE DECLARER';
  123. 'QUITTER' CH_THETA;
  124. 'FINSI';
  125. 'SI' ('NON' ('EXIST' SUPTAB 'MAILLAGE'));
  126. 'MESS' 'ERREUR : ON N A PAS TROUVE DANS LA'
  127. 'MESS' ' TABLE L OBJET MAILLAGE';
  128. 'QUITTER' CH_THETA;
  129. 'SINON';
  130. MAILLAGE = SUPTAB.'MAILLAGE' ;
  131. NB1 = 'NBNO' ('CHAN' MAILLAGE 'POI1');
  132. 'FINSI';
  133. M_FISS = 'ELEM' MAILLAGE 'APPU' 'LARG' SUPTAB.'FRONT_FISSURE';
  134. NBNO1 = 'NBNO' ('ELEM' (CHAN 'LIGNE' M_FISS) 1);
  135. ILIN = 'EGA' NBNO1 2; IQUA = 'EGA' NBNO1 3;
  136. IPLAN = ('EGA' &ELEM 'TRI3') 'OU' ('EGA' &ELEM 'QUA4') 'OU'
  137. ('EGA' &ELEM 'TRI6') 'OU' ('EGA' &ELEM 'QUA8');
  138. ICOQU = (&DIME 'EGA' 3) 'ET' IPLAN;
  139. ****
  140. 'SI' (ICOQU 'ET' ('NON' ('EXIST' SUPTAB 'EPAISSEUR')));
  141. 'MESS' 'ERREUR : L EPAISSEUR DE LA COQUE N EST PAS DONNEE';
  142. 'QUITTER' CH_THETA;
  143. 'FINSI';
  144. ****
  145. 'SI' ('NON' ('EXIST' SUPTAB 'FISSURE'));
  146. 'MESS' 'ERREUR : LA FISSURE DU PROBLEME N EST PAS DONNEE';
  147. 'QUITTER' CH_THETA;
  148. 'SINON';
  149. FISSURE = SUPTAB.'FISSURE';
  150. 'SI' ('NEG' ('TYPE' FISSURE) 'MAILLAGE');
  151. 'MESS' 'ERREUR : LA FISSURE DOIT ETRE UN OBJET DE TYPE MAILLAGE';
  152. 'QUITTER' CH_THETA;
  153. 'FINSI';
  154. NB2 = 'NBNO' ('CHAN' (FISSURE 'ET' MAILLAGE) 'POI1');
  155. 'SI' ('NEG' NB1 NB2);
  156. 'MESS' 'ERREUR : IL Y A DES NOEUDS DOUBLES ENTRE';
  157. 'MESS' ' LE MAILLAGE ET LA FISSURE';
  158. 'QUITTER' CH_THETA;
  159. 'FINSI';
  160. LMOTS = 'ELEM' FISSURE 'TYPE'; ILIGN = FAUX;
  161. 'SI' ('EGA' ('DIME' LMOTS) 1);
  162. MOT1 = 'EXTR' LMOTS 1;
  163. ILIGN = ('EGA' MOT1 'SEG2') 'OU' ('EGA' MOT1 'SEG3');
  164. 'FINSI';
  165. 'SI' (('EGA' &DIME 3) 'ET' ('NON' ICOQU));
  166. 'SI' ILIGN;
  167. 'MESS' 'ERREUR : EN 3D AVEC ELEMENTS MASSIFS LA';
  168. 'MESS' ' FISSURE DOIT ETRE UNE SURFACE';
  169. 'QUITTER' CH_THETA;
  170. 'FINSI';
  171. 'FINSI';
  172. 'SI' ((&DIME 'EGA' 2) 'OU' ICOQU);
  173. 'SI' ('NON' ILIGN);
  174. 'MESS' 'ERREUR : EN 2D OU ELEMENTS EN COQUE MINCE';
  175. 'MESS' ' LA FISSURE DOIT ETRE UNE LIGNE';
  176. 'QUITTER' CH_THETA;
  177. 'FINSI';
  178. 'FINSI';
  179. 'FINSI';
  180. ****
  181. 'SI' ('NON' ('EXIST' SUPTAB 'FRONT_FISSURE'));
  182. 'MESS' 'ERREUR : LE FRONT DE LA FISSURE N EST PAS DONNE';
  183. 'QUITTER' CH_THETA;
  184. 'FINSI';
  185. ****
  186. NB2 = 'NBNO' ('CHAN' (SUPTAB.'FRONT_FISSURE' 'ET' MAILLAGE) 'POI1');
  187. 'SI' ('NEG' NB1 NB2);
  188. 'MESS' 'ERREUR : IL Y A DES NOEUDS DOUBLES ENTRE LE';
  189. 'MESS' ' MAILLAGE ET LE FRONT DE LA FISSURE';
  190. 'QUITTER' CH_THETA;
  191. 'FINSI';
  192. IFOND = 'TYPE' SUPTAB.'FRONT_FISSURE';
  193. 'SI' ((&DIME 'EGA' 3) 'ET' ('NON' ICOQU));
  194. 'SI' ('EGA' IFOND 'POINT ');
  195. 'MESS' 'ERREUR : EN 3D AVEC ELEMENTS MASSIFS LE FRONT';
  196. 'MESS' ' DE LA FISSURE DOIT ETRE UNE LIGNE';
  197. 'QUITTER' CH_THETA;
  198. 'FINSI';
  199. 'FINSI';
  200. 'SI' ((&DIME 'EGA' 2) 'OU' ICOQU);
  201. 'SI' ('NON' ('EGA' IFOND 'POINT '));
  202. 'MESS' 'ERREUR : EN 2D OU ELEMENTS EN COQUE MINCE LE';
  203. 'MESS' ' FOND DE LA FISSURE DOIT ETRE UN POINT';
  204. 'QUITTER' CH_THETA;
  205. 'FINSI';
  206. 'FINSI';
  207. NB1 = 'NBNO' ('CHAN' FISSURE 'POI1');
  208. NB2 = 'NBNO' ('CHAN' (SUPTAB.'FRONT_FISSURE' 'ET' FISSURE) 'POI1');
  209. 'SI' ('NEG' NB1 NB2);
  210. 'MESS' 'ERREUR : IL Y A DES NOEUDS DOUBLES ENTRE LE FRONT';
  211. 'MESS' ' DE LA FISSURE ET LA FISSURE ELLE MEME';
  212. 'QUITTER' CH_THETA;
  213. 'FINSI';
  214. ****
  215. 'SI' ('NON' ('EXIST' SUPTAB 'COUCHE'));
  216. 'MESS' 'ERREUR : ON VEUT LE NOMBRE DE COUCHES D ELEMENTS';
  217. 'MESS' ' AUTOUR DE LA FISSURE QUI SE DEPLACE';
  218. 'MESS' ' POUR SIMULER LA PROPAGATION DE LA FISSURE';
  219. 'QUITTER' CH_THETA;
  220. 'SINON';
  221. COUCHE = SUPTAB.'COUCHE' ;
  222. 'FINSI';
  223. ****
  224. ICOUDE = FAUX;
  225. ITUYAU = FAUX;
  226. 'SI' (('EXISTE' SUPTAB 'CHPOINT_TRANSFORMATION') 'OU'
  227. ('EXISTE' SUPTAB 'OPERATEUR'));
  228. ICOUDE = VRAI;
  229. 'SI' ('NON' ('EXIST' SUPTAB 'CHPOINT_TRANSFORMATION'));
  230. 'MESS' 'ERREUR : ON VEUT LE CHAMP/POINT QUI TRANSFORME';
  231. 'MESS' ' LA COUDE EN UN TUYAUTERIE DROITE.';
  232. 'QUITTER' CH_THETA;
  233. 'FINSI';
  234. 'SI' ('NON' ('EXIST' SUPTAB 'OPERATEUR'));
  235. 'MESS' 'ERREUR : ON VEUT LE NOM DE L OPERATEUR A UTILISER';
  236. 'MESS' ' POUR LA TRANSFORMATION DE LA COUDE. ';
  237. 'QUITTER' CH_THETA;
  238. 'SINON';
  239. OPER1 = 'MOT' SUPTAB.'OPERATEUR';
  240. 'FINSI';
  241. 'FINSI';
  242. ****
  243. 'SI' ('NON' ('EXISTE' SUPTAB 'POINT_3'));
  244. 'SI' (('EXISTE' SUPTAB 'POINT_1') 'OU'
  245. ('EXISTE' SUPTAB 'POINT_2') 'OU' ICOUDE);
  246. 'SI' ('NEG' &DIME 3);
  247. 'MESS' 'ERREUR : DONNEES IMCOMPATIBLES. CONSULTEZ LA NOTICE';
  248. 'QUITTER' CH_THETA;
  249. 'FINSI';
  250. ITRAN = FAUX; IROTA = VRAI;
  251. 'SI' (('NON' ('EXIST' SUPTAB 'POINT_1')) 'OU'
  252. ('NON' ('EXIST' SUPTAB 'POINT_2')));
  253. 'MESS' 'ERREUR : ON VEUT LES POINTS POUR CONSTITUER L AXE';
  254. 'MESS' ' PERPENDICULAIRE A LA SECTION FISSUREE.';
  255. 'QUITTER' CH_THETA;
  256. 'SINON';
  257. POINT_1 = SUPTAB.'POINT_1';
  258. POINT_2 = SUPTAB.'POINT_2';
  259. 'FINSI';
  260. 'FINSI';
  261. 'FINSI';
  262. ****
  263. 'SI' ('EXISTE' SUPTAB 'POINT_3');
  264. 'SI' (('NON' ('EXIST' SUPTAB 'POINT_1')) 'OU'
  265. ('NON' ('EXIST' SUPTAB 'POINT_2')));
  266. 'MESS' 'ERREUR : ON VEUT LES POINTS POUR CONSTITUER L AXE';
  267. 'MESS' ' PERPENDICULAIRE A LA SECTION FISSUREE.';
  268. 'QUITTER' CH_THETA;
  269. 'SINON';
  270. 'SI' ('NEG' &DIME 3);
  271. 'MESS' 'ERREUR : DONNEES IMCOMPATIBLES. CONSULTEZ LA NOTICE';
  272. 'QUITTER' CH_THETA;
  273. 'FINSI';
  274. ITUYAU = VRAI;
  275. PAXEZ1 = SUPTAB.'POINT_1';
  276. PAXEZ2 = SUPTAB.'POINT_2';
  277. PAXEZ3 = SUPTAB.'POINT_3';
  278. 'FINSI';
  279. 'FINSI';
  280. ****
  281. 'SI' ('EXISTE' SUPTAB 'PCENTRE');
  282. 'SI' ('NEG' &DIME 2);
  283. 'MESS' 'ERREUR : DONNEES IMCOMPATIBLES. CONSULTEZ LA NOTICE';
  284. 'QUITTER' CH_THETA;
  285. 'FINSI';
  286. ITRAN = FAUX; IROTA = VRAI;
  287. PCENTRE = SUPTAB.'PCENTRE';
  288. 'FINSI';
  289. *------------------------------------------------*
  290. *--- QUELQUES MOTS POUR SIMPLIFIER L'ECRITURE ---*
  291. *------------------------------------------------*
  292. E = 'MOT' 'EXCO'; C = 'MOT' 'CHAI'; S = 'MOT' 'SCAL';
  293. MU1 = 'MOT' 'UX'; MU2 = 'MOT' 'UY'; MU3 = 'MOT' 'UZ';
  294. MF1 = 'MOT' 'FX'; MF2 = 'MOT' 'FY'; MF3 = 'MOT' 'FZ';
  295. 'SI' ('EGA' MOTAX &MODE) ;
  296. MU1 = 'MOT' 'UR'; MU2 = 'MOT' 'UZ'; MU3 = 'MOT' 'UT';
  297. MF1 = 'MOT' 'FR'; MF2 = 'MOT' 'FZ';
  298. 'FINSI';
  299. TABUTIL = TABL;
  300. ******************************************
  301. 'SI' ((&DIME 'EGA' 3) 'ET' ('NON' ICOQU));
  302. ******************************************
  303. TABUTIL.'DIRECTION' = TABL;
  304. TMAIL = 'TABLE'; TMBOUGER = 'TABLE'; TVECTEUR = 'TABLE';
  305. TPFISS = 'TABLE'; TTETA = 'TABLE';
  306. FONDFISS = ORDO (SUPTAB.'FRONT_FISSURE') ;
  307. NP = 'NBNO' FONDFISS ;
  308. PINIT = FONDFISS 'POIN' 'INIT' ;
  309. PFINA = FONDFISS 'POIN' 'FINA' ;
  310. *--------------------------------------------------*
  311. * On veut savoir si une seule ou toutes les 2 levres
  312. * de la fissure ont été modelisees
  313. * Si 1 levre modelisee : XMULT=2 et ICOS1=FAUX
  314. * Si 2 levres modelisees : XMULT=1 et ICOS1=VRAI
  315. *--------------------------------------------------*
  316. PFISS = PINIT; CC = FONDFISS 'ELEM' 'APPU' 'LARG' PFISS;
  317. VCUB = MAILLAGE 'ELEM' 'APPUYE' 'LARG' PFISS;
  318. SURF1 = ('ENVE' VCUB) 'ELEM' 'APPUYE' 'LARG' PFISS;
  319. SURF1 = SURF1 'DIFF' (SURF1 'ELEM' 'APPU' 'STRI' FISSURE);
  320. PP2 = 'POINT' 2 CC;
  321. 'SI' ('EGA' ('NBNO' SURF1) ('NBNO' (SURF1 'ET' PP2)));
  322. SURF2 = SURF1 'ELEM' 'APPU' 'LARG' PP2;
  323. 'SI' ('NBEL' SURF2 '>' 2);
  324. SURF2 = SURF1 'ELEM' 'APPU' 'LARG' ('POINT' 1 FONDFISS);
  325. 'FINSI';
  326. SURF1 = SURF1 'DIFF' SURF2;
  327. 'FINSI';
  328. FISS1 = ('CONT' SURF1) 'ELEM' 'APPU' 'LARG' PFISS;
  329. FISS1 = 'ORDO' FISS1;
  330. P1 = 'POINT' FISS1 'INIT'; P2 = 'POINT' FISS1 'FINA';
  331. V1 = 'MOIN' PFISS P1; V2 = 'MOIN' PFISS P2;
  332. COS1 = ('PSCA' V1 V2) / (('NORM' V1)*('NORM' V2));
  333. ICOS1 = COS1 '>' ('COS' 120.);
  334. 'SI' ICOS1;
  335. X1 Y1 Z1 = 'COOR' P1; X2 Y2 Z2 = 'COOR' P2;
  336. POINSF = ((X1 + X2)/2.) ((Y1 + Y2)/2.) ((Z1 + Z2)/2.);
  337. 'SINON';
  338. POINSF = P1;
  339. 'SI' ('NEG' ('NBNO' FISSURE) ('NBNO' (FISSURE 'ET' POINSF)));
  340. POINSF = P2;
  341. 'FINSI';
  342. 'FINSI';
  343. *
  344. XMULT = 2.;
  345. *MC 06/07/98 : test sur le numéro du noeud plutôt que
  346. * sur la proximité de ceux-ci
  347. 'SI' (('NEG' ('NOEU' P1) ('NOEU' PFISS)) 'ET'
  348. ('NEG' ('NOEU' P2) ('NOEU' PFISS)) 'ET' ICOS1);
  349. XMULT = 1.;
  350. 'FINSI';
  351.  
  352. *---------------------------------------------------------*
  353. * On determine le support du mouvement de la fissure : MAIL
  354. * et le maillage qui se deplace : MBOUGER
  355. *---------------------------------------------------------*
  356. MAILVOL = FONDFISS; MBOUGVOL = FONDFISS;
  357. 'REPETER' MAILV (COUCHE + 1) ;
  358. MAILVOL = MAILLAGE 'ELEM' 'APPUYE' 'LARG' MAILVOL ;
  359. 'SI' ('EGA' &MAILV COUCHE); MBOUGVOL = MAILVOL; 'FINSI';
  360. 'FIN' MAILV ;
  361. *
  362. 'REPETER' BBCC0 2;
  363. 'SI' ('EGA' &BBCC0 1); SURF1 = PINIT; N1 = 2; N2 = 1; 'FINSI';
  364. 'SI' ('EGA' &BBCC0 2); SURF1 = PFINA; N1 = 1; N2 = 2; 'FINSI';
  365. CC = FONDFISS 'ELEM' 'APPU' 'LARG' SURF1;
  366. 'REPETER' BSURF1 (COUCHE + 1);
  367. VCUB = MAILLAGE 'ELEM' 'APPUYE' 'LARG' SURF1 ;
  368. PP2 = 'POINT' N1 CC;
  369. * MC 19/12/96 : Modif pour fissure non débouchante
  370. 'SI' ('EGA' &BSURF1 1); SURF1P = PP2; 'FINSI';
  371. VCUB = 'INTE' VCUB (MAILLAGE 'ELEM' 'APPUYE' 'LARG' SURF1P);
  372. SURF1 = ('ENVE' VCUB) 'ELEM' 'APPUYE' 'LARG' SURF1 ;
  373. SURF1P = (('ENVE' VCUB) 'DIFF' SURF1)
  374. 'ELEM' 'APPUYE' 'LARG' SURF1P;
  375. * Fin de modif
  376. SURF1 = SURF1 'DIFF' (SURF1 'ELEM' 'APPU' 'STRI' FISSURE);
  377. 'SI' ('EGA' ('NBNO' SURF1) ('NBNO' (SURF1 'ET' PP2)));
  378. 'SI' (&BSURF1 '>' 1);
  379. SURF1 = SURF1 'DIFF' SURF3;
  380. 'FINSI';
  381. SURF2 = SURF1 'ELEM' 'APPU' 'LARG' PP2;
  382. 'SI' (('NBEL' SURF2) '>' 2);
  383. SURF2 = SURF1 'ELEM' 'APPU' 'LARG' ('POINT' N2 CC);
  384. 'FINSI';
  385. SURF1 = SURF1 'DIFF' SURF2;
  386. CC = 'DIFF' ('CONT' ('ELEM' SURF2 1)) CC;
  387. CC = 'ORDO' CC;
  388. CC = 'ELEM' CC 2;
  389. 'SI' (&BSURF1 '>' 1); SURF3 = SURF2 'ET' SURF3; 'SINON';
  390. SURF3 = SURF2 ;
  391. 'FINSI';
  392. 'FINSI';
  393. 'FIN' BSURF1;
  394. 'SI' ('EGA' &BBCC0 1);
  395. SURINI = PINIT;
  396. 'REPETER' BSURI1 (COUCHE + 1);
  397. SURINI = SURF1 'ELEM' 'APPU' LARG SURINI;
  398. 'SI' ('EGA' &BSURI1 COUCHE); SURINIT1 = SURINI; 'FINSI';
  399. 'FIN' BSURI1;
  400. 'FINSI';
  401. 'SI' ('EGA' &BBCC0 2);
  402. SURFIN = PFINA ;
  403. 'REPETER' BSURI2 (COUCHE + 1);
  404. SURFIN = SURF1 'ELEM' 'APPU' LARG SURFIN;
  405. 'SI' ('EGA' &BSURI2 COUCHE); SURFINA1 = SURFIN; 'FINSI';
  406. 'FIN' BSURI2;
  407. 'FINSI';
  408. 'FIN' BBCC0;
  409. *
  410. 'SI' ('EGA' COUCHE 0); NN = 1; 'SINON'; NN = 2; 'FINSI';
  411. 'REPETER' BBCC1 NN;
  412. TAB1 = TABLE; I = 0;
  413. 'SI' (&BBCC1 'EGA' 1);
  414. TAB1.1 = SURINI; TAB1.NP = SURFIN; MAIL3D = MAILVOL;
  415. 'FINSI';
  416. 'SI' (&BBCC1 'EGA' 2);
  417. TAB1.1 = SURINIT1; TAB1.NP = SURFINA1; MAIL3D = MBOUGVOL;
  418. 'FINSI';
  419. TRANCH1 = MAIL3D 'ELEM' 'APPU' 'LARG' TAB1.1;
  420. TRANCH2 = TRANCH1; TRANCHET = TRANCH1;
  421. 'SI' (('NBEL' FONDFISS) '>' 1);
  422. 'REPETER' BOURECU (('NBEL' FONDFISS) - 1) ;
  423. I = I + 1 ;
  424. TRANCH2 = (MAIL3D 'ELEM' 'APPU' 'LARG' TRANCHET)
  425. 'DIFF' TRANCHET;
  426. TRANCHET = TRANCHET 'ET' TRANCH2 ;
  427. ENVEBI = 'DIFF' ('ENVE' TRANCH2) ('ENVE' TRANCH1);
  428. 'SI' ILIN ;
  429. TAB1.(I + 1) = 'DIFF' ENVEBI (('ENVE' TRANCH2)
  430. 'ET' ('ENVE' TRANCH1)) ;
  431. 'SINON' ;
  432. TAB1.((2 * I) + 1) = 'DIFF' ENVEBI (('ENVE' TRANCH2)
  433. 'ET' ('ENVE' TRANCH1)) ;
  434. POINTRAN = TRANCH1 'CHANGE' 'POI1' ;
  435. POINBORD = (TAB1.((2 * I) - 1) 'ET'
  436. TAB1.((2 * I) + 1)) 'CHANGE' 'POI1';
  437. TAB1.(2 * I) = POINTRAN 'DIFF' POINBORD;
  438. 'FINSI' ;
  439. TRANCH1 = TRANCH2;
  440. 'FIN' BOURECU ;
  441. 'FINSI';
  442. 'SI' (('NON' ILIN) 'ET' (NP '>' 2));
  443. POINTRAN = TRANCH2 'CHANGE' 'POI1';
  444. POINBORD = (TAB1.NP 'ET' TAB1.(NP - 2)) 'CHANGE' 'POI1';
  445. TAB1.(NP - 1) = POINTRAN 'DIFF' POINBORD ;
  446. 'FINSI';
  447. 'SI' (&BBCC1 'EGA' 1); TMAIL = TAB1; 'FINSI';
  448. 'SI' (&BBCC1 'EGA' 2); TMBOUGER = TAB1; 'FINSI';
  449. 'FIN' BBCC1;
  450. *-------------------------------------------*
  451. * Recuperation des points du front de fissure
  452. *-------------------------------------------*
  453. FNUAGE = FONDFISS 'CHAN' 'POI1';
  454. I = 0;
  455. 'REPETER' BPF NP;
  456. I = I + 1;
  457. TPFISS.I = (('CHAN' 'POI1' TMAIL.I) 'ET' FNUAGE) 'DIFF'
  458. (('CHAN' 'POI1' TMAIL.I) 'DIFF' FNUAGE);
  459. TPFISS.I = 'POIN' 1 TPFISS.I;
  460. 'SI' ('EGA' COUCHE 0); TMBOUGER.I = TPFISS.I; 'FINSI';
  461. 'FIN' BPF;
  462. *--------------------------------------*
  463. * Transformation du tuyau en plaque dans
  464. * le cas d une fissure non traversante
  465. *--------------------------------------*
  466. 'SI' ITUYAU;
  467. 'DEPLACE' MAILLAGE 'COOR' 'CYLI' PAXEZ1 PAXEZ2 PAXEZ3;
  468. 'FINSI';
  469. *--------------------------------------------------*
  470. * Recuperation de deux points de SURINI et de SURFIN
  471. *--------------------------------------------------*
  472. PI1 = ('DIFF' ('CHAN' 'POI1' ('CONT' SURINI))
  473. ('MANU' 'POI1' PINIT)) 'POIN' 1;
  474. *
  475. PF1 = ('DIFF' ('CHAN' 'POI1' ('CONT' SURFIN))
  476. ('MANU' 'POI1' PFINA)) 'POIN' 1;
  477. *----------------------------------------------------------*
  478. * Recuperation des vecteurs normaux
  479. * La norme de ces vecteurs est du meme ordre de grandeur que
  480. * la mesure d un segment du front. Pour qu une translation avec
  481. * un de ces vecteurs corresponde a une avance infinitesimale,
  482. * on divise chaque vecteur par 100 fois la mesure d un segment
  483. *----------------------------------------------------------*
  484. VNPF = (POINSF 'MOIN' TPFISS.1) 'PVEC' (POINSF 'MOIN' TPFISS.2);
  485. VNPF = VNPF / ('NORM' VNPF) ;
  486. VECT11 = (TPFISS.2 'MOINS' TPFISS.1) 'PVEC' VNPF;
  487. PI3 = PINIT 'PLUS' VNPF; PF3 = PFINA 'PLUS' VNPF;
  488. VPLAN1 = (PI1 'MOINS' PINIT) 'PVEC' (PINIT 'MOINS' PI3);
  489. 'SI' ('EGA' ('PSCA' VPLAN1 VECT11) 0. 1.E-10);
  490. TVECTEUR.1 = VECT11 ;
  491. 'SINON';
  492. P11 = TPFISS.1 'PLUS' VECT11;
  493. P12 = P11 'SYME' 'PLAN' PI1 PINIT PI3 ;
  494. VECT12 = P12 'MOIN' TPFISS.1;
  495. TVECTEUR.1 = VECT11 'PLUS' VECT12 ;
  496. 'FINSI';
  497. TVECTEUR.1 = TVECTEUR.1 / 100. ;
  498. VECT21 = (TPFISS.NP 'MOINS' TPFISS.(NP - 1)) 'PVEC' VNPF ;
  499. VPLAN2 = (PF1 'MOINS' PFINA) 'PVEC' (PFINA 'MOINS' PF3);
  500. 'SI' ('EGA' ('PSCA' VPLAN2 VECT21) 0. 1.E-10);
  501. TVECTEUR.NP = VECT21 ;
  502. 'SINON';
  503. P21 = TPFISS.NP 'PLUS' VECT21;
  504. P22 = P21 'SYME' 'PLAN' PF1 PFINA PF3 ;
  505. VECT22 = P22 'MOIN' TPFISS.NP;
  506. TVECTEUR.NP = VECT21 'PLUS' VECT22 ;
  507. 'FINSI';
  508. TVECTEUR.NP = TVECTEUR.NP / 100. ;
  509. I = 1 ;
  510. 'SI' (NP > 2) ;
  511. 'REPETER' BVECT (NP - 2) ;
  512. I = I + 1 ;
  513. VTFF1 = TPFISS.I 'MOINS' TPFISS.(I - 1) ;
  514. VNFF1 = VTFF1 'PVECT' VNPF ;
  515. VTFF2 = TPFISS.(I + 1) 'MOINS' TPFISS.I ;
  516. VNFF2 = VTFF2 'PVECT' VNPF ;
  517. TVECTEUR.I = .5 * (VNFF1 'PLUS' VNFF2) ;
  518. TVECTEUR.I = TVECTEUR.I / 100. ;
  519. 'FIN' BVECT ;
  520. 'FINSI' ;
  521. *--------------------------------------
  522. * Vecteur et maillage de support global
  523. * en 3D avec des éléments massifs
  524. *--------------------------------------
  525. PNOR1 = PROG;
  526. 'REPETER' BNOR1 NP;
  527. PNOR1 = PNOR1 'ET' ('PROG' ('NORM' TVECTEUR.&BNOR1));
  528. 'FIN' BNOR1;
  529. MINOR1 = 'MINI' PNOR1;
  530. 'REPETER' BVGLO NP;
  531. N1 = MINOR1 / ('EXTR' PNOR1 &BVGLO) ;
  532. X1 = N1 * ('COOR' 1 (TVECTEUR.&BVGLO)) ;
  533. Y1 = N1 * ('COOR' 2 (TVECTEUR.&BVGLO)) ;
  534. Z1 = N1 * ('COOR' 3 (TVECTEUR.&BVGLO)) ;
  535. 'SI' (&BVGLO 'EGA' 1);
  536. TVECTEUR.(NP + 1) = 'MANU' 'CHPO' (TMAIL.&BVGLO)
  537. 3 MU1 X1 MU2 Y1 MU3 Z1 'NATURE' 'DIFFUS';
  538. 'SINON';
  539. TVECTEUR.(NP + 1) = TVECTEUR.(NP + 1) 'ET' ('MANU' 'CHPO'
  540. (TMAIL.&BVGLO) 3 MU1 X1 MU2 Y1 MU3 Z1 'NATURE' 'DIFFUS');
  541. 'FINSI';
  542. 'FIN' BVGLO;
  543. *
  544. TPFISS.(NP + 1) = SUPTAB.'FRONT_FISSURE';
  545. TMBOUGER.(NP + 1) = SUPTAB.'FRONT_FISSURE';
  546. 'SI' (COUCHE '>' 0);
  547. 'REPETER' MBOUG COUCHE ;
  548. TMBOUGER.(NP + 1) = 'ELEM' MAILLAGE 'APPUYE'
  549. 'LARG' TMBOUGER.(NP + 1) ;
  550. 'FIN' MBOUG ;
  551. 'FINSI';
  552. TMAIL.(NP + 1) = 'ELEM' MAILLAGE 'APPU'
  553. 'LARG' TMBOUGER.(NP + 1) ;
  554. *-----------------------------------------*
  555. * Transformation d'une plaque en tuyau
  556. * dans le cas d une fissure non traversante
  557. *-----------------------------------------*
  558. 'SI' ITUYAU;
  559. 'DEPLACE' MAILLAGE 'COOR' 'CART';
  560. 'FINSI';
  561. ********
  562. 'FINSI';
  563. ********
  564.  
  565. *********************************
  566. 'SI' (('EGA' &DIME 2) 'OU' ICOQU);
  567. *********************************
  568. *----------------------------------------------*
  569. *-- On determine la direction de propagation --*
  570. *-- et le support geometrique du champ THETA --*
  571. *----------------------------------------------*
  572. PFISS = SUPTAB.'FRONT_FISSURE';
  573. FISS1 = FISSURE 'ELEM' 'APPU' 'LARG' PFISS;
  574. FISS1 = 'ORDO' FISS1;
  575. P1 = 'POINT' FISS1 'INIT'; P2 = 'POINT' FISS1 'FINA';
  576. *MC 06/07/98 : test sur le numéro du noeud plutôt que
  577. * sur la proximité de ceux-ci
  578. 'SI' (('NEG' ('NOEU' P1) ('NOEU' PFISS)) 'ET'
  579. ('NEG' ('NOEU' P2) ('NOEU' PFISS)));
  580. XMULT = 1.;
  581. MESU1 = 'MESU' ('DROI' 1 PFISS P1);
  582. MESU2 = 'MESU' ('DROI' 1 PFISS P2);
  583. XX1 = (('COOR' 1 PFISS) - ('COOR' 1 P1)) / MESU1;
  584. XX2 = (('COOR' 1 PFISS) - ('COOR' 1 P2)) / MESU2;
  585. YY1 = (('COOR' 2 PFISS) - ('COOR' 2 P1)) / MESU1;
  586. YY2 = (('COOR' 2 PFISS) - ('COOR' 2 P2)) / MESU2;
  587. XX1 = (XX1 + XX2) / 2.; YY1 = (YY1 + YY2) / 2.;
  588. 'SI' ('EGA' &DIME 3);
  589. ZZ1 = (('COOR' 3 PFISS) - ('COOR' 3 P1)) / MESU1;
  590. ZZ2 = (('COOR' 3 PFISS) - ('COOR' 3 P2)) / MESU2;
  591. ZZ1 = (ZZ1 + ZZ2) / 2.;
  592. 'FINSI';
  593. 'SINON';
  594. XMULT = 2.;
  595. *MC 06/07/98 : test sur le numéro du noeud plutôt que
  596. * sur la proximité de ceux-ci
  597. 'SI' ('EGA' ('NOEU' P2) ('NOEU' PFISS)); P2 = P1; 'FINSI';
  598. MESU1 = 'MESU' ('DROI' 1 PFISS P2);
  599. XX1 = (('COOR' 1 PFISS) - ('COOR' 1 P2)) / MESU1;
  600. YY1 = (('COOR' 2 PFISS) - ('COOR' 2 P2)) / MESU1;
  601. 'SI' ('EGA' &DIME 3);
  602. ZZ1 = (('COOR' 3 PFISS) - ('COOR' 3 P2)) / MESU1;
  603. 'FINSI';
  604. 'FINSI';
  605. 'SI' ('EGA' &DIME 2); VECTEUR = (XX1 YY1); 'FINSI';
  606. 'SI' ('EGA' &DIME 3); VECTEUR = (XX1 YY1 ZZ1); 'FINSI';
  607. NP = 0 ;
  608. MBOUGER = SUPTAB.'FRONT_FISSURE';
  609. 'SI' (COUCHE '>' 0);
  610. 'REPETER' MBOUG COUCHE ;
  611. MBOUGER = 'ELEM' MAILLAGE 'APPUYE' 'LARG' MBOUGER ;
  612. 'FIN' MBOUG ;
  613. 'FINSI';
  614. MAIL = 'ELEM' MAILLAGE 'APPU' 'LARG' MBOUGER ;
  615. *******
  616. 'FINSI' ;
  617. *******
  618.  
  619. *--------------------------------------------*
  620. * Configuration initiale. Il ne faut pas la -*
  621. * placer avec la determination de VECTEUR --*
  622. *--------------------------------------------*
  623. CONF0 = 'FORM';
  624. *-----------------------------------------------*
  625. * Boucle sur les noeuds du front de la fissure -*
  626. *-----------------------------------------------*
  627. N = 0 ;
  628. 'REPETER' PROTETA (NP + 1);
  629. N = N + 1 ;
  630. 'SI' (('EGA' &DIME 3) 'ET' ('NON' ICOQU));
  631. MAIL = TMAIL.N ; PFISS = TPFISS.N;
  632. MBOUGER = TMBOUGER.N; VECTEUR = TVECTEUR.N;
  633. 'FINSI';
  634. *-------------------------------------------------*
  635. *----- Valeur initiale pour le vecteur THETA -----*
  636. *-------------------------------------------------*
  637. TETA = 'MANU' 'CHPO' MAIL 2 MU1 0. MU2 0. 'NATURE' 'DIFFUS' ;
  638. 'SI' ((&DIME 'EGA' 3)) ;
  639. TETA = TETA + ('MANU' 'CHPO' MAIL 1 MU3 0. 'NATURE' 'DIFFUS');
  640. 'FINSI' ;
  641. *-------------------------------------------------------------*
  642. * Donnees pour le calcul de l accroissement d aire de fissure *
  643. *-------------------------------------------------------------*
  644. XAIRE = 1.;
  645. 'SI' ICOQU; XAIRE = SUPTAB.'EPAISSEUR'; 'FINSI';
  646. 'SI' ('EGA' MOTAX &MODE);
  647. XAIRE = 2. * VALPI * ('COOR' 1 PFISS);
  648. 'FINSI';
  649. * Si 3D, on recupere la partie du plan de fissure proche
  650. * du point avance pour calculer l accroissement d aire
  651. 'SI' (('EGA' &DIME 3) 'ET' ('NON' ICOQU));
  652. PLFISS = 'ELEM' FISSURE APPUY LARG MBOUGER;
  653. MODFIS = 'MODE' PLFISS 'MECANIQUE' 'ELASTIQUE';
  654. CHFIS1 = 'MANU' 'CHPO' FISSURE 1 'SCAL' 1.;
  655. CHFIS1 = 'CHAN' 'CHAM' CHFIS1 MODFIS 'STRESSES';
  656. XAIREI = 'INTG' CHFIS1 MODFIS;
  657. * L aire doit correspondre a une seule levre de fissure
  658. * Si les deux levres sont modelisees, on divise l aire par 2
  659. 'SI' ICOS1; XAIREI = XAIREI / 2.; 'FINSI';
  660. 'FINSI';
  661. *--------------------------------------------------------*
  662. *---- THETA généré par la différence de coordonnées -----*
  663. *--------------------------------------------------------*
  664. 'SI' (&DIME 'EGA' 2); XX0 YY0 = 'COOR' MAIL; 'FINSI';
  665. 'SI' (&DIME 'EGA' 3); XX0 YY0 ZZ0 = 'COOR' MAIL; 'FINSI';
  666. *- Translation de la fissure avec une vecteur normalisée -*
  667. 'SI' ITRAN ;
  668. 'SI' ITUYAU;
  669. 'DEPLACE' MAILLAGE 'COOR' 'CYLI' PAXEZ1 PAXEZ2 PAXEZ3;
  670. 'FINSI';
  671. 'DEPLACE' 'PLUS' MBOUGER VECTEUR;
  672. 'SI' ITUYAU;
  673. 'DEPLACE' MAILLAGE 'COOR' 'CART' ;
  674. 'FINSI';
  675. 'SI' (&DIME 'EGA' 2); XX1 YY1 = 'COOR' MAIL; 'FINSI';
  676. 'SI' (&DIME 'EGA' 3);
  677. XX1 YY1 ZZ1 = 'COOR' MAIL;
  678. 'SI' ('NON' ICOQU);
  679. XAIREF = 'INTG' CHFIS1 MODFIS;
  680. 'SI' ICOS1; XAIREF = XAIREF / 2.; 'FINSI';
  681. 'FINSI';
  682. 'FINSI';
  683. 'SI' ITUYAU;
  684. 'DEPLACE' MAILLAGE 'COOR' 'CYLI' PAXEZ1 PAXEZ2 PAXEZ3;
  685. 'FINSI';
  686. 'DEPLACE' 'MOIN' MBOUGER VECTEUR ;
  687. 'SI' ITUYAU;
  688. 'DEPLACE' MAILLAGE 'COOR' 'CART' ;
  689. 'FINSI';
  690. TETAT = ('NOMC' MU1 (XX1 - XX0)) +
  691. ('NOMC' MU2 (YY1 - YY0));
  692. 'SI' (&DIME 'EGA' 3);
  693. TETAT = TETAT + ('NOMC' MU3 (ZZ1 - ZZ0));
  694. 'SI' ('NON' ICOQU); XAIRE = XAIREF - XAIREI; 'FINSI';
  695. 'FINSI' ;
  696. TETA = (TETAT * XMULT / XAIRE) + TETA ;
  697. 'FINSI' ;
  698. *----- Rotation de la fissure selon le point ou l'axe donné
  699. * Pour que la rotation effectuee corresponde a une avance
  700. * infinitesimale, on choisit un angle de rotation de 0.01 degre
  701. 'SI' IROTA ;
  702. ANG1 = 1.D-2 ;
  703. 'SI' ('EGA' &DIME 2);
  704. 'DEPLACE' 'TOUR' MBOUGER ANG1 PCENTRE ;
  705. XX1 YY1 = 'COOR' MAIL ;
  706. 'DEPLACE' 'TOUR' MBOUGER (0. - ANG1) PCENTRE ;
  707. TETAR = ('NOMC' MU1 (XX1 - XX0)) +
  708. ('NOMC' MU2 (YY1 - YY0)) ;
  709. X1 = 'EXTR' TETAR MU1 PFISS ;
  710. Y1 = 'EXTR' TETAR MU2 PFISS ;
  711. NOR1 = ('NORM' (X1 Y1)) + 1.D-20 ;
  712. TETAR = TETAR / NOR1 ;
  713. 'FINSI';
  714. 'SI' ('EGA' &DIME 3);
  715. 'SI' ('NON' ICOUDE);
  716. 'DEPLACE' 'TOUR' MBOUGER ANG1 POINT_1 POINT_2 ;
  717. XX1 YY1 ZZ1 = 'COOR' MAIL ;
  718. 'SI' ('NON' ICOQU);
  719. XAIREF = 'INTG' CHFIS1 MODFIS;
  720. 'SI' ICOS1; XAIREF = XAIREF / 2.; 'FINSI';
  721. 'FINSI';
  722. 'DEPLACE' 'TOUR' MBOUGER ANG1 POINT_2 POINT_1 ;
  723. 'SINON';
  724. 'DEPLACE' OPER1 MAILLAGE SUPTAB.'CHPOINT_TRANSFORMATION' ;
  725. 'DEPLACE' 'TOUR' MBOUGER ANG1 POINT_1 POINT_2 ;
  726. 'DEPLACE' OPER1 MAILLAGE (-1.*(SUPTAB.'CHPOINT_TRANSFORMATION'));
  727. XX1 YY1 ZZ1 = 'COOR' MAIL ;
  728. 'SI' ('NON' ICOQU);
  729. XAIREF = 'INTG' CHFIS1 MODFIS;
  730. 'SI' ICOS1; XAIREF = XAIREF / 2.; 'FINSI';
  731. 'FINSI';
  732. 'DEPLACE' OPER1 MAILLAGE (SUPTAB.'CHPOINT_TRANSFORMATION');
  733. 'DEPLACE' 'TOUR' MBOUGER ANG1 POINT_2 POINT_1 ;
  734. 'DEPLACE' OPER1 MAILLAGE (-1.*(SUPTAB.'CHPOINT_TRANSFORMATION'));
  735. 'FINSI';
  736. TETAR = ('NOMC' MU1 (XX1 - XX0)) +
  737. ('NOMC' MU2 (YY1 - YY0)) +
  738. ('NOMC' MU3 (ZZ1 - ZZ0)) ;
  739. 'SI' ('NON' ICOQU);
  740. XAIRE = XAIREF - XAIREI;
  741. 'SINON';
  742. X1 = 'EXTR' TETAR MU1 PFISS ;
  743. Y1 = 'EXTR' TETAR MU2 PFISS ;
  744. Z1 = 'EXTR' TETAR MU3 PFISS ;
  745. NOR1 = ('NORM' (X1 Y1 Z1)) + 1.D-20 ;
  746. TETAR = TETAR / NOR1 ;
  747. 'FINSI';
  748. 'FINSI' ;
  749. TETA = (TETAR * XMULT / XAIRE) + TETA ;
  750. 'FINSI';
  751. *--------------------------------------------*
  752. * Objet util a garder dans la table TABUTIL -*
  753. *--------------------------------------------*
  754. 'SI' (('EGA' &DIME 2) 'OU' ICOQU);
  755. TABUTIL.'DIRECTION' = VECTEUR;
  756. 'FINSI';
  757. 'SI' (('EGA' &DIME 3) 'ET' ('NON' ICOQU));
  758. 'SI' (N '&lt;EG' NP);
  759. TTETA.(TPFISS.N) = TETA ;
  760. TABUTIL.'DIRECTION'.(TPFISS.N) = VECTEUR;
  761. 'SINON';
  762. TTETA.'GLOBAL' = TETA ;
  763. TABUTIL.'DIRECTION'.'GLOBAL' = VECTEUR;
  764. 'FINSI';
  765. 'FINSI';
  766. 'FIN' PROTETA;
  767. *------------------------------------------------------*
  768. * Fin de boucle sur les noeuds de front de la fissure -*
  769. *------------------------------------------------------*
  770. 'SI' (('EGA' &DIME 3) 'ET' ('NON' ICOQU));
  771. TETA = TTETA;
  772. 'FINSI';
  773. *-------------------------------------------------------------*
  774. * La configuration peut etre modifiee par DEPL. La directive -*
  775. * suivante nous permet de retrouver configuration initiale ---*
  776. *-------------------------------------------------------------*
  777. 'FORM' CONF0;
  778. *-------------------------------*
  779. * Fin de la procedure CH_THETA -*
  780. *-------------------------------*
  781. * rendre compatible les chpoint
  782. *mess ' type de teta ' ( 'TYPE' TETA);
  783. 'SI' ( 'EXIS' SUPTAB 'MODELE');
  784. MOO=SUPTAB . 'MODELE';
  785. 'SINON';
  786. MOO=SUPTAB .'SOLUTION_PASAPAS' .'MODELE';
  787. 'FINSI';
  788. MOO = EXTR MOO 'FORM' 'MECANIQUE' ;
  789. 'SI' ( 'EGA' ('TYPE' TETA) 'CHPOINT ');
  790. teta='CFND' teta MOO;
  791. 'SINON';
  792. 'REPE' BOO (NP - 1);
  793. IIP=TPFISS.&boo;
  794. TETA.IIP= 'CFND' TETA.IIP MOO;
  795. 'FIN' BOO;
  796. TETA.'GLOBAL'= 'CFND' TETA.'GLOBAL' MOO;
  797. 'FINSI';
  798.  
  799. *------------------------------------------------------*
  800. * Dans TABUTIL on ajoute les chpoint de DIRECTION -*
  801. *------------------------------------------------------*
  802.  
  803. * VECTEUR 1
  804. si (EGA (TYPE TETA) 'CHPOINT ');
  805. VECTEUR1 = TETA ;
  806. sino;
  807. VECTEUR1 = TETA . 'GLOBAL';
  808. fins;
  809. VECTEUR1= REDU VECTEUR1 (SUPTAB.'FRONT_FISSURE');
  810. * VECTEUR1 = VECTEUR1 / (NORM VECTEUR1);
  811.  
  812. * Recuperation des noms de composantes du deplacement dans le MODELE
  813. NCOMPDEP = EXTR SUPTAB.'MODELE' 'DEPL';
  814. NCOMPFOR = EXTR SUPTAB.'MODELE' 'FORC';
  815.  
  816. NVECT1 = PSCA VECTEUR1 VECTEUR1 NCOMPDEP NCOMPDEP;
  817.  
  818. VECTEUR1 = VECTEUR1 / (NVECT1**0.5);
  819. TABUTIL . 'DIRECTION1' = VECTEUR1;
  820.  
  821. si(non ICOQU);
  822.  
  823. * VECTEUR 2
  824. F1 = PRES 'MASS' MOO SUPTAB.'LEVRE_SUPERIEURE' 1.;
  825. VECTEUR2 = REDU F1 (SUPTAB.'FRONT_FISSURE');
  826. VECTEUR2 = EXCO VECTEUR2 NCOMPFOR NCOMPDEP 'NOID';
  827. * VECTEUR2 = VECTEUR2 / (NORM VECTEUR2);
  828.  
  829. NVECT2 = PSCA VECTEUR2 VECTEUR2 NCOMPDEP NCOMPDEP;
  830. VECTEUR2 = VECTEUR2 / (NVECT2**0.5);
  831. TABUTIL . 'DIRECTION2' = VECTEUR2;
  832.  
  833. * VECTEUR3 = VECTEUR1 pvec VECTEUR2
  834. * VECTEUR3 = ( ((exco VECTEUR1 'UY' 'UX') * (exco VECTEUR2 'UZ' 'UX'))
  835. * - ((exco VECTEUR1 'UZ' 'UX') * (exco VECTEUR2 'UY' 'UX')) )
  836. * et ( ((exco VECTEUR1 'UZ' 'UY') * (exco VECTEUR2 'UX' 'UY'))
  837. * - ((exco VECTEUR1 'UX' 'UY') * (exco VECTEUR2 'UZ' 'UY')) )
  838. * et ( ((exco VECTEUR1 'UX' 'UZ') * (exco VECTEUR2 'UY' 'UZ'))
  839. * - ((exco VECTEUR1 'UY' 'UZ') * (exco VECTEUR2 'UX' 'UZ')) );
  840. VECTEUR3 = ( * VECTEUR1 VECTEUR2
  841. (mots 'UY' 'UZ' 'UX') (mots 'UZ' 'UX' 'UY') (mots 'UX' 'UY' 'UZ') )
  842. - ( * VECTEUR1 VECTEUR2
  843. (mots 'UZ' 'UX' 'UY') (mots 'UY' 'UZ' 'UX') (mots 'UX' 'UY' 'UZ') );
  844. TABUTIL . 'DIRECTION3' = VECTEUR3;
  845.  
  846. fins;
  847.  
  848. 'FINPROC' TETA TABUTIL;
  849.  
  850.  
  851.  
  852.  

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