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