Sie sind auf Seite 1von 24

Simulacin de flujo de Petrleo 1D en un medio poroso

por el mtodo de Gauss-Seidel


Milena Arellano a, Keren Rincn b & Aura Legarda c.
a

Ingeniera de Petrleos, Facultad de Minas, Universidad Nacional de Colombia, Medelln, Colombia.


amarellanoc@unal.edu.co

Ingeniera de Petrleos, Facultad de Minas, Universidad Nacional de Colombia, Medelln, Colombia.


kyrinconna@unal.edu.co

Ingeniera de Petrleos, Facultad de Minas, Universidad Nacional de Colombia, Medelln, Colombia.


amlegardad@unal.edu.co

Resumen: La simulacin de flujo de fluidos a travs de un medio poroso ha sido un


reto a nivel de la ingeniera de yacimientos, esto debido a la diversidad y
heterogeneidad de las propiedades de los yacimientos, adems de que muchas veces no
se cuenta con la informacin suficiente para ingresar a la base de datos del simulador.
En este trabajo se modela un yacimiento de petrleo en una dimensin, discretizado en
11 bloques con tres pozos, de los cuales 2 son inyectores y uno es productor. Para el
modelamiento de este caso se hace uso de las diferencias finitas para aproximar la
solucin de la ecuacin de difusividad, haciendo uso del esquema de aproximacin
implcito, el sistema de malla usado es nodo centrado o nodo distribuido, las
condiciones de frontera aplicadas son de tipo Newman y, finalmente la solucin del
modelo numrico se hace mediante el mtodo indirecto de Gauss-Seidel.
Keywords: Gauss-Seidel, Ecuacin de difusividad, diferencias finitas, flujo de fluido
compresible en 1D. Transmisibilidad, Stencils

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.

Para conocer la distribucin de presiones en un tiempo futuro se hace uso de un


esquema de aproximacin implcito, se desarrollan las transmisibilidades para una malla
de nodo centrado y se aplica el concepto de stencils, los cuales forman la matriz de
coeficientes a desarrollar.
2. Modelo fsico
A continuacin se muestra la informacin suministrada respecto al modelo fsico:
2.1 Condiciones:

Fluido compresible (petrleo)


Flujo lineal 1D
1 pozo productor
2 pozos inyectores
La malla estar discretizada en 11 bloques
2.2 Informacin de la malla.
A continuacin se muestra el nmero de bloques y el tamao de los mismos.

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

Tabla 1 Informacin de la malla


2.3 Informacin de los pozos
Nmero de pozo

Coordenadas (i)
Tasa de inyeccin
(STB/d)
Presin de fondo
(psi)

1
400

11
400

Tabla 2 Informacin de los pozos

2.4 Informacin del fluido


Densidad (lb/ft3)
Presin (psia)
1200.100
1500.000
2000.000
2500.000
3000.000
3500.000
4000.000
4500.000

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

Tabla 3 Informacin del fluido

2.5 Malla y distribucin de los bloques

Ilustracin 1 Distribucin de los pozos en la malla

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)

Para el caso de un yacimiento de petrleo (flujo monofsico) en una dimensin se tiene:

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

Dado que en la tabla 3 se da la informacin de las propiedades del fluido, no es


necesario recurrir a las correlaciones para calcular dichos datos, los cuales son
necesarios para la solucin de la ecuacin de difusividad. Por consiguiente se recurre a
la interpolacin de los valores para encontrar las respectivas propiedades a diferentes
presiones por el mtodo de Lagrange (Ver Anexos).
3.2.

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)

Para el bloque 11, frontera Oeste


q x=l=q l=400

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

K i+1 A i+1 x i+ K i Ai x i+1 i+1 /2 Bi

(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)

C= 1.127*10-3 si unidades de campo


Evaluando la viscosidad y el factor volumtrico del petrleo cuando *=n+1 entonces se
tiene que:
n+1

T i +1/ 2=T i+1/ 2

(4. 0)

1
T i1 /2=T n+
i1/ 2

(4. 0)

