|
From: subversion c. n. <tra...@li...> - 2017-12-29 21:42:08
|
Revision: 1695
http://sourceforge.net/p/transims/code/1695
Author: davidroden
Date: 2017-12-29 21:42:05 +0000 (Fri, 29 Dec 2017)
Log Message:
-----------
TRANSIMS Version 7.0 Trunk -- updated from AECOM Branch 1694
Modified Paths:
--------------
version7/trunk/Transims70/ArcPerf/ArcPerf.cpp
version7/trunk/Transims70/ArcPerf/Max_Performance.cpp
version7/trunk/Transims70/ArcPerf/Write_Performance.cpp
version7/trunk/Transims70/ArcPlan/ArcPlan.cpp
version7/trunk/Transims70/Converge_Service/Converge_Service.cpp
version7/trunk/Transims70/Data_Service/Performance_Data.cpp
version7/trunk/Transims70/Data_Service/Read_Performance.cpp
version7/trunk/Transims70/Data_Service/Write_Performance.cpp
version7/trunk/Transims70/Data_Service/Write_Plan_Skims.cpp
version7/trunk/Transims70/Data_Service/Write_Plans.cpp
version7/trunk/Transims70/File_Service/Performance_File.cpp
version7/trunk/Transims70/Flow_Time_Service/Control.cpp
version7/trunk/Transims70/Flow_Time_Service/Flow_Time_Service.cpp
version7/trunk/Transims70/Flow_Time_Service/Update_Times.cpp
version7/trunk/Transims70/Include/Flow_Time_Service.hpp
version7/trunk/Transims70/Include/Performance_Data.hpp
version7/trunk/Transims70/Include/Performance_File.hpp
version7/trunk/Transims70/Include/Plan_Skim_File.hpp
version7/trunk/Transims70/Include/System_Defines.hpp
version7/trunk/Transims70/Include/Trip_Index.hpp
version7/trunk/Transims70/LinkSum/Get_Performance_Data.cpp
version7/trunk/Transims70/LinkSum/LinkSum.cpp
version7/trunk/Transims70/LinkSum/Write_Link_Data.cpp
version7/trunk/Transims70/LinkSum/Write_Link_Dir.cpp
version7/trunk/Transims70/ModeChoice/Choice_Data.cpp
version7/trunk/Transims70/ModeChoice/Choice_Process.cpp
version7/trunk/Transims70/ModeChoice/Control.cpp
version7/trunk/Transims70/ModeChoice/Execute.cpp
version7/trunk/Transims70/ModeChoice/ModeChoice.cpp
version7/trunk/Transims70/ModeChoice/ModeChoice.hpp
version7/trunk/Transims70/ModeChoice/ModeChoice.vcxproj
version7/trunk/Transims70/ModeChoice/ModeChoice.vcxproj.filters
version7/trunk/Transims70/ModeChoice/Mode_Splits.cpp
version7/trunk/Transims70/ModeChoice/Read_Plan_Skims.cpp
version7/trunk/Transims70/ModeChoice/Read_Plans.cpp
version7/trunk/Transims70/ModeChoice/Zone_Tables.cpp
version7/trunk/Transims70/PerfPrep/Check_Performance.cpp
version7/trunk/Transims70/PerfPrep/Max_Peak_Perf.cpp
version7/trunk/Transims70/PerfPrep/Merge_Performance.cpp
version7/trunk/Transims70/PerfPrep/PerfPrep.cpp
version7/trunk/Transims70/PlanPrep/Control.cpp
version7/trunk/Transims70/PlanPrep/Execute.cpp
version7/trunk/Transims70/PlanPrep/PlanPrep.cpp
version7/trunk/Transims70/PlanPrep/PlanPrep.hpp
version7/trunk/Transims70/PlanPrep/Process_Plan.cpp
version7/trunk/Transims70/PlanPrep/Read_Plans.cpp
version7/trunk/Transims70/PlanSelect/Control.cpp
version7/trunk/Transims70/PlanSelect/PlanSelect.cpp
version7/trunk/Transims70/PlanSelect/PlanSelect.hpp
version7/trunk/Transims70/PlanSelect/Read_Plans.cpp
version7/trunk/Transims70/PlanSum/Execute.cpp
version7/trunk/Transims70/PlanSum/PlanSum.cpp
version7/trunk/Transims70/PlanSum/Process_Plan.cpp
version7/trunk/Transims70/Router/Router.cpp
version7/trunk/Transims70/Router_Service/Node_Path.cpp
version7/trunk/Transims70/Router_Service/Plan_Flow.cpp
version7/trunk/Transims70/Router_Service/Router_Service.cpp
version7/trunk/Transims70/Router_Service/Sum_Demand.cpp
version7/trunk/Transims70/Router_Service/Transit_Access.cpp
version7/trunk/Transims70/Select_Service/Services.cpp
version7/trunk/Transims70/SysLib/Service/Static_Service.cpp
Added Paths:
-----------
version7/trunk/Transims70/ModeChoice/Memory_Skims.cpp
version7/trunk/Transims70/ModeChoice/Read_Process.cpp
version7/trunk/Transims70/ModeChoice/Read_Skims.cpp
version7/trunk/Transims70/ModeChoice/Select_Plans.cpp
version7/trunk/Transims70/ModeChoice/Skim_Choice.cpp
Modified: version7/trunk/Transims70/ArcPerf/ArcPerf.cpp
===================================================================
--- version7/trunk/Transims70/ArcPerf/ArcPerf.cpp 2017-12-29 21:33:14 UTC (rev 1694)
+++ version7/trunk/Transims70/ArcPerf/ArcPerf.cpp 2017-12-29 21:42:05 UTC (rev 1695)
@@ -11,7 +11,7 @@
ArcPerf::ArcPerf (void) : Draw_Service ()
{
Program ("ArcPerf");
- Version (6);
+ Version (7);
Title ("ArcView Performance Files");
System_File_Type required_files [] = {
Modified: version7/trunk/Transims70/ArcPerf/Max_Performance.cpp
===================================================================
--- version7/trunk/Transims70/ArcPerf/Max_Performance.cpp 2017-12-29 21:33:14 UTC (rev 1694)
+++ version7/trunk/Transims70/ArcPerf/Max_Performance.cpp 2017-12-29 21:42:05 UTC (rev 1695)
@@ -97,6 +97,7 @@
perf_file->Queue (data.Queue ());
perf_file->Max_Queue (data.Max_Queue ());
perf_file->Failure (data.Failure ());
+ perf_file->Group_Vol (data.Group_Vol ());
perf_file->Veh_Dist (data.Veh_Dist ());
perf_file->Veh_Time (data.Veh_Time ());
perf_file->Veh_Delay (data.Veh_Delay ());
@@ -153,6 +154,7 @@
perf_file->Queue (data.Queue ());
perf_file->Max_Queue (data.Max_Queue ());
perf_file->Failure (data.Failure ());
+ perf_file->Group_Vol (data.Group_Vol ());
perf_file->Veh_Dist (data.Veh_Dist ());
perf_file->Veh_Time (data.Veh_Time ());
perf_file->Veh_Delay (data.Veh_Delay ());
Modified: version7/trunk/Transims70/ArcPerf/Write_Performance.cpp
===================================================================
--- version7/trunk/Transims70/ArcPerf/Write_Performance.cpp 2017-12-29 21:33:14 UTC (rev 1694)
+++ version7/trunk/Transims70/ArcPerf/Write_Performance.cpp 2017-12-29 21:42:05 UTC (rev 1695)
@@ -105,6 +105,7 @@
perf_file->Queue (data.Queue ());
perf_file->Max_Queue (data.Max_Queue ());
perf_file->Failure (data.Failure ());
+ perf_file->Group_Vol (data.Group_Vol ());
perf_file->Veh_Dist (data.Veh_Dist ());
perf_file->Veh_Time (data.Veh_Time ());
perf_file->Veh_Delay (data.Veh_Delay ());
Modified: version7/trunk/Transims70/ArcPlan/ArcPlan.cpp
===================================================================
--- version7/trunk/Transims70/ArcPlan/ArcPlan.cpp 2017-12-29 21:33:14 UTC (rev 1694)
+++ version7/trunk/Transims70/ArcPlan/ArcPlan.cpp 2017-12-29 21:42:05 UTC (rev 1695)
@@ -11,7 +11,7 @@
ArcPlan::ArcPlan (void) : Draw_Service ()
{
Program ("ArcPlan");
- Version (3);
+ Version (4);
Title ("Plan File Display Utility");
System_File_Type required_files [] = {
Modified: version7/trunk/Transims70/Converge_Service/Converge_Service.cpp
===================================================================
--- version7/trunk/Transims70/Converge_Service/Converge_Service.cpp 2017-12-29 21:33:14 UTC (rev 1694)
+++ version7/trunk/Transims70/Converge_Service/Converge_Service.cpp 2017-12-29 21:42:05 UTC (rev 1695)
@@ -179,7 +179,8 @@
int flow_time_service_keys [] = {
UPDATE_FLOW_RATES, UPDATE_TURNING_MOVEMENTS, CLEAR_INPUT_FLOW_RATES,
- UPDATE_TRAVEL_TIMES, TIME_UPDATE_RATE, LINK_FLOW_FACTOR, LINK_FLOW_TYPE, EQUATION_PARAMETERS, 0
+ UPDATE_TRAVEL_TIMES, TIME_UPDATE_RATE, LINK_FLOW_FACTOR, LINK_FLOW_TYPE, EQUATION_PARAMETERS,
+ CAPACITY_FACTOR_FUNCTIONS, TRAVELER_TYPE_GROUP, 0
};
Flow_Time_Service_Keys (flow_time_service_keys);
Modified: version7/trunk/Transims70/Data_Service/Performance_Data.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Performance_Data.cpp 2017-12-29 21:33:14 UTC (rev 1694)
+++ version7/trunk/Transims70/Data_Service/Performance_Data.cpp 2017-12-29 21:42:05 UTC (rev 1695)
@@ -66,6 +66,8 @@
return (Exit ());
case FAILURE_DATA:
return (Failure ());
+ case GROUP_VOL_DATA:
+ return (Group_Vol ());
case QUEUE_DATA:
return (Queue ());
case MAX_QUEUE_DATA:
@@ -118,6 +120,7 @@
Queue (perf_ptr->Queue ());
Max_Queue (perf_ptr->Max_Queue ());
Failure (perf_ptr->Failure ());
+ Group_Vol (perf_ptr->Group_Vol ());
Veh_Dist (perf_ptr->Veh_Dist ());
Veh_Time (perf_ptr->Veh_Time ());
Veh_Delay (perf_ptr->Veh_Delay ());
@@ -146,6 +149,7 @@
Add_Queue (perf_ptr->Queue ());
Add_Max_Queue (perf_ptr->Max_Queue ());
Add_Failure (perf_ptr->Failure ());
+ Add_Group_Vol (perf_ptr->Group_Vol ());
Add_Veh_Dist (perf_ptr->Veh_Dist ());
Add_Veh_Time (perf_ptr->Veh_Time ());
Add_Veh_Delay (perf_ptr->Veh_Delay ());
@@ -172,6 +176,7 @@
Queue ((Queue () + perf_ptr->Queue ()) / 2.0);
Max_Queue (Queue ());
Failure ((Failure () + perf_ptr->Failure ()) / 2.0);
+ Group_Vol ((Group_Vol () + perf_ptr->Group_Vol ()) / 2.0);
Veh_Dist ((Veh_Dist () + perf_ptr->Veh_Dist ()) / 2.0);
Veh_Time ((Veh_Time () + perf_ptr->Veh_Time ()) / 2.0);
Veh_Delay ((Veh_Delay () + perf_ptr->Veh_Delay ()) / 2.0);
@@ -200,6 +205,7 @@
Queue (Queue () * weight1 + perf_ptr->Queue () * weight);
Max_Queue (Queue ());
Failure (Failure () * weight1 + perf_ptr->Failure () * weight);
+ Group_Vol (Group_Vol () * weight1 + perf_ptr->Group_Vol () * weight);
Veh_Dist (Veh_Dist () * weight1 + perf_ptr->Veh_Dist () * weight);
Veh_Time (Veh_Time () * weight1 + perf_ptr->Veh_Time () * weight);
Veh_Delay (Veh_Delay () * weight1 + perf_ptr->Veh_Delay () * weight);
@@ -222,6 +228,7 @@
Queue (perf1_ptr->Queue () * fac1 + perf2_ptr->Queue () * fac2);
Max_Queue (Queue ());
Failure (perf1_ptr->Failure () * fac1 + perf2_ptr->Failure () * fac2);
+ Group_Vol (perf1_ptr->Group_Vol () * fac1 + perf2_ptr->Group_Vol () * fac2);
Veh_Dist (perf1_ptr->Veh_Dist () * fac1 + perf2_ptr->Veh_Dist () * fac2);
Veh_Time (perf1_ptr->Veh_Time () * fac1 + perf2_ptr->Veh_Time () * fac2);
Veh_Delay (perf1_ptr->Veh_Delay () * fac1 + perf2_ptr->Veh_Delay () * fac2);
@@ -247,6 +254,7 @@
Queue (Queue () * factor);
Max_Queue (Queue ());
Failure (Failure () * factor);
+ Group_Vol (Group_Vol () * factor);
Veh_Dist (Veh_Dist () * factor);
Veh_Time (Veh_Time () * factor);
Veh_Delay (Veh_Delay () * factor);
@@ -284,6 +292,7 @@
Add_Queue (perf_ptr->Queue ());
Sum_Max_Queue (perf_ptr->Max_Queue ());
Add_Failure (perf_ptr->Failure ());
+ Add_Group_Vol (perf_ptr->Group_Vol ());
Add_Veh_Dist (perf_ptr->Veh_Dist ());
Add_Veh_Time (perf_ptr->Veh_Time ());
Add_Veh_Delay (perf_ptr->Veh_Delay ());
@@ -373,6 +382,7 @@
rec.Add_Queue (ptr->Queue ());
rec.Add_Max_Queue (ptr->Max_Queue ());
rec.Add_Failure (ptr->Failure ());
+ rec.Add_Group_Vol (ptr->Group_Vol ());
rec.Add_Veh_Dist (ptr->Veh_Dist ());
rec.Add_Veh_Time (ptr->Veh_Time ());
rec.Add_Veh_Delay (ptr->Veh_Delay ());
@@ -802,7 +812,7 @@
// Flow_Time
//---------------------------------------------------------
-Dtime Perf_Period_Array::Flow_Time (int dir_index, Dtime tod, double len_factor, double len, int veh_type, double pce, double occ, bool forward_flag)
+Dtime Perf_Period_Array::Flow_Time (int dir_index, Dtime tod, double len_factor, double len, int veh_type, double pce, double occ, bool group_flag, bool forward_flag)
{
int period, num_periods, min_period, max_period, num;
Dtime low, high, end_time, ttime, ttim, increment;
@@ -865,6 +875,7 @@
perf_ptr->Add_Persons (occ);
perf_ptr->Add_Vehicles (veh_type);
perf_ptr->Add_Volume (pce);
+ if (group_flag) perf_ptr->Add_Group_Vol (pce);
if (first) perf_ptr->Add_Enter (pce);
perf_ptr->Add_Max_Volume (pce);
perf_ptr->Add_Veh_Time (tt * pce);
@@ -886,6 +897,7 @@
perf_ptr->Add_Persons (occ);
perf_ptr->Add_Vehicles (veh_type);
perf_ptr->Add_Volume (pce);
+ if (group_flag) perf_ptr->Add_Group_Vol (pce);
if (first) perf_ptr->Add_Enter (pce);
perf_ptr->Add_Max_Volume (pce);
perf_ptr->Add_Veh_Time (tt * pce);
@@ -904,6 +916,7 @@
perf_ptr->Add_Persons (occ);
perf_ptr->Add_Vehicles (veh_type);
perf_ptr->Add_Volume (pce);
+ if (group_flag) perf_ptr->Add_Group_Vol (pce);
if (first) perf_ptr->Add_Exit (pce);
perf_ptr->Add_Max_Volume (pce);
perf_ptr->Add_Veh_Time (tt * pce);
@@ -921,6 +934,7 @@
perf_ptr->Add_Persons (occ);
perf_ptr->Add_Vehicles (veh_type);
perf_ptr->Add_Volume (pce);
+ if (group_flag) perf_ptr->Add_Group_Vol (pce);
if (first) perf_ptr->Add_Exit (pce);
perf_ptr->Add_Max_Volume (pce);
perf_ptr->Add_Veh_Time (tt * pce);
@@ -949,7 +963,7 @@
// Load_Flow
//---------------------------------------------------------
-Dtime Perf_Period_Array::Load_Flow (int dir_index, Dtime tod, Dtime ttime, double len_factor, double len, int veh_type, double pce, double occ, bool forward_flag)
+Dtime Perf_Period_Array::Load_Flow (int dir_index, Dtime tod, Dtime ttime, double len_factor, double len, int veh_type, double pce, double occ, bool group_flag, bool forward_flag)
{
int period, num_periods, end_period, num;
Dtime low, high, end_time, ttim, increment, end_tod;
@@ -1003,6 +1017,7 @@
perf_ptr->Add_Persons (occ);
perf_ptr->Add_Vehicles (veh_type);
perf_ptr->Add_Volume (pce);
+ if (group_flag) perf_ptr->Add_Group_Vol (pce);
perf_ptr->Add_Enter (pce);
perf_ptr->Add_Exit (pce);
perf_ptr->Add_Max_Volume (pce);
@@ -1038,6 +1053,7 @@
perf_ptr->Add_Persons (occ);
perf_ptr->Add_Vehicles (veh_type);
perf_ptr->Add_Volume (pce);
+ if (group_flag) perf_ptr->Add_Group_Vol (pce);
if (first) perf_ptr->Add_Enter (pce);
perf_ptr->Add_Max_Volume (pce);
perf_ptr->Add_Veh_Time (factor * ttime * pce);
@@ -1059,6 +1075,7 @@
perf_ptr->Add_Persons (occ);
perf_ptr->Add_Vehicles (veh_type);
perf_ptr->Add_Volume (pce);
+ if (group_flag) perf_ptr->Add_Group_Vol (pce);
perf_ptr->Add_Enter (pce);
perf_ptr->Add_Exit (pce);
perf_ptr->Add_Max_Volume (pce);
@@ -1094,6 +1111,7 @@
perf_ptr->Add_Persons (occ);
perf_ptr->Add_Vehicles (veh_type);
perf_ptr->Add_Volume (pce);
+ if (group_flag) perf_ptr->Add_Group_Vol (pce);
if (first) perf_ptr->Add_Exit (pce);
perf_ptr->Add_Max_Volume (pce);
perf_ptr->Add_Veh_Time (factor * ttime * pce);
@@ -1156,6 +1174,7 @@
Volume (perf_ptr->Volume ());
Enter (perf_ptr->Enter ());
Exit (perf_ptr->Exit ());
+ Group_Vol (perf_ptr->Group_Vol ());
Veh_Dist (exe->UnRound (perf_ptr->Veh_Dist ()) * person_fac);
Veh_Time (perf_ptr->Veh_Time () * person_fac);
@@ -1299,6 +1318,7 @@
Volume (vol_spd_ptr->Volume ());
Enter (vol_spd_ptr->Volume ());
Exit (vol_spd_ptr->Volume ());
+ Group_Vol (0);
Veh_Dist (vol_spd_ptr->Volume () * exe->UnRound (length));
@@ -1418,6 +1438,8 @@
return (Exit ());
case FAILURE_DATA:
return (Failure ());
+ case GROUP_VOL_DATA:
+ return (Group_Vol ());
case QUEUE_DATA:
return (Queue ());
case MAX_QUEUE_DATA:
@@ -1480,6 +1502,7 @@
Queue (Queue () * factor);
Max_Queue (Queue ());
Failure (Failure () * factor);
+ Group_Vol (Group_Vol () * factor);
Veh_Dist (Veh_Dist () * factor);
Veh_Time (Veh_Time () * factor);
Veh_Delay (Veh_Delay () * factor);
Modified: version7/trunk/Transims70/Data_Service/Read_Performance.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Performance.cpp 2017-12-29 21:33:14 UTC (rev 1694)
+++ version7/trunk/Transims70/Data_Service/Read_Performance.cpp 2017-12-29 21:42:05 UTC (rev 1695)
@@ -103,6 +103,7 @@
perf_ptr->Add_Truck (perf_rec.Truck () * veh_fac);
perf_ptr->Add_Transit (perf_rec.Transit () * veh_fac);
perf_ptr->Add_Volume (perf_rec.Enter ());
+ perf_ptr->Add_Group_Vol (perf_rec.Group_Vol () * veh_fac);
perf_ptr->Sum_Max_Queue (perf_rec.Max_Queue ());
} else {
perf_ptr->Add_Persons (perf_rec.Persons () * share);
@@ -112,6 +113,7 @@
perf_ptr->Add_Truck (perf_rec.Truck () * share);
perf_ptr->Add_Transit (perf_rec.Transit () * share);
perf_ptr->Add_Volume (perf_rec.Volume () * share);
+ perf_ptr->Add_Group_Vol (perf_rec.Group_Vol () * share);
perf_ptr->Add_Max_Queue (perf_rec.Max_Queue ());
}
perf_ptr->Add_Count ();
@@ -308,6 +310,7 @@
perf_rec.Queue (file.Queue ());
perf_rec.Max_Queue (file.Max_Queue ());
perf_rec.Failure (file.Failure ());
+ perf_rec.Group_Vol (file.Group_Vol ());
perf_rec.Veh_Dist (file.Veh_Dist ());
perf_rec.Veh_Time (file.Veh_Time ());
perf_rec.Veh_Delay (file.Veh_Delay ());
Modified: version7/trunk/Transims70/Data_Service/Write_Performance.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Write_Performance.cpp 2017-12-29 21:33:14 UTC (rev 1694)
+++ version7/trunk/Transims70/Data_Service/Write_Performance.cpp 2017-12-29 21:42:05 UTC (rev 1695)
@@ -130,6 +130,7 @@
file.Queue (data.Queue ());
file.Max_Queue (data.Max_Queue ());
file.Failure (data.Failure ());
+ file.Group_Vol (data.Group_Vol ());
file.Veh_Dist (data.Veh_Dist ());
file.Veh_Time (data.Veh_Time ());
file.Veh_Delay (data.Veh_Delay ());
Modified: version7/trunk/Transims70/Data_Service/Write_Plan_Skims.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Write_Plan_Skims.cpp 2017-12-29 21:33:14 UTC (rev 1694)
+++ version7/trunk/Transims70/Data_Service/Write_Plan_Skims.cpp 2017-12-29 21:42:05 UTC (rev 1695)
@@ -19,6 +19,21 @@
Show_Message (String ("Writing %s -- Record") % file->File_Type ());
Set_Progress ();
+ //---- build the map ----
+
+ if (plan_skim_map.size () == 0 && plan_skim_array.size () > 0) {
+ Trip_Index trip_index;
+ Plan_Skim_Itr skim_itr;
+
+ for (count = 0, skim_itr = plan_skim_array.begin (); skim_itr != plan_skim_array.end (); skim_itr++, count++) {
+ skim_itr->Get_Index (trip_index);
+ plan_skim_map.insert (Trip_Map_Data (trip_index, count));
+ }
+ count = 0;
+ }
+
+ //---- write the skim records ----
+
for (itr = plan_skim_map.begin (); itr != plan_skim_map.end (); itr++) {
Show_Progress ();
Modified: version7/trunk/Transims70/Data_Service/Write_Plans.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Write_Plans.cpp 2017-12-29 21:33:14 UTC (rev 1694)
+++ version7/trunk/Transims70/Data_Service/Write_Plans.cpp 2017-12-29 21:42:05 UTC (rev 1695)
@@ -125,15 +125,27 @@
void Data_Service::Write_Plan_Ptrs (void)
{
- int index;
+ int index, count;
+ bool skim_flag;
Plan_Ptr_Itr plan_itr;
Plan_Ptr plan_ptr;
+ Plan_Skim_Data plan_skim;
+ Plan_Skim_File *new_skim_file;;
Plan_File *new_plan_file = System_Plan_File (true);
Show_Message (String ("Writing %s -- Record") % new_plan_file->File_Type ());
Set_Progress ();
+ skim_flag = System_File_Flag (NEW_PLAN_SKIM);
+ count = 0;
+
+ if (skim_flag) {
+ new_skim_file = System_Plan_Skim_File (true);
+ } else {
+ new_skim_file = 0;
+ }
+
if (new_plan_file->Sort_Type () == TRAVELER_SORT) {
Trip_Index trip_index;
Trip_Map_Itr trip_itr;
@@ -150,6 +162,11 @@
new_plan_file->Write_Plan (*plan_ptr);
+ if (skim_flag) {
+ plan_skim.Put_Data (*plan_ptr);
+
+ count += Put_Plan_Skim_Data (*new_skim_file, plan_skim);
+ }
delete plan_ptr;
}
} else if (new_plan_file->Sort_Type () == TIME_SORT) {
@@ -168,6 +185,11 @@
new_plan_file->Write_Plan (*plan_ptr);
+ if (skim_flag) {
+ plan_skim.Put_Data (*plan_ptr);
+
+ count += Put_Plan_Skim_Data (*new_skim_file, plan_skim);
+ }
delete plan_ptr;
}
} else {
@@ -177,6 +199,11 @@
new_plan_file->Write_Plan (*plan_ptr);
+ if (skim_flag) {
+ plan_skim.Put_Data (*plan_ptr);
+
+ count += Put_Plan_Skim_Data (*new_skim_file, plan_skim);
+ }
delete plan_ptr;
}
}
@@ -184,4 +211,9 @@
new_plan_file->Close ();
new_plan_file->Print_Summary (false, process);
+
+ if (skim_flag) {
+ new_skim_file->Close ();
+ Print (2, String ("%s Records = %d") % new_skim_file->File_Type () % count);
+ }
}
Modified: version7/trunk/Transims70/File_Service/Performance_File.cpp
===================================================================
--- version7/trunk/Transims70/File_Service/Performance_File.cpp 2017-12-29 21:33:14 UTC (rev 1694)
+++ version7/trunk/Transims70/File_Service/Performance_File.cpp 2017-12-29 21:42:05 UTC (rev 1695)
@@ -50,7 +50,7 @@
File_ID ("Performance");
link = dir = type = start = end = time = persons = sov = hov2 = hov3p = truck = transit = volume = enter = exit = flow = -1;
- speed = ratio = delay = density = max_density = queue = max_queue = failure = veh_dist = veh_time = veh_delay = -1;
+ speed = ratio = delay = density = max_density = queue = max_queue = failure = group = veh_dist = veh_time = veh_delay = -1;
}
//---------------------------------------------------------
@@ -87,6 +87,7 @@
Add_Field ("AVG_QUEUE", DB_DOUBLE, 4.1, STOPPED, true);
Add_Field ("MAX_QUEUE", DB_DOUBLE, 4.1, STOPPED, true);
Add_Field ("NUM_FAIL", DB_DOUBLE, 4.1, PCE, true);
+ Add_Field ("GROUP_VOL", DB_DOUBLE, 4.1, PCE, true);
Add_Field ("VEH_DIST", DB_DOUBLE, 8.6, EMT, true);
Add_Field ("VEH_TIME", DB_DOUBLE, 8.6, EHT, true);
Add_Field ("VEH_DELAY", DB_DOUBLE, 8.6, EHD, true);
@@ -155,6 +156,7 @@
queue = Optional_Field ("AVG_QUEUE", "QUEUE");
max_queue = Optional_Field ("MAX_QUEUE", "MAX_QUE");
failure = Optional_Field ("NUM_FAIL", "CYCLE_FAIL", "FAILURE");
+ group = Optional_Field ("GROUP_VOL", "GROUP", "SHARE", "SPECIAL");
veh_dist = Optional_Field ("VEH_DIST", "VMT", "VEH_MILES", "VKT");
veh_time = Optional_Field ("VEH_TIME", "VHT", "VEH_HOURS");
veh_delay = Optional_Field ("VEH_DELAY", "VHD", "TOT_DELAY");
@@ -195,6 +197,7 @@
Set_Units (queue, PCE);
Set_Units (max_queue, PCE);
Set_Units (failure, PCE);
+ Set_Units (group, PCE);
Set_Units (veh_dist, EMT);
Set_Units (veh_time, EHT);
Set_Units (veh_delay, EHD);
Modified: version7/trunk/Transims70/Flow_Time_Service/Control.cpp
===================================================================
--- version7/trunk/Transims70/Flow_Time_Service/Control.cpp 2017-12-29 21:33:14 UTC (rev 1694)
+++ version7/trunk/Transims70/Flow_Time_Service/Control.cpp 2017-12-29 21:42:05 UTC (rev 1695)
@@ -12,6 +12,7 @@
{
int i;
String key;
+ Integer_List func_list;
Select_Service::Program_Control ();
@@ -92,5 +93,39 @@
equation.Add_Equation (i, key);
}
}
+
+ //---- capacity factor functions ----
+
+ if (Control_Key_Status (CAPACITY_FACTOR_FUNCTIONS) && !Control_Key_Empty (CAPACITY_FACTOR_FUNCTIONS)) {
+ Print (1);
+ Get_Control_List_Groups (CAPACITY_FACTOR_FUNCTIONS, func_list);
+
+ for (i = 1; i < MAX_FT; i++) {
+ cap_function [i] = func_list.Best (i);
+
+ if (cap_function [i] > 0) {
+ if (!functions.Function_Check (cap_function [i])) {
+ Warning (String ("Capacity Factor Function %d for Facility Type %s was Not Found") % cap_function [i] % Facility_Code ((Facility_Type) i));
+ cap_function [i] = 0;
+ continue;
+ }
+ cap_func_flag = true;
+ }
+ }
+ }
+
+ //---- traveler type group ----
+
+ if (Control_Key_Status (TRAVELER_TYPE_GROUP)) {
+ key = Get_Control_Text (TRAVELER_TYPE_GROUP);
+
+ if (!key.empty () && !key.Equals ("NONE")) {
+ group_flag = true;
+
+ if (!group_range.Add_Ranges (key)) {
+ Error ("Adding Traveler Type Ranges");
+ }
+ }
+ }
}
}
Modified: version7/trunk/Transims70/Flow_Time_Service/Flow_Time_Service.cpp
===================================================================
--- version7/trunk/Transims70/Flow_Time_Service/Flow_Time_Service.cpp 2017-12-29 21:33:14 UTC (rev 1694)
+++ version7/trunk/Transims70/Flow_Time_Service/Flow_Time_Service.cpp 2017-12-29 21:42:05 UTC (rev 1695)
@@ -12,11 +12,12 @@
{
Service_Level (FLOW_TIME_SERVICE);
- flow_updates = turn_updates = time_updates = false;
+ flow_updates = turn_updates = time_updates = cap_func_flag = group_flag = false;
update_rate = 0;
flow_type = VOLUME_DATA;
flow_factor = 1.0;
+ memset (cap_function, '\0', sizeof (cap_function));
}
//---------------------------------------------------------
@@ -34,7 +35,9 @@
{ LINK_FLOW_FACTOR, "LINK_FLOW_FACTOR", LEVEL0, OPT_KEY, FLOAT_KEY, "1.0", "1..100000", NO_HELP },
{ LINK_FLOW_TYPE, "LINK_FLOW_TYPE", LEVEL0, OPT_KEY, TEXT_KEY, "VOLUME", "VOLUME, ENTER, EXIT, FLOW", NO_HELP },
{ EQUATION_PARAMETERS, "EQUATION_PARAMETERS", LEVEL1, OPT_KEY, LIST_KEY, "BPR, 0.15, 4.0, 0.75" , EQUATION_RANGE, NO_HELP },
- END_CONTROL
+ { CAPACITY_FACTOR_FUNCTIONS, "CAPACITY_FACTOR_FUNCTIONS", LEVEL1, OPT_KEY, LIST_KEY, "0" , "0..100", NO_HELP},
+ { TRAVELER_TYPE_GROUP, "TRAVELER_TYPE_GROUP", LEVEL0, OPT_KEY, LIST_KEY, "NONE", RANGE_RANGE, NO_HELP},
+ END_CONTROL
};
if (keys == 0) {
Modified: version7/trunk/Transims70/Flow_Time_Service/Update_Times.cpp
===================================================================
--- version7/trunk/Transims70/Flow_Time_Service/Update_Times.cpp 2017-12-29 21:33:14 UTC (rev 1694)
+++ version7/trunk/Transims70/Flow_Time_Service/Update_Times.cpp 2017-12-29 21:42:05 UTC (rev 1695)
@@ -12,9 +12,9 @@
void Flow_Time_Service::Update_Travel_Times (int time_averaging, int iteration, Dtime first_time)
{
- int i, num, nrec, type, lanes, lanes0, lanes1, cap, capacity, tod_cap, len, len75, index, rec, use_index;
+ int i, num, nrec, type, lanes, lanes0, lanes1, cap, capacity, tod_cap, len, len75, index, rec, use_index, func;
Dtime time0, time, tim, start, tod, period;
- double volume, vol_fac, length, factor, factor1, new_veh_time;
+ double volume, vol_fac, length, factor, factor1, new_veh_time, rate;
bool skip;
bool avg_flag = true;
bool sim_flag = false;
@@ -49,8 +49,9 @@
start = Model_Start_Time () + period / 2;
vol_fac = flow_factor * Dtime (60, MINUTES) / period;
+ func = 0;
- for (index=0, dir_itr = dir_array.begin (); dir_itr != dir_array.end (); dir_itr++, index++) {
+ for (index = 0, dir_itr = dir_array.begin (); dir_itr != dir_array.end (); dir_itr++, index++) {
Show_Progress ();
link_ptr = &link_array [dir_itr->Link ()];
@@ -61,6 +62,10 @@
type = link_ptr->Type ();
+ if (cap_func_flag) {
+ func = cap_function [type];
+ }
+
time0 = dir_itr->Time0 ();
capacity = dir_itr->Capacity ();
lanes = dir_itr->Lanes ();
@@ -165,6 +170,14 @@
if (sim_flag) {
tim = perf_ptr->Average_Time (len);
} else {
+ if (func > 0) {
+ rate = perf_ptr->Volume ();
+
+ if (rate > 0) {
+ rate = perf_ptr->Group_Vol () / rate;
+ tod_cap = DTOI (tod_cap * functions.Apply_Function (func, rate));
+ }
+ }
tim = equation.Apply_Equation (type, time, volume, tod_cap, len, lanes0);
}
if (tim < time0) tim = time0;
@@ -223,6 +236,14 @@
if (sim_flag) {
tim = perf_ptr->Average_Time (len);
} else {
+ if (func > 0) {
+ rate = perf_ptr->Volume ();
+
+ if (rate > 0) {
+ rate = perf_ptr->Group_Vol () / rate;
+ tod_cap = DTOI (tod_cap * functions.Apply_Function (func, rate));
+ }
+ }
tim = equation.Apply_Equation (type, time, volume, tod_cap, len, lanes1);
}
if (tim < time0) tim = time0;
Modified: version7/trunk/Transims70/Include/Flow_Time_Service.hpp
===================================================================
--- version7/trunk/Transims70/Include/Flow_Time_Service.hpp 2017-12-29 21:33:14 UTC (rev 1694)
+++ version7/trunk/Transims70/Include/Flow_Time_Service.hpp 2017-12-29 21:42:05 UTC (rev 1695)
@@ -31,10 +31,13 @@
int Link_Flow_Type (void) { return (flow_type); }
+ bool In_Traveler_Group (int type) { return (group_flag && group_range.In_Range (type)); }
+
protected:
enum Flow_Time_Service_Keys {
UPDATE_FLOW_RATES = FLOW_TIME_SERVICE_OFFSET, UPDATE_TURNING_MOVEMENTS, CLEAR_INPUT_FLOW_RATES,
UPDATE_TRAVEL_TIMES, TIME_UPDATE_RATE, LINK_FLOW_FACTOR, LINK_FLOW_TYPE, EQUATION_PARAMETERS,
+ CAPACITY_FACTOR_FUNCTIONS, TRAVELER_TYPE_GROUP,
};
void Flow_Time_Service_Keys (int *keys = 0);
@@ -56,10 +59,13 @@
private:
- bool update_flag, flow_updates, turn_updates, time_updates;
+ bool update_flag, flow_updates, turn_updates, time_updates, cap_func_flag, group_flag;
int update_rate, flow_type;
double flow_factor;
+ Data_Range group_range;
+
+ int cap_function [MAX_FT];
Equation_Array equation;
};
Modified: version7/trunk/Transims70/Include/Performance_Data.hpp
===================================================================
--- version7/trunk/Transims70/Include/Performance_Data.hpp 2017-12-29 21:33:14 UTC (rev 1694)
+++ version7/trunk/Transims70/Include/Performance_Data.hpp 2017-12-29 21:42:05 UTC (rev 1695)
@@ -41,6 +41,7 @@
double Queue (void) { return (queue); }
double Max_Queue (void) { return (max_queue); }
double Failure (void) { return (failure); }
+ double Group_Vol (void) { return (group); }
double Veh_Dist (void) { return (veh_dist); }
double Veh_Time (void) { return (veh_time); }
double Veh_Delay (void) { return (veh_delay); }
@@ -74,9 +75,10 @@
void Queue (double value) { queue = (float) value; }
void Max_Queue (double value) { max_queue = (float) value; }
void Failure (double value) { failure = (float) value; }
+ void Group_Vol (double value) { group = (float) value; }
void Veh_Dist (double value) { veh_dist = value; }
void Veh_Time (double value) { veh_time = value; }
- void Veh_Delay (double value) { veh_delay = (float) value; }
+ void Veh_Delay (double value) { veh_delay = value; }
void Occupancy (double value) { value1 = (float) value; }
void Stop_Count (double value) { value2 = (float) value; }
void Ratio_Dist (double value) { value1 = (float) value; }
@@ -108,9 +110,10 @@
void Add_Queue (double value) { queue = (float) (queue + value); }
void Add_Max_Queue (double value) { max_queue = (float) (max_queue + value); }
void Add_Failure (double value) { failure = (float) (failure + value); }
+ void Add_Group_Vol (double value) { group = (float) (group + value); }
void Add_Veh_Dist (double value) { veh_dist += value; }
void Add_Veh_Time (double value) { veh_time += value; }
- void Add_Veh_Delay (double value) { veh_delay = (float) (veh_delay + value); }
+ void Add_Veh_Delay (double value) { veh_delay += value; }
void Add_Occupancy (double value) { value1 = (float) (value1 + value); }
void Add_Stop_Count (double value) { value2 = (float) (value2 + value); }
void Add_Ratio_Dist (double value) { value1 = (float) (value1 + value); }
@@ -129,9 +132,9 @@
}
void Zero_Flows (void)
{
- veh_dist = veh_time = 0.0;
+ veh_dist = veh_time = veh_delay = 0.0;
persons = volume = enter = exit = max_volume = queue = max_queue = 0.0;
- failure = veh_delay = value1 = value2 = 0.0; count1 = count2 = 0;
+ failure = group = value1 = value2 = 0.0; count1 = count2 = 0;
memset (vehicles, '\0', sizeof (vehicles));
}
void Set_Flows (Perf_Data *perf_ptr);
@@ -155,7 +158,8 @@
float queue;
float max_queue;
float failure;
- float veh_delay;
+ float group;
+ double veh_delay;
double veh_dist;
double veh_time;
float value1;
@@ -212,8 +216,8 @@
Dtime Travel_Time (int dir_index, Dtime tod, double len_factor = 1.0, bool forward_flag = true);
Dtime Travel_Time (int dir_index, Dtime tod, int leg_len, bool forward_flag = true);
- Dtime Flow_Time (int dir_index, Dtime tod, double len_factor, double len, int veh_type, double pce, double occ, bool forward_flag = true);
- Dtime Load_Flow (int dir_index, Dtime tod, Dtime ttime, double len_factor, double len, int veh_type, double pce, double occ, bool forward_flag = true);
+ Dtime Flow_Time (int dir_index, Dtime tod, double len_factor, double len, int veh_type, double pce, double occ, bool group = false, bool forward = true);
+ Dtime Load_Flow (int dir_index, Dtime tod, Dtime ttime, double len_factor, double len, int veh_type, double pce, double occ, bool group = false, bool forward = true);
Perf_Period * Period_Ptr (Dtime time);
Perf_Period * Period_Ptr (int period) { return (size () > 0 ? &at (period) : 0); }
@@ -260,6 +264,7 @@
double Queue (void) { return (queue); }
double Max_Queue (void) { return (max_queue); }
double Failure (void) { return (failure); }
+ double Group_Vol (void) { return (group); }
double Veh_Dist (void) { return (veh_dist); }
double Veh_Time (void) { return (veh_time); }
double Veh_Delay (void) { return (veh_delay); }
@@ -296,9 +301,10 @@
void Queue (double value) { queue = (float) value; }
void Max_Queue (double value) { max_queue = (float) value; }
void Failure (double value) { failure = (float) value; }
+ void Group_Vol (double value) { group = (float) value; }
void Veh_Dist (double value) { veh_dist = value; }
void Veh_Time (double value) { veh_time = value; }
- void Veh_Delay (double value) { veh_delay = (float) value; }
+ void Veh_Delay (double value) { veh_delay = value; }
void Lane_Len (double value) { lane_len = (float) value; }
void VC_Ratio (double value) { vc_ratio = (float) value; }
void Ratio_Dist (double value) { ratio_dist = (float) value; }
@@ -321,7 +327,7 @@
{
dir_index = type = ratios = count = 0; start = end = time = delay = 0;
persons = sov = hov2 = hov3p = truck = transit = volume = enter = exit = flow = density = max_density = queue = max_queue = failure = 0.0;
- speed = time_ratio = veh_delay = lane_len = vc_ratio = ratio_dist = ratio_time = 0; veh_dist = veh_time = 0.0;
+ speed = time_ratio = group = lane_len = vc_ratio = ratio_dist = ratio_time = 0; veh_dist = veh_time = veh_delay = 0.0;
}
private:
int dir_index;
@@ -347,7 +353,8 @@
float queue;
float max_queue;
float failure;
- float veh_delay;
+ float group;
+ double veh_delay;
double veh_dist;
double veh_time;
float lane_len;
Modified: version7/trunk/Transims70/Include/Performance_File.hpp
===================================================================
--- version7/trunk/Transims70/Include/Performance_File.hpp 2017-12-29 21:33:14 UTC (rev 1694)
+++ version7/trunk/Transims70/Include/Performance_File.hpp 2017-12-29 21:42:05 UTC (rev 1695)
@@ -45,6 +45,7 @@
double Queue (void) { return (Get_Double (queue)); }
double Max_Queue (void) { return (Get_Double (max_queue)); }
double Failure (void) { return (Get_Double (failure)); }
+ double Group_Vol (void) { return (Get_Double (group)); }
double Veh_Dist (void) { return (Get_Double (veh_dist)); }
double Veh_Time (void) { return (Get_Double (veh_time)); }
double Veh_Delay (void) { return (Get_Double (veh_delay)); }
@@ -75,6 +76,7 @@
void Queue (double value) { Put_Field (queue, value); }
void Max_Queue (double value) { Put_Field (max_queue, value); }
void Failure (double value) { Put_Field (failure, value); }
+ void Group_Vol (double value) { Put_Field (group, value); }
void Veh_Dist (double value) { Put_Field (veh_dist, value); }
void Veh_Time (double value) { Put_Field (veh_time, value); }
void Veh_Delay (double value) { Put_Field (veh_delay, value); }
@@ -91,7 +93,7 @@
void Setup (void);
int link, dir, type, start, end, time, persons, sov, hov2, hov3p, truck, transit, volume, enter, exit, flow;
- int speed, delay, density, max_density, ratio, queue, max_queue, failure, veh_dist, veh_time, veh_delay;
+ int speed, delay, density, max_density, ratio, queue, max_queue, failure, group, veh_dist, veh_time, veh_delay;
bool lane_use_flag;
};
Modified: version7/trunk/Transims70/Include/Plan_Skim_File.hpp
===================================================================
--- version7/trunk/Transims70/Include/Plan_Skim_File.hpp 2017-12-29 21:33:14 UTC (rev 1694)
+++ version7/trunk/Transims70/Include/Plan_Skim_File.hpp 2017-12-29 21:42:05 UTC (rev 1695)
@@ -71,9 +71,10 @@
bool Read_Record (int index = 0) { return (Db_Data_Array::Read_Record (index)); }
bool Write_Record (int index= 0) { return (Db_Data_Array::Write_Record (index)); }
- bool Record (Buffer &buf) { return (Plan_Skim_File::Record (buf)); }
- Buffer & Record (void) { return (Plan_Skim_File::Record ()); }
+ int Add_Index (void) { return ((int) data_array.size () + 1); }
+ bool Rewind (void) { return (data_array.Rewind ()); }
+
bool Rewind (void) { return (Db_Data_Array::Rewind ()); }
};
Modified: version7/trunk/Transims70/Include/System_Defines.hpp
===================================================================
--- version7/trunk/Transims70/Include/System_Defines.hpp 2017-12-29 21:33:14 UTC (rev 1694)
+++ version7/trunk/Transims70/Include/System_Defines.hpp 2017-12-29 21:42:05 UTC (rev 1695)
@@ -428,7 +428,7 @@
enum Performance_Type { //---- link performance summary types ----
TTIME_DATA, PERSON_DATA, SOV_DATA, HOV2_DATA, HOV3P_DATA, TRUCK_DATA, TRANSIT_DATA, VEHICLE_DATA,
VOLUME_DATA, ENTER_DATA, EXIT_DATA, FLOW_DATA, SPEED_DATA, RATIO_DATA, DELAY_DATA,
- DENSITY_DATA, MAX_DENSITY_DATA, QUEUE_DATA, MAX_QUEUE_DATA, FAILURE_DATA, VC_DATA,
+ DENSITY_DATA, MAX_DENSITY_DATA, QUEUE_DATA, MAX_QUEUE_DATA, FAILURE_DATA, GROUP_VOL_DATA, VC_DATA,
VMT_DATA, VHT_DATA, VHD_DATA, CONG_TIME_DATA, CONG_VMT_DATA, CONG_VHT_DATA,
PMT_DATA, PHT_DATA, PHD_DATA, CONG_PMT_DATA, CONG_PHT_DATA,
};
Modified: version7/trunk/Transims70/Include/Trip_Index.hpp
===================================================================
--- version7/trunk/Transims70/Include/Trip_Index.hpp 2017-12-29 21:33:14 UTC (rev 1694)
+++ version7/trunk/Transims70/Include/Trip_Index.hpp 2017-12-29 21:42:05 UTC (rev 1695)
@@ -69,4 +69,10 @@
typedef vector <Trip_Index> Trip_Index_Array;
typedef Trip_Index_Array::iterator Trip_Index_Itr;
+typedef vector <Trip_Map> Trip_Map_Array;
+typedef Trip_Map_Array::iterator Trip_Map_Array_Itr;
+
+typedef vector <Trip_Map_Itr> Trip_Map_Itr_Array;
+typedef Trip_Map_Itr_Array::iterator Trip_Map_Itr_Array_Itr;
+
#endif
Modified: version7/trunk/Transims70/LinkSum/Get_Performance_Data.cpp
===================================================================
--- version7/trunk/Transims70/LinkSum/Get_Performance_Data.cpp 2017-12-29 21:33:14 UTC (rev 1694)
+++ version7/trunk/Transims70/LinkSum/Get_Performance_Data.cpp 2017-12-29 21:42:05 UTC (rev 1695)
@@ -103,10 +103,12 @@
perf_ptr->Add_Persons (perf_rec.Enter () * occ_fac);
perf_ptr->Add_Volume (perf_rec.Enter ());
perf_ptr->Sum_Max_Queue (perf_rec.Max_Queue ());
+ perf_ptr->Add_Group_Vol (perf_rec.Enter ());
} else {
perf_ptr->Add_Persons (perf_rec.Persons () * share);
perf_ptr->Add_Volume (perf_rec.Volume () * share);
perf_ptr->Add_Max_Queue (perf_rec.Max_Queue ());
+ perf_ptr->Add_Group_Vol (perf_rec.Group_Vol () * share);
}
perf_ptr->Add_Count ();
perf_ptr->Add_Enter (perf_rec.Enter () * share);
Modified: version7/trunk/Transims70/LinkSum/LinkSum.cpp
===================================================================
--- version7/trunk/Transims70/LinkSum/LinkSum.cpp 2017-12-29 21:33:14 UTC (rev 1694)
+++ version7/trunk/Transims70/LinkSum/LinkSum.cpp 2017-12-29 21:42:05 UTC (rev 1695)
@@ -13,7 +13,7 @@
LinkSum::LinkSum (void) : Select_Service ()
{
Program ("LinkSum");
- Version (6);
+ Version (7);
Title ("Summarize Link Performance Data");
System_File_Type required_files [] = {
Modified: version7/trunk/Transims70/LinkSum/Write_Link_Data.cpp
===================================================================
--- version7/trunk/Transims70/LinkSum/Write_Link_Data.cpp 2017-12-29 21:33:14 UTC (rev 1694)
+++ version7/trunk/Transims70/LinkSum/Write_Link_Data.cpp 2017-12-29 21:42:05 UTC (rev 1695)
@@ -146,6 +146,9 @@
case FAILURE_DATA:
value = data.Failure ();
break;
+ case GROUP_VOL_DATA:
+ value = data.Group_Vol ();
+ break;
case VC_DATA:
value = data.VC_Ratio ();
break;
Modified: version7/trunk/Transims70/LinkSum/Write_Link_Dir.cpp
===================================================================
--- version7/trunk/Transims70/LinkSum/Write_Link_Dir.cpp 2017-12-29 21:33:14 UTC (rev 1694)
+++ version7/trunk/Transims70/LinkSum/Write_Link_Dir.cpp 2017-12-29 21:42:05 UTC (rev 1695)
@@ -148,6 +148,9 @@
case FAILURE_DATA:
value = data.Failure ();
break;
+ case GROUP_VOL_DATA:
+ value = data.Group_Vol ();
+ break;
case VC_DATA:
value = data.VC_Ratio ();
break;
@@ -275,6 +278,9 @@
case FAILURE_DATA:
value = data.Failure ();
break;
+ case GROUP_VOL_DATA:
+ value = data.Group_Vol ();
+ break;
case VC_DATA:
value = data.VC_Ratio ();
break;
Modified: version7/trunk/Transims70/ModeChoice/Choice_Data.cpp
===================================================================
--- version7/trunk/Transims70/ModeChoice/Choice_Data.cpp 2017-12-29 21:33:14 UTC (rev 1694)
+++ version7/trunk/Transims70/ModeChoice/Choice_Data.cpp 2017-12-29 21:42:05 UTC (rev 1695)
@@ -16,14 +16,23 @@
Plan_Skim_File_Ptr skim_ptr;
Int_Map_Itr map_itr;
Split_Data split_data;
+ Plan_Array tour;
//---- set the plan skim records ----
+ if (thread_flag && !plan_skim_flag) {
+ split_data.plan_tours.assign (index_array.size (), tour);
+ }
+
for (i = 0, index_itr = index_array.begin (); index_itr != index_array.end (); index_itr++, i++) {
skim_ptr = plan_skims [i];
if (*index_itr == trip_index) {
skim_ptr->Record (index_skims [i]->Record ());
+
+ if (thread_flag && !plan_skim_flag) {
+ split_data.plan_tours [i] = plan_tours [i];
+ }
} else {
skim_ptr->Reset_Record ();
}
@@ -35,9 +44,6 @@
//---- copy the plans ----
if (thread_flag) {
- if (!plan_skim_flag) {
- split_data.plan_tours = plan_tours;
- }
split_queue.Put (split_data);
} else {
(*choice_process)->Mode_Splits (split_data);
Modified: version7/trunk/Transims70/ModeChoice/Choice_Process.cpp
===================================================================
--- version7/trunk/Transims70/ModeChoice/Choice_Process.cpp 2017-12-29 21:33:14 UTC (rev 1694)
+++ version7/trunk/Transims70/ModeChoice/Choice_Process.cpp 2017-12-29 21:42:05 UTC (rev 1695)
@@ -216,9 +216,16 @@
}
}
- if (exe->plan_flag) {
- if (!exe->plan_skim_flag) {
- exe->plan_ptr_array.insert (exe->plan_ptr_array.end (), plan_ptr_array.begin (), plan_ptr_array.end ());
+ if (exe->new_plan_flag) {
+ exe->plan_ptr_array.insert (exe->plan_ptr_array.end (), plan_ptr_array.begin (), plan_ptr_array.end ());
+ } else if (exe->new_skim_flag) {
+ exe->plan_skim_array.insert (exe->plan_skim_array.end (), new_skim_array.begin (), new_skim_array.end ());
+ }
+ if (exe->new_plan_flag && exe->skim_memory_flag) {
+ Trip_Map_Itr itr;
+
+ for (itr = trip_mode.begin (); itr != trip_mode.end (); itr++) {
+ exe->trip_mode.insert (*itr);
}
}
}
Modified: version7/trunk/Transims70/ModeChoice/Control.cpp
===================================================================
--- version7/trunk/Transims70/ModeChoice/Control.cpp 2017-12-29 21:33:14 UTC (rev 1694)
+++ version7/trunk/Transims70/ModeChoice/Control.cpp 2017-12-29 21:42:05 UTC (rev 1695)
@@ -27,7 +27,9 @@
Integer_List int_list;
Plan_File_Ptr file;
Plan_Skim_File_Ptr skim_ptr;
+ Plan_Skim_File_Itr skim_itr;
Plan_Skim_Data_Ptr data_ptr;
+ Trip_Map skim_map;
Int_Itr int_itr;
Converge_Service::Program_Control ();
@@ -1009,9 +1011,7 @@
skim_memory_flag = Get_Control_Flag (PLAN_SKIMS_IN_MEMORY);
if (skim_memory_flag) {
- Plan_Skim_File_Itr itr;
-
- for (itr = plan_skims.begin (); itr != plan_skims.end (); itr++) {
+ for (skim_itr = plan_skims.begin (); skim_itr != plan_skims.end (); skim_itr++) {
data_ptr = new Plan_Skim_Data_Array;
data_ptr->Plan_Skim_File::File_Access (MODIFY);
@@ -1019,6 +1019,7 @@
data_ptr->Plan_Skim_File::Create_Fields ();
plan_skim_arrays.push_back (data_ptr);
+ skim_index_array.push_back (skim_map);
}
}
}
@@ -1062,8 +1063,28 @@
data_file.Create (Project_Filename (key));
data_flag = true;
}
+ } else {
+
+ //---- plan skims in memory -----
+
+ if (plan_flag) {
+ skim_memory_flag = Get_Control_Flag (PLAN_SKIMS_IN_MEMORY);
+
+ if (skim_memory_flag) {
+ for (skim_itr = plan_skims.begin (); skim_itr != plan_skims.end (); skim_itr++) {
+ data_ptr = new Plan_Skim_Data_Array;
+
+ data_ptr->Plan_Skim_File::File_Access (MODIFY);
+ data_ptr->Plan_Skim_File::File_Format (BINARY);
+ data_ptr->Plan_Skim_File::Create_Fields ();
+
+ plan_skim_arrays.push_back (data_ptr);
+ skim_index_array.push_back (skim_map);
+ }
+ }
+ }
}
-
+
//---- create the new choice detail file ----
#ifdef DUMP_DATA
Modified: version7/trunk/Transims70/ModeChoice/Execute.cpp
===================================================================
--- version7/trunk/Transims70/ModeChoice/Execute.cpp 2017-12-29 21:33:14 UTC (rev 1694)
+++ version7/trunk/Transims70/ModeChoice/Execute.cpp 2017-12-29 21:42:05 UTC (rev 1695)
@@ -104,13 +104,19 @@
}
}
+ thread_flag = (Num_Threads () > 1);
+
+ //---- read skims into memory ----
+
+ if (skim_memory_flag) {
+ Read_Skims ();
+ }
+
//---- choice processing threads ----
Show_Message ("Creating Choice Processor =");
Set_Progress ();
- thread_flag = (Num_Threads () > 1);
-
choice_process = new Choice_Process * [Num_Threads ()];
if (thread_flag) {
@@ -143,7 +149,9 @@
save_summit_flag = (save_flag && summit_flag);
save_access_flag = ((save_flag || iter_save_flag) && access_flag);
- if (plan_skim_flag) {
+ if (skim_memory_flag) {
+ Skim_Choice ();
+ } else if (plan_skim_flag) {
Read_Plan_Skims ();
} else if (plan_flag) {
if (System_File_Flag (NEW_PARK_DEMAND)) {
@@ -154,6 +162,15 @@
Zone_Tables ();
}
+ if (thread_flag) {
+ for (i = 0; i < Num_Threads (); i++) {
+ choice_process [i]->Sum_Totals ();
+ }
+ if (skim_memory_flag && new_plan_flag) {
+ Select_Plans ();
+ }
+ }
+
//---- calibrate the constants ----
if (calib_flag) {
@@ -169,8 +186,12 @@
//---- update the parking penalties ----
if (penalty_update_flag) {
+ bool qflag = Quiet ();
+ Quiet (true);
Update_Parking_Penalties (false);
+ Quiet (qflag);
}
+
if (save_flag) break;
if (iter_save_flag) {
@@ -269,10 +290,14 @@
Write_Park_Demand ();
}
- //---- write plans ----
+ //---- write plans and skims ----
- if (thread_flag && new_plan_flag) {
- Write_Plan_Ptrs ();
+ if (thread_flag) {
+ if (new_plan_flag) {
+ Write_Plan_Ptrs ();
+ } else if (new_skim_flag) {
+ Write_Plan_Skims ();
+ }
}
//---- close the choice detail file ----
Copied: version7/trunk/Transims70/ModeChoice/Memory_Skims.cpp (from rev 1694, version7/branches/aecom/Transims70/ModeChoice/Memory_Skims.cpp)
===================================================================
--- version7/trunk/Transims70/ModeChoice/Memory_Skims.cpp (rev 0)
+++ version7/trunk/Transims70/ModeChoice/Memory_Skims.cpp 2017-12-29 21:42:05 UTC (rev 1695)
@@ -0,0 +1,90 @@
+//*********************************************************
+// Memory_Skims.cpp - read the skims into memory
+//*********************************************************
+
+#include "ModeChoice.hpp"
+
+//---------------------------------------------------------
+// Memory_Skims
+//---------------------------------------------------------
+
+void ModeChoice::Read_Process::Memory_Skims (int i)
+{
+ int index;
+ bool msg_flag;
+
+ Trip_Index trip_index, tour_index;
+ Trip_Map_Itr trip_itr;
+ Plan_Data plan_data;
+ Plan_Skim_Data data;
+
+ Plan_File *plan_file;
+ Plan_Skim_File *plan_skim_file;
+ Plan_Skim_Data_Ptr plan_skim;
+ Trip_Map *skim_index;
+
+ skim_index = &exe->skim_index_array [i];
+ plan_skim = exe->plan_skim_arrays [i];
+
+ msg_flag = (i == 0 || !exe->thread_flag);
+
+ if (exe->plan_skim_flag) {
+ plan_skim_file = exe->plan_skim_files [i];
+
+ while (plan_skim_file->Read_Record ()) {
+ if (msg_flag) exe->Show_Progress ();
+
+ plan_skim_file->Get_Index (trip_index);
+
+ //---- check for a tour leg ----
+
+ if (exe->tour_choice_flag && trip_index.Trip () > 1) {
+ tour_index = trip_index;
+ tour_index.Trip (1);
+
+ trip_itr = skim_index->find (tour_index);
+
+ if (trip_itr != skim_index->end ()) {
+ plan_skim->Read_Record (trip_itr->second);
+ plan_skim->Add_Leg (plan_skim_file->Get_Data (data));
+ plan_skim->Write_Record (trip_itr->second);
+ continue;
+ }
+ }
+ index = plan_skim->Add_Index ();
+
+ skim_index->insert (Trip_Map_Data (trip_index, index));
+
+ plan_skim->Put_Data (plan_skim_file->Get_Data (data));
+ plan_skim->Write_Record ();
+ }
+ } else {
+ plan_file = exe->plan_files [i];
+
+ while (plan_file->Read_Plan (plan_data)) {
+ if (msg_flag) exe->Show_Progress ();
+
+ plan_data.Get_Index (trip_index);
+
+ if (exe->tour_choice_flag && trip_index.Trip () > 1) {
+ tour_index = trip_index;
+ tour_index.Trip (1);
+
+ trip_itr = skim_index->find (tour_index);
+
+ if (trip_itr != skim_index->end ()) {
+ plan_skim->Read_Record (trip_itr->second);
+ plan_skim->Add_Leg (plan_data);
+ plan_skim->Write_Record (trip_itr->second);
+ continue;
+ }
+ }
+ index = plan_skim->Add_Index ();
+
+ skim_index->insert (Trip_Map_Data (trip_index, index));
+
+ plan_skim->Put_Data (plan_data);
+ plan_skim->Write_Record ();
+ }
+ }
+}
Modified: version7/trunk/Transims70/ModeChoice/ModeChoice.cpp
===================================================================
--- version7/trunk/Transims70/ModeChoice/ModeChoice.cpp 2017-12-29 21:33:14 UTC (rev 1694)
+++ version7/trunk/Transims70/ModeChoice/ModeChoice.cpp 2017-12-29 21:42:05 UTC (rev 1695)
@@ -11,7 +11,7 @@
ModeChoice::ModeChoice (void) : Converge_Service ()
{
Program ("ModeChoice");
- Version (16);
+ Version (18);
Title ("Mode Choice Processing");
System_File_Type required_files[] = {
Modified: version7/trunk/Transims70/ModeChoice/ModeChoice.hpp
===================================================================
--- version7/trunk/Transims70/ModeChoice/ModeChoice.hpp 2017-12-29 21:33:14 UTC (rev 1694)
+++ version7/trunk/Transims70/ModeChoice/ModeChoice.hpp 2017-12-29 21:42:05 UTC (rev 1695)
@@ -113,6 +113,9 @@
Plan_Skim_File *new_plan_skim;
Plan_Skim_Data_Arrays plan_skim_arrays;
+ Trip_Map_Array skim_index_array;
+ Trip_Map trip_mode;
+
Db_Header segment_file, target_file, constant_file, calib_file, prod_file, attr_file, bias_file;
Db_File script_file, summary_file, market_file, data_file, mode_seg_file;
#ifdef DUMP_DATA
@@ -156,11 +159,14 @@
void Segment_Map (void);
void Read_Targets (void);
void Target_Header (void);
+ void Read_Skims (void);
+ void Skim_Choice (void);
void Read_Plans (void);
bool Transit_Crowding (Plan_Ptr plan_ptr);
void Read_Plan_Skims (void);
void Choice_Data (Trip_Index trip_index);
void Zone_Tables (void);
+ void Select_Plans (void);
bool Adjust_Constants (void);
void Calib_Header (void);
void Mode_Summary (int segment = 0);
@@ -190,11 +196,34 @@
typedef Bounded_Queue <Split_Data> Split_Queue;
Split_Queue split_queue;
+
+ typedef Bounded_Queue <int> Skim_Number;
+
+ Skim_Number skim_number;
bool thread_flag;
Threads threads;
//---------------------------------------------------------
+ // Read_Process - read skim files
+ //---------------------------------------------------------
+
+ class Read_Process
+ {
+ public:
+ Read_Process (ModeChoice *_exe);
+
+ void operator()();
+
+ void Memory_Skims (int i);
+
+ private:
+ ModeChoice *exe;
+ };
+
+ Read_Process **read_process;
+
+ //---------------------------------------------------------
// Choice_Process - mode split processings
//---------------------------------------------------------
@@ -235,8 +264,10 @@
Dbls_Array values;
Doubles mode_sum;
Integers mode_plan;
+ Trip_Map trip_mode;
Plan_Ptr_Array plan_ptr_array;
+ Plan_Skim_Array new_skim_array;
};
Choice_Process **choice_process;
Modified: version7/trunk/Transims70/ModeChoice/ModeChoice.vcxproj
===================================================================
--- version7/trunk/Transims70/ModeChoice/ModeChoice.vcxproj 2017-12-29 21:33:14 UTC (rev 1694)
+++ version7/trunk/Transims70/ModeChoice/ModeChoice.vcxproj 2017-12-29 21:42:05 UTC (rev 1695)
@@ -169,6 +169,7 @@
<ClCompile Include="Crowding.cpp" />
<ClCompile Include="Execute.cpp" />
<ClCompile Include="Get_Zone_Data.cpp" />
+ <ClCompile Include="Memory_Skims.cpp" />
<ClCompile Include="ModeChoice.cpp" />
<ClCompile Include="Mode_Splits.cpp" />
<ClCompile Include="Mode_Summary.cpp" />
@@ -176,9 +177,13 @@
<ClCompile Include="Read_Mode_Bias.cpp" />
<ClCompile Include="Read_Plans.cpp" />
<ClCompile Include="Read_Plan_Skims.cpp" />
+ <ClCompile Include="Read_Process.cpp" />
+ <ClCompile Include="Read_Skims.cpp" />
<ClCompile Include="Read_Targets.cpp" />
<ClCompile Include="Run_Model.cpp" />
<ClCompile Include="Segment_Map.cpp" />
+ <ClCompile Include="Select_Plans.cpp" />
+ <ClCompile Include="Skim_Choice.cpp" />
<ClCompile Include="Value_Summary.cpp" />
<ClCompile Include="Write_Market.cpp" />
<ClCompile Include="Write_Mode_Seg.cpp" />
Modified: version7/trunk/Transims70/ModeChoice/ModeChoice.vcxproj.filters
===================================================================
--- version7/trunk/Transims70/ModeChoice/ModeChoice.vcxproj.filters 2017-12-29 21:33:14 UTC (rev 1694)
+++ version7/trunk/Transims70/ModeChoice/ModeChoice.vcxproj.filters 2017-12-29 21:42:05 UTC (rev 1695)
@@ -94,5 +94,20 @@
<ClCompile Include="Crowding.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="Memory_Skims.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="Read_Process.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="Read_Skims.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="Skim_Choice.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="Select_Plans.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
</Project>
\ No newline at end of file
Modified: version7/trunk/Transims70/ModeChoice/Mode_Splits.cpp
===================================================================
--- version7/trunk/Transims70/ModeChoice/Mode_Splits.cpp 2017-12-29 21:33:14 UTC (rev 1694)
+++ version7/trunk/Transims70/ModeChoice/Mode_Splits.cpp 2017-12-29 21:42:05 UTC (rev 1695)
@@ -28,6 +28,7 @@
Plan_Itr plan_itr;
Plan_Ptr plan_ptr;
Trip_Index trip_index;
+ Plan_Skim_Data skim;
Plan_Skim_File_Itr skim_itr;
Plan_Skim_File_Ptr skim_ptr;
@@ -176,6 +177,7 @@
#endif
for (i = 0; i < exe->num_modes; i++) {
sum = mode_sum [i];
+
if (sum > zero_sum) {
utility [i] = exp (sum);
#ifdef DUMP_DATA
@@ -297,146 +299,161 @@
num = -1;
for (i = 0; i < exe->num_modes; i++) {
- if (exe->mode_nested [i] < 0 && utility [i] > 0) {
- sum += utility [i] * value;
+ if (exe->mode_nested [i] >= 0 || utility [i] <= 0) continue;
+ sum += utility [i] * value;
- //---- save the choice ----
+ if (prob > sum) continue;
- if (prob <= sum) {
+ //---- save the choice ----
- #ifdef DUMP_DATA
- if (exe->dump_flag) {
- exe->dump_file.File () << (String ("\nselect mode=%d plan=%d") % i % mode_plan [i]);
+ #ifdef DUMP_DATA
+ if (exe->dump_flag) {
+ exe->dump_file.File () << (String ("\nselect mode=%d plan=%d") % i % mode_plan [i]);
+ }
+ #endif
+ map_itr = exe->plan_num_map.find (mode_plan [i]);
+ if (map_itr == exe->plan_num_map.end ()) break;
+
+ num = map_itr->second;
+
+ trips = plan_skims->at (num)->Get_Integer (exe->num_legs_field);
+
+ if (exe->sum_flag) {
+ for (j = 0; j <= exe->const_field; j++) {
+ dvalue = values [i] [j] * trips;
+
+ if (exe->mode_value_flag) {
+ (*value_sum_ptr) [0] [i] [j] += dvalue;
}
- #endif
- map_itr = exe->plan_num_map.find (mode_plan [i]);
- if (map_itr == exe->plan_num_map.end ()) break;
+ if (exe->seg_value_flag) {
+ (*value_sum_ptr) [segment] [i] [j] += dvalue;
+ }
+ }
+ }
+ if (exe->summary_flag) {
+ (*market_seg_ptr) [0] [i] [model] += trips;
+ (*market_seg_ptr) [0] [i] [exe->num_models] += trips;
+ (*market_seg_ptr) [0] [exe->num_modes] [model] += trips;
+ (*market_seg_ptr) [0] [exe->num_modes] [exe->num_models] += trips;
+ }
+ if (exe->market_flag && segment > 0) {
+ (*market_seg_ptr) [segment] [i] [model] += trips;
+ (*market_seg_ptr) [segment] [i] [exe->num_models] += trips;
+ (*market_seg_ptr) [segment] [exe->num_modes] [model] += trips;
+ (*market_seg_ptr) [segment] [exe->num_modes] [exe->num_models] += trips;
+ }
+ if (exe->prod_sum_flag) {
+ (*prod_share_ptr) [i] [o1] += trips;
+ (*prod_share_ptr) [exe->num_modes] [o1] += trips;
+ }
+ if (exe->attr_sum_flag) {
+ (*attr_share_ptr) [i] [d1] += trips;
+ (*attr_share_ptr) [exe->num_modes] [d1] += trips;
+ }
- num = map_itr->second;
+ //---- identified nested models ----
- trips = plan_skims->at (num)->Get_Integer (exe->num_legs_field);
+ mode = i;
- if (exe->sum_flag) {
- for (j = 0; j <= exe->const_field; j++) {
- dvalue = values [i] [j] * trips;
+ for (n = exe->num_nests - 1; n >= 0; n--) {
+ nest = -1;
+ nest_ptr = &exe->nested_modes [n];
- if (exe->mode_value_flag) {
- (*value_sum_ptr) [0] [i] [j] += dvalue;
- }
- if (exe->seg_value_flag) {
- (*value_sum_ptr) [segment] [i] [j] += dvalue;
- }
- }
+ for (mode_itr = nest_ptr->begin (); mode_itr != nest_ptr->end (); mode_itr++) {
+ if (*mode_itr == mode) {
+ nest = exe->nest_mode [n];
+ break;
}
+ }
+
+ if (nest >= 0) {
if (exe->summary_flag) {
- (*market_seg_ptr) [0] [i] [model] += trips;
- (*market_seg_ptr) [0] [i] [exe->num_models] += trips;
- (*market_seg_ptr) [0] [exe->num_modes] [model] += trips;
- (*market_seg_ptr) [0] [exe->num_modes] [exe->num_models] += trips;
+ (*market_seg_ptr) [0] [nest] [model] += trips;
+ (*market_seg_ptr) [0] [nest] [exe->num_models] += trips;
}
if (exe->market_flag && segment > 0) {
- (*market_seg_ptr) [segment] [i] [model] += trips;
- (*market_seg_ptr) [segment] [i] [exe->num_models] += trips;
- (*market_seg_ptr) [segment] [exe->num_modes] [model] += trips;
- (*market_seg_ptr) [segment] [exe->num_modes] [exe->num_models] += trips;
+ (*market_seg_ptr) [segment] [nest] [model] += trips;
+ (*market_seg_ptr) [segment] [nest] [exe->num_models] += trips;
}
if (exe->prod_sum_flag) {
- (*prod_share_ptr) [i] [o1] += trips;
- (*prod_share_ptr) [exe->num_modes] [o1] += trips;
+ (*prod_share_ptr) [nest] [o1] += trips;
}
if (exe->attr_sum_flag) {
- (*attr_share_ptr) [i] [d1] += trips;
- (*attr_share_ptr) [exe->num_modes] [d1] += trips;
+ (*attr_share_ptr) [nest] [d1] += trips;
}
+ mode = nest;
+ }
+ }
- //---- identified nested models ----
+ //---- save the plan ----
- mode = i;
+ if (exe->save_flag) {
- for (n = exe->num_nests - 1; n >= 0; n--) {
- nest = -1;
- nest_ptr = &exe->nested_modes [n];
-
- for (mode_itr = nest_ptr->begin (); mode_itr != nest_ptr->end (); mode_itr++) {
- if (*mode_itr == mode) {
- nest = exe->nest_mode [n];
- break;
- }
+ if (exe->new_plan_flag) {
+ if (exe->skim_memory_flag) {
+ if (exe->thread_flag) {
+ trip_mode.insert (Trip_Map_Data (trip_index, num));
+ } else {
+ exe->trip_mode.insert (Trip_Map_Data (trip_index, num));
}
-
- if (nest >= 0) {
- if (exe->summary_flag) {
- (*market_seg_ptr) [0] [nest] [model] += trips;
- (*market_seg_...
[truncated message content] |