Вы находитесь на странице: 1из 7

TM 4112

Karakterisasi dan Permodelan Reservoir


Subroutine #3

Nama : Maria Indira Puspita Sari


NIM : 12215091
Tanggal Penyerahan : 11 Oktober 2018
Dosen : Dr. Eng. Ir. Sutopo, M.Eng
Asisten : Wilson Wiranda (12214008)

PROGRAM STUDI TEKNIK PERMINYAKAN


FAKULTAS TEKNIK PERTAMBANGAN DAN PERMINYAKAN
INSTITUT TEKNOLOGI BANDUNG
2018
1 module FluidProperty
2 use tablelookup
3 use ImportData
4 use importdata2
5
6 contains
7
8 function Bg(p)
9 Implicit none
10 real (kind=8) :: bg,p
11 call lookup(tblPg,tblBg,ntbl,p,bg)
12 return
13 end function
14
15 function Ug(p)
16 Implicit none
17 real (kind=8) :: Ug,p
18 call lookup (tblPg,tblUg,ntbl,p,ug)
19 return
20 end function
21
22 function Bw(p)
23 Implicit none
24 real (kind=8) :: Bw,p,x
25 x = cbw * ( p - pref )
26 Bw = (Bwref)/(1 + x + (x**2/2.d0))
27 return
28 end function
29
30 function Uw(p)
31 Implicit none
32 real (kind=8) :: Uw,p,y
33 y = - cvuw * ( p - pref )
34 Uw = (Uwref)/(1 + y + (y**2/2.d0))
35 return
36 end function
37
38 function dbgp (p)
39 implicit none
40 integer i
41 real (kind=8) :: yy, p, y, pp, dbgp
42 call lookup(tblPg, tblBg, ntbl, p, y)
43
44 pp = p - 0.001
45
46 call lookup(tblPg, tblBg, ntbl, pp, yy)
47 dbgp = (y-yy)/(p-pp)
48 return
49 end function
50
51 function dugp (p)
52 implicit none
53 real (kind=8) :: yy,p, y, pp, dugp
54 call lookup(tblPg, tblUg, ntbl, p, y)
55 pp = p - 0.001
56 call lookup(tblPg, tblUg, ntbl, pp, yy)
57 dugp = (y-yy)/(p-pp)
58 return
59 end function
60
61 function dbwp (p)
62 implicit none
63 real (kind=8) :: dbwp, p
64 dbwp = -cbw * bw(p)
65 return
66 end function
67
68 function duwp(p)
69 implicit none
70 real (kind=8) :: duwp, p
71 duwp = cvuw * uw(p)
72 return
73 end function
74
75 function rhog (p)
76 implicit none
77 real (kind=8) :: rhog, p
78 rhog = rgstc/ Bg (p)
79 end function
80
81 function rhow (p)
82 implicit none
83 real (kind=8) :: rhow, p
84 rhow = rwstc/ Bg (p)
85 end function
86
87 function por (p)
88 implicit none
89 real (kind=8) :: por, p, pref2
90 por = phi0 * exp(crock * (p-pref2))
91 end function
92
93 function drhogdp (p)
94 implicit none
95 real (kind=8) :: drhogdp, pp, p
96 pp = p -0.01
97
98 drhogdp = (rhog (p) - rhog (pp)) / (p-pp)
99 end function
100
101 function drhowdp (p)
102 implicit none
103 real (kind=8) :: drhowdp, pp, p
104 pp = p -0.01
105
106 drhowdp = (rhow (p) - rhow (pp)) / (p-pp)
107 end function
108
109 function dpordp (p)
110 implicit none
111 real (kind=8) :: dpordp, pp, p
112 pp = p -0.01
113
114 dpordp = (por (p) - por (pp)) / (p-pp)
115 end function
116
117 function bgft (p)
118 real (kind=8) p, dnw
119 bgft = Bg (p) * 5.6146 / 1000
120 return
121 end function
122
123 function dnw (p)
124 real (kind=8) p, dnw
125 dnw = rhow (p) *6.95d-3*1000/5.6146
126 return
127 end function
128
129 function dng (p)
130 real (kind=8) p, dng
131 dng = rhog (p) *6.95d-3*1000/5.6146
132 return
133 end function
134
135
136
137 end module
1 module initcon
2 use FluidProperty
3
4 implicit none
5 real (kind=8), allocatable, dimension (:,:,:) :: pgrid , swgrid, sggrid
6 real (kind=8) :: gridlengthx, gridlengthy,
gridlengthz
7
8 contains
9 subroutine init_con
10 implicit none
11 integer i, j ,k
12 allocate (pgrid (nx,ny,nz), swgrid(nx,ny,nz), sggrid(nx,ny,nz))
13 gridlengthx = tx/ nx
14 gridlengthy = ty/ ny
15 gridlengthz = tz/ nz
16
17 do i=1, nx
18 do j=1, ny
19 do k=1, nz
20 pgrid (i,j,k) = pinit
21 swgrid (i,j,k)= swi
22 sggrid (i,j,k)= 1-swi
23 end do
24 end do
25 end do
26
27 do i=1, nx
28 do j=1, ny
29 do k=2, nz
30 pgrid (i,j,k) = initp (i,j,k)
31
32 end do
33 end do
34 end do
35
36 end subroutine
37
38 function initp (i,j,k)
39 real (kind=8) initp, pavg, piter
40 integer i, j, k, iterator
41
42 piter = dng (pgrid(i,j,k-1))*gridlengthz + pgrid(i,j,k-1)
43
44 do iterator = 0,10
45 pavg =(pgrid (i,j,k-1) + piter)/2
46 piter= dng(pavg)*gridlengthz + pgrid (i,j,k-1)
47 end do
48
49 initp = piter
50 return
51 end function
52
53 function ogip ()
54 real (kind=8) ogip, add
55 integer i, j, k
56
57 ogip = 0d0
58
59 do i=1, nx
60 do j=1, ny
61 do k=1, nz
62 add = (gridlengthx * gridlengthy * gridlengthz * por(pgrid(i,j,k
))* (sggrid (i,j,k))) / bgft3(pgrid(i,j,k))
63 ogip = ogip + add
64 end do
65 end do
66 end do
67 end function
68 end module

Вам также может понравиться