Υπολογιστικές Μέθοδοι 006-7 Άσκηση. (Επιμέλεια: Ιωάννης Λυχναρόπουλος) Θα επιλύσουμε την εξίσωση: urr + ur =u t, t > t 0 και R i /Rout r r Έστω R i = 0.4 και R out = δηλαδή: Ri / R out = 0.4 με αρχική συνθήκη: ur (,0) = 0 και οριακές τιμές τις:, u(0.4, t ) = 0 και u(, t ) = 00 Έστω επίσης ότι διαιρούμε την απόσταση μεταξύ R i και 0.6 Δ r = τότε ri = 0.4 + iδr, i = 0,,..., I I Επίσης από οριακές τιμές θα έχουμε: u 0 = 0 και u = 0 I R out σε I ίσα διαστήματα: Ρητό σχήμα ui ui + ui+ ui+ ui ui ui + = Δr ri Δr ui = ui u + i u + i+ + Δr Δr riδr Δr riδr, i =,..., I Ακολουθεί η ανάλυση ευστάθειας vo Newma (Δεν βλάπτει την γενικότητα να χρησιμοποιήσουμε τη σχέση: r= iδ r αντί της r = 0.4 +Δ i r. Επίσης το iδr το γράφουμε σαν urt (, ) = ( trr ) ( ) =( te ) i jδr για να μην υπάρξει σύγχυση με το μιγαδικό i = ) ikr ik( r Δ r) ikr ik( r+δ r) ik( r+δr) ik( r Δr) ikr e e + e e e e () t + = [ ( t +) () t ] Δr jδr Δr ikδr ikδr ikδr ikδr e + e e e ( t +) ( t) () t + = Δr jδr Δr ( t+) Θα χρησιμοποιήσουμε τους συμβολισμούς λ =, ξ =. Δ r () t ikδr ikδr λ ikδr ikδr λ λ ( e + e ) + ( e e ) = ξ λ( cosβ ) + ( isiβ) = ξ j j όπου β = kδ r β λ β λ λ si + i si β = ξ 4λsi + i si β = ξ j j β λ β ξ = 4λsi + si < 4 si + [ si ] β j λ λ β Το σχήμα συγκλίνει όταν ξ <. i
Υπολογιστικές Μέθοδοι 006-7 Πεπλεγμένο σχήμα u u + u u u u u + = Δr r Δr i i i+ i+ i i i i i+ Δr ri Δr Δr i, j i, j ui u + i u + i+ + u = i Δr Δr riδr Δr riδr u u + + u Η ανάλυση ευστάθειας δίνει τα εξής: urt (, ) = ( trr ) ( ) =( te ) ikrr + t t Δ + Δ u = i Δr ri Δr ik ( r Δ r) ikr ik( r+δ r) ik ( r+δr ) ik ( r Δr) ikr e e + e e e e ( t+δ t) + ( t t) ( t r j r r = +Δ Δ Δ Δ ikδr ikδr ikδr ikδr e + e e e ( t+) ( t) ( t+δ t) + = r j r r Δ Δ Δ ( t+) Θα χρησιμοποιήσουμε τους συμβολισμούς λ =, ξ =. Δ r () t ikδr ikδr λ ikδr ikδr ξ λ ξ λ( e + e ) + ( e e ) = λ( cosβr ) + ( isiβ) = j ξ j ξ όπου β = kδ r και [ )] β λ ξ βr λ ( i ) ( i ) j ξ j ξ β λ + 4 si ( i si ) λ β j ξ = ξ = β λ + 4 λsi ( i siβ) β λ j + 4λsi + siβ j λ si + si β = 4 λsi + si β = β λ 4 si si + λ + β j ξ = < β λ + 4λ si + si β j Η παραπάνω ανισότητα ισχύει πάντα και επομένως το πεπλεγμένο σχήμα είναι ευσταθές ανεξάρτητα από την επιλογή των διαστημάτων στο χώρο και το χρόνο.
Υπολογιστικές Μέθοδοι 006-7 Σχήμα Crak-Nicolso ui ui + ui+ ui+ u i + + Δr ri Δr u u + u u u u u + + = i i i+ i+ i i i Δr ri Δr ui + u + i + u + i+ = Δr 4riΔr Δr Δr 4riΔr = u + ui u + i+ + Δr 4riΔr Δr Δr 4riΔr i Η ανάλυση ευστάθειας δίνει τα εξής: urt (, ) = ( trr ) ( ) =( te ) ikr ik ( r Δ r) ikr ik ( r +Δ r) ik ( r +Δr ) ik ( r Δr) e e + e e e ( t +Δ t) + + Δr jδr Δr ik ( r Δ r ) ikr ik ( r +Δ r) ik ( r +Δr) ik ( r Δr ) ikr e e + e e e e + () t + ( ) () = +Δ Δr r Δr [ t t t ] ikδr ikδr ikδr ikδr e + e e e ( t+δ t) + Δr jδr Δr ikδr ikδr ikδr ikδr e + e e e ( t+) ( t) + () t + = Δr jδr Δr ( t+) Χρησιμοποιούμε τους συμβολισμούς λ =, ξ =. Δ r () t ikδr ikδr λ ikδr ikδr ξ λ ( e + e ) + ( e e ) = j ( ξ + ) λ ( ξ ) λ( cosβ ) + ( i siβ) = j ξ + όπου β = kδ r β λ ( ξ ) β λ ξ λ si + ( isi β) = 4 λsi + ( isi β) = j ξ + j ξ + β λ ( ξ + ) 4 λsi + ( i siβ) = ( ξ ) j ( ) 3
Υπολογιστικές Μέθοδοι 006-7 β λ β λ + ( i ) + j j ξ = ξ = β λ β λ + ( i ) + j j Άρα το ξ είναι της μορφής: ( i β) 4 λ si si β 4 λsi si ( i β) 4 λ si si β 4 λsi si Α+Β i ( Α+Β i )( +Α+Β i ) 4 Α Β 4Β ξ = = = + i +Α iβ ( +Α ) +Β ( +Α ) +Β ( +Α ) +Β με Α>0 Θέλουμε ξ < ( Α Β ) ( ) ( Β) 4 4 + < 4 Α Β + 4 Β < ( +Α ) +Β ( +Α ) +Β ( +Α ) +Β ( ) 8 (4 4 ) 0 Α + Α+Α +Β > ( ) ( ) ( ) Η παραπάνω ανισότητα ισχύει πάντα. Άρα το σχήμα είναι πάντοτε ευσταθές. Τα αποτελέσματα για 6 διαστήματα (7 κόμβοι), με Δr = 0., =0-7 και μέγιστο απόλυτο σφάλμα 0-4 είναι 0.00 4.40.5 3.50 43.8 69.95 00.00 Οι παρακάτω πίνακες δείχνουν τον αριθμό των επαναλήψεων (χρονικά βήματα) μέχρι την επίτευξη της μόνιμης κατάστασης, για διάφορες εκτελέσεις του προγράμματος: Για κόμβους με =0-7 και σφάλμα 0-4 Μέθοδος Χρονικά Βήματα Ρητό Σχήμα 7864 Πεπλεγμένο Σχήμα 7864 Crak Nicolso 7864 Για 0 κόμβους με =0-7 και σφάλμα 0-4 Μέθοδος Χρονικά Βήματα Ρητό Σχήμα 8344 Πεπλεγμένο Σχήμα 889 Crak Nicolso 837 Για 00 κόμβους με =0-7 και σφάλμα 0-4 Μέθοδος Χρονικά Βήματα Ρητό Σχήμα 8388 Πεπλεγμένο Σχήμα 75437 Crak Nicolso 78 4
Υπολογιστικές Μέθοδοι 006-7 Το πρόγραμμα σε Fortra για την υλοποίηση των διαφόρων μεθόδων είναι το ακόλουθο: Program rhto_peplegmeo_c implicit oe doubleprecisio,allocatable::r(:),u(:),uold(:),temp(:) iteger::,i,j,k,m,status,tmax,doe,method doubleprecisio::err,max,dr,dz,dt,l doubleprecisio::a,b,c,d,e,f =00 dt=0.00 dr=0.6/() err=0.000 allocate(r(0:),u(0:),uold(0:),temp(0:)) tmax=000000 do i=0, r(i)=0.4+i*dr ed do read*,method!method=3!=rhto, =peplegmeo, 3=crak icolso if (method==) the!=rhto u(0:)=0. m= doe=0 do while (m<=tmax.ad. doe==0) uold=u u(0)=0 u()=00 do i=,- a=dt/dr**-dt/(*r(i)*dr) b=-(.*dt)/dr** c=dt/dr**+dt/(*r(i)*dr) ed do! elexos gia termatismo u(i)= a*uold(i-)+b*uold(i)+c*uold(i+) temp(0:) = abs(u(0:) - uold(0:)) if (maxval(temp)<err) the doe= ed if m=m+ ed do ope(0,file='res_rhto.txt',recl=0000) Write(0,'(<>(f6.,x))') u prit*, 'Rhto' prit*, m-,max elseif (method==) the!=peplegmeo u(0:)=0. m= doe=0 do while (m<=tmax.ad. doe==0) 5
Υπολογιστικές Μέθοδοι 006-7 uold=u u(0)=0 u()=00 do i=,- ed do!sytelestes! elexos gia termatismo a= +.*dt/dr** b=dt/dr** - dt/(.*r(i)*dr) c=dt/dr** + dt/(.*r(i)*dr) u(i)= (b*u(i-)+c*u(i+)+uold(i))/a temp(:) = abs(u(:) - uold(:)) if (maxval(temp)<err) the doe= ed if m=m+ ed do ope(,file='res_pepleg.txt',recl=0000)!do i=,! ta typwoyme aapoda gia a ta deiksei o array visualizer swsta! Write(,'(<>(f6.,x))') u(:)! ed do prit*, 'Peplegmeo' prit*, m-,max elseif (method==3) the!3=crank NICOLSON u(:)=0. m= doe=0 do while (m<=tmax.ad. doe==0) uold=u u(0)=0 u()=00 do i=,-!sytelestes a=./dr** +./dt b=./(.*dr**) -./(4.*r(i)*dr) c=./(.*dr**) +./(4.*r(i)*dr) d= -./dr** +./dt e=-./(.*dr**) - /(4.*r(i)*dr) f=-./(.*dr**) + /(4.*r(i)*dr) u(i)= (-f*u(i-)-e*u(i+)+d*uold(i)+b*uold(i-)+c*uold(i+))/a!u(i,j)=(0.5*uold(i-,j)*(./(dr**)-./(r(i)*.*dr))+0.5*u(i-,j)*(./(dr**)-./(r(i)*.*dr))+uold(i+,j)*(./(dr**)+./(r(i)*.*dr))+uold(i,j+)*(./dz**)+0.5*u (i,j-)*(./dz**)+0.5*uold(i,j-)*(./dz**)+uold(i,j)*(./dt-./dr**-./dz**))/(./dr**+./dz**+./dt) ed do! elexos gia termatismo temp(:) = abs(u(:) - uold(:)) if (maxval(temp)<err) the doe= ed if m=m+ ed do 6
Υπολογιστικές Μέθοδοι 006-7 ope(,file='res_crak.txt',recl=0000)! do i=, Write(,'(<>(f6.,x))') u(:)! ed do prit*, 'Crak-Nicolso' prit*, m-,max ed if ed program 7
Υπολογιστικές Μέθοδοι 006-7 Άσκηση. (Επιμέλεια: Κωνσταντίνος Ρήτος) Θα λύσουμε την εξίσωση: uxx + uyy = u t > και 0 x W/H, 0 y t t 0 Αρχικές και συνοριακές συνθήκες: u( x,y,t 0 ) = 0, u ( 0,y,t) = u( x, 0,t) = 0, u (,y,t) u( x,,t) Θεωρούμε επίσης ότι t 0 =0, W/H= και =Δy=h Ρητό σχήμα = = 0 u u u u + u u u + u i, j i, j i+, j i, j i, j i, j+ i, j i, j = + + O Δy Δy u = λu + λu + λu + λu + ( 4 λ) u i, j i, j i+, j i, j+ i, j i, j i = 0,,..., I j = 0,,..., J = 0,,..., N [,, ] όπου λ=/h Η παραπάνω σχέση αξιοποιείται στον κώδικα του παραρτήματος για τους εσωτερικούς κόμβους. ak jδy akxi y Ακολουθεί ανάλυση ευστάθειας vo Newma. Θεωρούμε: ui, j e e, όπου a = και αντικαθιστούμε στην εξίσωση πεπερασμένων διαφορών ak ak xi y jδy ak ak xi y jδy e e e e akx( i+ ) ak y jδy ak ak xi y jδy akx( i ) aky jδy e e e e + e e = + ak aky( j ) y aky j y aky( j ) y xi + Δ akxi Δ akxi Δ e e e e + e e Δy akx akx = ( e + e ) + = ak Δy ak Δy ( y y e + e ) Δy Συνδυάζοντας τέλος κατάλληλα τους όρους εντός των παρενθέσεων προκύπτει + kx k y y ξ = = 4λxsi 4λysi Δ 8
Υπολογιστικές Μέθοδοι 006-7 όπου λ x =/Δχ και λ y = /Δy. Επομένως το παραπάνω ρητό σχήμα είναι ευσταθές μόνο όταν + kx k y y ξ = = 4λxsi 4λysi Δ < που οδηγεί στο κριτήριο ευστάθειας λx + λy < Δ t( + ) < Δy Σημειώνεται ότι στη δική μας περίπτωση όπου =Δy=h το κριτήριο ευστάθειας Δ t είναι <. h 4 Πεπλεγμένο σχήμα u u u u + u u u + u i, j i, j i+, j i, j i, j i, j+ i, j i, j = + + O Δy Δy [,, ] Επειδή έχουμε =Δy=h η παραπάνω εξίσωση γράφεται στη μορφή u, = λu, λu, λu, λu, + (+ 4 λ) u i j i j i+ j i j+ i j i, j i = 0,,..., I j = 0,,..., J = 0,,..., N Η ανάλυση ευστάθειας δίνει τα εξής: ak ak xi yjδy ak ak xi yjδy e e e e = akx( i+ ) akyjδy ak ak xi yjδy akx( i ) akyjδy e e e e + e e = + ak aky( j ) y ak yj y aky( j ) y xi + Δ akxi Δ akxi Δ e e e e + e e Δy = ( e akx akx akx akx akyδy akyδy [ λχ ( e + e ) λy( e + e )] = akyδy akyδy + e ) + ( e + e ) Δy ξ = = < kx k yδy + 4λxsi + 4λysi Η παραπάνω ανισότητα ισχύει πάντα αφού ο παρονομαστής είναι πάντα μεγαλύτερος της μονάδας. Επομένως το πεπλεγμένο σχήμα είναι ευσταθές ανεξάρτητα από την επιλογή των διαστημάτων στο χώρο και το χρόνο. 9
Υπολογιστικές Μέθοδοι 006-7 Σχήμα Crak-Nicolso Εφαρμόζοντας κεντρώες εκφράσεις πεπερασμένων διαφορών στο χρόνο και το χώρο προκύπτει η εξίσωση πεπερασμένων διαφορών: ui, j ui, j ui+, j ui, j + ui, j ui+, j ui, j+ ui, j = θx + ( θ ) x + ui, j+ ui, j + ui, j ui, j+ ui, j+ ui, j θy + ( θ ) [,, ] y + O Δy Δy Δy i = 0,,..., I j = 0,,..., J = 0,,..., N Στην περίπτωση μας που ισχύει =Δy=h και θ Χ =θ y =/ προκύπτει το σχήμα Crak- Nicolso λu + λu + λu + λu + ( λ) u = λu λu λu λu + ( + λ) u + + + + i+, j i, j+ i, j i, j i, j i, j i+, j i, j+ i, j i, j όπου λ=/h. Η ανάλυση ευστάθειας δίνει τα εξής: ak ( ) y y( ) x i+ ak jδ y ak ak j y xi + Δ akx( i ) aky jδy λ e e + λ e e + λ e e + aky( j ) Δy ak ak xi y jδy akxi λ e e + ( λ) e e = ak ( ) aky j y aky( j ) y x i+ Δ akxi + Δ akx( i ) aky j Δ y λ + e e λ + e e λ + e e ak ak xi y( j ) Δy akxi aky jδy λ e e + ( + λ) e e ak ak ( ) x akx yδy akyδy λ e + e + e + e + ξ = = λ < ak ak ( ) x akx yδy akyδy + λ e + e + e + e + λ Η παραπάνω ανισότητα ισχύει πάντα αφού ο αριθμητής είναι πάντα μικρότερος από τον παρονομαστή. Επομένως το σχήμα Crak-Nicolso είναι ευσταθές ανεξάρτητα από την επιλογή των διαστημάτων στο χώρο και το χρόνο. Το πρόγραμμα που χρησιμοποιεί τα αντίστοιχα σχήματα παρουσιάζεται στο παράρτημα. Ο παρακάτω πίνακας περιέχει τα αποτελέσματα για 0 x 0 διαστήματα ( x κόμβοι), h=/0 και =0.00 και μέγιστο απόλυτο σφάλμα 0-4 0 0 0 0 0 0 0 0 0 0 0 0.44 4.87 7.35 9.98 3.0 6.95.84 33. 55.00 0 0 4.87 9.7 4.54 9.55 5. 3.93 4.9 55.00 76.79 0 0 7.35 4.54.55 8.57 35.99 44.48 55.00 68.80 87.6 0 0 9.98 9.55 8.57 37.8 45.79 55.00 65.5 78.06 93.05 0 0
Υπολογιστικές Μέθοδοι 006-7 0 3.0 5. 35.99 45.79 55.00 64.0 74.00 84.87 96.99 0 0 6.95 3.93 44.48 55.00 64.0 7.8 8.4 90.44 00.0 0 0.84 4.9 55.00 65.5 74.00 8.4 88.44 95.46 0.65 0 0 33. 55.00 68.80 78.06 84.87 90.44 95.46 00.9 05.3 0 0 55.00 76.79 87.6 93.05 96.99 00.0 0.65 05.3 07.56 0 0 0 0 0 0 0 0 0 0 0 0 Οι παρακάτω πίνακες δείχνουν τον αριθμό των χρονικών βημάτων ώστε να επιτευχθεί η μόνιμη λύση όπως αυτή προκύπτει από το απόλυτο σφάλμα: Για x κόμβους με =0.00 και σφάλμα 0-4 Μέθοδος Χρονικά βήματα Ρητό Σχήμα 496 Πεπλεγμένο 589 Crak-Nicolso 543 Για x κόμβους με =0.00 και σφάλμα 0-6 Μέθοδος Χρονικά βήματα Ρητό Σχήμα 79 Πεπλεγμένο 87 Crak-Nicolso 800 Για x κόμβους με =0.000 και σφάλμα 0-4 Μέθοδος Χρονικά βήματα Ρητό Σχήμα 3789 Πεπλεγμένο 4057 Crak-Nicolso 394 Για x κόμβους με =0.000 και σφάλμα 0-6 Μέθοδος Χρονικά βήματα Ρητό Σχήμα 65 Πεπλεγμένο 658 Crak-Nicolso 6354 Παρατηρούμε ότι τα αποτελέσματα ανεξάρτητα από τη μέθοδο έχουν ακριβώς την ίδια ακρίβεια. Αυτό που διαφέρει είναι τα χρονικά βήματα που απαιτούνται και η ευστάθεια κάθε μεθόδου. Συγκεκριμένα το ρητό σχήμα είναι το πιο γρήγορο αλλά ταυτόχρονα και αυτό στο οποίο απαιτείται προσοχή στην επιλογή των διαστημάτων στο χώρο και το χρόνο ώστε να είναι ευσταθές. Το πεπλεγμένο σχήμα και το σχήμα Crak-Nicolso είναι πάντα ευσταθή με το σχήμα Crak- Nicolso να υπερτερεί σε αριθμό βημάτων. Σαν βέλτιστο σχήμα θα μπορούσαμε να θεωρήσουμε το σχήμα Crak-Nicolso.
Υπολογιστικές Μέθοδοι 006-7 program rito_peplegmeo_c implicit oe! Variables doubleprecisio,allocatable::u(:,:),uold(:,:),temp(:,:) doubleprecisio::err,max,dx,dy,dt,h doubleprecisio::a,b,c,d,e iteger::,i,j,k,m,status,tmax,doe,method! Body of rito_peplegmeo_c =0!αριθμός διαστημάτων dt=0.000 dx=./() dy=./()!dx=dy=h h=dx err=0.000 allocate(u(,),uold(,),temp(,)) tmax=00000 read*, method!method=3!=rito, =peplegmeo, 3=crak icolso if (method==) the!=rito u(:,:)=0. m= doe=0 do while (m<=tmax.ad. doe==0) uold=u u(,:)=0 u(:,)=0 u(,:)=0. u(:,)=0. do i=, do j=,!συντελεστές a=dt/(h**) b=a c=a d=a e=-4*a u(i,j)=a*uold(i-,j)+b*uold(i+,j)+c*uold(i,j+)+d*uold(i,j- )+e*uold(i,j)!έλεγχος για τερματισμό temp(:,:)=abs(u(:,:)-uold(:,:))
Υπολογιστικές Μέθοδοι 006-7 if(maxval(temp)<err) the doe= edif m=m+ ope(0,file='res_rhto.txt',recl=0000) do i=, write(0,'((f6.,x))') u(i,:) prit*, 'Rito' prit*, m-,'max' elseif (method==) the!=peplegmeo u(:,:)=0. m= doe=0 do while (m<=tmax.ad. doe==0) uold=u u(,:)=0 u(:,)=0 u(,:)=0. u(:,)=0. do i=, do j=,!συντελεστές a=+4*(dt/(h**)) b=dt/(h**) c=b d=b e=b u(i,j)=(b*u(i-,j)+c*u(i,j-)+d*u(i+,j)+e*u(i,j+)+uold(i,j))/a!έλεγχος για τερματισμό temp(:,:)=abs(u(:,:)-uold(:,:)) if(maxval(temp)<err) the doe= edif m=m+ ope(,file='res_pepleg.txt',recl=0000) do i=, write(,'((f6.,x))') u(i,:) prit*, 'Peplegmeo' prit*, m-,'max' 3
Υπολογιστικές Μέθοδοι 006-7 elseif (method==3) the!3=crak icolso u(:,:)=0. m= doe=0 do while (m<=tmax.ad. doe==0) uold=u u(,:)=0 u(:,)=0 u(,:)=0. u(:,)=0. do i=, do j=,!συντελεστές a=*(+*(dt/(h**))) b=dt/(h**) e=*(-*(dt/(h**))) u(i,j)=(b*(u(i-,j)+u(i+,j)+u(i,j-)+u(i,j+)+uold(i-,j)+uold(i+,j)+uold(i,j-)+uold(i,j+))+e*uold(i,j))/a!έλεγχος για τερματισμό temp(:,:)=abs(u(:,:)-uold(:,:)) if(maxval(temp)<err) the doe= edif m=m+ ope(,file='res_crak.txt',recl=0000) do i=, write(,'((f6.,x))') u(i,:) prit*, 'Crak-Nicolso' prit*, m-,'max' edif ed program rito_peplegmeo_c 4