Advertisement
Guest User

Untitled

a guest
Feb 12th, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Fortran 11.46 KB | None | 0 0
  1.       module var
  2.         real hi(2)
  3.         real hx
  4.         real hy
  5.         real Nx
  6.         real Ny
  7.         real x0
  8.         real xn
  9.         real y0
  10.         real yn
  11.       end module var
  12.  
  13.       program main  
  14.       use var
  15.      
  16.         include "link_f90_static.h"
  17.         integer lda,i,j,p,n,shift
  18.         parameter (nxpoint=10,nypoint=10,n=(nypoint-2)*nxpoint,ncoda=nxpoint,lda=n+ncoda)
  19.        
  20.         integer ijob
  21.          
  22.         real*8 a(lda,ncoda+2),uu(n),errr,er
  23.         real k1,k2,f,u,g1,g2,g3,g4,x,y
  24.         external lslpb
  25.  
  26.  
  27.         open(1,file='OUTPUT2.dat')
  28.        
  29.         write (1,*)
  30.         write (1,*) '---------------------------------------------------&
  31.     &-----------------------------------------'  
  32.       Nx=Nxpoint
  33.       Ny=Nypoint
  34.       x0=1.0
  35.       xn=10.0
  36.       y0=1.0
  37.       yn=10.0
  38.       hx=(xn-x0)/(Nx-1)
  39.       hy=(yn-y0)/(Ny-1)
  40.       hi(1)=1.0
  41.       hi(2)=1.0
  42.       shift=NCODA
  43.        
  44.                          
  45.         write (1,1) 'n = '
  46.         write (1,*) n
  47.         write (1,*)
  48.        
  49.       !=======================================================================
  50. !         calculates a()
  51. !=======================================================================          
  52.         ! j=2
  53.         ! i=1  
  54.         a(ncoda+1,1)=k1(x(1+0.5),y(2.0))*hy/hx+hi(1)*hy+           (k2(x(1.0),y(2.0+0.5))+k2(x(1.0),y(2.0-0.5)))*hx/hy/2
  55.         a(ncoda+1+1,2)=-k1(x(1.0+0.5),y(2.0))*hy/hx  
  56.         a(ncoda+1+nx,ncoda+1)=-k2(x(1.0),y(2.0+0.5))*hx/hy/2
  57.         a(ncoda+1,ncoda+2)=hx*hy/2*f(x(1.0),y(2.0))+g1(y(1.0))*hy+    &   k2(x(1.0),y(1.5))*g3(x(1.0))*hx/hy/2
  58.         ! j=2
  59.         ! i=2,...,n-1  
  60.         do i=2,nx-1
  61.           a(ncoda+i,1)=(k1(x(i+0.5),y(2.0))+k1(x(i-0.5),y(2.0)))*     &     hy/hx+(k2(x(real(i)),y(2.5))+k2(x(real(i)),y(1.5)))*hx/hy
  62.           a(ncoda+i+1,2)=-k1(x(i+0.5),y(2.0))*hy/hx
  63.           a(ncoda+i+nx,ncoda+1)=-k2(x(real(i)),y(2.0+0.5))*hx/hy
  64.           a(ncoda+i,ncoda+2)=hx*hy*f(x(real(i)),y(2.0))-k2(x(real(i)),y(1.5))*g3(x(1.0))*hx/hy
  65.         end do
  66.         ! j=2
  67.         ! i=n
  68.         a(ncoda+nx,1)=hi(2)*hy+k1(x(nx-0.5),y(2.0))*hy/hx+     &   (k2(x(real(nx)),y(2+0.5))+k2(x(real(nx)),y(2.0-0.5)))*hx/hy/2 !
  69.           !
  70.         a(ncoda+nx+nx,ncoda+1)=-k2(x(real(nx)),y(2.0+0.5))*hx/hy/2                                                                    !
  71.         a(ncoda+nx,ncoda+2)=hx*hy/2*f(x(real(nx)),y(2.0))+k2(x(real(nx)),y(1.5))*g3(x(real(nx)))*hx/hy/2+g2(y(real(nx)))*hy         !
  72.         ! j=3,...,n-2
  73.         ! i=1
  74.         do j=3,ny-2
  75.           a(ncoda+1+(j-2)*nx,1)=k1(x(1+0.5),y(real(j)))*hy/hx+hi(1)*hy+       &     (k2(x(1.0),y(j+0.5))+k2(x(1.0),y(j-0.5)))*hx/hy/2    !
  76.           a(ncoda+1+(j-2)*nx+1,2)=-k1(x(1+0.5),y(real(j)))*hy/hx                                                    !
  77.           a(ncoda+1+(j-2)*nx+nx,ncoda+1)=-k2(x(1.0),y(j+0.5))*hx/hy/2                                      !
  78.           a(ncoda+1+(j-2)*nx,ncoda+2)=g1(y(real(j)))*hy+hx*hy/2*f(x(1.0),y(real(j)))                  !
  79.         end do
  80.         ! j=3,...,n-2
  81.         ! i=2,...,n-1
  82.         do i=2,nx-1
  83.           do j=3,ny-2
  84.             a(ncoda+i+(j-2)*nx,1)=(k1(x(i+0.5),y(real(j)))+k1(x(i-0.5),y(real(j))))*          hy/hx+(k2(x(real(i)),y(j+0.5))+k2(x(real(i)),y(j-0.5)))*hx/hy !
  85.             a(ncoda+i+(j-2)*nx+1,2)=-k1(x(i+0.5),y(real(j)))*hy/hx                                                      !
  86.             a(ncoda+i+(j-2)*nx+nx,ncoda+1)=-k2(x(real(i)),y(j+0.5))*hx/hy                                               !
  87.             a(ncoda+i+(j-2)*nx,ncoda+2)=f(x(real(i)),y(real(j)))*hx*hy                                !
  88.           end do
  89.         end do
  90.         ! j=3,...,n-2
  91.         ! i=n
  92.         do j=3,ny-2
  93.           a(ncoda+nx+(j-2)*nx,1)=hi(2)*hy+k1(x(nx-0.5),y(real(j)))*hy/hx+     &   (k2(x(real(nx)),y(j+0.5))+k2(x(real(nx)),y(j-0.5)))*hx/hy/2                !
  94.           a(ncoda+nx+(j-2)*nx+nx,ncoda+1)=-k2(x(real(nx)),y(j+0.5))*hx/hy/2                                                         !
  95.           a(ncoda+nx+(j-2)*nx,ncoda+2)=g2(y(real(j)))*hy+hx*hy/2*f(x(real(nx)),y(real(j)))                                                !
  96.         end do
  97.         ! j=n-1
  98.         ! i=1
  99.         a(ncoda+1+(nx-1-2)*nx,1)=k1(x(1+0.5),y(ny-1.0))*hy/hx+hi(1)*hy+       &     (k2(x(1.0),y(ny-1.0+0.5))+k2(x(1.0),y(ny-1.0-0.5)))*hx/hy/2         !
  100.         a(ncoda+1+(nx-1-2)*nx+1,2)=-k1(x(1+0.5),y(n-1.0))*hy/hx                                                                                          !        
  101.         a(ncoda+1+(nx-1-2)*nx,ncoda+2)=hx*hy/2*f(x(1.0),y(ny-1.0))+g1(y(ny-1.0))*hy+    &   k2(x(1.0),y(ny-0.5))*g4(x(1.0))*hx/hy/2
  102.         ! j=n-1
  103.         ! i=2,...,n-1
  104.         do i=2,nx-1
  105.           a(ncoda+i+(nx-1-2)*nx,1)=(k1(x(i+0.5),y(ny-1.0))+k1(x(i-0.5),y(ny-1.0)))*     &     hy/hx+(k2(x(real(i)),y(ny-1.0+0.5))+k2(x(real(i)),y(ny-1.0-0.5)))*hx/hy !
  106.           a(ncoda+i+(nx-1-2)*nx+1,2)=-k1(x(i+0.5),y(n-1.0))*hy/hx                                                                                     !
  107.           a(ncoda+i+(nx-1-2)*nx,ncoda+2)=k2(x(real(i)),y(ny-0.5))*g4(x(real(i)))*hx/hy/2+hx*hy/2*f(x(real(i)),y(ny-1.0))
  108.         end do
  109.         ! j=n-1
  110.         ! i=n
  111.         a(ncoda+nx+(nx-1-2)*nx,1)=hi(2)*hy+k1(x(nx-0.5),y(n-1.0))*hy/hx+     &   (k2(x(real(nx)),y(n-1.0+0.5))+k2(x(real(nx)),y(n-1.0-0.5)))*hx/hy/2 !
  112.         a(ncoda+nx+(nx-1-2)*nx,ncoda+2)=k2(x(real(nx)),y(ny-0.5))*g4(x(1.0))*hx/hy/2+g2(y(ny-1.0))*hy+hx*hy/2*f(x(real(nx)),y(ny-1.0))
  113. !=======================================================================
  114.  
  115.  
  116.  
  117.       !do j=2,ny-1
  118.       !      do i=1,nx
  119.       !            a(ncoda+I+(j-2)*(nx),1) =-cp(real(i),real(j))  
  120.       !            a(ncoda+i+(j-2)*nx,ncoda+2)=gp(real(i),real(j))
  121.       !            a(ncoda+i+(j-2)*nx,ncoda)=-dp(real(i),real(j))
  122.       !            p=I+(j-2)*nx
  123.       !            
  124.       !      enddo
  125.       !enddo
  126.       !do j=2,ny-2
  127.       !      do i=1,nx
  128.       !            a(ncoda+i+(j-1)*nx,ncoda+1)=-ep(real(i),real(j))
  129.       !      enddo
  130.       !enddo
  131.    
  132.      
  133.      
  134.  
  135.         ijob=1
  136.         call dlslpb(n,a,lda,ncoda,ijob,uu)
  137.  
  138.  
  139.         write(1,*)
  140.         do j=2,ny-1
  141.           do i=1,nx
  142.             write(1,4) a(ncoda+i+(j-2)*nx,ncoda+2)
  143.           end do
  144.           write(1,*)
  145.         end do
  146.  
  147.         write(1,*)
  148.        
  149.                              
  150.         write(1,*)        
  151.         write (1,*) '--------------------------------------------------------------------------------------------'  
  152.        
  153.         errr=0.d0                        
  154.         do j=2,ny-1
  155.           do i=1,nx
  156.               er=abs(u(x(real(i)),y(real(j)))-a(ncoda+i+(j-2)*nx,ncoda+2))
  157.               if (er>errr) errr=er  
  158.           end do          
  159.         end do
  160.        
  161.         write(1,1) '||U-Unum|| = '
  162.         write(1,3) errr
  163.         write(*,*) '||U-Unum|| = '
  164.         write(*,*) errr
  165.         read(*,*)
  166.  
  167. 1       format(a13$)
  168. 2       format(2i5$)
  169. 3       format(e13.3)
  170. 4       format(f10.4$)
  171. 5       format(i10$)
  172. 55      format(i5$)
  173. 555     format(i7)
  174. 6       format(e10.2$)
  175. 7       format(a32$)
  176. 8       format(a5$)
  177. 9       format(a11$)
  178. 10      format(f5.3$)
  179. 12      format(e5.3$)
  180. 11      format(e16.4$)
  181.       end
  182.  
  183.  
  184.  
  185.       real function x(i)
  186.         use var
  187.         real i
  188.         x=x0+(i-1)*hx
  189.         return
  190.       end
  191.      
  192.       real function y(j)
  193.         use var
  194.         real j
  195.         y=y0+(j-1)*hy
  196.         return
  197.       end
  198.      
  199.       real function k1(x,y)
  200.         use var
  201.         real x,y
  202.         k1=1.0
  203.         return
  204.       end
  205.      
  206.       real function k2(x,y)
  207.         use var
  208.         real x,y
  209.         k2=1.0
  210.         return
  211.       end
  212.      
  213.       real function f(x,y)
  214.         use var
  215.         real x,y
  216.         !f=-4*(x*y*y+x*x*y) !0.0
  217.         f=0.0
  218.         return
  219.       end
  220.      
  221.       real function g1(y)
  222.         use var
  223.         real y
  224.         g1=1
  225.         return
  226.       end
  227.      
  228.       real function g2(y)
  229.         use var
  230.         real y
  231.         g2=1.0
  232.         return
  233.       end
  234.      
  235.       real function g3(x)
  236.         use var
  237.         real x
  238.         g3=1.0
  239.         return
  240.       end
  241.      
  242.       real function g4(x)
  243.         use var
  244.         real x
  245.         !g4=100*x*x
  246.         g4=1.0
  247.         return
  248.       end
  249.      
  250.      
  251.       real function u(i,j)
  252.         use var
  253.         real i,j
  254.         !u=r(i)*r(i)*z(j)*z(j)*z(j) !r(i)+z(j)
  255.         u=1
  256.         return
  257.       end
  258.      
  259.       real function Cp(i, j)
  260.         use var
  261.         external k1, k2
  262.         real i, j
  263.         if (i==1.0 ) then
  264.             Cp=-k1(x(i+0.5),y(j))*hy/hx-hi(1)*hy-k2(x(i),y(j+0.5))*hx/hy/2.0-k2(x(i),y(j-0.5))*hx/hy/2.0
  265.             !write(*,*) -r(1.5)*k1(r(1.5),z(j))*hz/hr
  266.             !write(*,*) -hi(1)*r(1.0)*hz
  267.             !write(*,*) -r(1.0)*k2(r(1.0),z(j+0.5))*hr/hz/2.0
  268.             !write(*,*) -r(1.0)*k2(r(1.0),z(j-0.5))*hr/hz/2.0
  269.         else if (i==N) then
  270.             Cp=-hi(2)*hy-k1(x(i-0.5),y(j))*hy/hx-k2(x(i),y(j-0.5))*hx/hy/2.0-k2(x(i),y(j+0.5))*hx/hy/2.0
  271.         else
  272.             Cp=-k1(x(i+0.5),y(j))*hy/hx-k1(x(i-0.5),y(j))*hy/hx-k2(x(i),y(j+0.5))*hx/hy-k2(x(i),y(j-0.5))*hx/hy
  273.         end if
  274.         !write(*,"('Cp='f7.3)") Cp
  275.         return
  276.       end
  277.      
  278.       real function Dp(i, j)
  279.         use var
  280.         external k1, k2
  281.         real i, j
  282.         Dp=0.0
  283.         if (i>=2.0 .and. i<=Nx-1.0 ) then
  284.             Dp=k1(x(i+0.5),y(j))*hy/hx
  285.             !write(*,*) 11111111
  286.         end if
  287.         if (i==nx) then
  288.             dp=0
  289.         endif
  290.         !if (j>=2.0 .and. j<=Nz-2.0 .and. i>=2.0 .and. i<=Nr-1.0) then
  291.         !    Dp=r(i)*k2(r(i),z(j+0.5))*hr/hz
  292.         !    !write(*,*) 22222222
  293.         !end if
  294.         !write(*,"('Dp='f7.3)") Dp
  295.         return
  296.       end
  297.      
  298.       real function Ep(i, j)
  299.         use var
  300.         external k1, k2
  301.         real i, j
  302.         Ep=0.0
  303.         if (i==1.0 .or. i==Nx .and. j<=ny-2.0) then
  304.             Ep=k2(x(i),y(j+0.5))*hx/hy/2.0
  305.         end if
  306.         if (i>=2.0 .and. i<=Nx-1.0 .and. j<=ny-2.0) then
  307.             Ep=k2(x(i),y(j+0.5))*hx/hy
  308.             !write(*,*) i, j, Ep
  309.         end if
  310.         !write(*,"('Ep='f7.3)") Ep
  311.         return
  312.       end
  313.      
  314.       real function Gp(i, j)
  315.         use var
  316.         external k1, k2
  317.         real i, j
  318.         integer flag
  319.         if (j==2.0 .and. i==1.0) then
  320.             Gp=f(x(i),y(j))*hx*hy/2.0+k2(x(i),y(j-0.5))*hx/hy/2.0*g3(x(i))+g1(y(j))*hy !1
  321.          
  322.         end if
  323.         if (j>=3.0 .and. j<=Ny-2.0 .and. i==1.0) then
  324.             Gp=f(x(i),y(j))*hx*hy/2.0+g1(y(j))*hy !4
  325.         end if
  326.         if (j==Ny-1.0 .and. i==1.0) then
  327.             Gp=f(x(i),y(j))*hx*hy/2.0+k2(x(i),y(j+0.5))*hx/hy/2.0*g4(x(i))+g1(y(j))*hy !7
  328.         end if
  329.         if (j==2.0 .and. i>=2.0 .and. i<=Nx-1.0) then
  330.             Gp=f(x(i),y(j))*hx*hy+k2(x(i),y(j-0.5))*hx/hy*g3(x(i)) !2
  331.         end if
  332.         if (j==2.0 .and. i==Nx) then
  333.             Gp=f(x(i),y(j))*hx*hy/2.0+k2(x(i),y(j-0.5))*hx/hy/2.0*g3(x(i))+g2(y(j))*hy !3
  334.         end if
  335.         if (j==Ny-1.0 .and. i>=2.0 .and. i<=Nx-1.0) then
  336.             Gp=f(x(i),y(j))*hx*hy+k2(x(i),y(j+0.5))*hx/hy*g4(x(i)) !8
  337.         end if
  338.         if (j==Ny-1.0 .and. i==Nx) then
  339.             Gp=f(x(i),y(j))*hx*hy/2.0+k2(x(i),y(j+0.5))*hx/hy/2.0*g4(x(i))+g2(y(j))*hy !9
  340.         end if
  341.         if (j>=3.0 .and. j<=Ny-2.0 .and. i==Nx) then
  342.             Gp= g2(y(j))*hy+f(x(i),y(j))*hx*hy/2.0 !6
  343.         end if
  344.         if (j>=3.0 .and. j<=Ny-2.0 .and. i>=2.0 .and. i<=Nx-1.0) then
  345.             Gp=f(x(i),y(j))*hx*hy !5
  346.         end if
  347.         return
  348.       end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement