main.f 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376
  1. PROGRAM SCBD
  2. IMPLICIT REAL*8 (A-H,O-Z)
  3. COMMON /PB/ NPROB
  4. INCLUDE "param.inc"
  5. DIMENSION X(10), W(3000), IACT(51)
  6. DIMENSION XL(10), XU(10)
  7. CHARACTER LINE0,LINE1,LINE2,LINE3
  8. DIMENSION LINE0(90),LINE1(90),LINE2(90),LINE3(90)
  9. ZERO=0.0D0
  10. ONE=1.0D0
  11. TWO=2.0D0
  12. CALL PARAM("scbd.dat",PSC,PCE,PSE,BB,TAUSC,TAUCE,TAUSE,
  13. 1 FSC,FCE,FSE,AA)
  14. CW = VAL * CW
  15. SC = VAL * SC
  16. ASCR = VAL * ASCR
  17. ACER = VAL * ACER
  18. ASER = VAL * ASER
  19. DO 1, I=1,90
  20. LINE0(I)='-'
  21. LINE1(I)='='
  22. LINE2(I)='='
  23. LINE3(I)='='
  24. 1 CONTINUE
  25. LINE2(20)='N'
  26. LINE2(21)='0'
  27. LINE2(23)='T'
  28. LINE2(24)='R'
  29. LINE2(25)='A'
  30. LINE2(26)='I'
  31. LINE2(27)='N'
  32. LINE2(29)='S'
  33. LINE2(30)='E'
  34. LINE3(18)='W'
  35. LINE3(19)='I'
  36. LINE3(20)='T'
  37. LINE3(21)='H'
  38. LINE3(23)='T'
  39. LINE3(24)='R'
  40. LINE3(25)='A'
  41. LINE3(26)='I'
  42. LINE3(27)='N'
  43. LINE3(29)='S'
  44. LINE3(30)='E'
  45. C (* fixed costs, free-flow travel times *)
  46. dTse=DSQRT(dTsc*dTsc+dTce*dTce-2*dTsc*dTce*DCOS(theta))
  47. dRse=DSQRT(dRsc*dRsc+dRce*dRce-2*dRsc*dRce*DCOS(theta))
  48. Fsct=dTsc/sTsc*val
  49. Fcet=dTce/sTce*val
  50. Fset=dTse/sTse*val
  51. Fscr=dRsc/sRsc*val
  52. Fcer=dRce/sRce*val
  53. Fser=dRse/sRse*val
  54. C Fser=(theta*dRsc)/sRse*val
  55. POP = POPSC+POPCE+POPSE
  56. PRINT '(6F9.2)', FSCT, FCET, FSET, FSCR, FCER, FSER
  57. C ------------------------
  58. C Head of the output table
  59. C ------------------------
  60. PRINT '(90A)', LINE1
  61. WRITE (*, '(3X,A10,9X,A15,22X,A15)') 'ADM REGIME','TRAIN','ROADS'
  62. PRINT '(90A)', LINE0
  63. WRITE (*, '(16X,4A8,5X,4A8)') 'SC','CE','SE','AGR',
  64. & 'SC','CE','SE','AGR'
  65. PRINT '(90A)', LINE2
  66. C ------------------------
  67. C 1 -- COMPUTE THE OPTIMUM
  68. C ------------------------
  69. ID=1
  70. CALL OPTIMUM (TC,USCT,UCET,USET,FSC,FCE,FSE,AA,
  71. 1 PSC,PCE,BB,TAUSC,TAUCE,TAUSE,ID)
  72. WRITE (*, '(A12,35X,F8.4)' ) 'Optimum', TC
  73. POPTRAIN = USCT+UCET+USET
  74. POPCAR = POP-POPTRAIN
  75. WRITE (*, '(11X,A5,4F8.2,5X,4F8.2)') 'Users',
  76. & USCT,UCET,USET,POPTRAIN,
  77. & POPSC-USCT,POPCE-UCET,POPSE-USET,POPCAR
  78. C1T=FSCT+CW/(TWO*FSC)+ASCT*(USCT+USET)/FSC
  79. C2T=FCET+CW/(TWO*FCE)+ACET*(UCET+USET)/FCE
  80. C3T=C1T+C2T-AA*CW/(TWO*FSC)+(ONE-AA)*SC
  81. CT =(USCT*C1T+UCET*C2T+USET*C3T)/(USCT+UCET+USET)
  82. C1R=FSCR+ASCR*(POPSC-USCT)
  83. C2R=FCER+ACER*(POPCE-UCET)
  84. C3R=FSER+ASER*(POPSE-USET)
  85. CR =((POPSC-USCT)*C1R+(POPCE-UCET)*C2R+(POPSE-USET)*C3R)/
  86. & (POPSC+POPCE+POPSE-USCT-UCET-USET)
  87. WRITE (*, '(11X,A5,4F8.2,5X,4F8.2,5X)') 'Costs',
  88. & C1T,C2T,C3T,CT,C1R,C2R,C3R,CR
  89. WRITE (*, '(11X,A5,4F8.2)') 'Fares',PSC,PCE,BB*(PSC+PCE),
  90. & PSC*USCT+PCE*UCET+PSE*USET
  91. WRITE (*, '(11X,A5,37X,4F8.2)') 'Tolls',TAUSC,TAUCE,TAUSE,
  92. & (POPSC-USCT)*TAUSC+(POPCE-UCET)*TAUCE+(POPSE-USET)*TAUSE
  93. PRINT '(90A)', LINE0
  94. C ------------------------
  95. C 2 -- BETA LIMITED: BETA <= BETA_MAX
  96. C ------------------------
  97. TAUSC=ZERO
  98. TAUCE=ZERO
  99. TAUSE=ZERO
  100. PSC =ZERO
  101. PCE =ZERO
  102. BB = 1.0D0
  103. CALL BETAFIXED (FSC,FCE,AA,PSC,PCE,BB,TAUSC,TAUCE,TAUSE,
  104. 1 USCT,UCET,USET,TC)
  105. WRITE (*, '(A12,35X,F8.4)' ) 'Beta bounded',TC
  106. POPTRAIN = USCT+UCET+USET
  107. POPCAR = POP-POPTRAIN
  108. WRITE (*, '(11X,A5,4F8.2,5X,4F8.2)') 'Users',
  109. & USCT,UCET,USET,POPTRAIN,
  110. & POPSC-USCT,POPCE-UCET,POPSE-USET,POPCAR
  111. C1T=FSCT+CW/(TWO*FSC)+ASCT*(USCT+USET)/FSC
  112. C2T=FCET+CW/(TWO*FCE)+ACET*(UCET+USET)/FCE
  113. C3T=C1T+C2T-AA*CW/(TWO*FSC)+(ONE-AA)*SC
  114. CT =(USCT*C1T+UCET*C2T+USET*C3T)/(USCT+UCET+USET)
  115. C1R=FSCR+ASCR*(POPSC-USCT)
  116. C2R=FCER+ACER*(POPCE-UCET)
  117. C3R=FSER+ASER*(POPSE-USET)
  118. CR =((POPSC-USCT)*C1R+(POPCE-UCET)*C2R+(POPSE-USET)*C3R)/
  119. & (POPSC+POPCE+POPSE-USCT-UCET-USET)
  120. WRITE (*, '(11X,A5,4F8.2,5X,4F8.2,5X)') 'Costs',
  121. & C1T,C2T,C3T,CT,C1R,C2R,C3R,CR
  122. WRITE (*, '(11X,A5,4F8.2)') 'Fares',PSC,PCE,BB*(PSC+PCE),
  123. & PSC*USCT+PCE*UCET+PSE*USET
  124. WRITE (*, '(11X,A5,37X,4F8.2)') 'Tolls',TAUSC,TAUCE,TAUSE,
  125. & (POPSC-USCT)*TAUSC+(POPCE-UCET)*TAUCE+(POPSE-USET)*TAUSE
  126. PRINT '(90A)', LINE0
  127. CC -------------------------
  128. CC 2 -- UNPRICED EQUILIBRIUM
  129. CC -------------------------
  130. ID = 2
  131. CALL EQUILIBRIUM (TC,USCT,UCET,USET,FSC,FCE,FSE,AA,
  132. 1 ZERO,ZERO,ZERO,ZERO,ZERO,ZERO,ID)
  133. POPTRAIN = USCT+UCET+USET
  134. POPCAR = POP-POPTRAIN
  135. WRITE (*, '(A12,35X,F8.4)' ) 'Unpriced', TC
  136. WRITE (*, '(11X,A5,4F8.2,5X,4F8.2)') 'Users',
  137. & USCT,UCET,USET,POPTRAIN,
  138. & POPSC-USCT,POPCE-UCET,POPSE-USET,POPCAR
  139. C1T=FSCT+CW/(TWO*FSC)+ASCT*(USCT+USET)/FSC
  140. C2T=FCET+CW/(TWO*FCE)+ACET*(UCET+USET)/FCE
  141. C3T=C1T+C2T-AA*CW/(TWO*FSC)+(ONE-AA)*SC
  142. CT =(USCT*C1T+UCET*C2T+USET*C3T)/(USCT+UCET+USET)
  143. C1R=FSCR+ASCR*(POPSC-USCT)
  144. C2R=FCER+ACER*(POPCE-UCET)
  145. C3R=FSER+ASER*(POPSE-USET)
  146. CR =((POPSC-USCT)*C1R+(POPCE-UCET)*C2R+(POPSE-USET)*C3R)/
  147. & (POPSC+POPCE+POPSE-USCT-UCET-USET)
  148. WRITE (*, '(11X,A5,4F8.2,5X,4F8.2)') 'Costs',
  149. & C1T,C2T,C3T,CT,C1R,C2R,C3R,CR
  150. PRINT '(90A)', LINE0
  151. CC -----------------------
  152. CC 2 -- PRICED EQUILIBRIUM
  153. CC -----------------------
  154. C TAUSC= ZERO
  155. C TAUCE= ZERO
  156. C TAUSE= ZERO
  157. C PSC = -0.97D0
  158. C PCE = -0.97D0
  159. C BB = 0.74D0
  160. C PRINT*, '---------PRICED EQUIL'
  161. C CALL EQUILIBRIUM (TC,USCT,UCET,USET,FSC,FCE,AA,
  162. C 1 PSC,PCE,BB,TAUSC,TAUCE,TAUSE)
  163. C WRITE (*,'(4F9.4)') TC, USCT,UCET,USET
  164. CC -----------------------
  165. CC 2 -- ROAD PROFIT
  166. CC -----------------------
  167. CALL PRFROAD (PRFR,TC,USCT,UCET,USET,FSC,FCE,AA,
  168. 1 ZERO,ZERO,ZERO,TAUSC,TAUCE,TAUSE)
  169. C WRITE (*,'(8F9.4)') TC, USCT,UCET,USET,PRFR,TAUSC,TAUCE,TAUSE
  170. WRITE (*, '(A12,35X,F8.4)' ) 'Road prf', TC
  171. POPTRAIN = USCT+UCET+USET
  172. POPCAR = POP-POPTRAIN
  173. WRITE (*, '(11X,A5,4F8.2,5X,4F8.2)') 'Users',
  174. & USCT,UCET,USET,POPTRAIN,
  175. & POPSC-USCT,POPCE-UCET,POPSE-USET,POPCAR
  176. C1T=FSCT+CW/(TWO*FSC)+ASCT*(USCT+USET)/FSC
  177. C2T=FCET+CW/(TWO*FCE)+ACET*(UCET+USET)/FCE
  178. C3T=C1T+C2T-AA*CW/(TWO*FSC)+(ONE-AA)*SC
  179. CT =(USCT*C1T+UCET*C2T+USET*C3T)/(USCT+UCET+USET)
  180. C1R=FSCR+ASCR*(POPSC-USCT)
  181. C2R=FCER+ACER*(POPCE-UCET)
  182. C3R=FSER+ASER*(POPSE-USET)
  183. CR =((POPSC-USCT)*C1R+(POPCE-UCET)*C2R+(POPSE-USET)*C3R)/
  184. & (POPSC+POPCE+POPSE-USCT-UCET-USET)
  185. WRITE (*, '(11X,A5,4F8.2,5X,4F8.2,5X)') 'Costs',
  186. & C1T,C2T,C3T,CT,C1R,C2R,C3R,CR
  187. WRITE (*, '(11X,A5,37X,4F8.2)') 'Tolls',TAUSC,TAUCE,TAUSE,PRFR
  188. PRINT '(90A)', LINE0
  189. CC --------------------
  190. CC 2 -- TRAIN PROFIT
  191. CC --------------------
  192. CALL PRFTRAIN (PRFT,TC,USCT,UCET,USET,FSC,FCE,AA,
  193. 1 PSC,PCE,BB,ZERO,ZERO,ZERO)
  194. WRITE (*, '(A12,35X,F8.4)' ) 'Train prf', TC
  195. POPTRAIN = USCT+UCET+USET
  196. POPCAR = POP-POPTRAIN
  197. WRITE (*, '(11X,A5,4F8.2,5X,4F8.2)') 'Users',
  198. & USCT,UCET,USET,POPTRAIN,
  199. & POPSC-USCT,POPCE-UCET,POPSE-USET,POPCAR
  200. C1T=FSCT+CW/(TWO*FSC)+ASCT*(USCT+USET)/FSC
  201. C2T=FCET+CW/(TWO*FCE)+ACET*(UCET+USET)/FCE
  202. C3T=C1T+C2T-AA*CW/(TWO*FSC)+(ONE-AA)*SC
  203. CT =(USCT*C1T+UCET*C2T+USET*C3T)/(USCT+UCET+USET)
  204. C1R=FSCR+ASCR*(POPSC-USCT)
  205. C2R=FCER+ACER*(POPCE-UCET)
  206. C3R=FSER+ASER*(POPSE-USET)
  207. CR =((POPSC-USCT)*C1R+(POPCE-UCET)*C2R+(POPSE-USET)*C3R)/
  208. & (POPSC+POPCE+POPSE-USCT-UCET-USET)
  209. WRITE (*, '(11X,A5,4F8.2,5X,4F8.2,5X)') 'Costs',
  210. & C1T,C2T,C3T,CT,C1R,C2R,C3R,CR
  211. WRITE (*, '(11X,A5,4F8.2)') 'Fares',PSC,PCE,BB*(PSC+PCE),PRFT
  212. PRINT '(90A)', LINE0
  213. CC --------------------
  214. CC 2 -- SEMI-PUBLIC
  215. CC --------------------
  216. PSC = ZERO
  217. PCE = ZERO
  218. PSE = ZERO
  219. CALL SEMIPUBLIC (PRFT,PRFR,TC,USCT,UCET,USET,FSC,FCE,AA,
  220. 1 PSC,PCE,BB,TAUSC,TAUCE,TAUSE)
  221. WRITE (*, '(A12,35X,F8.4)' ) 'Semi-pub', TC
  222. POPTRAIN = USCT+UCET+USET
  223. POPCAR = POP-POPTRAIN
  224. WRITE (*, '(11X,A5,4F8.2,5X,4F8.2)') 'Users',
  225. & USCT,UCET,USET,POPTRAIN,
  226. & POPSC-USCT,POPCE-UCET,POPSE-USET,POPCAR
  227. C1T=FSCT+CW/(TWO*FSC)+ASCT*(USCT+USET)/FSC
  228. C2T=FCET+CW/(TWO*FCE)+ACET*(UCET+USET)/FCE
  229. C3T=C1T+C2T-AA*CW/(TWO*FSC)+(ONE-AA)*SC
  230. CT =(USCT*C1T+UCET*C2T+USET*C3T)/(USCT+UCET+USET)
  231. C1R=FSCR+ASCR*(POPSC-USCT)
  232. C2R=FCER+ACER*(POPCE-UCET)
  233. C3R=FSER+ASER*(POPSE-USET)
  234. CR =((POPSC-USCT)*C1R+(POPCE-UCET)*C2R+(POPSE-USET)*C3R)/
  235. & (POPSC+POPCE+POPSE-USCT-UCET-USET)
  236. WRITE (*, '(11X,A5,4F8.2,5X,4F8.2,5X)') 'Costs',
  237. & C1T,C2T,C3T,CT,C1R,C2R,C3R,CR
  238. WRITE (*, '(11X,A5,4F8.2)') 'Fares',PSC,PCE,BB*(PSC+PCE),PRFT
  239. WRITE (*, '(11X,A5,37X,4F8.2)') 'Tolls',TAUSC,TAUCE,TAUSE,PRFR
  240. PRINT '(90A)', LINE0
  241. CC --------------------
  242. CC 2 -- DUOPOLY
  243. CC --------------------
  244. CALL DUOPOLY (PRFT,PRFR,TC,USCT,UCET,USET,FSC,FCE,AA,
  245. 1 PSC,PCE,BB,TAUSC,TAUCE,TAUSE)
  246. WRITE (*, '(A12,35X,F8.4)' ) 'Duopoly', TC
  247. POPTRAIN = USCT+UCET+USET
  248. POPCAR = POP-POPTRAIN
  249. WRITE (*, '(11X,A5,4F8.2,5X,4F8.2)') 'Users',
  250. & USCT,UCET,USET,POPTRAIN,
  251. & POPSC-USCT,POPCE-UCET,POPSE-USET,POPCAR
  252. C1T=FSCT+CW/(TWO*FSC)+ASCT*(USCT+USET)/FSC
  253. C2T=FCET+CW/(TWO*FCE)+ACET*(UCET+USET)/FCE
  254. C3T=C1T+C2T-AA*CW/(TWO*FSC)+(ONE-AA)*SC
  255. CT =(USCT*C1T+UCET*C2T+USET*C3T)/(USCT+UCET+USET)
  256. C1R=FSCR+ASCR*(POPSC-USCT)
  257. C2R=FCER+ACER*(POPCE-UCET)
  258. C3R=FSER+ASER*(POPSE-USET)
  259. CR =((POPSC-USCT)*C1R+(POPCE-UCET)*C2R+(POPSE-USET)*C3R)/
  260. & (POPSC+POPCE+POPSE-USCT-UCET-USET)
  261. WRITE (*, '(11X,A5,4F8.2,5X,4F8.2,5X)') 'Costs',
  262. & C1T,C2T,C3T,CT,C1R,C2R,C3R,CR
  263. WRITE (*, '(11X,A5,4F8.2)') 'Fares',PSC,PCE,BB*(PSC+PCE),PRFT
  264. WRITE (*, '(11X,A5,37X,4F8.2)') 'Tolls',TAUSC,TAUCE,TAUSE,PRFR
  265. PRINT '(90A)', LINE3
  266. WRITE (*, '(16X,4A8,5X,4A8)') 'SC','CE','SE','AGR',
  267. & 'SC','CE','SE','AGR'
  268. PRINT '(90A)', LINE0
  269. C ---------------------------------------------
  270. C 1 -- COMPUTE THE OPTIMUM WITH DIRECT TRAIN SE
  271. C ---------------------------------------------
  272. ID=10
  273. CALL OPTIMUM (TC,USCT,UCET,USET,FSC,FCE,FSE,AA,
  274. 1 PSC,PCE,BB,TAUSC,TAUCE,TAUSE,ID)
  275. WRITE (*, '(A12,35X,F8.4)' ) 'Optimum', TC
  276. POPTRAIN = USCT+UCET+USET
  277. POPCAR = POP-POPTRAIN
  278. WRITE (*, '(11X,A5,4F8.2,5X,4F8.2)') 'Users',
  279. & USCT,UCET,USET,POPTRAIN,
  280. & POPSC-USCT,POPCE-UCET,POPSE-USET,POPCAR
  281. C1T=FSCT+CW/(TWO*FSC)+ASCT*USCT/FSC
  282. C2T=FCET+CW/(TWO*FCE)+ACET*UCET/FCE
  283. C3T=FSET+CW/(TWO*FSE)+ASET*USET/FCE
  284. CT =(USCT*C1T+UCET*C2T+USET*C3T)/(USCT+UCET+USET)
  285. C1R=FSCR+ASCR*(POPSC-USCT)
  286. C2R=FCER+ACER*(POPCE-UCET)
  287. C3R=FSER+ASER*(POPSE-USET)
  288. CR =((POPSC-USCT)*C1R+(POPCE-UCET)*C2R+(POPSE-USET)*C3R)/
  289. & (POPSC+POPCE+POPSE-USCT-UCET-USET)
  290. WRITE (*, '(11X,A5,4F8.2,5X,4F8.2)') 'Costs',
  291. & C1T,C2T,C3T,CT,C1R,C2R,C3R,CR
  292. WRITE (*, '(11X,A5,4F8.2)') 'Fares',PSC,PCE,BB,
  293. & PSC*USCT+PCE*UCET+PSE*USET
  294. WRITE (*, '(11X,A5,37X,4F8.2)') 'Tolls',TAUSC,TAUCE,TAUSE,
  295. & (POPSC-USCT)*TAUSC+(POPCE-UCET)*TAUCE+(POPSE-USET)*TAUSE
  296. PRINT '(90A)', LINE0
  297. CC ----------------------------------------------
  298. CC 2 -- UNPRICED EQUILIBRIUM WITH DIRECT TRAIN SE
  299. CC ----------------------------------------------
  300. ID = 11
  301. CALL EQUILIBRIUM (TC,USCT,UCET,USET,FSC,FCE,FSE,AA,
  302. 1 ZERO,ZERO,ZERO,ZERO,ZERO,ZERO,ID)
  303. WRITE (*, '(A12,35X,F8.4)' ) 'Unpriced', TC
  304. POPTRAIN = USCT+UCET+USET
  305. POPCAR = POP-POPTRAIN
  306. WRITE (*, '(11X,A5,4F8.2,5X,4F8.2)') 'Users',
  307. & USCT,UCET,USET,POPTRAIN,
  308. & POPSC-USCT,POPCE-UCET,POPSE-USET,POPCAR
  309. C1T=FSCT+CW/(TWO*FSC)+ASCT*USCT/FSC
  310. C2T=FCET+CW/(TWO*FCE)+ACET*UCET/FCE
  311. C3T=FSET+CW/(TWO*FSE)+ASET*USET/FCE
  312. CT =(USCT*C1T+UCET*C2T+USET*C3T)/(USCT+UCET+USET)
  313. C1R=FSCR+ASCR*(POPSC-USCT)
  314. C2R=FCER+ACER*(POPCE-UCET)
  315. C3R=FSER+ASER*(POPSE-USET)
  316. CR =((POPSC-USCT)*C1R+(POPCE-UCET)*C2R+(POPSE-USET)*C3R)/
  317. & (POPSC+POPCE+POPSE-USCT-UCET-USET)
  318. WRITE (*, '(11X,A5,4F8.2,5X,4F8.2,5X)') 'Costs',
  319. & C1T,C2T,C3T,CT,C1R,C2R,C3R,CR
  320. PRINT '(90A)', LINE1
  321. END