ΥΠΟΛΟΓΙΣΤΙΚΕΣ ΜΕΘΟΔΟΙ, -, Ο ΕΞΑΜΗΝΟ ΕΡΓΑΣΙΑ #: ΥΠΕΡΒΟΛΙΚΑ ΠΡΟΒΛΗΜΑΤΑ ΗΜΕΡΟΜΗΝΙΑ ΠΑΡΑΔΟΣΗΣ: 3.0. ΕΠΙΜΕΛΕΙΑ: Ιωάννης Λυχναρόπουλος Άσκηση Έστω ένα κύμα που κινείται εντός αγωγού με ταχύτητα c 0 m/s. Η κατανομή utx, του κύματος την χρονική στιγμή t 0 είναι τριγωνική και φαίνεται στο Σχήμα. Εφαρμόζοντας την εξίσωση κύματος ης τάξης να υπολογισθεί αριθμητικά η διάδοση του κύματος μέχρι την χρονική t 0. sec με τις μεθόδους α) πρόδρομη στο χρόνο ανάδρομη στο χώρο, β) Lax-Wendroff, γ) πεπλεγμένη Euler και δ) McCormack για x m και τρεις τιμές του χρονικού βήματος t 0.00, 0.00 και 0.00. Σχολιάστε τα αριθμητικά αποτελέσματα για τις τρεις τιμές του χρονικού βήματος συγκρίνοντας τα μεταξύ τους και με την αναλυτική λύση. Επίσης να σχολιασθούν η αριθμητική διάχυση και διασπορά των μεθόδων. u(0, x ) t 0 0 0 70 x Σχήμα : Κατανομή κύματος τη χρονική στιγμή t 0 Λύση Εφαρμόζοντας τη μέθοδο των χαρακτηριστικών η αναλυτική λύση είναι: uxt (, ) f( x ct) () με f την αρχική τριγωνική κατανομή: 0, x x, x f( x) () x 0, x 0, x Το ίδιο πρόβλημα επιλύεται αριθμητικά με τέσσερα αριθμητικά σχήματα. Σε όλες τις περιπτώσεις η βασική παράμετρος είναι ο αριθμός CFL: v ct/ x, όπου t και
x είναι το χρονικό και χωρικό βήμα διακριτοποίησης αντίστοιχα. Το πλέγμα μας αποτελείται από N 70 διαστήματα (7 κόμβοι). n Θεωρούμε ότι u 0 για x 0 και x 70, επομένως στις επόμενες σχέσεις θα είναι: n n u 0 u 0 N Μέθοδος : Πρόδρομη στο χρόνο ανάδρομη στο χώρο (Ρητό σχήμα) u u vu, i n n n n n n n i i i i u u v u u, i,..., N Μέθοδος : ΜcCormack (Ρητό σχήμα) Το σχήμα αυτό αποτελείται από εξισώσεις (πρόβλεψη και διόρθωση): n/ n n n Πρόβλεψη: ui ui vui ui, i,..., N n n n/ n/ n/ Διόρθωση: i i i i i u u u v u u, i,..., N n/ n n n n n n/ n/ i : u u vu u και u u u vu n/ n n i N : un un vun u u u v u u n n n/ n/ n/ και N N N N N Μέθοδος 3: Πεπλεγμένη Euler v n n v n n ui ui ui ui, i,..., N v i : u n n n u u n v n n i N : un un un Το σύστημα που προκύπτει είναι τριδιαγώνιο και επιλύεται με τη μέθοδο Thomas. Μέθοδος 4: Lax-Wendroff (Ρητό σχήμα) n n v n n v n n n ui ui uiui ui ui ui, i,..., N n n v n v n n i : u u u u u n n v n v n n i N : un un un un un
Το ακόλουθο πρόγραμμα σε Fortran επιλύει το πρόβλημα αρχικών τιμών και με τις 4 μεθόδους: program ftbs_mac_cormack implicit none! Variables real,allocatable:: u(:),uold(:),uprev(:),x(:), u0(:),t(:,:),t(:,:),t3(:,:),t4(:,:),t(:,:) real,allocatable:: aa(:),bb(:),cc(:),dd(:),xx(:) real::v, dx, dt, c, pi, t,max,err integer::i,n, tmax, m, done, method character()::num!tmax= n=70 c=0! dt=0.00!dt=0.00! dt=0.00 dt=0.006 dx=. v=c*dt/dx pi=3.4964 tmax=nint(0./dt) allocate(u(n+), uold(n+),uprev(n+), x(n+), u0(n+), t(n+,tmax),t(n+,tmax),t3(n+,tmax),t4(n+,tmax),t(n+,tmax)) allocate(aa(n+),bb(n+),cc(n+),dd(n+),xx(n+)) do i=,n+ x(i)=(i-)*dx open(,file='res_all_4.txt',recl=000) write(,'(a,i4)') 'N+= ',n+ write(,'(a,f.)') 'c= ',c write(,'(a,f.)') 'dt= ',dt write(,'(a,f.)') 'dx= ',dx write(,'(a,f.)') 'v= ',v write(,'(a,i)') 'tmax= ',tmax do method=,4!=ftbs = Mac Cormack 3=peplegmenh Euler 4=Lax- Wendroff if (method==) then do i=,n+ u(i)=f(x(i))!print*,i,u(i)!read* open(0,file='f_4.txt')
open(0,file='f_4.txt') open(300,file='f3_4.txt') open(400,file='f4_4.txt') open(00,file='f_4.txt') do m=,tmax uold=u do i=, n+ if(i==)then u(i)=uold(i)*(.-v)+v*uold(n) else u(i)=uold(i)*(.-v)+v*uold(i-) endif t(:,m)=u elseif (method==)then do i=,n+ u(i)=f(x(i)) do m=,tmax uold=u do i=,n u0(i)=uold(i)-v*(uold(i+)-uold(i)) u0(n+)=uold(n+)+v*uold(n+) u()=0.*(uold()+u0()-v*u0()) do i=,n+ u(i)=0.*(uold(i)+u0(i)-v*(u0(i)-u0(i-))) t(:,m)=u elseif (method==3)then do i=,n+ u(i)=f(x(i)) do m=,tmax uold=u! Ypologismos syntelestwn algorithmou Thomas gia tous n- eswterikous kombous! px gia n=7 (6 eswterikoi komboi):! b() c() 0 0 0 0 d()! a() b() c() 0 0 0 d()! 0 a(3) b(3) c(3) 0 0 d(3)! 0 0 a(4) b(4) c(4) 0 d(4)! 0 0 0 a() b() c() d()! 0 0 0 0 a(6) b(6) d(6)
do i=,n+ if (i>) AA(i)=-v/. BB(i)=. if (i<=n) CC(i)=v/. DD(i)=uold(i) call Thomas(n+,AA,BB,CC,DD,XX) u(:)=xx(:) t3(:,m)=u elseif (method==4)then do i=,n+ u(i)=f(x(i)) do m=,tmax uold=u u()=uold()- c*dt*(uold())/(.*dx)+(0.*c***dt**/dx**)*(uold()-.*uold()) do i=, n u(i)=uold(i)-c*dt*(uold(i+)-uold(i- ))/(.*dx)+(0.*c***dt**/dx**)*(uold(i+)-.*uold(i)+uold(i-)) u(n+)=uold(n+)-c*dt*(- uold(n))/(.*dx)+(0.*c***dt**/dx**)*(-.*uold(n+)+uold(n)) t4(:,m)=u endif!method do m=,tmax t=m*dt write(,*) '------------------------------T=',t,'------------------- --------' write(,*) 'i x FTBS McCormack Peplegmenh_euler Lax-Wendroff Analytikh' do i=,n+ write(,'(i3,f.,f8.)') i,x(i),t(i,m),t(i,m),t3(i,m),t4(i,m),f(x(i)-c*t) write(num,'(i)') m!open(3,file="for_mathematica_t_m"//trim(adjustl(num))//".txt")!do i=,n+!write(3,'(3f.)') t,x(i),t3(i,m)! close(3) do i=,n+ write(0,'(f8.)') x(i),t(i,m) write(0,'(f8.)') x(i),t(i,m) write(300,'(f8.)') x(i),t3(i,m) write(400,'(f8.)') x(i),t4(i,m) write(00,'(f8.)') x(i),f(x(i)-c*t)
!print*,i,t3(i,m)!m print*, 'Done' contains real function f(x) real::x if (x<=.or. x>=) then f=0 elseif (x>.and. x<) then f=*x- else f=-*x+0 end if end function! Algorithmos Thomas subroutine Thomas(n,a,b,c,d,x) integer,intent(in) :: n real, INTENT(INOUT) ::a(n),b(n),c(n),d(n) real, INTENT(OUT) ::x(n) integer::i real ::t(n),u(n) t()=b() u()=d()/t() do i=,n t(i)=b(i)-a(i)*c(i-)/t(i-) u(i)=(d(i)-a(i)*u(i-))/t(i) x(n)=u(n) do i=n-,,- x(i)=u(i)-c(i)/t(i)*x(i+) end subroutine Thomas end program ftbs_mac_cormack Στη συνέχεια παρουσιάζεται ενδεικτικά το αποτέλεσμα του κώδικα για t 0.0 κατά την ζητούμενη τελική χρονική στιγμή t 0. x FTBS Lax-Wendroff McCormack Πεπλεγμένη Αναλυτική Euler 0.00 0.00006 0.00000 0.00000 0.07686 0.00000.00 0.0000 0.00000 0.00000 0.033 0.00000.00 0.00000 0.00000 0.00000 0.06837 0.00000 3.00 0.00000 0.00000 0.00000 0.047 0.00000 4.00 0.00000-0.0000-0.0000 0.04644 0.00000.00 0.00000-0.0000-0.0000 0.037 0.00000 6.00 0.00000 0.00004 0.0000 0.0079 0.00000 7.00 0.00000 0.00004 0.00004-0.0677 0.00000 8.00 0.00000-0.000-0.000-0.047 0.00000 9.00 0.00000-0.000-0.0006-0.06790 0.00000.00 0.00000 0.000 0.000-0.0843 0.00000.00 0.00000 0.00049 0.000-0.09704 0.00000.00 0.00000-0.0003-0.0008-0.6 0.00000
3.00 0.00000-0.004-0.0040-0.09803 0.00000 4.00 0.00000-0.000-0.0003-0.0887 0.00000.00 0.00000 0.0037 0.003-0.0793 0.00000 6.00 0.00000 0.0038 0.003-0.008 0.00000 7.00 0.00000-0.00439-0.0044-0.070 0.00000 8.00 0.00000-0.08-0.076-0.003 0.00000 9.00 0.0000-0.00378-0.00364 0.08 0.00000.00 0.00006 0.004 0.04 0.0643 0.00000.00 0.0009 0.033 0.03344 0.0340 0.00000.00 0.0009 0.000 0.0070 0.047 0.00000 3.00 0.006-0.06-0.0607 0.0484 0.00000 4.00 0.0043-0.09-0.09499 0.04996 0.00000.00 0.04-0.04444-0.04438 0.03938 0.00000 6.00 0.0403 0.38 0.38 0.034 0.00000 7.00 0.037 0.98 0.9-0.008 0.00000 8.00 0.36 0.6879 0.6880-0.03944 0.00000 9.00 0.969 0.0730 0.0730-0.083 0.00000 30.00 0.306-0.44-0.44 0.08 0.00000 3.00 0.940-0.8639-0.8639 0.3368 0.00000 3.00 0.9609-0.943-0.943 0.799 0.00000 33.00.47773-0.6-0.6.3009 0.00000 34.00.78 0. 0..0803 0.00000 3.00 3.066.86.86 3.0934 0.00000 36.00 4.386.36863.36863 4.330.00000 37.00.37830 3.77634 3.77634.73994 4.00000 38.00 6.76.6368.6367 7.83 6.00000 39.00 8.43 8.009 8.009 8.8687 8.00000 40.00 9.64933.7799.77990.3736.00000 4.00.00434 3.38 3.384.7684.00000 4.00.7969.860.860.799 4.00000 43.00 3.09094 7.86 7.864 3.3897 6.00000 44.00 3.668 7.8738 7.8737 3.9060 8.00000 4.00 3.86639 7.7090 7.7090 3.869.00000 46.00 3.668 6.93783 6.93783 3.4463 8.00000 47.00 3.09094.68706.6870.670 6.00000 48.00.7969 3.994 3.994.66 4.00000 49.00.00434.994.994.39.00000 0.00 9.64933 9.907 9.907 8.98966.00000.00 8.43 7.3733 7.3733 7.9304 8.00000.00 6.76.09096.09096 6.4 6.00000 3.00.37830 3.36 3.36.0043 4.00000 4.00 4.386.046.046 3.9099.00000.00 3.066.9.96.97949 0.00000 6.00.78 0.8636 0.8636.670 0.00000 7.00.47773 0.87 0.87.6 0.00000 8.00 0.9609 0.33 0.33.4499 0.00000 9.00 0.940 0.06 0.06 0.7964 0.00000 60.00 0.306 0.0968 0.0968 0.46 0.00000 6.00 0.969 0.00694 0.00694 0.3664 0.00000 6.00 0.36 0.007 0.007 0.366 0.00000 63.00 0.037 0.00068 0.00068 0.89 0.00000 64.00 0.0403 0.0009 0.0009 0.0980 0.00000 6.00 0.04 0.0000 0.0000 0.096 0.00000 66.00 0.0043 0.0000 0.0000 0.0364 0.00000 67.00 0.006 0.00000 0.00000 0.044 0.00000 68.00 0.0009 0.00000 0.00000 0.037 0.00000 69.00 0.0009 0.00000 0.00000 0.00669 0.00000 70.00 0.00006 0.00000 0.00000 0.008 0.00000
Για μια ποιοτική μελέτη των αποτελεσμάτων, ο κώδικας εκτελείται για τις ζητούμενες τιμές του t και τα αποτελέσματα αναπαριστάνονται γραφικά με τη βοήθεια του Mathematica. Έτσι δημιουργούνται τα ακόλουθα γραφήματα: Αναλυτική Λύση FTBS Lax-Wendroff ΜcCormack Πεπλεγμένη Euler Δt=0.00 v=0. Δt=0.00 v=0. Δt=0.00 v= 300 Δt=0.006 v=. 0 0-0 -0 0 000-0 000 0 000-0 000-300 O κώδικας σε Mathematica που χρησιμοποιήθηκε για την παραγωγή των γραφημάτων είναι ο ακόλουθος (με κατάλληλη, κάθε φορά, τροποποίηση των παραμέτρων): a=readlist["f_.txt",{number,number}]; n=length[a]/7; b=table[listplot[a[[7(i-)+;;7(i-)+7]],joined->true],{i,,n,6}] Show[b,PlotRange->All] Μελετώντας τα ανωτέρω διαγράμματα καταλήγουμε στο συμπέρασμα ότι ακριβή λύση στο πρόβλημά μας δίνουν μόνον τα ρητά σχήματα και μάλιστα μόνο για v. Σε όλες τις υπόλοιπες περιπτώσεις όλα τα σχήματα παρουσιάζουν κάποιο βαθμό
αριθμητικής διάχυσης (απόσβεση και διασπορά), με αποτέλεσμα η λύση να αποκλίνει ολοένα και περισσότερο από την αναλυτική καθώς μετακινούμαστε στο χρόνο. Επίσης, παρατηρούμε ότι οι λύσεις των σχημάτων McCormack και Lax-Wendroff ταυτίζονται για το συγκεκριμένο προβλημα. Τέλος, παρατηρούμε ότι για τιμές του v τα ρητά σχήματα αποκλίνουν. Τα ανωτέρω συμπεράσματα βρίσκονται σε ακολουθία με τη θεωρητική ανάλυση της ευστάθειας και της συνοχής των αριθμητικών σχημάτων που χρησιμοποιήθηκαν. Ειδικότερα για τη συνοχή των συγκεκριμένων σχημάτων ισχύουν τα ακόλουθα: Η τροποποιημένη εξίσωση πεπερασμένων διαφορών του σχήματος FTBS είναι η cx x 3 3 ut cux vuxx c v 3v uxxx Ox, x t, xt, t 6 (3) όπου c0, x. Αν στην εξ. (3) θέσουμε v τότε προκύπτει η εξίσωση 3 3 ut cux 0 O x, x t, xt, t, η οποία είναι σχεδόν ταυτόσημη με την αρχική εξίσωση κύματος. Επομένως στη συγκεκριμένη περίπτωση δεν έχουμε αριθμητική διάχυση. Αν στην εξ. (3) θέσουμε v 0. τότε προκύπτει η εξίσωση 3 3 ut cux 0 uxx O x, x t, xt, t, η οποία έχει μόνο αριθμητική απόσβεση. Αν, τέλος, στην εξ. (3) θέσουμε v 0. τότε προκύπτει η εξίσωση 3 3 ut cux 7uxx. uxxx O x, x t, xt, t, η οποία παρουσιάζει και αριθμητική απόσβεση (άρτιες παράγωγοι του u ) και αριθμητική διασπορά (περιττές παράγωγοι του u ). Η τροποποιημένη εξίσωση πεπερασμένων διαφορών του σχήματος Lax-Wendroff είναι η 3 cx x ut cux v uxxx c v u (4) xxxx 6 8 η οποία για v ανάγεται στην αρχική εξίσωση κύματος, ενώ για v 0. και v 0. γίνεται αντίστοιχα ut cux uxxx 9.37uxxxx και ut cux 3.uxxx.86uxxxx οι οποίες παρουσιάζουν αριθμητική απόσβεση. Το σχήμα McCormack έχει συμπεριφορά αντίστοιχη με αυτή του Lax-Wendroff. Τέλος για την πεπλεγμένη Euler, η τροποποιημένη εξίσωση πεπερασμένων διαφορών είναι η 3 ut cux c tu xx c x c t uxxx 6 3 Παρατηρούμε ότι το δεξιό τμήμα της τροποποιημένης εξίσωσης δεν μηδενίζεται για οποιαδήποτε επιλογή του αριθμού, επομένως το σχήμα θα παρουσιάζει πάντοτε αριθμητική διάχυση.