Despus de definir el nivel del tiempo n+1 se estiman los valores de

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)

Remplazando las transmisibilidades en la expansin de la ecuacin de difusividad, y


evaluando tanto la presin como la transmisibilidad bajo un esquema de aproximacin
implcita se tiene:

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.

Aplicando el concepto de Stencils

El concepto de stencils permite expresar el modelo numrico de manera generalizada,


de tal manera que se simplifique la matriz a solucionar, de tal manera que se tiene:
1
n+1
+1
W i n+
+ Ei ni +1
=Fi
i1 +C i i

(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

de la ecuacin (5.2), para cada uno de los bloques de la

malla. De esta forma se obtiene estimativos para distribucin de presiones en el


sitema al tiempo tn+1.
4. Con los valores de presin obtenidos en el paso anterior, se estiman las
propiedades PVT (en este caso ya se conocen).
5. Se repiten los pasos 2, 3 y 4 hasta que las presiones y las propiedades PVT de
cada bloque, en dos iteraciones consecutivas sean iguales dentro de cierto grado
de tolerancia.

| |
( k+1 )

(k)

P in+1 Pn+1
i
P

(k +1)
n +1
i

< 1

|MB1|< 2

5.1 Criterio de Balance de Materiales


Con el balance de materiales se puede validar la solucin que se est obteniendo del
sistema de ecuaciones para un tiempo dado. Como las ecuaciones de flujo parten del
principio de conservacin de masa, as mismo, la aproximacin numrica de ellas
tambin debe satisfacer dicho principio:

Produccion =
neta acumulada

][

Contenido inicial
Contenido actual

de fluido en el
de fluido en el
yacimiento
yacimiento

El incremento de tiempo de tn a tn+1 est dado por

t=t n+1t n

(5.0)

La definicin de compresibilidad est dada por:


c=

1 dV
V dP

(5.0)

El volumen de fluido removido del bloque i durante este intervalo ser:


V =qi t

(5. 0)

El volumen inicial de fluido en el bloque i est dado por:


V =V bi i

(5. 0)

La cada de presin requerida en el bloque i para producir un volumen de fluido


durante el intervalo de tiempo t

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

Lecturas de datos (k,, x, P,


C...)
Calculos preliminares (Vb, Gi, A y Gw)
asignacion de
condiciones iniciales Pn

Calcular propiedades a Pn (Bn, n,


n, n)
Hacer PK =

Pn

Calcular propiedades B k, k, k, k, i+1/2, Bi+1/2


Calcular transmisibilidades
Armar Stencils
Solucionar A*P=F . Metodo de
solucion Gauss-Seidel

SI

< ?

Hacer

= Pn

|balance de
materiales1|
<tolerancia
BM

IMPRIMIR vector P cada 15


dias durante 120 dias
Ilustracin 2 Diagrama de flujo para el modelo computacional.

7. Anexos

NO

PROGRAM oil_gauss_seidel

IMPLICIT NONE
CHARACTER :: TEXT

INTEGER :: NB,J,NW,DT,acum1,acum2,I,POSICION,ABloque,DELTA_T, FAN_1,FAN_2


REAL
::
ANCHO,ESPESOR,P_IN,RHO,PENDIENTEB,P_INTER,P_INTER2,PENDIENTE_MU,REQ,RW,GW,SUM
A,E_R,ERROR,PWF,SUMAEBM,SUMAQ,EBM
REAL,DIMENSION(:),ALLOCATABLE
DX,DEEP_B,KX,PHI_0,QW,P_DATOS,BO,MU_INTER,VB,DERIVADA

::

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

OPEN (10, FILE = 'Malla_2_Oil.txt', STATUS ='OLD')


READ(10,*);READ(10,*);READ(10,*);READ(10,*);READ(10,*);READ(10,*);READ(10,*);READ(10,*);

!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,*);

!INFORMACIN DE LOS POZOS


READ(10,*) TEXT,NW
READ(10,*);
ALLOCATE (UW(NW),QW(NW))
DO J=1,NW
READ(10,*) TEXT,UW(J)
END DO
READ(10,*);
DO J=1,NW
READ(10,*) TEXT,QW(J)
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,*);

