ΑΣΚΗΣΗ ΥΠΟΛΟΓΙΣΤΙΚΕΣ ΜΕΘΟΔΟΙ, 00-0, 5 Ο ΕΞΑΜΗΝΟ ΕΡΓΑΣΙΑ #3: ΕΛΛΕΙΠΤΙΚΑ ΠΡΟΒΛΗΜΑΤΑ ΗΜΕΡΟΜΗΝΙΑ ΠΑΡΑΔΟΣΗΣ: 5--00 ΕΠΙΜΕΛΕΙΑ: Ιωάννης Λυχναρόπουλος Θεωρούμε τετραγωνική πλάκα πλευράς L που φορτίζεται με ομοιόμορφο φορτίο q. Η πλάκα στηρίζεται και στις τέσσερις πλευρές με απλή στήριξη. Το βέλος κάμψης της w x, y στη κατεύθυνση z είναι η λύση της διαρμονικής εξίσωσης: πλάκας w w w x x y w y q D όπου D είναι ο συντελεστής ακαμψίας. Οι οριακές συνθήκες στην προκειμένη w περίπτωση είναι w 0 και 0, κατά μήκος των τεσσάρων πλευρών, όπου n n δηλώνει την κάθετη διεύθυνση στο σύνορο. Να υπολογισθεί με τη μέθοδο των πεπερασμένων διαφορών το βέλος κάμψης w x, y. Επιλέξτε τις παραμέτρους του προβλήματος έτσι ώστε να αντιστοιχούν σε πραγματικό πρόβλημα. (Βοήθημα: εφαρμόστε το μετασχηματισμό u w) ΛΥΣΗ Εφαρμόζουμε τον μετασχηματισμό u οριακών τιμών: q w και προκύπτουν δύο νέα προβλήματα u και w u D με οριακές συνθήκες u 0 και w 0. Επιλέγοντας ένα τετραγωνικό πλέγμα με x y και εφαρμόζοντας κεντρώες πεπερασμένες διαφορές ης τάξης παίρνουμε τις εξισώσεις πεπερασμένων διαφορών ui, jui, jui, j ui, j ui, jui, j q q u i, j ui, jui, jui, j ui, j D D και w w w w w w i, j i, j i, j i, j i, j i, j u i, j wi, j wi, jwi, jwi, j wi, j ui, j Το πρόγραμμα σε Fortran που επιλύει τα δύο συστήματα είναι το ακόλουθο: Program GaussSeidel implicit none integer,parameter::nx=5,ny=nx! Aritmos diastmatwn (= aritmos kombwn-) Dx=Dy real,parameter::q=000.,d=500,l=. real::w(nx+,ny+),wold(nx+,ny+),u(nx+,ny+),uold(nx+,ny+) integer::i,j,maxi,k real::rel,maxerr,
maxi=50000 rel=0.00000 =L/Nx PRINT*,H u(:,:)=0 k=0 do k=k+ uold(:,:)=u(:,:) do i=,nx do j=,ny u(i,j)= 0.5*(u(i,j+)+u(i,j-)+u(i+,j)+u(i-,j)-(q/D)***) end do end do! elenxos gia termatismo maxerr = maxval(abs(u- uold)) if (maxerr<rel.or. k>maxi) exit PRINT*,"",K,MAXERR end do w(:,:)=0 k=0 do k=k+ wold(:,:)=w(:,:) do i=,nx do j=,ny w(i,j)= 0.5*(w(i,j+)+w(i,j-)+w(i+,j)+w(i-,j)-u(i,j)***) end do end do! elenxos gia termatismo maxerr = maxval(abs(w- wold)) if (maxerr<rel.or. k>maxi) exit PRINT*,"",K,MAXERR end do open(,file='res_gauss.txt',recl=3000) do j=,ny+ write(,*) w(:,j)! print*,w(:,j) end do end Έστω q000, D500, L. Στον επόμενο πίνακα παρουσιάζονται τα αποτελέσματα του w για Nx Ny 5 (αριθμός διαστημάτων) j 6 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 j 5 0.00000 0.0835 0.07538 0.07538 0.0835 0.00000 j 0.00000 0.07538 0.80 0.80 0.07538 0.00000 j 3 0.00000 0.07538 0.80 0.80 0.07538 0.00000 j 0.00000 0.0835 0.07538 0.07538 0.0836 0.00000 j 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 i i i 3 i i 5 i 6
Για ένα πυκνό πλέγμα με Nx Ny 50 χρησιμοποιώντας τον ArrayViewer της Compaq Fortran παίρνουμε το ακόλουθο γράφημα για τη συνάρτηση wx, y : ΑΣΚΗΣΗ Θεωρούμε πλήρως ανεπτυγμένη ροή σε αγωγό ελλειπτικής διατομής λόγω βαθμίδας πίεσης dp dx Poisson:. Η κατανομή ταχύτητας u y, z y a z b είναι η λύση της εξίσωσης u u dp y z dx όπου το ιξώδες του ρευστού. Οι οριακές συνθήκες στην προκειμένη περίπτωση είναι u 0 κατά μήκος των τοιχωμάτων. Να υπολογισθεί με τη μέθοδο των u y, z και στη συνέχεια η παροχή. πεπερασμένων διαφορών η κατανομή ταχύτητας Βοηθήματα: Εισάγετε τις αδιάστατες ποσότητες y y / a, z z / a και u a Αναλυτική λύση: dp 3 3 a b y z dp a b uy, z, Q dx a b a b dx a b u dp / dx ΛΥΣΗ Στα επόμενα έχει γίνει εναλλαγή των αξόνων x και z σε σχέση με την εκφώνηση. Η αρχική διαστατή εξίσωση
u u dp () y x dz αδιαστατοποιείται χρησιμοποιώντας τις σχέσεις a dp / dz y ay, x ax, u u () και προκύπτει η εξίσωση dp / dz u dp / dz u dp u u y x dz x y (3) Η ελλειπτική διατομή γίνεται αντίστοιχα a x y b () y b/ a x Λόγω συμμετρίας του προβλήματος, επιλύεται μόνο το πρώτο τεταρτημόριο της έλλειψης. Έστω ότι a.5, b 5, δηλαδή η εξίσωση της έλλειψης γίνεται x y. (5) Αρχικά εφαρμόζεται ένα αραιό τετραγωνικό πλέγμα με Nx, Ny διαστήματα στην x και y κατεύθυνση αντίστοιχα. Έτσι δημιουργούνται μόνο δύο εσωτερικοί κόμβοι οι (,) και (,), όπως φαίνεται στο ακόλουθο σχήμα: u, u, d u u,, u 3, 0.. Στο σχήμα είναι: ενώ η απόσταση d προκύπτει από την επίλυση της Ny εξίσωσης (5) της έλλειψης ως προς y θέτοντας x. Επειδή επιλύεται το πρόβλημα μόνο στο πρώτο τεταρτημόριο της έλλειψης, μας ενδιαφέρει μόνον η θετική τιμή του 3 y. Έτσι d d d
Εφαρμόζοντας πεπερασμένες διαφορές ης τάξης για την προσέγγιση των μερικών παραγώγων προκύπτουν για τους εσωτερικούς κόμβους οι σχέσεις u0, u, u, u,0 u, u, και u, u, u3, u,0 u, u, d Λόγω συμμετρίας u0, u,, u,0 u, και u,0 u,. Επίσης οι κόμβοι u,, u, και u3, έχουν τιμή ίση με μηδέν από την οριακή συνθήκη. Έτσι τελικά παίρνουμε το ακόλουθο σύστημα δύο εξισώσεων: u u,, 8 u, u, u, 3 η επίλυση του οποίου δίνει u, 0. και u, 0.3. Για την εύρεση της παροχής Q το καμπυλόγραμμο σύνορο προσεγγίζεται με ευθύγραμμα τμήματα: u, u, u u,, u 3, 0.. Q meanarea (6) όπου mean είναι μία μέση τιμή της ταχύτητας u στο κάθε στοιχείο του πλέγματος και area το εμβαδό του αντιστοίχου στοιχείου. Για το στοιχείο το οποίο έχει το σχήμα τραπεζίου το εμβαδό είναι ( d) 3/ και η μέση ταχύτητα προσεγγιστικά προκύπτει από τη σχέση u, u, u, u, 0 0 0. 0.3 0.7 0.75 Για το στοιχείο το οποίο έχει σχήμα ορθογωνίου τριγώνου το εμβαδό είναι d 3 u, u, u3, 0 0.3 0 0.3 και η μέση ταχύτητα 0. 3 3 3 Αθροίζοντας τα γινόμενα παίρνουμε: 3/ 0.75 3 0. 0.06578 d
Η τιμή αυτή αφορά τη παροχή σε ένα τεταρτημόριο επομένως πρέπει να πολλαπλασιασθεί με. Έτσι η αδιάστατη παροχή προκύπτει Q 0.06578 0.863 Ακολουθεί σύγκριση των αριθμητικών αποτελεσμάτων με τα αντίστοιχα αναλυτικά. Η αδιάστατη ταχύτητα και παροχή βρίσκονται ως εξής: dp a b x y uxy (, ) dz a b b a u b a uxy (, ) x y a dp / dz a b b 3 3 3 dp a b Q b b Q Q dz a b ( dp / dz) a( a b ) a b a Για τους δύο εσωτερικούς κόμβους του πλέγματός μας οι ταχύτητες είναι 5 5.5 u, u(0,0) 0. και u, u(,0) 0.3.5 5.5 5 5 5 ενώ η παροχή Q.566..5.5 5 Η ταύτιση των αριθμητικών και των αναλυτικών τιμών για την ταχύτητα είναι μάλλον συμπτωματική, ενώ η διαφορά στις παροχές είναι αναμενόμενη λόγου του πολύ αραιού υπολογιστικού πλέγματος. Η διαδικασία υπολογισμού γενικεύεται στο ακόλουθο πρόγραμμα σε Fortran: program Ellipse implicit none integer,parameter::nx=0,ny=!max spaces in bot directions 3 (Ny<Nx) real::u(nx+,ny+),uold(nx+,ny+) 5 real::a,b! Ellipse: y^+x^*(a^/b^)= me a<b logical::is_triangle real::un,us,ue,uw,nn,ss,ee,ww,t0,tn,ts,te,tw,,t,maxerr,s,pi,area 6 _dx,mean,q 7 integer:: i,j,imax(ny+),jmax(nx+),k 8 9 type info_type 0 real::n,s,e,w integer::cn,cs,ce,cw end type 3 type(info_type)::dat(nx+,nx+) 5 6 =./Ny! =y=x 7 a=.5! any value 8 b=nx**a! in order to ave square grid 9 0! Find imax(j) imax()=nx 3 do j=,ny
t=xi_sol((j-)*)/ 5 imax(j)=nint(t) 6 7 if (t-nint(t)>0.0000) ten 8 imax(j)=imax(j)+ 9 end if 30 3 3 do i=,imax(j)- 33 dat(i,j)%cw= 3 dat(i,j)%w= 35 dat(i,j)%ce= 36 dat(i,j)%e= 37 end do 38 dat(imax(j),j)%cw= 39 dat(imax(j),j)%w= 0 dat(imax(j),j)%ce=0 dat(imax(j),j)%e=xi_sol((j-)*)-(imax(j)-)* 3 end do imax(ny+)=0 5 6! Find jmax(i) 7 jmax()=ny 8 9 do i=,nx 50 t=psi_sol((i-)*)/ 5 jmax(i)=nint(t) 5 53 if (t-nint(t)>0.0000) ten 5 jmax(i)=jmax(i)+ 55 end if 56 57 do j=,jmax(i)- 58 dat(i,j)%cs= 59 dat(i,j)%s= 60 dat(i,j)%cn= 6 dat(i,j)%n= 6 end do 63 dat(i,jmax(i))%cs= 6 dat(i,jmax(i))%s= 65 dat(i,jmax(i))%cn=0 66 dat(i,jmax(i))%n=psi_sol((i-)*)-(jmax(i)-)* 67 68 end do 69 jmax(nx+)=0 70 7! Find distances 7!center node 73 dat(,)%cw= 7 dat(,)%w= 75 dat(,)%ce= 76 dat(,)%e= 77 dat(,)%cn= 78 dat(,)%n= 79 dat(,)%cs= 80 dat(,)%s= 8! bottom 8 do i=,nx 83 dat(i,)%cw= 8 dat(i,)%w=
85 if (i==nx) ten 86 dat(i,)%ce=0 87 else 88 dat(i,)%ce= 89 end if 90 dat(i,)%e= 9 9 if (jmax(i)>) ten 93 dat(i,)%cn= 9 dat(i,)%n= 95 dat(i,)%cs= 96 dat(i,)%s= 97 else 98 dat(i,)%cn=0 99 dat(i,)%n=psi_sol((i-)*) 00 dat(i,)%cs=0 0 dat(i,)%s=psi_sol((i-)*) 0 end if 03 end do 0 05!left 06 do j=,ny 07 dat(,j)%cs= 08 dat(,j)%s= 09 if (j==ny) ten 0 dat(,j)%cn=0 else dat(,j)%cn= 3 end if dat(,j)%n= 5 6 if (imax(j)>) ten 7 dat(,j)%ce= 8 dat(,j)%e= 9 dat(,j)%cw= 0 dat(,j)%w= else dat(,j)%ce=0 3 dat(,j)%e=xi_sol((j-)*) dat(,j)%cw=0 5 dat(,j)%w=xi_sol((j-)*) 6 end if 7 end do 8 9 u=0 30 k=0 3 do 3 uold=u 33 k=k+ 3 do j=,ny 35! print*,j 36 do i=,imax(j) 37! print*,i 38 nn=dat(i,j)%n 39 ss=dat(i,j)%s 0 ee=dat(i,j)%e ww=dat(i,j)%w un=u(i,j+)*dat(i,j)%cn 3 ue=u(i+,j)*dat(i,j)%ce if (i==.and. j==) ten!center node 5 us=u(i,j+)*dat(i,j)%cs
6 uw=u(i+,j)*dat(i,j)%cw 7 elseif (j==) ten! bottom 8 us=u(i,j+)*dat(i,j)%cs 9 uw=u(i-,j)*dat(i,j)%cw 50 elseif (i==) ten! left 5 us=u(i,j-)*dat(i,j)%cs 5 uw=u(i+,j)*dat(i,j)%cw 53 else! inner 5 us=u(i,j-)*dat(i,j)%cs 55 uw=u(i-,j)*dat(i,j)%cw 56 endif 57 58 T0=.*(ww+ee)/(ww*ee**+ee*ww**) 59 T0=T0+.*(ss+nn)/(ss*nn**+nn*ss**) 60 TN=.*ss/(ss*nn**+nn*ss**) 6 TS=.*nn/(ss*nn**+nn*ss**) 6 TE=.*ww/(ww*ee**+ee*ww**) 63 TW=.*ee/(ww*ee**+ee*ww**) 6 65 u(i,j)=t0**(-) * (+TN*uN+TE*uE+TS*uS+TW*uW) 66 end do 67 end do 68 69 maxerr=maxval(abs(u-uold)) 70 print*,k,maxerr 7 if (maxerr<0.0000) exit 7 73 end do 7 do j=ny,,- 75 print*, u(:imax(j),j) 76 end do 77 78 print*,' ---------- Analytic ----------' 79 do j=ny,,- 80 print*, (analytic((i-)*,(j-)*),i=,imax(j)) 8 end do 8 83 pi=*atan(.) 8 s=0 85 do j=,ny 86 do i=,imax(j) 87 if (imax(j+)>=i+) ten!tetragwno 88 area_dx=* 89 print*,i,j,'tetragwno' elseif (i==imax(j+).and. i<imax(j)) ten!tetragwno - 90 trigwnaki (panw deksia gwnia) 9 area_dx=*-(-dat(i,j+)%e)*(-dat(i+,j)%n)*0.5 9 print*,i,j,'tetragwno-trigwno' elseif (i==imax(j+).and. i==imax(j)) ten! Trapezio 93 ortio 9 area_dx=(dat(i,j+)%e+dat(i,j)%e)**0.5 95 print*,i,j,'trapezio ortio' elseif (i>imax(j+).and. i+<=imax(j)) ten!trapezio 96 orizontio 97 area_dx=(dat(i,j)%n+dat(i+,j)%n)**0.5 98 print*,i,j,'trapezio orizontio' elseif (i>imax(j+).and. i==imax(j)) ten! Trigwno (Katw arister gwnia) 99 00 area_dx=dat(i,j)%n*dat(i,j)%e*0.5 0 print*,i,j,'trigwno' 0 else
03 print*, "Exception" 0 end if 05 if (is_triangle) ten mean=(u(i,j)+u(i+,j)+u(i,j+))/3. else mean=(u(i,j)+u(i+,j)+u(i,j+)+u(i+,j+))/. end if 06 s=s+mean*area_dx 07 end do 08 end do 09 q=*s/(pi*(b/a)) 0 print*, "q = ",q,analytic_q(),abs(q-analytic_q()) contains 3 real function xi_sol(y) real::y 5 xi_sol=sqrt((b**-y** * b**)/a**) 6 end function 7 8 real function psi_sol(x) 9 real::x 0 psi_sol=sqrt(-x** * a**/b**) end function 3 real function analytic(x,y) real::x,y 5 analytic=0.5 *./((a/b)**+)*(-x***(a/b)**-y**) 6 end function 7 8 real function analytic_q 9 analytic_q=(pi/.) *(b/a)*./((a/b)**+) 30 end function 3 end program Ακολουθεί ανάλυση και περιγραφή του κώδικα. Αρχικά υπολογίζεται η εξίσωση πεπερασμένων διαφορών που προσεγγίζει την (3) σε τυχαίο κόμβο (κόμβος στο επόμενο σχήμα) ο οποίος δεν ισαπέχει από κανένα γειτονικό του κόμβο: Ν W w n e Ε s S Οι γειτονικοί κόμβοι συμβολίζονται με Ν, Ε, S και W και τα ενδιάμεσα ευθύγραμμα τμήματα με τα αντίστοιχα μικρά γράμματα. Εφαρμόζοντας τον τύπο του Taylor και κρατώντας όρους μόνο μέχρι δευτέρας τάξης βρίσκουμε τις προσεγγίσεις: n u u nu y uyy! (7)
s us u suy uyy (8)! e ue u eux uxx (9)! w uw u wux uxx (0)! Στη συνέχεια η (7) πολλαπλασιάζεται με s, η (8) με n, η (9) με w, η (0) με e, και οι αθροίζονται κατά μέλη οι (7) και (8), (9) και (0): su nu s nu sn ns u u su nu s nu N S yy yy sn ns N S wu eu w eu we ew u u wu eu w eu E W xx xx we ew E W Οι δύο προηγούμενες σχέσεις αθροίζονται κατά μέλη και τελικά προκύπτει: u xx u yy wu E euw w eu sun nus s nu we ew sn ns Επομένως για την επίλυση της (3) είναι: wu E euw w eu sun nus s nu we ew sn ns wu E eu W w eu we ew we ew we ew su N nu S s nu sn ns sn ns sn ns we snu we ew sn ns wu E eu W su N nu S we ew we ew sn ns sn ns u we sn we ew sn ns wu E eu W su N nu S we ew we ew sn ns sn ns () Η σχέση () είναι η βασική σχέση πεπερασμένων διαφορών, η οποία μπορεί να εφαρμοσθεί σε κάθε εσωτερικό κόμβο (i,j) αν είναι γνωστές οι αποστάσεις του nesw,,, από τους γειτονικούς του κόμβους. Στον κώδικα Fortran η σχέση () υπολογίζεται στις γραμμές 58-65, και δημιουργεί ένα σύστημα εξισώσεων που επιλύεται επαναληπτικά με τη μέθοδο Gauss-Seidel (γραμμές 9-73) Για την υλοποίηση προγραμματιστικά της σχέσης () απαιτούνται οι ακόλουθες πληροφορίες για τον τυχαίο κόμβο (i,j): Μεταβλητή Πληροφορία n Απόσταση από τον κόμβο (i,j+)
e s w cn ce cs cw Απόσταση από τον κόμβο (i+,j) Απόσταση από τον κόμβο (i,j-) Απόσταση από τον κόμβο (i-,j) 0= o κόμβος (i,j+) είναι συνοριακός, = κόμβος (i,j+) είναι εσωτερικός 0= o κόμβος (i+,j) είναι συνοριακός, = κόμβος (i+,j) είναι εσωτερικός 0= o κόμβος (i,j-) είναι συνοριακός, = κόμβος (i,j-) είναι εσωτερικός 0= o κόμβος (i-,j) είναι συνοριακός, = κόμβος (i-,j) είναι εσωτερικός Για το λόγο αυτό δημιουργείται αρχικά ένας νέος τύπος δεδομένων που ονομάζεται info_type και περιλαμβάνει τις μεταβλητές αυτές (γραμμές 9-). Στη συνέχεια δημιουργείται ένας δισδιάστατος πίνακας (με όνομα dat) με τόσα στοιχεία όσα οι κόμβοι του πλέγματος, όπου κάθε στοιχείο του περιέχει μία εγγραφή τύπου info_type (γραμμή ). Θα πρέπει επομένως ο πίνακας dat να ενημερωθεί με τις σωστές πληροφορίες για κάθε κόμβο, πριν επιχειρηθεί η επίλυση του συστήματος με τη Gauss-Seidel. Προηγουμένως, όμως, χρειάζεται μία επιπλέον πληροφορία: οι μέγιστες τιμές που μπορούν να πάρουν τα i και j των εσωτερικών κόμβων σε κάθε γραμμή και κάθε στήλη του πλέγματος. Για το λόγο αυτό χρησιμοποιούνται οι δύο μονοδιάστατοι πίνακες imax(j) και jmax(i). O πρώτος περιέχει την τιμή i του τελευταίου προς τα δεξιά εσωτερικού κόμβου για κάθε γραμμή j του πλέγματος, και ο δεύτερος αντίστοιχα την τιμή j του τελευταίου προς τα επάνω εσωτερικού κόμβου για κάθε στήλη i του πλέγματος. Για παράδειγμα για το πλέγμα που εμφανίζεται στο επόμενο σχήμα 3 3 0.5 0.5 0.75..5.5 0.5 0.5 0.75..5.5 είναι j imax(j) 6 6 3 6 5 0 και i jmax(i) 3 5 3 6 3 7 0 Αρχικά διασφαλίζεται ότι το πλέγμα είναι τετραγωνικό πλάτους (Nx+,Ny+) κόμβων και ότι τα σημεία τομής της έλλειψης με τους άξονες είναι ακέραια
πολλαπλάσια του (γραμμές 6-8). Στη συνέχεια περιγράφεται ο τρόπος υπολογισμού του imax(j) για οποιοδήποτε j εσωτερικού κόμβου. Αρχικά υπολογίζεται η ποσότητα t= (απόσταση της γραμμής j του πλέγματος από τον άξονα y μέχρι την έλλειψη) / Διακρίνονται περιπτώσεις αναλόγως πόσο κοντά σε κόμβο περνάει το όριο της έλλειψης. Οι περιπτώσεις αυτές παρουσιάζονται στη συνέχεια με ένα συγκεκριμένο παράδειγμα. t nint(t) t-nint(t) imax(j).0000006 <0.0000 3.9999999 <0.0000 3.6 <0.0000. >0.0000 5 Στον προηγούμενο πίνακα εμφανίζονται υποθετικές τιμές της ποσότητας t καθώς και οι τιμές των ποσοτήτων nint(t) (συνάρτηση της Fortran η οποία στρογγυλοποιεί στον πλησιέστερο ακέραιο) της t-nint(t) η οποία συγκρίνεται με μία αυθαίρετη μικρή τιμή (0.0000) και τέλος η προκύπτουσα τιμή του imax(j). Σημειώνεται ότι στις 3 πρώτες περιπτώσεις η τιμή του imax(j) ισούται με την τιμή του nint(t) ενώ στην η περίπτωση είναι ίση με nint(t)+. Η λογική αυτή παρουσιάζεται στις γραμμές -9 του κώδικα. Με αντίστοιχο τρόπο υπολογίζεται το jmax(i) στις γραμμές 50-55 του κώδικα. Στη συνέχεια πρέπει, όπως ανφέρθηκε προηγουμένως, για κάθε εσωτερικό κόμβο του πλέγματος να ενημερωθεί ο πίνακας dat. Αυτό γίνεται στις γραμμές 3- για τις e και w αποστάσεις όλων των κόμβων εκτός αυτών του άξονα y και στις γραμμές 57-66 για τις n και s αποστάσεις όλων των κόμβων εκτός αυτών του άξονα x. Ειδικά για τον κεντρικό κόμβο (,) και για τους κόμβους των δύο αξόνων πρέπει να ληφθεί υπόψη η συμμετρία του προβλήματος (γραμμές 73-7). Στο επόμενο σχήμα παρουσιάζονται ενδεικτικά οι περιπτώσεις που προκύπτουν για τις τιμές των n και cn οποιουδήποτε εσωτερικού κόμβου: n<, cn=0 n=, cn=0 n=, cn= Αντίστοιχες περιπτώσεις ισχύουν και για τις υπόλοιπες μεταβλητές του πίνακα dat. Ένα τελευταίο σημαντικό σημείο του κώδικα για τον υπολογισμό του πεδίου των ταχυτήτων είναι οι γραμμές 38-56, στις οποίες λαμβάνεται υπόψη η συμμετρία του προβλήματος πριν εφαρμοσθεί η σχέση ().
Στη συνέχεια παρουσιάζεται ο τρόπος υπολογισμού της παροχής. Η σχέση (6) υπολογίζεται στις γραμμές 05,06,09 του κώδικα. Για τον υπολογισμό του εμβαδού κάθε τμήματος έχουμε τις ακόλουθες περιπτώσεις 3 5 Το σχήμα είναι τετράγωνο με πλευρά. Τα σχήματα και 5 είναι τραπέζια με ύψος. Το σχήμα 3 είναι ορθογώνιο τρίγωνο ενώ το σχήμα προκύπτει από τετράγωνο πλευράς αν αφαιρεθεί το τριγωνάκι της πάνω δεξιά γωνίας. Στη συνέχεια παρουσιάζονται τις συνθήκες που πρέπει να ισχύουν για την εμφάνιση των ανωτέρω σχημάτων. Γίνεται η υπόθεση ότι ο κόμβος (i,j) είναι ο κάτω αριστερά κόμβος του κάθε σχήματος. Σχήμα Συνθήκη imax(j+)>=j+ i>imax(j+) και i+<=imax(j) 3 i>imax(j+) και i=imax(j) i=imax(j+) και i<imax(j) 5 i=imax(j+) και i=imax(j) Έτσι, για παράδειγμα, για το πλέγμα του επόμενου σχήματος έχουμε: 3 3 5 3 5 0.5 0.5 0.75..5.5 Ο υπολογισμός των εμβαδών του κάθε σχήματος γίνεται στις γραμμές 87-0 του κώδικα. Στη συνέχεια θα παρουσιάζονται τα αποτελέσματα που δίνει ο κώδικας για την ακόλουθη περίπτωση: Ny, Nx 8, a.5, b 5, δηλαδή για το πλέγμα:
3 0.5 0.5 0.75..5.5.75. Αποτελέσματα: Αριθμητικό πεδίο ταχυτήτων 0 0.798 0.6873 0.998 0.87 0.0799 0.0875 0 0.9995 0.937 0.796 0.37 0.9998 0.37 0.0700 0 0.3793 0.36869 0.3995 0.387 0.797 0.873 0.999 0.06875 0 0.3999 0.39368 0.379 0.3370 0.9996 0.373 0.799 0.0937 0 Αποτελέσματα: Αναλυτικό πεδίο ταχυτήτων 0 0.7500 0.6875 0.5000 0.875 0.07500 0.0875 0 0.30000 0.9375 0.7500 0.375 0.0000 0.375 0.07500 0 0.37500 0.36875 0.35000 0.3875 0.7500 0.875 0.5000 0.06875 0 0.0000 0.39375 0.37500 0.3375 0.30000 0.375 0.7500 0.09375 0 Παρατηρείται ταύτιση των απαντήσεων με ακρίβεια 3 σημαντικών ψηφίων. Η αριθμητική και αναλυτική τιμή της παροχής είναι.6 και.57 αντίστοιχα. Όπως αναμένεται η ακρίβεια της αριθμητικής λύσης αυξάνεται καθώς πυκνώνει το υπολογιστικό πλέγμα. Τέλος, για λόγους πληρότητας, παρουσιάζεται ο κώδικας σε Matematica που χρησιμοποιήθηκε για την κατασκευή των γραφημάτων του πλέγματος. a=.;b=.;nx=.;ny=.;=.; ell=y +(a x )/b (a x )/b +y spsi=solve[ell,y]; psi=y/.spsi[[,]]; sxi=solve[ell,x]; xi=x/.sxi[[,]]; ny=;nx=6; =/ny; a=.5;b=nx**a; g=plot[psi,{x,0,b/a},axesorigin{0,0},plotrangeall,aspectratioautomatic]; ty=table[{{0,y},{xi,y}},{y,0,,/ny}]//abs; tx=table[{{x,0},{x,psi}},{x,0,b/a,b/(a nx)}]//abs; ticy=table[y,{y,0,,/ny}]; ticx=table[x,{x,0,b/a,b/(a nx)}]; g=grapics[{dased,line[ty]}]; g3=grapics[{dased,line[tx]}]; Sow[g,g,g3,AspectRatioAutomatic,Ticks{ticx,ticy}]
3 0.5 0.5 0.75..5.5