1 / 14

pendulum.c

pendulum.c. Thomas Baumgartner, Mat.nr. 0425162 Alexander Gross, Mat.nr. 0425230. q (t) durch Integration mit CVODE berechnen Phasenraumpunkte (A, w ) bestimmen, für die das Pendel stehen bleibt. Aufgabenstellung. m. q. L. Reduktion auf 1. Ordnung. N_Vector y. N_Vector ydot.

Download Presentation

pendulum.c

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. pendulum.c Thomas Baumgartner, Mat.nr. 0425162 Alexander Gross, Mat.nr. 0425230

  2. q(t) durch Integration mit CVODE berechnen Phasenraumpunkte (A, w) bestimmen, für die das Pendel stehen bleibt Aufgabenstellung m q L

  3. Reduktion auf 1. Ordnung N_Vector y N_Vector ydot

  4. Rechte Seite der Gleichung static void f(integer N, real t, N_Vector y, N_Vector ydot, void *f_data) { double* v_y; double* v_ydot; v_y = N_VDATA(y); v_ydot = N_VDATA(ydot); v_ydot[0] = v_y[1]; v_ydot[1] = (1/L)*(g-A*pow(w,2)*sin(w*t))*sin(v_y[0]); }

  5. (A, w) bestimmen Parameter: A1, A2, w1, w2, Ares, wres, q0 Ausgabedatei: phasespace.dat Betriebsarten q(t) berechnen • Parameter: A, w, q0 • Ausgabedatei: theta.dat

  6. Ablauf: q(t) berechnen • Programm mit gewünschten Parametern aufrufen • Integration von t = 0 bis t = 10s mittels linearem Solver CVSPGMR und Adams-Methode • Ausgabe in Datei theta.dat für jeden berechneten Zeitpunkt

  7. Code: q(t) berechnen cvode_mem = CVodeMalloc(NEQ, f, T0, y, ADAMS, FUNCTIONAL, SS, &reltol, &abstol, fdata, NULL, FALSE, NULL, NULL, NULL); if(cvode_mem == NULL) { printf("CVodeMalloc failed.\n"); return(1); } while(t <= Tend){ flag = CVode(cvode_mem, TSTEP, y, &t, ONE_STEP); if (flag != SUCCESS) { printf("CVode failed, flag = %d.\n", flag); return(1); } fprintf(fout, "%e %e %e\n", t, v_y[0], v_y[1]); ++timeSteps; }

  8. Beispiel: q(t) berechnen ./pendulum 0.2 10 0.02 Calculating Theta(t) with the following parameters: A = 0.150000 w = 70.000000 Th0 = 0.020000 Integration finished. 9994 time steps calculated.

  9. Beispiel: q(t) berechnen

  10. Ablauf: (A, w) bestimmen • Programm mit gewünschten Parametern aufrufen • Schleifen für die Wertebereiche von A und w werden durchlaufen • Integration von t = 0 bis t = 10s für jedes (A, w)-Wertepaar (CVSPGMR mit Adams-Methode)

  11. Ablauf: (A, w) bestimmen • Stabilitätskriterium 1: • Stabilitätskriterium 2: • Ausgabe in Datei phasespace.dat für jedes Wertepaar (A, w) mit stabiler Lösung

  12. Code: (A, w) bestimmen while((t <= Tend)&&(flagStable == 1)){ . . . if (fabs(v_y[0] - Th0) > ThTOL){ flagStable = 0; } } if (flagStable == 1){ . . . if (fabs(ThAvg - Th0) <= ThAvgTol){ printf("Stable solution found: A = %f, w = %f\n", A, w); fprintf(fout, "%e %e\n", A, w); ++stablePoints; } }

  13. Beispiel: (A, w) bestimmen ./pendulum 0 1 0 100 0.01 0.5 0.02 Searching phase space for stable solutions with the following parameters: A = 0.000000 ... 1.000000 w = 0.000000 ... 100.000000 Ares = 0.010000 wres = 0.500000 Th0 = 0.020000 Stable solution found: A = 0.060000, w = 87.000000 Stable solution found: A = 0.060000, w = 94.000000 . . . Phase space analysis finished. 1388 stable solutions found.

  14. Beispiel: (A, w) bestimmen

More Related