Capacity Calculator - Pages



CAP2000

Capacity Calculator

Program Documentation

by

Greg Giaimo, P.E.

for

Ohio Department of Transportation

Office of Technical Services

July 2001

Contents

Introduction 3

Changes From CAP94 4

Program Operation 6

Program Installation & Usage 7

Link Data Requirements by Level of Detail Setting 9

Parameters Coding and Default Values 13

Appendix A Program Flow Chart 17

Appendix B Program Source Code 36

Appendix C Sample Parameter File 58

Appendix D Standard Functional Class & Areatype Coding 60

Appendix E NETPOP.BAT 62

Introduction

This document serves as an introduction and user's guide to the assignment network capacity calculating program CAP2000. This is a FORTRAN program for calculating link capacities which follows the procedures set forth in the 2000 Highway Capacity Manual (HCM). The intent of the program is to generate consistent capacities for all MPO area travel demand forecasting networks so that the results of air quality and congestion management analysis are consistent and comparable throughout the state.

CAP2000 is the latest link in an evolutionary chain which begain with a program written to calculate capacities for the Steubenville MPO networks in 1993. This program was needed because the capacities in that MPO network were found to be in disarray when the model was validated. The program was originally written on the mainframe and utilized 1985 HCM procedures. In 1995, with the prominence of air quality analysis and the advent of MPO congestion management systems, it was decided that a consistent method for determining capacities across the various MPO models was needed. This led to the development of the CAP94 program which significantly revised the Steubenville capacity program to follow the 1994 HCM and to account for the cross street characteristics when determining urban street capacities. CAP2000 is a complete rework of the CAP94 software, taking advantage of the many new techniques presented in the 2000 HCM. The next section details the differences between CAP2000 and CAP94, further sections discuss program operation, link file coding, parameter coding and test results.

Changes From CAP94

The differences between CAP2000 and CAP94 can be summarized into 3 categories, usage differences, procedural differences and input data changes.

In terms of usage, CAP2000 uses the same I/O structures as CAP94 so it can be run the same way by typing in the CAP2000 command with or without command line arguments. The program continues to require input link and node files and a parameter file. The major difference in usage results because ODOT now maintains the network files in DBASE format. While CAP2000 itself continues to use a form of the Tranplan ASCII files, CAP2000 should be run via the supplied batch file NETPOP which accomplishes all necessary database conversions, runs capacity calculator, runs a free flow speed generator and runs the turn penalty calculator. The batch file then merges the new data with the original database (into a new DBASE file) and cleans up all the scratch files.

Procedurally, CAP2000 is very different from CAP94. This is due to the many changes in the 2000 HCM. These changes included not only revised procedures but also clearer guidance on application of the methods for planning purposes as well as better documentation of recommended default values. Changes include:

-LOS C capacities are no longer computed, the concept of practical (LOS C) capacity has long ago disappeared from the HCM and was retained only to accommodate the old BPR curve, this curve will be replaced based on recommendations in Chapter 30 of the HCM which gives LOS E based curves for various facility types, intersection densities and free flow speeds.

-Freeway capacity methodology is completely revised to use a free flow speed methodology similar to that previously employed on rural multi-lane highways. As part of this methodology, number of lanes and interchange density (i.e. areatype) now impact urban freeway capacity. In addition, higher assumed free flow speeds were used per guidance in the HCM.

-Rural Multi-lane Highways use essentially the same methodology as CAP94, however, a new options has been added to compute the free flow speed used in this methodology based upon the posted speed, this option would generally not be used, however, because using it removes the impact of such things as roadway width and it is not consistent with the free flow speed computations used for other roadway types.

-Rural 2 lane highways is completely different, the new methodology is free flow speed based and the capacities are essentially only impacted by the terrain type and the percent trucks, they are no longer dependent on directional distribution or percent no passing.

-Urban street capacities have been completely revised. The new methodology determines the capacity of the street based upon the lane group containing the through movement only. In this methodology the saturation flow rate is now dependent on the percent turns directly. This method is much more streamlined than the old procedure as can be seen through a comparison of the CAP94 and CAP2000 flow diagrams. Because this capacity computation does not include the volume in turn lane groups, the capacities are post-weighted to account for this volume because the volume coming from the models used in V/C ratio computations will include the turning volumes.

-The intersection type link code has been fully implemented. As with CAP94, no code represents a pre-timed signal while a code of 1 is a coordinate signal, actuated signals no longer play a roll in the capacity calculation. Codes 2-4 now produce stop sign controlled capacities for 2 way stop, no control and 4 way stop respectively. Rather than a full implementation of the HCM Chapter 17 procedures, CAP2000 currently uses a lookup table approach based on the service volume tables in Chaper 10. This simplified method was used because the intersection control field is not currently part of the standard LOD 3 data requirements so it will not be used much.

-CAP2000 allows treatment of centroid connectors as local streets they can be ignored when determining the cross street of a link., CAP94 always treated them as local streets.

-CAP2000 ignores shape nodes (nodes with only 2 non-centroid links) and searches down a link chain for a true intersection when determining capacity of an urban street, CAP94 simply reverted to rural capacity calculations when it encountered shape nodes.

-While CAP94 allowed the computation of all capacties using the rural methodology, CAP2000 also allows all capacities to be computed using the urban street methodology (except on freeways). Additionally, CAP2000 allows suburban links to be treated as rural or urban at the users discretion.

The input data for CAP2000 is similar to CAP94 in that a link, node and parameter file are needed. The link and node file data definitions have remained nearly identical (by design), however, the items in the parameter file have changed significantly.

The only change to the link file fields is in the way the parking codes are coded. In CAP94 a blank in this field meant no parking (in the peak period for 24 hour models) while any other value indicated there was parking and 1 lane would be subtracted (in addition, a parking adjustment factor to saturation flow rate was computed). To add some flexibility, in CAP2000, a blank parking field still means no parking, however, only codes 0,1 and 2 mean that there is parking and the number coded is the number of lanes that will be subtracted from those coded. The major change impacting the link and node files is that those files are now maintained in a DBASE format rather than as ASCII files. To simplify the coding, CAP2000 itself still uses an 80 character ASCII link file format, however, it is assumed that this file will be created from the DBASE network using the batch file explained in the Program Usage Section.

-CAP94 parameter file options no longer supported by CAP2000:

Parameter Reason

TPN Planpac networks are no longer accepted

LOSE LOS C capacities are no longer an option

CPX HCM 2000 does not give a recommended default for skipping this computation

MID This has been changed to MTD and now has 3 possible values to allow all urban computations

DIS No applicable becaue this dealt with LOS C issues

FWY CAP2000 uses the Ohio standard facility type and areatype coding so this parameter is not needed

ART CAP2000 uses the Ohio standard facility type and areatype coding so this parameter is not needed

COL CAP2000 uses the Ohio standard facility type and areatype coding so this parameter is not needed

LOC CAP2000 uses the Ohio standard facility type and areatype coding so this parameter is not needed

RMP CAP2000 uses the Ohio standard facility type and areatype coding so this parameter is not needed

RUR CAP2000 uses the Ohio standard facility type and areatype coding so this parameter is not needed

RES CAP2000 uses the Ohio standard facility type and areatype coding so this parameter is not needed

CBD CAP2000 uses the Ohio standard facility type and areatype coding so this parameter is not needed

%NP No longer used by rural 2 lane methodology

D2L No longer used by rural 2 lane methodology

-New CAP2000 parameter file options:

Parameter Reason

MTD See MID above

SPD Allows the posted speed to be used to compute the free flow speed on rural multi-lane highways

S2R Allows suburban roads to use the rural computation method

C2L Allows centroid connectors to be treated as local streets

%TN Allows the user to specify the percentage of turns for each street/cross street combination

LTL Allows the user to specify the default left turn lane for each street/cross street combination

RTL Allows the user to specify the default right turn lane for each street/cross street combination

PGN Allows the user to specify the percent green for each street/cross street combination

CYC Allows the user to specify the signal cycle lengths

-Finally the use of a couple parameter file options has been changed as follows:

Parameter Reason

PHF CAP2000 only specifies one rural and one urban PHF rather than different values by road type

%TK In CAP2000, rural and urban multi-lane highways use the first 2 values, rural and urban 2 lane roads use the second 2 values and urban streets use the last value, the urban value for multi-lane highways is only used for freeways and when MTD is set to R, the urban value for 2 lane roads is only used when MTD is set to R

Program Operation

A logic flow chart for the program is included as Appendix A and the program source code as Appendix B to this document. Program operation will require 2 or 3 input files. The link file, a parameter file and optionally a node (grid) file. The parameter file is discussed in detail in a following section. A sample parameter file is included as Appendix C. Program operation can be summarized as follows:

• Read Parameters

• If SUBRUR=Y, Change Suburban to Rural Type 2 (uses urban data with rural method)

• If CENTLOC=Y, Change Centroids to Local

• Write Log File

• Read Node File

• Read Link File Skipping LOD 3 Data if LOD set to 1

• Make Width Directional if Necessary

• Over-ride Truck and Terrain Type if Coded on Link

• Approximate Number of Lanes if Not Coded on Link

• Calculate Capacity Independently for Each Link Direction

1. If the Link has a Functional Class of Freeway use Chapter 23 HCM Procedures

2. If the Link is not Freeway and has an Area Type of Rural or is an On-Ramp or MTD is set to R or there is only 1 Link at the Node or Intersection Type is 3:

a. If it is a 2 Lane Road Use Chapter 20 HCM Procedures

b. If it is a Muli-Lane Highway Use Chapter 21 HCM Procedures

3. If the Link is a Non freeway Urban Street or Off-Ramp or MTD is set to U use Chapter 15 and 16 HCM Procedures

(These calculations are based on intersection capacity criteria. The functional class

on the link and the cross street links may be used to determine intersection characteristics needed for the

computations. The intersection assumptions based on the functional classes are shown in a later section.

This computation explicitly considers the difference between nodes with only 1, 2, 3 or 4 links. Use of

functional class cross street comparisons can be over ridden through parameter XST.)

Factor the Capacity by a Constant if Desired

Balance the Directional Link Capacities by Selecting the Minimum of the Two if Desired

• A KFACT is Applied to Adjust the Capacity from a 1 Hour Value to the Model Analysis Period (Usually 24 Hours)

Program Installation & Usage

CAP2000 is supplied in a zipped file containing all necessary executables and batch files, a sample parameter file and the ODOT free flow speed table. This file will either be sent on floppy disk or via email. The zipped file should be copied to a directory that exists on the users PATH and unzip the file using WINZIP. The parameter file should then be copied to the users working directory and edited to cause CAP2000 to run as desired.

CAP2000 should be executed using the supplied batch file called NETPOP.BAT (shown in Appendix E). This batch file translates the DBF network to a modified form of the old 80 character ASCII link file for use by CAP2000. NETPOP also runs programs for creating free flow speeds and turn penalties. If these functions are not desired the batch file can be modified to remove the unwanted computations. To run NETPOP simply type:

NETPOP

In the above command line, specific file names should be inserted between the , the file name extensions shown merely indicate the file type (DBASE or ASCII) the user is free to use whatever file name extensions they wish. To run NETPOP it is important that the following executable files exist in a directory in the users PATH or in the directory from which NETPOP is run: CAP2000.EXE, DBFMRG2.EXE, DBFLNKA.EXE, DBF2ASCA.BAT, ASC2DBFA.BAT, ASCDBFA.EXE, SPD2000.EXE, TURN2000.EXE, LOG2000.EXE.

The various input files should generally exist in the directory from which NETPOP is run, it is possible to specifiy directory paths with the file names, however, this is not recommended because the number of command line arguments is quite large and there is a limit on the total number of characters that all command line arguments can contain.

Note that CAP2000 outputs only 1 value of capacity. When running via NETPOP with the supplied ASC2DBFA.BAT file this value will be placed in the CAP24 field of the standard DBASE link file. To use CAP2000 for time of day models with multiple periods, CAP2000 must be run once for each period. Instead of running ASC2DBFA.BAT, however, one of the ASC2DBF1.BAT, ASC2DBF2.BAT etc batch files must be used to place the resultant capacity in the corresponding CAP1, CAP2, CAP3 or CAP4 fields of the standard DBASE link file. NETPOP.BAT can be modified in such a case to make all of the necessary capacity runs and place the data in the desired fields.

CAP2000 can also be executed independently if the ASC2DBFA batch file is run first without modifying any of the options in that batch file. To run CAP2000 independently type:

CAP2000

or just type

CAP2000

and respond to the prompts for the four file names.

The program creates a log file named CAP2000.LOG. This file will be over written if it exists in the directory where the program is run, so it should be renamed if it is desired to keep it. The log file tells what files and parameters were used in executing the program.

The operation of CAP2000 is controlled via its parameter file. This is required because CAP2000 is very flexible and can be run a variety of different ways and with over-rides to many of it default values. The parameter file is an ASCII text file than can be edited with any text editor, it is explained in detail in the section on Parameter Coding & Assumed Values. If CAP2000 will be used in conjunction with SPD2000, it should be noted that SPD2000 uses the capacity calculator parameter file for parameters LOD, WFY, WDR and TER, likewise program TURN2000 can use the same parameter file (with some extra parameters) in which case it uses parameter C2L.

In addition to the data in the parameter file, the capacity calculator needs link specific data which is coded on the link file. The next section shows the various link data and the columns of the link file where the data is coded. As mentioned previously, the link and node files should be in the ODOT standard DBASE format. It is very important that prior to running CAP2000 the DBASE link file be changed as follows:

• Recode the FUNCLASS field to the Ohio standard codes

• Recode the AREATYPE field to the Ohio standard codes

• Change field POSTTIME to SPEEDMOD

This last change is actually only required if the SPD2000 program will be run. CAP2000 can be run without this change, however, the supplied DBF2ASCA.BAT program must then be modified so as not to reference DBASE field 5 which it will expect to be called SPEEDMOD.

Additional changes to the DBASE link file will be required for the SPD2000 program. These are repeated here for convenience:

• Move the old model speed out of the POSTSPD field (if its there) to PEAKSPD

• Populate the POSTSPD field with posted speed limits

• If the user has anything in the LNKGRP field, move it somewhere else

• For consistency with the new Ohio standard, users might also want to rename the FACTYPE field FEDFUNC

The capacity calculator should be run as part of the job stream for creating networks for traffic assignments and post-processing. Capacities should not be hard coded. If the capacities on a link are incorrect, then the data that generates those capacities should be examined. If there is still a problem, then the capacity adjustment factor should be set to modify the calculated capacity as needed. Use of this factor will allow easy identification in the future of areas where the capacity had to be adjusted.

Link Data Requirements by Level of Detail Setting

The link file should contain a number of data items used to determine the specific capacity of that link. This information is primarily road geometry information including (number of lanes, number of intersection left, through, right turn lanes, number of mid-link median turn lanes and total roadway width). Roadway type data is also used (functional class and area type). Finally roadway condition over-rides are provided for 5 parameters (parking (which is assumed non-existent otherwise), percent trucks, terrain type (grade), intersection type and a catchall special condition capacity adjustment factor). Obviously there are other factors affecting roadway capacity such as signal timing, directional split, peak hour factor etc. Link over-rides were not provided for these other factors for several reasons. First, the link over-rides were selected to be policy variables. The link over-rides are items that can be changed by policy makers. Second, the link over-rides were chosen for their consistency through time. Travel demand forecasting is a long range planning tool so the variables of interest should be long range in nature to give validity to the long range projections. Third, the number of over-rides and the effort at collecting and coding them had to be kept to a minimum.

Capacity coding will be based on three levels of detail, each level more detailed than the one before. The purpose of the leveled approach is to provide uniform capacity coding procedures which will allow for better comparison's between congestion levels in various areas of the state. It is intended that all MPO networks will now be coded to LOD 3, therefore LOD 1 is only included for transitional purposes. LOD 2 was a transitional level in which only the state system would be coded to LOD 3 standards, as the current move is towards complete migration to LOD 3, LOD 2 can now be considered obsolete.

All levels of detail require that the parameters on the attached parameters list be coded. These parameters define area specific default values. Some of these values can be overridden on a link by link basis depending on the level of analysis chosen. The parameters also control several program operational characteristics such as whether or not capacities will be balanced by direction.

Level 1

This is the most basic level of detail. Four items are required, three of which already existed in the travel networks prior to implementation of the first capacity calculator.

|Class |Field Name (Num) |Description |Required/Over-r|Notes |

| | | |ide | |

|Highway |TWIDTH (10) |Width |Required |Width will be coded for the full curb to curb distance. For roads |

|Geometrics | | | |without curbs, the width is from edge of pavement to edge of pavement |

| | | | |excluding shoulders. If the shoulders are paved it can be measured |

| | | | |based onlane striping. Roadway width corresponds to the SURFACE WIDTH|

| | | | |field in ODOT's Road Inventory database. The practice of full width |

| | | | |coding avoids ambiguity introduced by median turn lanes. The width |

| | | | |coded on a link is the width of that link only, thus freeways and |

| | | | |divided highways coded as two one way links will have only the one |

| | | | |directions width coded on each link. Note that in DBASE, 2 way links |

| | | | |are stored as one way pairs, however, they have the same ANODE and |

| | | | |BNODE and are thus considered the same link by capacity calculator as |

| | | | |opposed to the oneway pairs of freeways which have different ANODE's |

| | | | |and BNODE's. Width will be used in the capacity calculation to |

| | | | |determine lane widths and median turn lane presence when not coded. |

|

|Highway Class |FUNCLASS (8) |Functional Class |Required |The model network functional class codes have recently been |

| | |(Facility Type) | |standardized (see Appendix D). Functional class for modeling is |

| | | | |distinct from the federal functional class (maintained as a separate |

| | | | |attribute) on which it is based. For example, rural multi-lane |

| | | | |limited access divided highways are coded as expressways instead of |

| | | | |arterials. This will yield freeway type capacities on these |

| | | | |facilities instead of arterial street capacities. In addition ramp |

| | | | |and centroid connector classifications exist which are not part of the|

| | | | |federal functional class. Finally, the user is free to change the |

| | | | |functional class of any roadway whose operating conditions more |

| | | | |closely resemble some other class. Functional classification is used |

| | | | |to determine whether or not freeway capacities will be used and on |

| | | | |urban streets is used to determine the green splits, turning movements|

| | | | |and default turn lanes if XST is set to Y. Capacity calculator only |

| | | | |uses the first digit of the 2 digit standard functional class codes. |

|

|Access Category |AREATYPE (11) |Area Type |Required |CAP2000 uses the standardized areatype definitions (see Appendix D). |

| | | | |Areatype is specifically a surrogate measure of intersection and |

| | | | |access point density. Area type is primarily used to distinguish that|

| | | | |region which uses midlink capacities (rural) versus that which uses |

| | | | |intersection capacities (urban) this fact should be kept in mind when |

| | | | |updating link area types. The Highway Capacity Manual defines those |

| | | | |areas where midlink capacities are applicable as those where |

| | | | |controlled intersections are spaced at least 2 miles apart. Mid-link |

| | | | |capacities are used on those links with the rural and low access urban|

| | | | |area types and intersection capacities will be used on all others |

| | | | |including outlying business district, suburban, urban and CBD. This |

| | | | |can be overridden by setting MTD to R in which case mid-link |

| | | | |capacities are generated for all surface streets (non-freeway) or |

| | | | |setting MTD to U in which case intersection capacities will be |

| | | | |generated for all surface streets. Additionally, setting the S2R |

| | | | |parameter to Y will cause suburban (residential) streets to use |

| | | | |mid-link capacities. Areatype also determines the PHF and % Trucks |

| | | | |used for the computations and this is not changed by the settings of |

| | | | |MTD or S2R. For freeways, areatype controls the free flow speed and |

| | | | |the interchange density parameter which means that rural freeways will|

| | | | |have highway capacity than urban which are higher than CBD. Finally, |

| | | | |for urban streets CBD areatype has higher pedestrian volumes, bus |

| | | | |blockage factors, cycle length and an area factor of 0.9. |

|

|Highway |LANES (9) |Number of Lanes (Mid |Required |Number of lanes should be coded by direction for the middle of the |

|Geometrics | |Link) | |link (i.e. disregarding intersection turn lanes). In addition, |

| | | | |mid-link median turn lanes should be disregarded. Links representing |

| | | | |roads with reversible lanes should be coded as having the full number |

| | | | |of lanes including reversible lanes in each direction, thus a road |

| | | | |with 1 lane in each direction plus 1 reversible lane would be coded 2 |

| | | | |lanes in each direction. If a link has a different number of mid-link|

| | | | |lanes at different places then it should be split into several links. |

| | | | |Number of lanes should include lanes where parking is allowed. This |

| | | | |convention is consistent with past width coding practice. If, |

| | | | |however, number of lanes has been coded as operating lanes only, |

| | | | |parking should be coded as 0 instead of 1 (see below). |

|

In addition to these items, the capacity adjustment factor coded in columns 78-79 may be used for all levels of analysis where it is needed to reflect unusual circumstances. Use of the capacity adjustment factor should be very limited to maintain the consistency of the capacities, it should only be applied under unusual circumstances, not routinely and only if changes to other link data impacting capacities does not produce the desired result.

Level 2

Level 2 was the same as Level 3 except LOD 3 detail was intended to be applied only to the state system as a transitional measure. LOD 2 is obsolete because the current intention is to bring all networks to LOD 3.

Level 3

Level 3 uses all of the items in Level 1. In addition, extra data is required for all links. Following are the additional items required for LOD 3.

|Class |Field Name (Num) |Description |Required/Over-r|Notes |

| | | |ide | |

|Highway |TURNLANE (15) |Number of Intersection |Required |These codes are not needed on freeways, expressways and will not |

|Geometrics | |Turn Lanes | |affect rural roads either. Number of Turn Lanes are coded as 0 ,1, 2 |

| | | | |or 3 for No turn lane, Left turn lane only, Right turn lane only, or |

| | | | |Both left and right turn lanes. Note that 0 or blank are not the same|

| | | | |thing, blank indicates that the defaults shown on the intersection |

| | | | |assumptions page should be used. |

|

|Highway |IXTHRU (14) |Number of Intersection |Over-ride |By default, this value will be set to the number of mid-link lanes, |

|Geometrics | |Through Lanes | |however for level of detail 2 and above a value should be coded if |

| | | | |this is not true. Leaving this blank or zero accepts the default. |

| | | | |This values is not needed on freeways and expressways and will not |

| | | | |affect rural roads either. |

|

|Highway |MEDTURN (16) |Existance of a Mid-link|Over-ride |0 indicates no turn lane, 1 indicates there is one. By default, if |

|Geometrics | |Median Turn Lane | |after subtracting the mid-link number of lanes * 12 from the |

| | | | |directional width there are at least 4 feet left, the calculator |

| | | | |assumes this is 1/2 of a median turn lane. Zero and blank are the |

| | | | |same for this code. Mid link median turn lanes only affect rural |

| | | | |multilane highway capacities. |

|

|Parking |PARKING (12) |Existance of On Street |Required |Coding 0, 1 or 2 indicates that on street parking is allowed during |

| | |Parking | |the model period, for 24 hour models code parking if parking exisits |

| | | | |during the peak period. If parking is only allowed off-peak in a 24 |

| | | | |hour model then code as no parking. No parking is coded with any |

| | | | |value other than 0, 1 or 2. The value coded is the number of lanes |

| | | | |that will be subtracted from the coded number of lanes. If total |

| | | | |lanes including those used for parking have been coded, code a 1 when |

| | | | |parking exists, if only operating lanes have been coded, code a 0 when|

| | | | |parking exists. For one way streets with parking on both sides, code |

| | | | |a 2 if total lanes have been coded, code a 0 if only operating lanes |

| | | | |have been coded. If the on street parking does not use up a travel |

| | | | |lane, code 0 for the parking regardless of how the through lanes are |

| | | | |coded elsewhere. Zero and blank are not the same for this field, |

| | | | |blank indicates no parking while 0 is parking with 0 lanes subtracted.|

| | | | |The parking code causes a reduction in capacity due to the parking |

| | | | |maneuvers adjustment factor to saturation flow rate, therefore coding |

| | | | |a parking code of 0 will reduce capacity even though no lanes are |

| | | | |subtracted. |

|

|Link Over-rides |PCTTRK (17) |Percent Trucks |Over-ride |The value coded on the link will over-ride that on the parameter card.|

| | | | |Note that blank and zero are not the same. Zero indicates 0% trucks |

| | | | |while blank accepts the default coded on the parameter card. |

