Guest User

Untitled

a guest
May 7th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. cccccccccccccccccccccccccccccccccccccccccccc
  2.  
  3. c   Pressure calculation
  4.  
  5. cccccccccccccccccccccccccccccccccccccccccccc   
  6.  
  7.     subroutine pressure()
  8.  
  9.     use mvrs
  10.  
  11.     implicit none
  12.  
  13.    
  14.     F = 0.0
  15.    
  16.     do i = 2,N-1
  17.     do j = 2,N-1
  18.  
  19.     F(i,j) = (u(i+1,j+1)-u(i+1,j-1))/(4.0*dL**2.0) -
  20.      c  (u(i-1,j+1)-u(i-1,j-1))/(4.0*dL**2.0) +
  21.      c  (psi(i+1,j)+psi(i-1,j)-2.0*psi(i,j))*
  22.      c  (psi(i,j+1)+psi(i,j-1)-2.0*psi(i,j))/dL**4.0
  23.  
  24.     enddo
  25.     enddo  
  26.  
  27.     !Calculate dw/dx and dw/dy
  28.     do i = 2, N-1
  29.     do j = 2, N-1
  30.      dwx(i,j) = (w(i+1,j)-w(i-1,j))/(2.0*dL)
  31.      dwy(i,j) = (w(i,j+1)-w(i,j-1))/(2.0*dL)
  32.     enddo
  33.     enddo
  34.     do j = 2, N-1
  35.      dwy(1,j) = (w(1,j+1)-w(1,j-1))/(2.0*dL)
  36.      dwx(j,1) = (w(j+1,N)-w(j-1,N))/(2.0*dL)
  37.     enddo
  38.  
  39.     dwy(1,1) = (w(1,2)-w(1,1))/dL
  40.     dwy(1,N) = (w(1,N)-w(1,N-1))/dL
  41.     dwy(N,1) = (w(N,2)-w(N,1))/dL
  42.     dwy(N,N) = (w(N,N)-w(N,N-1))/dL
  43.  
  44.     dwx(1,1) = (w(2,1)-w(1,1))/dL
  45.     dwx(1,N) = (w(2,N)-w(1,N))/dL
  46.     dwx(N,1) = (w(N,1)-w(N-1,1))/dL
  47.     dwx(N,N) = (w(N,N)-w(N-1,N))/dL
  48.  
  49.     pc = 0 
  50.  
  51.     rp = 1.0
  52.  
  53.  
  54.     do while (rp > maxres)
  55.  
  56.     pc = pc+1
  57.     pn = p
  58.  
  59.  
  60.  
  61.     !----------------------------- Start of matrix solution for current iteration
  62.  
  63.     do i = 1, N
  64.  
  65. c   -------------------------
  66.  
  67. c   Build tridiagonal vectors
  68.  
  69. c   -------------------------
  70.  
  71.     ud = 1.0
  72.  
  73.     ld = 1.0
  74.  
  75.     ud(1) = 2.0
  76.  
  77.     ld(N) = 2.0
  78.  
  79.     md = -4.0
  80.  
  81.  
  82.  
  83. c   Arrange dependent vectors (RHS of EQ)
  84.     if (i == 1) then
  85.  
  86.         pk = -2.0*(pn(i+1,:)+mu*dL*dwy(i,:))
  87.  
  88.     else if (i == N) then
  89.  
  90.         pk = -2.0*(pn(i-1,:)-mu*dL*dwy(i,:))
  91.  
  92.     else
  93.  
  94.         pk = 2.0*rho*dL**2.0*F(i,j) -
  95.  
  96.      c  (pn(i+1,:)+pn(i-1,:))  
  97.  
  98.     end if
  99.  
  100.  
  101.     pk(1) = pk(1) - 2.0*mu*dL*dwx(i,1)
  102.     pk(N) = pk(N) + 2.0*mu*dL*dwx(i,N)
  103.  
  104.  
  105.  
  106. c   ---------------------------------------
  107.  
  108. c   Solve tridagonal system with ld,md,ud,p
  109.  
  110. c   ---------------------------------------
  111.  
  112.     do z = 2, N
  113.  
  114.         ld(z) = ld(z)/md(z-1)
  115.  
  116.         md(z) = md(z) - ld(z)*ud(z-1)
  117.  
  118.         pk(z) = pk(z) - ld(z)*psk(z-1)     
  119.  
  120.     enddo
  121.  
  122.  
  123.  
  124.     pni(N) = pk(N)/md(N)
  125.  
  126.  
  127.  
  128.     do z = N-1,1,-1
  129.  
  130.         pni(z) = (pk(z) - ud(z)*pni(z+1))/md(z)
  131.  
  132.     enddo
  133.  
  134.  
  135.  
  136.     pn(i,:) = pni(:)
  137.  
  138.  
  139.     enddo
  140.  
  141.  
  142.  
  143.     rp = sqrt(sum((pn - p)**2.0))
  144.  
  145.  
  146.  
  147.     if (pc == 1) then
  148.  
  149.         rpo = rp
  150.  
  151.     end if
  152.  
  153.  
  154.  
  155.     rp = rp/rpo
  156.  
  157.     p = pn
  158.  
  159.  
  160.  
  161. c   write(*,'(A, I5, A, e10.3)'), 'Iteration #:', cc,
  162.  
  163. c     c '     Residual:  ', rs
  164.  
  165.    
  166.  
  167.     enddo
  168.        
  169.        
  170.  
  171.  
  172.  
  173.     end subroutine
Add Comment
Please, Sign In to add comment