Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Pendulum.c Thomas Baumgartner, Mat.nr. 0425162 Alexander Gross, Mat.nr. 0425230.

Ähnliche Präsentationen


Präsentation zum Thema: "Pendulum.c Thomas Baumgartner, Mat.nr. 0425162 Alexander Gross, Mat.nr. 0425230."—  Präsentation transkript:

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

2 Aufgabenstellung (t) durch Integration mit CVODE berechnen Phasenraumpunkte (A, ) bestimmen, für die das Pendel stehen bleibt m 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 Betriebsarten (A, ) bestimmen Parameter: A 1, A 2, 1, 2, A res, res, 0 Ausgabedatei: phasespace.dat (t) berechnen Parameter: A,, 0 Ausgabedatei: theta.dat

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

7 Code: (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: (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: (t) berechnen

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

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

12 Code: (A, ) 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, ) 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, ) bestimmen


Herunterladen ppt "Pendulum.c Thomas Baumgartner, Mat.nr. 0425162 Alexander Gross, Mat.nr. 0425230."

Ähnliche Präsentationen


Google-Anzeigen