Télécharger four2tri.procedur

Retour à la liste

Numérotation des lignes :

  1. * FOUR2TRI PROCEDUR BP208322 19/04/03 21:15:20 10175
  2.  
  3. *======================================================================
  4. *
  5. * FOUR2TRI (ou 4 2 3 pour les numericiens purs....) :
  6. * Genere un maillage 3D à partir d'un modele Fourier
  7. * Recombine les CHPO 2D Fourier sur ce maillage 3D
  8. * Creation : D. Combescure, SEMT/DYN, CEA Saclay, Decembre 2006
  9. * Modifs : B. Prabel, 2013/02(#8575), 2017/04(#9396), 2019/03
  10. *
  11. *======================================================================
  12.  
  13. DEBPROC FOUR2TRI MOD1*'MMODEL' TAB1*'TABLE'
  14. NUMFOUR/'ENTIER' PRANGL/'LISTREEL' REDRESS/'LOGIQUE';
  15. *
  16. * Harmonique de Fourier
  17. *
  18. SI (NEG (TYPE NUMFOUR) 'ENTIER');
  19. * NUMFOUR = 0;
  20. NUMFOUR = VALE 'MODE' 'FOUR';
  21. MESS 'Harmonique de Fourier non fournie :'
  22. ' on prend l harmonique courante 'NUMFOUR;
  23. FINSI;
  24. *
  25. * On ne cree le maillage 3D que s'il n'existe pas dejà
  26. *
  27. SI (NON (EXIS TAB1 'MAILLAGE_3D'));
  28. FLAGMAIL = VRAI;
  29. SINON;
  30. FLAGMAIL = FAUX;
  31. *le maillage existe deja -> on recupere les angles, si il a été redressé
  32. PRANGL = TAB1 . 'MAILLAGE_3D' . 'ANGLES' ;
  33. REDRESS = TAB1 . 'MAILLAGE_3D' . 'REDRESSE' ;
  34. FINSI;
  35. *
  36. *
  37. * On ne cree le champs de deplacements 3D uniquement
  38. * si celui en 2D Fourier est donne
  39. *
  40. SI (EXIS TAB1 'DEPLACEMENTS');
  41. FLAGDEPL = VRAI;
  42. SINON;
  43. FLAGDEPL = FAUX;
  44. FINSI;
  45. MODEPL1 = MOTS 'UR' 'UZ' 'UT' 'IUR' 'IUZ' 'IUT';
  46. MODEPL2 = MOTS 'VR' 'VZ' 'VT' 'IVR' 'IVZ' 'IVT';
  47. *
  48. DEP3D = TABLE;
  49. *
  50. * On ne cree le champs de forces 3D uniquement
  51. * si celui en 2D Fourier est donne
  52. *
  53. SI (EXIS TAB1 'EFFORTS');
  54. FLAGFOR = VRAI;
  55. SINON;
  56. FLAGFOR = FAUX;
  57. FINSI;
  58. MOFORC1 = MOTS 'FR' 'FZ' 'FT' 'IFR' 'IFZ' 'IFT';
  59. MOFORC2 = MOTS 'VR' 'VZ' 'VT' 'IVR' 'IVZ' 'IVT';
  60. *
  61. FOR3D = TABLE;
  62. *
  63. * On ne cree le CHPO 3D uniquement
  64. * si celui en 2D Fourier est donne
  65. *
  66. SI (EXIS TAB1 'CHAMPS_POINTS_SYMETRIQUES');
  67. FLAGCHPS = VRAI;
  68. SINON;
  69. FLAGCHPS = FAUX;
  70. FINSI;
  71. *
  72. CHS3D = TABLE;
  73. *
  74. SI (EXIS TAB1 'CHAMPS_POINTS_ANTISYMETRIQUES');
  75. FLAGCHPA = VRAI;
  76. SINON;
  77. FLAGCHPA = FAUX;
  78. FINSI;
  79. *
  80. CHA3D = TABLE;
  81. *
  82. * Angles
  83. *
  84. SI (NEG (TYPE PRANGL) 'LISTREEL');
  85. MESS 'LISTREEL des tranches non fourni :'
  86. ' on prend tous les 10° par defaut';
  87. PRANGL = PROG 0. PAS 10. 360.;
  88. FINSI;
  89. NTRANCHE = DIME PRANGL;
  90. *
  91. * Faut-il redresser le maillage et les champs tq (r,\theta,z) = (X,Y,Z)
  92. * ou laisse t'on (r,\theta,z) = (X,-Z,Y) ?
  93. *
  94. SI (NEG (TYPE REDRESS) 'LOGIQUE');
  95. REDRESS = FAUX;
  96. FINSI;
  97.  
  98. * points central, vecteur de rotation
  99. OPTI DIME 3 ;
  100. p00000 = 0. 0. 0.;
  101. SI REDRESS;
  102. p00001 = 0. 0. 1.;
  103. p00002 = 1. 0. 0.;
  104. SINON;
  105. p00001 = 0. 1. 0.;
  106. FINSI;
  107.  
  108.  
  109. ************************************************************************
  110. *
  111. * CREATION DU MAILLAGE 3D
  112. *
  113. ************************************************************************
  114.  
  115. SI FLAGMAIL;
  116.  
  117. * avant toute operation, on redresse si besoin
  118. SI REDRESS;
  119. MESH2D = EXTR MOD1 'MAILLAGE';
  120. DEPL MESH2D 'TOUR' 90. p00000 p00002;
  121. FINSI;
  122.  
  123. TAMOD = EXTR MOD1 'ZONE';
  124. nzone = (DIME TAMOD) / 2;
  125.  
  126. *bp : petite elimination pour le multicouche
  127. * (ok car FOUR2TRI traite uniquement des CHPO)
  128. * rem : en theorie, il faudrait aussi tester les mots de la formulation
  129. * ou les noms des deplacements...
  130. iz = 1; izok = 1;
  131. MOD2DJ0 = TAMOD . 1;
  132. MESH2DJ0 = TAMOD . 2;
  133. REPETER LAB0 (nzone - 1); iz = iz + 1;
  134. MOD2DJ = TAMOD . (2*iz - 1);
  135. MESH2DJ = TAMOD . (2*iz);
  136. * si deja vu --> on l'enleve
  137. SI (EGA MESH2DJ MESH2DJ0); ITER LAB0; FINSI;
  138. * si pas vu --> on le laisse
  139. izok = izok + 1;
  140. TAMOD . (2*izok - 1) = MOD2DJ;
  141. TAMOD . (2*izok) = MESH2DJ;
  142. * on suppose les zones identiques a la suite les unes des autres
  143. MOD2DJ0 = MOD2DJ;
  144. MESH2DJ0 = MESH2DJ;
  145. FIN LAB0;
  146. *on enleve les indices inutiles
  147. * mess nzone '--->' izok ;
  148. SI (NEG izok nzone);
  149. iz = izok;
  150. repe biz (nzone - izok); iz = iz + 1;
  151. OTER TAMOD (2*iz - 1);
  152. OTER TAMOD (2*iz);
  153. fin biz;
  154. nzone = izok;
  155. FINSI;
  156. * list TAMOD;
  157. *
  158. *------------ Boucle sur les sous-zones ------------
  159. *
  160. REPETER LAB0 nzone;
  161.  
  162. MESH2DJ = TAMOD. (2*&LAB0);
  163. * traitement selon type d'elements
  164. NTYPE = EXTR (MESH2DJ 'ELEM' TYPE) 1;
  165. SI ((EGA NTYPE 'SEG2') OU (EGA NTYPE 'POI1'));
  166. CONT2DJ = MESH2DJ;
  167. SINON;
  168. SI (EGA NTYPE 'RAC2');
  169. CONT2DJ = CHAN LIGNE MESH2DJ;
  170. SINON;
  171. CONT2DJ = CONTOUR MESH2DJ;
  172. FINSI;
  173. FINSI;
  174. SI (&LAB0 EGA 1);
  175. CONT2D = TABLE;
  176. MESH2D = TABLE;
  177. FINSI;
  178. CONT2D.&LAB0 = CONT2DJ;
  179. MESH2D.&LAB0 = MESH2DJ;
  180. TAMOD.((2*&LAB0) - 1) = CONT2DJ;
  181. FIN LAB0;
  182. *------------ fin de Boucle sur les sous-zones ------------
  183. *
  184. * ELIM 0.000001 (MESH2D et CONT2D);
  185. *
  186. OPTI DIME 3 ELEM QUA4;
  187. *
  188. * p00000 = 0. 0. 0.;
  189. * p00001 = 0. 1. 0.;
  190. *
  191. *
  192. MAI3D = TABLE;
  193. MAI3D . 'REDRESSE' = REDRESS;
  194.  
  195. *--------------------- Boucle sur les sous-zones ---------------------
  196.  
  197. REPETER LAB12 (ENTIER (0.5*(DIME TAMOD)));
  198.  
  199. CONT2DJ = TAMOD.((2*&LAB12) - 1);
  200. MESH2D = TAMOD. (2*&LAB12);
  201. SI (EGA &LAB12 1);
  202. MAI3D. 0 = TABLE ;
  203. FINSI;
  204. MAI3D. 0 . &LAB12= MESH2D ;
  205. *
  206. *------------ Boucle sur les secteurs angulaires ------------
  207. *
  208. REPETER LAB1 NTRANCHE;
  209. *
  210. * mess 'Sous domaine et Secteur N°:';
  211. * list &LAB12;
  212. * list &LAB1;
  213. MAI3D. 'ANGLES' = PRANGL;
  214. ANGLAB1 = EXTR PRANGL &LAB1;
  215. *
  216. MESHJ = MESH2D TOUR ANGLAB1 p00000 P00001;
  217. NTYPE = EXTR (MESHJ 'ELEM' TYPE) 1;
  218. SI ((EGA NTYPE 'SEG2') OU (EGA NTYPE 'POI1'));
  219. CON3DJ = MESHJ;
  220. SINON;
  221. SI (EGA NTYPE 'RAC2');
  222. CON3DJ = CHAN LIGNE MESHJ;
  223. SINON;
  224. CON3DJ = CONTOUR MESHJ;
  225. FINSI;
  226. FINSI;
  227. SI (EGA &LAB12 1);
  228. MAI3D. &LAB1 = TABLE;
  229. FINSI;
  230. MAI3D. &LAB1 . &LAB12 = MESHJ;
  231. *
  232. * ELIM 0.000001 (CON3DJ et (MAI3D. &LAB1));
  233. *
  234. SI (EGA &LAB1 1);
  235. SI (EGA &LAB12 1);
  236. MESH3D = MAI3D. 1 . &LAB12;
  237. SINON;
  238. MESH3D = MESH3D ET (MAI3D. 1 . &LAB12);
  239. FINSI;
  240. SINON;
  241. SI ((EGA &LAB1 2) ET (EGA &LAB12 1));
  242. SI (NEG (EXTR (CON3DJ0 ELEM TYPE) 1) POI1);
  243. MAI3D. 'ENVELOPPE' = CON3DJ0 REGLER 1 CON3DJ;
  244. SINON;
  245. MAI3D. 'ENVELOPPE' = CON3DJ0;
  246. FINSI;
  247. SINON;
  248. SI (NEG (EXTR (CON3DJ0 ELEM TYPE) 1) POI1);
  249. MAI3D. 'ENVELOPPE' = (MAI3D. 'ENVELOPPE') ET
  250. (CON3DJ0 REGLER 1 CON3DJ);
  251. SINON;
  252. MAI3D. 'ENVELOPPE' = (MAI3D. 'ENVELOPPE') ET
  253. CON3DJ0;
  254. FINSI;
  255. FINSI;
  256. SI (EGA &LAB1 NTRANCHE);
  257. MESH3D = MESH3D ET (MAI3D. NTRANCHE . &LAB12);
  258. FINSI;
  259. FINSI;
  260. CON3DJ0 = CON3DJ;
  261.  
  262. FIN LAB1;
  263. *------------ fin de Boucle sur les secteurs angulaires ------------
  264.  
  265. FIN LAB12;
  266. *------------------ fin de Boucle sur les sous-zones ------------------
  267.  
  268. MESH3D = MESH3D ET (MAI3D. 'ENVELOPPE');
  269. *
  270. * On range le nouveau maillage 3D
  271. *
  272. MAI3D . 'TOTAL' = MESH3D;
  273. TAB1.'MAILLAGE_3D' = MAI3D;
  274. *
  275. SINON;
  276. MESH3D = TAB1 . 'MAILLAGE_3D' . 'TOTAL';
  277. FINSI;
  278.  
  279.  
  280. ************************************************************************
  281. *
  282. * CHAMPS DE DEPLACEMENT 3D
  283. *
  284. ************************************************************************
  285.  
  286. SI FLAGDEPL;
  287. *
  288. * OPTI DIME 3 MODE FOUR NUMFOUR;
  289. OPTI DIME 3 MODE TRID;
  290. *
  291. * p00000 = 0. 0. 0.;
  292. * p00001 = 0. 1. 0.;
  293. * NTRANCHE = (DIME (TAB1. 'MAILLAGE_3D')) - 4;
  294. NDEP = DIME (TAB1.'DEPLACEMENTS');
  295. PRANGL = TAB1. 'MAILLAGE_3D'. 'ANGLES' ;
  296. *
  297. NZONE = (DIME (TAB1. 'MAILLAGE_3D' . 0));
  298. *
  299. *-----------------------------> BOUCLE SUR LES DEPLACEMENTS
  300. REPETER LAB2 NDEP; i2 = &lab2;
  301.  
  302. *-----------------------------> BOUCLE SUR LES ZONES
  303. REPETER LAB20 NZONE;
  304. MESH2DI = (TAB1. 'MAILLAGE_3D' . 0 . &LAB20 );
  305. *
  306. * LCOMPU = EXTR (TAB1.'DEPLACEMENTS'.i2) 'COMP';
  307. DEP2DJ = REDU TAB1.'DEPLACEMENTS' . i2 MESH2DI;
  308. *bp : afin de truander DEDU ROTA (et toch1.eso),
  309. * il faut des noms de composantes bidon : VR VZ et VT
  310. DEP2DJ = EXCO DEP2DJ MODEPL1 NUMFOUR MODEPL2 'NOID';
  311. *
  312. *.............................> boucle sur les tranches
  313. REPETER LAB21 NTRANCHE;
  314. *
  315. ANGLAB1 = EXTR PRANGL &LAB21;
  316. cosA1 = cos ANGLAB1;
  317. sinA1 = sin ANGLAB1;
  318. ANGLABN = NUMFOUR*ANGLAB1;
  319. cosNA = cos ANGLABN;
  320. sinNA = sin ANGLABN;
  321. MESH2DN = TAB1. 'MAILLAGE_3D' . &LAB21 . &LAB20;
  322.  
  323. DEP3DJJ = DEP2DJ DEDU ANGLAB1 p00000 P00001 'ROTA' MESH2DI MESH2DN;
  324.  
  325. *bp : serie de Fourier
  326. si (ega NUMFOUR 0);
  327. * ici, on considere seulement les ddls symetriques pour n=0
  328. DEP3DJ0 = (EXCO DEP3DJJ 'VR' 'NOID' 'UR' )
  329. + (EXCO DEP3DJJ 'VT' 'NOID' 'UT' )
  330. + (EXCO DEP3DJJ 'VZ' 'NOID' 'UZ' );
  331. sinon;
  332. DEP3DJ0 = ((EXCO DEP3DJJ 'VR' 'NOID' 'UR' )*cosNA)
  333. + ((EXCO DEP3DJJ 'VT' 'NOID' 'UT' )*sinNA)
  334. + ((EXCO DEP3DJJ 'VZ' 'NOID' 'UZ' )*cosNA)
  335. + ((EXCO DEP3DJJ 'IVR' 'NOID' 'IUR')*sinNA)
  336. + ((EXCO DEP3DJJ 'IVT' 'NOID' 'IUT')*cosNA)
  337. + ((EXCO DEP3DJJ 'IVZ' 'NOID' 'IUZ')*sinNA);
  338. finsi;
  339. *bp : changement de repere
  340. si REDRESS;
  341. DEP3DJ1 = ((EXCO DEP3DJ0 'UR' 'NOID' 'UX')*cosA1)
  342. + ((EXCO DEP3DJ0 'UR' 'NOID' 'UY')*sinA1)
  343. - ((EXCO DEP3DJ0 'UT' 'NOID' 'UX')*sinA1)
  344. + ((EXCO DEP3DJ0 'UT' 'NOID' 'UY')*cosA1)
  345. + (EXCO DEP3DJ0 'UZ' 'NOID' 'UZ');
  346. DEP3DJ1 = DEP3DJ1
  347. + ((EXCO DEP3DJ0 'IUR' 'NOID' 'UX')*cosA1)
  348. + ((EXCO DEP3DJ0 'IUR' 'NOID' 'UY')*sinA1)
  349. - ((EXCO DEP3DJ0 'IUT' 'NOID' 'UX')*sinA1)
  350. + ((EXCO DEP3DJ0 'IUT' 'NOID' 'UY')*cosA1)
  351. + (EXCO DEP3DJ0 'IUZ' 'NOID' 'UZ');
  352. sinon;
  353. DEP3DJ1 = ((EXCO DEP3DJ0 'UR' 'NOID' 'UX')*cosA1)
  354. - ((EXCO DEP3DJ0 'UR' 'NOID' 'UZ')*sinA1)
  355. - ((EXCO DEP3DJ0 'UT' 'NOID' 'UX')*sinA1)
  356. - ((EXCO DEP3DJ0 'UT' 'NOID' 'UZ')*cosA1)
  357. + (EXCO DEP3DJ0 'UZ' 'NOID' 'UY');
  358. DEP3DJ1 = DEP3DJ1
  359. + ((EXCO DEP3DJ0 'IUR' 'NOID' 'UX')*cosA1)
  360. - ((EXCO DEP3DJ0 'IUR' 'NOID' 'UZ')*sinA1)
  361. - ((EXCO DEP3DJ0 'IUT' 'NOID' 'UX')*sinA1)
  362. - ((EXCO DEP3DJ0 'IUT' 'NOID' 'UZ')*cosA1)
  363. + (EXCO DEP3DJ0 'IUZ' 'NOID' 'UY');
  364. finsi;
  365. DEP3DJ1 = CHAN 'ATTRIBUT' DEP3DJ1 'NATURE' 'DIFFUS';
  366. SI ((EGA &LAB21 1) et (EGA &LAB20 1));
  367. DEP3DJ = DEP3DJ1;
  368. SINON;
  369. DEP3DJ = DEP3DJ ET DEP3DJ1;
  370. FINSI;
  371. *
  372. FIN LAB21;
  373. *.............................> fin de boucle sur les tranches
  374. *
  375. FIN LAB20;
  376. *-----------------------------> FIN DE BOUCLE SUR LES ZONES
  377. DEP3D.i2 = DEP3DJ;
  378.  
  379. FIN LAB2;
  380. *-----------------------------> FIN DE BOUCLE SUR LES DEPLACEMENTS
  381. *
  382. FINSI;
  383.  
  384.  
  385. ************************************************************************
  386. *
  387. * CHAMPS D'EFFORTS 3D
  388. *
  389. ************************************************************************
  390.  
  391. SI FLAGFOR;
  392. *
  393. * OPTI DIME 3 MODE FOUR NUMFOUR;
  394. OPTI DIME 3 MODE TRID;
  395. *
  396. * p00000 = 0 0 0;
  397. * p00001 = 0 1 0;
  398. * NTRANCHE = (DIME (TAB1. 'MAILLAGE_3D')) - 4;
  399. NFOR = DIME (TAB1.'EFFORTS');
  400. PRANGL = TAB1. 'MAILLAGE_3D'. 'ANGLES' ;
  401. *
  402. NZONE = DIME (TAB1. 'MAILLAGE_3D' . 0);
  403. *
  404. *-----------------------------> BOUCLE SUR LES FORCES
  405. REPETER LAB3 NFOR; i3 = &lab3;
  406.  
  407. *-----------------------------> BOUCLE SUR LES ZONES
  408. REPETER LAB30 NZONE;
  409. MESH2DI = TAB1. 'MAILLAGE_3D' . 0 . &LAB30;
  410. * LCOMPU = EXTR (TAB1.'EFFORTS'.i3) 'COMP';
  411. FOR2DJ = REDU (TAB1.'EFFORTS'.i3) MESH2DI;
  412. *bp : afin de truander DEDU ROTA (et toch1.eso),
  413. * il faut des noms de composantes bidon : VR VZ et VT
  414. FOR2DJ = EXCO FOR2DJ MOFORC1 NUMFOUR MOFORC2 'NOID';
  415. *
  416. *.............................> boucle sur les tranches
  417. REPETER LAB31 NTRANCHE;
  418. *
  419. ANGLAB1 = EXTR PRANGL &LAB31;
  420. ANGLABN = NUMFOUR*ANGLAB1;
  421. MESH2DN = TAB1. 'MAILLAGE_3D' . &LAB31 . &LAB30;
  422.  
  423. FOR3DJJ = FOR2DJ DEDU ANGLAB1 p00000 P00001 'ROTA' MESH2DI MESH2DN;
  424.  
  425. *bp : serie de Fourier
  426. FOR3DJ0 = ((EXCO FOR3DJJ 'VR' 'NOID' 'FR' )*(COS ANGLABN))
  427. + ((EXCO FOR3DJJ 'VT' 'NOID' 'FT' )*(SIN ANGLABN))
  428. + ((EXCO FOR3DJJ 'VZ' 'NOID' 'FZ' )*(COS ANGLABN))
  429. + ((EXCO FOR3DJJ 'IVR' 'NOID' 'IFR')*(SIN ANGLABN))
  430. + ((EXCO FOR3DJJ 'IVT' 'NOID' 'IFT')*(COS ANGLABN))
  431. + ((EXCO FOR3DJJ 'IVZ' 'NOID' 'IFZ')*(SIN ANGLABN));
  432.  
  433. *bp : changement de repere
  434. FOR3DJ1 = ((EXCO FOR3DJ0 'FR' 'NOID' 'FX')*(COS ANGLAB1))
  435. - ((EXCO FOR3DJ0 'FR' 'NOID' 'FZ')*(SIN ANGLAB1))
  436. - ((EXCO FOR3DJ0 'FT' 'NOID' 'FX')*(SIN ANGLAB1))
  437. - ((EXCO FOR3DJ0 'FT' 'NOID' 'FZ')*(COS ANGLAB1))
  438. + (EXCO FOR3DJ0 'FZ' 'NOID' 'FY');
  439. FOR3DJ1 = FOR3DJ1
  440. + ((EXCO FOR3DJ0 'IFR' 'NOID' 'FX')*(COS ANGLAB1))
  441. - ((EXCO FOR3DJ0 'IFR' 'NOID' 'FZ')*(SIN ANGLAB1))
  442. - ((EXCO FOR3DJ0 'IFT' 'NOID' 'FX')*(SIN ANGLAB1))
  443. - ((EXCO FOR3DJ0 'IFT' 'NOID' 'FZ')*(COS ANGLAB1))
  444. + (EXCO FOR3DJ0 'IFZ' 'NOID' 'FY');
  445.  
  446. FOR3DJ1 = CHAN 'ATTRIBUT' FOR3DJ1 'NATURE' 'DISCRET';
  447. SI ((EGA &LAB31 1) et (EGA &LAB30 1));
  448. FOR3DJ = FOR3DJ1;
  449. SINON;
  450. FOR3DJ = FOR3DJ ET FOR3DJ1;
  451. FINSI;
  452. *
  453. FIN LAB31;
  454. *.............................> fin de boucle sur les tranches
  455.  
  456. FIN LAB30;
  457. *-----------------------------> FIN DE BOUCLE SUR LES ZONES
  458. FOR3D.i3 = FOR3DJ;
  459. *
  460. FIN LAB3;
  461. *-----------------------------> FIN DE BOUCLE SUR LES FORCES
  462. *
  463. FINSI;
  464.  
  465.  
  466. ************************************************************************
  467. *
  468. * CHPO 3D QUELCONQUES - PRESSION, EPAISSEUR... - CAS SYMETRIQUE
  469. *
  470. ************************************************************************
  471.  
  472. SI (FLAGCHPS);
  473. *
  474. * OPTI DIME 3 MODE FOUR NUMFOUR;
  475. OPTI DIME 3 MODE TRID;
  476. *
  477. * p00000 = 0 0 0;
  478. * p00001 = 0 1 0;
  479. * NTRANCHE = (DIME (TAB1. 'MAILLAGE_3D')) - 4;
  480. NCHPS = DIME (TAB1.'CHAMPS_POINTS_SYMETRIQUES');
  481. PRANGL = TAB1. 'MAILLAGE_3D'. 'ANGLES' ;
  482. *
  483. NZONE = DIME (TAB1. 'MAILLAGE_3D' . 0);
  484. *
  485. *-----------------------------> BOUCLE SUR LES CHPO
  486. REPETER LAB3 NCHPS; i3 = &lab3;
  487.  
  488. LCOMPU = EXTR (TAB1.'CHAMPS_POINTS_SYMETRIQUES'.i3) 'COMP';
  489. CHP2DJ0 = EXCO TAB1.'CHAMPS_POINTS_SYMETRIQUES'.i3 LCOMPU NUMFOUR;
  490.  
  491. *-----------------------------> BOUCLE SUR LES ZONES
  492. REPETER LAB30 NZONE;
  493. *
  494. MESH2DI = TAB1. 'MAILLAGE_3D' . 0 . &LAB30;
  495.  
  496. * OPTI MODE FOUR NUMFOUR;
  497. CHP2DJ = REDU CHP2DJ0 MESH2DI;
  498. * OPTI MODE TRID;
  499. *
  500. *.............................> boucle sur les tranches
  501. REPETER LAB31 NTRANCHE;
  502. *
  503. ANGLAB1 = EXTR PRANGL &LAB31;
  504. ANGLABN = NUMFOUR*ANGLAB1;
  505. MESH2DN = TAB1. 'MAILLAGE_3D' . &LAB31 . &LAB30;
  506.  
  507. CHP3DJJ = CHP2DJ DEDU ANGLAB1 p00000 P00001 'ROTA' MESH2DI MESH2DN;
  508.  
  509. *bp : serie de Fourier
  510. CHP3DJ1 = CHP3DJJ * (COS ANGLABN);
  511. CHP3DJ1 = CHAN 'ATTRIBUT' CHP3DJ1 'NATURE' 'DIFFUS';
  512. *
  513. SI ((EGA &LAB31 1) et (EGA &LAB30 1));
  514. CHP3DJ = CHP3DJ1;
  515. SINON;
  516. CHP3DJ = CHP3DJ ET CHP3DJ1;
  517. FINSI;
  518. *
  519. FIN LAB31;
  520. *.............................> fin de boucle sur les tranches
  521. *
  522. FIN LAB30;
  523. *-----------------------------> FIN DE BOUCLE SUR LES ZONES
  524. *
  525. CHS3D.i3 = CHP3DJ;
  526. FIN LAB3;
  527. *-----------------------------> FIN DE BOUCLE SUR LES CHPO
  528. *
  529. FINSI;
  530.  
  531.  
  532. ************************************************************************
  533. *
  534. * CHPO 3D QUELCONQUES - PRESSION, EPAISSEUR... - CAS ANTISYMETRIQUE
  535. *
  536. ************************************************************************
  537.  
  538. SI FLAGCHPA;
  539. *
  540. * OPTI DIME 3 MODE FOUR NUMFOUR;
  541. OPTI DIME 3 MODE TRID;
  542. *
  543. * p00000 = 0 0 0;
  544. * p00001 = 0 1 0;
  545. * NTRANCHE = (DIME (TAB1. 'MAILLAGE_3D')) - 4;
  546. NCHPA = DIME (TAB1.'CHAMPS_POINTS_ANTISYMETRIQUES');
  547. PRANGL = TAB1. 'MAILLAGE_3D'. 'ANGLES' ;
  548. *
  549. NZONE = DIME (TAB1. 'MAILLAGE_3D' . 0);
  550. *
  551. *-----------------------------> BOUCLE SUR LES CHPO
  552. REPETER LAB3 NCHPA; i3 = &lab3;
  553.  
  554. LCOMPU = EXTR (TAB1.'CHAMPS_POINTS_ANTISYMETRIQUES'.i3) 'COMP';
  555. CHP2DJ0 = EXCO TAB1.'CHAMPS_POINTS_ANTISYMETRIQUES'.i3 LCOMPU NUMFOUR;
  556. *
  557. *-----------------------------> BOUCLE SUR LES ZONES
  558. REPETER LAB30 NZONE;
  559. *
  560. MESH2DI = TAB1. 'MAILLAGE_3D' . 0 . &LAB30;
  561. * OPTI MODE FOUR NUMFOUR;
  562. CHP2DJ = REDU CHP2DJ0 MESH2DI;
  563. * OPTI MODE TRID;
  564. *
  565. *.............................> boucle sur les tranches
  566. REPETER LAB31 NTRANCHE;
  567. *
  568. ANGLAB1 = EXTR PRANGL &LAB31;
  569. ANGLABN = NUMFOUR*ANGLAB1;
  570. MESH2DN = TAB1. 'MAILLAGE_3D' . &LAB31 . &LAB30;
  571.  
  572. CHP3DJJ = CHP2DJ DEDU ANGLAB1 p00000 P00001 'ROTA' MESH2DI MESH2DN;
  573.  
  574. *bp : serie de Fourier
  575. CHP3DJ1 = CHP3DJJ * (COS ANGLABN);
  576. CHP3DJ1 = CHAN 'ATTRIBUT' CHP3DJ1 'NATURE' 'DIFFUS';
  577. *
  578. SI ((EGA &LAB31 1) et (EGA &LAB30 1));
  579. CHP3DJ = CHP3DJ1;
  580. SINON;
  581. CHP3DJ = CHP3DJ ET CHP3DJ1;
  582. FINSI;
  583. *
  584. FIN LAB31;
  585. *.............................> fin de boucle sur les tranches
  586. *
  587. FIN LAB30;
  588. *-----------------------------> FIN DE BOUCLE SUR LES ZONES
  589. *
  590. CHA3D.i3 = CHP3DJ;
  591. FIN LAB3;
  592. *-----------------------------> FIN DE BOUCLE SUR LES CHPO
  593. *
  594. FINSI;
  595.  
  596.  
  597. ************************************************************************
  598. * TODO : IL MANQUE LES CHAMPS DE CONTRAINTES ET DE DEFORMATIONS.....
  599. ************************************************************************
  600.  
  601.  
  602. ************************************************************************
  603. *
  604. * RANGEMENT SI NECESSAIRE
  605. *
  606. ************************************************************************
  607.  
  608. * On stocke les resultats sur le maillage 3D
  609. *
  610. SI FLAGDEPL;
  611. TAB1.'DEPLACEMENTS_3D' = DEP3D;
  612. FINSI;
  613. *
  614. SI FLAGFOR;
  615. TAB1.'EFFORTS_3D' = FOR3D;
  616. FINSI;
  617. *
  618. SI FLAGCHPS;
  619. TAB1.'CHAMPS_POINTS_SYME_3D' = CHS3D;
  620. FINSI;
  621. *
  622. SI FLAGCHPS;
  623. TAB1.'CHAMPS_POINTS_ANTI_3D' = CHA3D;
  624. FINSI;
  625. *
  626. 'FINPROC' MESH3D;
  627. *
  628.  
  629.  
  630.  
  631.  
  632.  
  633.  

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