Programa GeoModelo Programa Modelador Programa VerSeis

Anuncio
Universidad Simón Bolı́var
Programa GeoModelo
Programa Modelador
Programa VerSeis
P. J. Mora
Índice general
1. Programas GeoModelo y Modelador
3
1.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
1.2. Elementos Básicos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
1.3. Tres Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
2. Programa VerSeis
2.1. Elementos Básicos
11
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
A. Códigos
16
Bibliografı́a
16
1
Índice de figuras
1.1. Esquema básico y flujo de trabajo. . . . . . . . . . . . . . . . . . . . . . . . . . .
6
1.2. Modelo Geológico ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
1.3. Modelo numérico ya construido por GeoModelo y Modelador (vista rotada un
ángulo arbitrario) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
1.4. Dos ejemplos adicionales que muestran las capacidades de GeoModelo y Modelador 10
2.1. Esquema General . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2. Sismograma generado por simulación de un disparo en un medio homogéneo, 100
trazas, 120 muestras en tiempo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2
Capı́tulo 1
Programas GeoModelo y Modelador
1.1.
Introducción
El modelado y la simulación numéricos pertenecen al grupo de herramientas más importantes
existentes hoy dia para la geofı́sica de exploración y la prospección de hidrocarburos [3]. Los
programas de simulación permiten la resolución numérica de las ecuaciones diferenciales que
describen la fı́sica de propagación de ondas acústicas o elásticas sobre modelos sintéticos de
propiedades que representan secciones del subsuelo. La especificación de la geometrı́a de capas y
reflectores en dichos modelos es una labor no trivial, dada la cantidad de información a especificar
y la variedad de formatos existentes [5]. Los programas Geomodelo y Modelador que se
presentan en este informe pretenden facilitar la tarea de construcción de modelos numéricos de
velocidad para ser utilizados en modelado geofı́sico.
3
Geomodelo, Modelador, VerSeis
1.2.
P. J. Mora
4
Elementos Básicos
El programa GeoModelo ha sido desarrollado para construir modelos geológicos complejos
(tanto velocidad como densidad) usando como base un dibujo del modelo hecho en formato
gráfico comercial.
La siguiente explicación esta basada en la figura (1.1).
Paso 1. El usuario debe hacer un dibujo del modelo geológico en algún formato gráfico
conocido (jpg,gif,etc). Dicho formato escogido por el usuario debe permitirle especificar las
dimensiones del dibujo en unidades pixel (nx: número de pixels en dirección horizontal, nz:
número de pixels en dirección vertical). Al dibujar los sectores en el dibujo, debe asignarse
un color distinto por cada sector, sin repetirse. El dibujo debe ser grabado (”salvado”) en
escala de colores.
Paso 2. El archivo del dibujo debe ser convertido a PostScriptT M ENCAPSULADO (EPS),
en escala de grises, usando cualquier programa comercial de manipulación de archivos
gráficos.
Paso 3. El archivo EPS debe ser abierto en modo texto, a fin de eliminar tanto el header
como el footer estándar correspondientes al formato PostScriptT M , dejando intactos los
caracteres asociados a la imagen. El usuario debe dar un nombre a este nuevo archivo
(ejm., pstxX ).
Paso 4. El usuario corre ahora el programa GeoModelo. El programa pedirá al usuario
el nombre del archivo grabado en el paso 3 (pstxX), asi como las dimensiones (nx,nz) del
modelo en unidades pixel.
Geomodelo, Modelador, VerSeis
P. J. Mora
5
Paso 5. El programa toma el archivo pstxX e identifica los sectores contenidos en el modelo.
Cada sector esta conceptualmente asociado a una unidad geológica de interés. El programa
GeoModelo reporta al usuario el número total de sectores identificados y le pregunta los
valores de velocidad y densidad a ser asociados a cada sector del modelo.
Paso 6. El programa construye un par de archivos, uno de ellos (outvel.out) contiene la
información de velocidad para cada sector, y el otro (outden.out) contiene la información
de densidad para cada sector.
Paso 7. Finalmente, los archivos outvel.out y outden.out son introducidos al programa
Modelador, el cual construye un modelo (K-model.out) que puede ser introducido al
programa de simulación desarrollado por Agenda Petróleo USB. El archivo K-model.out
puede ser visualizado usando cualquier visualizador estándar (ejm. SurferT M ).
1.3.
Tres Ejemplos
En esta sección aplicaremos los pasos explicados anteriormente a un modelo geológico ejemplo
(fig.(1.2)). Dos ejemplos adicionales son mostrados al final de esta sección.
Paso 1. El usuario ha diseñado un dibujo del modelo, en un formato gráfico de su preferencia,
y ha definido las dimensiones del mismo como (x:100 pixels, z:100 pixels). El dibujo ha sido
hecho en escala de colores. Ningún pixel ha quedado sin color, y ningún color ha sido
repetido en dos sectores cualesquiera del dibujo (fig.(1.2)).
Geomodelo, Modelador, VerSeis
P. J. Mora
Figura 1.1: Esquema básico y flujo de trabajo.
6
Geomodelo, Modelador, VerSeis
P. J. Mora
7
Paso 2. Este archivo ha sido convertido a PostScriptT M encapsulado (EPS), usando uno de
los tantos programas comerciales disponibles de manipulación de formato gráfico.
Paso 3. El archivo EPS fué abierto en modo texto a fin de quitar el header y el footer. El
archivo truncado ha sido salvado con otro nombre (ejm pstx-geo).
Paso 4. Ahora se corre el programa GeoModelo. El programa pide el nombre de archivo (pstx-geo), y pide tambien las dimensiones del dibujo (nx=100, nz=100), las cuales
corresponden a las dimensiones del modelo.
Paso 5. El programa GeoModelo toma el archivo (pstx-geo) e identifica el número de
sectores presentes. Cada sector esta conceptualmente asociado a una unidad geológica de
interés. El programa GeoModelo reporta al usuario el número total de sectores identificados,
un total de ocho (8) sectores han sido detectados, y le pregunta los valores de velocidad y
densidad a ser asociados a cada sector del modelo.
Paso 6. El programa construye un par de archivos, uno de ellos (outvel.out) contiene la
información de velocidad para cada uno de los ocho sectores, y el otro (outden.out) contiene
la información de densidad para cada uno de los ocho sectores.
Paso 7. Finalmente, los archivos outvel.out y outden.out son introducidos al programa
Modelador, el cual construye un modelo (K-model.out) que puede ser introducido al
programa de simulación desarrollado por Agenda Petróleo USB. El archivo K-model.out
puede ser visualizado usando cualquier visualizador estándard (para las figuras de este
reporte, se ha utilizado Compaq Array VisualizerT M )
Geomodelo, Modelador, VerSeis
P. J. Mora
Figura 1.2: Modelo Geológico ejemplo
Dos ejemplos adicionales se muestran como complemento (fig(1.4)).
8
Geomodelo, Modelador, VerSeis
P. J. Mora
9
Figura 1.3: Modelo numérico ya construido por GeoModelo y Modelador (vista rotada un ángulo
arbitrario)
Geomodelo, Modelador, VerSeis
P. J. Mora
10
Figura 1.4: Dos ejemplos adicionales que muestran las capacidades de GeoModelo y Modelador
Capı́tulo 2
Programa VerSeis
2.1.
Elementos Básicos
El programa VerSeis es un código muy sencillo, escrito en MatLabT M que ha sido desarrollado
para visualizar los sismogramas que resultan como parte de los archivos de salida del programa
de modelado acústico del Grupo Agepet-USB.
El programa VerSeis simplemente pregunta al usuario el nombre del sismograma a visualizar,
y tambien las dimensiones del mismo. El sismograma es un arreglo de dimensiones [L,N] donde
L es el número de trazas y N es el número de muestras en tiempo por cada traza.
El funcionamiento del programa VerSeis debe ser entendido en el contexto general de los
programas que estan siendo desarrollados por el grupo AgePet-USB (ver figura 2.1). El programa de Modelaje Acústico AgePet USB recibe el archivo de modelo (K-model.out) y pregunta
al usuario algunos parámetros básicos de simulación. Este programa utiliza como fuente una
ondı́cula construı́da internamente, y que es guardada en un archivo externo (ondicula.out) que es
11
Geomodelo, Modelador, VerSeis
P. J. Mora
12
visible por el usuario via un programa MatLabT M (ver-ondicula.m) si se quiere chequear su forma
de onda (amplitud vs.tiempo). Asimismo, el programa de Modelaje Acústico AgePet USB ofrece
como salidas algunos archivos de snapshot (”instantáneas”del campo de onda en propagación),
un sismograma, y un archivo de ondı́cula.
Un ejemplo de cómo luce un sismograma usando VerSeis se muestra en la figura (2.2).
Geomodelo, Modelador, VerSeis
P. J. Mora
Figura 2.1: Esquema General
13
Geomodelo, Modelador, VerSeis
P. J. Mora
14
Figura 2.2: Sismograma generado por simulación de un disparo en un medio homogéneo, 100
trazas, 120 muestras en tiempo.
Bibliografı́a
[1] Auld, B.A. Acoustic Fields and Waves in Solids. Vol.1, 2nd Ed. Krieger Publishing Company,
Malabar, Florida.
[2] Ben-Menahem, A., Singh, S.J.,Seismic Waves and Sources. Springer-Verlag.
[3] Caicedo, M. Temas de Propagación de Ondas. (Notas Personales). Departamento de Fı́sica,
USB.
[4] Landau and Lifschitz, Elasticity Theory, Academic Press.
[5] Mora, P. Simulación y Continuación de Campo en Problemas de Adquisición Sı́smica en el
Lago de Maracaibo. Tesis de Maestrı́a. Departamento de Fı́sica. Universidad Simón Bolı́var,
1999.
[6] Roger, D., Dieulesaint, E. Ondes Élastiques dans les Solides. Tome 1 (Propagation libre et
guidée). Masson, Paris, 1996.
15
Apéndice A
Códigos
cccccccccccccccccccccccccccccccccccccccccccccccccccccc
PROGRAM:geomod.f
cccccccccccccccccccccccccccccccccccccccccccccccccccccc
parameter(nzmax=500,nxmax=500,nlayermax=100,ncharmax=100)
integer counter_layers
integer counter_sectors
integer q,nz,nx,nlayers,reclenx
character*70 psfilename
character*2 dictionary(ncharmax)
character*7 rho_array(nlayermax)
character*7 vel_p_array(nlayermax)
c
Input model info
call system(’cls’)
write(*,*) ’PostScript file to convert?’
read(*,’(a70)’) psfilename
write(*,*) ’Number of pixels for nz’
read(*,*) nz
write(*,*) ’Number of pixels for nx’
read(*,*) nx
reclenx=(2*nx)+2
*
*
open(2,file=psfilename,
form=’formatted’,access=’direct’,
recl=1)
*
*
open(3,file=’gfile’,
form=’formatted’,access=’direct’,
recl=reclenx)
16
Geomodelo, Modelador, VerSeis
P. J. Mora
write(*,*) ’Thanks!’
write(*,*)
c
Converting postscript to simple txt array
write(*,*) ’Converting............................’
write(*,*)
call convertfile(2,3,nz,nx)
close(2)
close(3)
write(*,*) ’Ok’
write(*,*)
c
Processing and reporting preliminary results
write(*,*) ’Reading...............................’
write(*,*)
c
nlayers = counter_layers(nz,nx,dictionary)
nlayers = counter_sectors(nz,nx,dictionary)
write(*,*) ’Ok’
write(*,*)
write(*,*) ’Your model has’,nlayers,’layers’
write(*,*)
write(*,*) ’Hex codes found in file:’
write(*,*)
do q=1,nlayers
write(*,*) dictionary(q)
enddo
c
Input Vp,rho values and assign’em to a buffer array
call input_values(vel_p_array,rho_array,dictionary,nlayers)
c
External velocity file generation
write(*,*)
write(*,*) ’Building files.........................’
call build_vfile(nz,nx,vel_p_array,dictionary,nlayers)
call build_dfile(nz,nx,rho_array,dictionary,nlayers)
write(*,*)
write(*,*)
write(*,*)
write(*,*)
write(*,*)
write(*,*)
write(*,*)
’Done’
’Velocities are in file "outvel.out"’
’Densities are in file "outden.out"’
’Ok’
stop
END
c........................................................................
subroutine convertfile(u1,u2,nz,nx)
17
Geomodelo, Modelador, VerSeis
P. J. Mora
parameter(nxmax=500,ncharmax=100)
integer u1,u2,t
integer i,j,c,k,q
character*1 buffarray(nxmax)
character*1 buff
c
Rearranging characters
q=1
k=1
do j=1,nz
c=1
do i=1,(2*nx)+4
read(u1,’(A1)’,rec=k) buff
if((iachar(buff).eq.10).OR.(iachar(buff).eq.13)) then
c=c
else
buffarray(c)=buff
c=c+1
endif
k=k+1
enddo
write(u2,rec=q) (buffarray(t),t=1,2*nx),achar(32),achar(10)
q=q+1
enddo
c
Setting footnote to the file
do j=1,3
c=1
do i=1,(2*nx)
buffarray(c)=’X’
c=c+1
enddo
write(u2,rec=q) (buffarray(t),t=1,2*nx),achar(32),achar(10)
q=q+1
enddo
return
end
c............................................................................
integer function counter_sectors(nz,nx,dictio)
parameter (ncharmax=100)
,nz=82,nx=100)
character*2 dictio(ncharmax)
character*2 char_a,char_b
integer p,unit,i,c,q,fillflag,monitor
c
unit=33
*
*
c
open(unit,file=’gfile’,
form=’formatted’,access=’direct’,
recl=2)
Dictionary preset
do p=1,ncharmax
dictio(p)=’tt’
enddo
c
First locus fill
18
Geomodelo, Modelador, VerSeis
P. J. Mora
read(unit,’(A2)’,rec=1) char_a
dictio(1)=char_a
c
Recognition and fill-in cycle
i=2
c=0
q=2
do k=1, ((nx+1)*nz)
read(unit,’(A2)’,rec=q) char_b
*
c
c
c
c
c
if((iachar(char_b).eq.13).OR.((iachar(char_b).eq.32)))
then
if(iachar(char_b).eq.32) then
write(*,*) ’CR detected’
q=q+1
read(unit,’(A2)’,rec=q) char_b
endif
monitor=100
do p=1, i-1
write(*,*) ’dictio=’, dictio(p)
write(*,*) ’char_b=’, char_b
fillflag=index(dictio(p),char_b)
monitor=monitor-fillflag
write(*,*) ’fillflag=’, fillflag
enddo
if (monitor.eq.100) then
dictio(i)=char_b
i=i+1
endif
q=q+1
enddo
counter_sectors=i-2
c
Verifying dictionary contents c
write(*,*)
write(*,*) ’Dictionary contents:’
write(*,*)
do p=1, i-1
write(*,*) dictio(p)
enddo
close(unit)
return
end
c............................................................................
integer function counter_layers(nz,nx,chararray)
19
Geomodelo, Modelador, VerSeis
P. J. Mora
parameter(ncharmax=100)
integer i,c,q,k,crflag,unit
character*2 char_a,char_b,char_c,char_cc
character*2 chararray(ncharmax)
unit=4
*
*
c
c
open(unit,file=’gfile’,
form=’unformatted’,access=’direct’,
recl=2)
i=1
c=0
q=2
do k=1,((nx+1)*nz)
crflag=0
write(*,*) ’k=’,k
read(unit,rec=q-1) char_a
read(unit,rec=q) char_b
if(iachar(char_b).eq.32) then
write(*,*) ’CR detected’
crflag=1
read(unit,rec=q+1) char_c
read(unit,rec=q-nx) char_cc
if(char_c.eq.char_cc) then
c=c
else
c=c+1
chararray(i)=char_cc
i=i+1
endif
else
q=q+1
endif
if(crflag.eq.1) then
q=q+2
endif
enddo
counter_layers=c
close(unit)
return
end
c............................................................................
subroutine input_values(vel_p,rho,chars,arraysize)
integer arraysize,m
character*7 vel_p(arraysize)
character*7 rho(arraysize)
character*2 chars(arraysize)
c
Reading velocities
write(*,*) ’Input velocities (m/s)’
do m=1,arraysize
write(*,*) ’vel_p(’,m,’)=’
read(*,’(a7)’) vel_p(m)
enddo
20
Geomodelo, Modelador, VerSeis
c
P. J. Mora
Reading densities
write(*,*) ’Input densities (gr/cm3)’
do m=1,arraysize
write(*,*) ’rho(’,m,’)=’
read(*,’(a7)’) rho(m)
enddo
c
Verifying values
write(*,*) ’Verifying values..............’
do m=1,arraysize
write(*,*) ’vel_p(’,m,’)=’
write(*,’(a7)’) vel_p(m)
enddo
do m=1,arraysize
write(*,*) ’rho(’,m,’)=’
write(*,’(a7)’) rho(m)
enddo
do m=1,arraysize
write(*,*) ’character(’,m,’)=’
write(*,*) chars(m)
enddo
return
end
c............................................................................
subroutine build_vfile(nz,nx,vel_p,chars,arraysize)
integer arraysize,q,p,i,j,k,unit
character*7 vel_p(arraysize)
character*2 chars(arraysize)
character*2 buffy
c
Opening gfile
unit=15
*
*
c
open(unit,file=’gfile’,
form=’formatted’,access=’direct’,
recl=2)
Creating output velocity file
*
*
open(16,file=’outvel.out’,
form=’formatted’,access=’direct’,
recl=18)
*
p=1
q=1
do i=1,nz
do j=1,nx+1
read(unit,’(A2)’,rec=q) buffy
do k=1,arraysize
if(buffy.eq.chars(k)) then
write(16,’(I4,A1,I4,A1,A7,A1)’,rec=p)
i,achar(9),j,achar(9),vel_p(k),achar(10)
21
Geomodelo, Modelador, VerSeis
P. J. Mora
endif
enddo
q=q+1
if(iachar(buffy).eq.32) then
p=p
else
p=p+1
endif
enddo
enddo
close(unit)
close(16)
return
end
c............................................................................
subroutine build_dfile(nz,nx,rho,chars,arraysize)
integer arraysize,q,p,i,j,k,unit
character*7 rho(arraysize)
character*2 chars(arraysize)
character*2 buffy
c
Opening gfile
unit=17
*
*
c
open(unit,file=’gfile’,
form=’formatted’,access=’direct’,
recl=2)
Creating output velocity file
*
*
*
open(18,file=’outden.out’,
form=’formatted’,access=’direct’,
recl=18)
p=1
q=1
do i=1,nz
do j=1,nx+1
read(unit,’(A2)’,rec=q) buffy
do k=1,arraysize
if(buffy.eq.chars(k)) then
write(18,’(I4,A1,I4,A1,A7,A1)’,rec=p)
i,achar(9),j,achar(9),rho(k),achar(10)
endif
enddo
q=q+1
if(iachar(buffy).eq.32) then
p=p
else
p=p+1
endif
enddo
enddo
close(unit)
22
Geomodelo, Modelador, VerSeis
close(18)
return
end
P. J. Mora
23
Geomodelo, Modelador, VerSeis
cccccccccccccccccccccccccccccccccccccccccccccccccccccc
PROGRAM:modelador.f
cccccccccccccccccccccccccccccccccccccccccccccccccccccc
real dx,dy
integer nx,ny,i,j,h
parameter (nz=100,nx=100,dz=0.1,dx=0.1)
real vel(nz,nx)
call system(’cls’)
write(*,*) ’PROGRAM: themodeler’
write(*,*)
write(*,*) ’Message: model dimensions are momentarily fixed’
write(*,*) ’nz=100,nx=100’
write(*,*)
open(7,file=’outvel.out’)
do h=1,nz*nx
read(7,*)
i,j,vel(j,i)
enddo
c
*** output format 1 ***
*
*
open(11,file=’Kmodel_bin.in’,
form=’unformatted’,access=’direct’,
recl=nz)
call write_lot(vel,nz,nx,0)
close(unit=11)
c
*** output format 2 ***
open(22,file =’Kmodel_dbl.out’,status=’NEW’)
do j=1,nx
do i=1,nz
write (22,’(2x,F20.5,2x,F20.5,2x,F20.5)’) j*dx,i*dz,vel(i,j)
enddo
enddo
close(7)
close(8)
close(11)
write(*,*) ’Done.’
stop
end
subroutine write_lot(a,nz,nx,ind)
real a(nz,nx)
do i=1,nx
write(11,rec=i+ind*nx)(a(j,i),j=1,nz)
enddo
return
end
P. J. Mora
24
Geomodelo, Modelador, VerSeis
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Verseis.m
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
prompt={’Enter the number of traces:’,’Enter the number of
timesamples:’};
dlgTitle=’Input’;
lineNo=1;
default={’100’,’150’};
ans=inputdlg(prompt,dlgTitle,lineNo,default);
L=str2num(ans{1});
N=str2num(ans{2});
fid1=fopen(’seis.out’,’r’,’ieee-le’); f=fread(fid1, [L,N],
’float32’);
g=7000.0;
figure(2);hold on;
f=transpose(f);
for i=1:L;
a=N*(i-1)+1;
b=i*N;
c=f(a:b);
plot(g*c+i);
end;
fclose(fid1);
P. J. Mora
25
Descargar