home *** CD-ROM | disk | FTP | other *** search
/ Hall of Fame / HallofFameCDROM.cdr / oilfield / spe-46-2.lzh / BLOCK4.FOR < prev    next >
Text File  |  1988-06-24  |  12KB  |  312 lines

  1. $DO66
  2. C.............................................................PSEUDO
  3.       SUBROUTINE PSEUDO(NP,IFATAL,IOCODE)
  4. C      MACHINE DEPENDENT INCLUDE STATEMENT
  5. $INCLUDE:'PARAMS.FOR'
  6. C      GAS PROP BY CORRELATIONS
  7.       REAL KROT,KROGT,KRWT,KRGT,MUOT,MUWT,MUGT
  8.       COMMON /BUBBLE/ PBO,VSLOPE(LP8),BSLOPE(LP8),RSLOPE(LP8),PMAXT,
  9.      & IREPRS,MPGT(LP8),
  10.      & RHOSCO(LP8),RHOSCW(LP8),RHOSCG(LP8),MSAT(LP7),MPOT(LP8),
  11.      & MPWT(LP8),PBOT(LP1,LP2,LP3),PBOTN(LP1,LP2,LP3)
  12.       COMMON /SPVT/ SAT(LP7,LP9),KROT(LP7,LP9),KRWT(LP7,LP9),
  13.      & BGT(LP7,LP9),
  14.      & KRGT(LP7,LP9),ITHREE(LP7),RSOT(LP7,LP9),BWPT(LP7,LP9),
  15.      & PCOWT(LP7,LP9),PCGOT(LP7,LP9),KROGT(LP7,LP9),SWR(LP7),
  16.      & POT(LP7,LP9),MUOT(LP7,LP9),BOT(LP7,LP9),BOPT(LP7,LP9),
  17.      & RSOPT(LP7,LP9),PWT(LP7,LP9),MUWT(LP7,LP9),BWT(LP7,LP9),
  18.      & RSWT(LP7,LP9),RSWPT(LP7,LP9),PGT(LP7,LP9),MUGT(LP7,LP9),
  19.      & BGPT(LP7,LP9),CRT(LP7,LP9),IPVT(LP1,LP2,LP3),IROCK(LP1,LP2,LP3),
  20.      & NROCK,NPVT,PSIT(LP7,LP9),PRT(LP7,LP9),WOROCK(LP7),GOROCK(LP7)
  21.       DIMENSION FRCI(12),PRSCI(12),RMWTI(12),TEMCI(12)
  22.      & ,ZEDD(LP8,LP9),CMPGD(LP8,LP9)
  23.       DATA NCOMP/12/
  24.       DATA TEMCI /672.37,
  25.      A547.57, 227.27, 343.04, 549.76, 665.68,
  26.      B734.65, 765.32, 828.77, 845.37, 913.37, 1023.89/
  27.       DATA PRSCI /1306.0,
  28.      A1071.0, 493.00, 667.80, 707.80, 616.30,
  29.      B529.10, 550.70, 490.40, 488.60, 436.90, 360.60/
  30.   200 FORMAT(/)
  31.   220 FORMAT(1H0,'RESERVOIR TEMPERATURE, DEGREES F   =',F10.2,/
  32.      &  1H ,      'GAS GRAVITY                        =',F10.4,/
  33.      &  1H ,      'PSEUDO-CRITICAL TEMP., DEGREES R   =',F10.2,/
  34.      &  1H ,     'PSEUDO-CRITICAL PRESSURE, PSIA     =',F10.2,/
  35.      &  1H ,     'MOLE PERCENT - HYDROGEN SULFIDE    =',F10.2,/
  36.      &  1H ,     'MOLE PERCENT - CARBON DIOXIDE      =',F10.2,/
  37.      &   1H ,    'MOLE PERCENT - NITROGEN            =',F10.2,//)
  38.   225 FORMAT(1HO,'PRESSURE',4X,'PSEUDO-PRESS',3X,'Z-FACTOR',4X,
  39.      &'GAS FVF',4X,'GAS COMP',2X,'GAS VISG',/,
  40.      &2X,'(PSIA)',5X,'(PSIA**2/CP)',14X,
  41.      &'(RB/SCF)',4X,'(1/PSIA)',5X,'(CP)',/)
  42.   241 FORMAT(1H ,F7.1,5X,E13.7,3X,F6.3,2(2X,E10.4),2X,F7.6)
  43.       READ(20,*) KODEA,MPGT(NP),TEM,SPG
  44.       READ(20,*) (FRCI(I),I=1,12)
  45.       IF(KODEA.LT.4) GO TO 560
  46.       READ(20,*) PRSCI(12),TEMCI(12),RMWTI(12)
  47.   560 CONTINUE
  48.       NDATA=MPGT(NP)
  49.       NFIRST=1
  50.       NLAST=NDATA
  51.       PREF=14.7
  52.       DELP=(PMAXT-PREF)/(MPGT(NP)-1.)
  53.       CNCH2S=FRCI(1)*100.
  54.       CNCCO2=FRCI(2)*100.
  55.       CNCN2=FRCI(3)*100.
  56.       IF(KODEA.GT.2) GO TO 2
  57.       TEMPC=170.491 + 307.344*SPG
  58.       PRSPC=709.604 - 58.718*SPG
  59.       GO TO 51
  60.     2 TEMPC=0.0
  61.       PRSPC=0.0
  62.       DO 5 J=1,NCOMP
  63.       TEMPC=TEMPC+TEMCI(J)*FRCI(J)
  64.       PRSPC=PRSPC+PRSCI(J)*FRCI(J)
  65.     5 CONTINUE
  66. 51    CONTINUE
  67.       WRITE(IOCODE,201)
  68.   201 FORMAT(///,8X,4('*'),' REAL GAS PROPERTIES ',4('*'),//)
  69.       WRITE(IOCODE,203)
  70.       WRITE(IOCODE,204) FRCI(1),FRCI(2),FRCI(3)
  71.       WRITE(IOCODE,205)
  72.       WRITE(IOCODE,206) (FRCI(I),I=4,NCOMP)
  73.   203 FORMAT(/,1X,'GAS COMPOSITION (MOLE FRACTION):',//,
  74.      & 3X,'H2S',4X,'CO2',5X,'N2')
  75.   204 FORMAT(2X,F5.4,2(2X,F5.4),/)
  76.   205 FORMAT(4X,'C1',5X,'C2',5X,'C3',4X,'IC4',4X,'NC4',
  77.      & 4X,'IC5',4X,'NC5',5X,'C6',4X,'C7+',/)
  78.   206 FORMAT(1X,F6.4,8(2X,F5.4),/)
  79.       WRITE(IOCODE,200)
  80.       WRITE(IOCODE,220) TEM,SPG,TEMPC,PRSPC,CNCH2S,CNCCO2,CNCN2
  81.       WRITE(IOCODE,225)
  82.       PRSDEL=DELP
  83.       PRS=PREF
  84.       PRSSI=0.0
  85.       PRSSI1=0.0
  86.       PRSSI2=0.0
  87.       DO 20  I=1,NDATA
  88.       BGT(NP,I)=0.
  89.       IF(PRS.LE.0.0) GO TO 15
  90.       TEMPRD=(TEM+460.)/TEMPC
  91.       PRSPRD=PRS/PRSPC
  92.       CALL ZANDC(TEM,TEMPC,PRS,PRSPC,CNCH2S,
  93.      &  CNCCO2,ZED,CMPG,IERR)
  94.       IFATAL=IERR+IFATAL
  95.       IF(IERR.GT.0) WRITE(IOCODE,1010) IERR
  96.  1010 FORMAT(/5X,5('-'),'ZANDC ERRORS (IERR =',I5,') HAVE',
  97.      & ' OCCURRED IN THE DEFAULT GAS PROPERTIES CALCULATION.',
  98.      & /10X,'CHECK INPUT GAS DATA AND USER-SPECIFIED OPTIONS.',/)
  99.       CALL VISCY(TEMPRD,PRSPRD,SPG,TEM,CNCH2S,
  100.      &  CNCCO2,CNCN2,VISGR,VISG,IERR)
  101.       IFATAL=IERR+IFATAL
  102.       IF(IERR.GT.0) WRITE(IOCODE,1020) IERR
  103.  1020 FORMAT(/5X,5('-'),'VISCY ERRORS (IERR =',I5,') HAVE',
  104.      & ' OCCURRED IN THE DEFAULT GAS PROPERTIES CALCULATION.',
  105.      & /10X,'CHECK INPUT GAS DATA AND USER-SPECIFIED OPTIONS.',/)
  106.       PRSSI2=2.*PRS/(VISG*ZED)
  107.       PRSSI=(PRSSI1+PRSSI2)/2.*PRSDEL + PRSSI
  108.    15 IF(PRS.LE.PREF ) PRSSI=0.0
  109.       PSIT(NP,I)=PRSSI
  110.       ZEDD(NP,I)=ZED
  111.       CMPGD(NP,I)=CMPG
  112.       MUGT(NP,I)=VISG
  113.       PGT(NP,I)=PRS
  114.       PRS=PRS+PRSDEL
  115.       PRSSI1=PRSSI2
  116.       IF(PGT(NP,I).EQ.0.0) GO TO 16
  117. C**  BGT FACTOR 0.004675 = 14.7/((460+60)*5.6146)
  118.       BGT(NP,I)=(TEM+460.)*ZEDD(NP,I)*0.004675/PGT(NP,I)
  119.    16 CONTINUE
  120.       IF(I.LT.NFIRST.OR.I.GT.NLAST) GO TO 20
  121.       WRITE(IOCODE,241) PGT(NP,I),PSIT(NP,I),ZEDD(NP,I),
  122.      & BGT(NP,I),CMPGD(NP,I),MUGT(NP,I)
  123.    20 CONTINUE
  124.       DO 30 I=1,NDATA
  125.       BGT(NP,I)=BGT(NP,I)*5.6146
  126.    30 CONTINUE
  127.       RETURN
  128.       END
  129. C...............................................................REPRS1
  130.       SUBROUTINE REPRS1(I,J,K)
  131. C       CALCULATION OF REPRESSURIZATION PVT PROPERTIES
  132. C      MACHINE DEPENDENT INCLUDE STATEMENT
  133. $INCLUDE:'PARAMS.FOR'
  134.       REAL KROT,KROGT,KRWT,KRGT,MUWT,MUOT,MUGT,KX,KY,KZ
  135.      & ,MUO,MUW,MUG,KRO,KRW,MBEWI,MBEGI,MCFGI
  136.      & ,MBEO,MBEW,MBEG,MCFG,MBEOI,MIN,MCFG1,MCFGT
  137.       COMMON /BUBBLE/ PBO,VSLOPE(LP8),BSLOPE(LP8),RSLOPE(LP8),PMAXT,
  138.      & IREPRS,MPGT(LP8),
  139.      & RHOSCO(LP8),RHOSCW(LP8),RHOSCG(LP8),MSAT(LP7),MPOT(LP8),
  140.      & MPWT(LP8),PBOT(LP1,LP2,LP3),PBOTN(LP1,LP2,LP3)
  141.       COMMON /SARRAY/ PN(LP1,LP2,LP3),IOCODE,IDMAX,
  142.      & SON(LP1,LP2,LP3),SWN(LP1,LP2,LP3),SGN(LP1,LP2,LP3),
  143.      & A1(LP1,LP2,LP3),A2(LP1,LP2,LP3),A3(LP1,LP2,LP3),
  144.      & SUM(LP1,LP2,LP3),GAM(LP1,LP2,LP3),QS(LP1,LP2,LP3)
  145.       COMMON /SPRTPS/ P(LP1,LP2,LP3),SO(LP1,LP2,LP3),SW(LP1,LP2,LP3),
  146.      & SG(LP1,LP2,LP3)
  147.       COMMON /SPVT/ SAT(LP7,LP9),KROT(LP7,LP9),KRWT(LP7,LP9),
  148.      & BGT(LP7,LP9),
  149.      & KRGT(LP7,LP9),ITHREE(LP7),RSOT(LP7,LP9),BWPT(LP7,LP9),
  150.      & PCOWT(LP7,LP9),PCGOT(LP7,LP9),KROGT(LP7,LP9),SWR(LP7),
  151.      & POT(LP7,LP9),MUOT(LP7,LP9),BOT(LP7,LP9),BOPT(LP7,LP9),
  152.      & RSOPT(LP7,LP9),PWT(LP7,LP9),MUWT(LP7,LP9),BWT(LP7,LP9),
  153.      & RSWT(LP7,LP9),RSWPT(LP7,LP9),PGT(LP7,LP9),MUGT(LP7,LP9),
  154.      & BGPT(LP7,LP9),CRT(LP7,LP9),IPVT(LP1,LP2,LP3),IROCK(LP1,LP2,LP3),
  155.      & NROCK,NPVT,PSIT(LP7,LP9),PRT(LP7,LP9),WOROCK(LP7),GOROCK(LP7)
  156.       COMMON /SSOLN/ BO(LP1,LP2,LP3),BW(LP1,LP2,LP3),BG(LP1,LP2,LP3),
  157.      & QO(LP1,LP2,LP3),QW(LP1,LP2,LP3),QG(LP1,LP2,LP3),
  158.      & GOWT(LP1,LP2,LP3),GWWT(LP1,LP2,LP3),GGWT(LP1,LP2,LP3),
  159.      & OW(LP4,LP2,LP3),OE(LP4,LP2,LP3),WW(LP4,LP2,LP3),WE(LP4,LP2,LP3),
  160.      & OS(LP1,LP5,LP3),ON(LP1,LP5,LP3),WS(LP1,LP5,LP3),WN(LP1,LP5,LP3),
  161.      & OT(LP1,LP2,LP6),OB(LP1,LP2,LP6),WT(LP1,LP2,LP6),WB(LP1,LP2,LP6),
  162.      & QOWG(LP1,LP2,LP3),VP(LP1,LP2,LP3),CT(LP1,LP2,LP3)
  163.       COMMON /TSTDAT/ IFATAL,IWARN
  164. C      REPRESSURIZATION ASSUMING EQUILIBRATION IN ENTIRE GRID BLOCK
  165.       PP=P(I,J,K)
  166.       IF(P(I,J,K).GT.PBOT(I,J,K)) PP=PBOT(I,J,K)
  167.       IPVTR=IPVT(I,J,K)
  168.       CALL INTERP(IPVTR,POT,BOT,MPOT(IPVTR),PP,BBO)
  169.       CALL INTERP(IPVTR,POT,RSOT,MPOT(IPVTR),PP,RSO)
  170.       CALL INTERP(IPVTR,PGT,BGT,MPGT(IPVTR),PP,BBG)
  171.       SGOSOG=0.
  172.       IF(SO(I,J,K).GT.0.) SGOSOG=SG(I,J,K)*BBO/(SO(I,J,K)*BBG)
  173.       RSONEW=RSO+SGOSOG
  174.       CALL INTERP(IPVTR,RSOT,POT,MPOT(IPVTR),RSONEW,PBONEW)
  175.       PBOT(I,J,K)=PBONEW
  176.       RETURN
  177.       END
  178. C.............................................................GAUS1D
  179.       SUBROUTINE GAUS1D(IOCODE,IFATAL,NX,NY,NZ)
  180. C      MACHINE DEPENDENT INCLUDE STATEMENT
  181. $INCLUDE:'PARAMS.FOR'
  182. C      SOLVE 1D PROBLEMS
  183.       COMMON /COEF/ AW(LP1,LP2,LP3),AE(LP1,LP2,LP3),AN(LP1,LP2,LP3),
  184.      & AS(LP1,LP2,LP3),AB(LP1,LP2,LP3),AT(LP1,LP2,LP3),E(LP1,LP2,LP3),
  185.      & B(LP1,LP2,LP3)
  186.       COMMON /SPRTPS/ P(LP1,LP2,LP3),SO(LP1,LP2,LP3),SW(LP1,LP2,LP3),
  187.      & SG(LP1,LP2,LP3)
  188.       COMMON /TRIDI/ UM(LP15),AZL(LP15),BZL(LP15),CZL(LP15),DZL(LP15),
  189.      & UZL(LP15),X(LP15),BETA(LP15),GAMMA(LP15),W(LP15)
  190.       IF(NX.GT.1.OR.NY.GT.1.OR.NZ.GT.1) GO TO 50
  191.       I=1
  192.       J=1
  193.       K=1
  194.       IF(E(I,J,K).EQ.0.) GO TO 20
  195.       P(I,J,K)=B(I,J,K)/E(I,J,K)
  196.       RETURN
  197.    20 WRITE(IOCODE,30)
  198.    30 FORMAT(/5X,5('-'),'COEF E(1,1,1) = 0 FOR',
  199.      & ' NX=NY=NZ=1 CASE; PLEASE CHECK INPUT DATA.',/)
  200.       IFATAL=IFATAL+1
  201.       RETURN
  202.    50 CONTINUE
  203.       IF(NX.GT.1.AND.NY.GT.1) GO TO 3000
  204.       IF(NX.GT.1.AND.NZ.GT.1) GO TO 3000
  205.       IF(NY.GT.1.AND.NZ.GT.1) GO TO 3000
  206.       IF(NX.EQ.1) GO TO 1000
  207.       J=1
  208.       K=1
  209.       DO 100 I=1,NX
  210.       AZL(I)=AW(I,J,K)
  211.       BZL(I)=E(I,J,K)
  212.       CZL(I)=AE(I,J,K)
  213.       DZL(I)=B(I,J,K)
  214.   100 CONTINUE
  215. C     THIS ALGORITHM SOLVES THE TRIDIAGONAL SYSTEM
  216. C     GENERATED BY THE SYSTEM OF N EQUATIONS
  217. C     AZL(I)*U(I-1) + BZL(I)*U(I) + CZL(I)*U(I+1) = DZL(I)
  218.       BETA(1)=BZL(1)
  219.       GAMMA(1)=DZL(1)/BZL(1)
  220.       NXM=NX-1
  221. C      COMPUTE FORWARD SOLUTION.
  222.       DO 5010 ITRI=1,NXM
  223.       W(ITRI)=CZL(ITRI)/BETA(ITRI)
  224.       ITRIP=ITRI+1
  225.  5010 BETA(ITRIP)=BZL(ITRIP)-AZL(ITRIP)*W(ITRI)
  226.       DO 5020 ITRI=2,NX
  227.       ITRIM=ITRI-1
  228.  5020 GAMMA(ITRI)=(DZL(ITRI)-AZL(ITRI)*GAMMA(ITRIM))/BETA(ITRI)
  229. C      COMPUTE BACK SOLUTION
  230.       UZL(NX)=GAMMA(NX)
  231.       DO 5030 JTRI=1,NXM
  232.       ITRI=NX-JTRI
  233.       ITRIP=ITRI+1
  234.  5030 UZL(ITRI)=GAMMA(ITRI)-W(ITRI)*UZL(ITRIP)
  235.       DO 300 I=1,NX
  236.       P(I,J,K)=UZL(I)
  237.   300 CONTINUE
  238.       RETURN
  239.  1000 IF(NZ.EQ.1) GO TO 2000
  240.       I=1
  241.       J=1
  242.       DO 1100 K=1,NZ
  243.       AZL(K)=AT(I,J,K)
  244.       BZL(K)=E(I,J,K)
  245.       CZL(K)=AB(I,J,K)
  246.       DZL(K)=B(I,J,K)
  247.  1100 CONTINUE
  248. C     THIS ALGORITHM SOLVES THE TRIDIAGONAL SYSTEM
  249. C     GENERATED BY THE SYSTEM OF N EQUATIONS
  250. C     AZL(K)*U(K-1) + BZL(K)*U(K) + CZL(K)*U(K+1) = DZL(K)
  251.       BETA(1)=BZL(1)
  252.       GAMMA(1)=DZL(1)/BZL(1)
  253.       NZM=NZ-1
  254. C      COMPUTE FORWARD SOLUTION.
  255.       DO 5110 ITRI=1,NZM
  256.       W(ITRI)=CZL(ITRI)/BETA(ITRI)
  257.       ITRIP=ITRI+1
  258.  5110 BETA(ITRIP)=BZL(ITRIP)-AZL(ITRIP)*W(ITRI)
  259.       DO 5120 ITRI=2,NZ
  260.       ITRIM=ITRI-1
  261.  5120 GAMMA(ITRI)=(DZL(ITRI)-AZL(ITRI)*GAMMA(ITRIM))/BETA(ITRI)
  262. C      COMPUTE BACK SOLUTION
  263.       UZL(NZ)=GAMMA(NZ)
  264.       DO 5130 JTRI=1,NZM
  265.       ITRI=NZ-JTRI
  266.       ITRIP=ITRI+1
  267.  5130 UZL(ITRI)=GAMMA(ITRI)-W(ITRI)*UZL(ITRIP)
  268.       DO 1300 K=1,NZ
  269.       P(I,J,K)=UZL(K)
  270.  1300 CONTINUE
  271.       RETURN
  272.  2000 CONTINUE
  273.       I=1
  274.       K=1
  275.       DO 2100 J=1,NY
  276.       AZL(J)=AS(I,J,K)
  277.       BZL(J)=E(I,J,K)
  278.       CZL(J)=AN(I,J,K)
  279.       DZL(J)=B(I,J,K)
  280.  2100 CONTINUE
  281. C     THIS ALGORITHM SOLVES THE TRIDIAGONAL SYSTEM
  282. C     GENERATED BY THE SYSTEM OF N EQUATIONS
  283. C     AZL(J)*U(J-1) + BZL(J)*U(J) + CZL(J)*U(J+1) = DZL(J)
  284.       BETA(1)=BZL(1)
  285.       GAMMA(1)=DZL(1)/BZL(1)
  286.       NYM=NY-1
  287. C      COMPUTE FORWARD SOLUTION.
  288.       DO 5210 ITRI=1,NYM
  289.       W(ITRI)=CZL(ITRI)/BETA(ITRI)
  290.       ITRIP=ITRI+1
  291.  5210 BETA(ITRIP)=BZL(ITRIP)-AZL(ITRIP)*W(ITRI)
  292.       DO 5220 ITRI=2,NY
  293.       ITRIM=ITRI-1
  294.  5220 GAMMA(ITRI)=(DZL(ITRI)-AZL(ITRI)*GAMMA(ITRIM))/BETA(ITRI)
  295. C      COMPUTE BACK SOLUTION
  296.       UZL(NY)=GAMMA(NY)
  297.       DO 5230 JTRI=1,NYM
  298.       ITRI=NY-JTRI
  299.       ITRIP=ITRI+1
  300.  5230 UZL(ITRI)=GAMMA(ITRI)-W(ITRI)*UZL(ITRIP)
  301.       DO 2300 J=1,NY
  302.       P(I,J,K)=UZL(J)
  303.  2300 CONTINUE
  304.       RETURN
  305.  3000 CONTINUE
  306.       IFATAL=IFATAL+1
  307.       WRITE(IOCODE,3100) NX,NY,NZ
  308.  3100 FORMAT(/5X,5('-'),'GAUS1D INCORRECTLY CALLED',
  309.      & ' WHEN NX,NY,NZ = ',3I5,/)
  310.       RETURN
  311.       END
  312.