Télécharger hbm_duffing_mu.dgibi

Retour à la liste

Numérotation des lignes :

  1. * fichier : hbm_duffing_mu.dgibi
  2. ******************************************************************
  3. *
  4. * Systeme a un degre de liberte
  5. *
  6. * Oscillateur de Duffing calcule en k harmoniques :
  7. *
  8. * m*x'' + c*x' + k*x + a*x^3 = f*cos(w*t)
  9. *
  10. * Continuation + HBM + AFT
  11. *
  12. ******************************************************************
  13.  
  14. *-----------------------------------------------------------------------
  15. * CHARMECA.PROCEDUR
  16. * Calcul de la force non lineaire fnl(x,t) et de sa derivee dfnl(x,t)/dx
  17. * dans le domaine temporel
  18. *-----------------------------------------------------------------------
  19. *
  20. * EN ENTREE :
  21. *
  22. * TAB1
  23. * >> parametres génériques :
  24. * . 'DEP_NL' : LISTCHPO DE DEPLACEMENTS TEMPORELLES
  25. * ou (pas encore programmé)
  26. * . i . 'CHPOINT' = CHPOINT unitaire des deplacements NL
  27. * . i . 'LISTREEL' = evolution temporelle coefficient du chpoint
  28. * >> parametres propres a ce cas test :
  29. * . 'COEFF_FNL' : coefficient de non linearite
  30. * . 'POINT_FNL' : point de non linearite
  31. * . 'COMP_FNL' : composante de non linearite
  32. *
  33. *
  34. * EN SORTIE :
  35. *
  36. * TAB1
  37. * >> parametres génériques :
  38. * . 'FNL_T' : LISTCHPO DES FORCES NON LINEAIRES TEMPORELLES
  39. * ou TABLE d'indice : (pas encore programmé)
  40. * . i . 'CHPOINT' = CHPOINT unitaire des forces non lineaires
  41. * . i . 'LISTREEL' = evolution temporelle coefficient du chpoint
  42. * . 'KNL_T' : DERIVEE DE FORCES NON LINEAIRES sous forme de TABLE :
  43. * . i . j = 'LISTREEL' evolution temporelle de dFi/dxj
  44. *
  45. *-----------------------------------------------------------------------
  46. DEBPROC CHARMECA TAB1*'TABLE';
  47.  
  48. ******** parametres d'entree propres a ce cas test **********
  49.  
  50. * parametre de continuation
  51. time = TAB1 . 'TIME';
  52.  
  53. *coefficient de la force nl
  54. SI (exis TAB1 . 'COEFF_FNL');
  55. ALev = TAB1 . 'COEFF_FNL';
  56. al = IPOL ALev time;
  57. SINON;
  58. AL = 0.;
  59. MESS 'CHARMECA: PAS D EFFET NON LINEAIRE !';
  60. FINSI;
  61.  
  62. SI (EXIS TAB1 . 'POINT_FNL');
  63. pNL = TAB1 . 'POINT_FNL';
  64. SINON;
  65. MESS 'CHARMECA: IL MANQUE LA GEOMETRIE NL dans POINT_FNL'; ERRE 21;
  66. FINSI;
  67.  
  68. SI (EXIS TAB1 . 'COMP_FNL');
  69. COMP_FNL = TAB1 . 'COMP_FNL';
  70. n_CNL = DIME COMP_FNL;
  71. SINON;
  72. MESS 'CHARMECA: IL MANQUE LA COMPOSANTE NL dans COMP_FNL'; ERRE 21;
  73. FINSI;
  74.  
  75. ******** parametres d'entree génériques **********
  76.  
  77. *DEPNL : list de champ par points, deplacements temporels du point nl
  78. *
  79. SI (EXIS TAB1 'DEP_NL');
  80. DEPNL = TAB1 . 'DEP_NL';
  81. IFCHPO = ega (type DEPNL) 'LISTCHPO';
  82. si (non IFCHPO);
  83. si (neg (type DEPNL) 'TABLE');
  84. mess 'CHARMECA: DEP_NL doit etre de type LISTCHPO ou TABLE';
  85. ERRE 21;
  86. sinon;
  87. si (neg (type DEPNL . 1) 'LISTREEL');
  88. mess 'CHARMECA: DEP_NL . i doit etre un LISTREEL';
  89. ERRE 21;
  90. finsi;
  91. finsi;
  92. finsi;
  93. SINON;
  94. MESS 'CHARMECA: IL MANQUE LA LISTE DES DEPLACEMENTS dans DEP_NL';
  95. ERRE 21;
  96. FINSI;
  97.  
  98. * calcul de fnl ET dfnl/dx ? dans le doute on calcule tout...
  99. SI (NEG (TYPE IFFNL ) 'LOGIQUE'); IFFNL = VRAI; FINSI;
  100. SI (NEG (TYPE IFKNL) 'LOGIQUE'); IFKNL = VRAI; FINSI;
  101.  
  102.  
  103.  
  104. ******** Calcul de FNL ********
  105.  
  106. *---------------- Cas DEPNL LISTCHPO
  107. SI IFCHPO;
  108.  
  109. * preparation des donnees de sortie
  110. FNLTEMP = VIDE 'LISTCHPO';
  111. FNLm = prog;
  112. KNLp = prog;
  113. CNL = EXTR COMP_FNL 1;
  114.  
  115. * nbt : nombre de pas de temps
  116. nbt = DIME DEPNL;
  117. ib = 0;
  118. REPE BFOR nbt; ib = ib + 1;
  119.  
  120. DEP_ib = extr DEPNL ib;
  121. DEP_i = DEP_ib ;
  122. FNL_i = -1.*al* (DEP_i **3) ;
  123. FNLTEMP = FNLTEMP et FNL_i;
  124. FNLm = FNLm et (MAXI FNL_i 'ABS');
  125.  
  126. * pour le Calcul de DFNL :
  127. SI (IFKNL);
  128. xDEP_i = extr DEP_i pNL CNL;
  129. KNLp = KNLp et (3.*al* (xDEP_i **2));
  130. FINSI;
  131.  
  132. FIN BFOR;
  133. FNLmax = maxi (ABS FNLm);
  134.  
  135. *---------------- Cas DEPNL TABLE de LISTREEL
  136. SINON;
  137.  
  138. * DEPNL : table de listreel, indicée par les ddls NL
  139.  
  140. * nbt : nombre de pas de temps
  141. nbt = DIME DEPNL . 1;
  142. ib = 0;
  143. FNLTEMP = TABLE; FNLTEMP . 1 = PROG;
  144. KNLp = prog;
  145. REPE bfor nbt; ib = ib + 1;
  146. DEP_i0 = EXTR DEPNL . 1 ib;
  147. DEP_i = DEP_i0 ;
  148. FNLTEMP . 1 = FNLTEMP . 1 et (-1.*al* (DEP_i **3));
  149. SI (IFKNL);
  150. KNLp = KNLp et ( 3.*al* (DEP_i **2));
  151. FINSI;
  152. FIN bfor;
  153. FNLmax = maxi (ABS FNLTEMP . 1);
  154.  
  155. FINSI;
  156.  
  157.  
  158. ******** Calcul de DFNL ********
  159.  
  160. SI (IFKNL);
  161. * uniquement sous forme de LISTREELs
  162. KNLT1A = TABL;
  163. KNLT1A . 1 = tabl;
  164. KNLT1A . 1 . 1 = KNLp;
  165. FINSI;
  166.  
  167.  
  168. TAB1 . 'FNL_T' = FNLTEMP;
  169. TAB1 . 'KNL_T' = KNLT1A;
  170. TAB1 . 'FNLMAX' = FNLmax;
  171.  
  172. FINPROC;
  173. *-----------------------------------------------------------------------
  174.  
  175.  
  176.  
  177. ************************************************************************
  178. *
  179. * dynamique non lineaire
  180. * reponse forcee d'un oscillateur de type Duffing
  181. * reponse par HBM
  182. *
  183. ************************************************************************
  184.  
  185. *opti echo 0 ;
  186. opti debug 1;
  187. graph = faux ;
  188. OPTI DIME 2 ELEM SEG2 MODE PLAN ;
  189.  
  190. GRAPH = FAUX ; SAVE = FAUX; TNR = VRAI;
  191. * GRAPH = VRAI ; SAVE = VRAI; TNR = FAUX;
  192.  
  193.  
  194. *-------- Definition des parametres du calcul :
  195.  
  196. *nombre d'harmoniques utilises
  197. * nhbm = 1;
  198. nhbm = 3;
  199. * nhbm = 7;
  200. * nhbm = 11;
  201.  
  202. *parametre de l'adimensionnement
  203. u1max = 1.;
  204.  
  205. *des iterations
  206. itmoy = 6;
  207. *ds = 0.1;
  208. ds = 1.;
  209. dsmax = 1.;
  210. dsmin = 1.E-3 ;
  211.  
  212. * si AFT, OTFR tel que le nb de points pour TFR = 2**OTFR
  213. * OTFR = 7;
  214. OTFR = ENTI 'SUPERIEUR' (log (2 * (2 * nhbm + 1)) / (log 2));
  215. mess 'OTFR = ' OTFR;
  216.  
  217.  
  218. *-------- Definition des donnees d'oscillateur ---------------
  219.  
  220. * M d2u/dt2 + C du/dt + K u + pfnl*u^3 = F(t)
  221. *mass
  222. pmass = 1.;
  223. *amortissement
  224. pamor = 0.1 ;
  225. *rigidite
  226. prigi = 1.;
  227. *force d'exterieur
  228. pfext = 0.5;
  229. *coefficient de la force non lineaire
  230. pfnl = 0.25;
  231. *pfnl = 1.;
  232. * pfnl = 5.;
  233. fprec = 1.E-3;
  234. si (ega pfnl 0.25 fprec) ; mofnl = mot '025'; finsi;
  235. si (ega pfnl 1.00 fprec) ; mofnl = mot '1'; finsi;
  236. si (ega pfnl 5.00 fprec) ; mofnl = mot '5'; finsi;
  237.  
  238. * prefix :
  239. prefix = chai 'hbm_duffing_mu_' mofnl '_n' nhbm ;
  240. si GRAPH ;
  241. ficps = chai prefix '.ps';
  242. opti TRAC PSC EPTR 6 POTR 'HELVETICA_16' 'FTRA' ficps;
  243. finsi;
  244.  
  245. *plage d'etude de mu
  246. tcalc = prog 0.0 pas 0.1 5;
  247. evmu = evol manu 't' tcalc '\l' tcalc;
  248.  
  249.  
  250. *------------- geometrie ---------------
  251. *
  252. P1 = 0. 0. ;
  253. P2 = 1. 0. ;
  254. ST = P1 D 1 P2 ;
  255.  
  256. *----------- construit des matrices caracteristiques ----------
  257. *
  258. LIM1 = MOTS UY ;
  259. MASS1 = MASS 'UY' pmass P2 ;
  260. RI1 = MANU 'RIGI' P2 LIM1 (prog prigi);
  261. AMOR1 = MANU 'RIGI' P2 LIM1 (prog pamor);
  262.  
  263.  
  264.  
  265. *------- on définit une unique table pour tout (HBM et CONTINU) -------
  266. TAB1 = TABLE ;
  267.  
  268. *--------- remplissage des matrices "temporelles" ---------
  269.  
  270. * ATTENTION AUX UNITES : ON VA TRAVAILLER EN rad/s ==> pas de 2pi
  271. TAB1 . 'MASSE_CONSTANTE' = MASS1 ;
  272. TAB1 . 'AMORTISSEMENT_CONSTANT' = AMOR1 ;
  273. TAB1 . 'RIGIDITE_CONSTANTE' = RI1 ;
  274. TAB1 . 'N_HARMONIQUE' = nhbm;
  275.  
  276. *------- remplissage des resultats attendus sur ddls "temporels" -------
  277. mycoul12 = mots VIOL BLEU BLEU TURQ TURQ OCEA OCEA VERT VERT OLIV OLIV
  278. JAUN JAUN ORAN ORAN ROUG ROUG ROSE ROSE AZUR AZUR GRIS GRIS DEFA DEFA ;
  279.  
  280. TAB1 . 'RESULTATS' = tabl;
  281. TAB1 . 'RESULTATS' . 1 = tabl;
  282. TAB1 . 'RESULTATS' . 1 . 'POINT_MESURE' = P2;
  283. TAB1 . 'RESULTATS' . 1 . 'COMPOSANTE' = mot 'UY';
  284. TAB1 . 'RESULTATS' . 1 . 'TITRE' = mot 'U';
  285. TAB1 . 'RESULTATS' . 1 . 'COULEUR' = mot 'BLEU';
  286. TAB1 . 'RESULTATS' . 1 . 'COULEUR_HBM' = mycoul12;
  287.  
  288.  
  289. *--------- passage en frequentiel ---------
  290.  
  291. HBM TAB1;
  292.  
  293.  
  294. MESS '>>>>>>>>>>>>>>> COMPOSANTES DEP TEMPORELLES';
  295. LIST TAB1 .'COMPOSANTES' . 'DEPLACEMENT';
  296. MESS '>>>>>>>>>>>>>>> COMPOSANTES DEP FREQUENTIELLES';
  297. LIST TAB1 .'COMPOSANTES' . 'DEPLACEMENT_HBM';
  298.  
  299. MESS 'RIGIDITE_HBM'; LIST TAB1 . 'RIGIDITE_HBM' ;
  300. MESS 'BLOCAGES_HBM'; LIST TAB1 . 'BLOCAGES_HBM' ;
  301. MESS 'AMORTISSEMENT_HBM'; LIST TAB1 . 'AMORTISSEMENT_HBM' ;
  302. MESS 'MASSE_HBM'; LIST TAB1 . 'MASSE_HBM' ;
  303. MESS 'MASSE_HBM_1'; LIST TAB1 . 'MASSE_HBM_1' ;
  304. MESS 'MASSE_HBM_2'; LIST TAB1 . 'MASSE_HBM_2' ;
  305. MESS 'AMORTISSEMENT_HBM_1'; LIST TAB1 . 'AMORTISSEMENT_HBM_1';
  306.  
  307.  
  308. *----------- definition du chargement ----------------------------------
  309.  
  310. * ici, on definit directement le chargement en frequentiel
  311. * F2 : composante en cos 1wt
  312. FP11 = MANU 'CHPO' p2 1 'F2' pfext 'NATURE' 'DISCRET' ;
  313. *
  314. LIX1 = PROG 0. pas 0.1 (10.) ;
  315. LIY1 = PROG (dime LIX1)*1.;
  316. EV1 = EVOL MANU 'w' LIX1 'F(w)' LIY1 ;
  317. CHA1 = CHAR MECA FP11 EV1 ;
  318.  
  319. * frequence associee (en rad/s) = constante = 1.6*w0
  320. Wev = evol manu 't' LIX1 'w' (1.6*LIY1);
  321. TAB1 . 'FREQUENCE' = Wev;
  322.  
  323.  
  324. *----------- OPTIONS DE CALCUL ----------------------
  325.  
  326. TAB1 . 'GRANDS_DEPLACEMENTS' = FAUX ;
  327. TAB1 . 'GEOMETRIE' = P2;
  328. TAB1 . 'CHARGEMENT' = CHA1;
  329. TAB1 . 'PRECISION' = 1.E-5;
  330. TAB1 . 'TEMPS_CALCULES' = tcalc;
  331. TAB1 . 'MAXIPAS' = 500;
  332. TAB1 . 'ACCELERATION' = 4;
  333. TAB1 . 'NB_ITERATION' = itmoy;
  334. TAB1 . 'MAXITERATION' = 30;
  335. TAB1 . 'WTABLE' = tabl;
  336. TAB1 . 'WTABLE' . 'DS' = ds;
  337. TAB1 . 'WTABLE' . 'DSMAX' = dsmax;
  338. TAB1 . 'WTABLE' . 'DSMIN' = dsmin;
  339. TAB1 . 'MAXI_DEPLACEMENT' = u1max;
  340. TAB1 . 'PAS_SAUVES' = 2;
  341.  
  342. * calcul des forces NL
  343. TAB1 . 'PROCEDURE_CHARMECA'= vrai ;
  344. TAB1 . 'CALC_CHPO' = faux;
  345. TAB1 . 'PROCEDURE_FREQUENCE_TEMPS' = mot 'AFT';
  346. TAB1 . 'N_PT_TFR' = OTFR;
  347.  
  348. * parametres du cas test lié a AFT et CHARMECA
  349. TAB1 . 'COEFF_FNL' = evmu;
  350. TAB1 . 'POINT_FNL' = P2;
  351. TAB1 . 'COMP_FNL' = mots 'UY' ;
  352.  
  353. * stabilité
  354. TAB1 . 'STABILITE' = MOTS 'DIAG' 'HILL';
  355.  
  356.  
  357. *----------- resolution par la procedure CONTINU -----------------------
  358.  
  359. *calcul avec continuation
  360. CONTINU TAB1;
  361.  
  362. TEMP 'IMPR' 'MAXI';
  363.  
  364. *------------------------- post-traitement -----------------------------
  365.  
  366.  
  367. ********** tracé de toutes les harmoniques individuellement **********
  368.  
  369. wprog = TAB1 . 'TEMPS_PROG';
  370. evtot = TAB1 . 'RESULTATS_HBM' . 'RESULTATS_EVOL';
  371.  
  372. TDESS1 = TABL;
  373. TDESS1 . 'TITRE' = TAB1 . 'RESULTATS_HBM' . 'TITRE';
  374.  
  375. si GRAPH;
  376. dess evtot
  377. TITX '\m' POSX CENT
  378. TITY 'U_{k}' POSY CENT TDESS1 LEGE NO;
  379. finsi;
  380.  
  381. ******************* uy2p : amplitude en norme 2 ******************
  382.  
  383. ihbm = 0;
  384. uy2p = TAB1 . 'RESULTATS_HBM' . 1 . 'RESULTATS' ** 2;
  385. repe BUYHBM nhbm; ihbm = ihbm + 1;
  386. ikcos = 2*ihbm;
  387. iksin = 2*ihbm + 1;
  388. uy2p = uy2p
  389. + (0.5* ( (TAB1 . 'RESULTATS_HBM' . ikcos . 'RESULTATS' ** 2)
  390. + (TAB1 . 'RESULTATS_HBM' . iksin . 'RESULTATS' ** 2)) );
  391. fin BUYHBM;
  392.  
  393. *** evolution + tracé ***
  394. evuy2 = evol VIOL MANU wprog uy2p;
  395. si GRAPH;
  396. dess evuy2
  397. TITX '\m' POSX CENT
  398. TITY '|U|_{2}' POSY CENT ;
  399. finsi;
  400.  
  401. ********** traduction des resultats frequentiels en temporels **********
  402.  
  403. HBM_POST TAB1;
  404.  
  405. ************* tracé du max d'amplitude max_t(u(t)) *********************
  406.  
  407. evuyamp = TAB1 . 'RESULTATS' . 'RESULTATS_EVOL';
  408. si GRAPH;
  409. dess evuyamp
  410. TITX '\m' POSX CENT
  411. TITY 'max|U(t)|' POSY CENT ;
  412. finsi;
  413.  
  414. ************* tracé du max d'amplitude avec la stabilite ! *************
  415.  
  416. istab = TAB1 . 'RESULTATS_STABILITE' . 'FLOQ' . 'STABILITE';
  417. Tdess2 = TABL;
  418. Tdess2 . 'LIGNE_VARIABLE' = TABL;
  419. Tdess2 . 'LIGNE_VARIABLE' . 1 = istab;
  420. si GRAPH;
  421. dess evuyamp
  422. TITX '\m' POSX CENT
  423. TITY 'max|U(t)|' POSY CENT Tdess2;
  424. * zoom
  425. Tdess2 . 1 = mot 'MARQ S PLUS';
  426. dess evuyamp
  427. TITX '\m' POSX CENT XBOR 1.55 1.70 YBOR 2.8 3.1
  428. TITY 'max|U(t)|' POSY CENT Tdess2;
  429. dess evuyamp
  430. TITX '\m' POSX CENT XBOR 1.28 1.31 YBOR 0.8 1.5
  431. TITY 'max|U(t)|' POSY CENT Tdess2;
  432. finsi;
  433.  
  434. * autres tracé de la stabilite : lambda_R en fonction de W
  435. mycoul = mots 'VIOL' 'BLEU' 'AZUR' 'TURQ' 'VERT' 'OLIV'
  436. 'JAUN' 'ORAN' 'ROUG' 'ROSE';
  437. ncoul = dime mycoul;
  438. wprog2 = enle wprog (dime wprog);
  439. evlrtot = VIDE 'EVOLUTIO' ;
  440. evlitot = VIDE 'EVOLUTIO' ;
  441. nl = dime TAB1 . 'RESULTATS_STABILITE' . 'FLOQ' . 'EXPOSANT_REEL';
  442. il = 0;
  443. icoul = 0;
  444. repe bl nl; il = il + 1; icoul = icoul + 1;
  445. si(icoul > ncoul); icoul = 1; finsi; coul1 = extr mycoul icoul;
  446. lr1 = TAB1 . 'RESULTATS_STABILITE' . 'FLOQ' . 'EXPOSANT_REEL' . il;
  447. evlrtot = evlrtot
  448. et (evol coul1 MANU '\m' wprog2 '\l_{R}' lr1);
  449. li1 = TAB1 . 'RESULTATS_STABILITE' . 'FLOQ' . 'EXPOSANT_IMAG' . il;
  450. evlitot = evlitot
  451. et (evol coul1 MANU '\m' wprog2 '\l_{I}' li1);
  452. fin bl;
  453. wprog3 = prog (mini wprog2) (maxi wprog2);
  454. evzero = evol manu '\m' wprog3 '\l_{R}' (0.*wprog3);
  455. Tdess3 = tabl;
  456. Tdess3 . 1 = mot 'TIRR';
  457. si GRAPH;
  458. dess (evzero et evlrtot)
  459. 'TITY' '\l_{R} (s^{-1})' Tdess3;
  460. dess (evlitot) 'TITY' '\l_{I} (Hz)' ;
  461. finsi;
  462.  
  463.  
  464. *-------------------------- sauvegarde -----------------------------
  465.  
  466. si SAVE ;
  467. ficxdr = chai prefix '.xdr';
  468. mess 'sauvegarde dans ' ficxdr;
  469. opti sauv ficxdr;
  470. finsi;
  471.  
  472.  
  473. *--------------------- test de non regression ---------------------
  474.  
  475. si TNR ;
  476.  
  477. * recup valeurs de la courbes de reponse
  478. wamp = extr evuyamp 'ABSC';
  479. uyamp = extr evuyamp 'ORDO';
  480. namp = DIME uyamp;
  481.  
  482. * on teste la presence de 2 points limites
  483. dw1 = ( wamp enle 1) - ( wamp enle namp);
  484. dw1dw0 = (dw1 enle 1) * (dw1 enle (namp - 1));
  485. mptlim = (lect 0) et (enti 'PROCH' (masq dw1dw0 'EGINFE' 0.)) et 0;
  486. nptlim = somm mptlim;
  487. si (nptlim neg 2);
  488. mess 'Il devrait y avoir 2 points limites !';
  489. list nptlim;
  490. ERRE 5;
  491. finsi;
  492.  
  493. * on verifie que pour ces 2 points il y a chgt de stabilité
  494. iptlim = posi 1 'DANS' mptlim 'TOUS' ;
  495. istab1 = (istab enle 1) - (istab enle (DIME istab));
  496. istab1 = (posi 1 'DANS' istab1 'TOUS')
  497. et (posi -1 'DANS' istab1 'TOUS');
  498. * sumstab = (extr istab (iptlim - 1)) + (extr istab (iptlim));
  499. * * sumstab doit valoir 1 (ni 0 ni 2)
  500. * si ( ((mini sumstab) neg 1) ou ((maxi sumstab) neg 1) );
  501. * ==> on ne fait pas le test car precis a 1 pas pres !!!
  502. dstab = maxi (iptlim - istab1) 'ABS';
  503. si (dstab >eg 2);
  504. mess 'Les 2 points limites doivent correspondre a un changement '
  505. 'de stabilite!';
  506. list sumstab;
  507. ERRE 5;
  508. finsi;
  509.  
  510. * on termine par verifier l'amplitude en ces 2 points + l'amplitude max
  511. Utest = (extr uyamp iptlim) et (maxi uyamp) ;
  512. * on compare a une precedente execution (lors de la creation du cas test)
  513. Uref = prog 0.48057 3.1837 3.1847;
  514. si ( (MAXI (Utest - Uref) 'ABS') > 0.01 );
  515. mess 'Erreur dans les amplitudes predites !';
  516. list Utest;
  517. ERRE 5;
  518. finsi;
  519.  
  520. finsi;
  521.  
  522.  
  523. fin ;
  524.  
  525.  
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  

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