Άσκηση 1 Παράδειγμα #10 ΠΡΟΒΛΗΜΑΤΑ ΟΡΙΑΚΩΝ ΤΙΜΩΝ ΕΛΛΕΙΠΤΙΚΕΣ ΜΔΕ ΕΠΙΜΕΛΕΙΑ: Ν. Βασιλειάδης Να επιλυθεί η ροή ρευστού διαμέσου τετραγωνικού αγωγού η οποία εκφράζεται μέσω της διαφορικής εξίσωσης Poisson σε καρτεσιανές συντεταγμένες: u u 1 1 x y 2 u = + =, 0 =,1 = 0, = 1, = 0. Τέλος να υπολογιστεί η ογκομετρική παροχή διαμέσου του αγωγού. Με οριακές συνθήκες: u( x ) u( x ) u( y) u( y) Απάντηση: Αρχικά διακριτοποιείται το πεδίο ορισμού 0 xy, 1. Κάθε πλευρά του πεδίου ορισμού διακριτοποιείται σε N ισαπέχοντες κόμβους οπότε προκύπτουν N 1 ίσα διαστήματα h= 1 N 1. Αναπτύσσοντας τις εκφράσεις πεπερασμένων διαφορών 2 ης τάξης πλάτους ( ) για τις παραγώγους προκύπτει η διακριτοποιημένη εξίσωση στον τυχαίο κόμβο ( i, j ) ως: 1 2 ui, j= ( h + ui 1, j+ ui+ 1, j+ ui, j 1 + ui, j+ 1 ), i = 2,... N 1, j = 2,... N 1 4 Για την επίλυση του συστήματος θα χρησιμοποιηθούν οι επαναληπτικές μέθοδοι Jacobi, Gauss-Seidel και SOR. Οι επαναληπτικοί χάρτες της κάθε μεθόδου δίνονται παρακάτω: Jacobi 1) 1 2 ( n) ( n) ( n) ( n) ui, j = ( h + ui 1, j+ ui+ 1, j+ ui, j 1 + ui, j+ 1 ), 4 i = 2,... N 1, j = 2,... N 1 Gauss-Seidel 1) 1 2 1) ( n) 1) ( n) ui, j = ( h + ui 1, j+ ui+ 1, j+ ui, j 1 + ui, j+ 1 ), 4 i = 2,... N 1, j = 2,... N 1 SOR 1 ) ( ) ( n ) ω ( ( ) ( ) ( ) ( ) ) n n n n ui, j = 1 ω ui, j+ h + ui 1, j+ ui+ 1, j+ ui, j 1 + ui, j+ 1, 4 i = 2,... N 1, j = 2,... N 1-1 -
Για τον υπολογισμό της ζητούμενης παροχής θα χρησιμοποιηθεί ο κανόνας τραπεζίου. A 1 1 0 0 (, ) Q = uda = u x y dxdy 2 N 1 N 1 N 1 N 1 N 1N 1 h Q= u + u + u + u + 2 u + 2 u + 2 u + 2 u + 4 u 4 Κώδικας Fortran: 1,1 N,1 1, N NN, i,1 in, 1, j N, j i, j i= 2 i= 2 j= 2 j= 2 j= 2 j= 2 program PoiseuilleDuct implicit none integer::i,j,n,solver,iter real*8::h,l,error,err,w,q real*8,allocatable::x(:),y(:),uold(:,:),u(:,:)!definition of problem parameters error=1d-6!desired error n=5!number of discrete nodes L=1.!Duct height and width h=l/(n-1d0)!segment length w=1.6!relaxation parameter (only used in SOR) Solver=1!1:Jacobi; 2:Gauss-Seidel; 3:SOR; allocate(x(n),y(n),uold(n,n),u(n,n)) uold=0d0!initital guess!coordinate system do i=1,n x(i)=(i-1d0)*h y(i)=(i-1d0)*h!implementation of the iterative methods err=1. iter=0!boundary conditions uold(1,:)=0. uold(n,:)=0. uold(:,1)=0. uold(:,n)=0.!initialize u u=uold!computations for the iterative methods do while (err>=error) do i=2,n-1 do j=2,n-1 If (Solver==1) u(i,j)=0.25*(h**2d0+uold(i+1,j)+uold(i- 1,j)+uold(i,j+1)+uold(i,j-1))!Jacobi If (Solver==2) u(i,j)=0.25*(h**2d0+uold(i+1,j)+u(i- 1,j)+uold(i,j+1)+u(i,j-1))!Gauss-Seidel - 2 -
If (Solver==3) u(i,j)=(1.- w)*uold(i,j)+w*0.25*(h**2d0+uold(i+1,j)+u(i-1,j)+uold(i,j+1)+u(i,j-1))!sor!find error err = MAXVAL(ABS(u(:,:)-uold(:,:))) uold = u iter=iter+1!compute volumetric flow rate Q=0. do i=1,n do j=1,n if ((i==1.and. j==1).or. (i==n.and. j==1).or. & (i==1.and. j==n).or. (i==n.and. j==n)) then w=1. elseif ((i==1).or. (i==n).or. (j==1).or. (j==n)) then w=2. else w=4. endif Q=Q+u(i,j)*w Q=h**2./4.*Q!Write to screen Write(*,"(A,1X,I0,1X,A,ES12.3)") "Solution converged after",iter,"iterations with error:",err Write(*,"(A)") "Open file PoiseuilleDuct.dat for more info..."!write results to output file Open(100,file="PoiseuilleDuct.dat") Write(100,"(A)") "------------------velocity profile------------------" Write(100,"(15X,10000ES15.5)") x(:) do j=1,n Write(100,"(10000ES15.5)") y(j),u(:,j) Write(100,"(A)") "----------------volumetric flow rate----------------" Write(100,"(A,ES15.5)") "Q=",Q close(100) end program - 3 -
Με βάση τον παραπάνω κώδικα παρουσιάζεται η κατανομή ταχύτητας στον τετραγωνικό αγωγό για ένα αραιό πλέγμα 5 5 κόμβων. Κατανομή ταχύτητας u y/x 0.00 0.25 0.50 0.75 1.00 0.00 0.00000 0.00000 0.00000 0.00000 0.00000 0.25 0.00000 0.04297 0.05469 0.04297 0.00000 0.50 0.00000 0.05469 0.07031 0.05469 0.00000 0.75 0.00000 0.04297 0.05469 0.04297 0.00000 1.00 0.00000 0.00000 0.00000 0.00000 0.00000 Η ζητούμενη παροχή με το εν λόγω πλέγμα είναι 0.028808. Στην συνέχεια παρουσιάζονται τα γραφήματα των ισοϋψών κατανομής ταχύτητας για τέσσερα διαφορετικά πλέγματα. Πλέγμα: 5 5 Πλέγμα: 11 11 Πλέγμα: 51 51 Πλέγμα: 101 101-4 -
Στον επόμενο πίνακα φαίνεται συγκεντρωτικά ο αριθμός επαναλήψεων μέχρι την σύγκλιση ( n ) ( n) + 1 6 i, j i, j 10 ανά μέθοδο, πλήθος κόμβων και σφάλμα ε = Max u u. Πλέγμα Jacobi Gauss-Seidel SOR 51x51 2577 1465 108 (ω = 1.88) 102 (ω = 1.89) 102 (ω = 1.90) 113 (ω = 1.91) 101x101 7502 4454 246 (ω = 1.93) 201 (ω = 1.94) 202 (ω = 1.95) 220 (ω = 1.96) 201x201 18770 12195 520 (ω = 1.96) 401 (ω = 1.97) 412 (ω = 1.98) 804 (ω = 1.99) Άσκηση 2 Η μεταφορά θερμότητας σε έναν κύβο στον οποίο δεν υπάρχει παραγωγή θερμότητας περιγράφεται μέσω της διαφορικής εξίσωσης Laplace σε καρτεσιανές συντεταγμένες: T T T 0 0 x y y 2 2 T = + + = 2 Να βρεθεί η κατανομή θερμοκρασίας σε έναν κύβο πλευράς L = 1 με οριακές συνθήκες: Απάντηση: T( xy,,1) = 100, T( x y ) T( x z) T( x z) T( y z) T( y z),,0 =,0, =,1, = 0,, = 1,, = 0 Αρχικά διακριτοποιείται το πεδίο ορισμού 0 xyz,, 1. Κάθε πλευρά του πεδίου ορισμού διακριτοποιείται σε N ισαπέχοντες κόμβους οπότε προκύπτουν N 1 ίσα διαστήματα h= 1 N 1. Αναπτύσσοντας τις εκφράσεις πεπερασμένων διαφορών 2 ης τάξης πλάτους ( ) για τις παραγώγους προκύπτει η διακριτοποιημένη εξίσωση στον τυχαίο κόμβο ( i, j ) ως: 1 Ti, jk, = ( Ti 1, jk, + Ti+ 1, jk, + Ti, j 1, k+ Ti, j+ 1, k+ Ti, jk, 1 + Ti, jk, + 1), i, j, k = 2,..., N 1 6 Για την επίλυση του συστήματος θα χρησιμοποιηθούν οι επαναληπτικές μέθοδοι Jacobi, Gauss-Seidel και SOR. Οι επαναληπτικοί χάρτες της κάθε μεθόδου δίνονται παρακάτω: - 5 -
Jacobi 1) 1 ( n) ( n) ( n) ( n) ( n) ( n) Ti, jk, = ( Ti+ 1, jk, + Ti 1, jk, + Ti, j+ 1, k+ Ti, j 1, k+ Ti, jk, + 1 + Ti, jk, 1), i, j, k = 2,..., N 1 6 Gauss-Seidel 1) 1 ( n) 1) ( n) 1) ( n) Ti, jk, = ( Ti+ 1, jk, + Ti 1, jk, + Ti, j+ 1, k+ Ti, j 1, k+ Ti, jk, + 1 + Ti, jk, 1), i, j, k = 2,..., N 1 6 SOR 1) ( n) ω ( n) 1) ( n) 1) ( n) Ti, jk, = ( 1 ω) Ti, jk, + ( Ti+ 1, jk, + Ti 1, jk, + Ti, j+ 1, k+ Ti, j 1, k+ Ti, jk, + 1 + Ti, jk, 1), i, j, k = 2,..., N 1 6 Κώδικας Fortran: program HeatTransferCube implicit none integer::i,j,k,n,solver,iter real*8::h,l,error,err,w real*8,allocatable::x(:),y(:),z(:),told(:,:,:),t(:,:,:)!definition of problem parameters error=1d-6!desired error n=5!number of discrete nodes L=1.!Duct height and width h=l/(n-1d0)!segment length w=1.9!relaxation parameter (only used in SOR) Solver=1!1:Jacobi; 2:Gauss-Seidel; 3:SOR; allocate(x(n),y(n),z(n),told(n,n,n),t(n,n,n)) Told=0d0!Initital guess!coordinate system do i=1,n x(i)=(i-1.)*h y(i)=(i-1.)*h z(i)=(i-1.)*h!implementation of the iterative methods err=1. iter=0!boundary conditions Told(1,:,:)=0. Told(N,:,:)=0. Told(:,1,:)=0. Told(:,N,:)=0. Told(:,:,1)=0. Told(:,:,N)=100.!Initialize T T=Told!Computations for the iterative methods do while (err>=error) - 6 -
do i=2,n-1 do j=2,n-1 do k=2,n-1 If (Solver==1) T(i,j,k)=(Told(i+1,j,k)+Told(i- 1,j,k)+Told(i,j+1,k)+Told(i,j-1,k)+Told(i,j,k+1)+Told(i,j,k-1))/6.!Jacobi If (Solver==2) T(i,j,k)=(Told(i+1,j,k)+T(i- 1,j,k)+Told(i,j+1,k)+T(i,j-1,k)+Told(i,j,k+1)+T(i,j,k-1))/6.!Gauss- Seidel If (Solver==3) T(i,j,k)=(1.- w)*told(i,j,k)+w*(told(i+1,j,k)+t(i-1,j,k) & +Told(i,j+1,k)+T(i,j- 1,k)+Told(i,j,k+1)+T(i,j,k-1))/6.!SOR!Find error err = MAXVAL(ABS(T(:,:,:)-Told(:,:,:))) Told = T iter=iter+1!write to screen Write(*,"(A,1X,I0,1X,A,ES12.3)") "Solution converged after",iter,"iterations with error:",err Write(*,"(A)") "Open file HeatTransferCube.dat for more info..."!write results to output file Open(100,file="HeatTransferCube.dat") do k=1,n Write(100,"(A,ES15.5,A)") "------------------Temperature profile:z=",z(k),"------------------" Write(100,"(15X,10000ES15.5)") x(:) do j=1,n Write(100,"(10000ES15.5)") y(j),t(:,j,k) close(100) end program Με βάση τον παραπάνω κώδικα παρουσιάζεται η κατανομή θερμοκρασίας στον κύβο για ένα αραιό πλέγμα 5 5 5 κόμβων. Κατανομή θερμοκρασίας T( xyz=,, 0) y/x 0.00 0.25 0.50 0.75 1.00 0.00 0.000 0.000 0.000 0.000 0.000 0.25 0.000 0.000 0.000 0.000 0.000 0.50 0.000 0.000 0.000 0.000 0.000 0.75 0.000 0.000 0.000 0.000 0.000 1.00 0.000 0.000 0.000 0.000 0.000-7 -
Κατανομή θερμοκρασίας T( xyz=,, 0.25) y/x 0.00 0.25 0.50 0.75 1.00 0.00 0.000 0.000 0.000 0.000 0.000 0.25 0.000 2.976 4.027 2.976 0.000 0.50 0.000 4.027 5.462 4.027 0.000 0.75 0.000 2.976 4.027 2.976 0.000 1.00 0.000 0.000 0.000 0.000 0.000 Κατανομή θερμοκρασίας T( xyz=,, 0.5) y/x 0.00 0.25 0.50 0.75 1.00 0.00 0.000 0.000 0.000 0.000 0.000 0.25 0.000 9.804 12.745 9.804 0.000 0.50 0.000 12.745 16.667 12.745 0.000 0.75 0.000 9.804 12.745 9.804 0.000 1.00 0.000 0.000 0.000 0.000 0.000 Κατανομή θερμοκρασίας T( xyz=,, 0.75) y/x 0.00 0.25 0.50 0.75 1.00 0.00 0.000 0.000 0.000 0.000 0.000 0.25 0.000 30.357 36.170 30.357 0.000 0.50 0.000 36.170 43.557 36.170 0.000 0.75 0.000 30.357 36.170 30.357 0.000 1.00 0.000 0.000 0.000 0.000 0.000 Κατανομή θερμοκρασίας T( xyz=,, 1) y/x 0.00 0.25 0.50 0.75 1.00 0.00 100.000 100.000 100.000 100.000 100.000 0.25 100.000 100.000 100.000 100.000 100.000 0.50 100.000 100.000 100.000 100.000 100.000 0.75 100.000 100.000 100.000 100.000 100.000 1.00 100.000 100.000 100.000 100.000 100.000-8 -
Στην συνέχεια παρουσιάζονται τα γραφήματα των ισοϋψών της κατανομής θερμοκρασίας για x = 0.5 και για τέσσερα διαφορετικά πλέγματα. Πλέγμα: 5 5 5 Πλέγμα: 11 11 11 Άσκηση 3 Πλέγμα: 51 51 51 Πλέγμα: 101 101 101 Η εξίσωση Laplace σε καρτεσιανές συντεταγμένες: w w 0 0 x y 2 w = + = περιγράφει διάφορα προβλήματα μηχανικής ρευστών και στερεών. Να υπολογισθεί αριθμητικά η τιμή της συνάρτησης wxy (, ) στο κέντρο μιας ορθογώνιας πλάκας με 0 x 2, 0 y 1 και με οριακές συνθήκες: - 9 -
w w( 0, y) = w( 2, y) = 0, = 0, w( x,1) = x y y = 0 Απάντηση: Αρχικά διακριτοποιείται το πεδίο ορισμού 0 x 2 και 0 y 1. Η διεύθυνση x του πεδίου ορισμού διακριτοποιείται σε N x ισαπέχοντες κόμβους οπότε προκύπτουν N x 1 ίσα διαστήματα πλάτους x= 2 ( N x 1). Η διεύθυνση y του πεδίου ορισμού διακριτοποιείται σε N ισαπέχοντες κόμβους οπότε προκύπτουν N 1 ίσα διαστήματα πλάτους y ( ) y = 1 N y 1. Στην συνέχεια αναπτύσσοντας τις εκφράσεις πεπερασμένων διαφορών 2 ης τάξης για τις παραγώγους προκύπτει ο επαναληπτικός χάρτης της μεθόδου SOR για τον i, j όπου i = 2,..., N 1, j = 2,..., N 1: τυχαίο εσωτερικό κόμβο ( ) x y y wi+ 1, j 2wi, j+ wi 1, j wi, j+ 1 2wi, j+ wi, j 1 + = 0 x y ( ) ( w) ( ) ( ) ( ( + ) ( + )) ( ) ( ) ( ) ( ) n + 1 n + 1 n n 1 n n 1 i, j i, j w + + i 1, j i 1, j i, j 1 i, j 1 w = 1 w + y w + w + x w + w 2 x + 2 y Οι οριακές συνθήκες σε διακριτή μορφή για την μέθοδο SOR γράφονται ως: ( ) ( ) ( n 1) w 0, y = 0 w + = 0, j = 2,..., N y 1 1, j n 1 Nx, j ( ) w 2, y = 0 w + = 0, j = 2,..., N y 1 w y y= 0 ( ) ( + 1) ( w) ( ) ( ) n n n i,1 i,1 w i,2 = 0 w = 1 w + w 1) in, y ( ), i = 1,..., Nx w x,1 = x w = i 1 x, i = 1,..., Nx Παρατηρείται ότι για την οριακή συνθήκη Neumann επιλέχθηκε να χρησιμοποιηθεί η έκφραση πεπερασμένων διαφορών 1 ης τάξης το οποίο έχει ως αποτέλεσμα ολόκληρο το αριθμητικό σχήμα να έχει πλέον ακρίβεια πρώτης τάξης. Επίσης προσοχή πρέπει να δοθεί στο χειρισμό των γωνιακών κόμβων του πλέγματος, διότι σε αυτούς τους κόμβους η πληροφορία προέρχεται από δύο οριακές συνθήκες, οι οποίες συχνά δίνουν διαφορετικές τιμές. Ο πιο απλός (αλλά όχι και ακριβής) τρόπος είναι να επιλεγεί και να χρησιμοποιηθεί αυθαίρετα μία από τις δύο οριακές συνθήκες, ενώ για πιο ακριβή αποτελέσματα θα πρέπει η τιμή του γωνιακού κόμβου να προκύπτει από μία διαδικασία παρεμβολής μεταξύ των τιμών των γειτονικών προς αυτόν συνοριακών κόμβων. Κώδικας Fortran: program LaplaceCartesianXY implicit none integer::i,j,nx,ny,iter - 10 -
real*8::dx,dy,lx,ly,error,err,rw real*8,allocatable::x(:),y(:),wold(:,:),w(:,:)!definition of problem parameters error=1d-10 rw=1.95 nx=5; Lx=2d0; dx=lx/(nx-1d0)!geometry in x direction ny=3; Ly=1d0; dy=ly/(ny-1d0)!geometry in y direction allocate(x(nx),y(ny),wold(nx,ny),w(nx,ny)) wold=0.!initital guess!coordinate system do i=1,nx x(i)=(i-1d0)*dx do j=1,ny y(j)=(j-1d0)*dy!boundary conditions left,right and top boundaries wold(1,2:ny-1)=0. wold(nx,2:ny-1)=0. do i=1,nx wold(i,ny)=(i-1.)*dx!implementation of the Jacobi method err=1. iter=0!initialize w w=wold!computations for the Jacobi method do while (err>=error)!desired error!sor Relaxation parameter!bottom boundary do i=1,nx w(i,1)=(1.-rw)*wold(i,1)+rw*wold(i,2) enddo!internal nodes do i=2,nx-1 do j=2,ny-1 w(i,j)=(1.-rw)*wold(i,j)+rw*0.5d0*(dy**2d0*(wold(i+1,j)+w(i- 1,j))+dx**2d0*(wold(i,j+1)+w(i,j-1)))/(dx**2d0+dy**2d0)!Find error err = MAXVAL(ABS(w(:,:)-wold(:,:))) wold = w iter=iter+1 if (mod(iter,1000)==0) write(*,*) w((nx+1)/2,(ny+1)/2),err!write to screen Write(*,"(A,1X,I0,1X,A,ES12.3)") "Solution converged after",iter,"iterations with error:",err - 11 -
Write(*,"(A,ES15.5)") "Function at the middle w(1,0.5)=",w((nx+1)/2,(ny+1)/2) Write(*,"(A)") "Open file LaplaceCartesianXY.dat for more info..."!write results to output file Open(100,file="LaplaceCartesianXY.dat") Write(100,"(A)") "------------------ Function w ------------------" Write(100,"(15X,10000ES15.5)") x(:) do j=1,ny Write(100,"(10000ES15.5)") y(j),w(:,j) close(100) end program Επιλέγεται να χρησιμοποιηθεί Nx = 2Ny 1 ώστε να δημιουργηθούν τετραγωνικά κελιά με x= y. Επίσης εφόσον ζητείται η τιμή της w στον μέσο της πλάκας θα πρέπει 2 m 1 1,0.5. Παρακάτω παρουσιάζεται N y = + ώστε να υπάρχει πάντα κόμβος στο σημείο ( ) ω = καθώς και η τιμής της w ( 1,0.5) ο αριθμός των απαιτούμενων επαναλήψεων για 1.95 για διάφορα πλέγματα. Πλέγμα w ( 1,0.5) Επαναλήψεις ( ω = 1.95) 5 3 0.71429 454 9 5 0.67232 450 17 9 0.65351 452 33 17 0.64459 459 65 33 0.64023 480 129 65 0.63808 606 257 129 0.63701 2932 513 257 0.63648 11115 1025 513 0.63621 40794 Στην συνέχεια παρουσιάζονται τα γραφήματα των ισοϋψών της w για τέσσερα διαφορετικά πλέγματα. Πλέγμα: 5 3 Πλέγμα: 11 6-12 -
Πλέγμα: 51 26 Πλέγμα: 101 51 Άσκηση 4 Να επιλυθεί το πρόβλημα οριακών τιμών u 1 u 1 u + + = 0, 0 r R, 0 θ π 2 r r r r θ με οριακές συνθήκες: u ( 1, θ ) = 5 και u( r ) u( r π ) Απάντηση:,0 =, = 2. Αρχικά διακριτοποιείται το πεδίο ορισμού 0 r 1 και 0 θ π. Η διεύθυνση r του πεδίου ορισμού διακριτοποιείται σε N r ισαπέχοντες κόμβους οπότε προκύπτουν Nr 1 ίσα διαστήματα πλάτους r = 1 ( N r 1). Η διεύθυνση θ του πεδίου ορισμού διακριτοποιείται σε N θ ισαπέχουσες γωνίες με διαφορά γωνίας θ = π ( N θ 1). Παρακάτω παρουσιάζεται ένα πλέγμα για N r = 3 και N θ = 5. Παρατηρείται ότι στο κέντρο του κάτω ορίου για i = 1 αντιστοιχούν όλες οι διακριτές γωνίες. Το γεγονός αυτό είναι σημαντικό για τον ορισμό των συνοριακών συνθηκών και τον προγραμματισμό της λύσης σε Fortran. - 13 -
Αναπτύσσοντας τις εκφράσεις πεπερασμένων διαφορών για τις παραγώγους προκύπτει η διακριτοποιημένη εξίσωση στους εσωτερικούς κόμβους i = 2,..., N r 1, j = 2,..., N θ 1: u 2u + u 1 u u 1 u 2u + u + + = 0 i+ 1, j i, j i 1, j i+ 1, j i 1, j i, j+ 1 i, j i, j 1 2 r ri 2 r ri θ ri θ ui+ 1, j ui, j ui 1, j ri θ r ui+ 1, j ui 1, j r ui, j+ 1 ui, j ui, j 1 ( ) ( ) ( ) 2 1 ( θ ) θ (( ) + ( ) ) ( + ) 2 2 + + + 2 2 + = 0 ui, j= 4ri + 4 r ri 2ri r ui 1, j 2ri r ui 1, j 2 r ui, j 1 u + + + + i, j 1 = 0 όπου ( 1) ri = i r. Για την επίλυση της παραπάνω εξίσωσης θα χρησιμοποιηθεί η επαναληπτική μέθοδος Gauss-Seidel όποτε ο επαναληπτικός χάρτης για τους εσωτερικούς κόμβους i = 2,..., N r 1, j = 2,..., N θ 1 γράφεται ως ( ) ( ) ( + ) ( + ) 1) 2 1 2 ( ) ( ) 1 ) ( ) ( n ) 2 n+ 1 n ui, j = 4ri θ + 4 r ri θ 2ri+ r ui 1, j+ 2ri r ui 1, j + 2 r ui, j 1 + u i, j 1 = 0 ενώ οι διακριτοποιημένες οριακές συνθήκες προκύπτουν: ( θ ) ( θ ) ( ) ( π ) 1) u R, = 5 u = 5, j = 1,..., N θ u 1, = 2 u = 2, j = 1,..., N θ u r,0 = 2 u = 2, i = 2,..., N 1 Nr, j 1) 1, j 1) i,1 1) in, θ u r, = 2 u = 2, i = 2,..., N 1 Κώδικας Fortran: program LaplaceCylinderRTH implicit none integer::i,j,nr,nth,iter real*8::dr,dth,radius,angle,pi,error,err real*8,allocatable::r(:),th(:),uold(:,:),u(:,:) r r!definition of problem parameters Pi=Acos(-1.)!Pi error=1d-10!desired error nr=3; Radius=1d0; dr=radius/(nr-1d0)!geometry in x direction nth=5; Angle=Pi; dth=angle/(nth-1d0)!geometry in y direction allocate(r(nr),th(nth),uold(nr,nth),u(nr,nth)) uold=0.!initital guess!coordinate system do i=1,nr r(i)=(i-1d0)*dr do j=1,nth th(j)=(j-1d0)*dth - 14 -
!Boundary conditions left,right and top boundaries uold(nr,1:nth)=5. uold(1,1:nth)=2. uold(2:nr-1,1)=2. uold(2:nr-1,nth)=2.!implementation of the Gauss-Seidel method err=1. iter=0!initialize u u=uold!computations for the Gauss-Seidel method do while (err>=error)!internal nodes do i=2,nr-1 do j=2,nth-1 u(i,j)=(r(i)*dth**2.*((2.*r(i)+dr)*u(i+1,j)+(2.*r(i)-dr)*u(i-1,j)) & + 2.*dr**2.*(u(i,j+1)+u(i,j- 1)))/(4.*r(i)**2.*dth**2.+4.*dr**2.)!Find error err = MAXVAL(ABS(u(:,:)-uold(:,:))) uold = u iter=iter+1!write to screen Write(*,"(A,1X,I0,1X,A,ES12.3)") "Solution converged after",iter,"iterations with error:",err Write(*,"(A)") "Open file LaplaceCylinderRTH.dat for more info..."!write results to output file Open(100,file="LaplaceCylinderRTH.dat") Write(100,"(A)") "------------------ Function u ------------------" Write(100,"(15X,10000ES15.5)") th(:) do i=1,nr Write(100,"(10000ES15.5)") r(i),u(i,:) close(100) end program Παρακάτω παρουσιάζονται τόσο πινακοποιημένα όσο και γραφικά τα αποτελέσματα για ένα αραιό πλέγμα με N = 3 5 (τρείς εσωτερικοί κόμβοι): r N θ Κατανομή συνάρτησης u( r, θ ) r θ 0 π 4 π 2 3π 4 π 0.0 2.000 2.000 2.000 2.000 2.000 0.5 2.000 3.390 3.718 3.390 2.000 1.0 5.000 5.000 5.000 5.000 5.000-15 -
Τέλος παρουσιάζονται τα γραφήματα των ισοϋψών της συνάρτησης u για τέσσερα διαφορετικά πλέγματα. Πλέγμα: 5 5 Πλέγμα: 11 11 Πλέγμα: 51 51 Πλέγμα: 101 101-16 -
Άσκηση 5 Να επιλυθεί το πρόβλημα οριακών τιμών όπου R L 1 u 1 u u + + = 0, 0 r R, 0 z L r r r z = = και με οριακές συνθήκες: u( r ) u( r L) u( R z),0 =, = 0,, = 5. Απάντηση: Παρακάτω παρουσιάζεται ενδεικτικά η γεωμετρία και το πλέγμα του προβλήματος: Αρχικά διακριτοποιείται το πεδίο ορισμού 0 rz, 1. Επιλέγεται για την απλοποίηση των τύπων κάθε πλευρά του πεδίου ορισμού να διακριτοποιηθεί σε N ισαπέχοντες κόμβους οπότε προκύπτουν N 1 ίσα διαστήματα με πλάτος h= r = z = 1 ( N 1). Αναπτύσσοντας τις εκφράσεις πεπερασμένων διαφορών 2 ης τάξης για τις παραγώγους προκύπτει η διακριτοποιημένη εξίσωση στους εσωτερικούς κόμβους i = 2,..., N 1, j = 2,..., N 1: u 2u + u 1 u u u 2u + u + + = 0 i+ 1, j i, j i 1, j i+ 1, j i 1, j i, j+ 1 i, j i, j 1 r ri 2 r z 1 u 1, 2u, + u 1, + u 1, u 1, + u, 1 2u, + u, 1 = 0 i+ j i j i j 2 1 i+ j i j i j+ i j i j ( ) ( ) i 1 ui 1, j 2ui, j+ ui 1, j+ ui 1, j ui 1, j + ui, j 1 2ui, j+ ui, j 1 = 0 + 2 1 + + ( ) ( ) i 1 1 1 u = 1+ u + 1 u + u + u 4 2( i 1) 2( i 1) i, j i+ 1, j i 1, j i, j+ 1 i, j 1-17 -
Στον άξονα του κυλίνδρου εφαρμόζοντας κανόνα Hospital r 0 γράφεται ως: 2 u u u u u + + = 0 2 + = 0 2 r r z r z u lim r 0 r 2 u r = 2 r η διαφορική Αναπτύσσοντας τις εκφράσεις πεπερασμένων διαφορών 2ης τάξης για τις παραγώγους: u2, j 2u1, j + u0, j u1, j+ 1 2u1, j + u1, j 1 2 + = 0 2 ( u2, j 2u1, j + u0, j) + u1, j+ 1 2u1, j + u1, j 1 = 0 r z Για την εκτίμηση του φανταστικού κόμβου u 0, j θα χρησιμοποιηθεί πάλι έκφραση πεπερασμένων διαφορών 2ης τάξης και άρα προκύπτει: u r r= 0 u u = = = = 2 r 2, j 0, j 0 0 u0, j u2, j, j 2,..., N 1 Τέλος αντικαθιστώντας την τιμή του φανταστικού κόμβου u 0, j προκύπτει η διακριτοποιημένη εξίσωση για τους κόμβους του άξονα συμμετρίας: 1 u1, j = ( 4 u2, j + u1, j+ 1 + u1, j 1 ), j = 2,..., N 1 6 Για τις υπόλοιπες οριακές συνθήκες ισχύει: ( ) i,1 ( ) in, ( ), u r,0 = 0 u = 0, i = 1,..., N url, = 0 u = 0, i= 1,..., N u Rz, = 5 u = 5, j= 2,..., N 1 N j Για την επίλυση του παραπάνω συστήματος θα χρησιμοποιηθεί η επαναληπτική μέθοδος Gauss-Seidel. Ο επαναληπτικός χάρτης της μεθόδου δίνεται παρακάτω: ( 1) 1 1 ( ) 1 n+ n 1) ( n) 1) ui, j = 1+ ui+ 1, j+ 1 ui 1, j+ ui, j+ 1 + ui, j 1, 4 2( i 1) 2( i 1) i = 2,..., N 1, j = 2,..., N 1 1) 1 ( n) ( n) 1) u1, j = ( 4 u2, j + u1, j+ 1 + u1, j 1 ), 6 j = 2,..., N 1 1) ui,1 = 0, i = 1,..., N 1) uin, = 0, i = 1,..., N 1) un, j = 5, j = 2,..., N 1-18 -
Κώδικας Fortran: program LaplaceCylinderRZ implicit none integer::i,j,n,iter real*8::h,error,err real*8,allocatable::r(:),z(:),uold(:,:),u(:,:)!definition of problem parameters error=1d-10!desired error n=3!number od nodes h=1./(n-1.) allocate(r(n),z(n),uold(n,n),u(n,n)) uold=0.!initital guess!coordinate system do i=1,n r(i)=(i-1.)*h z(i)=(i-1.)*h!boundary conditions bottom, top and right boundaries uold(1:n,1)=0. uold(1:n,n)=0. uold(n,2:n-1)=5.!implementation of the Gauss-Seidel method err=1. iter=0!initialize u u=uold!computations for the Gauss-Seidel method do while (err>=error)!internal nodes do i=1,n-1 do j=2,n-1 if (i==1) then!left boundary nodes u(1,j)=(4.*uold(2,j)+uold(1,j+1)+u(1,j-1))/6. else!internal nodes u(i,j)=((1.+1./(2.*(i-1.)))*uold(i+1,j)+(1.-1./(2.*(i- 1.)))*u(i-1,j)+uold(i,j+1)+u(i,j-1))/4. end if!find error err = MAXVAL(ABS(u(:,:)-uold(:,:))) uold = u iter=iter+1!write to screen Write(*,"(A,1X,I0,1X,A,ES12.3)") "Solution converged after",iter,"iterations with error:",err Write(*,"(A)") "Open file LaplaceCylinderRZ.dat for more info..."!write results to output file Open(100,file="LaplaceCylinderRZ.dat") - 19 -
Write(100,"(A)") "------------------ Function u ------------------" Write(100,"(15X,10000ES15.5)") z(:) do i=1,n Write(100,"(10000ES15.5)") r(i),u(i,:) close(100) end program Με βάση τον παραπάνω κώδικα παρουσιάζονται πινακοποιημένα τα αποτελέσματα για ένα αραιό πλέγμα N N = 3 3. Τέλος, παρουσιάζονται τα γραφήματα των ισοϋψών της συνάρτησης u για τέσσερα διαφορετικά πλέγματα. Κατανομή συνάρτησης u rz 0.0 0.5 1.0 0.0 0.000 1.364 0.000 0.5 0.000 2.045 0.000 1.0 0.000 5.000 0.000 Πλέγμα: 5 5 Πλέγμα: 11 11 Πλέγμα: 51 51 Πλέγμα: 101 101-20 -