ΑΣΚΗΣΗ ΥΠΟΛΟΓΙΣΤΙΚΕΣ ΜΕΘΟΔΟΙ, 008-009, 5 Ο ΕΞΑΜΗΝΟ ΕΡΓΑΣΙΑ #3: ΕΛΛΕΙΠΤΙΚΑ ΠΡΟΒΛΗΜΑΤΑ ΗΜΕΡΟΜΗΝΙΑ ΠΑΡΑΔΟΣΗΣ:..008 ΔΙΔΑΣΚΩΝ: Δ. Βαλουγεώργης Επιμέλεια απαντήσεων: Ιωάννης Λυχναρόπουλος Η εξίσωση Laplace σε δύο διαστάσεις w w 0 () x y περιγράφει διάφορα προβλήματα μηχανικής των στερεών και των ρευστών. Να υπολογισθεί αριθμητικά η τιμή της εξαρτημένης μεταβλητής w x, y στο κέντρο μιας ορθογώνιας πλάκας με 0 x, 0 y και με οριακές συνθήκες w w0, y w, y 0, 0 και w x, x. () Λύση y y 0 Διακριτοποιούμε το πεδίο ορισμού επιλέγοντας Nx ίσα μεταξύ τους διαστήματα ( Nx κόμβους) στη x κατεύθυνση και Ny ίσα μεταξύ τους διαστήματα ( Ny κόμβους) στη y κατεύθυνση. Για απλούστευση των τύπων επιλέγουμε Nx Ny έτσι ώστε να δημιουργηθούν τετραγωνικά κελιά και να είναι: hx hy h Nx Ny Επίσης, επειδή ζητείται η ποσότητα στο κέντρο της πλάκας, βολεύει να επιλέξουμε το Ny ως μία δύναμη του (δηλ. Ny,,,3,... ) έτσι ώστε το κέντρο της πλάκας να συμπίπτει με κάποιον κόμβο του τετραγωνικού πλέγματος και συγκεκριμένα με τον κόμβο: i, j Nx /, Ny / Στο επόμενο σχήμα παρουσιάζεται το πλέγμα για Ny, Nx (x=0,y=) (,3) (,3) (3,3) (,3) (5,3) (,) (,) (3,) (,) (5,) Σχήμα (x=0,y=0) (i=,j=) (x=,y=0) (,) (3,) (,) (5,)
Διακριτοποιούμε την () στον τυχαίο εσωτερικό κόμβο (, i j) χρησιμοποιώντας εκφράσεις κεντρώων πεπερασμένων διαφορών ης τάξης. Έτσι έχουμε: w w w w w w i, j i, j i, j i, j i, j i, j hx hy 0 wi, jwi, jwi, jwi, j wi, jwi, j 0 h wi, j wi, jwi, jwi, j wi, j, i,..., Nx, j,..., Ny (3) Οι οριακές συνθήκες σε διακριτή μορφή δίνουν: w(0, y) 0w 0, j,..., Ny (), j w(, y) 0wNx, j 0, j,..., Ny (5) wx (,) xw ( i) h, i,..., Nx (6) iny, x w Για τη συνθήκη 0 επιλέγουμε την πιο απλή λύση, δηλαδή να y y 0 χρησιμοποιήσουμε μία έκφραση πρόδρομων πεπερασμένων διαφορών ης τάξης. (Αυτό βέβαια έχει σαν αποτέλεσμα ολόκληρο το αριθμητικό μας σχήμα να είναι πλέον ης τάξης.) Έτσι έχουμε: wi, wi, 0 wi, wi,, i,,3,..., Nx (7) h y Προσοχή πρέπει να δοθεί στο χειρισμό των γωνιακών κόμβων του πλέγματος, διότι σε αυτούς τους κόμβους η πληροφορία προέρχεται από δύο οριακές συνθήκες, οι οποίες συχνά δίνουν διαφορετικές τιμές. Για παράδειγμα στον κόμβο (5,3) του σχήματος μπορεί να δοθεί η τιμή 0 ή η τιμή. Υπάρχουν δύο βασικοί τρόποι αντιμετώπισης. Ο πιο απλός (αλλά όχι και ακριβής) τρόπος είναι να επιλέξουμε και να χρησιμοποιήσουμε αυθαίρετα μία από τις δύο τιμές, ενώ αν θέλουμε πιο ακριβή αποτελέσματα θα πρέπει η τιμή του γωνιακού κόμβου να προκύπτει από μία διαδικασία παρεμβολής μεταξύ των τιμών των γειτονικών προς αυτόν συνοριακών κόμβων. Στο συγκεκριμένο πρόβλημα επιλέγουμε τον πρώτο και πιο απλό τρόπο και συγκεκριμένα οι γωνιακοί κόμβοι (, Ny ), ( Nx, Ny ) προέρχονται από την οριακή συνθήκη wx (,) x, ενώ οι γωνιακοί κόμβοι (,), ( Nx,) προέρχονται w από την οριακή συνθήκη 0. y y 0 Επιλύοντας το πρόβλημά μας με το πλέγμα του σχήματος έχουμε το ακόλουθο σύστημα 5 εξισώσεων με 5 αγνώστους:
w, w, w, w, w3, w, w, w, w5, w5, w, 0 w w w w w w w w w w w w w w w w5, 0 w,3 0 w,3 0.5 w3,3 w,3.5 w, 3,,,3, 3,,, 3,3 3,, 5, 3,,3, 5,3 Το παραπάνω σύστημα μπορούμε να το λύσουμε με τη βοήθεια του Mathematica ως εξής: Solvew w, w w, w3 w3, w w, w5 w5, w 0, w w3 w w3 w,w3 w w w33 w3, w w5 w3 w3 w,w5 0, w3 0, w3 0.5, w33, w3.5, w53, w, w, w3, w, w5, w, w, w3, w, w5, w3, w3, w33, w3, w53 Τα αποτελέσματα παρουσιάζονται στον ακόλουθο πίνακα: w i= i= i=3 i= i=5 j=3 0 0.5.5 j= 0 0.076 0.78 0.738095 0 j= 0 0.076 0.78 0.738095 0 Επομένως η ζητούμενη ποσότητα στον κέντρο της πλάκας, δηλαδή στον κόμβο (3,) είναι η: 0.78 Για να επιλύσουμε τώρα τη γενική περίπτωση των Nx Ny εξισώσεων, θα πρέπει να χρησιμοποιήσουμε μία επαναληπτική μέθοδο επίλυσης συστημάτων όπως για παράδειγμα την Gauss-Seidel. Έτσι η (3) γράφετε στη μορφή: 3
( k ) ( k ) ( k ) ( k ) ( k w ) i, j wi, j wi, j wi, j wi, j, i,..., Nx, j,..., Ny όπου με (k) δηλώνουμε τον δείκτη της επανάληψης. Το πρόγραμμα σε Fortran που επιλύει το πρόβλημα μας είναι το ακόλουθο: Program GaussSeidel implicit none doubleprecision,allocatable::w(:,:),wold(:,:) integer::nx,ny,i,j,maxi,done,k doubleprecision::s,rel,err,max,t,h! Arithmos diasthmatwn (= arithmos kombwn-) Ny=! Ths morfhs ^κ wste na yparxei kombos akribws sto kentro ths plakas Nx=*Ny! Gia na exoume Dx=Dy allocate(w(nx+,ny+),wold(nx+,ny+)) maxi=50000 rel=0.0000000 h=./ny!(=./nx) k= done=0 w(:,:)=0.! w(,:)=0! w(nx+,:)=0 do while (k<=maxi.and. done==0) wold(:,:)=w(:,:) do i=,nx+ w(i,ny+)=(i-)*h do j=ny,,- do i=,nx w(i,j)= 0.5*(w(i,j+)+w(i,j-)+w(i+,j)+w(i-,j)) do i=,nx+ w(i,)=w(i,)! elenxos gia termatismo max=- do i=,nx do j=,ny err = abs((w(i,j) - wold(i,j))/w(i,j)) if (err>max) then max=err end if if (max<rel) then done= end if k=k+
open(,file='res_gauss.txt',recl=000)!xwris to RECL=000 to megisto platos xwraei monon 5 sthles toy pinaka do j=,ny+!ektypwsh toy plegmatos anapoda gia na apodothei swstotera sto Array Viewer write(,*) w(:,j)! w at center t=w(nx/+,ny/+) print*, k-,t end Εκτελώντας των κώδικα π.χ. για Ny 6, Nx 3 παίρνουμε σαν αποτέλεσμα για την ποσότητα w στο κέντρο της πλάκας την τιμή: 0.658 Επίσης ανοίγοντας το αρχείο 'res_gauss.txt' χρησιμοποιώντας το πρόγραμμα Compaq Array Viewer παίρνουμε την ακόλουθη κατανομή της ποσότητας w στην επιφάνεια της πλάκας: 5
ΑΣΚΗΣΗ Να λυθεί το πρόβλημα οριακών τιμών u u u 0, r r r z 0 r R, 0 z L με οριακές συνθήκες u r, 0 ur, L 0 και,z ur u R. Περιγράψτε ένα φυσικό φαινόμενο που μοντελοποιείται με το παραπάνω πρόβλημα οριακών τιμών. Λύση Επιλέγουμε R=, L= και u R =5. Διακριτοποιούμε επιλέγοντας Nr ίσα μεταξύ τους διαστήματα στην r κατεύθυνση και Nz Nr ίσα μεταξύ τους διαστήματα στην z κατεύθυνση, επομένως είναι: h / Nr h / Nz h r z u R Σχήμα Ο κόμβος (i=,j=) βρίσκεται στο σημείο (r=0,z=0), ενώ ο κόμβος (i=nr+,j=nz+) βρίσκεται στο σημείο (r=r,z=l). Επιλέγουμε να διακριτοποιήσουμε την () με ένα σχήμα κεντρώων πεπερασμένων διαφορών ης τάξης. Έτσι έχουμε: ui, jui, jui, j ui, jui, j ui, j ui, jui, j 0 hr r i hr hz ( i) hr ui, jui, jui, j ui, jui, jui, j ui, jui, j 0 ( i ) 6
u,,,,,,,...,,,..., i j u u u u i Nr j ( i ) i j ( i ) i j i j i j Nz (3) Για τις οριακές συνθήκες έχουμε τα ακόλουθα: Στον άξονα του κυλίνδρου ισχύει η συνθήκη συμμετρίας: u r r 0 Παρατηρούμε ότι εφαρμόζοντας τον κανόνα Hospital έχουμε: () όταν r 0 γράφεται ως: 0 () u lim r u. Έτσι η r0 r r u u r z 0 (5) Εφαρμόζοντας κεντρώες πεπερασμένες διαφορές στην (5) παίρνουμε: u u u u u u 0, j, j 0, j, j, j, j hr hz u, j u, j u0, j u, j u, j u, j 0 (6) Για την εκτίμηση του φανταστικού κόμβου διακριτοποιούμε τη συνθήκη συμμετρίας () και παίρνουμε: u 0, j u u, j 0, j h r 0 u (7) 0, j u, j Επομένως η (6) λόγω της (7) γίνεται: u, j u, j u, j u, j u, j 0 u, j u, j u, j u, j 0, 6 j,..., Nz (8) Για τις υπόλοιπες οριακές συνθήκες έχουμε: ur (,0) 0u i, 0, i,..., Nr (9) url (, ) 0uiNz, 0, i,..., Nr (0) urz (, ) ur unr, j 5, j,..., Nz () Επιλέγουμε όλοι οι γωνιακοί κόμβοι να έχουν τιμή 0. Έστω για παράδειγμα ότι έχουμε την απλή περίπτωση του πλέγματος του σχήματος με έναν μόνον εσωτερικό κόμβο: 7
(,3) (,3) (3,3) Σχήμα (,) (,) (3,) Τότε έχουμε να επιλύσουμε το ακόλουθο σύστημα 9 εξισώσεων με 9 αγνώστους: u, 0 u, 0 u3, 0 u, u, u,3 u, 6 u, u3, u, u,3 u, () () u3, 5 u,3 0 u,3 0 u 0 3,3 H λύση του συστήματος παρουσιάζεται στον ακόλουθο πίνακα: u i= i= i=3 j=3 0 0 0 j=.3636.055 5 j= 0 0 0 Για να επιλύσουμε τώρα τη γενική περίπτωση των Nr Nz εξισώσεων, θα πρέπει να χρησιμοποιήσουμε μία επαναληπτική μέθοδο επίλυσης συστημάτων όπως για παράδειγμα την Gauss-Seidel. Έτσι η (3) γράφεται στη μορφή: (,) (,) (3,) u u u u ( i) ( i) i,..., Nr, j,..., Nz ( k) ( k) ( k) ( k) ( k) i, j i, j i, j i, j ui, j, ενώ η (8) γράφεται ως: ( k ) ( ) ( ) ( ), k k k u j u, j u, j u, j 0, j,..., Nz 6 όπου με (k) δηλώνουμε τον δείκτη της επανάληψης. 8
Το πρόγραμμα σε Fortran που επιλύει το πρόβλημα μας είναι το ακόλουθο: Program GaussSeidel implicit none doubleprecision,allocatable::u(:,:),uold(:,:) integer::n,i,j,maxi,done,k doubleprecision::s,rel,err,max,t,h! Arithmos diasthmatwn (= arithmos kombwn-) N=0! =Nr=Nz allocate(u(n+,n+),uold(n+,n+)) maxi=50000 rel=0.0000000 h=./n k= done=0 u(:,:)=0.! u(:,)=0! u(:,n+)=0 u(n+,:n)=5. do while (k<=maxi.and. done==0) uold(:,:)=u(:,:) do j=,n do i=,n if (i==) then u(i,j)=(*u(,j)+u(,j+)+u(,j-))/6. else u(i,j)= 0.5*( (+./(*(i-)))*u(i+,j)+(-./(*(i-)))*u(i-,j)+u(i,j+)+u(i,j-)) end if! elenxos gia termatismo max=- do i=,n do j=,n err = abs((u(i,j) - uold(i,j))/u(i,j)) if (err>max) then max=err end if if (max<rel) then done= end if k=k+ open(,file='results.txt',recl=000) do j=,n+ write(,*) u(:,j) 9
print*, k- end Εκτελώντας τον κώδικα π.χ. για Nr Nz 0 παίρνουμε την κατανομή που παρουσιάζεται στο επόμενο γράφημα: 0
ΑΣΚΗΣΗ 3 Να λυθεί το πρόβλημα οριακών τιμών u u u 0, r r r r 0 r R, 0 () με οριακές συνθήκες u R, u και ur, 0 ur, u 0. () Λύση Επιλέγουμε R=, u =5 και u 0 =. Επιλέγουμε Nr ίσα μεταξύ τους διαστήματα στην r κατεύθυνση και N ίσα μεταξύ τους διαστήματα στην θ κατεύθυνση. Στο επόμενο σχήμα παρουσιάζεται ένα πλέγμα με Nr και N : (3, 3) (3,) (3, ) (, 3) (, ) (, ) (3,5) (,5) (, ) (3, ) - -0.5 (i=, j=,,5) 0.5 Σχήμα Παρατηρούμε ότι στον κόμβο στο κέντρο του κάτω ορίου (δηλ. για i=) αντιστοιχούν όλες οι διακριτές γωνίες. Αυτό θα είναι σημαντικό στη συνέχεια για τον ορισμό των οριακών συνθηκών και τον προγραμματισμό της λύσης σε Fortran. Επιλέγουμε να διακριτοποιήσουμε την () με ένα σχήμα κεντρώων πεπερασμένων διαφορών ης τάξης. Έτσι έχουμε: u u u u u u u u 0 i, j i, j i, j i, j i, j i, j i, j i, j hr ri hr ri h u u u u u u u u 0 i, j i, j i, j i, j i, j i, j i, j i, j hr ( i) hr ( i) hrh
h 0 ( i) ( i) h u u u u u u u u i, j i, j i, j i, j i, j i, j i, j i, j h i, j i, j i, j i, j i, j i, j i j u h h u u u u u u,, ( i) ( i) ( i) i,..., Nr, j,..., N (3) Για τις οριακές συνθήκες ισχύουν τα ακόλουθα: ur (, ) uu 5, j, N Nr, j ur (,0) u u, i, Nr 0 i, ur (, ) u u, i, Nr 0 in, Επίσης, ειδικά για τον κόμβο με i= η οριακή συνθήκη πρέπει να γραφεί ως: u, j, j, N Επιλέγουμε την τιμή u στους γωνιακούς κόμβους (Nr+,) και (Νr+,Nθ+). Για να επιλύσουμε το πρόβλημα απαιτείται η επίλυση ενός συστήματος Nr N εξισώσεων με αντίστοιχους αγνώστους. Για την επίλυσή του θα πρέπει να χρησιμοποιήσουμε μία επαναληπτική μέθοδο όπως για παράδειγμα την Gauss-Seidel. Έτσι η (3) γράφετε στη μορφή: ( k ) ui, j h ( i ) h h u u u u ( i) ( i) u u i,..., Nr, j,..., N όπου με (k) δηλώνουμε τον δείκτη της επανάληψης. k k k k k k i, j i, j i, j i, j i, j i, j ( ) ( ) ( ) ( ) ( ) ( ) Το πρόγραμμα σε Fortran που επιλύει το πρόβλημα είναι το ακόλουθο: Program GaussSeidel implicit none doubleprecision,allocatable::u(:,:),uold(:,:) integer::nr,nth,i,j,maxi,done,k doubleprecision::s,rel,err,max,t,hth,pi! Arithmos diasthmatwn (= arithmos kombwn-) Nr= Nth= allocate(u(nr+,nth+),uold(nr+,nth+)) pi=*atan(.) maxi=50000 rel=0.0000000!hr=./nr,
hth=pi/nth k= done=0 u(:,:)=0. u(nr+,:)=5. u(:nr,)=. u(:nr,nth+)=. u(,:)=. do while (k<=maxi.and. done==0) uold(:,:)=u(:,:) do i=,nr do j=,nth u(i,j)= (*hth**+./(i-)**)**(-) * (hth***(u(i+,j)+u(i-,j))+hth**/(.*(i-))*(u(i+,j)-u(i-,j))+./(i-)***(u(i,j+)+u(i,j-)))! elenxos gia termatismo max=- do i=,nr do j=,nth err = abs((u(i,j) - uold(i,j))/u(i,j)) if (err>max) then max=err end if if (max<rel) then done= end if k=k+ open(,file='results.txt',recl=000)!xwris to RECL=000 to megisto platos xwraei monon 5 sthles toy pinaka do i=nr+,,- write(,*) u(i,:) print*, k- end Το αποτέλεσμα της εκτέλεσης του κώδικα για Νr= και Νθ= παρουσιάζεται στον επόμενο πίνακα u j= j= j=3 j= j=5 i=3 5 5 5 5 5 i= 3.389698 3.77885 3.389698 i= Παρατήρηση: Ολόκληρη η τελευταία γραμμή του πίνακα αποτελεσμάτων αφορά τον ίδιο κόμβο (αυτόν που βρίσκεται στο κέντρο του κάτω ορίου) 3
Παραστατικά οι τιμές της u φαίνονται στο ακόλουθο σχήμα: 5 5 5 3.7789 3.38965 Σχήμα 3.38965 5 5 - -0.5 0.5
ΑΣΚΗΣΗ Η θερμοκρασιακή κατανομή στο τετράγωνο πλακίδιο πλευράς L του σχήματος, περιγράφεται από την εξίσωση Laplace T x T y 0 () με οριακές συνθήκες τύπου Dirichlet στις τρεις πλευρές και την μικτή οριακή συνθήκη T k ht a x T στην τέταρτη πλευρά. Με βάση το πλέγμα του Σχήματος, διατυπώστε για τους κόμβους και 5 τις εξισώσεις πεπερασμένων διαφορών. Τέλος δίδοντας στις παραμέτρους τις τιμές L 60 cm, h 0 cm, h 0 cm, 0 0 0 Ta 0 C, T T T3 T6 50 C, T7 T8 T9 00 C, 0 0 k 0.7 c al / scm C, h0.0 cal/ scm C και υπολογίστε τις θερμοκρασίες στους κόμβους και 5. Οριακή συνθήκη: T k h( T a T) x () Σχήμα Θα χρησιμοποιήσουμε τα αποτελέσματα της Άσκησης της ης Εργασίας του ακαδημαϊκού έτους 008-9 για την κεντρώα έκφραση πεπερασμένων διαφορών ης τάξης για την δεύτερη παράγωγο μιας συνάρτησης f σε μη ισαπέχοντα σημεία. 5
Υποθέτοντας ότι το σημείο xi βρίσκεται σε απόσταση ότι το σημείο xi βρίσκεται σε απόσταση στην έκφραση: h από το σημείο x i, και h από το σημείο x i είχαμε καταλήξει d f f ( i ) f i f i (3) dx ( ) i h Εφαρμόζοντας τον τύπο στον κόμβο 5 του σχήματος (όπου h=λ h) έχουμε: T ( ) T5 T6 T ( ) T5 T8 0 ( ) ( ) h h T ( ) T T T ( ) T T 0 5 6 5 8 T T6 T T8 T5 () ( ) Επίσης για τον κόμβο διακριτοποιούμε την εξ. () με μία πρόδρομη έκφραση πεπερασμένων διαφορών ης τάξης: T k T h 5 h T ( a T ) (5) Αντικαθιστώντας τις αριθμητικές τιμές των παραμέτρων στις σχέσεις () και (5) παίρνουμε το σύστημα: T 50 50 00 50 T5 T5 T ( ) 6 6 T5 T 0.7 0.0(0 T ) 0 Η λύση του συστήματος δίνει της ζητούμενες θερμοκρασίες στους κόμβους και 5: Τ =37.7966 C Τ 5 =7.966 C 6