!INFORMACIN DEL FLUIDO


READ(10,*) TEXT,RHO
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

!INTERPOLAMOS BO Y MU PARA LA PN1+1/2


IF (PN1PROM_1(J)<P_DATOS(1)) THEN
PENDIENTEB=(BO(2)-BO(1))/(P_DATOS(2)-P_DATOS(1))
BO_1(J)=PENDIENTEB*(PN1PROM_1(J)-P_DATOS(1))+BO(1)
PENDIENTE_MU=(MU_INTER(2)-MU_INTER(1))/(P_DATOS(2)-P_DATOS(1))
MU_1(J)=PENDIENTE_MU*(PN1PROM_1(J)-P_DATOS(1))+MU_INTER(1)
ELSE IF (PN1PROM_1(J)>P_DATOS(acum1)) THEN
PENDIENTEB=(BO(acum1)-BO(acum1-1))/(P_DATOS(acum1)-P_DATOS(acum1-1))
BO_1(J)=PENDIENTEB*(PN1PROM_1(J)-P_DATOS(acum1))+BO(acum1)
PENDIENTE_MU=(MU_INTER(acum1)-MU_INTER(acum1-1))/(P_DATOS(acum1)P_DATOS(acum1-1))
MU_1(J)=PENDIENTE_MU*(PN1PROM_1(J)-P_DATOS(acum1))+MU_INTER(acum1)

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

!INTERPOLAMOS BO Y MU PARA LA PN1-1/2


IF (PN1PROM_2(J)<P_DATOS(1)) THEN
PENDIENTEB=(BO(2)-BO(1))/(P_DATOS(2)-P_DATOS(1))
BO_2(J)=PENDIENTEB*(PN1PROM_2(J)-P_DATOS(1))+BO(1)
PENDIENTE_MU=(MU_INTER(2)-MU_INTER(1))/(P_DATOS(2)-P_DATOS(1))

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

!INTERPOLAMOS BO Y MU PARA LA PN1

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

!CAUDAL DE LOS POZOS


QSC(:)=0
DO J=1,NW
POSICION=UW(J)
IF ((J==1) .OR. (J==3)) THEN
QSC(POSICION)=QW(J)
ELSE IF (J==2) THEN
REQ=0.198*DX(POSICION)
RW=0.3
PWF=QW(J)
GW=(2*3.1416*KX(POSICION)*ESPESOR*0.001127*RW)/(LOG(REQ/RW))
QSC(POSICION)=((-1)*GW*(PN1(POSICION)-PWF)/
(BON1(POSICION)*5.615*MUN1(POSICION))/142)
END IF

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

!CLCULO ERROR DE PRESIN


SUMA=0
DO J=1,NB
E_R=ABS((PCAL(J)-PN1(J))/PCAL(J))
SUMA=SUMA+E_R
END DO
ERROR=SUMA/NB

DO J=1,NB

PN1(J)=PCAL(J)
END DO
PN1(0)=PN1(1)
PN1(NB+1)=PN1(NB)

END DO !WHILE PRESION

DO J=1,NB
PHIN1(J)=PHIN(J)*(1+CPORO*(PN1(J)-PN(J)))
END DO

!INTERPOLAMOS BO Y MU PARA LA NUEVA PN1


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)
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))
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

!CLCULO BALANCE DE MATERIALES


SUMAEBM=0
SUMAQ=0
DO J=1,NB
SUMAEBM=(5.1456e-15*(PHIN1(J)/BON1(J))-(PHIN(J)/BON(J))*(VB(J)/DT))+SUMAEBM
SUMAQ=SUMAQ+QSC(J)
END DO
EBM=ABS((SUMAEBM/SUMAQ)-1)

IF (EBM>TOL) THEN
print *, 'INGRESE NUEVO DELTA T'
read *, DELTA_T
END IF

END DO !WHILE BALANCE

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

Das könnte Ihnen auch gefallen