Télécharger postvibr.procedur

Retour à la liste

Numérotation des lignes :

  1. * POSTVIBR PROCEDUR BP208322 20/04/28 21:15:23 10591
  2. *=======================================================
  3. *
  4. * POSTVIBR
  5. * VISUalisation selon le mot cle :
  6. * 'TABL' : ecrit le tableau des donnees d'une base modale
  7. * 'DEFO' : trace les deformees modales
  8. * 'DEF0' : trace du maillage non deforme
  9. * 'VTK' : sortie du maillage + deformees
  10. * 'LIST' : creation des listchpo des deformees, des listreel des
  11. * frequences, des masses generalisees...
  12. * 'MAIL' : creation du maillage des point_repere
  13. * creation : BP 06/01/2015
  14. *
  15. *=======================================================
  16.  
  17.  
  18. DEBPROC POSTVIBR TBAS1*'TABLE' LMOC1/'LISTMOTS' TOPT1/'TABLE' ;
  19.  
  20.  
  21. * TBAS1 : table de type BASE_MODALE ou LIAISONS_STATIQUES
  22. * LMOC1 : mots-cles definissant les actions a produire
  23. * TOPT1 : table d'options contenant :
  24. * . 'LISTE_MODES' : liste des modes a traiter
  25. * . 'MAILLAGE' : maillage sur lequel tracer les deformees
  26. * . 'TITRE' : debut de titre lors du trace des deformees
  27. * . 'FICHIER_VTK' : repertoire + nom de fichier de sortie VTK
  28. * . 'MAILLAGE_2' : maillage supplementaire a utiliser (ex: ARET)
  29. * . 'MAILLAGE_VECTEUR' : maillage support de vecteur a afficher
  30.  
  31.  
  32. * VERIF et RECUP DES DONNEES D'ENTREE ----------------------------------
  33.  
  34. * TABLE DES MODES
  35.  
  36. SI (NON (EXIS TBAS1 'SOUSTYPE'));
  37. MESS 'LA TABLE D ENTREE DOIT AVOIR UN SOUSTYPE !';
  38. ERRE 21;
  39. FINSI;
  40. FLBMOD = EGA TBAS1 . 'SOUSTYPE' 'BASE_DE_MODES';
  41. FLMODA = EGA TBAS1 . 'SOUSTYPE' 'BASE_MODALE';
  42. FLSTAT = EGA TBAS1 . 'SOUSTYPE' 'LIAISONS_STATIQUES';
  43. SI ((NON FLBMOD) ET (NON FLMODA) ET (NON FLSTAT));
  44. MESS 'LA TABLE D ENTREE DOIT ETRE DE SOUSTYPE ';
  45. 'BASE_DE_MODES ou BASE_MODALE ou LIAISONS_STATIQUES !';
  46. ERRE 21;
  47. FINSI;
  48.  
  49. SI (FLMODA);
  50. TMOD1 = TBAS1 . 'MODES';
  51. SI (NEG TMOD1 . 'SOUSTYPE' 'BASE_DE_MODES');
  52. MESS 'L INDICE MODES DE LA TABLE D ENTREE DOIT ETRE DE SOUSTYPE '
  53. 'BASE_DE_MODES !';
  54. ERRE 21;
  55. FINSI;
  56. nmod1 = (DIME TMOD1) - 2;
  57. SINON;
  58. TMOD1 = TBAS1;
  59. nmod1 = (DIME TMOD1) - 1;
  60. FINSI;
  61. SI (nmod1 < 1);
  62. MESS 'ABSENCE DE MODES !';
  63. QUIT POSTVIBR;
  64. FINSI;
  65. nbou1 = nmod1;
  66.  
  67.  
  68. * LISTE DES MOTS-CLES
  69.  
  70. * valeurs par defaut
  71. SI (NON (EXIS LMOC1));
  72. LMOC1 = MOTS 'TABL' 'DEFO' 'DEF0' 'MAIL';
  73. FINSI;
  74.  
  75. * logiques
  76. FLTABL = EXIS LMOC1 'TABL';
  77. FLDEFO = EXIS LMOC1 'DEFO';
  78. * attention DEF0 avec "zero" et pas DEFO avec un "o"
  79. FLDEF0 = EXIS LMOC1 'DEF0';
  80. FLVTK = EXIS LMOC1 'VTK';
  81. FLLIST = EXIS LMOC1 'LIST';
  82. FLMAIL = EXIS LMOC1 'MAIL';
  83. FLNOLX = EXIS LMOC1 'NOLX';
  84.  
  85.  
  86. * TABLE DES OPTIONS
  87.  
  88. * valeurs par defaut
  89. LENT1 = LECT 1 'PAS' 1 nmod1;
  90. SI (EXIS TMOD1 'MAILLAGE');
  91. MESH1 = TMOD1 . 'MAILLAGE';
  92. FINSI;
  93. cha20 = mot ' ';
  94. * ficvtk = mot 'VTK/DEFORMEE_MODALE';
  95. ficvtk = mot 'DEFORMEE_MODALE';
  96.  
  97. * on recupere tout ce qu'on peut si la table existe vraiment
  98. FLOPT1 = FAUX;
  99. FMESH2 = FAUX;
  100. FMESHvect = FAUX;
  101. SI (EXIS TOPT1); FLOPT1 = EGA (TYPE TOPT1) 'TABLE'; FINSI;
  102. SI FLOPT1;
  103. SI (EXIS TOPT1 'LISTE_MODES');
  104. LENT1 = TOPT1 . 'LISTE_MODES';
  105. nbou1 = DIME LENT1;
  106. FINSI;
  107. SI (EXIS TOPT1 'MAILLAGE');
  108. MESH1 = TOPT1 . 'MAILLAGE';
  109. FINSI;
  110. SI (EXIS TOPT1 'MAILLAGE_2');
  111. MESH2 = TOPT1 . 'MAILLAGE_2';
  112. FMESH2 = EGA (TYPE MESH2) 'MAILLAGE';
  113. FINSI;
  114. SI (EXIS TOPT1 'MAILLAGE_VECTEUR');
  115. MESHvect = TOPT1 . 'MAILLAGE_VECTEUR';
  116. FMESHvect = (EGA (TYPE MESHvect) 'MAILLAGE')
  117. ou (EGA (TYPE MESHvect) 'POINT');
  118. FINSI;
  119. SI (EXIS TOPT1 'TITRE');
  120. cha20 = TOPT1 . 'TITRE';
  121. FINSI;
  122. SI (EXIS TOPT1 'FICHIER_VTK');
  123. ficvtk = TOPT1 . 'FICHIER_VTK';
  124. FINSI;
  125. FINSI;
  126.  
  127. * eventuelles erreurs
  128. SI (NEG (TYPE LENT1) 'LISTENTI');
  129. MESS 'VEUILLEZ FOURNIR UN LISTENTI POUR LISTE_MODES !'; ERRE 21;
  130. FINSI;
  131. SI (NEG (TYPE MESH1) 'MAILLAGE');
  132. MESS 'VEUILLEZ FOURNIR UN MAILLAGE !'; ERRE 21;
  133. FINSI;
  134. * ajout de UNIQ pour le cas des mulitcouches
  135. MESH1 = UNIQ MESH1;
  136. SI (NEG (TYPE cha20) 'MOT');
  137. MESS 'VEUILLEZ FOURNIR UN MOT POUR TITRE !'; ERRE 21;
  138. FINSI;
  139. SI (NEG (TYPE ficvtk) 'MOT');
  140. MESS 'VEUILLEZ FOURNIR UN MOT POUR FICHIER_VTK !'; ERRE 21;
  141. FINSI;
  142.  
  143.  
  144.  
  145. * PREPARATION ----------------------------------------------------------
  146.  
  147. * recup des noms de composantes
  148. idime = VALE 'DIME' ;
  149. momode = VALE 'MODE' ;
  150. si (ega idime 3);
  151. modepl = mots 'UX' 'UY' 'UZ';
  152. modeplI= mots 'IUX' 'IUY' 'IUZ';
  153. sinon;
  154. si ((ega momode 'AXIS') ou (ega momode 'FOUR'));
  155. modepl = mots 'UR' 'UT' 'UZ';
  156. modeplI= mots 'IUR' 'IUT' 'IUZ';
  157. sinon;
  158. modepl = mots 'UX' 'UY' '--';
  159. modeplI= mots 'IUX' 'IUY' '--';
  160. finsi;
  161. finsi;
  162. modeplC = modepl et modeplI;
  163. modepl1 = extr modepl 1;
  164. modepl2 = extr modepl 2;
  165. modepl3 = extr modepl 3;
  166. modeplI1= extr modeplI 1;
  167. modeplI2= extr modeplI 2;
  168. modeplI3= extr modeplI 3;
  169.  
  170. * --- dans le cas TABL ---
  171. SI FLTABL;
  172. SI (FLMODA ou FLBMOD);
  173. chaline = chai
  174. '+------+--------------+--------------+--------------+'
  175. '----------------------------------------+';
  176. mess chaline;
  177.  
  178. MESS '| Mode | Frequence | Masse gen. | POINT_REPERE |'
  179. ' ||U||_2 |';
  180. MESS '| n° | (Hz) | M* | (ddl ALFA) |'
  181. modepl1*63 modepl2*76 modepl3*89 '|'*95;
  182. mess chaline;
  183. SINON;
  184. chaline = chai
  185. '+------+-------------+----------------+--------------+';
  186. mess chaline;
  187. MESS '| Ustat| Deplacement unitaire impose | POINT_REPERE |';
  188. MESS '| n° | ddl | noeud | (ddl BETA) |';
  189. mess chaline;
  190. FINSI;
  191. FINSI;
  192.  
  193. * --- dans le cas DEFO ---
  194. SI FLDEFO;
  195.  
  196. * calcul d'une longueur caracteristique
  197. si (ega idime 3);
  198. XC0 YC0 ZC0 = COOR MESH1 ;
  199. XA0 = (MAXI XC0) - (MINI XC0) ;
  200. YA0 = (MAXI YC0) - (MINI YC0) ;
  201. ZA0 = (MAXI ZC0) - (MINI ZC0) ;
  202. AMPL0 = ((XA0**2) + (YA0**2) + (ZA0**2))**0.5 ;
  203. sinon;
  204. XC0 YC0 = COOR MESH1 ;
  205. XA0 = (MAXI XC0) - (MINI XC0) ;
  206. YA0 = (MAXI YC0) - (MINI YC0) ;
  207. AMPL0 = ((XA0**2) + (YA0**2))**0.5 ;
  208. finsi;
  209. FINSI;
  210.  
  211. * --- dans le cas LIST ---
  212. SI FLLIST;
  213. LCHPO1 = SUIT;
  214. LFREQ1 = PROG;
  215. LMGEN1 = PROG;
  216. FINSI;
  217.  
  218. * --- dans le cas MAIL ---
  219. SI FLMAIL;
  220. MESHAB = MANU 'POI1';
  221. FINSI;
  222.  
  223.  
  224.  
  225. * BOUCLE SUR LES MODES ----------------------------------
  226.  
  227. imod1 = 0;
  228. REPE BMOD1 nbou1; imod1 = imod1 + 1;
  229.  
  230.  
  231. * --- RECUP DES DONNEEES DU MODE ---
  232.  
  233. i1 = extr LENT1 imod1;
  234. SI (NON (EXIS TMOD1 i1));
  235. ITER BMOD1;
  236. FINSI;
  237. FLI = FAUX;
  238. iux1 = mot ' --- ';
  239. iuy1 = mot ' --- ';
  240. iuz1 = mot ' --- ';
  241. SI (FLMODA ou FLBMOD);
  242. si (exis TMOD1 . i1 'NUMERO_MODE');
  243. num1 = TMOD1 . i1 . 'NUMERO_MODE';
  244. sino;
  245. num1 = i1;
  246. finsi;
  247. * cas valeur propre complexe
  248. FLCPLX = EXIS TMOD1 . i1 'FREQUENCE_REELLE';
  249. si FLCPLX;
  250. frq1R = TMOD1 . i1 . 'FREQUENCE_REELLE';
  251. mas1R = TMOD1 . i1 . 'MASSE_GENERALISEE_REELLE';
  252. phi1R = TMOD1 . i1 . 'DEFORMEE_MODALE_REELLE';
  253. frq1I = TMOD1 . i1 . 'FREQUENCE_IMAGINAIRE';
  254. mas1I = TMOD1 . i1 . 'MASSE_GENERALISEE_IMAGINAIRE';
  255. phi1I = TMOD1 . i1 . 'DEFORMEE_MODALE_IMAGINAIRE';
  256. afrq1 = (abs frq1R) + (abs frq1I);
  257. amas1 = (abs mas1R) + (abs mas1I);
  258. * petite ruse pour l affichage
  259. phi1 = (EXCO phi1R modepl modepl 'NOID' 'NATURE' 'DIFFUS')
  260. et (EXCO phi1I modepl modeplI 'NOID' 'NATURE' 'DIFFUS');
  261. frq1 = frq1R;
  262. mas1 = mas1R;
  263. * cas valeur propre reelle
  264. sinon;
  265. frq1 = TMOD1 . i1 . 'FREQUENCE' ;
  266. mas1 = TMOD1 . i1 . 'MASSE_GENERALISEE';
  267. phi1 = TMOD1 . i1 . 'DEFORMEE_MODALE';
  268. afrq1 = abs frq1;
  269. amas1 = abs mas1;
  270. finsi;
  271. *bp2019 rphi1 = RESU phi1;
  272. *bp2019 on prefere une mesure euclidienne
  273. rphi1 = (RESU (phi1**2))**0.5;
  274. morphi1= EXTR rphi1 'COMP';
  275. prphi1 = EXTR rphi1 'MAILLAGE';
  276. * on verifie la compatibilite des noms d'inconnues
  277. FLPHI1 = ((DIME morphi1) > 0) ET ((NBEL prphi1) > 0);
  278. SI FLPHI1;
  279. prphi1 = prphi1 POIN 'INITIAL';
  280. ux1 = EXTR rphi1 modepl1 prphi1;
  281. uy1 = EXTR rphi1 modepl2 prphi1;
  282. si (ega modepl3 '--'); uz1 = mot '--';
  283. sinon; uz1 = EXTR rphi1 modepl3 prphi1;
  284. finsi;
  285. si (exis morphi1 modeplI1);
  286. FLI = VRAI; iux1 = EXTR rphi1 modeplI1 prphi1;
  287. finsi;
  288. si (exis morphi1 modeplI2);
  289. FLI = VRAI; iuy1 = EXTR rphi1 modeplI2 prphi1;
  290. finsi;
  291. si (exis morphi1 modeplI3);
  292. FLI = VRAI; iuz1 = EXTR rphi1 modeplI3 prphi1;
  293. finsi;
  294. SINON;
  295. ux1 = mot ' --- '; uy1 = ux1; uz1 = ux1;
  296. FINSI;
  297. OUBL prphi1; DETR rphi1;
  298. SINON;
  299. num1 = i1;
  300. ptl1 = TMOD1 . i1 . 'POINT_LIAISON';
  301. iptl1 = NOEU ptl1;
  302. ddl1 = TMOD1 . i1 . 'DDL_LIAISON';
  303. phi1 = TMOD1 . i1 . 'DEFORMEE';
  304. FINSI;
  305. prep1 = TMOD1 . i1 . 'POINT_REPERE';
  306. iprep1 = NOEU prep1;
  307.  
  308. * --- option TABLEAU ---
  309.  
  310. SI FLTABL;
  311. * cas base de modes propres
  312. SI (FLMODA ou FLBMOD);
  313. si ((afrq1 < 10000.) et (afrq1 > 1.E-3)); FMT1 = mot '(F13.4)';
  314. sinon; FMT1 = mot '(E13.6)';
  315. finsi;
  316. si ((amas1 < 10000.) et (amas1 > 1.E-3)); FMT2 = mot '(F13.4)';
  317. sinon; FMT2 = mot '(E13.6)';
  318. finsi;
  319. FMT3 = mot '(F13.4)';
  320. cha1 = CHAI '|' num1 *6 ' |'
  321. FORMAT FMT1 frq1 ' |'
  322. FORMAT FMT2 mas1 ' |'
  323. iprep1 *50 ' |'
  324. FORMAT FMT3 ux1 uy1 uz1 ' |';
  325. mess cha1;
  326. * cas valeur propre complexe
  327. si FLCPLX;
  328. cha1I = CHAI '|' ' ' *6 '+i'
  329. FORMAT FMT1 frq1I ' |'
  330. FORMAT FMT2 mas1I ' |'
  331. ' ' *50 ' |'
  332. FORMAT FMT3 iux1 iuy1 iuz1 ' |';
  333. mess cha1I;
  334. sinon;
  335. * composantes complexes
  336. SI FLI;
  337. cha1I = CHAI '|' ' ' *50 ' |'
  338. FORMAT FMT3 iux1 iuy1 iuz1 ' |';
  339. mess cha1I;
  340. FINSI;
  341. finsi;
  342. * cas base de modes statiques
  343. SINON;
  344. cha1 = CHAI '|' num1 *6 ' |'
  345. ddl1 *17 ' |'
  346. iptl1 *32 ' |'
  347. iprep1 *50 ' |';
  348. mess cha1;
  349. FINSI;
  350. FINSI;
  351.  
  352. * --- option DEFORMEE ---
  353.  
  354. SI FLDEFO;
  355.  
  356. AMPU1 = MAXI (EXCO modeplC phi1 'NOID') 'ABS';
  357. SI (EXIS TMOD1 . i1 'ISOVALEUR');
  358. UNORM1 = TMOD1 . i1 . 'ISOVALEUR';
  359. SI (NEG (TYPE UNORM1) 'CHPOINT');
  360. MESS 'ISOVALEUR du 'i1'eme mode doit etre un CHPOINT !';
  361. ERRE 21;
  362. FINSI;
  363. SINON;
  364. UNORM1 = (PSCA phi1 phi1 modeplC modeplC)**0.5;
  365. TMOD1 . i1 . 'ISOVALEUR' = UNORM1;
  366. FINSI;
  367. SI (AMPU1 < 1.E-100);
  368. DEFO1 = DEFO MESH1 phi1 UNORM1;
  369. SINON;
  370. XAMP1 = 0.05 * (AMPL0 / AMPU1) ;
  371. SI FMESHvect;
  372. UVECT = REDU phi1 MESHvect;
  373. VECT1 = VECT UVECT (-1.*XAMP1) 'DEPL';
  374. DEFO1 = DEFO MESH1 phi1 XAMP1 VECT1 UNORM1;
  375. SINON;
  376. DEFO1 = DEFO MESH1 phi1 XAMP1 UNORM1;
  377. FINSI;
  378. FINSI;
  379. SI (FLDEF0) ;
  380. * DEFO1 = (DEFO MESH1 phi1 0 'GRIS' (0.*UNORM1)) et DEFO1;
  381. DEFO1 = (DEFO MESH1 phi1 0 'GRIS') et DEFO1;
  382. FINSI;
  383. SI (FLMODA ou FLBMOD);
  384. cha2 = CHAI cha20 'Mode ' num1 ' : f=' frq1 'Hz';
  385. SINON;
  386. cha2 = CHAI cha20 ' Ustat ' num1 ' : ' ddl1 '(#' iptl1 ')=1';
  387. FINSI;
  388. SI FMESH2;
  389. TRAC DEFO1 MESH2 'TITRE' cha2 'NOLE';
  390. SINON;
  391. TRAC DEFO1 'TITRE' cha2 'NOLE';
  392. FINSI;
  393.  
  394. FINSI;
  395.  
  396. * --- option LISTES ---
  397.  
  398. SI FLLIST;
  399. LCHPO1 = LCHPO1 et phi1;
  400. LFREQ1 = LFREQ1 et frq1;
  401. SI (FLMODA ou FLBMOD); LMGEN1 = LMGEN1 et mas1; FINSI;
  402. FINSI;
  403.  
  404. * --- option MAILLAGE ---
  405. SI FLMAIL;
  406. MESHAB = MESHAB et prep1;
  407. FINSI;
  408.  
  409. * --- option NOLX ---
  410. SI FLNOLX;
  411. SI (FLMODA ou FLBMOD);
  412. TMOD1 . i1 . 'DEFORMEE_MODALE' = phi1 ENLE 'LX';
  413. SINON;
  414. TMOD1 . i1 . 'DEFORMEE' = phi1 ENLE 'LX';
  415. FINSI;
  416. FINSI;
  417.  
  418. * --- option VTK ---
  419. SI FLVTK;
  420. OPTI 'SORT' ficvtk;
  421. SI FLI;
  422. SORT 'VTK' MESH1 'MAIL'
  423. (EXCO phi1 modepl) 'DEPL_R'
  424. (EXCO phi1 modeplI modepl) 'DEPL_I'
  425. 'TEMP' (FLOT i1) ;
  426. SINON;
  427. SORT 'VTK' MESH1 'MAIL'
  428. (EXCO phi1 modepl) 'DEPL'
  429. 'TEMP' (FLOT i1) ;
  430. FINSI;
  431. FINSI;
  432.  
  433. FIN BMOD1;
  434.  
  435.  
  436. SI FLTABL;
  437. mess chaline;
  438. FINSI;
  439.  
  440. SI FLLIST;
  441. TBAS1 . 'LISTE_DEFORMEES' = LCHPO1;
  442. TBAS1 . 'LISTE_FREQUENCES' = LFREQ1;
  443. SI (FLMODA ou FLBMOD); TBAS1 . 'LISTE_MASSES' = LMGEN1; FINSI;
  444. FINSI;
  445.  
  446. SI FLMAIL;
  447. TBAS1 . 'MAILLAGE_REPERE' = MESHAB;
  448. FINSI;
  449.  
  450. FINPROC;
  451.  
  452.  
  453.  
  454.  
  455.  
  456.  

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