C MARCH 3, 2001; MARCH 24, 2005 C FUNCTION DECLARATIONS FOR THE COST FUNCTION OF A GENERALIZED C NETWORK FLOW PROBLEM. THE FUNCTIONS C(I,F), DC(I,F), DCINV(I,F) C GIVE THE FUNCTION VALUE, DERIVATIVE VALUE, DERIVATIVE INVERSE VALUE C FOR A LINEAR COST FUNCTION OR AN C ENTROPY COST FUNCTION F*LOG(F/CDAT(I,1)) - F C FOR ARC I WITH FLOW F. C THE FUNCTION PARAMETERS A(I), CDAT(I,1) ARE SPECIFIED IN THE C ASCII FILE NL013.DAT C A(I) IS THE LINEAR COST COEFFICIENT. CDAT(I,1) IS THE ENTROPY C COST COEFFICIENT. CDAT(I,1)=0.0 INDICATES A LINEAR COST ARC. FUNCTION C(I,F) IMPLICIT NONE INTEGER*4 MAXARCS,MAXNDAT,I,N,NA PARAMETER (MAXARCS=20000, MAXNDAT=5) REAL*8 A(MAXARCS),CDAT(MAXARCS,MAXNDAT),F,C,LARGE,ZERO COMMON /SCALARS/N,NA,LARGE,ZERO COMMON /LCOS/A COMMON /QCO1/CDAT IF (CDAT(I,1).EQ.ZERO) THEN C=A(I)*F ELSE IF (F.LE.0.0) THEN C=-F ELSE C=F*DLOG(F/CDAT(I,1))-F END IF END IF RETURN END FUNCTION DC(I,F) IMPLICIT NONE INTEGER*4 MAXARCS,MAXNDAT,I,N,NA PARAMETER (MAXARCS=20000, MAXNDAT=5) REAL*8 A(MAXARCS),CDAT(MAXARCS,MAXNDAT),F,DC,LARGE,ZERO COMMON /SCALARS/N,NA,LARGE,ZERO COMMON /LCOS/A COMMON /QCO1/CDAT IF (CDAT(I,1).EQ.ZERO) THEN DC=A(I) ELSE IF (F.LE.0.0) THEN DC=-LARGE ELSE DC=DLOG(F/CDAT(I,1)) END IF END IF RETURN END FUNCTION DCINV(I,T) IMPLICIT NONE INTEGER*4 MAXARCS,MAXNDAT,I,N,NA PARAMETER (MAXARCS=20000, MAXNDAT=5) REAL*8 A(MAXARCS),CDAT(MAXARCS,MAXNDAT),T,DCINV,LARGE,ZERO COMMON /SCALARS/N,NA,LARGE,ZERO COMMON /LCOS/A COMMON /QCO1/CDAT if (t.gt.50) print*,'tension large and positive',i,t if (t.lt.-50) print*,'tension large and negative',i,t DCINV=CDAT(I,1)*DEXP(T) IF (DCINV.GT.LARGE) THEN DCINV=LARGE ELSE IF (DCINV.LT.1.0/LARGE) DCINV=1.0/LARGE END IF RETURN END