|

|Link Over-rides |TERRAIN (13) |Terrain Type |Over-ride |Code 1 for level, 2 for rolling (moderate grade) and 3 for mountainous|

| | | | |(steep grade). Using these codes allows the individual grade |

| | | | |characteristics of a link to be approximated. Since the code is by |

| | | | |direction, the terrain for the opposite directions can be coded |

| | | | |differently to reflect uphill vs. downhill conditions. Leaving these |

| | | | |codes blank accepts the default terrain coded in the parameter card. |

| | | | |Level terrain is for links with less than 2% grades or for 2-3% grades|

| | | | |for less than 1 mile or 3-4% grades for less than 0.25 miles. Rolling|

| | | | |terrain is for links with 2-3% grades over 1 mile, 3-4% grades over |

| | | | |0.25 miles, 4-5% grades under 0.75 miles and 5-6% grades under 0.3 |

| | | | |miles. Mountainous terrain is for more severe conditions and should |

| | | | |rarely be encountered in Ohio. In determining the length of a grade, |

| | | | |the complete length of the grade, not just that portion on a specific |

| | | | |link should be considered. |

|Link Over-rides |IXTYPE(19) |Intersection Type |Over-ride |Code 0 for Pretimed Signal, 1 for Interconnected Signal, 4 for 4 way |

| | | | |stop, 2 for 2 way stop and 3 for no control. |

|

Special Project Detail

With the move to LOD 3, little additional detail is necessary in the vicinity of special projects. Users may wish to code more of the default over-rides shown in the above tables in the vicinity of a special project.

Parameters Coding & Default Values

The capacity calculator uses a parameter file to control its operation and default data. This file is an ASCII text file that can be edited with any text editor. An example is shown in Appendix C. Each parameter is entered on its own record. Parameters may be entered in any order. Each parameter listing must start with the three letter abbreviations shown below followed by a comma. Values for the parameter then follow. Multiple parameter values are separated with commas. If a parameter requires multiple values, all must be entered, even if the default value is desired for some of the values. Comments may be placed in columns 60 and greater as this area is ignored by the program. Any parameter record not beginning with one of the abbreviations below is treated as a comment and shadowed to the log file.

List of Parameters used in Capacity Calculator

Abbreviation Full Name Description

BAL Balance Capacities Y=Capacity equals minimum of A-B, B-A capacity

N=Capacity remains as calculated

C2L Centroids to Locals Y=Centroid connectors are local roads when determining cross streets

N=Ignore centroid connectors when determining cross streets

CYC Cycle Length Signal Cycle length, first value for non-CBD, second value for CBD

DIR Directional Split For calculating opposing volume on urban arterials

GRD Node File Present Y=Node file is present

N=No node file.

INC Increment Factor Adjustment Factor Increment, this value is multiplied by the value coded in columns 78-79 of the link file and treated as an adjustment to the computed capacity

KFC Hourly/Daily Factor Factor for converting hourly capacity to the model analysis period

LOD Level of Detail Code 1 causes all non-Level of Detail 1 data to be ignored

LTL Left Turn Lane Default left turn lanes for each street/cross street combination listed

in the order shown in the defaults table below

MTD Capacity Method N=Use intersection capacity in urban areas, midlink in rural

R=Use midlink capacity for all links

U=Use intersection capacity for all non-freeway links

PGN Percent Green Percent green for each street/cross street combination listed

in the order shown in the defaults table below

%TK Percent Trucks %Trk for Rural Mulilane, Urban Multilane, Rural 2 lane, Urban 2 lane,

Urban streets

%TN Percent Turns Percent left & right turns for each street/cross street combination listed

in the order shown in the defaults table below

PHF Peak Hour Factor PHF for Rural and Urban

RTL Right Turn Lane Default right turn lanes for each street/cross street combination listed

in the order shown in the defaults table below

SPD Multi-lane Speed Y=Use link speed to determine multi-lane highway free flow speed

N=Calculate multi-lane highway free flow speed using HCM

S2R Suburban to Rural Y=Use mid-link capacities for suburban streets

N=Use intersection capacities for suburban streets

TER Terrain Type LEV=level, ROL=rolling, MOU=mountainous

WDR Width Directional Y=Link widths are by direction

N=Link widths are for total roadway width

WFY Freeway Width Y=Freeway widths are by direction

N=Freeway widths are for total 2 link pair

XST Cross Streets Y=Take cross street functional class and number of links into account

N=Urban capacities independent of other links

Defaults

Parameters that are omitted will default as shown below. Numerical default values are recommended values. Parameters with Y/N input values always default to N, however, N is not always the recommended value as discussed below.

Parameter Default Value

All Y,N Parameters N

CYC 70, 100

DIR 0.60

INC 0.10

KFC 0.10

LOD 1

MTD N

%TN 10, 5, 14, 2, 2

PHF 0.88, 0.92

TER LEV

Parameters based on street cross street combinations are given for 11 different combinations in the order shown in the following defaults table:

Street XStreet LTL RTL %TN PGN

Arterial Arterial 1 0 0.2 0.45

Arterial Collecter 1 0 0.1 0.50

Arterial (2 Lane) Local 0 0 0.05 0.55

Arterial (Else) Local 1 0 0.05 0.55

Collector Arterial 1 0 0.25 0.40

Collector (2 Lane) Collecter 0 0 0.2 0.45

Collector (Else) Collecter 1 0 0.2 0.45

Collector Local 0 0 0.1 0.50

Local Arterial 0 0 0.3 0.35

Local Collecter 0 0 0.25 0.40

Local Local 0 0 0.2 0.45

Notes:

Left and right percent turns assumed equal, a value of 0.2 implies 20% left, 20% right and 60% through

The base leg of a T intersection has no through movement so the percent turns is 50%. No turn lanes are assumed on one way streets.

Discussion of Parameters

Any record in the parameter file not beginning with one of the three letter abbreviations listed in the above table is taken as a comment line and is shadowed to the log file.

The Cross Street parameter (XST) allows the effects of cross street functional class and number of links at an intersection to be turned off. With XST set to Y, the functional class of the cross street is compared to the subject link to determine turn percentages and green splits, in addition the number of links at an intersection is found. If three links exists, T intersection computations are made. If 2 links exist, the node is skipped and the next link in the chain is searched to find a valid intersection, this process continues until a valid 3 or 4 link intersection is found. If one link only exists, the program uses a mid-link capacity. Setting XST to N ignores other links and calculates the capacity for a link based on information on that link only as well as defaults corresponding to combination 1 (arterial to arterial) of the street/cross street defaults table above. If this parameter is set to N, then the GRD parameter becomes irrelevant thus no node (grid) file need be supplied when XST is set to N. Generally, this parameter should be set to Y.

When the Centroids to Local parameter (C2L) is set to Y, centroid connectors are treated as local streets, otherwise they are ignored. In either case centroid connectors automatically receive a capacity of 999999, thus this parameter does not impact the computation of capacity on the centroid connector itself. The impact is when calculating capacity on a link that intersects the centroid connector. At that intersection, the centroid connector will either be treated as a local road or ignored. If a roadway intersects only centroid connectors at such a node and C2L is set to N, the node will be considered a non-intersection node and the capacity calculator will continue searching down the link chain for a true intersection, if C2L is Y such a node would be considered an intersection with a local street and will be used. If four links meet at a node and only 1 is a centroid connector and C2L is set to N, the intersection will be treated as a 3 way "T" intersection.

The Width Directional parameter (WDR) was included to allow handling networks where the width is coded directionally versus the total curb to curb width of the roadway. For those networks where width is coded curb to curb, the capacity calculator determines the directional width by dividing by 2 except on one-way non-freeway links. This parameter should be set to N because the width coding standard is full curb to curb widths.

The Freeway Width factor (WFY) allows freeways to be coded directionally or full 2 link width independently of the setting of WDR. This factor should be set to Y when following the standard for freeway width coding. If WDR is coded Y this parameter is not used, thus freeways should not be coded as total two way width if directional widths are used elsewhere.

The Balance Capacities parameter (BAL) will use the minimum of the two directional capacities on a link for both directions. This parameter also insures that all ramps at the same interchange have the same capacity by always using mid-link capacity calculations for ramps. Balanced capacities can be used in the traffic assignment process so that the assignment is somewhat balanced directionally. After performing a traffic assignment the capacity calculator can be rerun to produce unbalanced directional capacities which are more realistic and thus better suited to the post-processor.

Setting the Capacity Method parameter (MTD) to R allows the user to use mid-link capacities (as calculated by Chapters 20, 21 and 23 of the HCM) on all links thus bypassing intersection based capacities (Chapter 15, 16,17). When used in this manner all intersection information (turn lanes, through lanes, intersection type) becomes irrelevantt, however the urban PHF and %Trucks will still be used where applicable. Setting this parameter to U causes intersection capacities for calculated for all non-freeway segments. In this case the rural PHF and %Trucks are still used in the rural areas. This parameter does not effect the calculation of capacities on freeways. The parameter was included primarily for testing purposes and should always be set to "N".

The Node File parameter (called GRD in deference to the old nomenclature of grid file) is used to allow the user to run the program with or without a node file. The node file is necessary when calculating 3 way intersection capacities as the angles between links determine which link has through-right, left-through and left-right turning movements. For consistency this parameter should always be set to "Y" and a node file supplied.

The Peak Hour Factor (PHF) converts between the 15 minute peak and the peak hour volume. Different peak hour factors are specified for rural and urban areas. Each study area can set its own peak hour factors. Peak hour factor cannot be set on a link by link basis because it is not a policy variable.

The suburban to rural parameter (S2R) can be set to Y to cause suburban (residential) roadways to be computed using mid-link capacities. It is recommended that this be set to N which will treat them as urban streets. When suburban streets are calculated with mid-link capacities they still use the urban PHF and %Trucks.

When set to Y the Multi-lane Speed (SPD) parameter allows free flow speeds on rural multi-lane highways to be computed from the link coded posted speeds per guidance in the 2000 HCM. As this is not consistent with the free flow speed approximation method used for the other facility types it is recommended that this parameter be set to N. When set to N, free flow speed is computed the way it is for other roadways including adjustment for lane width restriction and development density.

The terrain type (TER) affects all capacity calculations in relation to the percent trucks. The three generalized planning application terrain types are used instead of specific grade information due to the approximate nature of the travel demand forecasting analysis. The terrain type most applicable to the area should be entered. At level of detail 2 or greater, terrain type can be over written on a link by link basis. This allows specific segments with unusual grades to have capacities different from that generated with the default terrain entered in the parameter list. When coding terrain remember these rules of thumb, level terrain causes no degradation in truck speed, rolling terrain causes some degradation and mountainous terrain causes trucks to operate at crawl speed, more detailed information for link specific terrain coding is given in the Link Coding section.

The percent trucks parameter (%TN) is the percent of class B and C vehicles in the traffic stream. Percent trucks can be varied for different classes of roads and different area types. At level of detail 2 or greater, percent trucks can be varied on a link by link basis.

Directional Split (DIR) represents the distribution of traffic by direction during the peak period of travel. Directional split is used to determine the volume of opposing traffic for left turn conflict analysis.

The Hourly/Daily Factor (KFC) is used to convert the hourly capacities to the model analysis period. This is usually 24 hours which is why it is called the Hourly/Daily factor, however, the analysis period could be one hour (in which case KFC should be set to 1.0) or it could be several hours of a peak period (in which case the KFC needs to be determined from data but might be for example 0.6 for a 2 hour analysis period or 0.4 for a 3 hour analysis period).

The Increment Factor (INC) is used in conjunction with the Capacity Adjustment Factor coded on individual links. The Capacity Adjustment Factor is used to modify capacities for special conditions which cannot be reflected in the normal capacity calculations. The Increment Factor is multiplied by the Capacity Adjustment Factor to arrive at the final capacity modification. Thus by coding an Increment Factor of 0.1, a Capacity Adjustment Factor of 2 on a link will give a 20% capacity increase, and a Capacity Adjustment Factor of -1 will give a 10% capacity decrease.

The turn lane defaults, percent turns and percent green parameters are all new to CAP2000. These give the ability for the user to modify these default values which were previously hard coded. The key thing to remember is that all 11 entries must be entered to change any one value and they must appear in the same order as the defaults table above. Default turn lanes will be overridden by link coded values. The percent green default values have been changed somewhat from the values in CAP94 based on better information, these new values will decrease the difference in capacity between different classes of roads. The other defaults are the same as were used in CAP94.

APPENDIX A

Program Flow Chart

APPENDIX B

Program Source Code

PROGRAM CAP2000

C

C WRITTEN BY GREG GIAIMO

C VERSION A JUNE 2001

C

C THIS PROGRAM IS A REWRITE OF AN EARLY SOFTWARE CALLED CAP94

C THE LAST VERSION OF WHICH WAS CAP94G4, SEE THAT PROGRAMS COMMENTS

C FOR A VERSION HISTORY OF THE CAP94 SOFTWARE

C

C FOR ODOT

C

C THIS PROGRAM USES THE 2000 HCM PROCEDURES TO UPDATE THE CAPACITIES

C IN A NETWORK

C

CHARACTER*80 B

CHARACTER*1 BF(40000)

INTEGER*2 BA(40000),BB(40000)

CHARACTER*2 IPT

CHARACTER*1 ILT(2),WD,BAL,METH,PRK(2)

INTEGER W(2),C(2),L,LT,AT,F,I,IL(2),SIG,LW,W1

INTEGER ML,RT,IML,ITH(2),ITER(2),NUMF,ITYPE(2)

INTEGER LINK,J,OPPF,K,FF,FOPPF,TFOPPF

REAL FFSP

REAL PH

REAL ETT(3),FHV

INTEGER MS

INTEGER FFWY(3),RAT(3),FRMP,ILINKS,FCEN

INTEGER FART(4),FLOC(3),FCOL(4),CAT,S,SAT,UAT(2)

REAL PHF(2),ET,PT(5),INC,TET,PTD(5)

REAL PER,PGN,FW,FA,FG,D,FP

CHARACTER*3 TER,TTER

CHARACTER*40 DUMB

CHARACTER*1 GRID

CHARACTER*2 TLR

INTEGER NODE,XX(4000),YY(4000),NGRID,ANODE,BNODE

INTEGER TEMB(4),TA1,TB1,XXX(4),YYY(4),JJ,TEMPB1

CHARACTER*1 LOD,ONEWAY

INTEGER GOP(4),GOPP(2),GTH,TTAT

CHARACTER*40 FILEN1,FILEN2,FILEN3

INTEGER*2 ARGSTAT

CHARACTER*40 FILEN4,LABEL(30)

CHARACTER*20 DEF(21)

CHARACTER*1 XST,WFWY

INTEGER REM

INTEGER GNARGS

LOGICAL FLAG(21)

REAL KFACT,VPEDG,VPED,OCCG,APBT,TPG(11),TPR(11)

REAL FL,FI,TPT,FM,FG2L(2),ETT2(2),FRT,FLU,FBB,FRPB,RP,FLT,FLPB

INTEGER CL,TLT(11),TRT(11),TCL(2),COMBO

CHARACTER*1 USESPD,SUBRUR,CENTLOC

INTEGER SPD(2)

C DATA SECTION

DATA ETT /1.5,2.5,4.5/

DATA ETT2 /1.1,1.5/

DATA FG2L /1.0,0.99/

C SET DEFAULT PARAMETERS

DATA PHF /0.88,0.92/

DATA PTD /10.,5.,14.,2.,2./

DATA FFWY /1,2,2/

DATA FART /4,4,4,4/

DATA FCOL /5,5,5,5/

DATA FLOC /6,6,6/

DATA FCEN /7/

DATA FRMP /3/

DATA RAT /1,6,6/

DATA SAT /2/

DATA CAT /4/

DATA UAT /3,5/

DATA TCL /70,100/

DATA TPG /.45,.50,.55,.55,.40,.45,.45,.50,.35,.40,.45/

DATA TLT /1,1,0,1,1,0,1,0,0,0,0/

DATA TRT /0,0,0,0,0,0,0,0,0,0,0/

DATA TPR /.20,.10,.05,.05,.25,.20,.20,.10,.30,.25,.20/

LOD='1'

XST='N'

WD='N'

WFWY='N'

BAL='N'

METH='N'

GRID='N'

TTER='LEV'

USESPD='N'

SUBRUR='N'

CENTLOC='N'

D=0.60

KFACT=0.1

INC=0.1

C OPEN LINK AND PARAMETER FILES

GNARGS=IARGC()

IF(GNARGS.GT.1)THEN

ARGSTAT=IGETARG(1,FILEN1)

ARGSTAT=IGETARG(2,FILEN2)

ARGSTAT=IGETARG(3,FILEN3)

ELSE

WRITE(6,*)'FILE NAMES NOT GIVEN ON COMMAND LINE'

WRITE(6,*)'PLEASE ENTER FILE NAMES AS PROMPTED'

WRITE(6,*)

WRITE(6,*)'ENTER INPUT LINK FILE NAME'

READ(5,2) FILEN1

WRITE(6,*)'ENTER OUTPUT LINK FILE NAME'

READ(5,2) FILEN2

WRITE(6,*)'ENTER PARAMETER FILE NAME'

READ(5,2) FILEN3

ENDIF

OPEN(UNIT=1,FILE=FILEN1,STATUS='OLD')

OPEN(UNIT=2,FILE=FILEN2,STATUS='NEW')

OPEN(UNIT=4,FILE=FILEN3,STATUS='OLD')

DO 70, I=1,21

FLAG(I)=.FALSE.

70 CONTINUE

C READ PARAMETERS

OPEN(UNIT=10)

34 FORMAT(A36)

K=1

71 READ(4,2,END=72)DUMB

REWIND(10)

WRITE(10,34)DUMB(5:40)

REWIND(10)

IF(DUMB(1:3).EQ.'LOD')THEN

READ(10,6)LOD

FLAG(1)=.TRUE.

ELSEIF(DUMB(1:3).EQ.'XST')THEN

READ(10,6)XST

FLAG(3)=.TRUE.

ELSEIF(DUMB(1:3).EQ.'WDR')THEN

READ(10,6)WD

FLAG(4)=.TRUE.

ELSEIF(DUMB(1:3).EQ.'WFY')THEN

READ(10,6)WFWY

FLAG(5)=.TRUE.

ELSEIF(DUMB(1:3).EQ.'BAL')THEN

READ(10,6)BAL

FLAG(6)=.TRUE.

ELSEIF(DUMB(1:3).EQ.'MTD')THEN

READ(10,6)METH

FLAG(7)=.TRUE.

ELSEIF(DUMB(1:3).EQ.'GRD')THEN

READ(10,6)GRID

FLAG(8)=.TRUE.

ELSEIF(DUMB(1:3).EQ.'PHF')THEN

READ(10,*)(PHF(J),J=1,2)

FLAG(9)=.TRUE.

ELSEIF(DUMB(1:3).EQ.'TER')THEN

READ(10,1)TTER

FLAG(10)=.TRUE.

ELSEIF(DUMB(1:3).EQ.'%TK')THEN

READ(10,*)(PTD(J),J=1,5)

FLAG(11)=.TRUE.

ELSEIF(DUMB(1:3).EQ.'S2R')THEN

READ(10,6)SUBRUR

FLAG(12)=.TRUE.

ELSEIF(DUMB(1:3).EQ.'DIR')THEN

READ(10,*)D

FLAG(13)=.TRUE.

ELSEIF(DUMB(1:3).EQ.'KFC')THEN

READ(10,*)KFACT

FLAG(14)=.TRUE.

ELSEIF(DUMB(1:3).EQ.'INC')THEN

READ(10,*)INC

FLAG(15)=.TRUE.

ELSEIF(DUMB(1:3).EQ.'SPD')THEN

READ(10,6)USESPD

FLAG(2)=.TRUE.

ELSEIF(DUMB(1:3).EQ.'PGN')THEN

READ(10,*)(TPG(J),J=1,11)

FLAG(16)=.TRUE.

ELSEIF(DUMB(1:3).EQ.'%TN')THEN

READ(10,*)(TPR(J),J=1,11)

FLAG(17)=.TRUE.

ELSEIF(DUMB(1:3).EQ.'LTL')THEN

READ(10,*)(TLT(J),J=1,11)

FLAG(18)=.TRUE.

ELSEIF(DUMB(1:3).EQ.'RTL')THEN

READ(10,*)(TRT(J),J=1,11)

FLAG(19)=.TRUE.

ELSEIF(DUMB(1:3).EQ.'CYC')THEN

READ(10,*)(TCL(J),J=1,2)

FLAG(20)=.TRUE.

ELSEIF(DUMB(1:3).EQ.'C2L')THEN

READ(10,6)CENTLOC

FLAG(21)=.TRUE.

ELSE

LABEL(K)=DUMB

K=K+1

ENDIF

GOTO 71

C TTER AND TET ARE THE TEMPORY TERRAIN AND TRUCK EQUIVALENT FACTORS

C THEY ARE THE DEFAULTS BASED ON PAR AND CAN BE OVERRIDDEN ON THE LINK

72 IF(TTER.EQ.'LEV')THEN

TET=ETT(1)

ELSEIF(TTER.EQ.'ROL')THEN

TET=ETT(2)

ELSE

TET=ETT(3)

ENDIF

1 FORMAT(A3)

2 FORMAT(A40)

C CALCULATE SUBURBAN STREETS USING RURAL CALCS WITH URBAN PARMS IF S2R IS Y

C NOTE THAT RAT2 AND RAT3 ALWAYS USE URBAN %TRK, PHF THUS FC=6 (LAU) WILL

C USE URBAN PARM IN RURAL CALC REGARDLESS OF SETTING OF S2R

IF(SUBRUR.EQ.'Y')THEN

RAT(3)=SAT

SAT=-1

ENDIF

C TREAT CENTROIDS AS LOCALS IF C2L IS SET TO Y, OTHERWISE IGNORE THEM

IF(CENTLOC.EQ.'Y')THEN

FLOC(3)=FCEN

FCEN=-1

ENDIF

C OPEN NODE FILE IF PRESENT

IF(GRID.EQ.'Y')THEN

IF(GNARGS.GT.1) THEN

ARGSTAT=IGETARG(4,FILEN4)

ELSE

WRITE(6,*)'ENTER NODE FILE NAME'

READ(5,2) FILEN4

ENDIF

IF(FILEN4.EQ.' ')GOTO 75

OPEN(UNIT=3,FILE=FILEN4,STATUS='OLD',ERR=75)

GOTO 76

75 GRID='N'

WRITE(6,*)'ERROR OPENING NODE FILE, EXECUTION PROCEEDING WITHOUT'

WRITE(7,*)'ERROR OPENING NODE FILE, EXECUTION PROCEEDING WITHOUT'

ENDIF

C WRITE LOG FILE

76 OPEN(UNIT=7,FILE='CAP2000.LOG',STATUS='UNKNOWN')

WRITE(7,*)'CAP2000 RUN PARAMETERS'

WRITE(7,*)

WRITE(7,*)'INPUT LINK FILE= ',FILEN1

WRITE(7,*)'OUTPUT LINK FILE= ',FILEN2

WRITE(7,*)'PARAMETER FILE= ',FILEN3

IF(GRID.EQ.'Y')WRITE(7,*)'NODE FILE= ',FILEN4

WRITE(7,*)

WRITE(7,*)'PARAMETER FILE LABELS'

DO 78 I=1,K-1

WRITE(7,*)LABEL(I)

78 CONTINUE

WRITE(7,*)

DO 79 I=1,21

IF(FLAG(I))THEN

DEF(I)=' '

ELSE

DEF(I)=' DEFAULT VALUE USED '

ENDIF

79 CONTINUE

WRITE(7,*)'EXECUTION CONTROL PARAMETERS'

WRITE(7,*)

WRITE(7,*)'LOD ',LOD,DEF(1),'LEVEL OF DETAIL PARM'

WRITE(7,*)'XST ',XST,DEF(3),'USE CROSS STREETS PARM'

WRITE(7,*)'WDR ',WD,DEF(4),'WIDTH DIRECTIONAL PARM'

WRITE(7,*)'WFY ',WFWY,DEF(5),'FREEWAY WIDTHS DIRECTIONAL PARM'

WRITE(7,*)'BAL ',BAL,DEF(6),'BALANCE CAPACITIES PARM'

WRITE(7,*)'MTD ',METH,DEF(7),'CALC METH (ALL URB/RUR, BOTH) PARM'

WRITE(7,*)'GRD ',GRID,DEF(8),'GRID FILE PARM'

WRITE(7,*)'SPD ',USESPD,DEF(2),'POSTED SPD GIVES FFS ON RUR 4+'

WRITE(7,*)'S2R ',SUBRUR,DEF(12),'USE RUR CALC FOR SUBURBAN PARM'

WRITE(7,*)'C2L ',CENTLOC,DEF(21),'CENTROIDS=LOCALS PARM'

WRITE(7,*)

WRITE(7,*)'DATA PARAMETERS'

WRITE(7,*)

WRITE(7,*)'PEAK HOUR FACTORS (RURAL,URBAN)', DEF(9)

WRITE(7,35)'PHF',(PHF(J),J=1,2)

35 FORMAT(1X,A3,1X,11(F5.2,5X))

36 FORMAT(1X,A3,1X,11(I5,5X))

WRITE(7,*)'TERRAIN TYPE',DEF(10)

WRITE(7,*)'TER ',TTER

WRITE(7,*)'PERCENT TRUCKS',DEF(11)

WRITE(7,'(A42,A20)')'IN ORDER: RUR 4+LANE,URB 4+LANE,RUR 2LANE,',

1 'URB 2LANE,URB STREET'

WRITE(7,35)'%TK',(PTD(J),J=1,5)

WRITE(7,*)'DIRECTIONAL SPLIT',DEF(13)

WRITE(7,35)'DIR',D

WRITE(7,*)'K FACTOR FOR TRANPLAN',DEF(14)

WRITE(7,35)'KFC',KFACT

WRITE(7,*)'CAPACITY ADJUSTMENT INCREMENT',DEF(15)

WRITE(7,35)'INC',INC

WRITE(7,*)'REMAINING DATA FOR STREET-XSTREET COMBO AS FOLLOWS:'

WRITE(7,'(A30,A60,A31)')'ART-ART,ART-COL,2LANE ART-LOC,'

1 ,'4+LANE ART-COL,ART-LOC,COL-ART,2LANE COL-COL,4+LANE COL-COL,'

1 ,'COL-LOC,LOC-ART,LOC-COL,LOC-LOC'

WRITE(7,*)'PERCENT GREEN',DEF(16)

WRITE(7,35)'PGN',(TPG(J),J=1,11)

WRITE(7,*)'PERCENT TURNS',DEF(17)

WRITE(7,35)'%TN',(TPR(J),J=1,11)

WRITE(7,*)'LEFT TURN LANE',DEF(18)

WRITE(7,36)'LTL',(TLT(J),J=1,11)

WRITE(7,*)'RIGHT TURN LANE',DEF(19)

WRITE(7,36)'RTL',(TRT(J),J=1,11)

WRITE(7,*)'CYCLE LENGTH (URBAN,CBD)',DEF(20)

WRITE(7,36)'CYC',(TCL(J),J=1,2)

C READ NODE FILE IF PRESENT

IF(GRID.EQ.'Y')THEN

NGRID=0

4 READ(3,996,END=12,ERR=20000) NODE,XX(NODE),YY(NODE)

NGRID=NGRID+1

GOTO 4

12 CONTINUE

996 FORMAT(1X,I5,2X,I9,2X,I9)

ENDIF

C READ LINK RECORDS

LINK=0

C READ TRANPLAN LINK FILE ANODE,BNODE AND FCLASS FOR URBAN INT CALCS

5 READ (1,997,END=10,ERR=20000) BA(LINK+1),BB(LINK+1),BF(LINK+1)

LINK=LINK+1

GOTO 5

10 CONTINUE

REWIND(1)

DO 200 J=1,LINK

READ (1,995) B

READ (B(1:5),15) ANODE

READ (B(6:10),15) BNODE

READ (B(17:18),8) SPD(1)

READ (B(27:28),8) W1

READ (B(26:26),7) IL(1)

READ (B(45:45),6) ONEWAY

READ (B(46:47),8) SPD(2)

READ (B(55:55),7) IL(2)

READ (B(79:79),7) F

READ (B(56:56),7) AT

READ (B(77:78),8) SIG

C SKIP LEVEL OF DETAIL 2 AND 3 PARMS IF AT LEVEL OF DETAIL 1

IF(LOD.EQ.'1')THEN

PRK(1)=' '

ITER(1)=0

ITER(2)=0

PRK(2)=' '

ITYPE(1)=0

ITYPE(2)=0

ILT(1)=' '

ILT(2)=' '

ITH(1)=0

ITH(2)=0

IML=0

IPT=' '

ELSE

READ (B(29:29),6) PRK(1)

READ (B(30:30),7) ITER(1)

READ (B(59:59),7) ITER(2)

READ (B(58:58),6) PRK(2)

READ (B(25:25),7) ITYPE(1)

READ (B(54:54),7) ITYPE(2)

READ (B(32:32),6) ILT(1)

READ (B(61:61),6) ILT(2)

READ (B(31:31),7) ITH(1)

READ (B(60:60),7) ITH(2)

READ (B(74:74),7) IML

READ (B(75:76),9) IPT

ENDIF

C PERCENT TRUCK OVER-RIDE

IF(IPT.NE.' ')THEN

READ(IPT,'(F2.0)')PT(1)

DO 3 I=2,5

PT(I)=PT(1)

3 CONTINUE

ELSE

DO 16 I=1,5

PT(I)=PTD(I)

16 CONTINUE

ENDIF

IF(ONEWAY.EQ.'1')ONEWAY=' '

6 FORMAT(A1)

7 FORMAT(I1)

8 FORMAT(I2)

9 FORMAT(A2)

11 FORMAT(F4.2)

13 FORMAT(I4)

15 FORMAT(I5)

C MAKE WIDTH DIRECTIONAL IF NECESSARY

IF(WD.EQ.'N')THEN

IF(ONEWAY.EQ.' ')THEN

IF(F.EQ.FFWY(1).OR.F.EQ.FFWY(2).OR.F.EQ.FFWY(3))THEN

IF(WFWY.EQ.'N')THEN

W(1)=W1/2

W(2)=W1/2

ELSE

W(1)=W1

W(2)=W1

ENDIF

ELSE

W(1)=W1

W(2)=W1

ENDIF

ELSE

C THIS FORMULATION ACCOUNTS FOR UNBALANCED LANES

IF(IL(1).EQ.0)THEN

W(1)=W1/2

W(2)=W1/2

ELSE

W(1)=W1*IL(1)/(IL(1)+IL(2)*1.0)

W(2)=W1*IL(2)/(IL(1)+IL(2)*1.0)

ENDIF

ENDIF

ELSE

W(1)=W1

W(2)=W1

ENDIF

C THIS IS TO GET THE AT BACK TO ORIGINAL WHEN DO B-A DIRECTION

C IN CASE I CHANGED IT WHILE DOING A-B

TTAT=AT

C DO FOR EACH DIRECTION

DO 100 I=1,2

AT=TTAT

C IF THERE IS NO WIDTH SUCH AS CENTROID CONNECTORS THEN CAPACITY=999999

IF (W(I).EQ.0.OR.F.EQ.FCEN) THEN

C(I)=999999

C B-A CAP OF ONEWAY LINKS IS ZERO

ELSEIF (I.EQ.2.AND.ONEWAY.EQ.' ')THEN

C(I)=0

ELSE

C SET TERRAIN TYPE, TRUCK FACTOR BASED ON LINK OR DEFAULT

IF(ITER(I).NE.0)THEN

IF(ITER(I).EQ.1)TER='LEV'

IF(ITER(I).EQ.2)TER='ROL'

IF(ITER(I).EQ.3)TER='MOU'

ET=ETT(ITER(I))

ELSE

TER=TTER

ET=TET

ENDIF

C APPROXIMATE NUMBER OF LANES BASED ON WIDTH IF # LANES NOT CODED

IF (IL(I).EQ.0) THEN

C FOR 2 LANE ROADS TWLTL=0 LANES=1

IF (W(I).LE.12) THEN

L=1

ML=0

LW=W(I)

IF (W(I).LT.7) THEN

WRITE(6,*)'WARNING, LANE APPROXIMATER FOUND DIRECTIONAL

1 WIDTH LESS THAN 7 FEET ON LINK ',ANODE,BNODE

WRITE(7,*)'WARNING, LANE APPROXIMATER FOUND DIRECTIONAL

1 WIDTH LESS THAN 7 FEET ON LINK ',ANODE,BNODE

ENDIF

C FOR ROADS OVER 12, LANES WILL BE 12 EXCEPT IF 1 TO 4 FT UNDER

C AN EVEN MULTIPLE OF 12 ADD A LANE

C IF THERE IS BETWEEN 4 AND 7 FT EXTRA AFTER TAKING OUT 12'S THEN

C ASSUME THIS IS HALF OF A MEDIAN TURN LANE, ALL OTHERS HAVE NO TURN

C LANES AS ALL WIDTH IS ASSUMED TO BE TRAVEL LANES

C IF PARKING IS ALLOWED, SUBTRACT ONE LANE FOR PARKING CODE 1

ELSE

L=W(I)/12

REM=MOD(W(I),12)

IF (REM.GE.8.AND.REM.LE.11) L=L+1

LW=W(I)/L

IF(LW.GT.12)LW=12

IF(PRK(I).EQ.'1'.AND.L.GT.1)L=L-1

IF(PRK(I).EQ.'2'.AND.L.GT.1)L=L-2

IF (REM.GE.4.AND.REM.LE.7.AND.ONEWAY.NE.' ') THEN

ML=1

ELSE

ML=0

ENDIF

ENDIF

C USE HARD CODED LANES, MEDIAN TURN LANES IF AVAILABLE

ELSE

LW=W(I)/(IL(I)+0.5*IML)

IF(IML.EQ.1)THEN

ML=1

ELSE

ML=0

IF(LW.GT.12)LW=12

REM=W(I)-IL(I)*LW

IF(REM.GE.4.AND.ONEWAY.NE.' ')ML=1

ENDIF

IF(LW.LT.7)THEN

WRITE(6,*)'LANE WIDTHS LESS THAN 7 FT ON LINK',ANODE,BNODE

WRITE(7,*)'LANE WIDTHS LESS THAN 7 FT ON LINK',ANODE,BNODE

ENDIF

L=IL(I)

IF(PRK(I).EQ.'1'.AND.L.GT.1)L=L-1

IF(PRK(I).EQ.'2'.AND.L.GT.1)L=L-2

ENDIF

C RAMPS WILL USE CHPT 20,21 IF RURAL OR IF ON RAMP OR IF BALANCE=YES

C THEY WILL USE CHPT 16 IF URBAN OFF RAMP AND BALANCE=NO

IF(BAL.EQ.'Y'.AND.F.EQ.FRMP)AT=RAT(1)

C FOR FREEWAYS USE CHPT23 HCM

33 IF (F.EQ.FFWY(1).OR.F.EQ.FFWY(2).OR.F.EQ.FFWY(3))THEN

IF(LW.LE.10)FW=6.6

IF(LW.GT.10)FW=1.9

IF(LW.GT.11)FW=0.0

IF (AT.EQ.RAT(1)) THEN

FFSP=75-FW

PH=PHF(1)

FHV=1/(1+(PT(1)/100.)*(ET-1))

ELSE

IF(L.LE.2)FL=4.5

IF(L.GT.2)FL=3.0

IF(L.GT.3)FL=1.5

IF(L.GT.4)FL=0.0

IF(AT.EQ.CAT)THEN

FI=6.3

ELSEIF(AT.EQ.UAT(1).OR.AT.EQ.UAT(2))THEN

FI=2.5

ELSE

FI=0.0

ENDIF

FFSP=70-FW-FL-FI

PH=PHF(2)

FHV=1/(1+(PT(2)/100.)*(ET-1))

ENDIF

IF(FFSP.GT.70)THEN

MS=2400

ELSE

MS=1700+10*FFSP

ENDIF

C(I)=MS*FHV*PH*L

C FOR OTHER RURAL ROUTES USE CHPT 20 OR 21 DEPENDING ON LANES

C ALSO USE FOR RAMPS AS NOTED ABOVE, IF METHOD = R (RURAL) USE THIS AS WELL

ELSEIF (AT.EQ.RAT(1).OR.AT.EQ.RAT(2).OR.AT.EQ.RAT(3).OR.

1 METH.EQ.'R') THEN

C IF METHOD = U (URBAN) GOTO URBAN STREET SECTION

IF(METH.EQ.'U')THEN

AT=UAT(1)

GOTO 33

ENDIF

AT=TTAT

C CHAPTER 20

IF (L.EQ.1) THEN

IF(AT.EQ.RAT(1))THEN

PH=PHF(1)

TPT=PT(3)

ELSE

PH=PHF(2)

TPT=PT(4)

ENDIF

IF(TER.EQ.'LEV'.OR.F.EQ.FRMP)THEN

FHV=1/(1+(TPT/100.)*(ETT2(1)-1))

C(I)=1700*FHV*FG2L(1)*PH

ELSE

FHV=1/(1+(TPT/100.)*(ETT2(2)-1))

C(I)=1700*FHV*FG2L(2)*PH

ENDIF

C CHAPTER 21

ELSE

IF(AT.NE.RAT(1))THEN

TPT=PT(2)

PH=PHF(2)

FA=5.0

ELSE

TPT=PT(1)

PH=PHF(1)

FA=2.5

ENDIF

IF(USESPD.EQ.'Y')THEN

IF(SPD(I).LE.47)THEN

FFSP=SPD(I)+7

ELSE

FFSP=SPD(I)+5

ENDIF

ELSE

IF(ML.EQ.0)THEN

FM=1.6

ELSE

FM=0.0

ENDIF

IF(LW.LE.10)FW=6.6

IF(LW.GT.10)FW=1.9

IF(LW.GT.11)FW=0.0

FFSP=60-FM-FW-FA

ENDIF

MS=20*FFSP+1000

IF(F.EQ.FRMP)THEN

FHV=1/(1+(TPT/100.)*(ETT(1)-1))

ELSE

FHV=1/(1+(TPT/100.)*(ET-1))

ENDIF

C(I)=MS*FHV*L*PH

ENDIF

ELSE

C FOR NON FREEWAY URBAN ROADS USE CHPT 16 INTERSECTION CAPACITY

C THIS WILL BE BASED ON CROSS STREET FUNCTIONAL CLASS IF

C XST='Y' OTHERWISE CROSS STREET WILL BE IGNORED, IF IGNORED

C ALL URBAN STREETS ARE CALCULATED AS 4 LINK INTERSECTION WITH THE

