Télécharger hbm_vanderpol_force.dgibi
* fichier : hbm_vanderpol_force.dgibi ****************************************************************** * * Systeme a un degre de liberte * * Oscillateur Van der Pol force calcule en k harmoniques * * m*x'' - c (1-x^2) *x' + k*x = f cos wt * m=1; k=1; c=1; w=1; f = [ 0.1 ... 2 ] * Continuation + HBM + AFT * ****************************************************************** *----------------------------------------------------------------------- * CHARMECA.PROCEDUR * Calcul de la force non lineaire fnl(x,t) et de sa derivee dfnl(x,t)/dx *----------------------------------------------------------------------- * * EN ENTREE : * * TAB1 * parametres génériques : * . 'DEP_NL' : LISTCHPO DE DEPLACEMENTS TEMPORELLES * ou (pas encore programmé) * . i . 'CHPOINT' = CHPOINT unitaire des deplacements NL * . i . 'LISTREEL' = evolution temporelle coefficient du chpoint * . 'VIT_NL' : VITESSES TEMPORELLES * parametres propres a ce cas test : * . 'COEFF_FNL' : coefficient de non linearite * . 'POINT_FNL' : point de non linearite * . 'COMP_FNL' : composante de non linearite * * * EN SORTIE : * * TAB1 * parametres génériques : * . 'FNL_T' : LISTCHPO DES FORCES NON LINEAIRES TEMPORELLES * ou TABLE d'indice : (pas encore programmé) * . i . 'CHPOINT' = CHPOINT unitaire des forces non lineaires * . i . 'LISTREEL' = evolution temporelle coefficient du chpoint * . 'KNL_T' : DERIVEE DE FORCES NON LINEAIRES sous forme de TABLE : * . i . j = 'LISTREEL' evolution temporelle de dFi/dxj * *----------------------------------------------------------------------- DEBPROC CHARMECA TAB1*'TABLE'; ******** parametres d'entree propres a ce cas test ********** * parametre de continuation time = TAB1 . 'TIME'; *coefficient de la force nl AL = TAB1 . 'COEFF_FNL'; SINON; AL = 0.; FINSI; * LAMBDA = IPOL AL time; LAMBDA = AL ; pNL = TAB1 . 'POINT_FNL'; SINON; FINSI; COMP_FNL = TAB1 . 'COMP_FNL'; SINON; FINSI; ******** parametres d'entree génériques ********** *DEPNL : list de champ par points, deplacements temporels du point nl * DEPNL = TAB1 . 'DEP_NL'; si (non IFCHPO); sinon; finsi; finsi; finsi; SINON; FINSI; * on a aussi besoin de la vitesse VITNL VITNL = TAB1 . 'VIT_NL'; * calcul de fnl ET dfnl/dx ? dans le doute on calcule tout... ******** Calcul de FNL ******** *---------------- Cas DEPNL LISTCHPO SI IFCHPO; *---------------- Cas DEPNL TABLE de LISTREEL SINON; * DEPNL : table de listreel, indicée par les ddls NL * nbt : nombre de pas de temps ib = 0; REPE bfor nbt; ib = ib + 1; FNL = LAMBDA * (1.-(DEP_i**2)) * VIT_i; FNLTEMP . 1 = FNLTEMP . 1 et FNL; SI (IFKNL); KNLp = KNLp et ( 2. * LAMBDA * DEP_i * VIT_i); CNLp = CNLp et (-1. * LAMBDA * (1.-(DEP_i**2))); FINSI; FIN bfor; FINSI; ****** stockage ****** TAB1 . 'FNL_T' = FNLTEMP; SI (IFKNL); * uniquement sous forme de LISTREELs TAB1 . 'KNL_T' . 1 . 1 = KNLp; TAB1 . 'CNL_T' . 1 . 1 = CNLp; FINSI; FINPROC; *----------------------------------------------------------------------- ************************************************************************ * * dynamique non lineaire * reponse forcee d'un oscillateur de type Van der Pol * reponse par HBM * ************************************************************************ *opti echo 0 ; GRAPH = FAUX ; SAVE = FAUX; TNR = VRAI; * GRAPH = VRAI ; SAVE = VRAI; TNR = FAUX; *-------- Definition des parametres du calcul : *nombre d'harmoniques utilises * nhbm = 1; nhbm = 3; * nhbm = 5; * nhbm = 7; * nhbm = 9; nhbm = 11; * nhbm = 21; *parametre de l'adimensionnement u1max = 1.; *des iterations * itmoy = 3.8; itmoy = 6; *ds = 0.1; ds = 1.; dsmax = 1.; dsmin = 1.E-3 ; * si AFT, OTFR: nb de points 2**OTFR pour TFR * OTFR = 7; OTFR = ENTI 'SUPERIEUR' (log (2 * (2 * nhbm + 1)) / (log 2)); *-------- Definition des donnees d'oscillateur --------------- * m*x'' - c (1-x^2) *x' + k*x = 0 * m=1; k=1; c=[0..3] *mass pmass = 1.; *rigidite prigi = 1.; * amortissement NL lambda = 1. ; * prefix : si GRAPH ; finsi; *plage d'etude = plage du coefficient de la force non lineaire *------------- geometrie --------------- * P1 = 0. 0. ; P2 = 1. 0. ; ST = P1 D 1 P2 ; *----------- construit des matrices caracteristiques ---------- * *------- on définit une unique table pour tout (HBM et CONTINU) ------- TAB1 = TABLE ; *--------- remplissage des matrices "temporelles" --------- * ATTENTION AUX UNITES : ON VA TRAVAILLER EN rad/s ==> pas de 2pi TAB1 . 'MASSE_CONSTANTE' = MASS1 ; TAB1 . 'RIGIDITE_CONSTANTE' = RI1 ; TAB1 . 'N_HARMONIQUE' = nhbm; *------- remplissage des resultats attendus sur ddls "temporels" ------- mycoul12 = mots VIOL BLEU BLEU TURQ TURQ OCEA OCEA VERT VERT OLIV OLIV JAUN JAUN ORAN ORAN ROUG ROUG ROSE ROSE AZUR AZUR GRIS GRIS DEFA DEFA ; DEFA DEFA DEFA DEFA DEFA DEFA DEFA DEFA DEFA DEFA DEFA DEFA DEFA DEFA DEFA DEFA DEFA DEFA DEFA DEFA DEFA DEFA DEFA DEFA DEFA DEFA DEFA DEFA); ires1 = 1; TAB1 . 'RESULTATS' . ires1 . 'POINT_MESURE' = P2; TAB1 . 'RESULTATS' . ires1 . 'COULEUR_HBM' = mycoul12; *--------- passage en frequentiel --------- HBM TAB1; LIST TAB1 .'COMPOSANTES' . 'DEPLACEMENT'; LIST TAB1 .'COMPOSANTES' . 'DEPLACEMENT_HBM'; * MESS 'RIGIDITE_HBM'; LIST TAB1 . 'RIGIDITE_HBM' ; * MESS 'BLOCAGES_HBM'; LIST TAB1 . 'BLOCAGES_HBM' ; * MESS 'AMORTISSEMENT_HBM'; LIST TAB1 . 'AMORTISSEMENT_HBM' ; * MESS 'MASSE_HBM'; LIST TAB1 . 'MASSE_HBM' ; * MESS 'MASSE_HBM_1'; LIST TAB1 . 'MASSE_HBM_1' ; * MESS 'MASSE_HBM_2'; LIST TAB1 . 'MASSE_HBM_2' ; * MESS 'AMORTISSEMENT_HBM_1'; LIST TAB1 . 'AMORTISSEMENT_HBM_1'; list TAB1 . 'RESULTATS_HBM' ; *----------- definition du chargement ---------------------------------- *!ici, on definit directement le chargement en frequentiel * * FP11 = MANU 'CHPO' p2 1 'F2' 0. 'NATURE' 'DISCRET' ; * * dess EV1 POSX CENT POSY CENT; * frequence associee (en rad/s) = constante = 1 TAB1 . 'FREQUENCE' = Wev; *----------- OPTIONS DE CALCUL ---------------------- TAB1 . 'GRANDS_DEPLACEMENTS' = FAUX ; TAB1 . 'CHARGEMENT' = CHA1; TAB1 . 'PRECISION' = 1.E-5; TAB1 . 'TEMPS_CALCULES' = tcalc; TAB1 . 'MAXIPAS' = 300; TAB1 . 'ACCELERATION' = 4; TAB1 . 'NB_ITERATION' = itmoy; TAB1 . 'MAXITERATION' = 30; TAB1 . 'WTABLE' . 'DS' = ds; TAB1 . 'WTABLE' . 'DSMAX' = dsmax; TAB1 . 'WTABLE' . 'DSMIN' = dsmin; TAB1 . 'MAXI_DEPLACEMENT' = u1max; TAB1 . 'PAS_SAUVES' = 1; TAB1 . 'NORME_RESIDU' = 1.; * on donne la solution analytique pour lambda=0 TAB1 . 'DEPLACEMENTS' . 0 = u0; * calcul des forces NL TAB1 . 'PROCEDURE_CHARMECA'= VRAI ; TAB1 . 'CALC_CHPO' = FAUX; TAB1 . 'N_PT_TFR' = OTFR; * 2 manieres de calculer la Jacobienne : * directement ou par differentiation numerique * bp, 2018-10-01 : on passe a la differentiation numerique * car sinon, point initial singulier (nouvelle TFR trop precise!) * parametres du cas test lié a AFT et CHARMECA TAB1 . 'COEFF_FNL' = lambda; TAB1 . 'POINT_FNL' = P2; TAB1 . 'CALC_VITE' = VRAI; * recalcul de K apores la prediction * TAB1 . 'RECALCUL_K' = vrai; * stabilité *----------- resolution par la procedure CONTINU ----------------------- *calcul avec continuation CONTINU TAB1; *------------------------- post-traitement ----------------------------- TITRE tit1; ********** tracé de toutes les harmoniques individuellement ********** Fprog = TAB1 . 'TEMPS_PROG'; evtot = TAB1 . 'RESULTATS_HBM' . 'RESULTATS_EVOL'; TDESS1 . 'TITRE' = TAB1 . 'RESULTATS_HBM' . 'TITRE'; si GRAPH; dess evtot TITX 'F' POSX CENT TITY 'U_{k}' POSY CENT TDESS1 LEGE NO; finsi; ******************* uy2p : amplitude en norme 2 ****************** ihbm = 0; uy2p = TAB1 . 'RESULTATS_HBM' . 1 . 'RESULTATS' ** 2; repe BUYHBM nhbm; ihbm = ihbm + 1; ikcos = 2*ihbm; iksin = 2*ihbm + 1; uy2p = uy2p + (0.5* ( (TAB1 . 'RESULTATS_HBM' . ikcos . 'RESULTATS' ** 2) + (TAB1 . 'RESULTATS_HBM' . iksin . 'RESULTATS' ** 2)) ); fin BUYHBM; *** evolution + tracé *** si GRAPH; dess evuy2 TITX 'F' POSX CENT TITY '|U|_{2}' POSY CENT ; finsi; ********** traduction des resultats frequentiels en temporels ********** * on met 512 pas de temps pour le post traitement TAB1 . 'N_PT_POST' = 512 ; ************* tracé du max d'amplitude max_t(u(t)) ********************* evuyamp = TAB1 . 'RESULTATS' . 'RESULTATS_EVOL'; si GRAPH; dess evuyamp TITX 'F' POSX CENT TITY 'max|U(t)|' POSY CENT ; finsi; ************* tracé du max d'amplitude avec la stabilite ! ************* istab = TAB1 . 'RESULTATS_STABILITE' . 'FLOQ' . 'STABILITE'; Tdess2 . 'LIGNE_VARIABLE' . 1 = istab; si GRAPH; dess evuyamp TITX 'F' POSX CENT TITY 'max|U(t)|' POSY CENT Tdess2; finsi ; ************* tracé des plans de phase ************* * pour F=0.5 F05 = 0.5; TRES1T = TAB1 . 'RESULTATS' . 1 . 'RESULTATS_TEMPORELS'; ipas = &BPAS; Upas1 = TAB1 . 'TEMPS' . ipas; Upas2 = TAB1 . 'TEMPS' . (ipas + 1); dU1 = Upas1 - F05; dU2 = Upas2 - F05; si (dU1 * dU2 > 0); iter BPAS; finsi; * comme u(t)=\sumt f_i(t) U_i, * l'interpolation lineaire entre 2 pas U^1 et U^2 est equivalente * a l'interpolation entre u^1(t) et u^2(t) dU12 = Upas2 - Upas1; yp = ((dU2 / dU12) * yp1) - ((dU1 / dU12) * yp2); zp = ((dU2 / dU12) * zp1) - ((dU1 / dU12) * zp2); *trop de tracés! cha1pas = chai tit1 '- F=' FORMAT '(F5.3)' Upas; *trop de tracés! dess (evyz) 'CARR' 'TITRE' cha1pas; *trop de tracés! ==> on trace seulement pour F=0.5 : * si (exis Upas05 ipas); ic05 = ic05 + 1; * finsi; FIN BPAS; si GRAPH; finsi; si SAVE; *** recup des resultats d'integration temporelle de Matlab *** * ~/dynamique/oscillateurs/oscil_vanderpol/oscil4_2016_f05.m na = 3*2050; * on ne recupere que les 512 derniers point = la derniere periode ideb_1a = (na - (3*512)); na = 3*10000; * petite reduction pour n'a' * dess (evt_1a et evt_1b); * dess (evt_2a et evt_2b); *** comparaison *** Tcomp . 4 = trevb . 1; Tcomp . 5 = trevb . 2; finsi; * autres tracé de la stabilite : lambda_R en fonction de F mycoul = mots 'VIOL' 'BLEU' 'AZUR' 'TURQ' 'VERT' 'OLIV' 'JAUN' 'ORAN' 'ROUG' 'ROSE'; il = 0; repe bl nl; il = il + 1; icoul = icoul + 1; lr1 = TAB1 . 'RESULTATS_STABILITE' . 'FLOQ' . 'EXPOSANT_REEL' . il; evlrtot = evlrtot li1 = TAB1 . 'RESULTATS_STABILITE' . 'FLOQ' . 'EXPOSANT_IMAG' . il; evlitot = evlitot fin bl; si GRAPH; 'TITY' '\l_{R} (s^{-1})' Tdess3; finsi; * on cible les 2 premieres vp si GRAPH; 'TITY' '\l_{R} (s^{-1})' Tdess3; 'TITY' '\l_{I} (s^{-1})' Tdess3; finsi; * on met en evidence les solutions a F=0.5 si GRAPH; 'TITY' '\l_{R} (s^{-1})' Tdess3; 'TITY' '\l_{I} (s^{-1})' Tdess3; finsi; * stabilite : trace dynamique pour faire une animation si GRAPH; TABORB . 'PAS' = 1; TABORB . 'EVOL_FIXE' = evzero ; TABORB . 'CARR' = FAUX ; ORBITE evuyamp TABORB; ORBITE evlr12 TABORB; ORBITE evli12 TABORB; finsi; *-------------------------- sauvegarde ----------------------------- si SAVE ; sauv; finsi; *--------------------- test de non regression --------------------- si TNR ; * reference = calcul Matlab integration temporelle directe ode23t * qq points du portrait de phase stable (= le 3eme) tref_3 = prog 0.0000 3.32031E-02 6.64062E-02 9.96094E-02 0.13281 0.16602 0.19922 0.23242 0.26562 0.29883 0.33203 0.36523 0.39844 0.43164 0.46484 0.49805 0.53125 0.56445 0.59766 0.63086 0.66406 0.69727 0.73047 0.76367 0.79687 0.83008 0.86328 0.89648 0.92969 0.96289 0.99609; uref_3 = prog -1.3333 -1.0770 -0.76083 -0.35992 0.15393 0.78173 1.4267 1.9024 2.1258 2.1685 2.1176 2.0190 1.8907 1.7376 1.5582 1.3469 1.0935 0.78151 0.38640 -0.12024 -0.74273 -1.3917 -1.8815 -2.1186 -2.1693 -2.1222 -2.0257 -1.8989 -1.7473 -1.5695 -1.3604; si GRAPH; finsi; * Calcul de l'Aire des portraits de phase pour F=0.5 * (calculé avec la totalité des points) Aref1 = 0.91267; Aref3 = 17.520; * Calcul de l'Aire des portraits de phase pour F=0.5 mess Axy1 Axy3; * valeurs obtenues lors de la creatio ndu cas test : 0.91537 17.557 * et avec nhbm=3 : 0.91540 17.638 si ( ((ABS (Axy1 - Aref1 / Aref1)) > 0.01) ou ((ABS (Axy3 - Aref3 / Aref3)) > 0.01)); mess Axy1 Axy3; finsi; * verifs ponctuelles de u(t) solution stable pour F=0.5 si (err_3 > 0.05); list ev_3; mess err_3; finsi; finsi; fin ;
© Cast3M 2003 - Tous droits réservés.
Mentions légales