ΥΠΟΛΟΓΙΣΤΙΚΕΣ ΜΕΘΟΔΟΙ, 011-01, 5 Ο ΕΞΑΜΗΝΟ ΕΡΓΑΣΙΑ #3: ΕΛΛΕΙΠΤΙΚΑ ΠΡΟΒΛΗΜΑΤΑ ΗΜΕΡΟΜΗΝΙΑ ΠΑΡΑΔΟΣΗΣ: 5-1-011 ΔΙΔΑΣΚΩΝ: Δ. Βαλουγεώργης Επιλέξτε μία εκ των Ασκήσεων 1 και : ΑΣΚΗΣΗ 1 Να λυθεί το πρόβλημα οριακών τιμών u 1 u 1 u u 0, r r r r z R 1 / R r 1, 0, 0 z L / R με οριακές συνθήκες 0 1 u r,, f r, u r,,l/ R g r, u,,z h,z du 0 dr r R 1/R Περιγράψτε ένα φυσικό φαινόμενο που μοντελοποιείται με το παραπάνω πρόβλημα οριακών τιμών. Λύση (Επιμέλεια: Γιάννης Λυχναρόπουλος) Το υπολογιστικό πλέγμα του προβλήματος εμφανίζεται στο επόμενο σχήμα: k i j i=1,j=1,k=1 i=i+1,j=1,k=k+1 i=i+1,j=1,k=1 i=i+1,j=j, k=1 I κόμβους στην r κατεύθυνση, J 1 κόμβους στην κατεύθυνση, ταυτίζεται με τον κόμβο j 1 και K 1 κόμβους στην z κατεύθυνση. Το πλέγμα αποτελείται από 1 όπου ο κόμβος j J 1
Διακριτοποιούμε τη διαφορική εξίσωση u 1 u 1 u u 0, (1) r r r r z χρησιμοποιώντας κεντρώες πεπερασμένες διαφορές, και παίρνουμε διαδοχικά: u u u 1 u u 1 u u u u u u 0 i1, jk, i, jk, i1, jk, i1, jk, i1, jk, i, j1, k i, jk, i, j1, k i, jk, 1 i, jk, i, jk, 1 r r z i1, jk, i, jk, i1, jk, i1, jk, i1, jk, z u u u r z u u 1 1 r i, j1, k i, jk, i, j1, k i, jk, 1 i, jk, i, jk, 1 0 r z u u u r u u u i 1 z r z r ui, j, k z ui1, j, kui1, j, k 1 1 r z u u r z u u r u u i1, jk, i1, jk, i, j1, k i, j1, k i, jk, 1 i, jk, 1 1 1 i, j, k u z r z r 1 1 z u u r z u u r z u u r u u () με ( i1) r du Για τη διακριτοποίηση της οριακής συνθήκη dr r R 1/R 0 επιλέγεται μία απλή πρόδρομη εξίσωση πεπερασμένων διαφορών, η οποία δίνει τελικά: u1, jk, u, jk, (3) i1, jk, i1, jk, i1, jk, i1, jk, i, j1, k i, j1, k i, jk, 1 i, jk, 1 Για την επίλυση του συστήματος που προκύπτει χρησιμοποιείται η επαναληπτική μέθοδο Gauss- Seidel. Έστω R1 1.5cm, R 4cm και L 15cm που επιλύει το πρόβλημα είναι ο ακόλουθος: program annular implicit none integer,parameter::nr=1,nth=1,nz=1 real,parameter::r1=1.5,r=4.,l=15. real::r(nr),th(nth),z(nz) real::u(nr,nth,nz),uold(nr,nth,nz) real::pi,dz,dr,dth,a,b,c,d,e,err integer::i,j,k,iter pi=4.*atan(1.). Επίσης f 100, g 0 και h 0 dr=(1.-r1/r)/(nr-1) dth=*pi/nth!o nth kombos bsketai sth thesh pi-dth dz=(l/r)/(nz-1) do i=1,nr r(i)=(r1/r)+(i-1)*dr. Ο κώδικας
do i=1,nth th(i)=(i-1)*dth do i=1,nz z(i)=(i-1)*dz u=0 iter=0 do uold=u!oakes synthikes call u_at_z_0() call u_at_z_nz() call u_at_top() do i=,nr-1 do j=1,nth do k=,nz-1 a=dth***dz** b=(dr*a)/(.*r(i)) c=(dr***dz**)/r(i)** d=dr***dth** e=(*(a+c+d))**(-1) if (j==1) then!logw symmetas ws pros th, u(i,- 1,k)=u(i,nth,k) u(i,j,k)=e*(a*(u(i+1,j,k)+u(i-1,j,k))+b*(u(i+1,j,k)-u(i- 1,j,k))+c*(u(i,j+1,k)+u(i,nth,k))+d*(u(i,j,k+1)+u(i,j,k-1))) elseif (j==nth) then!logw symmetas ws pros th, u(i,nth+1,k)=u(i,1,k) u(i,j,k)=e*(a*(u(i+1,j,k)+u(i-1,j,k))+b*(u(i+1,j,k)-u(i- 1,j,k))+c*(u(i,1,k)+u(i,j-1,k))+d*(u(i,j,k+1)+u(i,j,k-1))) else u(i,j,k)=e*(a*(u(i+1,j,k)+u(i-1,j,k))+b*(u(i+1,j,k)-u(i- 1,j,k))+c*(u(i,j+1,k)+u(i,j-1,k))+d*(u(i,j,k+1)+u(i,j,k-1))) end if!synthikh monwshs u(1,:,:)=u(,:,:)!sfalma Gauss-Seidel err=maxval(abs(u-uold)) iter=iter+1 pnt '(i5,es15.4)',iter,err if (err<1.e-5) exit! Eksagwgh apotelesmatwn gia grafima me to Tecplot 360 open(14,file='annular_data.dat') wte(14,100) "RESULTS" wte(14,'(a)')'variables ="X","Y","Z","F"' wte(14,00)'zone I=',nth+1,',J=',nr,',K=',nz,',F=POINT'!For Tecplot IJK Ordered Data!H seira twn Do einai symantikh gia to Tecplot:!If you wte a program to pnt IJK-ordered data, the I-index is the inner loop,! the K-index is the outer loop, and the J-index is the loop in between. do k=1,nz do j=1,nr
do i=1,nth+1!o kombos nth+1 einai taytizetai me ton 1 gia na kleisei o kylindros!gia ektypwsh sto Tecplot metatrepoyme tis kylindkes!se kartesianes syntetagmenes if (i==nth+1) then!gia na kleisei o kylindros ws pros th kata th sxediash sto tecplot wte(14,300) r(j)*cos(th(1)),r(j)*sin(th(1)),z(k), u(j,1,k) else wte(14,300) r(j)*cos(th(i)),r(j)*sin(th(i)),z(k), u(j,i,k) end if enddo enddo enddo 100 format('title = "',A,'"') 00 format(3(a,i3),a) 300 format(3f8.,f15.4) contains!oakes synthikes subroutine u_at_z_0()!f(r,th) u(:,:,1)=100 end subroutine subroutine u_at_z_nz()!g(r,th) u(:,:,nz)=0 end subroutine subroutine u_at_top()!h(th,z) u(nr,:,:)=0 end subroutine end program Τα αποτελέσματα αποθηκεύονται σε ένα αρχείο κατά τέτοιον τρόπο ώστε να μπορούμε να το εμφανίσουμε γραφικά χρησιμοποιώντας το πακέτο «TecPlot 360». Για να είναι δυνατό αυτό θα πρέπει οι συντεταγμένες των κόμβων του πλέγματος να εκφραστούν στο Καρτεσιανό Σύστημα και τα Do που εμφανίζουν τα αποτελέσματα να μπουν σε μία συγκεκριμένη σειρά, όπως φαίνεται και στα αντίστοιχα σχόλια μέσα στον κώδικα. H διαδικασία εμφάνισης του αποτελέσματος με το Tecplot είναι η ακόλουθη: Ανοίγουμε το Tecplot και από το μενού File load data files Tecplot data loader επιλέγουμε το αρχείο των αποτελεσμάτων. Στη συνέχεια δίνουμε Ιnitial plot style ->3D Cartesian Έπειτα ενεργοποιούμε από την παλέτα στα αριστερά την επιλογή: Contour Από την επάνω παλέτα εργαλείων επιλέγουμε "RollerBall Rotation" αν επιθυμούμε να περιστρέψουμε το γράφημα. Στη συνέχεια το περιστρέφουμε με το ποντίκι. Για να δημιουργήσουμε τομές επιλέγουμε από την αριστερή παλέτα Slices menu Τέλος για αντιγραφή του γραφήματος στο Word επιλέγουμε από το μενού Εdit Copy plot to clipboard Image(BMP) Επιλέγοντας ένα υπολογιστικό πλέγμα i jk 1 1 κόμβων (στην j κατεύθυνση ο ος ταυτίζεται με τον 1 ο ), με την παραπάνω διαδικασία μπορούμε να πάρουμε για παράδειγμα το ακόλουθο γράφημα, στο οποίο εμφανίζονται διαμήκης τομές των δύο ομοαξονικών κυλίνδρων. (Έχουμε αφαιρέσει το εξωτερικό περίγραμμα του άνω μισού των κυλίνδρων για περισσότερη ευκρίνεια στις τομές):
Στον επόμενο πίνακα παρουσιάζονται ενδεικτικά ορισμένα αποτελέσματα στη κάθετη τομή k 10 που αντιστοιχεί στη θέση z 1.6875 i j r θ u 1 1 0.375000 0.00000 0.8953 1 6 0.375000 1.49600 0.8953 1 11 0.375000.99199 0.8953 1 16 0.375000 4.48799 0.8953 1 1 0.375000 5.98399 0.8953 6 1 0.53150 0.00000 0.819 6 6 0.53150 1.49600 0.819 6 11 0.53150.99199 0.819 6 16 0.53150 4.48799 0.819 6 1 0.53150 5.98399 0.819 11 1 0.687500 0.00000 0.6050 11 6 0.687500 1.49600 0.6050 11 11 0.687500.99199 0.6050 11 16 0.687500 4.48799 0.6050 11 1 0.687500 5.98399 0.6050 16 1 0.843750 0.00000 0.3095 16 6 0.843750 1.49600 0.3095 16 11 0.843750.99199 0.3095 16 16 0.843750 4.48799 0.3095 16 1 0.843750 5.98399 0.3095 1 1 1.00000 0.00000 0.00000 1 6 1.00000 1.49600 0.00000 1 11 1.00000.99199 0.00000 1 16 1.00000 4.48799 0.00000 1 1 1.00000 5.98399 0.00000
ΑΣΚΗΣΗ Να λυθεί το πρόβλημα οριακών τιμών u 1 u 1 u u 0, r r r r z 0 r 1, 0, 0 z L / R με οριακές συνθήκες 0 1 u r,, f r, u r,,l/ R g r, u,,z h,z du d 0 du 0 d Περιγράψτε ένα φυσικό φαινόμενο που μοντελοποιείται με το παραπάνω πρόβλημα οριακών τιμών. Βοήθημα: Επιλύστε αρχικά το αντίστοιχο πρόβλημα σε διαστάσεις. Λύση (Επιμέλεια: Γιάννης Λυχναρόπουλος) Το υπολογιστικό πλέγμα του προβλήματος εμφανίζεται στο επόμενο σχήμα: k i j i=ι+1,j=1,k=κ+1 i=i+1,j=j+1,k=1 i=1,j=1,k=1 i=ι+1,j=1,k=1 Το πλέγμα αποτελείται από I 1 κόμβους στην r κατεύθυνση, J 1 κόμβους στην κατεύθυνση, και K 1 κόμβους στην z κατεύθυνση. Επειδή η διαφορική εξίσωση είναι ίδια με αυτή του προηγούμενου προβλήματος, ακολουθώντας την ίδια διαδικασία, καταλήγουμε ξανά στη ΕΠΔ:
1 1 ui, j, k z r z r 1 1 z u u r z u u r z u u r u u () με r ( i1) r i i1, jk, i1, jk, i1, jk, i1, jk, i, j1, k i, j1, k i, jk, 1 i, jk, 1 Στις θέσεις 0 και εφαρμόζουμε στις εξισώσεις du d 0 du d πρόδρομες και ανάδρομες πεπερασμένες διαφορές αντίστοιχα, οι οποίες δίνουν u u i,1, k i,, k και u u ij, 1, k ijk,, Ειδικά για τη θέση (1,j,k) υπολογίζουμε την ποσότητα u 1, jk, σαν τον μέσο όρο των ποσοτήτων u,, Έστω L/ R, f 100, g 0, h 0. Ο ο κώδικας που επιλύει το πρόβλημα είναι ο ακόλουθος: program half_cylinder implicit none integer,parameter::nr=1,nth=1,nz=1 real::r(nr),th(nth),z(nz) real::u(nr,nth,nz),uold(nr,nth,nz) real::pi,dz,dr,dth,a,b,c,d,e,err integer::i,j,k,iter pi=4.*atan(1.) dr=1./(nr-1) dth=pi/(nth-1) dz=./(nz-1) do i=1,nr r(i)=(i-1)*dr do i=1,nth th(i)=(i-1)*dth do i=1,nz z(i)=(i-1)*dz u=0 iter=0 do uold=u call u_at_z_0() call u_at_z_nz() call u_at_top() 0 jk
do i=,nr-1 do j=,nth-1 do k=,nz-1 a=dth***dz** b=(dr*a)/(.*r(i)) c=(dr***dz**)/r(i)** d=dr***dth** e=(*(a+c+d))**(-1) u(i,j,k)=e*(a*(u(i+1,j,k)+u(i-1,j,k))+b*(u(i+1,j,k)-u(i- 1,j,k))+c*(u(i,j+1,k)+u(i,j-1,k))+d*(u(i,j,k+1)+u(i,j,k-1))) u(:,1,:)=u(:,,:) u(:,nth,:)=u(:,nth-1,:) do k=1,nz u(1,:,k)=sum(u(,:,k))/nth err=maxval(abs(u-uold)) iter=iter+1 pnt '(i5,es15.4)',iter,err if (err<1.e-5) exit open(14,file='half_cylinder_data.txt') wte(14,59) "RESULTS" wte(14,58)'variables ="X","Y","Z","F"' wte(14,*)'zone I=',nth,',J=',nr,',K=',nz,',F=POINT' do k=1,nz do j=1,nr do i=1,nth wte(14,1444) r(j)*cos(th(i)),r(j)*sin(th(i)),z(k), u(j,i,k) enddo enddo enddo 58 format(a300) 59 format(' TITLE = "',A80,'"') 1444 format(3f8.,f15.4) contains subroutine u_at_z_0() u(:,:,1)=100 end subroutine subroutine u_at_z_nz() u(:,:,nz)=0 end subroutine subroutine u_at_top() u(nr,:,:)=0 end subroutine end program
Τα αποτελέσματα για ένα υπολογιστικό πλέγμα i jk 11 1 κόμβων παρουσιάζονται στο επόμενο γράφημα, όπου εμφανίζονται διάφορες οριζόντιες και κάθετες διαμήκης τομές του υπολογιστικού πεδίου: Στον επόμενο πίνακα παρουσιάζονται ενδεικτικά ορισμένα αποτελέσματα στη κάθετη τομή k 10 που αντιστοιχεί στη θέση z 0.9 : i j r θ u 1 1 0.0000 0.0000 19.7095 1 6 0.0000 0.7854 19.7095 1 11 0.0000 1.5708 19.7095 1 16 0.0000.356 19.7095 1 1 0.0000 3.1416 19.7095 6 1 0.500 0.0000 18.3137 6 6 0.500 0.7854 18.3137 6 11 0.500 1.5708 18.3138 6 16 0.500.356 18.3138 6 1 0.500 3.1416 18.3138 11 1 0.5000 0.0000 13.948 11 6 0.5000 0.7854 13.948 11 11 0.5000 1.5708 13.948 11 16 0.5000.356 13.948 11 1 0.5000 3.1416 13.948 16 1 0.7500 0.0000 7.3118 16 6 0.7500 0.7854 7.3118 16 11 0.7500 1.5708 7.3118 16 16 0.7500.356 7.3118 16 1 0.7500 3.1416 7.3118 1 1 1.0000 0.0000 0.0000 1 6 1.0000 0.7854 0.0000 1 11 1.0000 1.5708 0.0000 1 16 1.0000.356 0.0000 1 1 1.0000 3.1416 0.0000
ΑΣΚΗΣΗ 3 Έστω το ελλειπτικό πρόβλημα οριακών τιμών: u x u y 0 στο (βλέπε Σχήμα 1) Οριακές συνθήκες: Στα ευθύγραμμα τμήματα της περιμέτρου της περιμέτρου, u 0 (βλέπε Σχήμα 1)., u 1, ενώ στο καμπύλο τμήμα Εφαρμόζοντας τη μέθοδο των πεπερασμένων διαφορών υπολογίστε την εξαρτημένη μεταβλητή στους κόμβους του πλέγματος του Σχήματος 1 ( x y 1/3). Περιγράψτε ένα φυσικό φαινόμενο που μοντελοποιείται με το παραπάνω πρόβλημα οριακών τιμών. Λύση (Επιμέλεια: Γιώργος Τάτσιος) Φυσικό πρόβλημα: Ένα φυσικό πρόβλημα που μπορεί να λυθεί έτσι είναι η μεταφορά θερμότητας σε μία πλάκα που έχει το σχήμα του χωρίου Ω και τις συνοριακές συνθήκες που φαίνονται στο σχήμα, και βρίσκεται σε μόνιμη κατάσταση. Απλό πλέγμα σχήματος με τρεις εσωτερικούς κόμβους:
Υπολογισμός των,b Από το Πυθαγόρειο θεώρημα έχουμε: δίνει α=- 3. Με τον ίδιο τρόπο βρίσκουμε b=- 3 1 ( ) ( ) ( h) που μας 3 3 3 Κόμβος (3,): u3.1 u3. u3.3 u4. u3. u. 0 4u u u u u h h 3. 3.3. 3.1 4. Κόμβος (,): Για τον κόμβο 5 παίρνουμε το ανάπτυγμα Taylor γύρω από τον κόμβο (,) ahuxx 3 u5 u, ahux O( h ) (1) Για τον κόμβο (,1) παίρνουμε το ανάπτυγμα Taylor γύρω από τον κόμβο (,) huxx 3 u,1 u, hux O( h ) () Πολλαπλασιάζοντας την () με a και προσθέτοντας κατά μέλη στην (1) παίρνουμε: ( ah) uxx h uxx 4 u5 u,1 u, u, O( h ) u5 u,1u,( 1) uxx ( h ) ( ah) ah u5 u,1u,( 1) u3. u. u1. uxx uyy 0 0 ( ah) ah h 1 u5 u.1 u,(1 ) u3. u1. a a a a1 Κόμβος (3,3): Για τον κόμβο 6 παίρνουμε το ανάπτυγμα Taylor γύρω από τον κόμβο (3,3) ( bh) uyy 3 u6 u3,3 ( bh) uy O( h ) (3) Για τον κόμβο (4,3) παίρνουμε το ανάπτυγμα Taylor γύρω από τον κόμβο (3,3) huyy 3 u4,3 u3,3 huy O( h ) (4) Πολλαπλασιάζοντας την (4) με b και προσθέτοντας κατά μέλη στην (3) παίρνουμε: ( bh) uyy h uyy 4 u6 bu4,3u3,3( b1) u6 bu4,3 u3,3 bu3,3 b O( h ) uyy ( h ) ( bh) bh u3. u3.3 u u 1.4 6 bu4,3 u3,3( b1) uxx uyy 0 0 h ( bh) bh 1 u6 u4.3 u3,3(1 ) u3. u3.4 b b b b1
Αντικαθιστώντας τις συνοριακές συνθήκες καταλήγουμε στο ακόλουθο σύστημα 3 εξισώσεων με 3 αγνώστους: 4u3. u3.3 u. 1 u,(1 ) u3. 0.5 3 3 3 1 u3,3(1 ) u3. 0.5 3 3 3 Λύση συστήματος: u3. 0.64376 u3.3 0.875 u. 0.875 Σημείωση: Στους κόμβους (1,) και (3,4) όπου υπάρχει η ασυνέχεια, επιλέγουμε ως τιμή τους τον μέσο όρο των δύο οριακών συνθηκών δηλαδή 0.5.