Télécharger postvibr.procedur

Retour à la liste

Numérotation des lignes :

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

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