Analisis Numerik untuk Persoalan Water Flooding dengan Menggunakan Metode Volume Hingga

50
Lampiran 1: Iterasi Newton

1

format long % agar memberikan nilai sebanyak 15 bilangan decimal

2
3

% nilai perkiraan awal

4

x= xguess;

5

y= yguess;

6

7

% input jumlah iterasi yang diinginkan

8

Niter=input('jumlah iterasi= ');

9

iterasiold(1) = x;

10

iterasiold(2) = y;

11

for n=1:Niter


12

f1=xˆ2-yˆ2-y;

13

f2=yˆ2+xˆ2-x;

14

j=[2*x-2*y-1; 2*x-1 2*y];
iterasi = [x; y]-inv(j)*[f1; f2]

15

galat = norm(iterasi-iterasiold')

16
17


x = iterasi(1);

18

y = iterasi(2);

19

iterasiold = iterasi';

20

end

Universitas Sumatera Utara

51
Lampiran 2: Aliran Satu Fase

1


maxk = 10000;

2

tfinal = 200;

3

dt = tfinal/maxk;

4

n = 30;

5

dx = 1/n;

6


b=dt/2*dx;

% jumlah waktu

% jumlah diskritisasi

7
8

% Initial condition

9

x(1) = 0.0;

10

u(1,1) = 1.0;


11
12

for i = 2:n+1

13

x(i) =x(i-1) + dx;

14

u(i,1) =1-[x(i)*x(i)];

15

end

16
17


for k=1:maxk+1
time(k) = (k-1)*dt;

18
19

end

20
21

% metode eksplisit

22

for k=2:maxk+1

23

u(1,k)=1;


24

for i=2:n+1
u(i,k) =b * u(i-1,k-1) * u(i-1,k-1) + u(i,k-1) *
(1-b*u(i,k-1));

25
26

end

27
28

end

29
30


hold on;

31

plot(x,u(:,maxk/2+1),'r--');

32

plot(x,u(:,1),'blue');

33

title('explicit method')

34

xlabel('X')

35


ylabel('u(x,t)')

36

hold off

Universitas Sumatera Utara

52
Lampiran 3: Aliran Dua Fase

1

% input parameter

2

L = 1;

3


tfinal = a;

4

maxk = t;

%jumlah perputaran waktu

5

n = d;

%jumlah diskritisasi

6

dt = tfinal/maxk;

7

dx = L/n;

8

b=dt/dx;

%panjang domain

9
10

% kondisi awal

11

x(1) = 0.0;

12

u=zeros(n+1,1);

13

u(1,1) = 1.0;

14
15

for i = 2:n+1

16

x(i) =x(i-1) + dx;

17

u(i,1) = 0.0;

18

end

19
20

for k=1:maxk+1
time(k) = (k-1)*dt;

21
22

end

23
24

% metode eksplisit

25

F = zeros(n+1,1);

26

for k = 2:maxk+1

27

u(1,k)=1;

28

v = velocity(u(:,k-1),dx);

29
30

F = Fflux(u(:,k-1))*v;
Fkanan = F(2:n+1,1);

31

Fkiri

u(2:n+1,k) = u(2:n+1,k-1) - b*(Fkanan - Fkiri);

32
33

= F(1:n,1);

end

34
35

% representasi grafik

36

hold on;

37

plot(x,u(:,maxk/2+1),'red');

38

plot(x,u(:,maxk+1),'black');

39

plot(x,u(:,1),'blue');

Universitas Sumatera Utara

53

40

title('Profile Saturation')

41

xlabel('x')

42

ylabel('S(x,t)')

43

hold off;

fungsi yang diimplementasikan pada code Aliran dua fase diatas

1

% subfungsi fungsi flux

2

function value = Fflux(u)

3

vr = k;

% nilai viskositas

4

value=(vr*u.*u)./(vr*u.*u+(1-u).*(1-u));

1

% subfungsi velocity

2

function vel = velocity(u,dx)

3

m = size(u);

4

laval = 0.0;

5

for j=2:m
increment = (1/lamda(u(j-1))+1/lamda(u(j)))*0.5*dx;
laval = increment+ laval;

6
7
8

end

9

vel = 1/laval;

fungsi lamda diimplementasikan pada subfungsi velocity

1

function val = lamda(u)

2

vr = k;

% nilai viskositas

3

val=vr*u.*u+(1-u).*(1-u);

Universitas Sumatera Utara

54
Lampiran 4: Aliran Dua Fase Nonekuilibrium

1

L = 1.0;

% Panjang domain

2

M = 400;

% jumlah diskritisasi

3

dx = L/M;

4

x = linspace(0,L,M+1)';

5
6

dt = 0.001

7
8

tau = 0.02;

9

b = dt/dx;

10

c = tau/dt;

11

cc = tau/dx;

12

maxt = 100;

% jumlah waktu

13
14

sigma = initialsigma(cc, M); % kondisi awal untuk sigma

15

17

U = zeros(2*M,1);
U(1:M,1) = 0.0;

18

U(M+1:2*M,1) = sigma(2:M+1,1);

16

19
20

for k = 1:maxt+1

21

Uold = U;

22

U = iterasiU(U, Uold, b, c, dx);

23

end

24
25

sat = [1; U(1:M,1)];

26
27

effsat = [1; U(M+1:2*M,1)];
figure(1);

28

hold on;

29

plot(x,sigma,'b--');

30

plot(x,sat, 'k', x,effsat,'r');

31

legend('sigma awal', 'saturation', 'sigma');

Terdapat beberapa subfungsi yang diimplementasikan pada M-File diatas yaitu

1

%subfungsi initialsigma akan menghasilkan nilai awal sigma

2

function sigma = initialsigma(c, M)

3

Niter = 100;

Universitas Sumatera Utara

55

4

sigma = zeros(M+1,1);

5

sigma(1) = 1.0;

6

si = 0.2; %Initial Guess

7

% Implementation of Newton's Iteration

8

for i = 2:M+1
ss = sigma(i-1);

9
10

fluxfunold = fluxfunc(ss);

11

for k=1:Niter

12

fluxfun = fluxfunc(si);

13

derfluxfun = derfluxfunc(si);

14
15

Fsi=si+c*(fluxfun-fluxfunold);
Fsi2=1+c*derfluxfun;

16

Delta = -Fsi/Fsi2;

17

si = si + Delta;

18

if (Delta 1, sehingga dapat ditunjukkan bahwa
vR
vR
< λ(S) <
.
µo (vR + 1)
µo
Dengan demikian
µo
1
µo (vR + 1)
<
<
vR
λ(S)
vR
Integralkan setiap suku terhadap x sepanjang [0,L]
Z L
Z L
Z L
dx
µo (vR + 1)dx
µo dx
<
<
vR
vR
0 λ(S)
0
0

Universitas Sumatera Utara

34
sehingga diperoleh
µo L
<
vR
karena v = R
L
0

Z

L
0

dx
µo L(vR + 1)
<
λ(S)
vR

P0
dengan mengasumsikan k(x) adalah konstanta, maka
dx
k(x)λ(S)
P0 v R