Advertisement
Guest User

Untitled

a guest
Sep 22nd, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.74 KB | None | 0 0
  1. MODULE PARAM
  2. IMPLICIT NONE
  3. INTEGER, PARAMETER :: SP = KIND(1.0)
  4. INTEGER, PARAMETER :: DP = KIND(1.D0)
  5.  
  6. MODULE BURGER_2
  7. USE PARAM
  8. IMPLICIT NONE
  9.  
  10. REAL(DP), PARAMETER :: x0=0. , xF= 5.
  11. REAL(DP), PARAMETER :: t0=0. , tF= 1.0
  12. REAL(DP), PARAMETER :: dx=0.01, dt=0.1
  13. INTEGER , PARAMETER :: N= CEILING((xF-x0)/dx)
  14. INTEGER , PARAMETER :: M= CEILING((tF-t0)/dt)
  15. REAL(DP), PARAMETER :: nu = 2D-4
  16. REAL(DP), PARAMETER :: pi=3.14159265358979323846
  17.  
  18. SUBROUTINE BURGER_EXPLICIT (x,t,u)
  19. USE PARAM
  20. REAL(DP), DIMENSION(N+1) :: x
  21. REAL(DP), DIMENSION(M+1) :: t
  22. REAL(DP), DIMENSION(N+1,M+1) :: U
  23. REAL(DP) :: r,k
  24. INTEGER :: i,j,stat
  25.  
  26.  
  27.  
  28. x(1:N+1) = (/ ( x0+dx*(i-1) , i=1,N+1 ) /)
  29. t(1:M+1) = (/ (t0+ dt*(j-1) , j=1,M+1 ) /)
  30. U(1:N+1,1:M+1) = RESHAPE((/(((sin(2*pi*(i-1)/N)), i=1,N+1), j=1,M+1)/),(/N+1,M+1/))
  31.  
  32. U(1,:) = x0
  33. U(N+1,:) = xF
  34.  
  35. U(:,1) = t0
  36. U(:,M+1) = tF
  37.  
  38.  
  39.  
  40. r = nu*DT/DX**2
  41. k = DT/(2*DX)
  42.  
  43. DO J=2,M
  44. DO I=2,N
  45. U(i,j+1) = r*u(i+1,j)+(1-2*r)*u(i,j)+r*u(i-1,j) - k*u(i,j)*(u(i+1,j)-u(i-1,j))
  46. END DO
  47. END DO
  48.  
  49. !DO j=1,M+1
  50. OPEN(10,file='bur1.dat',STATUS='UNKNOWN',IOSTAT=stat)
  51. IF (STAT .NE. 0) THEN
  52. WRITE(6,FMT='(A)')'Error opening File ''bur1.dat'' (EXIT1)'
  53. STOP
  54. ELSE
  55. WRITE(10,FMT='(2F20.5)') (x(i), u(i,10), i=1,N) !((u(i,j) , i=1,N+1), J=1,M+1)
  56. !WRITE(10,*)
  57. !WRITE(10,FMT='(2F20.5)') (x(i), u(i,2), i=1,N) !((u(i,j) , i=1,N+1), J=1,M+1)
  58. WRITE(6,'(50("-"))')
  59. !END DO
  60. END IF
  61.  
  62. RETURN
  63. END SUBROUTINE
  64.  
  65. END MODULE
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement