Advertisement
Guest User

Untitled

a guest
Oct 9th, 2018
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.       program forming
  2.       parameter (nx=8,ny=4,n=nx*ny)
  3.       dimension  p1(nx),u1(nx)
  4. c     appel le code sructure
  5.       call fluide(p1)
  6. c     appel structire
  7.       call  struc(p1,u1)
  8.      
  9. c     tracer u1
  10.       h=1./(nx-1)
  11.       write(*,*)'h',h
  12.       do i=1,nx
  13.          xi=(i-1)*h
  14.          write(*,*)xi,u1(i)
  15.          write(1,*)xi,u1(i)
  16.        enddo
  17.       stop
  18.       end
  19.  
  20.  
  21.       subroutine fluide(p1)
  22.       parameter (nx=8,ny=4,nelems=(nx-1)*(ny-1),n=nx*ny)
  23.       dimension a(n,n),b(n),p(n),p1(nx)
  24.       dimension con(4,nelems)
  25.       integer con
  26. c     initialiser la marice
  27.  
  28. c     initialiser b
  29.  
  30.  
  31. c     connectivite
  32.       do i=1,nx-1
  33.          do j=1,ny-1
  34.             k=(nx-1)*(j-1)+i
  35.             con(1,k)=k+(j-1)
  36.             con(2,k)=con(1,k)+1
  37.             con(3,k)=con(2,k)+nx
  38.             con(4,k)=con(3,k)-1
  39.          enddo
  40.       enddo
  41. c     imprimer con
  42.       do k=1,nelems
  43.          write(*,*)k,(con(j,k),j=1,4)
  44.       enddo
  45. c     assembmage
  46.  
  47.  
  48. c     condition aux limites
  49.      
  50.       p0=1.
  51.       do i=n-nx+1,n
  52.          do j=1,n
  53.             a(i,j)=0.
  54.          enddo
  55.          a(i,i)=1.
  56.          p(i)=-p0
  57.       enddo
  58.      
  59. c     resoudre A.p = b  par Jacobi
  60.  
  61.       do i=1,n
  62.          p(i)=-2.
  63.       enddo
  64.      
  65.      
  66. c    calculer P1 pression sur les noeuds structire ( 1 a nx)
  67.       do i=1,nx
  68.          p1(i)=p(i)
  69.       enddo
  70.       return
  71.       end
  72.      
  73.       subroutine struc(p1,u1)
  74.       parameter (n=8,nelems=n-1)
  75.       dimension a(n,n),b(n),ak(2,2),u0(n),u1(n),bk(2),p1(n)
  76.       dimension con(2,nelems)
  77.       integer con
  78. c     initialiser a
  79.       do i=1,n
  80.          do j=1,n
  81.             a(i,j)=0.
  82.          enddo
  83.       enddo
  84. c     initialser b
  85.       do i=1,n
  86.       b(i)=0.
  87.       enddo
  88. c     connectivite
  89.       do k=1,nelems
  90.          con(1,k)=k
  91.          con(2,k)=k+1
  92.       enddo
  93.      
  94.       h =1./nelems
  95.       write(*,*)'h=',h
  96. c     assemblage
  97.          do k=1,nelems
  98.             ak(1,1)=+1./h
  99.             ak(1,2)=-1./h
  100.             ak(2,1)=-1./h
  101.             ak(2,2)=+1./h
  102.             bk(1)=h*p1(k)/2.
  103.             bk(2)=h*p1(k+1)/2.
  104.             do i=1,2
  105.                i1=con(i,k)
  106.                b(i1)=b(i1)+bk(i)
  107.                do j=1,2
  108.                j1=con(j,k)
  109.                a(i1,j1)=a(i1,j1)+ak(i,j)
  110.             enddo
  111.          enddo
  112.       enddo
  113. c     conditions aux limites
  114.       do j=1,n
  115.          a(1,j)=0.
  116.          a(n,j)=0.
  117.       enddo
  118.       a(1,1)=1.
  119.       a(n,n)=1.
  120.       b(1)=0.
  121.       b(n)=0.
  122. c     imprimer ma matrice
  123.       do i=1,n
  124.          write(*,*)(a(i,j),j=1,n)
  125.       enddo
  126.       do i=1,n
  127.          write(*,*)i,b(i)
  128.       enddo
  129.      
  130. c     resoudre Au=b
  131.       do i=1,n
  132.          u0(i)=0.
  133.       enddo
  134.       iter=0
  135.  1    do i=1,n
  136.          som1=0.
  137.          do j=1,i-1
  138.             som1=som1+a(i,j)*u0(j)
  139.          enddo
  140.          som2=0.
  141.          do j=i+1,n
  142.             som2=som2+a(i,j)*u0(j)
  143.          enddo
  144.          u1(i)=(b(i)-som1-som2)/a(i,i)
  145.       enddo
  146. c     test
  147.       er=0.
  148.       do i=1,n
  149.          er=er+abs(u1(i)-u0(i))
  150.       enddo
  151.       tol=1.e-5
  152.       if(er.gt.tol) then
  153.          do i=1,n
  154.             u0(i)=u1(i)
  155.          enddo
  156.          iter=iter+1
  157.          write(*,*)iter,er
  158.          goto 1
  159.       endif
  160.      
  161.       return
  162.       end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement