calfun.f 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. SUBROUTINE CALFUN (N,X,F)
  2. IMPLICIT REAL*8 (A-H,O-Z)
  3. INCLUDE "param.inc"
  4. DIMENSION Z(14)
  5. DIMENSION X(*)
  6. COMMON /PB/ NPROB
  7. COMMON /VARS/ Z
  8. C Some constants in double precision
  9. ZERO = 0.0D0
  10. ONE = 1.0D0
  11. TWO = 2.0D0
  12. C
  13. C The variables passed in X and Z vectors
  14. C -------------------------------------------------------------------
  15. C Z (14) is a container for parameters passed between subroutines
  16. C
  17. C Z(1:3) NSC, NCE, NSE
  18. C Z(4:6) TAUSC, TAUCE, TAUSE
  19. C Z(7:9) PSC, PCE, PSE
  20. C Z(10:12) FSC, FCE, FSE
  21. C Z(13:14) AA, BB
  22. C
  23. C AA : ALPHA
  24. C BB : BETA
  25. C -------------------------------------------------------------------
  26. IF (NPROB.EQ.1) THEN
  27. C
  28. C COMPUTE THE AVERAGE TOTAL COST (THE OPTIMUM)
  29. C
  30. A=CW/(TWO*Z(10))+FSCT+ASCT*(X(1)+X(3))/Z(10)
  31. B=CW/(TWO*Z(11))+FCET+ACET*(X(2)+X(3))/Z(11)
  32. F=X(1)*A+(POPSC-X(1))*(FSCR+ASCR*(POPSC-X(1)))+
  33. 1 X(2)*B+(POPCE-X(2))*(FCER+ACER*(POPCE-X(2)))+
  34. 2 X(3)*(A+B-Z(13)*(CW/(TWO*Z(11)))+(ONE-Z(13))*SC)+
  35. 3 (POPSE-X(3))*(FSER+ASER*(POPSE-X(3)))+
  36. 4 PHI*(Z(10)+Z(11))+EF*Z(13)*Z(13)
  37. F=F/(POPSC+POPCE+POPSE)
  38. ELSE IF (NPROB.EQ.2) THEN
  39. C
  40. C COMPUTE THE BECKMAN FUNCTION - THE EQUILIBROIUM
  41. C IS THE MINIMUM OF THIS FUNCTION
  42. C
  43. F = ZERO
  44. F = F + BECKMAN ( Z(4) + FSCR, ASCR, POPSC - X(1) )
  45. F = F + BECKMAN ( Z(5) + FCER, ACER, POPCE - X(2) )
  46. F = F + BECKMAN ( Z(6) + FSER, ASER, POPSE - X(3) )
  47. F = F + BECKMAN ( Z(7) + FSCT + CW / ( TWO * Z(10) ),
  48. + ASCT / Z(10), X(1) + X(3) )
  49. F = F + BECKMAN ( Z(8) + FCET + CW / ( TWO * Z(11) ),
  50. + ACET / Z(11), X(2) + X(3) )
  51. F = F - BECKMAN ( Z(13) * CW / ( TWO * Z(11) )-(ONE-Z(13) ) * SC +
  52. + (ONE - Z(14)) * (Z(7)+Z(8)), ZERO, X(3) )
  53. F=F/(POPSC+POPCE+POPSE)
  54. ELSE IF (NPROB.EQ.3) THEN
  55. C
  56. C PROFIT OF THE MANAGER OF THE ROADS
  57. C
  58. Z(4) = Z(7)+CW/(TWO*Z(10))+FSCT+ASCT*(X(1)+X(3))/Z(10)-
  59. 1 FSCR-ASCR*(POPSC-X(1))
  60. Z(5) = Z(8)+CW/(TWO*Z(11))+FCET+ACET*(X(2)+X(3))/Z(11)-
  61. 1 FCER-ACER*(POPCE-X(2))
  62. Z(6) = CW/(TWO*Z(10))+FSCT+ASCT*(X(1)+X(3))/Z(10)+
  63. 1 CW/(TWO*Z(11))+FCET+ACET*(X(2)+X(3))/Z(11)+
  64. 2 Z(14)*(Z(7)+Z(8))-Z(13)*CW/(TWO*Z(11))+(ONE-Z(13))*SC-
  65. 3 FSER-ASER*(POPSE-X(3))
  66. F=-(Z(4)*(POPSC-X(1))+Z(5)*(POPCE-X(2))+Z(6)*(POPSE-X(3)))
  67. ELSE IF (NPROB.EQ.4) THEN
  68. C
  69. C PROFIT OF THE MANAGER OF PUBLIC TRANSPORT
  70. C
  71. Z(7 ) = -CW/(TWO*Z(10))-FSCT-ASCT*(X(1)+X(3))/Z(10)+
  72. 1 FSCR+ASCR*(POPSC-X(1))+Z(4)
  73. Z(8 ) = -CW/(TWO*Z(11))-FCET-ACET*(X(2)+X(3))/Z(11)+
  74. 1 FCER+ACER*(POPCE-X(2))+Z(5)
  75. Z(14) =(-CW/(TWO*Z(10))-FSCT-ASCT*(X(1)+X(3))/Z(10)-
  76. 1 CW/(TWO*Z(11))-FCET-ACET*(X(2)+X(3))/Z(11)+
  77. 2 Z(13)*CW/(TWO*Z(11))-(ONE-Z(13))*SC+
  78. 3 Z(6)+FSER+ASER*(POPSE-X(3)))/(Z(7)+Z(8))
  79. C To add : - AA * EF - (FSC+FCE) * PHI
  80. F=-(Z(7)*X(1)+Z(8)*X(2)+Z(14)*(Z(7)+Z(8))*X(3))
  81. ELSEIF (NPROB.EQ.10) THEN
  82. C
  83. C COMPUTE THE AVERAGE TOTAL COST (THE OPTIMUM)
  84. C
  85. A=CW/(TWO*Z(10))+FSCT+ASCT*X(1)/Z(10)
  86. B=CW/(TWO*Z(11))+FCET+ACET*X(2)/Z(11)
  87. C=CW/(TWO*Z(12))+FSET+ASET*X(3)/Z(12)
  88. F=X(1)*A+(POPSC-X(1))*(FSCR+ASCR*(POPSC-X(1)))+
  89. 1 X(2)*B+(POPCE-X(2))*(FCER+ACER*(POPCE-X(2)))+
  90. 2 X(3)*C+(POPSE-X(3))*(FSER+ASER*(POPSE-X(3)))+
  91. 4 PHI*(Z(10)+Z(11)+Z(12))
  92. F=F/(POPSC+POPCE+POPSE)
  93. ELSE IF (NPROB.EQ.11) THEN
  94. C
  95. C COMPUTE THE BECKMAN FUNCTION - THE EQUILIBROIUM
  96. C IS THE MINIMUM OF THIS FUNCTION
  97. C
  98. F = ZERO
  99. F = F + BECKMAN ( Z(4) + FSCR, ASCR, POPSC - X(1) )
  100. F = F + BECKMAN ( Z(5) + FCER, ACER, POPCE - X(2) )
  101. F = F + BECKMAN ( Z(6) + FSER, ASER, POPSE - X(3) )
  102. F = F + BECKMAN ( Z(7) + FSCT+CW/(TWO*Z(10)), ASCT / Z(10), X(1) )
  103. F = F + BECKMAN ( Z(8) + FCET+CW/(TWO*Z(11)), ACET / Z(11), X(2) )
  104. F = F + BECKMAN ( Z(9) + FSET+CW/(TWO*Z(12)), ASET / Z(12), X(3) )
  105. F=F/(POPSC+POPCE+POPSE)
  106. ENDIF
  107. RETURN
  108. END
  109. FUNCTION BECKMAN (F,A,X)
  110. IMPLICIT REAL*8 (A-H,O-Z)
  111. BECKMAN = X * ( F + A * X / 2.0D0 )
  112. RETURN
  113. END