C DEFAULTS SHOWN BELOW (HOWEVER, AS ALWAYS, RT, LT WILL BE OVER

C RIDDEN BY LINK CODED VALUE

C

C DEFAULTS FOR XST='N'

IF(XST.EQ.'N')THEN

LT=TLT(1)

RT=TRT(1)

PGN=TPG(1)

PER=TPR(1)

TLR='00'

ELSE

C FROM HERE TO COMMENT 9999 LOOKS AT CROSS STREET LINKS TO DETERMINE

C THEIR FUNCTIONAL CLASS AND T INTERSECTION TURN MOVEMENTS

C

C RESET F SUCH THAT F=1 ARTERIAL, F=2 COLLECT, F=3 LOCAL

C

40 IF(F.EQ.FCOL(1).OR.F.EQ.FCOL(2).OR.F.EQ.FCOL(3).OR.

1 F.EQ.FCOL(4))THEN

FF=2

ELSEIF(F.EQ.FLOC(1).OR.F.EQ.FLOC(2).OR.F.EQ.FLOC(3))THEN

FF=3

ELSE

FF=1

ENDIF

C

C FIND CROSS STREET FUNCTIONAL CLASS AND NUM LINKS AT NODE

IF(I.EQ.1)THEN

TA1=ANODE

TB1=BNODE

ELSEIF(I.EQ.2)THEN

TA1=BNODE

TB1=ANODE

ENDIF

47 ILINKS=0

NUMF=0

DO 45, K=1,4

TEMB(K)=0

45 CONTINUE

DO 50 K=1,LINK

C FOR LINKS AT INTERSECTION READ FUNCTIONAL CLASS

IF(BA(K).EQ.TB1.OR.BB(K).EQ.TB1)THEN

READ(BF(K),7)OPPF

C IGNORE CENTROID CONNECTORS AT BNODE, NOTE THAT IF C2L IS Y

C THE CC'S WERE PREVIOUSLY RECODED TO LOCALS

IF(OPPF.NE.FCEN)THEN

ILINKS=ILINKS+1

C THIS SECTION ADDED TO KEEP THE NODE FOR T INT CALCS

IF(BA(K).EQ.TB1)THEN

TEMB(ILINKS)=BB(K)

ELSEIF(BB(K).EQ.TB1)THEN

TEMB(ILINKS)=BA(K)

ENDIF

C CHECK TO SEE IF THIS IS AN ON-RAMP

IF(F.EQ.FRMP)THEN

IF(OPPF.EQ.FFWY(1).OR.OPPF.EQ.FFWY(2)

1 .OR.OPPF.EQ.FFWY(3))THEN

IF(METH.NE.'U')THEN

AT=RAT(2)

GOTO 33

ENDIF

ENDIF

ENDIF

C REDEFINE FUNCTIONAL CLASS FOR CALCULATIONS

IF(OPPF.EQ.FCOL(1).OR.OPPF.EQ.FCOL(2).OR.OPPF.EQ.FCOL(3)

1 .OR.OPPF.EQ.FCOL(4))THEN

TFOPPF=2

ELSEIF(OPPF.EQ.FLOC(1).OR.OPPF.EQ.FLOC(2).OR.OPPF.EQ.

1 FLOC(3))THEN

TFOPPF=3

ELSE

TFOPPF=1

ENDIF

C SAVE XSTREET FCLASS FOR USE IN T INTERSECTION CALCS

GOP(ILINKS)=TFOPPF

C SET XSTREET FCLASS, IF ITS THE 1ST LINK FOUND AT INTERSECTION

C SET REGARDLESS, OTHERWISE SET TO THE LOWEST FCLASS (NOTE ARTERIALS

C ARE LOW) NOT EQUAL TO THE SUBJECT LINK FCLASS

IF(ILINKS.EQ.1)THEN

IF(TFOPPF.EQ.FF)NUMF=NUMF+1

FOPPF=TFOPPF

ELSE

IF(TFOPPF.NE.FF)THEN

IF(FOPPF.EQ.FF)THEN

FOPPF=TFOPPF

ELSEIF(TFOPPF.LT.FOPPF)THEN

FOPPF=TFOPPF

ENDIF

ELSE

NUMF=NUMF+1

ENDIF

ENDIF

ENDIF

ENDIF

50 CONTINUE

IF(NUMF.GE.3)THEN

IF(FF.LT.FOPPF)FOPPF=FF

ENDIF

C FOR NODES WITH ONLY 1 LINK USE RURAL CAP, IF 2 LINKS RESET A AND B

C AND CONTINUE DOWN ROAD UNTIL FIND AN INTERSECTION, NOTE THAT

C W,L AND F ARE NOT RESET, THEY WILL CARRY FORWARD FROM THE SUBJECT

C LINK, ONLY TA1 AND TB1 ARE RESET AND WILL BE USED TO FIND XSTREET

C FCLASS AND IN T INTERSECTION CALCS

IF(ILINKS.EQ.1)THEN

AT=RAT(2)

GOTO 33

ELSEIF(ILINKS.EQ.2)THEN

TEMPB1=TB1

IF(TEMB(1).NE.TA1)THEN

TB1=TEMB(1)

ELSEIF(TEMB(2).NE.TA1)THEN

TB1=TEMB(2)

ELSE

WRITE(6,*)'YOU HAVE GOT A PROBLEM'

STOP

ENDIF

TA1=TEMPB1

GOTO 47

ENDIF

C FOR NODES WITH 3 LINKS CALCULATE THE ANGLES AND DETERMINE THE

C TURNING MOVEMENTS PRESENT, THAT LINK OPPOSITE THE LARGEST ANGLE

C IS THE LEG OF THE "T" AND HAS LEFT-RIGHT, IF NOT THE LEG THEN

C IF THE LEG HAS THE LARGEST + ANGLE FROM A STRAIGT LINE PROJECTION

C FROM THE SUBJECT LINK THEN THERE IS THROUGH AND LEFT OTHERWISE

C RIGHT AND THROUGH

TLR='00'

IF(ILINKS.EQ.3.AND.GRID.EQ.'Y')THEN

JJ=2

DO 65 K=1,3

IF(TEMB(K).NE.TA1)THEN

JJ=JJ+1

GOPP(JJ-2)=GOP(K)

XXX(JJ)=XX(TEMB(K))

YYY(JJ)=YY(TEMB(K))

ENDIF

65 CONTINUE

XXX(1)=XX(TA1)

YYY(1)=YY(TA1)

XXX(2)=XX(TB1)

YYY(2)=YY(TB1)

C THIS SECTION ADDED TO SKIP T INTERSECTION

C IF THERE IS A ZERO DISTANCE LINK PRESENT

IF(XXX(1).EQ.XXX(2).AND.YYY(1).EQ.YYY(2))THEN

WRITE(6,*)'STACKED NODE LINK AT ',TA1,TB1

WRITE(6,*)'SKIPPED T INT CALC FOR ALL LINKS AT THIS INT'

WRITE(7,*)'STACKED NODE LINK AT ',TA1,TB1

WRITE(7,*)'SKIPPED T INT CALC FOR ALL LINKS AT THIS INT'

GOTO 66

ENDIF

IF(XXX(3).EQ.XXX(2).AND.YYY(3).EQ.YYY(2))GOTO 66

IF(XXX(4).EQ.XXX(2).AND.YYY(4).EQ.YYY(2))GOTO 66

C CALCULATE T INT TRN MVTS OVER-RIDE BASED ON FUNC CLASS

C IF 2 LINKS HAVE SAME FCLS AND OTHER IS DIFFERENT AND LOWER

C THEN THE 2 SAMES ARE THROUGH

GTH=0

IF(GOPP(1).EQ.FF.AND.GOPP(1).LT.GOPP(2))GTH=3

IF(GOPP(2).EQ.FF.AND.GOPP(2).LT.GOPP(1))GTH=4

CALL CAPANG(XXX,YYY,TLR,GTH)

ENDIF

66 CONTINUE

C

C DETERMINE TURN LANES, PERCENT TURNS, AND PERCENT GREEN BASED

C ON FUNCTIONAL CLASS COMPARISON

C

IF(FF.EQ.1)THEN

IF(FOPPF.EQ.1)THEN

COMBO=1

ELSEIF(FOPPF.EQ.2)THEN

COMBO=2

ELSEIF(FOPPF.EQ.3)THEN

IF(L.EQ.1)THEN

COMBO=3

ELSE

COMBO=4

ENDIF

ENDIF

ELSEIF(FF.EQ.2)THEN

IF(FOPPF.EQ.1)THEN

COMBO=5

ELSEIF(FOPPF.EQ.2)THEN

IF(L.EQ.1)THEN

COMBO=6

ELSE

COMBO=7

ENDIF

ELSEIF(FOPPF.EQ.3)THEN

COMBO=8

ENDIF

ELSEIF(FF.EQ.3)THEN

IF(FOPPF.EQ.1)THEN

COMBO=9

ELSEIF(FOPPF.EQ.2)THEN

COMBO=10

ELSEIF(FOPPF.EQ.3)THEN

COMBO=11

ENDIF

ENDIF

LT=TLT(COMBO)

RT=TRT(COMBO)

PER=TPR(COMBO)

PGN=TPG(COMBO)

ENDIF

C9999 THIS ENDS THE CROSS STREET STUFF

IF(ONEWAY.EQ.' ')LT=0

C OVERRIDE DEFAULT TURN LANES

IF(ILT(I).EQ.'1')THEN

LT=1

RT=0

ELSEIF(ILT(I).EQ.'3')THEN

LT=1

RT=1

ELSEIF(ILT(I).EQ.'2')THEN

LT=0

RT=1

ELSEIF(ILT(I).EQ.'0')THEN

LT=0

RT=0

ENDIF

C OVERRIDE DEFAULT THROUGH LANES (WHICH IS = NUM OF MID LINK LANES)

IF(ITH(I).NE.0)L=ITH(I)

C OVERRIDE PERCENT TURNS IF LINK HAS NO THROUGH MOVEMENT

C ALSO IF LT AND RT ARE CODED 1, CHANGE RT TO 0 SO THAT THE RIGHT TURNING

C VOLUME WILL BE TREATED AS THE SUBJECT VOLUME IN THE CAPACITY CALCULATION

IF(TLR.EQ.'LR')THEN

PER=0.5

IF(LT.EQ.1.AND.RT.EQ.1)RT=0

ENDIF

C

CTHE FOLLOWING IS A PLACE HOLDER WHICH CALCULATES CAPACITY IF STOP SIGNS

CHAVE BEEN CODED FOR THE INTERSECTION TYPE, THIS SIMPLY LOOKS UP A CAPACITY

CFROM THE SERVICE VOLUMES ON PAGES 10-34 AND 10-35 OF HCM 2000 THIS SIMPLE

CMETHOD IS USED SINCE STOP CONTROL ISN'T PART OF OUR LOD 3 STANDARD, IF LATER

CPEOPLE WANT TO CODE STOP SIGNS AND MAKE IT STANDARD, CHPT 17 CALCS SHOULD

CBE INSERTED HERE

IF(ITYPE(I).GT.1.AND.ITYPE(I).LT.5)THEN

IF(ITYPE(I).EQ.2)THEN

IF(TLR.EQ.'00')THEN

IF(LT.EQ.1)THEN

C(I)=230

ELSE

C(I)=130

ENDIF

ELSE

C(I)=230

ENDIF

ELSEIF(ITYPE(I).EQ.3)THEN

AT=RAT(2)

GOTO 33

ELSEIF(ITYPE(I).EQ.4)THEN

IF(L.EQ.1)THEN

C(I)=350

ELSE

C(I)=520

ENDIF

ENDIF

C(I)=C(I)*PHF(2)

ELSE

C

C CALCULATE SATURATION FLOW RATE

C

C CBD VERSUS URBAN PARAMETERS, AREA, BUS, #PEDS AND CYCLE LENGTH

IF(AT.EQ.CAT)THEN

FA=0.9

FBB=(L-.048)/L

CL=TCL(2)

VPED=400

ELSE

FA=1.0

FBB=(L-.008)/L

CL=TCL(1)

VPED=50

ENDIF

C WIDTH FACTOR

IF(LW.LT.8)LW=8

FW=1+(LW-12)/30.

C TRUCK FACTOR

FHV=100./(100+PT(5))

C PARKING FACTOR

IF(PRK(I).EQ.'0'.OR.PRK(I).EQ.'1'.OR.PRK(I).EQ.'2')THEN

IF(ONEWAY.EQ.' '.AND.PRK(I).EQ.'2')THEN

FP=(L-.26)/L

ELSE

FP=(L-.18)/L

ENDIF

ELSE

FP=1.0

ENDIF

C GRADE FACTOR

FG=1.0

IF(TER.EQ.'ROL')FG=.99

IF(TER.EQ.'MOU')FG=.97

C LANE UTILIZATION FACTOR

FLU=1.0

IF(L.EQ.2)FLU=0.952

IF(L.GE.3)FLU=0.908

C CALCULATE SATURATION FLOW RATE S PER LANE WITHOUT TURN ADJUSTMENTS

S=1900*FW*FHV*FG*FP*FA*FBB*FLU

C PLATOON RATIO (RP 1.333 FOR ARRIVAL TYPE 4, COORDINATED SIGNAL, OTHERWISE

C ARRIVAL TYPE 3 UNCOORDINATED SIGNAL)

IF(ITYPE(I).EQ.1)THEN

RP=1.333

ELSE

RP=1.000

ENDIF

C CALCULATE PEDESTRIAN OCCUPANCY FACTOR

VPEDG=VPED/PGN

IF(VPEDG.GT.5000)VPEDG=5000

IF(VPEDG.LE.1000)THEN

OCCG=VPEDG/2000.

ELSE

OCCG=0.4+VPEDG/10000.

ENDIF

APBT=1-OCCG

C RIGHT TURN ADJUSTMENT FACTOR AND PEDESTRIAN BLOCKAGE

IF(RT.EQ.1.OR.TLR.EQ.'TL')THEN

FRT=1.0

FRPB=1.0

ELSEIF(L.EQ.1)THEN

FRT=1.0-0.135*PER

FRPB=1-PER*(1-APBT)

ELSE

FRT=1.0-0.15*PER

FRPB=1-PER*(1-APBT)

ENDIF

C LEFT TURN ADJUSTMENT FACTOR AND PEDESTRIAN BLOCKAGE

C LEFT TURN LANE (PROTECTED) OR NO LEFT TURN ON APPROACH

IF(LT.EQ.1.OR.TLR.EQ.'TR')THEN

FLT=1.0

FLPB=1.0

C UNOPPOSED LEFT TURNS

ELSEIF(ONEWAY.EQ.' '.OR.TLR.EQ.'LR')THEN

IF(L.EQ.1)THEN

FLT=1.0-0.135*PER

FLPB=1-PER*(1-APBT)

ELSE

FLT=1.0-0.15*PER

FLPB=1-PER*(1-APBT)

ENDIF

C NO LEFT TURN LANE SO PERMITTED TURNS ONLY

ELSE

CALL PERMIT(S,L,PER,PGN,CL,OCCG,D,FLU,RP,FLT,FLPB)

ENDIF

C IF FLT DUE TO PERMITTED SIGNAL GETS TOO LOW, CONVERT THE SIGNAL

C TO PROTECTED, ON MULTI-LANE, 1 THROUGH LANE BECOMES A PROTECTED

C LEFT TURN LANE, ON 1 LANE (DIRECTIONAL) THE SIGNAL GOES TO

C SPLIT PHASING WITH PROTECTED LEFTS, WHAT I'M REALLY DOING IS

C REDUCING THE G/C RATIO BY 1/2 ON A 1 LANE RD AND REMOVING A

C THROUGH LANE ON A MULTI, I'M JUST DOING IT VIA FLT

C ALSO NOTE, THERE IS NO REDUCTION IN G/C ON MULTI-LANE DUE TO

C ADDITION OF PROTECTED PHASE, IN FACT G/C IS ALWAYS INDEPENDENT

C OF WHETHER OR NOT THERE IS A PROTECTED PHASE FOR LEFTS, THE ASSUMPTION

C IS THAT THE GREEN IS TAKEN FROM ELSEWHERE IN THE CYCLE, THIS ENSURES

C THAT ADDING TURN LANES WILL INCREASE NOT DECREASE CAPACITY

IF(L.EQ.1)THEN

IF(FLT.LT.0.5)THEN

FLT=0.5

FLPB=1-PER*(1-APBT)

ENDIF

ELSE

IF(FLT.LT.(1-1./L))THEN

FLT=1-1./L

FLPB=1.0

ENDIF

ENDIF

S=S*FLT*FRT*FRPB*FLPB*L

C(I)=S*PHF(2)*PGN

C ADJUST CAPACITY TO ACCOUNT FOR CAPACITY OF TURN LANE GROUPS, CAPACITY

C TO THIS POINT REFLECTS THROUGH LANE GROUP ONLY, HOWEVER, MODEL VOLUME

C WILL CONTAIN VOLUME IN TURN LANE GROUPS SO NEED TO FACTOR CAPACITY

C TO ACCOUNT FOR THIS, THIS IS DONE BY DIVIDING THE CAPACITY BY THE

C THROUGH LANE GROUP PERCENTAGE THUS ADJUSTING IT TO A TOTAL VOLUME EQUIV.

IF(LT.EQ.1.AND.RT.EQ.1)THEN

C(I)=C(I)/(1-2*PER)

ELSEIF(LT.EQ.1.OR.RT.EQ.1)THEN

C(I)=C(I)/(1-PER)

ENDIF

ENDIF

ENDIF

ENDIF

C FACTOR CAPACITY FOR SPECIAL CONDITIONS

99 IF(SIG.NE.0) C(I)=C(I)*(1+(INC*SIG))

100 CONTINUE

C USE MINIMUM CAPACITY FOR BOTH DIRECTIONS FOR ASSIGNMENT PURPOSES

IF(BAL.EQ.'Y')THEN

IF(C(1).GT.C(2).AND.C(2).NE.0)C(1)=C(2)

IF(C(2).GT.C(1).AND.C(1).NE.0)C(2)=C(1)

ENDIF

IF(KFACT.NE.0.AND.C(1).NE.999999)THEN

IF(C(1).NE.999999)C(1)=C(1)/KFACT

IF(C(2).NE.999999)C(2)=C(2)/KFACT

ENDIF

IF(C(1).GT.999999.OR.C(2).GT.999999)THEN

WRITE(6,*)'CAPACITY GREATER THAN 999999 ON LINK ',ANODE,BNODE

WRITE(7,*)'CAPACITY GREATER THAN 999999 ON LINK ',ANODE,BNODE

IF(C(1).GT.999999)C(1)=999999

IF(C(2).GT.999999)C(2)=999999

ENDIF

WRITE(2,1000)B(1:32),C(1),B(39:61),C(2),B(68:80)

200 CONTINUE

995 FORMAT(A80)

997 FORMAT(2I5,68X,A1)

1000 FORMAT(A32,I6,A23,I6,A13)

C

C

STOP

20000 WRITE(6,*)'ERROR IN READING DATA FROM FILE 1'

50000 END

C**************************************************************

SUBROUTINE PERMIT(S,L,PER,PGN,CL,OCCG,D,FLU,RP,FLT,FLPB)

C BY GREG GIAIMO, JUNE 8, 2001

C THIS SUB CALCULATES THE LEFT TURN AND PEDESTRIAN FACTOR (FOR LEFTS)

C FOR PERMITTED SIGNALS USING CHPT 16 APP C (FOR FLT) AND APP D (FOR FLPB)

C CURRENT VERSION ASSUMES THE OPPOSING STREET HAS SAME CHARACTERISTICS

C AS SUBJECT STREET, IF CHANGE THIS WILL NEED THE NUMBER OF LANES

C MUST THEN ADD 2 MORE SECTIONS TO LOOP TESTING L IN WHICH OPPL IS TESTED

C AS WELL (SEE SPECIAL CASES DISCUSSION ON 6-127, CALC OF EL2 WILL CHANGE

C AS WELL AS VOE,VOC

INTEGER S,L,CL

REAL PER,PGN,OCCG,D,FLU,RP,FLT,FLPB

INTEGER TL,ITS

REAL S1,V,LTC,G,VOE,VOC,QR,TEMP,EL1,GF,GQ,GU,PL,FM,N,EL2,OCCR,APT

DATA TL /4/

ITS=0

C 0.80 IS A FIRST APPROXIMATION OF FLT*FLPB TO SPEED CONVERGENCE

S1=S*0.80

10 V=S1*L*PGN

LTC=PER*V*CL/3600

G=CL*PGN

VOE=(V*(1-D))/(D*FLU)

VOC=VOE*CL/(3600*L)

QR=1-(RP*PGN)

TEMP=EXP(-VOE*4.5/3600)

EL1=((1900*(1-TEMP))/(VOE*TEMP))-1

C MULTILANE ROAD LEFT TURN FACTOR

IF(L.GT.1)THEN

GF=G*EXP(-0.882*LTC**0.717)-TL

IF(GF.GT.G)GF=G

TEMP=VOC*(1-QR)/G

IF(TEMP.GT.0.49)TEMP=0.49

GQ=(VOC*QR/(0.5-TEMP))-TL

IF(GQ.GT.G)GQ=G

IF(GQ.GE.GF)THEN

GU=G-GQ

ELSE

GU=G-GF

ENDIF

PL=PER*(1+((L-1)*G/(GF+(GU/EL1)+4.24)))

FM=(GF+GU*(1/(1+PL*(EL1-1))))/G

FLT=(FM+0.91*(L-1))/L

C 1 LANE (DIRECTIONAL) ROAD LEFT TURN FACTOR

ELSE

GF=G*EXP(-0.860*LTC**0.629)-TL

IF(GF.GT.G)GF=G

GQ=4.943*(VOC**0.762)*(QR**1.061)-TL

IF(GQ.GT.G)GQ=G

IF(GQ.GE.GF)THEN

GU=G-GQ

ELSE

GU=G-GF

ENDIF

N=(GQ-GF)/2

IF(N.LT.0)N=0

EL2=(1-(1-PER)**N)/PER

IF(EL2.LT.1)EL2=1

GD=GQ-GF

IF(GD.LT.0)GD=0

FLT=(GF+(GD/(1+PER*(EL2-1)))+(GU/(1+PER*(EL1-1))))/G

ENDIF

C DO PEDESTRIAN FACTOR

OCCR=OCCG*(1-0.5*GQ/G)*EXP(-(5/3600)*VOE*FLU)

APT=1-OCCR

FLPB=1-PER*(1-APT)

S2=S*FLT*FLPB

IF(ABS(S2-S1).GT.40)THEN

ITS=ITS+1

S1=S1+(S2-S1)/2

IF(ITS.LT.10)THEN

GOTO 10

ELSE

WRITE(6,*)'COULD NOT CONVERGE IN 10 ITERATIONS'

GOTO 20

ENDIF

ENDIF

20 RETURN

END

C********************************************************************

SUBROUTINE CAPANG(XXX,YYY,TLR,GTH)

C

C WRITTEN BY GREG GIAIMO

C APRIL 1996

C THIS SUBROUTINE CALCULATES THE ANGLES AT AN INTERSECTION AND RETURNS

C TURNING MOVEMENT DEFINITIONS FOR EACH LEG IE LEFT-THROUGH,

C THROUGH-RIGHT AND LEFT-RIGHT

C

CHARACTER*2 TLR

INTEGER XXX(4),YYY(4),GTH

REAL PI,AL,BL(2),ARG

INTEGER AX,AY,BX(2),BY(2),I,ADB(2),AXB(2),ABSIN(2),ABCOS(2)

INTEGER DIFA,DIF(2),AB(2)

DATA PI /3.141592654/

C FIRST I CALCULATE THE VECTOR ANGLE (AB) FROM MY INITIAL LINK TO THE

C OTHER LINKS SUCH THAT CW ANGS ARE POS AND CCW ANGS ARE NEG

C NOTE VECTORS ARE NEEDED SINCE DIRECTION OF TRAVEL IS IMPORTANT

C IN DETERMINATION OF WHETHER A LEFT OR RIGHT HAND TURN EXISTS

AX=XXX(2)-XXX(1)

AY=YYY(2)-YYY(1)

AL=SQRT(1.0*AX**2+AY**2)

DO 10 I=1,2

BX(I)=XXX(I+2)-XXX(2)

BY(I)=YYY(I+2)-YYY(2)

ADB(I)=AX*BX(I)+AY*BY(I)

AXB(I)=AX*BY(I)-AY*BX(I)

BL(I)=SQRT(1.0*BX(I)**2+BY(I)**2)

C THIS ADDED BECAUSE COMPUTER ROUNDING ERROR SOMETIMES MAKES THE

C ARGUEMENT TO THE INVERSE TRIG FUNCTION OUTSIDE VALID RANGE OF -1 TO 1

ARG=AXB(I)/(AL*BL(I))

IF(ARG.GT.1.0.AND.ARG.LT.1.01)ARG=1.0

IF(ARG.LT.-1.0.AND.ARG.GT.-1.01)ARG=-1.0

ABSIN(I)=NINT(ASIN(ARG)*(180./PI))

ARG=ADB(I)/(AL*BL(I))

IF(ARG.GT.1.0.AND.ARG.LT.1.01)ARG=1.0

IF(ARG.LT.-1.0.AND.ARG.GT.-1.01)ARG=-1.0

ABCOS(I)=NINT(ACOS(ARG)*(180./PI))

IF(ABSIN(I).EQ.ABCOS(I).OR.ABSIN(I)+ABCOS(I).EQ.180)THEN

AB(I)=ABCOS(I)

ELSEIF(ABSIN(I).EQ.-ABCOS(I).OR.ABCOS(I)-ABSIN(I).EQ.180)THEN

AB(I)=-ABCOS(I)

ELSE

WRITE(6,*)'CHECK ANGLES WHERE'

WRITE(6,*)'SIN ANGLE = ',ABSIN(I),'COS ANGLE = ',ABCOS(I)

GOTO 49000

ENDIF

10 CONTINUE

C WRITE(6,*)'ANGLE TO POINT 3 =',AB(1)

C WRITE(6,*)'ANGLE TO POINT 4 =',AB(2)

C IF THERE IS A GTH FUN CLASS THROUGH MVT OVER-RIDE CALC TURN MVTS

IF(GTH.EQ.3)THEN

IF(AB(1).GT.AB(2))THEN

TLR='TR'

ELSE

TLR='TL'

ENDIF

ELSEIF(GTH.EQ.4)THEN

IF(AB(2).GT.AB(1))THEN

TLR='TR'

ELSE

TLR='TL'

ENDIF

ELSE

C IF THERE IS NO FUNC CLASS OVER-RIDE

C CALCULATE THE POSITIVE SCALAR ANGLE (DIF) BETWEEN EACH LINK FOR

C USE IN CALCULATING WHICH LINK IS THE LEG AND WHICH ARE THE ARMS

C OF THE T INTERSECTION, THE LINK OPPOSITE THE LARGEST ANGLE IS THE LEG

DIFA=ABS(AB(1)-AB(2))

IF(AB(1).LT.0.AND.AB(2).GT.0)GOTO 20

IF(AB(2).LT.0.AND.AB(1).GT.0)GOTO 20

IF(ABS(AB(1)).LT.ABS(AB(2)))THEN

DIF(2)=180+ABS(AB(1))

DIF(1)=360-DIF(2)-DIFA

ELSE

DIF(1)=180+ABS(AB(2))

DIF(2)=360-DIF(1)-DIFA

ENDIF

GOTO 30

20 DIF(1)=180-ABS(AB(2))

DIF(2)=180-ABS(AB(1))

30 CONTINUE

C WRITE(6,*)'ANGLE OPPOSITE POINT 1 =',DIFA

C WRITE(6,*)'ANGLE OPPOSITE POINT 3 =',DIF(1)

C WRITE(6,*)'ANGLE OPPOSITE POINT 4 =',DIF(2)

C BASED ON THE DIF ANGLES DETERMINE IF SUBJECT LINK IS THE LEG AND

C THUS HAS NO THROUGH MOVEMENTS

IF(DIFA.GE.DIF(1).AND.DIFA.GE.DIF(2))THEN

TLR='LR'

C IF NOT THEN THE SUBJECT LINK IS AN ARM AND HAS EITHER LEFT OR RIGHT

ELSE

IF(DIF(1).GE.DIF(2))THEN

IF(AB(1).GT.AB(2))THEN

TLR='TL'

ELSEIF(AB(1).LT.AB(2))THEN

TLR='TR'

ELSE

TLR='TL'

WRITE(6,*)'OVERLYING LINKS'

ENDIF

ELSEIF(DIF(2).GT.DIF(1))THEN

IF(AB(2).GT.AB(1))THEN

TLR='TL'

ELSEIF(AB(2).LT.AB(1))THEN

TLR='TR'

ELSE

TLR='TL'

WRITE(6,*)'OVERLYING LINKS'

ENDIF

ENDIF

ENDIF

ENDIF

49000 RETURN

50000 END

APPENDIX C

Sample Parameter File

TEST NETWORK PARAMTER FILE FOR CAPACITY CALCULATOR & TURN PENALTY CALCULTATOR

LOD,3

XST,Y

WDR,N

WFY,Y

BAL,N

MTD,N

GRD,Y

SPD,N

S2R,N

C2L,Y

PHF,0.88,0.92

TER,LEV

%TK,10.0,5.0,14.0,02.0,02.0

DIR,0.60

KFC,0.10

INC,0.10

CYC,70,100

LTL,1,1,0,1,1,0,1,0,0,0,0

RTL,0,0,0,0,0,0,0,0,0,0,0

PGN,.45,.50,.55,.55,.40,.45,.45,.50,.35,.40,.45

%TN,.20,.10,.05,.05,.25,.20,.20,.10,.30,.25,.20

TURN PENALTY TABLE (HUNDREDTHS OF MINUTES), ANY NOT LISTED = 0

FORMAT: FROM FUNC CLASS (*=ALL, LAST APPLIES), TO FUNC CLASS, LEFT TURN PEN, THROUGH PEN, RIGHT TURN PEN

*,*,10,0,10

F,*,0,0,0

*,F,0,0,0

R,R,0,0,0

APPENDIX D

Standard Functional Class & Areatype Coding

Functional Class (Facility Type)

Code Definition

10 Freeway (Interstate)

20 Expressway

30 Ramp

40 Major Road (Arterials)

50 Minor Road (Collector)

60 Local

70 Centroid Connector

Additional subcategories not used by capacity calculator include (note that capacity calculator determines whether a ramp is on or off depending on the functional class of the connecting BNODE link):

Code Definition

31 Freeway (Expressway) to Freeway (Expressway)

32 Off Ramp

33 On Ramp

34 Turnpike Booth

35 Arterial Ramp (dedicated right turn lane)

61 Up to state standards

62 Other standards

71 Internals

72 Externals

Area Type

Code Definition

1 Rural

2 Suburban (Residential)

3 Urban

4 CBD

5 Outlying Business District

6 Low Access Urban

APPENDIX E

NETPOP.BAT

REM THIS SCRIPT POPULATES CAPACITY, FREE FLOW SPEED AND LINK GROUP INTO DBASE NETWORK

REM THE LINK GROUP SPECIFIES THE BPR CURVE TO USE FOR THE LINK

REM ALSO CREATES TURN PENALTY FILE

REM COMMAND LINE ARGS AS FOLLOWS:1=INPUT DBF LINK, 2=INPUT DBF NODE

REM 3=CAPCALC PAR FILE,4=SPEED TABLE FILE, 5=OUTPUT DBF LINK,

REM 6=OUTPUT TURN PENALTY FILE,7=OPTIONAL INPUT TURN PROH/PENALTY OVER-RIDES

REM

ECHO LOGGING FILE NAMES

LOG2000 ALOG.LOG IN_LINK %1 IN_NODE %2 IN_CAPCALC_PAR %3 IN_SPDTAB %4

LOG2000 BLOG.LOG IN_TRN_PRO %7 OUT_LINK %5 OUT_TRN_PEN %6

ECHO CONVERTING FROM DBASE TO ASCII

CALL DBF2ASCA %1 NETEMP1.TXT

CALL DBF2ASCA %2 NOTEMP1.TXT

ECHO CALCULATING CAPACITY

CAP2000 NETEMP1.TXT NETEMP2.TXT %3 NOTEMP1.TXT

ECHO CALCULATING SPEED

SPD2000 NETEMP2.TXT NETEMP3.TXT %3 %4 Y > SPD2000.LOG

ECHO CONVERTING FROM ASCII TO DBASE

CALL ASC2DBFA NETEMP3.TXT NETEMP4.DBF

DBFMRG2 %1 NETEMP4.DBF NETEMP5.DBF CAP24 A B

DBFMRG2 NETEMP5.DBF NETEMP4.DBF NETEMP6.DBF OFFPSPD A B

DBFMRG2 NETEMP6.DBF NETEMP4.DBF NETEMP7.DBF LNKGRP A B

ECHO CALCULATING TURN PENALTIES

TURN2000 NETEMP1.TXT NOTEMP1.TXT %6 %3 %7 > TURNCALC.LOG

ECHO POPULATING CONGESTED SPEED

DEL NETEMP1.TXT

DEL NETEMP2.TXT

DEL NETEMP4.DBF

CALL DBF2ASCB %1 NETEMP1.TXT

CSPD2000 NETEMP1.TXT NETEMP2.TXT > CSPD.LOG

CALL ASC2DBFB NETEMP2.TXT NETEMP4.DBF

DBFMRG2 NETEMP7.DBF NETEMP4.DBF %5 PEAKSPD A B

ECHO CLEANING UP THE MESS

COPY ALOG.LOG+BLOG.LOG+CAP2000.LOG+SPD2000.LOG+TURNCALC.LOG+CSPD.LOG NETPOP.LOG

DEL ALOG.LOG

DEL BLOG.LOG

DEL CAP2000.LOG

DEL SPD2000.LOG

DEL CSPD.LOG

DEL TURNCALC.LOG

DEL NETEMP1.TXT

DEL NOTEMP1.TXT

DEL NETEMP2.TXT

DEL NETEMP3.TXT

DEL NETEMP4.DBF

DEL NETEMP5.DBF

DEL NETEMP6.DBF

DEL NETEMP7.DBF

DEL FOR010

-----------------------

[pic]

[pic]

[pic]

[pic]

[pic]

[pic]

[pic]

[pic]

[pic]

[pic]

[pic]

[pic]

[pic]

[pic]

[pic]

[pic]

[pic]

................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download