$NOFLOATCALLS C*********************************************************************** C SUBROUTINE SSSS C C*********************************************************************** C C -- THE SUPPLY MODULE -- C C THIS MODULE GENERATES SUPPLIES FOR ALL REGIONS AND FOSSIL FUELS C AS WELL AS A SUPPLY PRICE FOR NON-FOSSIL BACKSTOP TECHNOLOGIES. C C C VERSION: A.31.07.84 C C INTEGER INPUTS: M, NF, NFF, NIG, NIS, NL, NU C C REAL INPUTS: BESIL, BSCIL, CIGIS, CIL, CILT, ESFILM, FLRL, C GCI, HCILT, HYDRO, PILM, RCI, RIL, RIGISL, RSYIL, C RYSHT, STISL, VISL C C REAL OUTPUTS: BESILM, ESIL, ESIL1M, ESIL2M, ESRL1M, ESRL2M, C ESRILM, SCIL, SFLRL,EBRSLM C C SUBROUTINES CALLED: NONE C C CODED BY: C JAE EDMONDS LATEST REVISION: C 1 JANUARY 1982 9 AUGUST, 1982 C (NEW BASE SUPPLY ALGORITHM AND C BIOMASS COMPUTATIONS ADDED) C C 31 JULY 1984 C BY: JAE EDMONDS C MAJOR SUPPLY REVISION C *RESOURCE CONSTRAINTS PLACED C ON FOSSIL FUEL PRODUCTION C FOR CONVENTIONAL OIL, C CONVENTIONAL GAS, C COAL, C UNCONVENTIONAL OIL, C NUCLEAR C *TECHNOLOGICAL AND ENVIRONMEN- C TAL COSTS SEPERATED AND SUPPLY C SIDE TECHNOLOGICAL CHANGE C ADDED C *EXOGENOUS MIDEAST OIL DROPPED C *UNCONVENTIONAL GAS DROPPED C 31 AUGUST 1988 C TO COMPUTE EBRSLM--ENERGY OF C WASTE BIOMASS NOT USED FOR C SOLID FUEL. C 21 AUGUST 1989 C TO REMOVE TXJLM FROM SYNFUEL C CALCULATIONS AT DO 200 C*********************************************************************** C C MAKE ALL REAL VARIABLES DOUBLE PRECISION C IMPLICIT REAL*8 (A-H,O-Z), INTEGER (I-N) C C COMMON BLOCKS $INCLUDE:'COMMON.FOR' C C LOCAL VARIABLES C REAL*8 B,C,E,E1,EHOLD,FACT,H,SHARE,SLOPE,SUM,T, & TT,T1,P,R,V,TECH C INTEGER IIP,ICOAL,IGAS,IOIL,IUOIL,MM1,MAXR C IOIL = 1 IGAS = 2 ICOAL= 3 IUOIL= 4 T = (M-1)*NJUMP TT = NJUMP T1 = T-TT MM1=M-1 C----------------------------------------------------------------------- C LONG-RUN SUPPLY SCHEDULE FOR C IS=1= CONVENTIONAL OIL C 2= CONVENTIONAL GAS C 3= COAL C 4= UNCONVENTIONAL OIL C----------------------------------------------------------------------- C C +------------------------------------------------+ C | COMPUTE ESTIMATED CUMULATIVE PRODUCTION | C +------------------------------------------------+ C C DO 80 L=1,NL C C ******************************* C *** ZERO TOTAL FUEL COUNTER *** C DO 10 I=1,NF ESIL(I,L)=0.D0 10 CONTINUE C C +------------------------------------------------+ C | ESTIMATE CUMULATIVE PRODUCTION TO DATE :| C +------------------------------------------------+ C DO 70 IS=1,NIS MAXR=0 C C *********************************** C *** SET PRIMARY FUELS INDEX *** C *********************************** C I=IS IF(IS.GT.NF) I=IS-NF C C *************************************************** C *** START BY ZEROING QISLM FOR (M.EQ.1) AND *** C *** SETTING OUTPUT TO ESFIL FOR 1975 *** C *************************************************** C C IF(M.GT.1) GO TO 20 C QISLM(IS,L,M)=0.D0 E=ESFIL(IS,L) GO TO 60 C C *************************************************** C *** FOR (M.GT.1) COMPUTE CUMULATIVE PRODUC- *** C *** TION FROM THE DOMESTIC SUPPLY PRICE AND *** C *** THEN ESTIMATE ANNUAL PRODUCTION RATES *** C *************************************************** C 20 CONTINUE C +-------------------------------+ C | COMPUTE RATE OF TECHNOLOGICAL | C | CHANGE AND ENVIRONMENTAL COST | C +-------------------------------+ P=PIM(I,M) TECH=(1.D0+STISL(IS,L))**T IF(M.LE.3) V=VISL(IS,L)*T/75.D0 IF(M.GT.3) V=VISL(IS,L) C +-------------------------------+ C | LOCATE THE MOST PROFITABLE | C | RESOURCE GRADE | C +-------------------------------+ NNIG=NIG+1 R=0.D0 DO 30 IG=1,NNIG IF(IG.LE.NIG) R=R+RIGISL(IG,IS,L) C=CIGIS(IG,IS) C=(C+V)/TECH IF(C.GT.P) GO TO 40 30 CONTINUE MAXR=1 C +-------------------------------+ C | COMPUTE CUMULATIVE PRODUCTION | C +-------------------------------+ 40 CONTINUE C +-------------------------------+ C | IF PRICES ARE TOO LOW ZERO | C | PRODUCTION. IF RESOURCE IS | C | EXHAUSTED SET QISLM TO MAX. | C +-------------------------------+ IF(IG.EQ.1) E=0.D0 IF(IG.EQ.1) QISLM(IS,L,M)=QISLM(IS,L,MM1) IF(IG.EQ.1) GO TO 60 IF(MAXR.EQ.1) QISLM(IS,L,M)=R IF(MAXR.EQ.1) GO TO 50 C +-------------------------------+ C | IF RESOURCE IS ACTIVE COMPUTE | C | CUMULATIVE PRODUCTION | C +-------------------------------+ IG1=IG-1 IG2=IG-2 SLOPE=RIGISL(IG1,IS,L) SLOPE=SLOPE/((CIGIS(IG,IS)-CIGIS(IG1,IS))/TECH) IF(IG.LE.NIG) R=R-RIGISL(IG,IS,L) QISLM(IS,L,M)=R-SLOPE*(C-P) 50 CONTINUE C +-------------------------------+ C | ESTIMATE ANNUAL PRODUCTION | C |RATE FROM CUMULATIVE PRODUCTION| C +-------------------------------+ IF(IS.LE.NF) E1=ESIL1M(I,L,MM1) IF(IS.EQ.IUOIL) E1=ESIL2M(I,L,MM1) E=2.D0*(QISLM(IS,L,M)-QISLM(IS,L,MM1))/TT-E1 C +-------------------------------+ C | MAKE SURE THAT OUTPUT IS POS- | C | ITIVE BUT WITHIN SHORT-TERM | C | CAPACITY LIMITS | C +-------------------------------+ IF(E.LE.0.D0) QISLM(IS,L,M)=QISLM(IS,L,MM1) IF(E.LE.0.D0) E=0.D0 B=BESIL(IS,L) EHOLD=E1*YLM(L,M)/YLM(L,MM1) IF(B.LT.EHOLD) B=EHOLD P=PIM(I,M)/PIM(I,MM1) B=B*P**RIL(I,L) IF(B.LT.E) QISLM(IS,L,M)=QISLM(IS,L,MM1)+TT*(B+E1)/2.D0 IF(B.LT.E) E=B C C +-------------------------------------+ C | ASSIGN OUTPUT TO SUPPLY VARIABLES | C +-------------------------------------+ 60 CONTINUE IF (IS.LE.NF) ESIL1M(I,L,M)=E IF (IS.GT.NF) ESIL2M(I,L,M)=E C ESIL(I,L) = ESIL(I,L) + E C 70 CONTINUE ESIL2M(IGAS,L,M)=0.D0 C 80 CONTINUE C C +-------------------------------------------+ C | COMPUTE BIOMASS SUPPLY OF SOLID FUELS | C +-------------------------------------------+ C DO 680 L=1,NL ESIL1M(ICOAL,L,M)=ESIL(ICOAL,L) C C -- ZERO THE TOTAL BIOMASS COUNTER -- C ESIL2M(ICOAL,L,M)=0.D0 EBRSLM(L,M)=0.D0 C C -- SET THE BASE YEAR BIOMASS OUTPUT TO ZERO C IF (M .EQ. 1) THEN EBRSLM(L,M)=BIOLM(L,1) GO TO 680 END IF C C -- ITERATE OVER MODES -- C DO 660 IM=1,NIM DO 640 IP=1,NIP C C -- CHECK EACH CRITICAL POINT TO FIND THE PRICE C PAIR BETWEEN WHICH THE MARKET PRICE LIES -- C IF(PILM(ICOAL,L,M)-BIOPSM(IP,1,IM)) 620,600,600 C C -- IF THE PRICE LIES ABOVE THE SATURATION PRICE, C THEN SET THE SHARE TO THE SATURATION LEVEL -- C 600 CONTINUE IF (IP .LT. NIP) GO TO 640 SHARE=BIOPSM(NIP,2,IM) GO TO 630 C C -- AFTER CRITICAL POINTS ARE LOCATED BEGIN C COMPUTING BIOMASS PENETRATION SHARE -- C 620 CONTINUE IF (IP .EQ. 1) SHARE=0.D0 IF (IP .EQ. 1) GO TO 630 IF (IP .GT. 1) IIP=IP-1 SLOPE=(BIOPSM(IP,2,IM)-BIOPSM(IIP,2,IM)) & /(BIOPSM(IP,1,IM)-BIOPSM(IIP,1,IM)) SHARE=BIOPSM(IIP,2,IM)+SLOPE & *(PILM(ICOAL,L,M)-BIOPSM(IIP,1,IM)) 630 CONTINUE C C -- COMPUTE MODAL BIOMASS CONTRIBUTION -- C EHOLD=BIOLM(L,IM)*SHARE IF (IM.EQ.1) EHOLD=EHOLD*YLM(L,M)**RYSHT IF (IM.EQ.1) EBRSLM(L,M)=BIOLM(L,IM)*(1.D0-SHARE)* & YLM(L,M)**RYSHT GO TO 650 640 CONTINUE 650 CONTINUE ESIL2M(ICOAL,L,M)=ESIL2M(ICOAL,L,M)+EHOLD 660 CONTINUE C C -- FINALLY ADD COAL TO BIOMASS -- C ESIL(ICOAL,L)=ESIL1M(ICOAL,L,M)+ESIL2M(ICOAL,L,M) 680 CONTINUE C C +--------------------+ C ! ADJUSTMENTS ! C +--------------------+ C DO 210 L=1,NL C C -- ADJUST FOR FLARING AND NON-COMMERCIAL GAS USE C SFLRL(L)=XNTERP(FLRL(1,L),FLRL(2,L),FLRL(3,L),T) ESIL1M(IGAS,L,M)=ESIL1M(IGAS,L,M)*(1.D0-SFLRL(L)) ESIL(IGAS,L)=ESIL1M(IGAS,L,M) C C +-----------------------------------------------------------+ C ! COMPUTE SYNFUEL CONTRIBUTION TO REFINABLE OIL AND GAS ! C +-----------------------------------------------------------+ C SCIL(ICOAL,L)=1.D0 SUM=SCIL(ICOAL,L) DO 200 I=1,NFF C C -- COMPUTE NON-ENERGY COSTS -- C H=XNTERP(HCILT(I,L,1),HCILT(I,L,2),HCILT(I,L,3),T) C C -- COMPUTE NUMERATOR OF COAL OUTPUT SHARES -- C 300 PCIL(I,L) = PIM(ICOAL,M)*GCI(I)+H 310 SCIL(I,L) = (PCIL(I,L)/PIM(I,M))**RCI(I) 320 SUM = SUM + SCIL(I,L) 200 CONTINUE C C +----------------------------------+ C | COMPUTE COAL OUTPUT SHARES AND | C | SUPPLY TO REFINERIES | C +----------------------------------+ DO 205 I=1,NFF SCIL(I,L) = SCIL(I,L)/SUM ESRILM(I,L,M)= ESIL(I,L) + ESIL(ICOAL,L)*SCIL(I,L)/GCI(I) 205 CONTINUE C C -- COMPUTE REFINABLE SOLIDS SUPPLY -- C SCIL(ICOAL,L)= SCIL(ICOAL,L)/SUM ESRL1M(L,M)=ESIL1M(ICOAL,L,M)*SCIL(ICOAL,L) ESRL2M(L,M)=ESIL2M(ICOAL,L,M)*SCIL(ICOAL,L) ESRILM(ICOAL,L,M)=ESRL1M(L,M)+ESRL2M(L,M) C C +---------------------------------------+ C ! COMPUTE HYDRO ELECTRIC PRODUCTION ! C +---------------------------------------+ C FACT=DEXP(HYDRO(1,L)+HYDRO(2,L)*T) ESIL(NI,L)=HYDRO(3,L)*FACT/(1.D0+FACT) TESIL(L)=ESIL(NI,L) C 210 CONTINUE C DO 3010 L=1,NL IF(ESIL1M(1,L,M).LT.0.) WRITE (JUNIT,311)ESIL1M(1,L,M),L,M IF(ESIL1M(2,L,M).LT.0.) WRITE (JUNIT,312)ESIL1M(2,L,M),L,M IF(ESIL1M(3,L,M).LT.0.) WRITE (JUNIT,313)ESIL1M(3,L,M),L,M IF(ESIL2M(1,L,M).LT.0.) WRITE (JUNIT,314)ESIL2M(1,L,M),L,M IF(ESIL2M(2,L,M).LT.0.) WRITE (JUNIT,315)ESIL2M(2,L,M),L,M IF(ESIL2M(3,L,M).LT.0.) WRITE (JUNIT,316)ESIL2M(3,L,M),L,M 311 FORMAT(' ','1M,1,M',G12.6,2I4) 312 FORMAT(' ','1M,2,M',G12.6,2I4) 313 FORMAT(' ','1M,3,M',G12.6,2I4) 314 FORMAT(' ','2M,1,M',G12.6,2I4) 315 FORMAT(' ','2M,2,M',G12.6,2I4) 316 FORMAT(' ','2M,3,M',G12.6,2I4) 3010 CONTINUE C RETURN END