|
From: subversion c. n. <tra...@li...> - 2018-08-10 16:40:28
|
Revision: 1710
http://sourceforge.net/p/transims/code/1710
Author: davidroden
Date: 2018-08-10 16:40:25 +0000 (Fri, 10 Aug 2018)
Log Message:
-----------
TRANSIMS Version 7.2 - August 2018
SysLib
The overall numbering sequence was updated from 7.1 to 7.2 and all of the program versions were reset to 0. The Release method used in Db_Header to permit derivative applications to utilize version numbers less than 4.0 and avoid the TRANSIMS 4.0 legacy conventions. Additional messages and processing checks were added to the Db_Matrix method. The Smooth option was removed from the convergence averaging options. It was replaced with a separate smoothing method. A full set of DTime variables and functions were added to the User Program interface. A String_Range class was added. VMT, VHT, VHD and CAV are not kept as all cap during a String To_Title conversion.
File_Service
The TOLL_TIME_PERIODS key was removed. The Lane Use file structure was changed to delete toll period fields in favor of individual records for toll time periods. A Toll Function variable was added to enable different dynamic toll functions for different links.
Data_Service
Dynamic_Tolling method was removed and replaced by the Toll Function field in the Lane Use file.
Select_Service
The SELECT_ACCESS_LINKS key and associated methods were added.
Flow_Time_Service
Smooth_Flows method was added.
Convergence_Service
The Smooth_Flows method is now used to implement flow smoothing rather than the averaging method. The Update_Tolls method was modified to use the new Lane Use method of defining toll time periods and toll functions.
Router_Service
The DYNAMIC_TOLL_FUNCTION key was removed and replaced by the new Lane Use toll function codes that reference a User Function number.
ConvertTrips 7.2.1
The input matrix processing was modified to handle matrix files with multiple time periods.
GTFSData 7.2.2
The option to include an input Transit Stop file to reuse existing stop numbers was added. ADD_SCHEDULE_VEHICLE_TYPE key was added to insert a vehicle type code at the beginning of each scheduled run. The program now inherits from Draw_Services to include additional shape processing logic. A Build_Shapes method was added to construct route shapes based on network links if the input GTFS data does not include shape information.
MatrixData 7.2.2
Logic was added to scan the input matrix file or the equivalence file to determine the highest zone numbers when the zone file or the HIGHEST_ZONE_NUMBER key is not provided.
NetPrep 7.2.1
Logic was added to detect local thru and local selection spacing controls.
NewFormat 7.2.1
TOLL_TIME_PERIODS key was removed and VERSION71_LANE_USE_FILE and TOLL_FUNCTION_NUMBER keys were added to convert the Version 7.1 lane use file to the new Lane Use format.
PlanCompare 7.2.1
SELECT_ACCESS_LINKS functionality was added.
PlanPrep 7.2.1
SELECT_ACCESS_LINKS functionality was added.
PlanSelect 7.2.1
SELECT_ACCESS_LINKS functionality was added.
PlanSum 7.2.1
SELECT_ACCESS_LINKS functionality was added.
TransitNet 7.2.1
Logic was added to fix or recreate a Transit Driver file based on updated Transit Route data. A bug was fixed in the Node Path tracing to include the first or last link in the path. The ADD_ROUTE_STOPS_FILE logic was significantly expanded to include inserting stops in the middle of a line, adding stops to the beginning of a route and adding stops to the end of a route and updating the interpolating or extrapolating the schedule and driver data appropriately.
Modified Paths:
--------------
version7/branches/aecom/Transims70/AddLRSData/AddLRSData.cpp
version7/branches/aecom/Transims70/ArcJoin/ArcJoin.cpp
version7/branches/aecom/Transims70/ArcNet/ArcNet.cpp
version7/branches/aecom/Transims70/ArcPerf/ArcPerf.cpp
version7/branches/aecom/Transims70/ArcPlan/ArcPlan.cpp
version7/branches/aecom/Transims70/ArcRider/ArcRider.cpp
version7/branches/aecom/Transims70/ArcRider/Control.cpp
version7/branches/aecom/Transims70/ArcSnapshot/ArcSnapshot.cpp
version7/branches/aecom/Transims70/Converge_Service/Update_Times.cpp
version7/branches/aecom/Transims70/Converge_Service/Update_Tolls.cpp
version7/branches/aecom/Transims70/ConvertTrips/ConvertTrip_Data.cpp
version7/branches/aecom/Transims70/ConvertTrips/ConvertTrips.cpp
version7/branches/aecom/Transims70/ConvertTrips/Read_Trip_Table.cpp
version7/branches/aecom/Transims70/Data_Service/Control.cpp
version7/branches/aecom/Transims70/Data_Service/Data_Service.cpp
version7/branches/aecom/Transims70/Data_Service/Data_Service.vcxproj
version7/branches/aecom/Transims70/Data_Service/Data_Service.vcxproj.filters
version7/branches/aecom/Transims70/Data_Service/Read_Lane_Uses.cpp
version7/branches/aecom/Transims70/Data_Service/Write_Lane_Uses.cpp
version7/branches/aecom/Transims70/FileFormat/FileFormat.cpp
version7/branches/aecom/Transims70/File_Service/Control.cpp
version7/branches/aecom/Transims70/File_Service/Lane_Use_File.cpp
version7/branches/aecom/Transims70/File_Service/Services.cpp
version7/branches/aecom/Transims70/Fratar/Control.cpp
version7/branches/aecom/Transims70/Fratar/Fratar.cpp
version7/branches/aecom/Transims70/GTFSData/Build_Routes.cpp
version7/branches/aecom/Transims70/GTFSData/Control.cpp
version7/branches/aecom/Transims70/GTFSData/Draw_Routes.cpp
version7/branches/aecom/Transims70/GTFSData/Execute.cpp
version7/branches/aecom/Transims70/GTFSData/GTFSData.cpp
version7/branches/aecom/Transims70/GTFSData/GTFSData.hpp
version7/branches/aecom/Transims70/GTFSData/GTFSData.vcxproj
version7/branches/aecom/Transims70/GTFSData/GTFSData.vcxproj.filters
version7/branches/aecom/Transims70/GTFSData/GTFS_Data.hpp
version7/branches/aecom/Transims70/GTFSData/Read_Stop_Times.cpp
version7/branches/aecom/Transims70/GTFSData/Read_Stops.cpp
version7/branches/aecom/Transims70/GTFSData/Read_Trips.cpp
version7/branches/aecom/Transims70/GridData/GridData.cpp
version7/branches/aecom/Transims70/Include/Data_Range.hpp
version7/branches/aecom/Transims70/Include/Data_Service.hpp
version7/branches/aecom/Transims70/Include/File_Service.hpp
version7/branches/aecom/Transims70/Include/Flow_Time_Service.hpp
version7/branches/aecom/Transims70/Include/Lane_Use_Data.hpp
version7/branches/aecom/Transims70/Include/Lane_Use_File.hpp
version7/branches/aecom/Transims70/Include/Select_Service.hpp
version7/branches/aecom/Transims70/Include/System_Defines.hpp
version7/branches/aecom/Transims70/Include/User_Program.hpp
version7/branches/aecom/Transims70/IntControl/IntControl.cpp
version7/branches/aecom/Transims70/LinkSum/LinkSum.cpp
version7/branches/aecom/Transims70/LocationData/LocationData.cpp
version7/branches/aecom/Transims70/MatrixData/Control.cpp
version7/branches/aecom/Transims70/MatrixData/Expand_Matrix.cpp
version7/branches/aecom/Transims70/MatrixData/MatrixData.cpp
version7/branches/aecom/Transims70/MatrixData/Read_Matrix.cpp
version7/branches/aecom/Transims70/ModeChoice/ModeChoice.cpp
version7/branches/aecom/Transims70/NJFare2/NJFare2.cpp
version7/branches/aecom/Transims70/NetFix/NetFix.cpp
version7/branches/aecom/Transims70/NetMerge/Merge_Lane_Use.cpp
version7/branches/aecom/Transims70/NetMerge/NetMerge.cpp
version7/branches/aecom/Transims70/NetPrep/Control.cpp
version7/branches/aecom/Transims70/NetPrep/Input_Nodes.cpp
version7/branches/aecom/Transims70/NetPrep/NetPrep.cpp
version7/branches/aecom/Transims70/NewFormat/Control.cpp
version7/branches/aecom/Transims70/NewFormat/Execute.cpp
version7/branches/aecom/Transims70/NewFormat/NewFormat.cpp
version7/branches/aecom/Transims70/NewFormat/NewFormat.hpp
version7/branches/aecom/Transims70/NewFormat/NewFormat.vcxproj
version7/branches/aecom/Transims70/NewFormat/NewFormat.vcxproj.filters
version7/branches/aecom/Transims70/PathSkim/PathSkim.cpp
version7/branches/aecom/Transims70/PerfPrep/PerfPrep.cpp
version7/branches/aecom/Transims70/PlanCompare/PlanCompare.cpp
version7/branches/aecom/Transims70/PlanPrep/PlanPrep.cpp
version7/branches/aecom/Transims70/PlanSelect/PlanSelect.cpp
version7/branches/aecom/Transims70/PlanSum/PlanSum.cpp
version7/branches/aecom/Transims70/Progression/Control.cpp
version7/branches/aecom/Transims70/Relocate/Relocate.cpp
version7/branches/aecom/Transims70/RiderSum/Control.cpp
version7/branches/aecom/Transims70/RiderSum/RiderSum.cpp
version7/branches/aecom/Transims70/RoutePrep/RoutePrep.cpp
version7/branches/aecom/Transims70/Router/Router.cpp
version7/branches/aecom/Transims70/Router_Service/Control.cpp
version7/branches/aecom/Transims70/Router_Service/Link_Impedance.cpp
version7/branches/aecom/Transims70/Router_Service/Router_Service.cpp
version7/branches/aecom/Transims70/Select_Service/Control.cpp
version7/branches/aecom/Transims70/Select_Service/Select_Plan_Data.cpp
version7/branches/aecom/Transims70/Select_Service/Select_Service.cpp
version7/branches/aecom/Transims70/Select_Service/Services.cpp
version7/branches/aecom/Transims70/Simulator/Simulator.cpp
version7/branches/aecom/Transims70/SubareaNet/SubareaNet.cpp
version7/branches/aecom/Transims70/SubareaPlans/SubareaPlans.cpp
version7/branches/aecom/Transims70/SysLib/Dbfile/Db_Header.cpp
version7/branches/aecom/Transims70/SysLib/Dbfile/Db_Matrix.cpp
version7/branches/aecom/Transims70/SysLib/Program/Assign.cpp
version7/branches/aecom/Transims70/SysLib/Program/Convert.cpp
version7/branches/aecom/Transims70/SysLib/Program/Execute.cpp
version7/branches/aecom/Transims70/SysLib/Program/Initial_Declare.cpp
version7/branches/aecom/Transims70/SysLib/Program/Initial_Table.cpp
version7/branches/aecom/Transims70/SysLib/Program/Input_Output.cpp
version7/branches/aecom/Transims70/SysLib/Program/Print_Commands.cpp
version7/branches/aecom/Transims70/SysLib/Program/Process_Token.cpp
version7/branches/aecom/Transims70/SysLib/Program/Program_Code.cpp
version7/branches/aecom/Transims70/SysLib/Program/Read_Value.cpp
version7/branches/aecom/Transims70/SysLib/Program/Table.cpp
version7/branches/aecom/Transims70/SysLib/Program/User_Program.cpp
version7/branches/aecom/Transims70/SysLib/Service/Static_Service.cpp
version7/branches/aecom/Transims70/SysLib/SysLib.vcxproj
version7/branches/aecom/Transims70/SysLib/SysLib.vcxproj.filters
version7/branches/aecom/Transims70/SysLib/Tools/Data_Range.cpp
version7/branches/aecom/Transims70/SysLib/Tools/Equiv_Data.cpp
version7/branches/aecom/Transims70/SysLib/Tools/String.cpp
version7/branches/aecom/Transims70/TransimsNet/TransimsNet.cpp
version7/branches/aecom/Transims70/TransitNet/Add_Route_Stops.cpp
version7/branches/aecom/Transims70/TransitNet/Control.cpp
version7/branches/aecom/Transims70/TransitNet/Execute.cpp
version7/branches/aecom/Transims70/TransitNet/Node_Path.cpp
version7/branches/aecom/Transims70/TransitNet/TransitNet.cpp
version7/branches/aecom/Transims70/TransitNet/TransitNet.hpp
version7/branches/aecom/Transims70/TransitNet/TransitNet.vcxproj
version7/branches/aecom/Transims70/TransitNet/TransitNet.vcxproj.filters
version7/branches/aecom/Transims70/TripPrep/TripPrep.cpp
version7/branches/aecom/Transims70/TripSum/TripSum.cpp
version7/branches/aecom/Transims70/Validate/Control.cpp
version7/branches/aecom/Transims70/Validate/Validate.cpp
version7/branches/aecom/Transims70/VissimXML/VissimXML.cpp
version7/branches/aecom/Transims70/VolSpdData/VolSpdData.cpp
Added Paths:
-----------
version7/branches/aecom/Transims70/GTFSData/Build_Shapes.cpp
version7/branches/aecom/Transims70/GTFSData/Get_Stop_Data.cpp
version7/branches/aecom/Transims70/NewFormat/Old_Lane_Use_File.cpp
version7/branches/aecom/Transims70/NewFormat/Old_Lane_Use_File.hpp
version7/branches/aecom/Transims70/NewFormat/Read_Old_Lane_Use.cpp
version7/branches/aecom/Transims70/Transims72.sln
version7/branches/aecom/Transims70/TransitNet/Build_Driver.cpp
Removed Paths:
-------------
version7/branches/aecom/Transims70/Data_Service/Lane_Use_Data.cpp
Modified: version7/branches/aecom/Transims70/AddLRSData/AddLRSData.cpp
===================================================================
--- version7/branches/aecom/Transims70/AddLRSData/AddLRSData.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/AddLRSData/AddLRSData.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -11,7 +11,7 @@
AddLRSData::AddLRSData (void) : Execution_Service ()
{
Program ("AddLRSData");
- Version (1);
+ Version (0);
Title ("LRS Data Processing");
Control_Key keys [] = { //--- code, key, level, status, type, default, range, help ----
Modified: version7/branches/aecom/Transims70/ArcJoin/ArcJoin.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcJoin/ArcJoin.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/ArcJoin/ArcJoin.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -11,7 +11,7 @@
ArcJoin::ArcJoin (void) : Data_Service ()
{
Program ("ArcJoin");
- Version (8);
+ Version (0);
Title ("Join Shapefiles");
Control_Key keys [] = { //--- code, key, level, status, type, default, range, help ----
Modified: version7/branches/aecom/Transims70/ArcNet/ArcNet.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcNet/ArcNet.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/ArcNet/ArcNet.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -11,7 +11,7 @@
ArcNet::ArcNet (void) : Draw_Service ()
{
Program ("ArcNet");
- Version (7);
+ Version (0);
Title ("Generate ArcView Shapefiles from a TRANSIMS Network");
System_File_Type optional_files [] = {
Modified: version7/branches/aecom/Transims70/ArcPerf/ArcPerf.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcPerf/ArcPerf.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/ArcPerf/ArcPerf.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -11,7 +11,7 @@
ArcPerf::ArcPerf (void) : Draw_Service ()
{
Program ("ArcPerf");
- Version (11);
+ Version (0);
Title ("ArcView Performance Files");
System_File_Type required_files [] = {
Modified: version7/branches/aecom/Transims70/ArcPlan/ArcPlan.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcPlan/ArcPlan.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/ArcPlan/ArcPlan.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -11,7 +11,7 @@
ArcPlan::ArcPlan (void) : Draw_Service ()
{
Program ("ArcPlan");
- Version (6);
+ Version (0);
Title ("Plan File Display Utility");
System_File_Type required_files [] = {
Modified: version7/branches/aecom/Transims70/ArcRider/ArcRider.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcRider/ArcRider.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/ArcRider/ArcRider.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -11,7 +11,7 @@
ArcRider::ArcRider (void) : Draw_Service ()
{
Program ("ArcRider");
- Version (3);
+ Version (0);
Title ("Ridership File Display Utility");
System_File_Type required_files [] = {
Modified: version7/branches/aecom/Transims70/ArcRider/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcRider/Control.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/ArcRider/Control.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -12,7 +12,7 @@
{
String key;
- //---- set the equivalance flag ----
+ //---- set the equivalence flag ----
Stop_Equiv_Flag (Check_Control_Key (NEW_ARC_STOP_GROUP_FILE));
Line_Equiv_Flag (Check_Control_Key (NEW_ARC_LINE_GROUP_FILE));
Modified: version7/branches/aecom/Transims70/ArcSnapshot/ArcSnapshot.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcSnapshot/ArcSnapshot.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/ArcSnapshot/ArcSnapshot.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -11,7 +11,7 @@
ArcSnapshot::ArcSnapshot (void) : Draw_Service ()
{
Program ("ArcSnapshot");
- Version (1);
+ Version (0);
Title ("Generate ArcView Shapefiles from TRANSIMS Snapshots");
System_File_Type required_files [] = {
Modified: version7/branches/aecom/Transims70/Converge_Service/Update_Times.cpp
===================================================================
--- version7/branches/aecom/Transims70/Converge_Service/Update_Times.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/Converge_Service/Update_Times.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -15,7 +15,7 @@
update_link_gap = gap_flag;
link_gap_data.Clear ();
- if (step_itr->time_averaging == SMOOTH_AVERAGING) {
+ if (Smooth_Flows ()) {
Smooth_Performance ();
}
Modified: version7/branches/aecom/Transims70/Converge_Service/Update_Tolls.cpp
===================================================================
--- version7/branches/aecom/Transims70/Converge_Service/Update_Tolls.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/Converge_Service/Update_Tolls.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -12,8 +12,8 @@
void Converge_Service::Update_Tolls (bool gap_flag)
{
- int p1, p2, p3, p4, p, toll, old_toll, function, index;
- double ratio, tim_ratio, factor, factor1;
+ int p1, p2, p3, p4, toll, old_toll, function, index;
+ double ratio, tim_ratio, sum_time, sum_time0, factor, factor1;
Dtime low, high;
bool skip;
@@ -23,10 +23,6 @@
Perf_Data *perf_ptr;
Gap_Data data;
- function = Dynamic_Toll_Function ();
-
- if (function == 0) return;
-
skip = (step_itr->toll_averaging == SKIP_AVERAGING);
if (step_itr->toll_averaging == YES_AVERAGING) {
factor = 1.0;
@@ -40,24 +36,26 @@
for (lane_use_itr = lane_use_array.begin (); lane_use_itr != lane_use_array.end (); lane_use_itr++) {
if (lane_use_itr->Max_Rate () > lane_use_itr->Min_Rate ()) {
- p1 = lane_use_array.toll_periods.Period (lane_use_itr->Start ());
- p2 = lane_use_array.toll_periods.Period (lane_use_itr->End () - 1);
- if (p2 < 0) p2 = lane_use_array.toll_periods.Num_Periods () - 1;
+ function = lane_use_itr->Toll_Func ();
+ if (function <= 0) continue;
+ low = lane_use_itr->Start ();
+ high = lane_use_itr->End () - 1;
+
+ p1 = perf_period_array.periods->Period (low);
+ p2 = perf_period_array.periods->Period (high);
+
+ sum_time = sum_time0 = 0;
+
for (; p1 <= p2; p1++) {
- lane_use_array.toll_periods.Period_Range (p1, low, high);
- p = perf_period_array.periods->Period (low, high);
- if (p < 0) continue;
-
- per_ptr = perf_period_array.Period_Ptr (p);
+ per_ptr = perf_period_array.Period_Ptr (p1);
if (per_ptr == 0) continue;
index = lane_use_itr->Dir_Index ();
dir_ptr = &dir_array [index];
- low = dir_ptr->Time0 ();
- if (low == 0) low = 1;
+ sum_time0 += dir_ptr->Time0 ();
if (dir_ptr->Use_Index () >= 0) {
index = dir_ptr->Use_Index ();
@@ -64,17 +62,21 @@
}
perf_ptr = per_ptr->Data_Ptr (lane_use_itr->Dir_Index ());
- tim_ratio = (double) perf_ptr->Time () / low;
+ sum_time += perf_ptr->Time ();
+ }
+ if (sum_time0 > 0.0) {
+ tim_ratio = sum_time / sum_time0;
+
ratio = functions.Apply_Function (function, tim_ratio);
- toll = lane_use_itr->Toll () + lane_use_itr->Min_Rate ();
+ toll = lane_use_itr->Min_Rate ();
if (ratio > 0.0) {
if (ratio > 1.0) ratio = 1.0;
toll += DTOI (ratio * (lane_use_itr->Max_Rate () - lane_use_itr->Min_Rate ()));
}
- old_toll = lane_use_itr->Period_Toll (p1);
+ old_toll = lane_use_itr->Toll ();
if (save_toll_gap && gap_flag) {
data.Add (old_toll, toll);
@@ -81,7 +83,7 @@
if (toll_tod_gap_flag) {
p3 = toll_tod_gap_file.Period (low);
- p4 = toll_tod_gap_file.Period (high - 1);
+ p4 = toll_tod_gap_file.Period (high);
if (p3 < 0 && p4 < 0) continue;
if (p3 < 0) p3 = 0;
@@ -94,7 +96,7 @@
}
if (!skip) {
toll = DTOI ((old_toll * factor + toll) / factor1);
- lane_use_itr->Period_Toll (p1, toll);
+ lane_use_itr->Toll (toll);
}
}
}
Modified: version7/branches/aecom/Transims70/ConvertTrips/ConvertTrip_Data.cpp
===================================================================
--- version7/branches/aecom/Transims70/ConvertTrips/ConvertTrip_Data.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/ConvertTrips/ConvertTrip_Data.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -99,7 +99,11 @@
if (trip_file->Max_OD () == 0) {
trip_file->Max_OD (max_zone);
}
- exe->Print (0, " (Zones=") << trip_file->Max_OD () << " Tables=" << trip_file->Tables () << ")";
+ if (trip_file->Num_Periods () > 1) {
+ exe->Print (0, " (Periods=") << trip_file->Num_Periods () << " Zones=" << trip_file->Max_OD () << " Tables=" << trip_file->Tables () << ")";
+ } else {
+ exe->Print (0, " (Zones=") << trip_file->Max_OD () << " Tables=" << trip_file->Tables () << ")";
+ }
}
}
Modified: version7/branches/aecom/Transims70/ConvertTrips/ConvertTrips.cpp
===================================================================
--- version7/branches/aecom/Transims70/ConvertTrips/ConvertTrips.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/ConvertTrips/ConvertTrips.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -11,7 +11,7 @@
ConvertTrips::ConvertTrips (void) : Select_Service ()
{
Program ("ConvertTrips");
- Version (7);
+ Version (1);
Title ("Trip Table Conversion Utility");
System_File_Type required_files [] = {
Modified: version7/branches/aecom/Transims70/ConvertTrips/Read_Trip_Table.cpp
===================================================================
--- version7/branches/aecom/Transims70/ConvertTrips/Read_Trip_Table.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/ConvertTrips/Read_Trip_Table.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -11,7 +11,7 @@
void ConvertTrips::Read_Trip_Table (ConvertTrip_Itr group)
{
Dtime tod, low, high, start, end;
- int p, p1, p2, num_p, trp, period, current, first_p, last_p;
+ int p, p1, p2, num_p, trp, period, current, first_p, last_p, per, num_periods;
int total, stat, errors, org_zone, des_zone, org, des, o, d, trips, num, num_shares, even_bucket, even;
bool share_flag, factor_flag, time_fac_flag, scale_flag, return_flag, period_flag, forward;
double trip, factor, added, deleted, bucket;
@@ -31,6 +31,9 @@
added = deleted = 0.0;
file = group->Trip_File ();
+ num_periods = file->Num_Periods ();
+ if (num_periods < 1) num_periods = 1;
+
period_flag = (file->Num_Periods () > 1);
return_flag = group->Return_Flag ();
@@ -57,235 +60,238 @@
forward = false;
- //---- process each origin zone ----
+ for (per = 0; per < num_periods; per++) {
- for (org_itr = org_map->begin (); org_itr != org_map->end (); org_itr++) {
- Show_Progress ();
- org_zone = org_itr->first;
- org = org_itr->second;
+ //---- process each origin zone ----
- if (select_org_zones && !org_zone_range.In_Range (org_zone)) continue;
+ for (org_itr = org_map->begin (); org_itr != org_map->end (); org_itr++) {
+ Show_Progress ();
+ org_zone = org_itr->first;
+ org = org_itr->second;
- //---- read trip matrix ----
+ if (select_org_zones && !org_zone_range.In_Range (org_zone)) continue;
- if (!file->Read_Record (org_zone)) continue;
+ //---- read trip matrix ----
- if (file->Row_Sum (group->Table ()) == 0.0) continue;
+ if (!file->Read_Row (org_zone, per)) continue;
- org_ptr = zone_loc_map.Locations (org_zone);
- forward = !forward;
+ if (file->Row_Sum (group->Table ()) == 0.0) continue;
- //---- process each destination ----
+ org_ptr = zone_loc_map.Locations (org_zone);
+ forward = !forward;
- for (des = -1; ; ) {
- if (forward) {
- if (des == -1) {
- des_itr = des_map->begin ();
+ //---- process each destination ----
+
+ for (des = -1; ; ) {
+ if (forward) {
+ if (des == -1) {
+ des_itr = des_map->begin ();
+ } else {
+ des_itr++;
+ }
+ if (des_itr == des_map->end ()) break;
+
+ des_zone = des_itr->first;
+ des = des_itr->second;
} else {
- des_itr++;
+ if (des == -1) {
+ des_ritr = des_map->rbegin ();
+ } else {
+ des_ritr++;
+ }
+ if (des_ritr == des_map->rend ()) break;
+
+ des_zone = des_ritr->first;
+ des = des_ritr->second;
}
- if (des_itr == des_map->end ()) break;
-
- des_zone = des_itr->first;
- des = des_itr->second;
- } else {
- if (des == -1) {
- des_ritr = des_map->rbegin ();
- } else {
- des_ritr++;
- }
- if (des_ritr == des_map->rend ()) break;
+ if (select_des_zones && !des_zone_range.In_Range (des_zone)) continue;
- des_zone = des_ritr->first;
- des = des_ritr->second;
- }
- if (select_des_zones && !des_zone_range.In_Range (des_zone)) continue;
+ if (!file->Get_Cell (des_zone, group->Table (), trip)) continue;
- if (!file->Get_Cell (des_zone, group->Table (), trip)) continue;
+ if (trip == 0.0) continue;
+ if (trip < 0) {
+ if (trip > -32767 && trip < -0.0001) Warning (String ("Trips from %d to %d are Out of Range (%lf < 0)") % org_zone % des_zone % trip);
+ continue;
+ }
+ des_ptr = zone_loc_map.Locations (des_zone);
- if (trip == 0.0) continue;
- if (trip < 0) {
- if (trip > -32767 && trip < -0.0001) Warning (String ("Trips from %d to %d are Out of Range (%lf < 0)") % org_zone % des_zone % trip);
- continue;
- }
- des_ptr = zone_loc_map.Locations (des_zone);
+ if (period_flag) {
+ period = per;
+ }
- if (period_flag) {
- period = file->Period ();
- }
+ //---- check for a factor period ----
- //---- check for a factor period ----
+ if (time_fac_flag) {
+ if (period >= 0) {
+ first_p = last_p = -1;
- if (time_fac_flag) {
- if (period >= 0) {
- first_p = last_p = -1;
+ for (p = 0; p <= num_p; p++) {
+ tod = group->Diurnal_Period_Time (p);
- for (p = 0; p <= num_p; p++) {
- tod = group->Diurnal_Period_Time (p);
-
- if (group->Factor_Period_Num (tod) == period) {
- if (first_p < 0) first_p = p;
- last_p = p;
+ if (group->Factor_Period_Num (tod) == period) {
+ if (first_p < 0) first_p = p;
+ last_p = p;
+ }
}
- }
- if (last_p < 0) {
+ if (last_p < 0) {
+ first_p = 0;
+ last_p = num_p;
+ period = 0;
+ }
+ } else {
first_p = 0;
last_p = num_p;
period = 0;
}
- } else {
- first_p = 0;
- last_p = num_p;
- period = 0;
}
- }
- //---- apply the scaling factor ----
+ //---- apply the scaling factor ----
- if (scale_flag) {
- trip *= group->Scaling_Factor ();
- }
- if (zone_sum_flag) {
- org_in [org] += trip;
- des_in [des] += trip;
- }
- trip += bucket;
- trips = (int) trip;
- if (trips < 0) trips = 0;
- bucket = trip - trips;
+ if (scale_flag) {
+ trip *= group->Scaling_Factor ();
+ }
+ if (zone_sum_flag) {
+ org_in [org] += trip;
+ des_in [des] += trip;
+ }
+ trip += bucket;
+ trips = (int) trip;
+ if (trips < 0) trips = 0;
+ bucket = trip - trips;
- if (trips == 0) continue;
- total += trips;
+ if (trips == 0) continue;
+ total += trips;
- //---- apply the selection script ----
+ //---- apply the selection script ----
- if (share_flag) {
- group->Diurnal_OD (org_zone, des_zone);
+ if (share_flag) {
+ group->Diurnal_OD (org_zone, des_zone);
- num = group->Execute_Diurnal ();
+ num = group->Execute_Diurnal ();
- if (num < 1 || num > num_shares) {
- Error (String ("Diurnal Selection Value %d is Out of Range (1..%d)") % num % num_shares);
+ if (num < 1 || num > num_shares) {
+ Error (String ("Diurnal Selection Value %d is Out of Range (1..%d)") % num % num_shares);
+ }
+ num--;
+ } else {
+ num = 0;
}
- num--;
- } else {
- num = 0;
- }
- //---- get the travel time ----
+ //---- get the travel time ----
- if (skim_flag) {
- o = skim_file->Org_Index (org_zone);
- d = skim_file->Des_Index (des_zone);
+ if (skim_flag) {
+ o = skim_file->Org_Index (org_zone);
+ d = skim_file->Des_Index (des_zone);
- if (o >= 0 && d >= 0) {
- skim_ptr = skim_file->Time_Skim (o, d);
- } else {
- skim_ptr = 0;
+ if (o >= 0 && d >= 0) {
+ skim_ptr = skim_file->Time_Skim (o, d);
+ } else {
+ skim_ptr = 0;
+ }
}
- }
- //---- apply adjustment factors ----
+ //---- apply adjustment factors ----
- if (factor_flag) {
- o = (equiv_flag) ? zone_equiv.Zone_Group (org_zone) : org_zone;
- d = (equiv_flag) ? zone_equiv.Zone_Group (des_zone) : des_zone;
+ if (factor_flag) {
+ o = (equiv_flag) ? zone_equiv.Zone_Group (org_zone) : org_zone;
+ d = (equiv_flag) ? zone_equiv.Zone_Group (des_zone) : des_zone;
- if (time_fac_flag) {
- period = -1;
- p1 = p2 = 0;
- trip = 0.0;
+ if (time_fac_flag) {
+ period = -1;
+ p1 = p2 = 0;
+ trip = 0.0;
- for (p = first_p; p <= last_p; p++) {
- tod = group->Diurnal_Period_Time (p);
+ for (p = first_p; p <= last_p; p++) {
+ tod = group->Diurnal_Period_Time (p);
- current = group->Factor_Period_Num (tod);
+ current = group->Factor_Period_Num (tod);
- if (current != period) {
- if (period >= 0) {
- period_fac = group->Period_Factor (o, d, period);
+ if (current != period) {
+ if (period >= 0) {
+ period_fac = group->Period_Factor (o, d, period);
- factor = trip * period_fac->Factor ();
- if (factor > trip) {
- added += factor - trip;
- } else {
- deleted += trip - factor;
- }
- trp = period_fac->Bucket_Factor (trip);
+ factor = trip * period_fac->Factor ();
+ if (factor > trip) {
+ added += factor - trip;
+ } else {
+ deleted += trip - factor;
+ }
+ trp = period_fac->Bucket_Factor (trip);
- if (trp > 0 && return_flag) {
- even = (((trp + even_bucket) / 2) * 2);
- even_bucket += trp - even;
- trp = even;
- }
- if (trp > 0) {
- stat = Set_Trips (group, org, des, trp, num, p1, p2, return_flag);
+ if (trp > 0 && return_flag) {
+ even = (((trp + even_bucket) / 2) * 2);
+ even_bucket += trp - even;
+ trp = even;
+ }
+ if (trp > 0) {
+ stat = Set_Trips (group, org, des, trp, num, p1, p2, return_flag);
- if (stat > 0) {
- errors += stat;
- Print (1, String (error_msg) % stat % ((stat > 1) ? "s " : " ") % org_zone % des_zone);
+ if (stat > 0) {
+ errors += stat;
+ Print (1, String (error_msg) % stat % ((stat > 1) ? "s " : " ") % org_zone % des_zone);
+ }
}
}
+ period = current;
+ p1 = p;
+ trip = 0.0;
}
- period = current;
+ trip += trips * group->Share (p, num);
+ p2 = p;
+ }
+
+ } else {
+ p1 = first_p;
+ p2 = last_p;
+ trip = trips;
+ }
+ period_fac = group->Period_Factor (o, d, period);
+
+ factor = trip * period_fac->Factor ();
+ if (factor > trip) {
+ added += factor - trip;
+ } else {
+ deleted += trip - factor;
+ }
+ trp = period_fac->Bucket_Factor (trip);
+ } else if (period >= 0) {
+ p1 = p2 = -1;
+ file->Period_Range (period, start, end);
+
+ for (p = first_p; p <= last_p; p++) {
+ group->Diurnal_Time_Range (p, low, high);
+
+ if (low <= start && start <= high) {
p1 = p;
- trip = 0.0;
}
- trip += trips * group->Share (p, num);
- p2 = p;
+ if (low <= end && end <= high) {
+ p2 = p;
+ }
+ if (p1 >= 0 && p2 >= 0) break;
}
-
+ trp = trips;
} else {
p1 = first_p;
p2 = last_p;
- trip = trips;
+ trp = trips;
}
- period_fac = group->Period_Factor (o, d, period);
-
- factor = trip * period_fac->Factor ();
- if (factor > trip) {
- added += factor - trip;
- } else {
- deleted += trip - factor;
+ if (trp > 0 && return_flag) {
+ even = (((trp + even_bucket) / 2) * 2);
+ even_bucket += trp - even;
+ trp = even;
}
- trp = period_fac->Bucket_Factor (trip);
- } else if (period >= 0) {
- p1 = p2 = -1;
- file->Period_Range (period, start, end);
- for (p = first_p; p <= last_p; p++) {
- group->Diurnal_Time_Range (p, low, high);
+ //---- process the trips ----
- if (low <= start && start <= high) {
- p1 = p;
+ if (trp > 0) {
+ stat = Set_Trips (group, org, des, trp, num, p1, p2, return_flag);
+
+ if (stat > 0) {
+ errors += stat;
+ Print (1, String (error_msg) % stat % ((stat > 1) ? "s " : " ") % org_zone % des_zone);
}
- if (low <= end && end <= high) {
- p2 = p;
- }
- if (p1 >= 0 && p2 >= 0) break;
}
- trp = trips;
- } else {
- p1 = first_p;
- p2 = last_p;
- trp = trips;
}
- if (trp > 0 && return_flag) {
- even = (((trp + even_bucket) / 2) * 2);
- even_bucket += trp - even;
- trp = even;
- }
-
- //---- process the trips ----
-
- if (trp > 0) {
- stat = Set_Trips (group, org, des, trp, num, p1, p2, return_flag);
-
- if (stat > 0) {
- errors += stat;
- Print (1, String (error_msg) % stat % ((stat > 1) ? "s " : " ") % org_zone % des_zone);
- }
- }
}
}
End_Progress (clock ());
Modified: version7/branches/aecom/Transims70/Data_Service/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Control.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/Data_Service/Control.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -203,18 +203,6 @@
}
}
- //---- dynamic toll function ----
-
- if (Control_Key_Status (DYNAMIC_TOLL_FUNCTION)) {
- key = Get_Control_Text (DYNAMIC_TOLL_FUNCTION);
-
- if (!key.empty ()) {
- toll_function = functions.Max_Function () + 1;
-
- functions.Add_Function (toll_function, key, false);
- }
- }
-
//---- parking penalty function ----
if (Control_Key_Status (PARKING_DEMAND_TYPE)) {
Modified: version7/branches/aecom/Transims70/Data_Service/Data_Service.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Data_Service.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/Data_Service/Data_Service.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -29,6 +29,7 @@
Bearing_Warnings (false);
Detector_Flag (true);
Zone_Loc_Flag (false);
+ Dynamic_Tolling (false);
Congested_Ratio (Round (300));
Maximum_Time_Ratio (300);
@@ -38,7 +39,7 @@
perf_veh_type_map.assign (25, 0);
fare_flag = false;
- num_fare_zone = num_lane_flows = toll_function = 0;
+ num_fare_zone = num_lane_flows = 0;
turn_shape_setback = TURN_SHAPE_SETBACK;
dat = this;
@@ -63,7 +64,6 @@
{ ZONE_LOCATION_MAP_FILE, "ZONE_LOCATION_MAP_FILE", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
{ ROUTE_MODE_MAP, "ROUTE_MODE_MAP", LEVEL1, OPT_KEY, LIST_KEY, "1=BUS", "#=BUS, #=EXPRESS, #=BRT, #=STREETCAR, #=LRT, #=RAPIDRAIL, #=REGIONRAIL", NO_HELP },
{ MODE_VEH_TYPE_MAP, "MODE_VEH_TYPE_MAP", LEVEL1, OPT_KEY, LIST_KEY, "BUS=4", "BUS=4, EXPRESS=5, BRT=6, STREETCAR=7, LRT=8, RAPIDRAIL=9, REGIONRAIL=10", NO_HELP },
- { DYNAMIC_TOLL_FUNCTION, "DYNAMIC_TOLL_FUNCTION", LEVEL0, OPT_KEY, TEXT_KEY, "", "TYPE, A, B, C, D", NO_HELP },
{ PARKING_DEMAND_TYPE, "PARKING_DEMAND_TYPE", LEVEL0, OPT_KEY, TEXT_KEY, "CAPACITY", "ALL, CAPACITY, PARKRIDE, TRANSIT", NO_HELP },
{ PARKING_PENALTY_FUNCTION, "PARKING_PENALTY_FUNCTION", LEVEL0, OPT_KEY, TEXT_KEY, "", "TYPE, A, B, C, D", NO_HELP },
END_CONTROL
Modified: version7/branches/aecom/Transims70/Data_Service/Data_Service.vcxproj
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Data_Service.vcxproj 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/Data_Service/Data_Service.vcxproj 2018-08-10 16:40:25 UTC (rev 1710)
@@ -91,7 +91,6 @@
<ClCompile Include="Gap_Data.cpp" />
<ClCompile Include="Internal_External.cpp" />
<ClCompile Include="Lane_Services.cpp" />
- <ClCompile Include="Lane_Use_Data.cpp" />
<ClCompile Include="Line_Data.cpp" />
<ClCompile Include="Park_Demand_Data.cpp" />
<ClCompile Include="Performance_Data.cpp" />
Modified: version7/branches/aecom/Transims70/Data_Service/Data_Service.vcxproj.filters
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Data_Service.vcxproj.filters 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/Data_Service/Data_Service.vcxproj.filters 2018-08-10 16:40:25 UTC (rev 1710)
@@ -508,9 +508,6 @@
<ClCompile Include="Vehicle_Index.cpp">
<Filter>Source Files\Data</Filter>
</ClCompile>
- <ClCompile Include="Lane_Use_Data.cpp">
- <Filter>Source Files\Data</Filter>
- </ClCompile>
<ClCompile Include="Turn_Delay_Data.cpp">
<Filter>Source Files\Data</Filter>
</ClCompile>
Deleted: version7/branches/aecom/Transims70/Data_Service/Lane_Use_Data.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Lane_Use_Data.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/Data_Service/Lane_Use_Data.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -1,77 +0,0 @@
-//*********************************************************
-// Lane_Use_Data.cpp - lane use data process
-//*********************************************************
-
-#include "Lane_Use_Data.hpp"
-#include "Data_Service.hpp"
-
-//-----------------------------------------------------------
-// Toll
-//-----------------------------------------------------------
-
-int Lane_Use_Data::Toll (Dtime tod)
-{
- if (tolls.size () == 0 || tod < start || tod > end) return (0);
-
- int period = dat->lane_use_array.toll_periods.Period (tod);
- if (period < 0) {
- period = dat->toll_time_periods.Period (tod);
- if (period < 0) return (0);
- }
- return (Period_Toll (period));
-}
-//-----------------------------------------------------------
-// Period_Toll
-//-----------------------------------------------------------
-
-int Lane_Use_Data::Period_Toll (int period)
-{
- if (period < 0 || period >= (int) tolls.size ()) return (Toll () + Min_Rate ());
- return (tolls [period]);
-}
-
-//-----------------------------------------------------------
-// Toll
-//-----------------------------------------------------------
-
-void Lane_Use_Data::Toll (Dtime tod, int value)
-{
- if (tod < start || tod > end) return;
-
- int period = dat->lane_use_array.toll_periods.Period (tod);
- if (period < 0) {
- period = dat->toll_time_periods.Period (tod);
- if (period < 0) return;
- }
- Period_Toll (period, value);
-}
-//-----------------------------------------------------------
-// Period_Toll
-//-----------------------------------------------------------
-
-void Lane_Use_Data::Period_Toll (int period, int value)
-{
- if (period >= 0 && period < (int) tolls.size ()) {
- tolls [period] = (short) value;
- }
-}
-
-//-----------------------------------------------------------
-// Initialize_Tolls
-//-----------------------------------------------------------
-
-void Lane_Use_Data::Initialize_Tolls (void)
-{
- int num_periods = dat->lane_use_array.toll_periods.Num_Periods ();
-
- if (num_periods > 0) {
- tolls.assign (num_periods, 0);
-
- int p1 = dat->lane_use_array.toll_periods.Period (start);
- int p2 = dat->lane_use_array.toll_periods.Period (end - 1);
-
- for (; p1 <= p2; p1++) {
- tolls [p1] = (short) (Toll () + Min_Rate ());
- }
- }
-}
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Lane_Uses.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Lane_Uses.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Lane_Uses.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -66,6 +66,10 @@
lane_use_ptr->Next_Index (dir_ptr->First_Lane_Use ());
dir_ptr->First_Lane_Use (num);
+
+ if (lane_use_ptr->Max_Rate () > 0 && lane_use_ptr->Toll_Func () > 0) {
+ Dynamic_Tolling (true);
+ }
}
//----- identify time period restrictions ----
@@ -247,12 +251,6 @@
}
int percent = System_Data_Reserve (LANE_USE);
- if (file.toll_periods.Num_Periods () > toll_time_periods.Num_Periods ()) {
- lane_use_array.toll_periods = file.toll_periods;
- } else {
- lane_use_array.toll_periods = toll_time_periods;
- }
-
if (lane_use_array.capacity () == 0 && percent > 0) {
int num = file.Num_Records ();
@@ -455,18 +453,14 @@
lane_use_rec.Max_Rate (DTOI (rate));
}
+ if (lane_use_rec.Max_Rate () < lane_use_rec.Min_Rate ()) {
+ Warning (String ("Lane Use %d Toll Rate Range is Illegal") % Progress_Count ());
+ }
+ lane_use_rec.Toll_Func (file.Toll_Func ());
- if (lane_use_rec.Max_Rate () > lane_use_rec.Min_Rate () || file.toll_periods.Num_Periods () > 0) {
- lane_use_rec.Initialize_Tolls ();
-
- for (int i = 0; i < file.toll_periods.Num_Periods (); i++) {
- int toll = Round (file.Period_Toll (i));
- if (toll > lane_use_rec.Period_Toll (i)) {
- lane_use_rec.Period_Toll (i, toll);
- }
- }
+ if (lane_use_rec.Toll_Func () > 0 && !exe->functions.Function_Check (lane_use_rec.Toll_Func ())) {
+ Warning (String ("Lane Use %d Toll Function %d was Not Found") % Progress_Count () % lane_use_rec.Toll_Func ());
}
-
lane_use_rec.Min_Delay (file.Min_Delay ());
lane_use_rec.Max_Delay (file.Max_Delay ());
lane_use_rec.Speed (file.Speed ());
Modified: version7/branches/aecom/Transims70/Data_Service/Write_Lane_Uses.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Write_Lane_Uses.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/Data_Service/Write_Lane_Uses.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -158,17 +158,7 @@
}
file.Max_Rate (rate);
- if (data.Max_Rate () > data.Min_Rate ()) {
- for (int i = 0; i < file.toll_periods.Num_Periods (); i++) {
- Dtime tod = file.toll_periods.Period_Time (i);
- rate = UnRound (data.Toll (tod));
- file.Period_Toll (i, rate);
- }
- } else {
- for (int i = 0; i < file.toll_periods.Num_Periods (); i++) {
- file.Period_Toll (i, 0.0);
- }
- }
+ file.Toll_Func (data.Toll_Func ());
file.Min_Delay (UnRound (data.Min_Delay ()));
file.Max_Delay (UnRound (data.Max_Delay ()));
Modified: version7/branches/aecom/Transims70/FileFormat/FileFormat.cpp
===================================================================
--- version7/branches/aecom/Transims70/FileFormat/FileFormat.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/FileFormat/FileFormat.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -11,7 +11,7 @@
FileFormat::FileFormat (void) : Execution_Service ()
{
Program ("FileFormat");
- Version (7);
+ Version (0);
Title ("File Format Conversion");
Control_Key keys [] = { //--- code, key, level, status, type, default, range, help ----
Modified: version7/branches/aecom/Transims70/File_Service/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/File_Service/Control.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/File_Service/Control.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -34,13 +34,6 @@
} else {
Volume_Data_Type (VOLUME_DATA);
}
- if (Control_Key_Status (TOLL_TIME_PERIODS)) {
- key = Get_Control_String (TOLL_TIME_PERIODS);
-
- if (!key.empty ()) {
- toll_time_periods.Add_Breaks (key);
- }
- }
if (Control_Key_Status (TRANSIT_TIME_PERIODS)) {
key = Get_Control_String (TRANSIT_TIME_PERIODS);
@@ -156,25 +149,6 @@
case LANE_USE:
case NEW_LANE_USE:
file->file = new Lane_Use_File (key, file->access, format);
- if (i == NEW_LANE_USE) {
- Lane_Use_File *use_file = (Lane_Use_File *) file->file;
-
- if (!Control_Key_Empty (TOLL_TIME_PERIODS)) {
- use_file->Clear_Fields ();
- use_file->toll_periods.Copy_Periods (toll_time_periods);
- use_file->Create_Fields ();
- use_file->Write_Header ();
- Print (1);
- } else if (toll_time_periods.Num_Periods () > 0) {
- use_file->Clear_Fields ();
- use_file->toll_periods.Copy_Periods (toll_time_periods);
- use_file->Create_Fields ();
- use_file->Write_Header ();
- }
- } else if (Control_Key_Empty (TOLL_TIME_PERIODS)) {
- Lane_Use_File *use_file = (Lane_Use_File *) file->file;
- toll_time_periods.Copy_Periods (use_file->toll_periods);
- }
break;
case CONNECTION:
turn_delay = turn_perf = true;
@@ -385,10 +359,6 @@
if (!Control_Key_Empty (VOLUME_DATA_TYPE)) Print (1);
Get_Control_Text (VOLUME_DATA_TYPE);
}
- if (Control_Key_Status (TOLL_TIME_PERIODS) && !System_File_Flag (NEW_LANE_USE)) {
- if (!Control_Key_Empty (TOLL_TIME_PERIODS)) Print (1);
- key = Get_Control_Text (TOLL_TIME_PERIODS);
- }
if (Control_Key_Status (TRANSIT_TIME_PERIODS) && !System_File_Flag (NEW_ROUTE_NODES)) {
if (!Control_Key_Empty (TRANSIT_TIME_PERIODS)) Print (1);
key = Get_Control_Text (TRANSIT_TIME_PERIODS);
Modified: version7/branches/aecom/Transims70/File_Service/Lane_Use_File.cpp
===================================================================
--- version7/branches/aecom/Transims70/File_Service/Lane_Use_File.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/File_Service/Lane_Use_File.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -55,10 +55,6 @@
bool Lane_Use_File::Create_Fields (void)
{
- int i;
- String name;
- Dtime low, high;
-
Clear_Fields ();
Add_Field ("LINK", DB_INTEGER, 10);
@@ -83,6 +79,7 @@
Add_Field ("TOLL", DB_DOUBLE, 2.1, CENTS, true);
Add_Field ("MIN_RATE", DB_DOUBLE, 4.1, CENT_MI, true);
Add_Field ("MAX_RATE", DB_DOUBLE, 4.1, CENT_MI, true);
+ Add_Field ("TOLL_FUNC", DB_INTEGER, 2, NO_UNITS, true);
Add_Field ("MIN_DELAY", DB_DOUBLE, 8.1, SECONDS);
Add_Field ("MAX_DELAY", DB_DOUBLE, 8.1, SECONDS);
Add_Field ("SPEED", DB_DOUBLE, 5.1, MPH);
@@ -90,11 +87,6 @@
Add_Field ("CAPACITY", DB_UNSIGNED, 8, VPH);
Add_Field ("CAP_FAC", DB_DOUBLE, 6.2);
- for (i = 0; i < toll_periods.Num_Periods (); i++) {
- toll_periods.Period_Range (i, low, high);
- name = "TOLL_" + low.Time_Label (HOUR_MINUTE);
- Add_Field (name, DB_DOUBLE, 4.1, CENTS, true);
- }
if (exe->Notes_Name_Flag ()) {
Add_Field ("NOTES", DB_STRING, STRING_FIELD_SIZE);
}
@@ -129,6 +121,7 @@
toll = Optional_Field ("TOLL", "COST", "CENTS");
min_rate = Optional_Field ("MIN_RATE", "MIN_TOLL", "TOLL_RATE", "RATE", "COST_RATE");
max_rate = Optional_Field ("MAX_RATE", "MAX_TOLL", "MAX_COST");
+ toll_func = Optional_Field ("TOLL_FUNC", "FUNCTION", "TOLL_RATIO");
min_delay = Optional_Field ("MIN_DELAY", "FIXED", "DELAY");
max_delay = Optional_Field ("MAX_DELAY", "VARIABLE", "RANDOM");
speed = Optional_Field ("SPEED", "SPEEDLMT", "SPD", "MAXSPD", "FSPD");
@@ -136,35 +129,6 @@
capacity = Optional_Field ("CAP", "CAPACITY");
cap_fac = Optional_Field ("CAP_FAC", "CAPACITY_FACTOR", "CAP_FACTOR");
- toll_periods.Clear ();
-
- int i;
- Field_Ptr fld_ptr;
- String name, breaks;
- Dtime time;
-
- for (i = 0; i < Num_Fields (); i++) {
- if (i == toll || i == min_rate) continue;
-
- fld_ptr = Field (i);
- name = fld_ptr->Name ();
-
- if (name.Starts_With ("TOLL_")) {
- name.erase (0, 5);
- time.Time_Label (name, HOUR_MINUTE);
-
- if (breaks.size () > 0) {
- breaks += ", ";
- }
- breaks += time.Time_String (HOUR_CLOCK);
-
- tolls.push_back (i);
- Set_Units (i, CENTS);
- }
- }
- if (breaks.size () > 0) {
- toll_periods.Add_Breaks (breaks);
- }
dir = LinkDir_Type_Field ();
Notes_Field (Optional_Field (NOTES_FIELD_NAMES));
@@ -207,45 +171,3 @@
return (true);
}
-//-----------------------------------------------------------
-// Toll
-//-----------------------------------------------------------
-
-double Lane_Use_File::Toll (Dtime tod)
-{
- int period = toll_periods.Period (tod);
- if (period < 0) return (0);
-
- return (Get_Double (tolls [period]));
-}
-//-----------------------------------------------------------
-// Period_Toll
-//-----------------------------------------------------------
-
-double Lane_Use_File::Period_Toll (int period)
-{
- if (period < 0 || period >= toll_periods.Num_Periods ()) return (0);
- return (Get_Double (tolls [period]));
-}
-
-//-----------------------------------------------------------
-// Toll
-//-----------------------------------------------------------
-
-void Lane_Use_File::Toll (Dtime tod, double value)
-{
- int period = toll_periods.Period (tod);
- if (period >= 0) {
- Put_Field (tolls [period], value);
- }
-}
-//-----------------------------------------------------------
-// Period_Toll
-//-----------------------------------------------------------
-
-void Lane_Use_File::Period_Toll (int period, double value)
-{
- if (period >= 0 && period < toll_periods.Num_Periods ()) {
- Put_Field (tolls [period], value);
- }
-}
Modified: version7/branches/aecom/Transims70/File_Service/Services.cpp
===================================================================
--- version7/branches/aecom/Transims70/File_Service/Services.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/File_Service/Services.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -148,8 +148,6 @@
{ SAVE_LANE_USE_FLOWS, "SAVE_LANE_USE_FLOWS", LEVEL0, OPT_KEY, BOOL_KEY, "FALSE", BOOL_RANGE, NO_HELP },
{ VOLUME_DATA_TYPE, "VOLUME_DATA_TYPE", LEVEL0, OPT_KEY, TEXT_KEY, "VOLUME", VOLUME_FIELD_RANGE, NO_HELP },
- { TOLL_TIME_PERIODS, "TOLL_TIME_PERIODS", LEVEL0, OPT_KEY, TEXT_KEY, "NONE", TIME_BREAK_RANGE, NO_HELP },
-
{ TRANSIT_TIME_PERIODS, "TRANSIT_TIME_PERIODS", LEVEL0, OPT_KEY, TEXT_KEY, "NONE", TIME_BREAK_RANGE, NO_HELP },
{ ROUTE_NODE_OFFSET_FLAG, "ROUTE_NODE_OFFSET_FLAG", LEVEL0, OPT_KEY, BOOL_KEY, "FALSE", BOOL_RANGE, NO_HELP },
{ ROUTE_NODE_RUN_TIME_FLAG, "ROUTE_NODE_RUN_TIME_FLAG", LEVEL0, OPT_KEY, BOOL_KEY, "FALSE", BOOL_RANGE, NO_HELP },
Modified: version7/branches/aecom/Transims70/Fratar/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/Fratar/Control.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/Fratar/Control.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -313,7 +313,7 @@
if (!key.empty ()) {
margin_ptr->zone_equiv = new Zone_Equiv ();
- margin_ptr->zone_equiv->File_Type ("Origin Equivalance File");
+ margin_ptr->zone_equiv->File_Type ("Origin Equivalence File");
margin_ptr->zone_equiv->Open (Project_Filename (key));
margin_ptr->equiv_flag = true;
}
@@ -419,7 +419,7 @@
if (!key.empty ()) {
margin_ptr->zone_equiv = new Zone_Equiv ();
- margin_ptr->zone_equiv->File_Type ("Destination Equivalance File");
+ margin_ptr->zone_equiv->File_Type ("Destination Equivalence File");
margin_ptr->zone_equiv->Open (Project_Filename (key));
margin_ptr->equiv_flag = true;
}
@@ -527,7 +527,7 @@
if (!key.empty ()) {
margin_ptr->time_equiv = new Time_Equiv ();
- margin_ptr->zone_equiv->File_Type ("Period Equivalance File");
+ margin_ptr->zone_equiv->File_Type ("Period Equivalence File");
margin_ptr->time_equiv->Open (Project_Filename (key));
margin_ptr->equiv_flag = true;
}
Modified: version7/branches/aecom/Transims70/Fratar/Fratar.cpp
===================================================================
--- version7/branches/aecom/Transims70/Fratar/Fratar.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/Fratar/Fratar.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -11,7 +11,7 @@
Fratar::Fratar (void) : Data_Service ()
{
Program ("Fratar");
- Version (1);
+ Version (0);
Title ("Trip Table Factoring");
int data_service_keys [] = {
Modified: version7/branches/aecom/Transims70/GTFSData/Build_Routes.cpp
===================================================================
--- version7/branches/aecom/Transims70/GTFSData/Build_Routes.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/GTFSData/Build_Routes.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -10,9 +10,9 @@
void GTFSData::Build_Routes (void)
{
- int dir, line, index, service, link, link_dir, last_dir, last_node, last_link, best_dir, best_link, best_node, join_node;
+ int dir, line, index, service, link, link_dir, last_dir, last_node, last_link, best_dir, best_link, best_node, join_node, stop_index;
double distance, diff, offset, diff1, diff2, off1, off2, best_diff, best_offset;
- String route;
+ String route, sign;
bool new_route, new_stops;
XY_Points *xy_ptr;
XY_Point point, pt1, pt2;
@@ -41,7 +41,11 @@
Link_Data *link_ptr;
Link_Itr link_itr;
Node_Data *node_ptr;
+ Point_Map_Itr stop_pt_itr;
+ Int2_Map_Itr int2_itr;
+ Integers *list_ptr;
+
//---- draw GTFS routes ----
Show_Message (1, "Building TRANSIMS Routes -- Record");
@@ -55,253 +59,256 @@
for (route_itr = gtfs_route_array.begin (); route_itr != gtfs_route_array.end (); route_itr++) {
Show_Progress ();
- new_route = !route.Equals (route_itr->ID ());
+ for (int2_itr = route_itr->route_dir.begin (); int2_itr != route_itr->route_dir.end (); int2_itr++) {
+ route = route_itr->Code ();
+ route += " to ";
+ route += head_sign [int2_itr->first.first];
- //---- process each trip ----
+ list_ptr = &trip_list [int2_itr->second];
- for (trip_itr = route_itr->trip_list.begin (); trip_itr != route_itr->trip_list.end (); trip_itr++) {
- trip_ptr = >fs_trip_array [*trip_itr];
+ //---- initialize a new route ----
- if (new_route || trip_ptr->Dir () != dir || trip_ptr->Service () != service) {
+ line_data.Clear ();
+ line_data.Route (line++);
+ line_data.Mode (mode_map [route_itr->Type ()]);
+ line_data.Type (type_map [route_itr->Type ()] - 1);
+ line_data.Name (route);
+ line_data.Notes (route_itr->Name ());
- //---- save the current route ----
+ new_stops = true;
+ xy_ptr = 0;
+ stop_list.clear ();
- if (line_data.Route () > 0) {
- index = (int) line_array.size ();
- map_stat = line_map.insert (Int_Map_Data (line_data.Route (), index));
+ //---- process each trip ----
- if (!map_stat.second) {
- Warning (String ("Inserting Route %d") % line_data.Route ());
- } else {
- line_array.push_back (line_data);
+ for (trip_itr = list_ptr->begin (); trip_itr != list_ptr->end (); trip_itr++) {
+ trip_ptr = >fs_trip_array [*trip_itr];
+
+ if (new_stops) {
+
+ //---- get the trip shape ----
+
+ if (trip_ptr->Shape () >= 0) {
+ shape_ptr = >fs_shape_array [trip_ptr->Shape ()];
+ xy_ptr = &shape_ptr->point_array;
}
}
- //---- initialize a new route ----
+ //---- save the vehicle types ----
- line_data.Clear ();
- line_data.Route (line++);
- line_data.Mode (mode_map [route_itr->Type ()]);
- line_data.Type (type_map [route_itr->Type ()]);
- line_data.Name (route_itr->Code ());
- line_data.Notes (route_itr->Name ());
+ if (schedule_veh_type > 0) {
+ line_data.Add_Run_Type (schedule_veh_type);
+ }
- route = route_itr->ID ();
- dir = trip_ptr->Dir ();
- service = trip_ptr->Service ();
- new_route = false;
- new_stops = true;
- stop_list.clear ();
+ //---- process each stop on the trip ----
- //---- get the trip shape ----
+ for (stop_time_itr = trip_ptr->stop_time_map.begin (); stop_time_itr != trip_ptr->stop_time_map.end (); stop_time_itr++) {
+ stop_time_ptr = &stop_time_itr->second;
+ stop_index = stop_time_ptr->Stop ();
- if (trip_ptr->Shape () >= 0) {
- shape_ptr = >fs_shape_array [trip_ptr->Shape ()];
- xy_ptr = &shape_ptr->point_array;
- } else {
- xy_ptr = 0;
- }
- }
+ gtfs_stop_ptr = >fs_stop_array [stop_index];
- //---- process each stop on the trip ----
+ if (input_stops) {
+ stop_index = gtfs_stop_ptr->Stop ();
+ }
- for (stop_time_itr = trip_ptr->stop_time_map.begin (); stop_time_itr != trip_ptr->stop_time_map.end (); stop_time_itr++) {
- stop_time_ptr = &stop_time_itr->second;
+ distance = stop_time_ptr->Distance ();
- distance = stop_time_ptr->Distance ();
+ //---- build the stop list ----
- //---- build the stop list ----
+ if (new_stops) {
+ if (!input_stops && xy_ptr != 0) {
+ stop_ptr = &stop_array [stop_index];
- if (new_stops) {
- if (xy_ptr != 0) {
- stop_ptr = &stop_array [stop_time_ptr->Stop ()];
+ if (stop_ptr->Space () == 0) {
- //---- create a TRANSIMS stop ----
+ //---- create a TRANSIMS stop ----
- if (stop_ptr->Space () == 0) {
+ point.x = gtfs_stop_ptr->X ();
+ point.y = gtfs_stop_ptr->Y ();
- gtfs_stop_ptr = >fs_stop_array [stop_time_ptr->Stop ()];
- point.x = gtfs_stop_ptr->X ();
- point.y = gtfs_stop_ptr->Y ();
+ box = Shape_Tools::Buffer_Box (point, buffer);
- box = Shape_Tools::Buffer_Box (point, buffer);
+ Shape_Tools::Point_Shape_Distance_Offset (point, *xy_ptr, distance);
- Shape_Tools::Point_Shape_Distance_Offset (point, *xy_ptr, distance);
+ Offset_Points (*xy_ptr, distance - 150.0, 300.0, pt1, pt2);
- Offset_Points (*xy_ptr, distance - 150.0, 300.0, pt1, pt2);
+ //---- find the best link ----
- //---- find the best link ----
+ link = link_dir = -1;
+ best_diff = best_offset = buffer;
+ offset = off1 = off2 = 0;
- link = link_dir = -1;
- best_diff = best_offset = buffer;
- offset = off1 = off2 = 0;
+ for (shape_itr = link_shapes.begin (); shape_itr != link_shapes.end (); shape_itr++) {
+ if (Shape_Tools::In_Range (shape_itr->box, box)) {
+ diff = Shape_Tools::Point_Shape_Distance_Offset (point, shape_itr->shape, offset);
- for (shape_itr = link_shapes.begin (); shape_itr != link_shapes.end (); shape_itr++) {
- if (Shape_Tools::In_Range (shape_itr->box, box)) {
- diff = Shape_Tools::Point_Shape_Distance_Offset (point, shape_itr->shape, offset);
+ if (diff < buffer) {
+ diff1 = Shape_Tools::Point_Shape_Distance_Offset (pt1, shape_itr->shape, off1);
+ diff2 = Shape_Tools::Point_Shape_Distance_Offset (pt2, shape_itr->shape, off2);
- if (diff < buffer) {
- diff1 = Shape_Tools::Point_Shape_Distance_Offset (pt1, shape_itr->shape, off1);
- diff2 = Shape_Tools::Point_Shape_Distance_Offset (pt2, shape_itr->shape, off2);
-
- if ((diff1 < buffer && off1 <= offset) && (diff2 < buffer && off2 >= offset)) {
- if (diff < best_diff) {
- best_diff = diff;
- best_offset = offset;
- link = shape_itr->link;
- link_dir = shape_itr->dir;
+ if ((diff1 < buffer && off1 <= offset) && (diff2 < buffer && off2 >= offset)) {
+ if (diff < best_diff) {
+ best_diff = diff;
+ best_offset = offset;
+ link = shape_itr->link;
+ link_dir = shape_itr->dir;
+ }
}
}
}
}
- }
- if (link < 0) continue;
+ if (link < 0) continue;
- stop_ptr->Link (link);
- stop_ptr->Dir (link_dir);
- stop_ptr->Offset (Round (best_offset));
- stop_ptr->Space (1);
+ stop_ptr->Link (link);
...
[truncated message content] |