|
From: subversion c. n. <tra...@li...> - 2018-08-10 16:45:16
|
Revision: 1711
http://sourceforge.net/p/transims/code/1711
Author: davidroden
Date: 2018-08-10 16:45:12 +0000 (Fri, 10 Aug 2018)
Log Message:
-----------
TRANSIMS Version 7.2 -- updated from AECOM branch 1710
Modified Paths:
--------------
version7/trunk/Transims70/AddLRSData/AddLRSData.cpp
version7/trunk/Transims70/ArcJoin/ArcJoin.cpp
version7/trunk/Transims70/ArcNet/ArcNet.cpp
version7/trunk/Transims70/ArcPerf/ArcPerf.cpp
version7/trunk/Transims70/ArcPlan/ArcPlan.cpp
version7/trunk/Transims70/ArcRider/ArcRider.cpp
version7/trunk/Transims70/ArcRider/Control.cpp
version7/trunk/Transims70/ArcSnapshot/ArcSnapshot.cpp
version7/trunk/Transims70/Converge_Service/Update_Times.cpp
version7/trunk/Transims70/Converge_Service/Update_Tolls.cpp
version7/trunk/Transims70/ConvertTrips/ConvertTrip_Data.cpp
version7/trunk/Transims70/ConvertTrips/ConvertTrips.cpp
version7/trunk/Transims70/ConvertTrips/Read_Trip_Table.cpp
version7/trunk/Transims70/Data_Service/Control.cpp
version7/trunk/Transims70/Data_Service/Data_Service.cpp
version7/trunk/Transims70/Data_Service/Data_Service.vcxproj
version7/trunk/Transims70/Data_Service/Data_Service.vcxproj.filters
version7/trunk/Transims70/Data_Service/Read_Lane_Uses.cpp
version7/trunk/Transims70/Data_Service/Write_Lane_Uses.cpp
version7/trunk/Transims70/FileFormat/FileFormat.cpp
version7/trunk/Transims70/File_Service/Control.cpp
version7/trunk/Transims70/File_Service/Lane_Use_File.cpp
version7/trunk/Transims70/File_Service/Services.cpp
version7/trunk/Transims70/Fratar/Control.cpp
version7/trunk/Transims70/Fratar/Fratar.cpp
version7/trunk/Transims70/GTFSData/Build_Routes.cpp
version7/trunk/Transims70/GTFSData/Control.cpp
version7/trunk/Transims70/GTFSData/Draw_Routes.cpp
version7/trunk/Transims70/GTFSData/Execute.cpp
version7/trunk/Transims70/GTFSData/GTFSData.cpp
version7/trunk/Transims70/GTFSData/GTFSData.hpp
version7/trunk/Transims70/GTFSData/GTFSData.vcxproj
version7/trunk/Transims70/GTFSData/GTFSData.vcxproj.filters
version7/trunk/Transims70/GTFSData/GTFS_Data.hpp
version7/trunk/Transims70/GTFSData/Read_Stop_Times.cpp
version7/trunk/Transims70/GTFSData/Read_Stops.cpp
version7/trunk/Transims70/GTFSData/Read_Trips.cpp
version7/trunk/Transims70/GridData/GridData.cpp
version7/trunk/Transims70/Include/Data_Range.hpp
version7/trunk/Transims70/Include/Data_Service.hpp
version7/trunk/Transims70/Include/File_Service.hpp
version7/trunk/Transims70/Include/Flow_Time_Service.hpp
version7/trunk/Transims70/Include/Lane_Use_Data.hpp
version7/trunk/Transims70/Include/Lane_Use_File.hpp
version7/trunk/Transims70/Include/Select_Service.hpp
version7/trunk/Transims70/Include/System_Defines.hpp
version7/trunk/Transims70/Include/User_Program.hpp
version7/trunk/Transims70/IntControl/IntControl.cpp
version7/trunk/Transims70/LinkSum/LinkSum.cpp
version7/trunk/Transims70/LocationData/LocationData.cpp
version7/trunk/Transims70/MatrixData/Control.cpp
version7/trunk/Transims70/MatrixData/Expand_Matrix.cpp
version7/trunk/Transims70/MatrixData/MatrixData.cpp
version7/trunk/Transims70/MatrixData/Read_Matrix.cpp
version7/trunk/Transims70/ModeChoice/ModeChoice.cpp
version7/trunk/Transims70/NJFare2/NJFare2.cpp
version7/trunk/Transims70/NetFix/NetFix.cpp
version7/trunk/Transims70/NetMerge/Merge_Lane_Use.cpp
version7/trunk/Transims70/NetMerge/NetMerge.cpp
version7/trunk/Transims70/NetPrep/Control.cpp
version7/trunk/Transims70/NetPrep/Input_Nodes.cpp
version7/trunk/Transims70/NetPrep/NetPrep.cpp
version7/trunk/Transims70/NewFormat/Control.cpp
version7/trunk/Transims70/NewFormat/Execute.cpp
version7/trunk/Transims70/NewFormat/NewFormat.cpp
version7/trunk/Transims70/NewFormat/NewFormat.hpp
version7/trunk/Transims70/NewFormat/NewFormat.vcxproj
version7/trunk/Transims70/NewFormat/NewFormat.vcxproj.filters
version7/trunk/Transims70/PathSkim/PathSkim.cpp
version7/trunk/Transims70/PerfPrep/PerfPrep.cpp
version7/trunk/Transims70/PlanCompare/PlanCompare.cpp
version7/trunk/Transims70/PlanPrep/PlanPrep.cpp
version7/trunk/Transims70/PlanSelect/PlanSelect.cpp
version7/trunk/Transims70/PlanSum/PlanSum.cpp
version7/trunk/Transims70/Progression/Control.cpp
version7/trunk/Transims70/Relocate/Relocate.cpp
version7/trunk/Transims70/RiderSum/Control.cpp
version7/trunk/Transims70/RiderSum/RiderSum.cpp
version7/trunk/Transims70/RoutePrep/RoutePrep.cpp
version7/trunk/Transims70/Router/Router.cpp
version7/trunk/Transims70/Router_Service/Control.cpp
version7/trunk/Transims70/Router_Service/Link_Impedance.cpp
version7/trunk/Transims70/Router_Service/Router_Service.cpp
version7/trunk/Transims70/Select_Service/Control.cpp
version7/trunk/Transims70/Select_Service/Select_Plan_Data.cpp
version7/trunk/Transims70/Select_Service/Select_Service.cpp
version7/trunk/Transims70/Select_Service/Services.cpp
version7/trunk/Transims70/Simulator/Simulator.cpp
version7/trunk/Transims70/SubareaNet/SubareaNet.cpp
version7/trunk/Transims70/SubareaPlans/SubareaPlans.cpp
version7/trunk/Transims70/SysLib/Dbfile/Db_Header.cpp
version7/trunk/Transims70/SysLib/Dbfile/Db_Matrix.cpp
version7/trunk/Transims70/SysLib/Program/Assign.cpp
version7/trunk/Transims70/SysLib/Program/Convert.cpp
version7/trunk/Transims70/SysLib/Program/Execute.cpp
version7/trunk/Transims70/SysLib/Program/Initial_Declare.cpp
version7/trunk/Transims70/SysLib/Program/Initial_Table.cpp
version7/trunk/Transims70/SysLib/Program/Input_Output.cpp
version7/trunk/Transims70/SysLib/Program/Print_Commands.cpp
version7/trunk/Transims70/SysLib/Program/Process_Token.cpp
version7/trunk/Transims70/SysLib/Program/Program_Code.cpp
version7/trunk/Transims70/SysLib/Program/Read_Value.cpp
version7/trunk/Transims70/SysLib/Program/Table.cpp
version7/trunk/Transims70/SysLib/Program/User_Program.cpp
version7/trunk/Transims70/SysLib/Service/Static_Service.cpp
version7/trunk/Transims70/SysLib/SysLib.vcxproj
version7/trunk/Transims70/SysLib/SysLib.vcxproj.filters
version7/trunk/Transims70/SysLib/Tools/Data_Range.cpp
version7/trunk/Transims70/SysLib/Tools/Equiv_Data.cpp
version7/trunk/Transims70/SysLib/Tools/String.cpp
version7/trunk/Transims70/TransimsNet/TransimsNet.cpp
version7/trunk/Transims70/TransitNet/Add_Route_Stops.cpp
version7/trunk/Transims70/TransitNet/Control.cpp
version7/trunk/Transims70/TransitNet/Execute.cpp
version7/trunk/Transims70/TransitNet/Node_Path.cpp
version7/trunk/Transims70/TransitNet/TransitNet.cpp
version7/trunk/Transims70/TransitNet/TransitNet.hpp
version7/trunk/Transims70/TransitNet/TransitNet.vcxproj
version7/trunk/Transims70/TransitNet/TransitNet.vcxproj.filters
version7/trunk/Transims70/TripPrep/TripPrep.cpp
version7/trunk/Transims70/TripSum/TripSum.cpp
version7/trunk/Transims70/Validate/Control.cpp
version7/trunk/Transims70/Validate/Validate.cpp
version7/trunk/Transims70/VissimXML/VissimXML.cpp
version7/trunk/Transims70/VolSpdData/VolSpdData.cpp
Added Paths:
-----------
version7/trunk/Transims70/GTFSData/Build_Shapes.cpp
version7/trunk/Transims70/GTFSData/Get_Stop_Data.cpp
version7/trunk/Transims70/NewFormat/Old_Lane_Use_File.cpp
version7/trunk/Transims70/NewFormat/Old_Lane_Use_File.hpp
version7/trunk/Transims70/NewFormat/Read_Old_Lane_Use.cpp
version7/trunk/Transims70/Transims72.sln
version7/trunk/Transims70/TransitNet/Build_Driver.cpp
Removed Paths:
-------------
version7/trunk/Transims70/Data_Service/Lane_Use_Data.cpp
Modified: version7/trunk/Transims70/AddLRSData/AddLRSData.cpp
===================================================================
--- version7/trunk/Transims70/AddLRSData/AddLRSData.cpp 2018-08-10 16:40:25 UTC (rev 1710)
+++ version7/trunk/Transims70/AddLRSData/AddLRSData.cpp 2018-08-10 16:45:12 UTC (rev 1711)
@@ -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/trunk/Transims70/ArcJoin/ArcJoin.cpp
===================================================================
--- version7/trunk/Transims70/ArcJoin/ArcJoin.cpp 2018-08-10 16:40:25 UTC (rev 1710)
+++ version7/trunk/Transims70/ArcJoin/ArcJoin.cpp 2018-08-10 16:45:12 UTC (rev 1711)
@@ -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/trunk/Transims70/ArcNet/ArcNet.cpp
===================================================================
--- version7/trunk/Transims70/ArcNet/ArcNet.cpp 2018-08-10 16:40:25 UTC (rev 1710)
+++ version7/trunk/Transims70/ArcNet/ArcNet.cpp 2018-08-10 16:45:12 UTC (rev 1711)
@@ -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/trunk/Transims70/ArcPerf/ArcPerf.cpp
===================================================================
--- version7/trunk/Transims70/ArcPerf/ArcPerf.cpp 2018-08-10 16:40:25 UTC (rev 1710)
+++ version7/trunk/Transims70/ArcPerf/ArcPerf.cpp 2018-08-10 16:45:12 UTC (rev 1711)
@@ -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/trunk/Transims70/ArcPlan/ArcPlan.cpp
===================================================================
--- version7/trunk/Transims70/ArcPlan/ArcPlan.cpp 2018-08-10 16:40:25 UTC (rev 1710)
+++ version7/trunk/Transims70/ArcPlan/ArcPlan.cpp 2018-08-10 16:45:12 UTC (rev 1711)
@@ -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/trunk/Transims70/ArcRider/ArcRider.cpp
===================================================================
--- version7/trunk/Transims70/ArcRider/ArcRider.cpp 2018-08-10 16:40:25 UTC (rev 1710)
+++ version7/trunk/Transims70/ArcRider/ArcRider.cpp 2018-08-10 16:45:12 UTC (rev 1711)
@@ -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/trunk/Transims70/ArcRider/Control.cpp
===================================================================
--- version7/trunk/Transims70/ArcRider/Control.cpp 2018-08-10 16:40:25 UTC (rev 1710)
+++ version7/trunk/Transims70/ArcRider/Control.cpp 2018-08-10 16:45:12 UTC (rev 1711)
@@ -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/trunk/Transims70/ArcSnapshot/ArcSnapshot.cpp
===================================================================
--- version7/trunk/Transims70/ArcSnapshot/ArcSnapshot.cpp 2018-08-10 16:40:25 UTC (rev 1710)
+++ version7/trunk/Transims70/ArcSnapshot/ArcSnapshot.cpp 2018-08-10 16:45:12 UTC (rev 1711)
@@ -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/trunk/Transims70/Converge_Service/Update_Times.cpp
===================================================================
--- version7/trunk/Transims70/Converge_Service/Update_Times.cpp 2018-08-10 16:40:25 UTC (rev 1710)
+++ version7/trunk/Transims70/Converge_Service/Update_Times.cpp 2018-08-10 16:45:12 UTC (rev 1711)
@@ -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/trunk/Transims70/Converge_Service/Update_Tolls.cpp
===================================================================
--- version7/trunk/Transims70/Converge_Service/Update_Tolls.cpp 2018-08-10 16:40:25 UTC (rev 1710)
+++ version7/trunk/Transims70/Converge_Service/Update_Tolls.cpp 2018-08-10 16:45:12 UTC (rev 1711)
@@ -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/trunk/Transims70/ConvertTrips/ConvertTrip_Data.cpp
===================================================================
--- version7/trunk/Transims70/ConvertTrips/ConvertTrip_Data.cpp 2018-08-10 16:40:25 UTC (rev 1710)
+++ version7/trunk/Transims70/ConvertTrips/ConvertTrip_Data.cpp 2018-08-10 16:45:12 UTC (rev 1711)
@@ -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/trunk/Transims70/ConvertTrips/ConvertTrips.cpp
===================================================================
--- version7/trunk/Transims70/ConvertTrips/ConvertTrips.cpp 2018-08-10 16:40:25 UTC (rev 1710)
+++ version7/trunk/Transims70/ConvertTrips/ConvertTrips.cpp 2018-08-10 16:45:12 UTC (rev 1711)
@@ -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/trunk/Transims70/ConvertTrips/Read_Trip_Table.cpp
===================================================================
--- version7/trunk/Transims70/ConvertTrips/Read_Trip_Table.cpp 2018-08-10 16:40:25 UTC (rev 1710)
+++ version7/trunk/Transims70/ConvertTrips/Read_Trip_Table.cpp 2018-08-10 16:45:12 UTC (rev 1711)
@@ -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/trunk/Transims70/Data_Service/Control.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Control.cpp 2018-08-10 16:40:25 UTC (rev 1710)
+++ version7/trunk/Transims70/Data_Service/Control.cpp 2018-08-10 16:45:12 UTC (rev 1711)
@@ -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/trunk/Transims70/Data_Service/Data_Service.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Data_Service.cpp 2018-08-10 16:40:25 UTC (rev 1710)
+++ version7/trunk/Transims70/Data_Service/Data_Service.cpp 2018-08-10 16:45:12 UTC (rev 1711)
@@ -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/trunk/Transims70/Data_Service/Data_Service.vcxproj
===================================================================
--- version7/trunk/Transims70/Data_Service/Data_Service.vcxproj 2018-08-10 16:40:25 UTC (rev 1710)
+++ version7/trunk/Transims70/Data_Service/Data_Service.vcxproj 2018-08-10 16:45:12 UTC (rev 1711)
@@ -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/trunk/Transims70/Data_Service/Data_Service.vcxproj.filters
===================================================================
--- version7/trunk/Transims70/Data_Service/Data_Service.vcxproj.filters 2018-08-10 16:40:25 UTC (rev 1710)
+++ version7/trunk/Transims70/Data_Service/Data_Service.vcxproj.filters 2018-08-10 16:45:12 UTC (rev 1711)
@@ -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/trunk/Transims70/Data_Service/Lane_Use_Data.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Lane_Use_Data.cpp 2018-08-10 16:40:25 UTC (rev 1710)
+++ version7/trunk/Transims70/Data_Service/Lane_Use_Data.cpp 2018-08-10 16:45:12 UTC (rev 1711)
@@ -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/trunk/Transims70/Data_Service/Read_Lane_Uses.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Lane_Uses.cpp 2018-08-10 16:40:25 UTC (rev 1710)
+++ version7/trunk/Transims70/Data_Service/Read_Lane_Uses.cpp 2018-08-10 16:45:12 UTC (rev 1711)
@@ -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/trunk/Transims70/Data_Service/Write_Lane_Uses.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Write_Lane_Uses.cpp 2018-08-10 16:40:25 UTC (rev 1710)
+++ version7/trunk/Transims70/Data_Service/Write_Lane_Uses.cpp 2018-08-10 16:45:12 UTC (rev 1711)
@@ -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/trunk/Transims70/FileFormat/FileFormat.cpp
===================================================================
--- version7/trunk/Transims70/FileFormat/FileFormat.cpp 2018-08-10 16:40:25 UTC (rev 1710)
+++ version7/trunk/Transims70/FileFormat/FileFormat.cpp 2018-08-10 16:45:12 UTC (rev 1711)
@@ -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/trunk/Transims70/File_Service/Control.cpp
===================================================================
--- version7/trunk/Transims70/File_Service/Control.cpp 2018-08-10 16:40:25 UTC (rev 1710)
+++ version7/trunk/Transims70/File_Service/Control.cpp 2018-08-10 16:45:12 UTC (rev 1711)
@@ -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/trunk/Transims70/File_Service/Lane_Use_File.cpp
===================================================================
--- version7/trunk/Transims70/File_Service/Lane_Use_File.cpp 2018-08-10 16:40:25 UTC (rev 1710)
+++ version7/trunk/Transims70/File_Service/Lane_Use_File.cpp 2018-08-10 16:45:12 UTC (rev 1711)
@@ -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/trunk/Transims70/File_Service/Services.cpp
===================================================================
--- version7/trunk/Transims70/File_Service/Services.cpp 2018-08-10 16:40:25 UTC (rev 1710)
+++ version7/trunk/Transims70/File_Service/Services.cpp 2018-08-10 16:45:12 UTC (rev 1711)
@@ -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/trunk/Transims70/Fratar/Control.cpp
===================================================================
--- version7/trunk/Transims70/Fratar/Control.cpp 2018-08-10 16:40:25 UTC (rev 1710)
+++ version7/trunk/Transims70/Fratar/Control.cpp 2018-08-10 16:45:12 UTC (rev 1711)
@@ -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/trunk/Transims70/Fratar/Fratar.cpp
===================================================================
--- version7/trunk/Transims70/Fratar/Fratar.cpp 2018-08-10 16:40:25 UTC (rev 1710)
+++ version7/trunk/Transims70/Fratar/Fratar.cpp 2018-08-10 16:45:12 UTC (rev 1711)
@@ -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/trunk/Transims70/GTFSData/Build_Routes.cpp
===================================================================
--- version7/trunk/Transims70/GTFSData/Build_Routes.cpp 2018-08-10 16:40:25 UTC (rev 1710)
+++ version7/trunk/Transims70/GTFSData/Build_Routes.cpp 2018-08-10 16:45:12 UTC (rev 1711)
@@ -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);
+ stop_ptr->Dir (link_dir);
+ stop_ptr->Offset (Round (best_offset));
+ stop_ptr->Space (1);
- link_ptr = &link_array[stop_ptr->Link ()];
+ link_ptr = &link_array [stop_ptr->Link ()];
- if (stop_ptr->Offset () >= link_ptr->Length ()) {
- stop_ptr->Offset (link_ptr->Length () - 1);
- } else if (stop_ptr->Offset () < 1) {
- stop_ptr->Offset (1);
+ if (stop_ptr->Offset () >= link_ptr->Length ()) {
+ stop_ptr->Offset (link_ptr->Length () - 1);
+ } else if (stop_ptr->Offset () < 1) {
+ stop_ptr->Offset (1);
+ }
}
}
- }
- //---- save the stop record ----
+ //---- save the stop record ----
- line_stop.clear ();
- line_stop.Stop (stop_time_ptr->Stop ());
- line_stop.Time_Flag (stop_time_ptr->Timepoint ());
- line_stop.Length ((int) distance);
+ line_stop.clear ();
+ line_stop.Stop (stop_index);
+ line_stop.Time_Flag (stop_time_ptr->Timepoint ());
+ line_stop.Length ((int) distance);
- map_stat = stop_list.insert (Int_Map_Data (stop_time_ptr->Stop (), (int) line_data.size ()));
+ map_stat = stop_list.insert (Int_Map_Data (stop_index, (int) line_data.size ()));
- if (map_stat.second) {
- line_data.push_back (line_stop);
+ if (map_stat.second) {
+ line_data.push_back (line_stop);
+ }
}
- }
- //---- add schedule times ----
+ //---- add schedule times ----
- map_itr = stop_list.find (stop_time_ptr->Stop ());
+ map_itr = stop_list.find (stop_index);
- if (map_itr != stop_list.end ()) {
- line_stop_ptr = &line_data [map_itr->second];
+ if (map_itr != stop_list.end ()) {
+ line_stop_ptr = &line_data [map_itr->second];
- line_run.Schedule (stop_time_ptr->Depart ());
+ line_run.Schedule (stop_time_ptr->Depart ());
- line_stop_ptr->push_back (line_run);
+ line_stop_ptr->push_back (line_run);
+ }
}
- }
- //---- driver path ----
+ //---- driver path ----
- if (xy_ptr && new_stops) {
- last_dir = last_node = last_link = -1;
- distance = 0;
+ if (xy_ptr && new_stops) {
+ last_dir = last_node = last_link = -1;
+ distance = 0;
- for (line_stop_itr = line_data.begin (); line_stop_itr != line_data.end (); line_stop_itr++) {
- stop_ptr = &stop_array [line_stop_itr->Stop ()];
+ for (line_stop_itr = line_data.begin (); line_stop_itr != line_data.end (); line_stop_itr++) {
+ stop_ptr = &stop_array [line_stop_itr->Stop ()];
- link_ptr = &link_array [stop_ptr->Link ()];
- link_dir = (stop_ptr->Dir () == 0) ? link_ptr->AB_Dir () : link_ptr->BA_Dir ();
+ link_ptr = &link_array [stop_ptr->Link ()];
+ link_dir = (stop_ptr->Dir () == 0) ? link_ptr->AB_Dir () : link_ptr->BA_Dir ();
- if (link_dir != last_dir) {
- if (last_dir >= 0) {
- join_node = (stop_ptr->Dir () == 0) ? link_ptr->Anode () : link_ptr->Bnode ();
- node_set.clear ();
+ if (link_dir != last_dir) {
+ if (last_dir >= 0) {
+ join_node = (stop_ptr->Dir () == 0) ? link_ptr->Anode () : link_ptr->Bnode ();
+ node_set.clear ();
- while (last_node != join_node) {
- best_link = best_dir = best_node = -1;
- best_diff = buffer;
- best_offset = 0;
+ while (last_node != join_node) {
+ best_link = best_dir = best_node = -1;
+ best_diff = buffer;
+ best_offset = 0;
- node_ptr = &node_array [last_node];
+ node_ptr = &node_array [last_node];
- point.x = UnRound (node_ptr->X ());
- point.y = UnRound (node_ptr->Y ());
+ point.x = UnRound (node_ptr->X ());
+ point.y = UnRound (node_ptr->Y ());
- diff = Shape_Tools::Point_Shape_Distance_Offset (point, *xy_ptr, distance);
+ diff = Shape_Tools::Point_Shape_Distance_Offset (point, *xy_ptr, distance);
- for (link = 0, link_itr = link_array.begin (); link_itr != link_array.end (); link_itr++, link++) {
- if (link == last_link) continue;
+ for (link = 0, link_itr = link_array.begin (); link_itr != link_array.end (); link_itr++, link++) {
+ if (link == last_link) continue;
- if (link_itr->Anode () == last_node && link_itr->AB_Dir () >= 0) {
- if (node_set.find (link_itr->Bnode ()) != node_set.end ()) continue;
+ if (link_itr->Anode () == last_node && link_itr->AB_Dir () >= 0) {
+ if (node_set.find (link_itr->Bnode ()) != node_set.end ()) continue;
- node_ptr = &node_array [link_itr->Bnode ()];
+ node_ptr = &node_array [link_itr->Bnode ()];
- point.x = UnRound (node_ptr->X ());
- point.y = UnRound (node_ptr->Y ());
+ point.x = UnRound (node_ptr->X ());
+ point.y = UnRound (node_ptr->Y ());
- diff = Shape_Tools::Point_Shape_Distance_Offset_Range (point, *xy_ptr, offset, distance, line_stop_itr->Length ());
+ diff = Shape_Tools::Point_Shape_Distance_Offset_Range (point, *xy_ptr, offset, distance, line_stop_itr->Length ());
- if (diff < best_diff) {
- best_diff = diff;
- best_offset = offset;
- best_link = lin...
[truncated message content] |