Tuesday, September 15, 2009

AVO Classification

Klasifikasi AVO (Amplitudo versus Offset) diprakarsai oleh Rutherford dan Williams (1989) yang mendefinisikan 3 kelas AVO untuk reservoir gas sand.

Ketiga kelas tersebut adalah, kelas I untuk high impedance gas sand (relatif terhadap shale yang menutupinya), Kelas II untuk kontras impedance yang hampir nol (antara gas sand dan shale) dan kelas III untuk low impedance gas sand.

Karakteristik amplitudo sebagai fungsi dari offset (sudut) untuk kelas-kelas AVO tersebut dapat dilihat pada gambar di bawah ini.


Dari gambar di atas terlihat bahwa, top gas sand kelas I AVO memiliki peak amplitude yang positif (SEG reverse, lihat: Polaritas normal-reverse) untuk near offset, kemudian mengalami dimming pada mid angle dan bahkan pembalikan polaritas pada far angle sebagai trough amplitude.

Kelas II memiliki near zero amplitude pada near offset (dimming), lalu mengalami peningkatan amplitudo ke arah trough pada far angle. Sedangkan untuk AVO kelas IIp, dijumpai pembalikan polaritas disekitar mid offset.

Kelas III AVO merupakan anomali yang mudah dikenal yang ditandai dengan peningkatan amplitudo yang drastis ke arah trough sejalan dengan bertambahnya offset.

Seiring dengan perkembangan dan penemuan di lapangan, dikenal juga AVO kelas IV, V dan VI. Kelas IV dan kelas V memiliki perilaku yang mirip yakni negative high amplitude pada near angle dan mengalami penurunan amplitudo pada mid dan far. Akan tetapi penurunan untuk kelas IV tidak sedrastis AVO kelas V.

Perilaku batubara (coal) dapat menyerupai gas sand kelas IV, untungnya gas sand kelas IV memiliki Vp/Vs yang kecil sedangkan batubara memiliki Vp/Vs yang besar. Untuk gas sand kelas VI, memiliki karakteristik low positive amplitude pada near offset dan mengalami peningkatan amplitudo ke arah peak pada far offset.

Pada praktiknya, determinasi gas sand tidak cukup dengan melihat respon amplitudo terhadap offset saja. Studi tersebut harus ditunjang dengan melihat aspek lain seperti karakterstik peta amplitudo pada masing-masing angle stack, AVO modeling, R3M, dan lain sebagainya.

Gambar dibawah ini menunjukkan karakteristik peta amplitudo untuk gas sand kelas III. Perhatikan bahwa bright amplitude anomaly (merah) berasosiasi dengan closure area.

Courtesy Nick Loizou et al., Petroleum Geoscience

Gambar di bawah ini menunjukkan, hasil inversi R3M yang di overlay dengan data seismik. Merah menunjukan high resistivity (hidrokarbon) dan biru menunjukan low resistivity (non hidrokarbon).


Courtesy R. Mittet et al., EGM 2007 International Workshop

Gambar di bawah ini menunjukkan aplikasi interaktif untuk pemodelan AVO dengan input Vp, Vs dan ρ shale dan sand untuk gelombang P refleksi (Rpp : lihat Converted Waves).


Berikut adalah code pemograman matlab untuk aplikasi di atas:

