Beruflich Dokumente
Kultur Dokumente
1. Introduccin
La simulacin de yacimientos es una herramienta muy til a la hora de modelar el
comportamiento de un yacimiento durante su vida productiva y sobre todo a futuro,
tambin es muy til a la hora de estimar reservas y desarrollar un esquema de
explotacin; de tal manera que, se trata de que los resultados sean lo ms cercanos a la
realidad posible.
Se tiene un yacimiento discretizado en once bloques bajo un esquema de flujo
monofsico en 1D, el modelo incluye tres pozos (1, 2 y 3) ubicados en los bloques 1, 6
y 11 respectivamente, de los cuales el 1 y 3 son inyectores, y el 2 es productor.
Para la solucin del modelo numrico se hace uso del mtodo indirecto de Gauss-Seidel,
el cual consiste en un modelo iterativo de ensayo y error hasta que la solucin converja
a un error menor a una tolerancia pre establecida.
Nmero de
bloques en
direccin X
(i)
Espesor de
los bloques
en direccin
x (ft)
Ancho del
yacimiento
y (ft)
Espesor del
yacimiento
(ft)
Profundidad
de los
bloques (ft)
Permeabilid
ad en
direccin x
(md)
Porosidad
Compresibil
idad de
poro (1/psi)
Presin
inicial (psia)
10
11
309.5
1
325.8
0
342.9
5
361.0
0
380.0
0
400.0
0
380.0
0
361.0
0
342.9
5
325.8
0
309.5
1
100
100
100
100
100
100
100
100
100
100
100
90
90
90
90
90
90
90
90
90
90
90
3930.
00
3887.
40
3851.
67
3824.
15
3806.
35
3800.
00
3806.
35
3824.
15
3851.
67
3887.
40
3930.
00
15.47
6
16.29
0
17.14
8
18.05
0
19.00
0
20.00
0
19.00
0
18.05
0
17.14
8
16.29
0
15.47
6
0.153
0.146
0.139
0.132
0.126
0.120
0.126
0.132
0.139
0.146
0.153
2.1E-6
2.1E-6
2.1E-6
2.1E-6
2.1E-6
2.1E-6
2.1E-6
2.1E-6
2.1E-6
2.1E-6
3200
3200
3200
3200
3200
3200
3200
3200
3200
3200
2.1E-6
3200
Coordenadas (i)
Tasa de inyeccin
(STB/d)
Presin de fondo
(psi)
1
400
11
400
FVF (RB/SCF)
1.17757
1.17256
1.16495
1.15813
1.15196
1.14636
1.14122
1.13650
52.2912
Viscosidad (cP)
0.93086
0.97237
1.04213
1.11237
1.18283
1.25331
1.32364
1.39369
3. Modelo matemtico
Desarrolla la ecuacin de difusividad en un medio poroso, en este caso se plantea un
modelo numrico para un yacimiento de fluido compresible con flujo en una dimensin.
( )
K
P =
+ q^ (3. 0)
Ko A
=A
+ A(q v )CN
x Bo x
t Bo
(q v )CN =
q^
( o)CN
( )
(3. 0)
(3. 0)
( x )=( px Zx )
(3. 0)
Donde:
Ko = Permeabilidad al petrleo (mD)
= viscosidad (cP)
B = factor volumtrico de la formacin del petrleo (RB/SCF)
A = rea (ft2)
= Porosidad
qv = Flujo volumtrico de petrleo a condiciones estndar de entrada o salida por fuentes
o sumideros (MMscf/d)
o = Densidad del petrleo a condiciones estndar
3.1.
Propiedades PVT
Condiciones de lmite
Dado que la malla est limitada en sus extremos por dos pozos inyectores, entonces se
procede a aplicar las condiciones de frontera tipo Newman, se suponen una tasa de
inyeccin de 400 bbl/dia para cada uno de los pozos inyectores, de tal manera que:
Para el bloque 1, frontera Este
q x=0=q cero=400
q cero=
bbl
dia
kA P
x
( )
x=0
(3. 0)
(3. 0)
P1P0=
q cero
(X 1X 0 )
KA
(3. 0)
ql =
kA P
x
P12P11=
( )
bbl
dia
(3. 0)
(3. 0)
x=l
ql
( X X 11 )
KA 12
(3. 0)
Condicin inicial
Pi = 3200 psia, i=1,11
y en t=0
4. Modelo numrico
Para la solucin de la ecuacin de difusividad planteada anteriormente se hace uso de
las diferencias finitas de tal manera que pueda aproximar la solucin de los
diferenciales, se procede a expandir la ecuacin (3.2)
KA
KA
(
(
)
(
(
)
)
B
x
B
x)
KA
x ( B x )
x
o i+1 /2
o i1/ 2
(4. 0)
i1/ 2
i
= i+1
=
x i+1 /2
i+1 /2
( )
4.1.
i+1 /2
( Pi +1Pi ) i + 1 ( Z i+1Z i)
2
(4. 0)
x i + x i+1
2
Transmisibilidad
Este concepto se aplica para representar el trmino que multiplica el diferencial de
presiones.
T i +1/ 2=C
2 K i Ai K i+1 A i+1
1
(4. 0)
T i1 /2=C
2 K i A i K i1 A i1
1
K i1 A i1 x i + K i A i xi 1 i1/ 2 Bi1/ 2
(4. 0)
(4. 0)
1
T i1 /2=T n+
i1/ 2
(4. 0)
1
i+ y
2
Bi
a una
presin promedio.
P
i+1 /2
Vpi Pi +Vpi +1 Pi +1
=
Vpi+Vp i+1
(4. 0)
n+1
n+1
n +1
T in+1
+1/ 2 i+1 T 1 +T 1 +
i+
Vb
t B
'
( ))
i
n
ni +1+T n+11 n+1
i1 =Pi
i
Vb '
+(Qvi )CN
t B i
( )
(4. 0)
4.2.
(4. 0)
5. Mtodo de solucin
La solucin del modelo numrico se har mediante la aplicacin del Mtodo GaussSeidel el cual es un mtodo iterativo.
La ecuacin 4.9 puede ser escrita como:
n+1
ni +1=
n +1
F iE i i +1 W i i1
(5. 0)
Ci
Y para resolver la ecuacin 5.1 por este mtodo, se debe reescribir la ecuacin de la
siguiente forma:
(k+1)
n+1
i
(k)
F iEi
(k)
n+1
i+1
(k)
i
(k)
i
(k+1)
n+1
i1
(5.0)
Los superndices (k) y (k+1) indican iteraciones. A continuacin se muestran los pasos
resumidos del procedimiento a seguir para aplicar esta solucin:
1. Para la iteracin cero (k=0), se asume una distribucin de presiones al tiempo
tn+1 igual a la distribucin de presiones al tiempo tn (es decir
(0)
n+1
i+1
=P ni+1 ).
Igualmente, para la iteracin cero, se asumen las propiedades PVT al tiempo tn+1
iguales a las propiedades PVT al tiempo tn.
2. Se evalan los coeficientes no lineales en la ecuacin (5.2)
(k +1)
n +1
i+1
3. Se calcula
| |
( k+1 )
(k)
P in+1 Pn+1
i
P
(k +1)
n +1
i
< 1
|MB1|< 2
Produccion =
neta acumulada
][
Contenido inicial
Contenido actual
de fluido en el
de fluido en el
yacimiento
yacimiento
t=t n+1t n
(5.0)
1 dV
V dP
(5.0)
(5. 0)
(5. 0)
ser:
P=P in+1Pni
(5.0)
Para cada paso de tiempo, entre un tiempo n y un tiempo n+1 se debe cumplir:
EBM debe ser tan
unidad como la
previamente definida
6. Diagrama de flujo
cercano a la
tolerancia
lo permita.
INICIO
Pn
SI
< ?
Hacer
= Pn
|balance de
materiales1|
<tolerancia
BM
7. Anexos
NO
PROGRAM oil_gauss_seidel
IMPLICIT NONE
CHARACTER :: TEXT
::
REAL,DIMENSION(:),ALLOCATABLE
::
PN,PN1,VPN,VPN1,PN1PROM_1,PN1PROM_2,PHIN,PHIN1,BO_1,BO_2,MU_2,MU_1,MUN1,MUN,BON
,BON1
REAL,DIMENSION(:),ALLOCATABLE
::
TRANS_1,TRANS_2,ABloqueIZQ,ABloqueDER,E,W,C,F,GAMMA_1,GAMMA_2,DZ_1,DZ_2,PCAL,QS
C
INTEGER,DIMENSION(:),ALLOCATABLE :: UW
DOUBLE PRECISION :: CPORO,TOL
!INFORMACIN DE LA MALLA
READ(10,*) TEXT,NB
ALLOCATE (DX(NB),DEEP_B(NB),KX(NB),PHI_0(NB),VB(NB))
ALLOCATE
(VPN(0:NB+1),VPN1(0:NB+1),PN1PROM_1(NB),PN1PROM_2(NB),PHIN(NB),PHIN1(NB),BO_1(NB),B
O_2(NB),MU_2(NB),MU_1(NB))
ALLOCATE
(BON(NB),MUN(NB),MUN1(NB),BON1(NB),DERIVADA(NB),GAMMA_1(NB),GAMMA_2(NB),DZ_1(NB),
DZ_2(NB),PCAL(NB))
ALLOCATE
(TRANS_1(NB),TRANS_2(NB),ABloqueIZQ(NB),ABloqueDER(NB),E(NB),W(NB),C(NB),F(NB),QSC(N
B))
READ(10,*) TEXT,(DX(J),J=1,NB)
READ(10,*) TEXT,ANCHO
READ(10,*) TEXT,ESPESOR
READ(10,*) TEXT,(DEEP_B(J),J=1,NB)
READ(10,*) TEXT,(KX(J),J=1,NB)
READ(10,*) TEXT,(PHI_0(J),J=1,NB)
READ(10,*) TEXT,CPORO
READ(10,*) TEXT,P_IN
DO J=1,NB
VB(J)=DX(J)*ANCHO*ESPESOR
END DO
READ(10,*);READ(10,*);READ(10,*);READ(10,*);READ(10,*);
!PARAMETROS DE LA SIMULACION
READ(10,*) TEXT,DELTA_T
READ(10,*) TEXT,TOL
READ(10,*);READ(10,*);READ(10,*);READ(10,*);READ(10,*);
READ(10,*) TEXT,acum1
READ(10,*);READ(10,*);
ALLOCATE (P_DATOS(acum1),BO(acum1),MU_INTER(acum1))
DO J=1,acum1
READ(10,*) P_DATOS(J),BO(J),MU_INTER(J)
END DO
!CONDICIONES INICIALES
ALLOCATE (PN(0:NB+1),PN1(0:NB+1))
PN(:)=P_IN
PN1(:)=P_IN-2
PHIN(:)=PHI_0
!prueba
!WRITE(*,*) PN,PN1,PHI_0
ERROR=1
EBM=1
DT=0
DO WHILE (DT<=120)
DT=DT+DELTA_T
DO WHILE (EBM>TOL)
acum2=0
DO WHILE (ERROR>TOL)
acum2=acum2+1
!WRITE(*,*) SIZE(VPN1),SIZE(PN1)
DO J=1,NB
FAN_1=J-1
FAN_2=J+1
IF (FAN_1==0) FAN_1=1
IF (FAN_2==NB+1) FAN_2 = NB
PHIN1(J)=PHIN(J)*(1+CPORO*(PN1(J)-PN(J)))
VPN1(J)=VB(J)*PHIN1(J)
VPN(J)=VB(J)*PHIN(J)
PN1PROM_1(J)=((VPN1(J)*PN1(J))+(VPN1(FAN_2)*PN1(FAN_2)))/(VPN1(J)+VPN1(FAN_2))
PN1PROM_2(J)=((VPN1(J)*PN1(J))+(VPN1(FAN_1)*PN1(FAN_1)))/(VPN1(J)+VPN1(FAN_1))
END DO
END IF
DO J=1,NB
DO I=1,acum1
IF (PN1PROM_1(J)==P_DATOS(I)) THEN
BO_1(J)=BO(I)
MU_1(J)=MU_INTER(I)
ELSE IF (PN1PROM_1(J)>P_DATOS(I) .AND. PN1PROM_1(J)<P_DATOS(I+1)) THEN
P_INTER=ABS(PN1PROM_1(J)-P_DATOS(I+1))
P_INTER2=ABS(PN1PROM_1(J)-P_DATOS(I))
PENDIENTEB=(BO(I+1)-BO(I))/(P_DATOS(I+1)-P_DATOS(I))
PENDIENTE_MU=(MU_INTER(I+1)-MU_INTER(I))/(P_DATOS(I+1)P_DATOS(I))
IF (P_INTER<P_INTER2) THEN
BO_1(J)=BO(I+1)-(PENDIENTEB*(P_DATOS(I+1)-PN1PROM_1(J)))
MU_1(J)=MU_INTER(I+1)-(PENDIENTE_MU*(P_DATOS(I+1)PN1PROM_1(J)))
ELSE IF (P_INTER>=P_INTER2) THEN
BO_1(J)=BO(I)+(PENDIENTEB*(PN1PROM_1(J)-P_DATOS(I)))
MU_1(J)=MU_INTER(I)+(PENDIENTE_MU*(PN1PROM_1(J)P_DATOS(I)))
END IF
END IF
END DO
END DO
MU_2(J)=PENDIENTE_MU*(PN1PROM_2(J)-P_DATOS(1))+MU_INTER(1)
ELSE IF (PN1PROM_2(J)>P_DATOS(acum1)) THEN
PENDIENTEB=(BO(acum1)-BO(acum1-1))/(P_DATOS(acum1)-P_DATOS(acum1-1))
BO_2(J)=PENDIENTEB*(PN1PROM_2(J)-P_DATOS(acum1))+BO(acum1)
PENDIENTE_MU=(MU_INTER(acum1)-MU_INTER(acum1-1))/(P_DATOS(acum1)P_DATOS(acum1-1))
MU_2(J)=PENDIENTE_MU*(PN1PROM_2(J)-P_DATOS(acum1))+MU_INTER(acum1)
END IF
DO J=1,NB
DO I=1,acum1
IF (PN1PROM_2(J)==P_DATOS(I)) THEN
BO_2(J)=BO(I)
MU_2(J)=MU_INTER(I)
ELSE IF (PN1PROM_2(J)>P_DATOS(I) .AND. PN1PROM_2(J)<P_DATOS(I+1)) THEN
P_INTER=ABS(PN1PROM_2(J)-P_DATOS(I+1))
P_INTER2=ABS(PN1PROM_2(J)-P_DATOS(I))
PENDIENTEB=(BO(I+1)-BO(I))/(P_DATOS(I+1)-P_DATOS(I))
PENDIENTE_MU=(MU_INTER(I+1)-MU_INTER(I))/(P_DATOS(I+1)P_DATOS(I))
IF (P_INTER<P_INTER2) THEN
BO_2(J)=BO(I+1)-(PENDIENTEB*(P_DATOS(I+1)-PN1PROM_2(J)))
MU_2(J)=MU_INTER(I+1)-(PENDIENTE_MU*(P_DATOS(I+1)PN1PROM_2(J)))
ELSE IF (P_INTER>=P_INTER2) THEN
BO_2(J)=BO(I)+(PENDIENTEB*(PN1PROM_2(J)-P_DATOS(I)))
MU_2(J)=MU_INTER(I)+(PENDIENTE_MU*(PN1PROM_2(J)P_DATOS(I)))
END IF
END IF
END DO
END DO
IF (PN1(J)<P_DATOS(1)) THEN
PENDIENTEB=(BO(2)-BO(1))/(P_DATOS(2)-P_DATOS(1))
BON1(J)=PENDIENTEB*(PN1(J)-P_DATOS(1))+BO(1)
PENDIENTE_MU=(MU_INTER(2)-MU_INTER(1))/(P_DATOS(2)-P_DATOS(1))
MUN1(J)=PENDIENTE_MU*(PN1(J)-P_DATOS(1))+MU_INTER(1)
ELSE IF (PN1(J)>P_DATOS(acum1)) THEN
PENDIENTEB=(BO(acum1)-BO(acum1-1))/(P_DATOS(acum1)-P_DATOS(acum1-1))
BON1(J)=PENDIENTEB*(PN1(J)-P_DATOS(acum1))+BO(acum1)
PENDIENTE_MU=(MU_INTER(acum1)-MU_INTER(acum1-1))/(P_DATOS(acum1)P_DATOS(acum1-1))
MUN1(J)=PENDIENTE_MU*(PN1(J)-P_DATOS(acum1))+MU_INTER(acum1)
END IF
DO J=1,NB
DO I=1,acum1
IF (PN1(J)==P_DATOS(I)) THEN
BON1(J)=BO(I)
MUN1(J)=MU_INTER(I)
ELSE IF (PN1(J)>P_DATOS(I) .AND. PN1(J)<P_DATOS(I+1)) THEN
P_INTER=ABS(PN1(J)-P_DATOS(I+1))
P_INTER2=ABS(PN1(J)-P_DATOS(I))
PENDIENTEB=(BO(I+1)-BO(I))/(P_DATOS(I+1)-P_DATOS(I))
PENDIENTE_MU=(MU_INTER(I+1)-MU_INTER(I))/(P_DATOS(I+1)P_DATOS(I))
IF (P_INTER<P_INTER2) THEN
BON1(J)=BO(I+1)-(PENDIENTEB*(P_DATOS(I+1)-PN1(J)))
MUN1(J)=MU_INTER(I+1)-(PENDIENTE_MU*(P_DATOS(I+1)PN1(J)))
ELSE IF (P_INTER>=P_INTER2) THEN
BON1(J)=BO(I)+(PENDIENTEB*(PN1(J)-P_DATOS(I)))
MUN1(J)=MU_INTER(I)+(PENDIENTE_MU*(PN1(J)-P_DATOS(I)))
END IF
END IF
END DO
END DO
!INTERPOLAMOS BO Y MU PARA LA PN
IF (PN(J)<P_DATOS(1)) THEN
PENDIENTEB=(BO(2)-BO(1))/(P_DATOS(2)-P_DATOS(1))
BON(J)=PENDIENTEB*(PN(J)-P_DATOS(1))+BO(1)
PENDIENTE_MU=(MU_INTER(2)-MU_INTER(1))/(P_DATOS(2)-P_DATOS(1))
MUN(J)=PENDIENTE_MU*(PN(J)-P_DATOS(1))+MU_INTER(1)
ELSE IF (PN(J)>P_DATOS(acum1)) THEN
PENDIENTEB=(BO(acum1)-BO(acum1-1))/(P_DATOS(acum1)-P_DATOS(acum1-1))
BON(J)=PENDIENTEB*(PN(J)-P_DATOS(acum1))+BO(acum1)
PENDIENTE_MU=(MU_INTER(acum1)-MU_INTER(acum1-1))/(P_DATOS(acum1)P_DATOS(acum1-1))
MUN(J)=PENDIENTE_MU*(PN(J)-P_DATOS(acum1))+MU_INTER(acum1)
END IF
DO J=1,NB
DO I=1,acum1
IF (PN(J)==P_DATOS(I)) THEN
BON(J)=BO(I)
MUN(J)=MU_INTER(I)
ELSE IF (PN(J)>P_DATOS(I) .AND. PN(J)<P_DATOS(I+1)) THEN
P_INTER=ABS(PN(J)-P_DATOS(I+1))
P_INTER2=ABS(PN(J)-P_DATOS(I))
PENDIENTEB=(BO(I+1)-BO(I))/(P_DATOS(I+1)-P_DATOS(I))
PENDIENTE_MU=(MU_INTER(I+1)-MU_INTER(I))/(P_DATOS(I+1)P_DATOS(I))
IF (P_INTER<P_INTER2) THEN
BON(J)=BO(I+1)-(PENDIENTEB*(P_DATOS(I+1)-PN(J)))
MUN(J)=MU_INTER(I+1)-(PENDIENTE_MU*(P_DATOS(I+1)-PN(J)))
ELSE IF (P_INTER>=P_INTER2) THEN
BON(J)=BO(I)+(PENDIENTEB*(PN(J)-P_DATOS(I)))
MUN(J)=MU_INTER(I)+(PENDIENTE_MU*(PN(J)-P_DATOS(I)))
END IF
END IF
END DO
END DO
!TRANSMISIBILIDADES
TRANS_1(:)=0
TRANS_2(:)=0
ABloque=ESPESOR*ANCHO
DO J=1,NB-1
TRANS_1(J)=0.001127*(2/(((DX(J))/(ABloque*KX(J)))+((DX(J+1))/(ABloque*KX(J+1)))))*(1/
(MU_1(J)*BO_1(J)))
DZ_1(J)=DEEP_B(J+1)-DEEP_B(J)
END DO
DO J=2,NB
TRANS_2(J)=0.001127*(2/(((DX(J))/(ABloque*KX(J)))+((DX(J-1))/(ABloque*KX(J-1)))))*(1/
(MU_2(J)*BO_2(J)))
DZ_2(J)=DEEP_B(J-1)-DEEP_B(J)
END DO
END DO
!CREACIN DE ESTNCILES
DO J=1,NB
E(J)=TRANS_1(J)
W(J)=TRANS_2(J)
DERIVADA(J)=(1.0/5.615)*((PHIN1(J)/BON1(J))-(PHIN(J)/BON(J)))/(PN1(J)-PN(J))
C(J)=-E(J)-W(J)-(VB(J)*DERIVADA(J)/DT)
GAMMA_1(J)=0.0002158*RHO/BO_1(J)
GAMMA_2(J)=0.0002158*RHO/BO_2(J)
F(J)=(E(J)*GAMMA_1(J)*DZ_1(J))+(W(J)*GAMMA_2(J)*DZ_2(J))-(VB(J)*DERIVADA(J)*PN(J)/DT)
+QSC(J)
!PRESIN N+1 CALCULADA MEDIANTE GAUSS-SEIDEL
PCAL(J)=((-W(J)*PN1(J-1))-(E(J)*PN1(J+1))+F(J))/C(J)
END DO
IF (acum2==1) THEN
PRINT *, F
STOP
END IF
DO J=1,NB
PN1(J)=PCAL(J)
END DO
PN1(0)=PN1(1)
PN1(NB+1)=PN1(NB)
DO J=1,NB
PHIN1(J)=PHIN(J)*(1+CPORO*(PN1(J)-PN(J)))
END DO
P_INTER=ABS(PN1(J)-P_DATOS(I+1))
P_INTER2=ABS(PN1(J)-P_DATOS(I))
PENDIENTEB=(BO(I+1)-BO(I))/(P_DATOS(I+1)-P_DATOS(I))
IF (P_INTER<P_INTER2) THEN
BON1(J)=BO(I+1)-(PENDIENTEB*(P_DATOS(I+1)-PN1(J)))
ELSE IF (P_INTER>=P_INTER2) THEN
BON1(J)=BO(I)+(PENDIENTEB*(PN1(J)-P_DATOS(I)))
END IF
END IF
END DO
END DO
IF (EBM>TOL) THEN
print *, 'INGRESE NUEVO DELTA T'
read *, DELTA_T
END IF
IF (DT==15) THEN
open(20,file='Resultados1.txt',STATUS='UNKNOWN')
DO J=1,NB
write(20,*)J,PN1(J)
END DO
CLOSE (20)
END IF
IF (DT==30) THEN
open(20,file='Resultados2.txt',STATUS='UNKNOWN')
DO J=1,NB
write(20,*)J,PN1(J)
END DO
CLOSE (20)
END IF
IF (DT==45) THEN
open(20,file='Resultados3.txt',STATUS='UNKNOWN')
DO J=1,NB
write(20,*)J,PN1(J)
END DO
CLOSE (20)
END IF
IF (DT==60) THEN
open(20,file='Resultados4.txt',STATUS='UNKNOWN')
DO J=1,NB
write(20,*)J,PN1(J)
END DO
CLOSE (20)
END IF
IF (DT==75) THEN
open(20,file='Resultados5.txt',STATUS='UNKNOWN')
DO J=1,NB
write(20,*)J,PN1(J)
END DO
CLOSE (20)
END IF
IF (DT==90) THEN
open(20,file='Resultados6.txt',STATUS='UNKNOWN')
DO J=1,NB
write(20,*)J,PN1(J)
END DO
CLOSE (20)
END IF
IF (DT==105) THEN
open(20,file='Resultados7.txt',STATUS='UNKNOWN')
DO J=1,NB
write(20,*)J,PN1(J)
END DO
CLOSE (20)
END IF
IF (DT==120) THEN
open(20,file='Resultados8.txt',STATUS='UNKNOWN')
DO J=1,NB
write(20,*)J,PN1(J)
END DO
CLOSE (20)
END IF
DO,J=0,NB+1
PN(J)=PN1(J)
PN1(J)=PN(J)-2
END DO
END DO !WHILE TIEMPO
END PROGRAM