% Interactive AVO Modeling
% Developed by Agus Abdullah, PhD
% Prepared for ensiklopediseismik.blogspot.com
% You may use this code for your research and study as long as you mention the source of this code: 'ensiklopediseismik'.
% Afterall,it is a bloody work to write such code, isn't it?
function [] = AVO()
S.gambar = figure('units','pixels',...
'position',[400 400 600 700],...
'menubar','none',...
'numbertitle','off',...
'name','AVO Modeling - ensiklopediseismik',...
'resize','off');
S.kurva = axes('units','pixels',...
'position',[75 270 500 400],...
'fontsize',8,...
'buttondownfcn',{@ax_bdfcn,S},...
'nextplot','replacechildren');
S.sl1 = uicontrol('style','slide',...
'unit','pix',...
'position',[150 200 300 20],...
'min',1,'max',8000,'val',2200);
S.ed1 = uicontrol('style','edit',...
'unit','pix',...
'position',[480 200 60 20],...
'fontsize',10,...
'string','2200');
S.sl2 = uicontrol('style','slide',...
'unit','pix',...
'position',[150 175 300 20],...
'min',1,'max',4000,'val',1200);
S.ed2 = uicontrol('style','edit',...
'unit','pix',...
'position',[480 175 60 20],...
'fontsize',10,...
'string','1200');
S.sl3 = uicontrol('style','slide',...
'unit','pix',...
'position',[150 150 300 20],...
'min',1,'max',6000,'val',2100);
S.ed3 = uicontrol('style','edit',...
'unit','pix',...
'position',[480 150 60 20],...
'fontsize',10,...
'string','2100');
S.sl4 = uicontrol('style','slide',...
'unit','pix',...
'position',[150 125 300 20],...
'min',1,'max',8000,'val',2200);
S.ed4 = uicontrol('style','edit',...
'unit','pix',...
'position',[480 125 60 20],...
'fontsize',10,...
'string','2200');
S.sl5 = uicontrol('style','slide',...
'unit','pix',...
'position',[150 100 300 20],...
'min',1,'max',4000,'val',1200);
S.ed5 = uicontrol('style','edit',...
'unit','pix',...
'position',[480 100 60 20],...
'fontsize',10,...
'string','1200');
S.sl6 = uicontrol('style','slide',...
'unit','pix',...
'position',[150 75 300 20],...
'min',1,'max',6000,'val',2100);
S.ed6 = uicontrol('style','edit',...
'unit','pix',...
'position',[480 75 60 20],...
'fontsize',10,...
'string','2100');
S.htext1 = uicontrol('Style','text','String','Vp Shale(m/s)',...
'Position',[20,205,100,15]);
S.htext2 = uicontrol('Style','text','String','Vs Shale(m/s)',...
'Position',[20,177,100,15]);
S.htext3 = uicontrol('Style','text','String','Rho Shale(kg/m^3)',...
'Position',[20,149,100,15]);
S.htext4 = uicontrol('Style','text','String','Vp Sand(m/s)',...
'Position',[20,128,100,15]);
S.htext5 = uicontrol('Style','text','String','Vs Sand(m/s)',...
'Position',[20,103,100,15]);
S.htext6 = uicontrol('Style','text','String','Rho Sand(kg/m^3)',...
'Position',[20,77,100,15]);
set([S.ed1,S.sl1],'call',{@ed_call1,S});
set([S.ed2,S.sl2],'call',{@ed_call2,S});
set([S.ed3,S.sl3],'call',{@ed_call3,S});
set([S.ed4,S.sl4],'call',{@ed_call4,S});
set([S.ed5,S.sl5],'call',{@ed_call5,S});
set([S.ed6,S.sl6],'call',{@ed_call6,S});
function [] = ed_call1(varargin)
[h1,S] = varargin{[1,3]};
switch h1
case S.ed1
L1 = get(S.sl1,{'min','max','value'});
E1 = str2double(get(h1,'string'));
if E1 >= L1{1} && E1 <= L1{2} set(S.sl1,'value',E1)
else set(h1,'string',L1{3})
end
case S.sl1
set(S.ed1,'string',get(h1,'value'))
otherwise
end
alpha1 = get(S.sl1,('value'));
beta1 = get(S.sl2,('value'));
rho1 = get(S.sl3,('value'));
alpha2 = get(S.sl4,('value'));
beta2 = get(S.sl5,('value'));
rho2 = get(S.sl6,('value'));
tethap1=[0:40];
Rpp=avocal(alpha1,beta1,rho1,alpha2,beta2,rho2);
plot(tethap1,Rpp,'r','linewidth',2)
grid
xlabel('Angle')
ylabel('Amplitudo')
function [] = ed_call2(varargin)
[h2,S] = varargin{[1,3]};
switch h2
case S.ed2
L2 = get(S.sl2,{'min','max','value'});
E2 = str2double(get(h2,'string'));
if E2 >= L2{1} && E2 <= L2{2} set(S.sl2,'value',E2)
else set(h2,'string',L2{3})
end
case S.sl2
set(S.ed2,'string',get(h2,'value'))
otherwise
end
alpha1 = get(S.sl1,('value'));
beta1 = get(S.sl2,('value'));
rho1 = get(S.sl3,('value'));
alpha2 = get(S.sl4,('value'));
beta2 = get(S.sl5,('value'));
rho2 = get(S.sl6,('value'));
tethap1=[0:40];
Rpp=avocal(alpha1,beta1,rho1,alpha2,beta2,rho2);
plot(tethap1,Rpp,'r','linewidth',2)
grid
xlabel('Angle')
ylabel('Amplitudo')
function [] = ed_call3(varargin)
[h3,S] = varargin{[1,3]};
switch h3
case S.ed3
L3 = get(S.sl3,{'min','max','value'});
E3 = str2double(get(h2,'string'));
if E3 >= L3{1} && E3 <= L3{2} set(S.sl3,'value',E3)
else set(h3,'string',L3{3})
end
case S.sl3
set(S.ed3,'string',get(h3,'value'))
otherwise
end
alpha1 = get(S.sl1,('value'));
beta1 = get(S.sl2,('value'));
rho1 = get(S.sl3,('value'));
alpha2 = get(S.sl4,('value'));
beta2 = get(S.sl5,('value'));
rho2 = get(S.sl6,('value'));
tethap1=[0:40];
Rpp=avocal(alpha1,beta1,rho1,alpha2,beta2,rho2);
plot(tethap1,Rpp,'r','linewidth',2)
grid
xlabel('Angle')
ylabel('Amplitudo')
function [] = ed_call4(varargin)
[h4,S] = varargin{[1,3]};
switch h4
case S.ed4
L4 = get(S.sl4,{'min','max','value'});
E4 = str2double(get(h4,'string'));
if E4 >= L4{1} && E4 <= L4{2} set(S.sl4,'value',E4)
else set(h4,'string',L4{3})
end
case S.sl4
set(S.ed4,'string',get(h4,'value'))
otherwise
end
alpha1 = get(S.sl1,('value'));
beta1 = get(S.sl2,('value'));
rho1 = get(S.sl3,('value'));
alpha2 = get(S.sl4,('value'));
beta2 = get(S.sl5,('value'));
rho2 = get(S.sl6,('value'));
tethap1=[0:40];
Rpp=avocal(alpha1,beta1,rho1,alpha2,beta2,rho2); plot(tethap1,Rpp,'r','linewidth',2)
grid
xlabel('Angle')
ylabel('Amplitudo')
function [] = ed_call5(varargin)
[h5,S] = varargin{[1,3]};
switch h5
case S.ed5
L5 = get(S.sl5,{'min','max','value'});
E5 = str2double(get(h5,'string'));
if E5 >= L5{1} && E5 <= L5{2} set(S.sl5,'value',E5)
else set(h5,'string',L5{3})
end
case S.sl5
set(S.ed5,'string',get(h5,'value'))
otherwise
end
alpha1 = get(S.sl1,('value'));
beta1 = get(S.sl2,('value'));
rho1 = get(S.sl3,('value'));
alpha2 = get(S.sl4,('value'));
beta2 = get(S.sl5,('value'));
rho2 = get(S.sl6,('value'));
tethap1=[0:40];
Rpp=avocal(alpha1,beta1,rho1,alpha2,beta2,rho2);
plot(tethap1,Rpp,'r','linewidth',2)
grid
xlabel('Angle')
ylabel('Amplitudo')
function [] = ed_call6(varargin)
[h6,S] = varargin{[1,3]};
switch h6
case S.ed6
L6 = get(S.sl6,{'min','max','value'});
E6 = str2double(get(h6,'string'));
if E6 >= L6{1} && E6 <= L6{2}
set(S.sl6,'value',E6)
else
set(h6,'string',L6{3})
end
case S.sl6
set(S.ed6,'string',get(h6,'value'))
otherwise
end
alpha1 = get(S.sl1,('value'));
beta1 = get(S.sl2,('value'));
rho1 = get(S.sl3,('value'));
alpha2 = get(S.sl4,('value'));
beta2 = get(S.sl5,('value'));
rho2 = get(S.sl6,('value'));
tethap1=[0:40];
Rpp=avocal(alpha1,beta1,rho1,alpha2,beta2,rho2);
plot(tethap1,Rpp,'r','linewidth',2)
grid
xlabel('Angle')
ylabel('Amplitudo')
function Rpp= avocal(alpha1,beta1,rho1,alpha2,beta2,rho2)
tethap1=[0:40]; tethap2=180/pi*asin(((sin(tethap1*pi/180))./alpha1)*alpha2) ;
tethap=(tethap1+tethap2)./2; tethas1=180/pi*asin(((sin(tethap1*pi/180))./alpha1)*beta1) ; tethas2=180/pi*asin(((sin(tethas1*pi/180))./beta1)*beta2) ;
tethas=(tethas1+tethas2)./2;
alpha_av=(alpha2+alpha1)/2;
beta_av=(beta2+beta1)/2;
alpha_d=alpha2-alpha1;
beta_d=beta2-beta1;
rho_av=(rho2+rho1)/2;
rho_d=rho2-rho1;
p=sin(tethap1*pi/180)/alpha1;
Rpp=0.5*(1-(4*p.^2)*beta_av^2)*rho_d/rho_av+(1./(2*(cos(tethap*pi/180)).^2))*(alpha_d/alpha_av)-(4*p.^2)*(beta_av^2)*(beta_d/beta_av);

No comments: